Ignore:
Timestamp:
Mar 16, 2026, 6:09:43 PM (4 weeks ago)
Author:
jbclement
Message:

PEM:
Relocate Mars-specific parameters out of "planet" module and into the modules that own their physics domain.
JBC

Location:
trunk/LMDZ.COMMON/libf/evolution
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/evolution/backup.F90

    r4134 r4135  
    114114! LOCAL VARIABLES
    115115! ---------------
    116 real(dp),    dimension(:,:),   allocatable :: h2o_ice4PCM, co2_ice4PCM, tsurf4PCM, flux_geo4PCM, albedo4PCM, emissivity4PCM
    117 real(dp),    dimension(:,:),   allocatable :: teta4PCM, air_mass4PCM
    118 real(dp),    dimension(:,:,:), allocatable :: tsoil4PCM, inertiesoil4PCM, q4PCM
    119 real(dp),    dimension(:),     allocatable :: ps4PCM
    120 real(dp)                                   :: pa4PCM, preff4PCM
    121 logical(k4), dimension(:),     allocatable :: is_h2o_perice
     116real(dp),    dimension(ngrid,nslope)           :: h2o_ice4PCM, co2_ice4PCM, tsurf4PCM, flux_geo4PCM, albedo4PCM, emissivity4PCM
     117real(dp),    dimension(ngrid,nlayer)           :: teta4PCM, air_mass4PCM
     118real(dp),    dimension(ngrid,nsoil_PCM,nslope) :: tsoil4PCM, inertiesoil4PCM
     119real(dp),    dimension(ngrid,nlayer,nq)        :: q4PCM
     120real(dp),    dimension(ngrid)                  :: ps4PCM
     121logical(k4), dimension(ngrid)                  :: is_h2o_perice
     122real(dp)                                       :: pa4PCM, preff4PCM
    122123
    123124! CODE
    124125! ----
    125126! Build ice for the PCM
    126 allocate(h2o_ice4PCM(ngrid,nslope),co2_ice4PCM(ngrid,nslope),is_h2o_perice(ngrid))
    127127call build4PCM_perice(h2o_ice,co2_ice,is_h2o_perice,h2o_ice4PCM,co2_ice4PCM)
    128128
    129129! Build surface temperature for the PCM
    130 allocate(tsurf4PCM(ngrid,nslope))
    131130call build4PCM_tsurf(tsurf_avg,tsurf_dev,tsurf4PCM)
    132131
    133132! Build soil for the PCM
    134 if (do_soil) then
    135     allocate(tsoil4PCM(ngrid,nsoil_PCM,nslope),inertiesoil4PCM(ngrid,nsoil_PCM,nslope),flux_geo4PCM(ngrid,nslope))
    136     call build4PCM_soil(tsoil_avg,tsoil_dev,inertiesoil4PCM,tsoil4PCM,flux_geo4PCM)
    137 end if
     133if (do_soil) call build4PCM_soil(tsoil_avg,tsoil_dev,inertiesoil4PCM,tsoil4PCM,flux_geo4PCM)
    138134
    139135! Build atmosphere for the PCM
    140 allocate(ps4PCM(ngrid),teta4PCM(ngrid,nlayer),air_mass4PCM(ngrid,nlayer))
    141136call build4PCM_atmosphere(ps_avg,ps_dev,ps_avg_glob,ps_avg_glob_ini,ps4PCM,pa4PCM,preff4PCM,teta4PCM,air_mass4PCM)
    142137
    143138! Build tracers for the PCM
    144 allocate(q4PCM(ngrid,nlayer,nq))
    145139call build4PCM_tracers(ps4PCM,q4PCM)
    146140
    147141! Build surface radiative properties state for the PCM
    148 allocate(albedo4PCM(ngrid,nslope),emissivity4PCM(ngrid,nslope))
    149142call build4PCM_surf_rad_prop(h2o_ice,co2_ice,albedo4PCM,emissivity4PCM)
    150143
     
    158151end if
    159152
    160 ! Deallocation
    161 if (allocated(emissivity4PCM)) deallocate(emissivity4PCM)
    162 if (allocated(albedo4PCM)) deallocate(albedo4PCM)
    163 if (allocated(q4PCM)) deallocate(q4PCM)
    164 if (allocated(ps4PCM)) deallocate(ps4PCM)
    165 if (allocated(teta4PCM)) deallocate(teta4PCM)
    166 if (allocated(air_mass4PCM)) deallocate(air_mass4PCM)
    167 if (allocated(tsoil4PCM)) deallocate(tsoil4PCM)
    168 if (allocated(inertiesoil4PCM)) deallocate(inertiesoil4PCM)
    169 if (allocated(flux_geo4PCM)) deallocate(flux_geo4PCM)
    170 if (allocated(tsurf4PCM)) deallocate(tsurf4PCM)
    171 if (allocated(co2_ice4PCM)) deallocate(co2_ice4PCM)
    172 if (allocated(h2o_ice4PCM)) deallocate(h2o_ice4PCM)
    173 if (allocated(is_h2o_perice)) deallocate(is_h2o_perice)
    174 
    175153END SUBROUTINE save_clim_state
    176154!=======================================================================
    177155
    178156!=======================================================================
    179 SUBROUTINE backup_restarts(idt)
     157SUBROUTINE backup_restarts(backup_idt)
    180158!-----------------------------------------------------------------------
    181159! NAME
     
    205183! ARGUMENTS
    206184! ---------
    207 integer(di), intent(in) :: idt
     185integer(di), intent(in) :: backup_idt
    208186
    209187! LOCAL VARIABLES
     
    213191! CODE
    214192! ----
    215 suffix = '_ts'//int2str(idt)
    216 
    217 call print_msg('> Backup at dt = '//int2str(idt),LVL_NFO)
     193suffix = '_ts'//int2str(backup_idt)
     194
     195call print_msg('> Backup of "restart" files at dt = '//int2str(backup_idt),LVL_NFO)
    218196call copy_restart_if_present('re'//startevo_name,suffix2filename(startevo_name,suffix))
    219197call copy_restart_if_present('re'//startfi_name,suffix2filename(startfi_name,suffix))
  • trunk/LMDZ.COMMON/libf/evolution/changelog.txt

    r4134 r4135  
    911911- Add a periodic backup based on a single wrapper which builds PCM-compatible climate state and writes "restart" files.
    912912- Remove condition "if (.not. allocated(*))" for more strict safeguard.
     913
     914== 16/03/2026 == JBC
     915Relocate Mars-specific parameters out of "planet" module and into the modules that own their physics domain.
  • trunk/LMDZ.COMMON/libf/evolution/clim_state_init.F90

    r4134 r4135  
    319319use geometry,           only: ngrid, nslope, nsoil, nsoil_PCM
    320320use evolution,          only: dt
    321 use physics,            only: mugaz, r
    322 use planet,             only: TI_breccia, TI_bedrock, alpha_clap_h2o, beta_clap_h2o
     321use physics,            only: mugaz, r, alpha_clap_h2o, beta_clap_h2o
    323322use frost,              only: h2ofrost_PCM, h2o_frost4PCM, co2frost_PCM, co2_frost4PCM
    324323use surf_ice,           only: is_h2o_perice_PCM, h2oice_huge_ini, co2_perice_PCM, threshold_h2oice_cap
    325324use soil,               only: do_soil, TI, depth_breccia, depth_bedrock, index_breccia, index_bedrock, inertiedat, layer, inertiedat_PCM
    326325use soil_temp,          only: ini_tsoil_pem, compute_tsoil
    327 use soil_therm_inertia, only: update_soil_TI
     326use soil_therm_inertia, only: update_soil_TI, TI_breccia, TI_bedrock
    328327use ice_table,          only: icetable_equilibrium, icetable_dynamic, computeice_table_equilibrium
    329328use sorption,           only: do_sorption, evolve_regolith_adsorption
  • trunk/LMDZ.COMMON/libf/evolution/glaciers.F90

    r4110 r4135  
    339339! DEPENDENCIES
    340340! ------------
    341 use geometry, only: ngrid, nday
    342 use planet,   only: alpha_clap_co2, beta_clap_co2
     341use geometry,   only: ngrid, nday
     342use physics,    only: alpha_clap_co2, beta_clap_co2
    343343
    344344! DECLARATION
  • trunk/LMDZ.COMMON/libf/evolution/ice_table.F90

    r4110 r4135  
    276276! ------------
    277277use geometry, only: ngrid, nslope, nsoil
    278 use soil,     only: mlayer
     278use soil,     only: mlayer, regolith_porosity
    279279use slopes,   only: subslope_dist, def_slope_mean
    280 use planet,   only: porosity
    281280use maths,    only: pi
    282281
     
    306305        do islope = 1,nslope
    307306            call compute_Tice(tsoil(ig,:,islope),tsurf(ig,islope),icetable_depth(ig,islope),Tice)
    308             delta_icetable(ig) = delta_icetable(ig) + porosity*rho_ice(Tice,'H2O')*(icetable_thickness(ig,islope) - icetable_thickness_old(ig,islope)) & ! convention > 0. <=> it condenses
     307            delta_icetable(ig) = delta_icetable(ig) + regolith_porosity*rho_ice(Tice,'H2O')*(icetable_thickness(ig,islope) - icetable_thickness_old(ig,islope)) & ! convention > 0. <=> it condenses
    309308                              *subslope_dist(ig,islope)/cos(def_slope_mean(islope)*pi/180._dp)
    310309        end do
  • trunk/LMDZ.COMMON/libf/evolution/layered_deposits.F90

    r4110 r4135  
    3636real(dp),    parameter, private :: dry_lag_porosity  = 0.2_dp   ! Porosity of dust lag
    3737real(dp),    parameter, private :: wet_lag_porosity  = 0.15_dp  ! Porosity of water ice lag
    38 real(dp),    parameter, private :: regolith_porosity = 0.4_dp   ! Porosity of regolith
    39 real(dp),    parameter, private :: breccia_porosity  = 0.1_dp   ! Porosity of breccia
    4038real(dp),    parameter, private :: co2ice_porosity   = 0.05_dp  ! Porosity of CO2 ice
    4139real(dp),    parameter, private :: h2oice_porosity   = 0.1_dp   ! Porosity of H2O ice
    4240real(dp),    parameter, private :: rho_dust          = 2500._dp ! Density of dust [kg.m-3]
    43 real(dp),    parameter, private :: rho_rock          = 3200._dp ! Density of rock [kg.m-3]
    4441real(dp),    parameter, private :: h_patchy_dust     = 5.e-4_dp ! Height under which a dust lag is considered patchy [m]
    4542real(dp),    parameter, private :: h_patchy_ice      = 5.e-4_dp ! Height under which a H2O ice lag is considered patchy [m]
     
    426423! DEPENDENCIES
    427424! ------------
    428 use soil,     only: do_soil, layer, index_breccia, index_bedrock
     425use soil,     only: do_soil, layer, index_breccia, index_bedrock, regolith_porosity, breccia_porosity
    429426use geometry, only: nsoil
    430427
     
    12501247use utility,  only: real2str
    12511248use display,  only: print_msg, LVL_ERR
     1249use soil,     only: regolith_porosity
    12521250
    12531251! DECLARATION
  • trunk/LMDZ.COMMON/libf/evolution/physics.F90

    r4065 r4135  
    2424! PARAMETERS
    2525! ----------
     26real(dp), parameter :: sigmaB = 5.678e-8_dp            ! Stefan-Boltzmann constant [W/m^2/K^4]
     27real(dp), parameter :: m_co2 = 44.01e-3_dp             ! CO2 molecular mass [kg/mol], Franz et al. 2017
     28real(dp), parameter :: m_noco2 = 33.37e-3_dp           ! Non-condensible molecular mass [kg/mol], Franz et al. 2017
     29real(dp), parameter :: m_h2o = 18.01528e-3_dp          ! H2O molecular mass [kg/mol], Franz et al. 2017
     30real(dp), parameter :: A = 1._dp/m_co2 - 1._dp/m_noco2 ! MMR/VMR conversion factor
     31real(dp), parameter :: B = 1._dp/m_noco2               ! MMR/VMR conversion factor
     32
     33! H2O coefficients for Clausius-Clapeyron law for psat (psat = exp(beta/Th2o + alpha)), following Murphy and Koop 2005
     34real(dp), parameter :: alpha_clap_h2o = 28.9074_dp
     35real(dp), parameter :: beta_clap_h2o = -6143.7_dp  ! [K]
     36! CO2 coefficients for Clausius-Clapeyron law for CO2 condensation temperature (Tco2 = beta/(alpha-log(vmr)),following James et al. 1992
     37real(dp), parameter :: alpha_clap_co2 = 23.3494_dp
     38real(dp), parameter :: beta_clap_co2 = 3182.48_dp  ! [K]
     39
     40real(dp), parameter :: Lco2 = 5.71e5_dp ! CO2 latent heat [J/kg], Pilorget and Forget 2016
     41
    2642real(dp), protected :: g     ! Gravity [m/s2]
    2743real(dp), protected :: r     ! Reduced gas constant,r = 8.314511/[mugaz/1000.0]
  • trunk/LMDZ.COMMON/libf/evolution/planet.F90

    r4074 r4135  
    55!
    66! DESCRIPTION
    7 !     Mars-specific constants kept hard-coded for the PEM.
     7!     Legacy compatibility module for planet-specific definitions.
    88!
    99! AUTHORS & DATE
     
    1515!-----------------------------------------------------------------------
    1616
    17 ! DEPENDENCIES
    18 ! ------------
    19 use numerics, only: dp
    20 
    2117! DECLARATION
    2218! -----------
    2319implicit none
    2420
    25 ! PARAMETERS
    26 ! ----------
    27 ! Molecular masses for CO2, H2O and non condensible gaz, following Franz et al. 2017
    28 real(dp), parameter :: m_co2 = 44.01e-3_dp               ! CO2 molecular mass [kg/mol]
    29 real(dp), parameter :: m_noco2 = 33.37e-3_dp             ! Non condensible mol mass [kg/mol]
    30 real(dp), parameter :: m_h2o = 18.01528e-3_dp            ! Molecular weight of H2O [kg/mol]
    31 real(dp), parameter :: A = (1._dp/m_co2 - 1._dp/m_noco2) ! Intermediate parameter for computation
    32 real(dp), parameter :: B = 1._dp/m_noco2                 ! Intermediate parameter for computation
    33 
    34 ! Thermal inertia for breccia and bedrock following Mellon et al. 2000; Wood et al. 2008
    35 real(dp), parameter :: TI_breccia = 750._dp  ! Thermal inertia of Breccia following Wood 2009 [SI]
    36 real(dp), parameter :: TI_bedrock = 2300._dp ! Thermal inertia of Bedrock following Wood 2009 [SI]
    37 
    38 ! Coefficient for Clapeyron law for psat (psat = exp(beta/Th2o + alpha)), following Murphy and Koop 2005
    39 real(dp), parameter :: alpha_clap_h2o = 28.9074_dp ! Uniteless, Murphy and Koop 2005
    40 real(dp), parameter :: beta_clap_h2o = -6143.7_dp  ! Kelvin, Murphy and Koop 2005
    41 
    42 ! Coefficient for Clapeyron law for CO2 condensation temperature (Tco2 = beta/(alpha-log(vmr)),following James et al. 1992
    43 real(dp), parameter :: alpha_clap_co2 = 23.3494_dp ! Unitless, James et al. 1992
    44 real(dp), parameter :: beta_clap_co2 = 3182.48_dp  ! Kelvin, James et al. 1992
    45 
    46 ! Density of the regolith (Zent et al., 1995; Buhler and Piqueux 2021)
    47 real(dp), parameter :: rho_regolith = 2000._dp ! kg/m^3
    48 
    49 ! Average thermal inertia of the surface, breccia, bedrock, following Mellon et al., 2000., Wood et al., 2008
    50 real(dp), parameter :: TI_regolith_avg = 250._dp ! Averaged of the observed thermal inertia for regolith following Mellon et al., 2000[SI]
    51 
    52 ! Porosity of the soil
    53 real(dp), parameter :: porosity = 0.4_dp ! porosity of the martian soil, correspond to the value for a random loose packing of monodiperse sphere (Scott, 1960)
    54 
    55 ! Stefan Boltzmann constant
    56 real(dp), parameter :: sigmaB = 5.678e-8_dp
    57 
    58 ! Latent heat of CO2
    59 real(dp), parameter :: Lco2 =  5.71e5_dp ! Pilorget and Forget 2016
    60 
    61 ! Current average pressure [Pa]
    62 real(dp), parameter :: P610 = 610._dp
     21! NOTE
     22! ----
    6323
    6424contains
  • trunk/LMDZ.COMMON/libf/evolution/soil.F90

    r4134 r4135  
    2525! PARAMETERS
    2626! ----------
     27! Density and porosity of regolith and breccia
     28real(dp), parameter :: rho_regolith      = 2000._dp ! [kg/m^3], Zent et al. 1995; Buhler and Piqueux 2021
     29real(dp), parameter :: regolith_porosity = 0.4_dp   ! Porosity of the martian regolith for a random loose packing of monodisperse sphere, Scott 1960
     30real(dp), parameter :: breccia_porosity  = 0.1_dp   ! Porosity of breccia
     31
    2732logical(k4),                             protected          :: do_soil            ! To run with subsurface physics
    2833logical(k4),                             protected          :: reg_thprop_dependp ! Regolith thermal properties depend on surface pressure
  • trunk/LMDZ.COMMON/libf/evolution/soil_temp.F90

    r4134 r4135  
    569569! DEPENDENCIES
    570570! ------------
    571 use geometry,  only: ngrid, nsoil, nslope, nday
    572 use planet,    only: alpha_clap_h2o, beta_clap_h2o
    573 use tracers,   only: mmol, iPCM_qh2o
    574 use physics,   only: mugaz, r
    575 use evolution, only: dt
    576 use soil,      only: TI
    577 use stoppage,  only: stop_clean
    578 use display,   only: print_msg, LVL_NFO
     571use geometry,   only: ngrid, nsoil, nslope, nday
     572use tracers,    only: mmol, iPCM_qh2o
     573use physics,    only: mugaz, r, alpha_clap_h2o, beta_clap_h2o
     574use evolution,  only: dt
     575use soil,       only: TI
     576use stoppage,   only: stop_clean
     577use display,    only: print_msg, LVL_NFO
    579578
    580579! DECLARATION
  • trunk/LMDZ.COMMON/libf/evolution/soil_therm_inertia.F90

    r4117 r4135  
    2626! PARAMETERS
    2727! ----------
     28real(dp), parameter          :: TI_regolith_avg = 250._dp      ! Average of observed thermal inertia for regolith [SI], Mellon et al. 2000
     29real(dp), parameter          :: TI_breccia = 750._dp           ! Thermal inertia for breccia [SI], Mellon et al. 2000; Wood et al. 2008
     30real(dp), parameter          :: TI_bedrock = 2300._dp          ! Thermal inertia for bedrock [SI], Mellon et al. 2000; Wood et al. 2008
     31real(dp), parameter, private :: P610 = 610._dp                 ! Reference mean surface pressure [Pa]
    2832real(dp), parameter, private :: reg_inertie_thresold = 370._dp ! Above this thermal inertia, the regolith has too much cementation to be dependant on the pressure [J/m^2/K/s^1/2]
    2933real(dp), parameter, private :: reg_inertie_minvalue = 50._dp  ! Minimum value of the Thermal Inertia at low pressure (Piqueux & Christensen 2009) [J/m^2/K/s^1/2]
     
    5660! DEPENDENCIES
    5761! ------------
    58 use planet, only: porosity
     62use soil, only: regolith_porosity
    5963
    6064! DECLARATION
     
    7882    ice_thermalinertia = inertie_purewaterice
    7983else
    80     ice_thermalinertia = sqrt(surf_thermalinertia**2 + porosity*pore_filling*inertie_purewaterice**2) ! Siegler et al., 2012
     84    ice_thermalinertia = sqrt(surf_thermalinertia**2 + regolith_porosity*pore_filling*inertie_purewaterice**2) ! Siegler et al., 2012
    8185end if
    8286
     
    106110use geometry, only: ngrid, nslope, nsoil
    107111use soil,     only: volcapa, layer, inertiedat, depth_breccia, depth_bedrock, index_breccia, index_bedrock, reg_thprop_dependp
    108 use planet,   only: TI_breccia, TI_bedrock, TI_regolith_avg, P610
    109112use display,  only: print_msg, LVL_NFO
    110113
  • trunk/LMDZ.COMMON/libf/evolution/sorption.F90

    r4117 r4135  
    139139! ------------
    140140use geometry,   only: ngrid, nslope, nsoil, nday
    141 use soil,       only: layer, index_breccia
     141use soil,       only: layer, index_breccia, rho_regolith
    142142use slopes,     only: subslope_dist, def_slope_mean
    143143use atmosphere, only: ap, bp
    144 use planet,     only: alpha_clap_h2o, beta_clap_h2o, m_h2o, m_co2,m_noco2, rho_regolith
     144use physics,    only: alpha_clap_h2o, beta_clap_h2o, m_h2o, m_co2, A, B
    145145use maths,      only: pi
    146146
     
    177177real(dp),    dimension(ngrid,nslope)            :: deltam_reg_slope        ! Difference density of H2O adsorbed per slope [kg/m^3]
    178178real(dp),    dimension(ngrid,nsoil,nslope)      :: dm_h2o_regolith_slope   ! Elementary H2O mass adsorded per mesh per slope
    179 real(dp)                                        :: A, B                    ! Used to compute the mean mass above the surface
    180179real(dp)                                        :: p_sat                   ! Saturated vapor pressure of ice
    181180real(dp),    dimension(:,:), allocatable        :: mass_mean               ! Mean mass above the surface
     
    188187! 0. Some initializations
    189188allocate(mass_mean(ngrid,nday),zplev_mean(ngrid,nday),pvapor(ngrid,nday),pvapor_avg(ngrid))
    190 A = 1._dp/m_co2 - 1._dp/m_noco2
    191 B = 1._dp/m_noco2
    192189theta_h2o_ads = 0._dp
    193190dm_h2o_regolith_slope = 0._dp
     
    273270! ------------
    274271use geometry,   only: ngrid, nslope, nsoil, nday
    275 use soil,       only: layer, index_breccia
     272use soil,       only: layer, index_breccia, rho_regolith
    276273use slopes,     only: subslope_dist, def_slope_mean
    277274use atmosphere, only: ap, bp
    278 use planet,     only: m_co2, m_noco2, rho_regolith
     275use physics,    only: m_co2, A, B
    279276use maths,      only: pi
    280277
     
    303300! real(dp) :: as = 18.9e3_dp           ! Specific area, Buhler & Piqueux 2021
    304301real(dp) :: as = 9.48e4_dp             ! Same as previous but from zent
    305 real(dp)                                           :: A, B                    ! Used to compute the mean mass above the surface
    306302integer(di)                                        :: ig, islope, iloop, it   ! For loops
    307303real(dp),    dimension(ngrid,nsoil,nslope)         :: dm_co2_regolith_slope   ! Elementary mass adsorded per mesh per slope
     
    322318allocate(mass_mean(ngrid,nday),zplev_mean(ngrid,nday),pco2(ngrid,nday),pco2_avg(ngrid))
    323319m_h2o_adsorbed = 0._dp
    324 A = 1._dp/m_co2 - 1._dp/m_noco2
    325 B = 1._dp/m_noco2
    326320dm_co2_regolith_slope = 0._dp
    327321delta_co2_ads = 0._dp
  • trunk/LMDZ.COMMON/libf/evolution/tendencies.F90

    r4134 r4135  
    8888! DEPENDENCIES
    8989! ------------
    90 use geometry, only: ngrid, nslope, nday
    91 use planet,   only: alpha_clap_co2, beta_clap_co2, sigmaB, Lco2, m_co2, A, B
    92 use orbit,    only: yr_len_sol, sol_len_s
    93 use display,  only: print_msg, LVL_NFO
    94 use utility,  only: real2str
     90use geometry,   only: ngrid, nslope, nday
     91use physics,    only: sigmaB, alpha_clap_co2, beta_clap_co2, Lco2, m_co2, A, B
     92use orbit,      only: yr_len_sol, sol_len_s
     93use display,    only: print_msg, LVL_NFO
     94use utility,    only: real2str
    9595
    9696! DECLARATION
Note: See TracChangeset for help on using the changeset viewer.