Ignore:
Timestamp:
Feb 6, 2024, 3:39:31 PM (11 months ago)
Author:
llange
Message:

PEM
Update in the dependance of soil properties with the pressure: the program now used a combination of work by Presley & Christensen 1997 & Piqueux & Christensen 2009. In pratice, values of the TI are bounded between 50 and 360 USI.
The conductivity of the Breccia layer does not change anymore with the pressure, as it should be neglectable.
Some cleaning in the routine update_soilproperties

LL

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

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/evolution/changelog.txt

    r3199 r3202  
    196196Fixing bug when rewritting the startfi.nc for the PCM: fluxgeo, read in the run_PEM.def,  was not written in the startfi.
    197197
    198 == 09/01/2023 == JBC
     198== 09/01/2024 == JBC
    199199- Correction of script "launch_orb_1Dchained.sh" which read orbital parameters missing one interval of years in two.
    200200- Addition of the Martian date in "info_PEM.txt" for post-processing.
    201201
    202 == 17/01/2023 == LL
     202== 17/01/2024 == LL
    203203Cleaning of the several subroutine regarding soil temperatures: they are now
    204204gathered in an unique Tsoil module.
    205205(cosmetic commit)
    206206
    207 == 25/01/2023 == JBC
     207== 25/01/2024 == JBC
    208208- Addition of a script "inipem_orbit.sh" in the deftank to modify the orbital parameters of a file "startfi.nc" according to the date set in the file "run_PEM.def" and data found in "obl_ecc_lsp.asc";
    209209- Flow of glaciers is now computed only when there are slopes;
     
    211211- Some small cleanings.
    212212
    213 == 25/01/2023 == JBC
     213== 25/01/2024 == JBC
    214214Update of "launch_pem.sh" related to r3171 to move the "diagsoilpem.nc" in the intended output folder.
    215215
    216 == 29/01/2023 == LL
     216== 29/01/2024 == LL
    217217Fixing bug when recomputing Tsoil for the startfi. It is now done with: Tsoil averaged + Delta T where delta T is tthe difference between the instantaneous soil temperature and the yearly averaged soil temperature in the original startfi.
    218218
    219 == 30/01/2023 == LL
     219== 30/01/2024 == LL
    220220Fixing bug in writediagpem: soil layers written in the diagpem where those of the PCM and not the PEM.
    221221
    222 == 02/02/2023 == JBC
     222== 02/02/2024 == JBC
    223223Small correction following r3189 in the case where "soilpem = .false.".
     224
     225== 06/02/2024 == LL
     226Update in the dependance of soil properties with the pressure: the program now u
     227sed a combination of work by Presley & Christensen 1997 & Piqueux & Christensen
     2282009. In pratice, values of the TI are bounded between 50 and 360 USI.
     229The conductivity of the Breccia layer does not change anymore with the pressure,as it should be neglectable.
     230Some cleaning in the routine update_soilproperties
     231
  • trunk/LMDZ.COMMON/libf/evolution/orbit_param_criterion_mod.F90

    r3149 r3202  
    7777do ilask = 1,size(yearlask,1)
    7878    read(73,*) yearlask(ilask), obllask(ilask), ecclask(ilask), lsplask(ilask)
    79     yearlask(ilask) = yearlask(ilask)*1000./convert_years ! Conversion from Laskar's kilo Earth years to PEM Martian years
     79    yearlask(ilask) = yearlask(ilask)*10./convert_years ! Conversion from Laskar's kilo Earth years to PEM Martian years
    8080    if (yearlask(ilask) > Year) last_ilask = ilask + 1
    8181enddo
  • trunk/LMDZ.COMMON/libf/evolution/soil_thermalproperties_mod.F90

    r3149 r3202  
    3636!    Input/Output
    3737!    ------------
    38      LOGICAL,INTENT(IN) :: ispureice                         ! Boolean to check if ice is massive or just pore filling
    39      REAL,INTENT(IN) ::    pore_filling                         ! ice pore filling in each layer (1)
    40      REAL,INTENT(IN) ::    surf_thermalinertia                  ! surface thermal inertia (J/m^2/K/s^1/2) 
    41      REAL,INTENT(OUT) ::   ice_thermalinertia                   ! Thermal inertia of ice when present in the pore (J/m^2/K/s^1/2)
     38     LOGICAL,INTENT(IN) :: ispureice                       ! Boolean to check if ice is massive or just pore filling
     39     REAL,INTENT(IN) ::    pore_filling                    ! ice pore filling in each layer (1)
     40     REAL,INTENT(IN) ::    surf_thermalinertia             ! surface thermal inertia (J/m^2/K/s^1/2) 
     41     REAL,INTENT(OUT) ::   ice_thermalinertia              ! Thermal inertia of ice when present in the pore (J/m^2/K/s^1/2)
    4242
    4343!    Local Variables
     
    7777! Constants:
    7878
    79  REAL ::  inertie_thresold = 800. ! Above this thermal inertia, it's  ice [SI]
    80  REAL ::  ice_inertia        ! Inertia of water ice [SI]
    81  REAL ::  P610 = 610.0       ! current average pressure on Mars [Pa]
     79 REAL ::  reg_inertie_thresold = 370.                      ! Above this thermal inertia, the regolith has too much cementation to be dependant on the pressure [J/m^2/K/s^1/2]
     80 REAL ::  reg_inertie_minvalue = 50.                       ! Minimum value of the Thermal Inertia at low pressure (Piqueux & Christensen 2009) [J/m^2/K/s^1/2]
     81 REAL ::  reg_inertie_maxvalue = 370.                      ! Maximum value of the Thermal Inertia at low pressure (Piqueux & Christensen 2009) [J/m^2/K/s^1/2]
     82 REAL ::  ice_inertia                                      ! Inertia of water ice [SI]
     83 REAL ::  P610 = 610.0                                     ! current average pressure on Mars [Pa]
     84 REAL ::  C = 0.0015                                       ! Constant to derive TI as a function of P, from Presley and Christensen 1997 [uniteless]
     85 REAL ::  K = 8.1*1e4                                      ! Constant to derive TI as a function of P, from Presley and Christensen 1997 [tor, or 133.3Pa]
     86 REAL ::  Pa2Tor = 1./133.3                                ! Conversion from Pa to tor [Pa/tor]
     87
    8288
    8389! Local variables:
    8490
    85  INTEGER :: ig,islope,iloop,iref,k,iend
    86  REAL :: regolith_inertia(ngrid,nslope) ! TI of the regolith
    87  REAL :: delta
    88  REAL :: TI_breccia_new
    89  REAL :: ice_bottom_depth
     91 INTEGER :: ig,islope,isoil,iref,iend                      ! Loop variables
     92 REAL :: regolith_inertia(ngrid,nslope)                    ! Thermal inertia of the regolith (first layer in the GCM) [J/m^2/K/s^1/2]
     93 REAL :: delta                                             ! Difference of depth to compute the  thermal inertia in a mixed layer [m]
     94 REAL :: ice_bottom_depth                                  ! Bottom depth of the subsurface ice [m]
     95 REAL :: d_part                                            ! Regolith particle size [micrometer]
     96 
    9097
    9198write(*,*) "Update soil propreties"
     
    99106       endif
    100107      if(reg_thprop_dependp) then
    101           if(TI_PEM(ig,1,islope).lt.inertie_thresold) then
    102             regolith_inertia(ig,islope) = regolith_inertia(ig,islope)*(p_avg_new/P610)**0.3
     108          if(TI_PEM(ig,1,islope).lt.reg_inertie_thresold) then
     109            d_part = (regolith_inertia(ig,islope)**2/(volcapa*C*(P610*Pa2Tor)**(0.6)))**(-1./(0.11*log10(P610*Pa2Tor/K))) ! compute particle size, in micrometer
     110            regolith_inertia(ig,islope) = sqrt(volcapa*C*(p_avg_new*Pa2Tor)**(0.6)*d_part**(-0.11*log10(p_avg_new*Pa2Tor/K)))
     111            if(regolith_inertia(ig,islope).gt.reg_inertie_maxvalue) regolith_inertia(ig,islope) = reg_inertie_maxvalue
     112            if(regolith_inertia(ig,islope).lt.reg_inertie_minvalue) regolith_inertia(ig,islope) = reg_inertie_minvalue
    103113          endif
    104          TI_breccia_new = TI_breccia*(p_avg_new/P610)**0.3
    105       else
    106          TI_breccia_new = TI_breccia
    107114      endif
    108115   enddo
    109116 enddo
    110117
    111 
    112118! 2. Build new Thermal Inertia
    113119do  islope=1,nslope
    114120   do ig = 1,ngrid
    115      do iloop = 1,index_breccia
    116          TI_PEM(ig,iloop,islope) = regolith_inertia(ig,islope)
     121     do isoil = 1,index_breccia
     122         TI_PEM(ig,isoil,islope) = regolith_inertia(ig,islope)
    117123     enddo
    118      if(regolith_inertia(ig,islope).lt.TI_breccia_new) then
     124     if(regolith_inertia(ig,islope).lt.TI_breccia) then
    119125!!! transition
    120126             delta = depth_breccia
    121127             TI_PEM(ig,index_breccia+1,islope) = sqrt((layer_PEM(index_breccia+1)-layer_PEM(index_breccia))/ &
    122128            (((delta-layer_PEM(index_breccia))/(TI_PEM(ig,index_breccia,islope)**2))+ &
    123                       ((layer_PEM(index_breccia+1)-delta)/(TI_breccia_new**2))))
    124             do iloop=index_breccia+2,index_bedrock
    125               TI_PEM(ig,iloop,islope) = TI_breccia_new
     129                      ((layer_PEM(index_breccia+1)-delta)/(TI_breccia**2))))
     130            do isoil=index_breccia+2,index_bedrock
     131              TI_PEM(ig,isoil,islope) = TI_breccia
    126132            enddo     
    127133      else ! we keep the high ti values
    128             do iloop=index_breccia+1,index_bedrock
    129               TI_PEM(ig,iloop,islope) = TI_PEM(ig,index_breccia,islope)
     134            do isoil=index_breccia+1,index_bedrock
     135              TI_PEM(ig,isoil,islope) = TI_PEM(ig,index_breccia,islope)
    130136            enddo
    131137       endif ! TI PEM and breccia comparison
     
    135141            (((delta-layer_PEM(index_bedrock))/(TI_PEM(ig,index_bedrock,islope)**2))+ &
    136142            ((layer_PEM(index_bedrock+1)-delta)/(TI_bedrock**2))))
    137        do iloop=index_bedrock+2,nsoil_PEM
    138             TI_PEM(ig,iloop,islope) = TI_bedrock
     143       do isoil=index_bedrock+2,nsoil_PEM
     144            TI_PEM(ig,isoil,islope) = TI_bedrock
    139145       enddo   
    140146      enddo ! ig
     
    148154      if (ice_depth(ig,islope).lt. 1e-10) then
    149155       call ice_thermal_properties(.true.,1.,0.,ice_inertia)
    150        do iloop = 1,nsoil_PEM
    151          TI_PEM(ig,iloop,islope)=ice_inertia
     156       do isoil = 1,nsoil_PEM
     157         TI_PEM(ig,isoil,islope)=ice_inertia
    152158       enddo
    153159      else
     
    156162        ! 3.1.1 find the index of the mixed layer
    157163        iref=0 ! initialize iref
    158         do k=1,nsoil_PEM ! loop on layers to find the beginning of the ice table
    159           if (ice_depth(ig,islope).ge.layer_PEM(k)) then
    160             iref=k ! pure regolith layer up to here
     164        do isoil=1,nsoil_PEM ! loop on layers to find the beginning of the ice table
     165          if (ice_depth(ig,islope).ge.layer_PEM(isoil)) then
     166            iref=isoil ! pure regolith layer up to here
    161167          else
    162168         ! correct iref was obtained in previous cycle
     
    167173        iend=0 ! initialize iend
    168174        ice_bottom_depth = ice_depth(ig,islope)+ice_thickness(ig,islope)
    169         do k=1,nsoil_PEM ! loop on layers to find the end of the ice table
    170           if (ice_bottom_depth.ge.layer_PEM(k)) then
    171             iend=k ! pure regolith layer up to here
     175        do isoil=1,nsoil_PEM ! loop on layers to find the end of the ice table
     176          if (ice_bottom_depth.ge.layer_PEM(isoil)) then
     177            iend=isoil ! pure regolith layer up to here
    172178          else
    173179         ! correct iref was obtained in previous cycle
     
    176182        enddo
    177183      ! 3.2 Build the new ti
    178         do iloop=1,iref
    179           TI_PEM(ig,iloop,islope) = TI_PEM(ig,1,islope)
     184        do isoil=1,iref
     185          TI_PEM(ig,isoil,islope) = TI_PEM(ig,1,islope)
    180186        enddo
    181187        if (iref.lt.nsoil_PEM) then
     
    209215           endif ! iref.eq.iend
    210216      ! 3.3 Build the new ti
    211           do iloop=iref+2,iend
    212             TI_PEM(ig,iloop,islope)=ice_inertia
     217          do isoil=iref+2,iend
     218            TI_PEM(ig,isoil,islope)=ice_inertia
    213219          enddo
    214220
Note: See TracChangeset for help on using the changeset viewer.