Changeset 2863
- Timestamp:
- Jan 12, 2023, 12:14:38 AM (2 years ago)
- Location:
- trunk/LMDZ.COMMON/libf/evolution
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/evolution/adsorption_mod.F90
r2849 r2863 3 3 contains 4 4 5 subroutine regolith_h2oadsorption(ngrid,nslope,nsoil_PEM,timelen, ps,q_co2,q_h2o,tsoil_PEM,TI_PEM, theta_h2o_adsorbded,m_h2o_adsorbed) 6 #ifndef CPP_STD 7 use vertical_layers_mod, ONLY: ap,bp 8 use comsoil_h_PEM, only: n_1km 5 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 6 !!! 7 !!! Purpose: Compute CO2 and H2O adsorption, following the methods from Zent & Quinn 1995, Jackosky et al., 1997 8 !!! 9 !!! Author: LL, 01/2023 10 !!! 11 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 12 13 subroutine regolith_adsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,tsoil_PEM,TI_PEM,ps,q_co2,q_h2o, & 14 m_h2o_completesoil,delta_mh2oreg, m_co2_completesoil,delta_mco2reg) 15 #ifndef CPP_STD 16 ! inputs 17 INTEGER,INTENT(IN) :: ngrid, nslope, nsoil_PEM,timelen ! size dimension: physics x subslope x soil x timeseries 18 REAL,INTENT(IN) :: tend_h2oglaciers(ngrid,nslope),tend_co2glaciers(ngrid,nslope) !tendancies on the glaciers [1] 19 REAL,INTENT(IN) :: waterice(ngrid,nslope) ! water ice at the surface [kg/m^2] 20 REAL,INTENT(IN) :: co2ice(ngrid,nslope) ! co2 ice at the surface [kg/m^2] 21 REAL,INTENT(IN) :: TI_PEM(ngrid,nsoil_PEM,nslope) ! Soil Thermal inertia (J/K/^2/s^1/2) 22 REAL,INTENT(IN) :: tsoil_PEM(ngrid,nsoil_PEM,nslope) ! Soil temperature (K) 23 REAL,INTENT(IN) :: ps(ngrid,timelen) ! Average surface pressure [Pa] 24 REAL,INTENT(IN) :: q_co2(ngrid,timelen) ! Mass mixing ratio of co2 in the first layer (kg/kg) 25 REAL,INTENT(IN) :: q_h2o(ngrid,timelen) ! Mass mixing ratio of H2o in the first layer (kg/kg) 26 27 ! outputs 28 REAL,INTENT(INOUT) :: m_h2o_completesoil(ngrid,nsoil_PEM,nslope) ! Density of h2o adsorbed (kg/m^3)(ngrid,nsoil_PEM,nslope) 29 REAL,INTENT(OUT) :: delta_mh2oreg(ngrid) ! Difference density of h2o adsorbed (kg/m^3) 30 31 REAL,INTENT(INOUT) :: m_co2_completesoil(ngrid,nsoil_PEM,nslope) ! Density of co2 adsorbed (kg/m^3) 32 REAL,INTENT(OUT) :: delta_mco2reg(ngrid) ! Difference density of co2 adsorbed (kg/m^3) 33 34 ! local variables 35 REAL :: theta_h2o_adsorbded(ngrid,nsoil_PEM,nslope) ! Fraction of the pores occupied by H2O molecules 36 ! ------------- 37 38 ! Compute H2O adsorption, then CO2 adsorption 39 40 call regolith_h2oadsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,ps,q_co2,q_h2o,tsoil_PEM,TI_PEM, & 41 theta_h2o_adsorbded,m_h2o_completesoil,delta_mh2oreg) 42 43 44 call regolith_co2adsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,ps,q_co2,q_h2o, & 45 tsoil_PEM,TI_PEM,m_co2_completesoil,delta_mco2reg) 46 47 #endif 48 RETURN 49 end subroutine 50 51 !------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 52 53 subroutine regolith_h2oadsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,ps,q_co2,q_h2o,tsoil_PEM,TI_PEM, & 54 theta_h2o_adsorbded,m_h2o_completesoil,delta_mreg) 55 56 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 57 !!! 58 !!! Purpose: Compute H2O adsorption, following the methods from Jackosky et al., 1997 59 !!! 60 !!! Author: LL, 01/2023 61 !!! 62 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 63 64 #ifndef CPP_STD 65 use comsoil_h_PEM, only: layer_PEM, mlayer_PEM,n_1km 66 USE comcstfi_h, only: pi 67 use comslope_mod, only : subslope_dist,def_slope_mean 68 use vertical_layers_mod, ONLY: ap,bp 9 69 #endif 10 70 11 71 implicit none 12 72 ! inputs 13 73 INTEGER,INTENT(IN) :: ngrid, nslope, nsoil_PEM,timelen ! size dimension 74 REAL,INTENT(IN) :: tend_h2oglaciers(ngrid,nslope),tend_co2glaciers(ngrid,nslope) !tendancies on the glaciers () 75 REAL,INTENT(IN) :: waterice(ngrid,nslope) ! water ice at the surface [kg/m^2] 76 REAL,INTENT(IN) :: co2ice(ngrid,nslope) ! co2 ice at the surface [kg/m^2] 14 77 REAL,INTENT(IN) :: ps(ngrid,timelen) ! surface pressure (Pa) 15 78 REAL,INTENT(IN) :: q_co2(ngrid,timelen) ! Mass mixing ratio of co2 in the first layer (kg/kg) … … 18 81 REAL,INTENT(IN) :: tsoil_PEM(ngrid,nsoil_PEM,nslope) ! Soil temperature (K) 19 82 20 ! output 21 REAL,INTENT( OUT) :: m_h2o_adsorbed(ngrid,nsoil_PEM,nslope) ! Density of h2o adsorbed (kg/m^3)83 ! outputs 84 REAL,INTENT(INOUT) :: m_h2o_completesoil(ngrid,nsoil_PEM,nslope) ! Density of h2o adsorbed (kg/m^3)(ngrid,nsoil_PEM,nslope) 22 85 REAL,INTENT(OUT) :: theta_h2o_adsorbded(ngrid,nsoil_PEM,nslope) ! Fraction of the pores occupied by H2O molecules 23 24 ! constant 86 REAL,INTENT(OUT) :: delta_mreg(ngrid) ! Difference density of h2o adsorbed (kg/m^3) 87 88 ! constants 25 89 REAL :: Ko = 1.57e-8 ! Jackosky et al. 1997 26 90 REAL :: e = 2573.9 ! Jackosky et al. 1997 27 91 REAL :: mu = 0.48 ! Jackosky et al. 1997 28 REAL :: inertie_thresold = 800. ! TI > 800 means cementation 92 real :: m_theta = 2.84e-7 ! Mass of h2o per m^2 absorbed Jackosky et al. 1997 93 real :: as = 18.9e3 ! Specific area, Buhler & Piqueux 2021 94 real :: inertie_thresold = 800. ! TI > 800 means cementation 29 95 real :: m_h2o = 18.01528E-3 ! Molecular weight of h2o (kg/mol) 30 96 real :: m_co2 = 44.01E-3 ! Molecular weight of co2 (kg/mol) 31 97 real :: m_noco2 = 33.37E-3 ! Molecular weight of non co2 (kg/mol) 32 REAL :: rho_regolith = 2000. ! density of the reoglith, Buhler & Piqueux 202198 real :: rho_regolith = 1500. ! density of the regolith (2000 for buhler & piqueux 2021) 33 99 real :: alpha_clapeyron = -6143.7! eq. (2) in Murphy & Koop 2005 34 100 real :: beta_clapeyron = 28.9074 ! eq. (2) in Murphy & Koop 2005 35 real :: mi = 2.84e-7 ! Mass of h2o per m^2 absorbed Jackosky et al. 1997 36 real :: as = 18.9e3 ! Specific area, Buhler & Piqueux 2021 37 38 ! local variable 101 ! local variables 102 #ifndef CPP_STD 103 REAL :: deltam_reg_complete(ngrid,n_1km,nslope) ! Difference in the mass per slope and soil layer (kg/m^3) 104 #endif 105 real :: K ! Used to compute theta 106 integer ig,iloop, islope,isoil,it ! for loops 107 INTEGER :: ispermanent_co2glaciers(ngrid,nslope) ! Check if the co2 glacier is permanent 108 INTEGER :: ispermanent_h2oglaciers(ngrid,nslope) ! Check if the h2o glacier is permanent 109 REAL :: deltam_reg_slope(ngrid,nslope) ! Difference density of h2o adsorbed per slope (kg/m^3) 110 REAL :: dm_h2o_regolith_slope(ngrid,nsoil_PEM,nslope) ! elementary h2o mass adsorded per mesh per slope 39 111 real :: A,B ! Used to compute the mean mass above the surface 40 real :: K ! Used to compute theta41 112 real :: p_sat ! saturated vapor pressure of ice 42 integer ig,iloop, islope,isoil,it ! for loops43 113 real,allocatable :: mass_mean(:,:) ! mean mass above the surface 44 114 real,allocatable :: zplev_mean(:,:) ! pressure above the surface 45 115 real,allocatable :: pvapor(:,:) ! partial pressure above the surface 46 real, allocatable :: pvapor_avg(:) ! yearly average vapor pressure above the surface116 real, allocatable :: pvapor_avg(:) ! yearly 47 117 48 118 ! 0. Some initializations 119 #ifndef CPP_STD 49 120 50 121 allocate(mass_mean(ngrid,timelen)) … … 52 123 allocate(pvapor(ngrid,timelen)) 53 124 allocate(pvapor_avg(ngrid)) 54 55 56 57 m_h2o_adsorbed(:,:,:) = 0. 58 theta_h2o_adsorbded(:,:,:) = 0. 59 A =(1/m_co2 - 1/m_noco2) 60 B=1/m_noco2 61 #ifndef CPP_STD 62 ! 1. Compute rho surface yearly averaged 63 64 ! 1.1 Compute the partial pressure of vapor 125 A =(1/m_co2 - 1/m_noco2) 126 B=1/m_noco2 127 theta_h2o_adsorbded(:,:,:) = 0. 128 dm_h2o_regolith_slope(:,:,:) = 0. 129 130 !0.1 Look at perenial ice 131 do ig = 1,ngrid 132 do islope = 1,nslope 133 if((abs(tend_h2oglaciers(ig,islope)).gt.1e-5).and.(abs(waterice(ig,islope)).gt.0)) then 134 ispermanent_h2oglaciers(ig,islope) = 1 135 else 136 ispermanent_h2oglaciers(ig,islope) = 0 137 endif 138 139 if((abs(tend_co2glaciers(ig,islope)).gt.1e-5).and.(abs(co2ice(ig,islope)).gt.0)) then 140 ispermanent_co2glaciers(ig,islope) = 1 141 else 142 ispermanent_co2glaciers(ig,islope) = 0 143 endif 144 enddo 145 enddo 146 147 ! 0.2 Compute the partial pressure of vapor 65 148 !a. the molecular mass into the column 66 149 do ig = 1,ngrid 67 150 mass_mean(ig,:) = 1/(A*q_co2(ig,:) +B) 68 151 enddo 152 69 153 70 154 ! b. pressure level … … 74 158 enddo 75 159 enddo 76 77 160 ! c. Vapor pressure 78 161 pvapor(:,:) = mass_mean(:,:)/m_h2o*q_h2o(:,:)*zplev_mean(:,:) 79 162 pvapor_avg(:) = sum(pvapor(:,:),2)/timelen 80 81 163 deallocate(pvapor) 82 164 deallocate(zplev_mean) 83 165 deallocate(mass_mean) 84 166 85 ! 2. we compute the mass of co2adsorded in each layer of the meshes167 ! 1. we compute the mass of H2O adsorded in each layer of the meshes 86 168 87 169 do ig = 1,ngrid 88 170 do islope = 1,nslope 89 171 do iloop = 1,n_1km 90 K = Ko*exp(e/tsoil_PEM(ig,iloop,islope)) 91 if(TI_PEM(ig,iloop,islope).lt.inertie_thresold) then 92 93 theta_h2o_adsorbded(ig,iloop,islope) = (K*pvapor_avg(ig)/(1+K*pvapor_avg(ig)))**mu 94 m_h2o_adsorbed(ig,iloop,islope) = as*theta_h2o_adsorbded(ig,iloop,islope)*mi*rho_regolith 95 else 172 K = Ko*exp(e/tsoil_PEM(ig,iloop,islope)) 173 if(TI_PEM(ig,iloop,islope).lt.inertie_thresold) then 174 theta_h2o_adsorbded(ig,iloop,islope) = (K*pvapor_avg(ig)/(1+K*pvapor_avg(ig)))**mu 175 else 96 176 p_sat =exp(alpha_clapeyron/tsoil_PEM(ig,iloop,islope) +beta_clapeyron) ! we assume fixed temperature in the ice ... not really:q good but ... 97 177 theta_h2o_adsorbded(ig,iloop,islope) = (K*p_sat/(1+K*p_sat))**mu 98 m_h2o_adsorbed(ig,iloop,islope) =as*theta_h2o_adsorbded(ig,iloop,islope)*mi*rho_regolith99 endif178 endif 179 dm_h2o_regolith_slope(ig,iloop,islope) = as*theta_h2o_adsorbded(ig,iloop,islope)*m_theta*rho_regolith 100 180 enddo 101 181 enddo 102 182 enddo 103 183 184 ! 2. Check the exchange between the atmosphere and the regolith 185 186 do ig = 1,ngrid 187 delta_mreg(ig) = 0. 188 do islope = 1,nslope 189 deltam_reg_slope(ig,islope) = 0. 190 do iloop = 1,n_1km 191 if((TI_PEM(ig,iloop,islope).lt.inertie_thresold).and.(ispermanent_h2oglaciers(ig,islope).eq.0).and.(ispermanent_co2glaciers(ig,islope).eq.0)) then 192 deltam_reg_complete(ig,iloop,islope) = (dm_h2o_regolith_slope(ig,iloop,islope) - m_h2o_completesoil(ig,iloop,islope)) & 193 *(layer_PEM(iloop+1) - layer_PEM(iloop)) 194 else ! NO EXCHANGE AS ICE BLOCK THE DYNAMIC! 195 deltam_reg_complete(ig,iloop,islope) = 0. 196 endif 197 deltam_reg_slope(ig,islope) = deltam_reg_slope(ig,islope) + deltam_reg_complete(ig,iloop,islope) 198 enddo 199 delta_mreg(ig) = delta_mreg(ig) + deltam_reg_slope(ig,islope)*subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.) 200 enddo 201 enddo 202 m_h2o_completesoil(:,:,:) = dm_h2o_regolith_slope(:,:,:) 203 204 104 205 RETURN 105 206 #endif 106 207 end subroutine 107 208 108 SUBROUTINE regolith_co2adsorption(ngrid,nslope,nsoil_PEM,timelen,ps,tsoil_PEM,TI_PEM,tend_h2oglaciers,tend_co2glaciers,co2ice,waterice,q_co2,q_h2o,m_co2_completesoil,delta_mreg) 209 !------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 210 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 211 !!! 212 !!! Purpose: Compute CO2 following the methods from Zent & Quinn 1995 213 !!! 214 !!! Author: LL, 01/2023 215 !!! 216 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 217 218 SUBROUTINE regolith_co2adsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,ps,q_co2,q_h2o,& 219 tsoil_PEM,TI_PEM,m_co2_completesoil,delta_mreg) 109 220 #ifndef CPP_STD 110 221 use comsoil_h_PEM, only: layer_PEM, mlayer_PEM,n_1km 111 USE comcstfi_h, only: r, cpp, mugaz, g, rcp, pi, rad222 USE comcstfi_h, only: pi 112 223 use comslope_mod, only : subslope_dist,def_slope_mean 113 224 use vertical_layers_mod, ONLY: ap,bp … … 115 226 116 227 IMPLICIT NONE 117 ! Input :228 ! Inputs: 118 229 INTEGER,INTENT(IN) :: ngrid, nslope, nsoil_PEM,timelen ! size dimension 119 230 REAL,INTENT(IN) :: ps(ngrid,timelen) ! Average surface pressure [Pa] … … 127 238 ! Outputs: 128 239 REAL,INTENT(INOUT) :: m_co2_completesoil(ngrid,nsoil_PEM,nslope) ! Density of co2 adsorbed (kg/m^3) 129 REAL,INTENT( INOUT) :: delta_mreg(ngrid)! Difference density of co2 adsorbed (kg/m^3)240 REAL,INTENT(OUT) :: delta_mreg(ngrid) ! Difference density of co2 adsorbed (kg/m^3) 130 241 131 242 ! Constants: … … 134 245 REAL :: beta = -1541.5 ! Zent & Quinn 1995 135 246 REAL :: inertie_thresold = 800. ! TI > 800 means cementation 136 REAL :: rho_regolith = 2000. ! density of the reoglith, buhler & piqueux 2021247 REAL :: rho_regolith = 1500. ! density of the reoglith, buhler & piqueux 2021 137 248 real :: m_co2 = 44.01E-3 ! Molecular weight of co2 (kg/mol) 138 249 real :: m_noco2 = 33.37E-3 ! Molecular weight of h2o (kg/mol) … … 144 255 INTEGER :: ig,islope,iloop,it ! for loops 145 256 REAL :: dm_co2_regolith_slope(ngrid,nsoil_PEM,nslope) ! elementary mass adsorded per mesh per slope 146 INTEGER :: ispermanent_co2glaciers(ngrid,nslope) ! Check if the glacier is permanent147 INTEGER :: ispermanent_h2oglaciers(ngrid,nslope) ! Check if the glacier is permanent257 INTEGER :: ispermanent_co2glaciers(ngrid,nslope) ! Check if the co2 glacier is permanent 258 INTEGER :: ispermanent_h2oglaciers(ngrid,nslope) ! Check if the h2o glacier is permanent 148 259 #ifndef CPP_STD 149 260 REAL :: deltam_reg_complete(ngrid,n_1km,nslope) ! Difference in the mass per slope and soil layer (kg/m^3) … … 152 263 REAL :: m_h2o_adsorbed(ngrid,nsoil_PEM,nslope) ! Density of CO2 adsorbed (kg/m^3) 153 264 REAL :: theta_h2o_adsorbed(ngrid,nsoil_PEM,nslope) ! Fraction of the pores occupied by H2O molecules 265 REAL :: delta_mh2o(ngrid) ! Difference density of h2o adsorbed (kg/m^3) 154 266 !timelen array are allocated because heavy ... 155 267 real,allocatable :: mass_mean(:,:) ! mean mass above the surface … … 194 306 !a. the molecular mass into the column 195 307 do ig = 1,ngrid 196 mass_mean(ig,:) = 1 /(A*q_co2(ig,:) +B)308 mass_mean(ig,:) = 1./(A*q_co2(ig,:) +B) 197 309 enddo 198 310 … … 214 326 215 327 ! 1. Compute the fraction of the pores occupied by H2O 216 call regolith_h2oadsorption(ngrid,nslope,nsoil_PEM,timelen, ps,q_co2,q_h2o,tsoil_PEM,TI_PEM,theta_h2o_adsorbed, m_h2o_adsorbed) 328 329 call regolith_h2oadsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,ps,q_co2,q_h2o,tsoil_PEM,TI_PEM, & 330 theta_h2o_adsorbed, m_h2o_adsorbed,delta_mh2o) 331 332 217 333 218 334 ! 2. we compute the mass of co2 adsorded in each layer of the meshes … … 225 341 (alpha*pco2_avg(ig)+sqrt(tsoil_PEM(ig,iloop,islope))*exp(beta/tsoil_PEM(ig,iloop,islope))) 226 342 else 227 if(abs(m_co2_completesoil(ig,iloop,islope)).lt. 1-10) then !!! we are at first call343 if(abs(m_co2_completesoil(ig,iloop,islope)).lt.(1e-10)) then !!! we are at first call 228 344 dm_co2_regolith_slope(ig,iloop,islope) = as*rho_regolith*m_theta*(1-theta_h2o_adsorbed(ig,iloop,islope))*alpha*pco2_avg(ig) & 229 345 /(alpha*pco2_avg(ig)+sqrt(tsoil_PEM(ig,iloop,islope))*exp(beta/tsoil_PEM(ig,iloop,islope))) … … 236 352 enddo 237 353 238 ! 2. Check the exchange between the atmosphere and the regolith354 ! 3. Check the exchange between the atmosphere and the regolith 239 355 240 356 do ig = 1,ngrid … … 245 361 if((TI_PEM(ig,iloop,islope).lt.inertie_thresold).and.(ispermanent_h2oglaciers(ig,islope).eq.0).and.(ispermanent_co2glaciers(ig,islope).eq.0)) then 246 362 deltam_reg_complete(ig,iloop,islope) = (dm_co2_regolith_slope(ig,iloop,islope) - m_co2_completesoil(ig,iloop,islope)) & 247 *(layer_PEM(iloop+1) - layer_PEM(iloop)) 363 *(layer_PEM(iloop+1) - layer_PEM(iloop)) 248 364 else ! NO EXCHANGE AS ICE BLOCK THE DYNAMIC! 249 365 deltam_reg_complete(ig,iloop,islope) = 0. … … 254 370 enddo 255 371 enddo 256 372 m_co2_completesoil(:,:,:) = dm_co2_regolith_slope(:,:,:) 257 373 258 374 !======================================================================= -
trunk/LMDZ.COMMON/libf/evolution/comsoil_h_PEM.F90
r2855 r2863 20 20 real,parameter :: fluxgeo = 30e-3 ! Geothermal flux [W/m^2] 21 21 real, save, allocatable :: co2_adsorbded_phys(:,:,:) ! co2 that is in the regolith [kg/m^2] 22 real, save, allocatable :: h2o_adsorbded_phys(:,:,:) ! h2o that is in the regolith [kg/m^2] 22 23 LOGICAL soil_pem ! True by default, to run with the subsurface physic. Read in pem.def 23 24 … … 30 31 integer,intent(in) :: nslope ! number of slope within a mesh 31 32 32 allocate(layer_PEM(nsoilmx_PEM)) !soil layer depths33 allocate(mlayer_PEM(0:nsoilmx_PEM-1)) ! soil mid-layer depths34 allocate(TI_PEM(ngrid,nsoilmx_PEM,nslope)) ! soil thermal inertia35 allocate(tsoil_PEM(ngrid,nsoilmx_PEM,nslope)) ! soil temperatures33 allocate(layer_PEM(nsoilmx_PEM)) 34 allocate(mlayer_PEM(0:nsoilmx_PEM-1)) 35 allocate(TI_PEM(ngrid,nsoilmx_PEM,nslope)) 36 allocate(tsoil_PEM(ngrid,nsoilmx_PEM,nslope)) 36 37 allocate(mthermdiff_PEM(ngrid,0:nsoilmx_PEM-1)) 37 38 allocate(thermdiff_PEM(ngrid,nsoilmx_PEM-1)) … … 40 41 allocate(alph_PEM(ngrid,nsoilmx_PEM-1,nslope)) 41 42 allocate(beta_PEM(ngrid,nsoilmx_PEM-1,nslope)) 42 allocate(inertiedat_PEM(ngrid,nsoilmx_PEM)) ! soil thermal inertia43 allocate(inertiedat_PEM(ngrid,nsoilmx_PEM)) 43 44 allocate(co2_adsorbded_phys(ngrid,nsoilmx_PEM,nslope)) 45 allocate(h2o_adsorbded_phys(ngrid,nsoilmx_PEM,nslope)) 44 46 end subroutine ini_comsoil_h_PEM 45 47 … … 61 63 if (allocated(inertiedat_PEM)) deallocate(inertiedat_PEM) 62 64 if (allocated(co2_adsorbded_phys)) deallocate(co2_adsorbded_phys) 65 if (allocated(h2o_adsorbded_phys)) deallocate(h2o_adsorbded_phys) 63 66 end subroutine end_comsoil_h_PEM 64 67 -
trunk/LMDZ.COMMON/libf/evolution/conf_pem.F90
r2859 r2863 1 1 MODULE conf_pem_mod 2 2 3 IMPLICIT NONE4 3 5 CONTAINS6 4 7 SUBROUTINE conf_pem8 5 9 #ifdef CPP_IOIPSL10 use IOIPSL, only: getin11 #else12 ! if not using IOIPSL, we still need to use (a local version of) getin13 use ioipsl_getincom, only: getin14 #endif15 16 USE temps_mod_evol, ONLY: year_bp_ini, dt_pem, alpha_criterion, &17 Max_iter_pem, evol_orbit_pem18 USE comsoil_h_pem, only: soil_pem19 6 20 21 !PEM parameter22 year_bp_ini=0.23 CALL getin('year_bp_ini', year_bp_ini)24 7 25 dt_pem=126 CALL getin('dt_pem', dt_pem)27 8 28 alpha_criterion=0.229 CALL getin('alpha_criterion', alpha_criterion)30 9 31 evol_orbit_pem=.false.32 CALL getin('evol_orbit_pem', evol_orbit_pem)33 10 34 Max_iter_pem=9999999935 CALL getin('Max_iter_pem', Max_iter_pem)36 11 37 soil_pem=.true.38 CALL getin('soil_pem', soil_pem)39 12 40 END SUBROUTINE conf_pem41 13 42 14 END MODULE conf_pem_mod 15 -
trunk/LMDZ.COMMON/libf/evolution/evol_co2_ice_s_mod_slope.F90
r2842 r2863 11 11 !======================================================================= 12 12 ! 13 ! Routine that compute the evolution of the waterice13 ! Routine that compute the evolution of the CO2 ice 14 14 ! 15 15 !======================================================================= … … 35 35 STOPPING=.false. 36 36 37 ! Evolution of the waterice for each physical point37 ! Evolution of the CO2 ice for each physical point 38 38 do i=1,ngrid 39 39 do islope=1,nslope -
trunk/LMDZ.COMMON/libf/evolution/evol_h2o_ice_s_mod_slope.F90
r2857 r2863 102 102 enddo 103 103 104 105 real_coefficient=negative_part/pos_tend 106 if(pos_tend.eq.0) real_coefficient = 0. 107 104 105 if(pos_tend.eq.0) then 106 real_coefficient = 0. 107 else 108 real_coefficient = negative_part/pos_tend 109 endif 108 110 do i=1,ngrid 109 111 do islope=1, nslope -
trunk/LMDZ.COMMON/libf/evolution/pem.F90
r2859 r2863 83 83 USE infotrac 84 84 USE geometry_mod, only: latitude_deg 85 86 85 use conf_pem_mod, only: conf_pem 87 86 use pemredem, only: pemdem1 … … 91 90 TI_PEM,inertiedat_PEM,alph_PEM, beta_PEM, & ! soil thermal inertia 92 91 tsoil_PEM, mlayer_PEM,layer_PEM, & !number of subsurface layers, soil mid layer depths 93 fluxgeo, co2_adsorbded_phys ! geothermal flux, mass of co2in the regolith94 use adsorption_mod, only : regolith_ co2adsorption92 fluxgeo, co2_adsorbded_phys, h2o_adsorbded_phys ! geothermal flux, mass of co2 & h2o in the regolith 93 use adsorption_mod, only : regolith_adsorption 95 94 96 95 !!! For orbit parameters … … 264 263 REAL,ALLOCATABLE :: Tsurfave_before_saved(:,:) ! Surface temperature saved from previous time step [K] 265 264 REAL, ALLOCATABLE :: delta_co2_adsorbded(:) ! Physics: quantity of CO2 that is exchanged because of adsorption / desorption [kg/m^2] 266 REAL :: totmass_adsorbded ! Total mass of CO2 that is exchanged because of adsorption / desoprtion over the planets [kg] 265 REAL, ALLOCATABLE :: delta_h2o_adsorbded(:) ! Physics: quantity of H2O that is exchanged because of adsorption / desorption [kg/m^2] 266 REAL :: totmassco2_adsorbded ! Total mass of CO2 that is exchanged because of adsorption / desoprtion over the planets [kg] 267 REAL :: totmassh2o_adsorbded ! Total mass of H2O that is exchanged because of adsorption / desoprtion over the planets [kg] 267 268 REAL :: alpha_clap_h2o = -6143.7 ! coeffcient to compute psat, from Murphie et Kood 2005 [K] 268 269 REAL :: beta_clap_h2o = 28.9074 ! coefficient to compute psat, from Murphie et Kood 2005 [1] … … 322 323 !----------------------------READ run.def --------------------- 323 324 CALL conf_gcm( 99, .TRUE. ) 324 CALL conf_pem 325 325 CALL conf_pem 326 326 327 call infotrac_init 327 328 nq=nqtot … … 529 530 allocate(tsoil_phys_PEM_timeseries(ngrid,nsoilmx_PEM,nslope,timelen)) 530 531 allocate(delta_co2_adsorbded(ngrid)) 532 allocate(delta_h2o_adsorbded(ngrid)) 531 533 allocate(watersurf_density_timeseries(iim+1,jjm+1,nslope,timelen)) 532 534 allocate(watersoil_density_timeseries(iim+1,jjm+1,nsoilmx,nslope,timelen)) … … 786 788 !---------------------------- Read the PEMstart --------------------- 787 789 788 call pemetat0( .false.,"startfi_PEM.nc",ngrid,nsoilmx,nsoilmx_PEM,nslope,timelen,timestep,TI_PEM,tsoil_ave_phys_yr1,tsoil_PEM,ice_depth, &790 call pemetat0("startfi_PEM.nc",ngrid,nsoilmx,nsoilmx_PEM,nslope,timelen,timestep,TI_PEM,tsoil_ave_phys_yr1,tsoil_PEM,ice_depth, & 789 791 tsurf_ave_phys_yr1, tsurf_ave_phys, q_co2_PEM_phys, q_h2o_PEM_phys,ps_phys_timeseries,tsoil_phys_PEM_timeseries,& 790 tendencies_h2o_ice_phys_slope,tendencies_co2_ice_phys_slope,co2ice_slope,qsurf_slope(:,igcm_h2o_ice,:),global_ave_press_GCM, co2_adsorbded_phys,delta_co2_adsorbded,& 791 watersurf_density_phys_ave,watersoil_density_phys_PEM_ave) 792 tendencies_h2o_ice_phys_slope,tendencies_co2_ice_phys_slope,co2ice_slope,qsurf_slope(:,igcm_h2o_ice,:),global_ave_press_GCM,& 793 watersurf_density_phys_ave,watersoil_density_phys_PEM_ave, & 794 co2_adsorbded_phys,delta_co2_adsorbded,h2o_adsorbded_phys,delta_h2o_adsorbded) 792 795 793 796 if(soil_pem) then 794 totmass _adsorbded = 0.795 797 totmassco2_adsorbded = 0. 798 totmassh2o_adsorbded = 0. 796 799 do ig = 1,ngrid 797 800 do islope =1, nslope 798 801 do l = 1,nsoilmx_PEM - 1 799 totmass_adsorbded = totmass_adsorbded + co2_adsorbded_phys(ig,l,islope)*(layer_PEM(l+1) - layer_PEM(l))* & 802 totmassco2_adsorbded = totmassco2_adsorbded + co2_adsorbded_phys(ig,l,islope)*(layer_PEM(l+1) - layer_PEM(l))* & 803 subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.) * & 804 cell_area(ig) 805 totmassh2o_adsorbded = totmassh2o_adsorbded + h2o_adsorbded_phys(ig,l,islope)*(layer_PEM(l+1) - layer_PEM(l))* & 800 806 subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.) * & 801 807 cell_area(ig) … … 804 810 enddo 805 811 806 write(*,*) "Tot mass in the regolith=", totmass_adsorbded 812 write(*,*) "Tot mass of CO2 in the regolith=", totmassco2_adsorbded 813 write(*,*) "Tot mass of H2O in the regolith=", totmassh2o_adsorbded 807 814 deallocate(tsoil_ave_phys_yr1) 808 815 endif !soil_pem … … 856 863 print *, 'Global average pressure old time step',global_ave_press_old 857 864 print *, 'Global average pressure new time step',global_ave_press_new 858 859 do i=1,ngrid860 if(soil_pem) then861 862 end if863 end do865 866 if(soil_pem) then 867 do i=1,ngrid 868 global_ave_press_new = global_ave_press_new -g*cell_area(i)*delta_co2_adsorbded(i)/Total_surface 869 enddo 870 endif 864 871 print *, 'Global average pressure old time step',global_ave_press_old 865 872 print *, 'Global average pressure new time step',global_ave_press_new … … 1097 1104 1098 1105 ! II_d.5 Update the mass of the regolith adsorbded 1099 call regolith_co2adsorption(ngrid,nslope,nsoilmx_PEM,timelen,ps_phys_timeseries,tsoil_PEM,TI_PEM,tendencies_h2o_ice_phys_slope,tendencies_co2_ice_phys_slope, & 1100 co2ice_slope,qsurf_slope(:,igcm_h2o_ice,:), q_co2_PEM_phys,q_h2o_PEM_phys,co2_adsorbded_phys,delta_co2_adsorbded) 1106 1107 call regolith_adsorption(ngrid,nslope,nsoilmx_PEM,timelen,tendencies_h2o_ice_phys_slope,tendencies_co2_ice_phys_slope,qsurf_slope(:,igcm_h2o_ice,:),co2ice_slope, & 1108 tsoil_PEM,TI_PEM,ps_phys_timeseries,q_co2_PEM_phys,q_h2o_PEM_phys, & 1109 h2o_adsorbded_phys,delta_h2o_adsorbded,co2_adsorbded_phys,delta_co2_adsorbded) 1101 1110 1102 1111 endif !soil_pem … … 1264 1273 enddo 1265 1274 1266 write(*,*) 'rapport ps',global_ave_press_new/global_ave_press_GCM1267 1268 1275 ! III_a.5 Tracer (for start) 1269 1276 allocate(zplev_new(ngrid,nlayer+1)) … … 1379 1386 1380 1387 call pemdem1("restartfi_PEM.nc",year_iter,nsoilmx_PEM,ngrid,nslope , & 1381 tsoil_PEM, TI_PEM, ice_depth,co2_adsorbded_phys )1388 tsoil_PEM, TI_PEM, ice_depth,co2_adsorbded_phys,h2o_adsorbded_phys) 1382 1389 1383 1390 print *, "restartfi_PEM.nc has been written" -
trunk/LMDZ.COMMON/libf/evolution/pemetat0.F90
r2855 r2863 1 SUBROUTINE pemetat0( startpem_file,filename,ngrid,nsoil_GCM,nsoil_PEM,nslope,timelen,timestep,TI_PEM,tsoil_PEM_yr1,tsoil_PEM,ice_table, &1 SUBROUTINE pemetat0(filename,ngrid,nsoil_GCM,nsoil_PEM,nslope,timelen,timestep,TI_PEM,tsoil_PEM_yr1,tsoil_PEM,ice_table, & 2 2 tsurf_ave_yr1,tsurf_ave_yr2,q_co2,q_h2o,ps_inst,tsoil_inst,tend_h2oglaciers,tend_co2glaciers,co2ice,waterice, & 3 global_ave_pressure, m_co2_regolith_phys,deltam_co2_regolith_phys, watersurf_ave,watersoil_ave)3 global_ave_pressure,watersurf_ave,watersoil_ave, m_co2_regolith_phys,deltam_co2_regolith_phys, m_h2o_regolith_phys,deltam_h2o_regolith_phys) 4 4 5 5 use iostart_PEM, only: open_startphy, close_startphy, get_field, get_var 6 6 use comsoil_h_PEM, only: soil_pem,layer_PEM, mlayer_PEM,n_1km,fluxgeo,inertiedat_PEM 7 7 use comsoil_h, only: volcapa,inertiedat 8 use adsorption_mod, only : regolith_ co2adsorption8 use adsorption_mod, only : regolith_adsorption 9 9 USE temps_mod_evol, ONLY: year_PEM 10 10 11 11 12 implicit none 12 13 13 14 character(len=*), intent(in) :: filename ! name of the startfi_PEM.nc 14 LOGICAL,intent(in) :: startpem_file ! boolean to check if we read the startfile or not15 15 integer,intent(in) :: ngrid ! # of physical grid points 16 16 integer,intent(in) :: nsoil_GCM ! # of vertical grid points in the GCM … … 40 40 real,intent(inout) :: m_co2_regolith_phys(ngrid,nsoil_PEM,nslope) ! mass of co2 adsorbed [kg/m^2] 41 41 real,intent(out) :: deltam_co2_regolith_phys(ngrid) ! mass of co2 that is exchanged due to adsorption desorption [kg/m^2] 42 real,intent(inout) :: m_h2o_regolith_phys(ngrid,nsoil_PEM,nslope) ! mass of h2o adsorbed [kg/m^2] 43 real,intent(out) :: deltam_h2o_regolith_phys(ngrid) ! mass of h2o that is exchanged due to adsorption desorption [kg/m^2] 42 44 ! local 43 45 real :: tsoil_startPEM(ngrid,nsoil_PEM,nslope) ! soil temperature saved in the start [K] 44 46 real :: TI_startPEM(ngrid,nsoil_PEM,nslope) ! soil thermal inertia saved in the start [SI] 45 47 LOGICAL :: found ! check if variables are found in the start 48 LOGICAL :: found2 ! check if variables are found in the start 46 49 integer :: iloop,ig,islope,it,isoil ! index for loops 47 50 REAL :: TI_breccia = 750. ! Thermal inertia of Breccia following Wood 2009 [SI] … … 58 61 real :: alpha_clap_h2o = -6143.7 ! Intermediate coefficient to compute psat using clapeyron law, Murphie et al. 2005 [K^-1] 59 62 real :: beta_clap_h2o = 28.9074 ! Intermediate coefficient to compute psat using clapeyron law, Murphie et al. 2005 [1] 60 63 LOGICAL :: startpem_file ! boolean to check if we read the startfile or not 61 64 62 65 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 74 77 !!! 75 78 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 79 80 81 !0. Check if the start_PEM exist. 82 83 inquire(file=filename,exist = startpem_file) 84 85 write(*,*)'Start PEM=',startpem_file 86 76 87 77 88 !1. Run … … 247 258 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 248 259 249 !4. CO2 Adsorption250 DO islope=1,nslope251 write(num,fmt='(i2.2)') islope260 !4. CO2 & H2O Adsorption 261 DO islope=1,nslope 262 write(num,fmt='(i2.2)') islope 252 263 call get_field("mco2_reg_ads_slope"//num,m_co2_regolith_phys(:,:,islope),found) 253 if(.not.found) then 254 write(*,*)'PEM settings: failed loading <m_co2_regolith_phys>' 255 write(*,*)'will reconstruct the values of co2 adsorbded' 256 m_co2_regolith_phys(:,:,:) = 0. 257 call regolith_co2adsorption(ngrid,nslope,nsoil_PEM,timelen,ps_inst,tsoil_PEM,TI_PEM,tend_h2oglaciers,tend_co2glaciers,co2ice,waterice,q_co2,q_h2o,m_co2_regolith_phys, deltam_co2_regolith_phys) 258 259 deltam_co2_regolith_phys(:) = 0. 260 exit 261 else 262 call regolith_co2adsorption(ngrid,nslope,nsoil_PEM,timelen,ps_inst,tsoil_PEM,TI_PEM,tend_h2oglaciers,tend_co2glaciers,co2ice,waterice,q_co2,q_h2o,m_co2_regolith_phys, deltam_co2_regolith_phys) 263 264 endif 265 ENDDO 266 267 268 print *,'PEMETAT0: CO2 adsorption done ' 264 if((.not.found)) then 265 m_co2_regolith_phys(:,:,:) = 0. 266 endif 267 exit 268 ENDDO 269 270 DO islope=1,nslope 271 write(num,fmt='(i2.2)') islope 272 call get_field("mco2_reg_ads_slope"//num,m_co2_regolith_phys(:,:,islope),found) 273 if((.not.found2)) then 274 m_h2o_regolith_phys(:,:,:) = 0. 275 endif 276 exit 277 ENDDO 278 279 call regolith_adsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,tsoil_PEM,TI_PEM,ps_inst,q_co2,q_h2o, & 280 m_h2o_regolith_phys,deltam_h2o_regolith_phys, m_co2_regolith_phys,deltam_co2_regolith_phys) 281 282 if((.not.found)) then 283 deltam_co2_regolith_phys(:) = 0. 284 endif 285 if((.not.found2)) then 286 deltam_h2o_regolith_phys(:) = 0. 287 endif 288 print *,'PEMETAT0: CO2 & H2O adsorption done ' 269 289 270 290 endif ! soil_pem … … 402 422 !d) Regolith adsorbed 403 423 404 m_co2_regolith_phys(:,:,:) = 0. 405 call regolith_co2adsorption(ngrid,nslope,nsoil_PEM,timelen,ps_inst,tsoil_PEM,TI_PEM,tend_h2oglaciers,tend_co2glaciers,co2ice,waterice,q_co2,q_h2o,m_co2_regolith_phys, deltam_co2_regolith_phys) 406 deltam_co2_regolith_phys(:) = 0. 424 425 m_co2_regolith_phys(:,:,:) = 0. 426 m_h2o_regolith_phys(:,:,:) = 0. 427 428 call regolith_adsorption(ngrid,nslope,nsoil_PEM,timelen,tend_h2oglaciers,tend_co2glaciers,waterice,co2ice,tsoil_PEM,TI_PEM,ps_inst,q_co2,q_h2o, & 429 m_h2o_regolith_phys,deltam_h2o_regolith_phys, m_co2_regolith_phys,deltam_co2_regolith_phys) 430 431 deltam_co2_regolith_phys(:) = 0. 432 deltam_h2o_regolith_phys(:) = 0. 433 407 434 408 435 print *,'PEMETAT0: CO2 adsorption done ' -
trunk/LMDZ.COMMON/libf/evolution/pemredem.F90
r2855 r2863 72 72 73 73 subroutine pemdem1(filename,year_iter,nsoil_PEM,ngrid,nslope, & 74 tsoil_slope_PEM,inertiesoil_slope_PEM,ice_table,m_co2_regolith) 74 tsoil_slope_PEM,inertiesoil_slope_PEM,ice_table, & 75 m_co2_regolith,m_h2o_regolith) 75 76 ! write time-dependent variable to restart file 76 77 use iostart_PEM, only : open_restartphy, close_restartphy, & … … 94 95 integer,intent(IN) :: nslope 95 96 real,intent(in) :: m_co2_regolith(ngrid,nsoil_PEM,nslope) 97 real,intent(in) :: m_h2o_regolith(ngrid,nsoil_PEM,nslope) 96 98 integer :: islope 97 99 CHARACTER*2 :: num … … 124 126 inertiesoil_slope_PEM(:,:,islope),year_tot) 125 127 126 128 call put_field("mco2_reg_ads_slope"//num, "Mass of co2 adsorbded in the regolith", & 127 129 m_co2_regolith(:,:,islope), year_tot) 130 call put_field("mh2o_reg_ads_slope"//num, "Mass of h2o adsorbded in the regolith", & 131 m_h2o_regolith(:,:,islope), year_tot) 128 132 129 133 ENDDO -
trunk/LMDZ.COMMON/libf/evolution/recomp_tend_co2_slope.F90
r2835 r2863 45 45 do islope=1,nslope 46 46 ave=0. 47 do t=1,timelen 48 ave=ave+(beta/(alpha-log(vmr_co2_gcm(i,t)*ps_GCM_2(i,t)/100)))**4 & 49 -(beta/(alpha-log(vmr_co2_pem(i,t)*ps_GCM_2(i,t)*global_ave_press_GCM/global_ave_press_new/100)))**4 50 enddo 47 if(abs(tendencies_co2_ice_phys(i,islope)).gt.1e-4) then 48 do t=1,timelen 49 ave=ave+(beta/(alpha-log(vmr_co2_gcm(i,t)*ps_GCM_2(i,t)/100.)))**4 & 50 -(beta/(alpha-log(vmr_co2_pem(i,t)*ps_GCM_2(i,t)*global_ave_press_GCM/global_ave_press_new/100.)))**4 51 enddo 52 endif 53 if(ave.lt.1e-4) ave = 0. 51 54 tendencies_co2_ice_phys(i,islope)=tendencies_co2_ice_phys_ini(i,islope)-coef*ave/timelen 52 55 enddo 53 56 enddo 54 57 55 56 58 END SUBROUTINE recomp_tend_co2_slope -
trunk/LMDZ.COMMON/libf/evolution/update_soil.F90
r2849 r2863 5 5 USE comsoil_h_PEM, only: layer_PEM,n_1km,inertiedat_PEM 6 6 USE vertical_layers_mod, ONLY: ap,bp 7 USE comsoil_h_PEM, only: n_1km 7 8 implicit none 8 9 ! Input: … … 71 72 ! 2. Modification of the regolith thermal inertia. 72 73 73 do ig=1,ngrid74 do islope=1,nslope75 do iloop =1,n_1km76 d(ig,iloop,islope) = ((inertiedat_PEM(ig,iloop)*inertiedat_PEM(ig,iloop))/(volcapa*alpha*P610**0.6))**(-1/(0.11*log10(P610/beta)))77 if(TI_PEM(ig,iloop,islope).lt.inertie_thresold) then ! we are modifying the regolith properties, not ice78 TI_PEM(ig,iloop,islope) = sqrt(volcapa*alpha*(p_avg_new**0.6)* d(ig,iloop,islope)**(-0.11*log10(p_avg_new/beta)))79 80 endif81 enddo82 enddo83 enddo74 ! do ig=1,ngrid 75 ! do islope=1,nslope 76 ! do iloop =1,n_1km 77 ! d(ig,iloop,islope) = ((inertiedat_PEM(ig,iloop)*inertiedat_PEM(ig,iloop))/(volcapa*alpha*P610**0.6))**(-1/(0.11*log10(P610/beta))) 78 ! if(TI_PEM(ig,iloop,islope).lt.inertie_thresold) then ! we are modifying the regolith properties, not ice 79 ! TI_PEM(ig,iloop,islope) = sqrt(volcapa*alpha*(p_avg_new**0.6)* d(ig,iloop,islope)**(-0.11*log10(p_avg_new/beta))) 80 ! 81 ! endif 82 ! enddo 83 ! enddo 84 !enddo 84 85 85 86 ! 3. Build new TI for the PEM … … 87 88 do ig=1,ngrid 88 89 do islope=1,nslope 89 90 do iloop = 1,n_1km 91 TI_PEM(ig,iloop,islope) = TI_PEM(ig,1,islope) 92 enddo 90 93 if (ice_depth(ig,islope).gt. -1.e-10) then 91 94 ! 3.0 FIrst if permanent ice … … 108 111 ! 4.2 Build the new ti 109 112 do iloop=1,iref 110 TI_PEM(ig,iloop,islope) =TI_PEM(ig, iloop,islope)113 TI_PEM(ig,iloop,islope) =TI_PEM(ig,1,islope) 111 114 enddo 112 115 if (iref.lt.nsoil_PEM) then
Note: See TracChangeset
for help on using the changeset viewer.