Ignore:
Timestamp:
Sep 2, 2024, 5:32:52 PM (4 months ago)
Author:
jbclement
Message:

PEM:
Modification to the layering algorithm to make dust lag prevent further sublimation.
JBC

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

Legend:

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

    r3419 r3424  
    413413== 26/08/2024 == JBC
    414414Correction for the launching script due to r3403: the job scheduler detection was missing in the case of a new cycle.
     415
     416== 02/09/2024 == JBC
     417Modification to the layering algorithm to make dust lag prevent further sublimation.
  • trunk/LMDZ.COMMON/libf/evolution/layering_mod.F90

    r3331 r3424  
    2727real, parameter :: rho_dust = 2500.             ! Density of dust [kg.m-3]
    2828real, parameter :: rho_rock = 3200.             ! Density of rock [kg.m-3]
     29
     30! Lag layer parameters -> see Levrard et al. 2007
     31real, parameter :: hmin_lag = 0.5  ! Minimal height of the lag deposit to reduce the sblimation rate
     32real, parameter :: fred_subl = 0.1 ! Reduction factor of sublimation rate
    2933
    3034! Stratum = node of the linked list
     
    465469
    466470!---- Local variables
    467 real :: htend_co2ice, htend_h2oice, htend_dust
    468 real :: h_co2ice_old, h_h2oice_old, h_dust_old
    469 real :: thickness, h2subl, h2subl_tot, h2lift, h2lift_tot
     471real                   :: htend_co2ice, htend_h2oice, htend_dust
     472real                   :: h_co2ice_old, h_h2oice_old, h_dust_old
     473real                   :: thickness, h2subl, h2subl_tot, h2lift, h2lift_tot
     474real                   :: h_toplag
     475type(stratum), pointer :: currentloc
    470476
    471477!---- Code
     
    545551            h_h2oice_old = current1%h2oice_volfrac*current1%thickness
    546552            h_dust_old = current1%dust_volfrac*current1%thickness
     553
     554            ! How much is CO2 ice sublimation inhibited by the top dust lag?
     555            currentloc => current1%up
     556            h_toplag = 0.
     557            do while (associated(currentloc) .and. abs(1. - (currentloc%dust_volfrac + currentloc%air_volfrac)) < tol)
     558                h_toplag = h_toplag + currentloc%thickness
     559                currentloc => currentloc%up
     560            enddo
     561            h2subl_tot = h2subl_tot*fred_subl**(h_toplag/hmin_lag)
     562
    547563            ! How much CO2 ice can sublimate in the considered stratum?
    548564            if (h2subl_tot - h_co2ice_old <= eps) then ! There is enough to sublimate
     
    550566                h2subl_tot = 0.
    551567                call subl_co2ice_layering(this,current1,h2subl,h_co2ice_old,h_h2oice_old,h_dust_old,new_lag1)
    552             else if (h_co2ice_old < eps) then ! There is nothing to sublimate so we stop here
    553                 !current1 => current1%down ! Move to the underlying stratum
    554                 !new_lag1 = .true.
    555                 exit
     568            else if (h_co2ice_old < eps) then ! There is nothing to sublimate
     569                ! Is the considered stratum a dust lag?
     570                if (abs(1. - (current1%dust_volfrac + current1%air_volfrac)) < tol) then ! Yes, we move to the underlying stratum
     571                    current1 => current1%down
     572                    new_lag1 = .true.
     573                else ! No, so we stop here
     574                    exit
     575                endif
    556576            else ! Only a fraction can sublimate and so we move to the underlying stratum
    557577                h2subl = h_co2ice_old
     
    587607            h_h2oice_old = current1%h2oice_volfrac*current1%thickness
    588608            h_dust_old = current1%dust_volfrac*current1%thickness
     609
     610            ! How much is CO2 ice sublimation inhibited by the top dust lag?
     611            currentloc => current1%up
     612            h_toplag = 0.
     613            do while (associated(currentloc) .and. abs(1. - (currentloc%dust_volfrac + currentloc%air_volfrac)) < tol)
     614                h_toplag = h_toplag + currentloc%thickness
     615                currentloc => currentloc%up
     616            enddo
     617            h2subl_tot = h2subl_tot*fred_subl**(h_toplag/hmin_lag)
     618
    589619            ! How much CO2 ice can sublimate in the considered stratum?
    590620            if (h2subl_tot - h_co2ice_old <= eps) then ! There is enough to sublimate
     
    592622                h2subl_tot = 0.
    593623                call subl_co2ice_layering(this,current1,h2subl,h_co2ice_old,h_h2oice_old,h_dust_old,new_lag1)
    594             else if (h_co2ice_old < eps) then ! There is nothing to sublimate so we stop here
    595                 !current1 => current1%down ! Move to the underlying stratum
    596                 !new_lag1 = .true.
    597                 exit
     624            else if (h_co2ice_old < eps) then ! There is nothing to sublimate
     625                ! Is the considered stratum a dust lag?
     626                if (abs(1. - (current1%dust_volfrac + current1%air_volfrac)) < tol) then ! Yes, we move to the underlying stratum
     627                    current1 => current1%down
     628                    new_lag1 = .true.
     629                else ! No, so we stop here
     630                    exit
     631                endif
    598632            else ! Only a fraction can sublimate and so we move to the underlying stratum
    599633                h2subl = h_co2ice_old
     
    614648            h_h2oice_old = current2%h2oice_volfrac*current2%thickness
    615649            h_dust_old = current2%dust_volfrac*current2%thickness
     650
     651            ! How much is CO2 ice sublimation inhibited by the top dust lag?
     652            currentloc => current2%up
     653            h_toplag = 0.
     654            do while (associated(currentloc) .and. abs(1. - (currentloc%dust_volfrac + currentloc%air_volfrac)) < tol)
     655                h_toplag = h_toplag + currentloc%thickness
     656                currentloc => currentloc%up
     657            enddo
     658            h2subl_tot = h2subl_tot*fred_subl**(h_toplag/hmin_lag)
     659
    616660            ! How much H2O ice can sublimate in the considered stratum?
    617661            if (h2subl_tot - h_h2oice_old <= eps) then ! There is enough to sublimate
     
    619663                h2subl_tot = 0.
    620664                call subl_h2oice_layering(this,current2,h2subl,h_co2ice_old,h_h2oice_old,h_dust_old,new_lag2)
    621             else if (h_h2oice_old < eps) then ! There is nothing to sublimate so we stop here
    622                 !current2 => current1%down ! Move to the underlying stratum
    623                 !new_lag2 = .true.
    624                 exit
     665            else if (h_h2oice_old < eps) then ! There is nothing to sublimate
     666                ! Is the considered stratum a dust lag?
     667                if (abs(1. - (current1%dust_volfrac + current1%air_volfrac)) < tol) then ! Yes, we move to the underlying stratum
     668                    current1 => current1%down
     669                    new_lag1 = .true.
     670                else ! No, so we stop here
     671                    exit
     672                endif
    625673            else ! Only a fraction can sublimate and so we move to the underlying stratum
    626674                h2subl = h_h2oice_old
Note: See TracChangeset for help on using the changeset viewer.