Changeset 3159 for trunk/LMDZ.COMMON/libf/evolution
- Timestamp:
- Dec 14, 2023, 6:56:40 PM (11 months ago)
- Location:
- trunk/LMDZ.COMMON/libf/evolution
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.COMMON/libf/evolution/changelog.txt
r3152 r3159 172 172 - The PEM deftank folder is now in LMDZ.COMMON/libf/evolution/ (not anymore in the Mars PCM deftank). 173 173 - Small corrections related to r3149. 174 175 == 14/12/2023 == JBC 176 - A number of corrections related to r3149 for CO2 ice management: 177 > 'co2_ice' was not transferred to 'perennial_co2ice' at the end of the PEM run; 178 > In the Mars PCM, 'perennial_co2ice' is now correctly handled regarding the frost in case of CO2 sublimation/condensation. 179 - Addition of (CO2 and H2O) ice metamorphism: if the frost is above a given value, then the excess frost is transferred to the perennial ice. 180 - Thresholds value for ice management can now be set in the "run_PEM.def". -
trunk/LMDZ.COMMON/libf/evolution/conf_pem.F90
r3149 r3159 23 23 #endif 24 24 25 use time_evol_mod, only: year_bp_ini, dt_pem, water_ice_criterion, co2_ice_criterion, ps_criterion, Max_iter_pem, &25 use time_evol_mod, only: year_bp_ini, dt_pem, h2o_ice_crit, co2_ice_crit, ps_criterion, Max_iter_pem, & 26 26 evol_orbit_pem, var_obl, var_ecc, var_lsp, convert_years 27 use comsoil_h_pem, only: soil_pem, fluxgeo, ini_h2o_bigreservoir, depth_breccia, depth_bedrock, reg_thprop_dependp 28 use adsorption_mod, only: adsorption_pem 29 use glaciers_mod, only: co2_ice_flow, h2o_ice_flow 30 use ice_table_mod, only: icetable_equilibrium, icetable_dynamic 31 use time_phylmdz_mod, only: ecritphy 27 use comsoil_h_pem, only: soil_pem, fluxgeo, ini_h2o_bigreservoir, depth_breccia, depth_bedrock, reg_thprop_dependp 28 use adsorption_mod, only: adsorption_pem 29 use glaciers_mod, only: co2_ice_flow, h2o_ice_flow 30 use ice_table_mod, only: icetable_equilibrium, icetable_dynamic 31 use time_phylmdz_mod, only: ecritphy 32 use constants_marspem_mod, only: inf_h2oice_threshold, metam_co2ice_threshold, metam_h2oice_threshold 32 33 33 34 implicit none … … 52 53 close(100) 53 54 54 ! #---------- Output parameters55 !#---------- Output parameters ----------# 55 56 ! Frequency of outputs for the PEM 56 57 ecritphy = 1 ! Default value: every year 57 58 call getin('ecritpem',ecritphy) 58 59 59 ! #---------- Orbital parameters60 !#---------- Orbital parameters ----------# 60 61 evol_orbit_pem = .false. 61 62 call getin('evol_orbit_pem',evol_orbit_pem) … … 77 78 write(*,*) 'Does Ls peri vary ?',var_lsp 78 79 79 ! #---------- Stopping criteria parameters80 !#---------- Stopping criteria parameters ----------# 80 81 Max_iter_pem = 100000000 81 82 call getin('Max_iter_pem',Max_iter_pem) 82 83 83 water_ice_criterion= 0.284 call getin(' water_ice_criterion',water_ice_criterion)84 h2o_ice_crit = 0.2 85 call getin('h2o_ice_crit',h2o_ice_crit) 85 86 86 co2_ice_crit erion= 0.287 call getin('co2_ice_crit erion',co2_ice_criterion)87 co2_ice_crit = 0.2 88 call getin('co2_ice_crit',co2_ice_crit) 88 89 89 90 ps_criterion = 0.15 … … 93 94 call getin('dt_pem', dt_pem) 94 95 95 ! #---------- Subsurface parameters96 !#---------- Subsurface parameters ----------# 96 97 soil_pem = .true. 97 98 call getin('soil_pem',soil_pem) … … 110 111 write(*,*) 'Thermal properties of the regolith vary with pressure ?', reg_thprop_dependp 111 112 112 ! #---------- Layering parameters113 !#---------- Layering parameters ----------# 113 114 fluxgeo = 0. 114 115 call getin('fluxgeo',fluxgeo) … … 156 157 endif 157 158 159 !#---------- Ice management parameters ----------# 158 160 ini_h2o_bigreservoir = 1.e4 159 161 call getin('ini_h2o_bigreservoir',ini_h2o_bigreservoir) 162 163 inf_h2oice_threshold = 2.e3 164 call getin('inf_h2oice_threshold',inf_h2oice_threshold) 165 166 metam_h2oice_threshold = 5.e-2 167 call getin('metam_h2oice_threshold',metam_h2oice_threshold) 168 169 metam_co2ice_threshold = 16.e3 170 call getin('metam_co2ice_threshold',metam_co2ice_threshold) 160 171 161 172 END SUBROUTINE conf_pem -
trunk/LMDZ.COMMON/libf/evolution/constants_marspem_mod.F90
r3149 r3159 37 37 real, parameter :: Lco2 = 5.71e5 ! Pilorget and Forget 2016 38 38 39 ! Threshold to consider the amount of H2O ice as an infinite reservoir 40 real, parameter :: inf_h2oice_threshold = 2000. !~ 1 m 39 ! Thresholds for ice management 40 real, save :: inf_h2oice_threshold ! To consider the amount of H2O ice as an infinite reservoir 41 real, save :: metam_h2oice_threshold ! To consider frost is becoming perennial H2O ice 42 real, save :: metam_co2ice_threshold ! To consider frost is becoming perennial CO2 ice 41 43 42 44 END MODULE constants_marspem_mod -
trunk/LMDZ.COMMON/libf/evolution/deftank/run_PEM.def
r3149 r3159 28 28 # Max_iter_pem=100000000 29 29 30 # Acceptance rate of sublimating waterice surface change? Default = 0.231 # water_ice_criterion=0.230 # Acceptance rate of sublimating H2o ice surface change? Default = 0.2 31 # h2o_ice_crit=0.2 32 32 33 33 # Acceptance rate of sublimating CO2 ice surface change? Default = 0.2 34 # co2_ice_crit erion=0.234 # co2_ice_crit=0.2 35 35 36 36 # Acceptance rate of pressure surface change? Default = 0.15 … … 69 69 # icetable_dynamic=.false. 70 70 71 #---------- H2O reservoir parameters ----------# 72 # Amount of h2o ice to initialize the big reservoir if the variable is not present in startfi_PEM.nc? Default = 1.e4 73 # ini_h2o_bigreservoir=1e4 71 #---------- Ice management parameters ----------# 72 # Amount of h2o ice to initialize the big reservoir if the variable is not present in "startfi_PEM.nc"? Default = 1.e4 73 # ini_h2o_bigreservoir=1.e4 74 75 # Threshold to consider the amount of H2O ice as an infinite reservoir? Default = 2.e3 76 # inf_h2oice_threshold=2.e3 77 78 # Threshold to consider frost is becoming perennial H2O ice? Default = 5.e-2 79 # metam_h2oice_threshold=5.e-2 80 81 # Threshold to consider frost is becoming perennial CO2 ice? Default = 16.e3 82 # metam_co2ice_threshold=16.e3 74 83 75 84 # Some definitions for the physics, in file 'callphys.def' -
trunk/LMDZ.COMMON/libf/evolution/pem.F90
r3149 r3159 42 42 use stopping_crit_mod, only: stopping_crit_h2o_ice, stopping_crit_co2 43 43 use constants_marspem_mod, only: alpha_clap_co2, beta_clap_co2, alpha_clap_h2o, beta_clap_h2o, m_co2, & 44 m_noco2, inf_h2oice_threshold 44 m_noco2, inf_h2oice_threshold, metam_co2ice_threshold, metam_h2oice_threshold 45 45 use evol_ice_mod, only: evol_co2_ice, evol_h2o_ice 46 46 use comsoil_h_PEM, only: soil_pem, ini_comsoil_h_PEM, end_comsoil_h_PEM, nsoilmx_PEM, & … … 189 189 real, dimension(:,:,:), allocatable :: co2_ice_PCM ! Physics x NSLOPE x Times field: co2 ice given by the PCM [kg/m^2] 190 190 real, dimension(:,:), allocatable :: co2_ice_ini_sublim ! physical point field: Logical array indicating sublimating point of co2 ice 191 real, dimension(:,:), allocatable :: initial_h2o_ice ! physical point field: Logical array indicating if there is waterice at initial state191 real, dimension(:,:), allocatable :: initial_h2o_ice ! physical point field: Logical array indicating if there is h2o ice at initial state 192 192 real, dimension(:,:), allocatable :: tend_co2_ice ! physical point x slope field: Tendency of evolution of perennial co2 ice over a year 193 193 real, dimension(:,:), allocatable :: tend_co2_ice_ini ! physical point x slope field x nslope: Tendency of evolution of perennial co2 ice over a year in the PCM … … 550 550 ! I_g Save initial PCM situation 551 551 !------------------------ 552 ! We save the places where waterice is sublimating553 ! We compute the surface of waterice sublimating552 ! We save the places where h2o ice is sublimating 553 ! We compute the surface of h2o ice sublimating 554 554 co2_surf_ini = 0. 555 555 h2o_surf_ini = 0. … … 848 848 ! II_d.5 Update the mass of the regolith adsorbed 849 849 if (adsorption_pem) then 850 call regolith_adsorption(ngrid,nslope,nsoilmx_PEM,timelen,tend_h2o_ice,tend_co2_ice, &850 call regolith_adsorption(ngrid,nslope,nsoilmx_PEM,timelen,tend_h2o_ice,tend_co2_ice, & 851 851 h2o_ice,co2_ice,tsoil_PEM,TI_PEM,ps_timeseries,q_co2_PEM_phys,q_h2o_PEM_phys, & 852 852 h2o_adsorbded_phys,delta_h2o_adsorbded,co2_adsorbded_phys,delta_co2_adsorbded) … … 858 858 do l = 1,nsoilmx_PEM - 1 859 859 totmassco2_adsorbded = totmassco2_adsorbded + co2_adsorbded_phys(ig,l,islope)*(layer_PEM(l + 1) - layer_PEM(l))* & 860 subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.)*cell_area(ig)860 subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.)*cell_area(ig) 861 861 totmassh2o_adsorbded = totmassh2o_adsorbded + h2o_adsorbded_phys(ig,l,islope)*(layer_PEM(l + 1) - layer_PEM(l))* & 862 subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.)*cell_area(ig)862 subslope_dist(ig,islope)/cos(pi*def_slope_mean(islope)/180.)*cell_area(ig) 863 863 enddo 864 864 enddo … … 907 907 select case (stopPEM) 908 908 case(1) 909 write(*,*) "STOPPING because surface of waterice sublimating is too low:", stopPEM, "See message above."909 write(*,*) "STOPPING because surface of h2o ice sublimating is too low:", stopPEM, "See message above." 910 910 case(2) 911 write(*,*) "STOPPING because tendencies on waterice = 0:", stopPEM, "See message above."911 write(*,*) "STOPPING because tendencies on h2o ice = 0:", stopPEM, "See message above." 912 912 case(3) 913 913 write(*,*) "STOPPING because surface of co2 ice sublimating is too low:", stopPEM, "See message above." … … 940 940 ! III_a.1 Ice update (for startfi) 941 941 942 ! H2O ice943 942 watercap = 0. 943 perennial_co2ice = co2_ice 944 944 do ig = 1,ngrid 945 ! H2O ice metamorphism 946 if (sum(qsurf(ig,igcm_h2o_ice,:)*subslope_dist(ig,:)/cos(pi*def_slope_mean(:)/180.)) > metam_h2oice_threshold) then 947 h2o_ice(ig,:) = h2o_ice(ig,:) + qsurf(ig,igcm_h2o_ice,:) - metam_h2oice_threshold/subslope_dist(ig,:)*cos(pi*def_slope_mean(:)*180.) 948 qsurf(ig,igcm_h2o_ice,:) = metam_h2oice_threshold/subslope_dist(ig,:)*cos(pi*def_slope_mean(:)*180.) 949 endif 950 951 ! Is H2O ice still considered as an infinite reservoir for the PCM? 945 952 if (sum(h2o_ice(ig,:)*subslope_dist(ig,:)/cos(pi*def_slope_mean(:)/180.)) > inf_h2oice_threshold) then 946 ! If there is enough ice to be considered as an infinite reservoir953 ! There is enough ice to be considered as an infinite reservoir 947 954 watercaptag(ig) = .true. 948 955 else 949 ! If there too little ice to be considered as an infinite reservoir 950 ! Ice is transferred to the frost 956 ! There too little ice to be considered as an infinite reservoir so ice is transferred to the frost 951 957 watercaptag(ig) = .false. 952 958 qsurf(ig,igcm_h2o_ice,:) = qsurf(ig,igcm_h2o_ice,:) + h2o_ice(ig,:) 953 959 h2o_ice(ig,:) = 0. 960 endif 961 962 ! CO2 ice metamorphism 963 if (sum(qsurf(ig,igcm_co2,:)*subslope_dist(ig,:)/cos(pi*def_slope_mean(:)/180.)) > metam_co2ice_threshold) then 964 perennial_co2ice(ig,:) = perennial_co2ice(ig,:) + qsurf(ig,igcm_co2,:) - metam_co2ice_threshold/subslope_dist(ig,:)*cos(pi*def_slope_mean(:)*180.) 965 qsurf(ig,igcm_co2,:) = metam_co2ice_threshold/subslope_dist(ig,:)*cos(pi*def_slope_mean(:)*180.) 954 966 endif 955 967 enddo -
trunk/LMDZ.COMMON/libf/evolution/pemetat0.F90
r3149 r3159 82 82 #ifdef CPP_STD 83 83 logical, dimension(ngrid) :: watercaptag 84 watercaptag (:)= .false.84 watercaptag = .false. 85 85 #endif 86 86 … … 152 152 TI_PEM(ig,iloop,islope) = TI_breccia 153 153 enddo 154 else ! we keep the high tivalues154 else ! we keep the high TI values 155 155 do iloop = index_breccia + 1,index_bedrock 156 156 TI_PEM(ig,iloop,islope) = TI_PEM(ig,index_breccia,islope) -
trunk/LMDZ.COMMON/libf/evolution/stopping_crit_mod.F90
r3149 r3159 16 16 SUBROUTINE stopping_crit_h2o_ice(cell_area,surf_ini,h2o_ice,stopPEM,ngrid) 17 17 18 use time_evol_mod, only: water_ice_criterion18 use time_evol_mod, only: h2o_ice_crit 19 19 use comslope_mod, only: subslope_dist, nslope 20 20 … … 32 32 integer, intent(in) :: ngrid ! # of physical grid points 33 33 real, dimension(ngrid), intent(in) :: cell_area ! Area of the cells 34 real, dimension(ngrid,nslope), intent(in) :: h2o_ice ! Actual density of waterice34 real, dimension(ngrid,nslope), intent(in) :: h2o_ice ! Actual density of h2o ice 35 35 real, intent(in) :: surf_ini ! Initial surface of h2o ice that was sublimating 36 36 ! OUTPUT … … 51 51 52 52 ! Check of the criterion 53 if (surf_now < surf_ini*(1. - water_ice_criterion)) then53 if (surf_now < surf_ini*(1. - h2o_ice_crit)) then 54 54 stopPEM = 1 55 write(*,*) "Reason of stopping: the surface of waterice sublimating reaches the threshold"56 write(*,*) "surf_now < surf_ini*(1. - water_ice_criterion)", surf_now < surf_ini*(1. - water_ice_criterion)57 write(*,*) "Current surface of waterice sublimating =", surf_now58 write(*,*) "Initial surface of waterice sublimating =", surf_ini59 write(*,*) "Percentage of change accepted =", water_ice_criterion*10060 else if (surf_now > surf_ini*(1. + water_ice_criterion)) then55 write(*,*) "Reason of stopping: the surface of h2o ice sublimating reaches the threshold" 56 write(*,*) "surf_now < surf_ini*(1. - h2o_ice_crit)", surf_now < surf_ini*(1. - h2o_ice_crit) 57 write(*,*) "Current surface of h2o ice sublimating =", surf_now 58 write(*,*) "Initial surface of h2o ice sublimating =", surf_ini 59 write(*,*) "Percentage of change accepted =", h2o_ice_crit*100 60 else if (surf_now > surf_ini*(1. + h2o_ice_crit)) then 61 61 stopPEM = 1 62 write(*,*) "Reason of stopping: the surface of waterice sublimating reaches the threshold"63 write(*,*) "surf_now > surf_ini*(1. + water_ice_criterion)", surf_now > surf_ini*(1. + water_ice_criterion)64 write(*,*) "Current surface of waterice sublimating =", surf_now65 write(*,*) "Initial surface of waterice sublimating =", surf_ini66 write(*,*) "Percentage of change accepted =", water_ice_criterion*10062 write(*,*) "Reason of stopping: the surface of h2o ice sublimating reaches the threshold" 63 write(*,*) "surf_now > surf_ini*(1. + h2o_ice_crit)", surf_now > surf_ini*(1. + h2o_ice_crit) 64 write(*,*) "Current surface of h2o ice sublimating =", surf_now 65 write(*,*) "Initial surface of h2o ice sublimating =", surf_ini 66 write(*,*) "Percentage of change accepted =", h2o_ice_crit*100 67 67 endif 68 68 … … 75 75 SUBROUTINE stopping_crit_co2(cell_area,surf_ini,co2_ice,stopPEM,ngrid,global_avg_press_PCM,global_avg_press_new,nslope) 76 76 77 use time_evol_mod, only: co2_ice_crit erion, ps_criterion77 use time_evol_mod, only: co2_ice_crit, ps_criterion 78 78 use comslope_mod, only: subslope_dist 79 79 … … 91 91 integer, intent(in) :: ngrid, nslope ! # of grid physical grid points 92 92 real, dimension(ngrid), intent(in) :: cell_area ! Area of the cells 93 real, dimension(ngrid,nslope), intent(in) :: co2_ice ! Actual density of waterice93 real, dimension(ngrid,nslope), intent(in) :: co2_ice ! Actual density of h2o ice 94 94 real, intent(in) :: surf_ini ! Initial surface of co2 ice that was sublimating 95 95 real, intent(in) :: global_avg_press_PCM ! Planet average pressure from the PCM start files … … 113 113 114 114 ! Check of the criterion 115 if (surf_now < surf_ini*(1. - co2_ice_crit erion)) then115 if (surf_now < surf_ini*(1. - co2_ice_crit)) then 116 116 stopPEM = 3 117 117 write(*,*) "Reason of stopping: the surface of co2 ice sublimating reaches the threshold" 118 write(*,*) "surf_now < surf_ini*(1. - co2_ice_crit erion)", surf_now < surf_ini*(1. - co2_ice_criterion)118 write(*,*) "surf_now < surf_ini*(1. - co2_ice_crit)", surf_now < surf_ini*(1. - co2_ice_crit) 119 119 write(*,*) "Current surface of co2 ice sublimating =", surf_now 120 120 write(*,*) "Initial surface of co2 ice sublimating =", surf_ini 121 write(*,*) "Percentage of change accepted =", co2_ice_crit erion*100.122 else if (surf_now > surf_ini*(1. + co2_ice_crit erion)) then121 write(*,*) "Percentage of change accepted =", co2_ice_crit*100. 122 else if (surf_now > surf_ini*(1. + co2_ice_crit)) then 123 123 stopPEM = 3 124 124 write(*,*) "Reason of stopping: the surface of co2 ice sublimating reaches the threshold" 125 write(*,*) "surf_now > surf_ini*(1. + co2_ice_crit erion)", surf_now > surf_ini*(1. + co2_ice_criterion)125 write(*,*) "surf_now > surf_ini*(1. + co2_ice_crit)", surf_now > surf_ini*(1. + co2_ice_crit) 126 126 write(*,*) "Current surface of co2 ice sublimating =", surf_now 127 127 write(*,*) "Initial surface of co2 ice sublimating =", surf_ini 128 write(*,*) "Percentage of change accepted =", co2_ice_crit erion*100.128 write(*,*) "Percentage of change accepted =", co2_ice_crit*100. 129 129 endif 130 130 -
trunk/LMDZ.COMMON/libf/evolution/time_evol_mod.F90
r3149 r3159 3 3 implicit none 4 4 5 integer :: year_bp_ini 6 integer :: dt_pem 7 real :: convert_years 8 real :: water_ice_criterion ! Percentage of change of the surface of waterice sublimating before stopping the PEM9 real :: co2_ice_crit erion! Percentage of change of the surface of co2 ice sublimating before stopping the PEM10 real :: ps_criterion 11 integer :: Max_iter_pem 12 logical :: evol_orbit_pem 13 logical :: var_obl 14 logical :: var_ecc 15 logical :: var_lsp 5 integer :: year_bp_ini ! Initial year (in Planetary years) of the simulation of the PEM defined in run.def (in Earth years) 6 integer :: dt_pem ! Time step used by the PEM in Planetary years 7 real :: convert_years ! Conversion ratio from Planetary years to Earth years 8 real :: h2o_ice_crit ! Percentage of change of the surface of h2o ice sublimating before stopping the PEM 9 real :: co2_ice_crit ! Percentage of change of the surface of co2 ice sublimating before stopping the PEM 10 real :: ps_criterion ! Percentage of change of averaged surface pressure before stopping the PEM 11 integer :: Max_iter_pem ! Maximal number of iteration when converging to a steady state, read in evol.def 12 logical :: evol_orbit_pem ! True if we want to follow the orbital parameters of obl_ecc_lsp.asc, read in evol.def 13 logical :: var_obl ! True if we want the PEM to follow obl_ecc_lsp.asc parameters for obliquity 14 logical :: var_ecc ! True if we want the PEM to follow obl_ecc_lsp.asc parameters for eccenticity 15 logical :: var_lsp ! True if we want the PEM to follow obl_ecc_lsp.asc parameters for ls perihelie 16 16 17 17 END MODULE time_evol_mod
Note: See TracChangeset
for help on using the changeset viewer.