Changeset 3527 for trunk/LMDZ.COMMON/libf/evolution/NS_dyn_ss_ice_m.F90
- Timestamp:
- Nov 20, 2024, 3:53:19 PM (25 hours ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/evolution/NS_dyn_ss_ice_m.F90
r3526 r3527 1 MODULE dyn_ss_ice_m_mod 2 3 implicit none 4 5 CONTAINS 6 1 7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2 8 !!! … … 15 21 ! orbital elements remain constant 16 22 !*********************************************************************** 17 use miscparameters, only : pi, d2r, NMAX, marsDay, solsperyear 18 !use allinterfaces 23 use constants_marspem_mod, only: sec_per_sol 24 use fast_subs_mars, only: psv, icelayer_mars, NMAX 25 #ifndef CPP_STD 26 use comcstfi_h, only: pi 27 #else 28 use comcstfi_mod, only: pi 29 #endif 19 30 implicit none 20 31 integer, parameter :: NP=1 ! # of sites … … 105 116 ! print *,' latitude (deg)',latitude(k),' rho*c (J/m^3/K)',rhoc(k),' thIn=',thIn(k) 106 117 ! print *,' total pressure=',p0(k),'partial pressure=',pfrost(k) 107 delta = thIn(k)/rhoc(k)*sqrt( marsDay/pi)118 delta = thIn(k)/rhoc(k)*sqrt(sec_per_sol/pi) 108 119 ! print *,' skin depths (m)',delta,delta*sqrt(solsperyear) 109 120 call soilthprop(porosity,1.d0,rhoc(k),thIn(k),1,newrhoc,newti,icefrac) … … 170 181 171 182 end subroutine dyn_ss_ice_m 183 184 !======================================================================= 185 186 subroutine soilthprop(porosity,fill,rhocobs,tiobs,layertype, & 187 & newrhoc,newti,icefrac) 188 !*********************************************************************** 189 ! soilthprop: assign thermal properties of icy soil or dirty ice 190 ! 191 ! porositiy = void space / total volume 192 ! rhof = density of free ice in space not occupied by regolith [kg/m^3] 193 ! fill = rhof/icedensity <=1 (only relevant for layertype 1) 194 ! rhocobs = heat capacity per volume of dry regolith [J/m^3] 195 ! tiobs = thermal inertia of dry regolith [SI-units] 196 ! layertype: 1=interstitial ice, 2=pure ice or ice with dirt 197 ! 3=pure ice, 4=ice-cemented soil, 5=custom values 198 ! icefrac: fraction of ice in icelayer (only relevant for layertype 2) 199 ! output are newti and newrhoc 200 !*********************************************************************** 201 implicit none 202 integer, intent(IN) :: layertype 203 real(8), intent(IN) :: porosity, fill, rhocobs, tiobs 204 real(8), intent(OUT) :: newti, newrhoc 205 real(8), intent(IN) :: icefrac 206 real(8) kobs, cice, icedensity, kice 207 !parameter (cice=2000.d0, icedensity=926.d0, kice=2.4d0) ! unaffected by scaling 208 parameter (cice=1540.d0, icedensity=927.d0, kice=3.2d0) ! at 198 Kelvin 209 real(8) fA, ki0, ki, k 210 real(8), parameter :: kw=3. ! Mellon et al., JGR 102, 19357 (1997) 211 212 kobs = tiobs**2/rhocobs 213 ! k, rhoc, and ti are defined in between grid points 214 ! rhof and T are defined on grid points 215 216 newrhoc = -9999. 217 newti = -9999. 218 219 select case (layertype) 220 case (1) ! interstitial ice 221 newrhoc = rhocobs + porosity*fill*icedensity*cice 222 if (fill>0.) then 223 !--linear addition (option A) 224 k = porosity*fill*kice + kobs 225 !--Mellon et al. 1997 (option B) 226 ki0 = porosity/(1/kobs-(1-porosity)/kw) 227 fA = sqrt(fill) 228 ki = (1-fA)*ki0 + fA*kice 229 !k = kw*ki/((1-porosity)*ki+porosity*kw) 230 else 231 k = kobs 232 endif 233 newti = sqrt(newrhoc*k) 234 235 case (2) ! massive ice (pure or dirty ice) 236 newrhoc = rhocobs*(1.-icefrac)/(1.-porosity) + icefrac*icedensity*cice 237 k = icefrac*kice + (1.-icefrac)*kw 238 newti = sqrt(newrhoc*k) 239 240 case (3) ! all ice, special case of layertype 2, which doesn't use porosity 241 newrhoc = icedensity*cice 242 k = kice 243 newti = sqrt(newrhoc*k) 244 245 case (4) ! pores completely filled with ice, special case of layertype 1 246 newrhoc = rhocobs + porosity*icedensity*cice 247 k = porosity*kice + kobs ! option A, end-member case of type 1, option A 248 !k = kw*kice/((1-porosity)*kice+porosity*kw) ! option B, harmonic average 249 newti = sqrt(newrhoc*k) 250 251 case (5) ! custom values 252 ! values from Mellon et al. (2004) for ice-cemented soil 253 newrhoc = 2018.*1040. 254 k = 2.5 255 newti = sqrt(newrhoc*k) 256 257 case default 258 error stop 'invalid layer type' 259 260 end select 261 262 end subroutine soilthprop 263 264 265 !======================================================================= 266 267 real*8 function frostpoint(p) 268 ! inverse of psv 269 ! input is partial pressure [Pascal] 270 ! output is temperature [Kelvin] 271 implicit none 272 real*8 p 273 274 !-----inverse of parametrization 1 275 ! real*8 DHmelt,DHvap,DHsub,R,pt,Tt 276 ! parameter (DHmelt=6008.,DHvap=45050.) 277 ! parameter (DHsub=DHmelt+DHvap) 278 ! parameter (R=8.314,pt=6.11e2,Tt=273.16) 279 ! frostpoint = 1./(1./Tt-R/DHsub*log(p/pt)) 280 281 !-----inverse of parametrization 2 282 ! inverse of eq. (2) in Murphy & Koop (2005) 283 real*8 A,B 284 parameter (A=-6143.7, B=28.9074) 285 frostpoint = A / (log(p) - B) 286 287 !-----approximate inverse of parametrization 3 288 ! eq. (8) in Murphy & Koop (2005) 289 ! frostpoint = (1.814625*log(p) + 6190.134)/(29.120 - log(p)) 290 291 end function frostpoint 292 293 END MODULE dyn_ss_ice_m_mod
Note: See TracChangeset
for help on using the changeset viewer.