Ignore:
Timestamp:
Feb 6, 2026, 5:21:02 PM (10 days ago)
Author:
tbertrand
Message:

Mars PCM:
Adding coagulation of dust particles (cf Bertrand et al., 2022, Icarus)
TB

Location:
trunk/LMDZ.MARS/libf/phymars
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/libf/phymars/callkeys_mod.F90

    r3726 r4054  
    7373logical,save :: topflows ! entrainment by mountain top dust flows parametrization
    7474!$OMP THREADPRIVATE(topflows)
     75logical,save :: coagulation ! coagulation of dust particles
     76logical,save :: fullcoag ! coagulation of dust particles using full equations instead of lookup tables
     77logical,save :: kernel_b, kernel_g, kernel_de, kernel_ti ! kernels for different types of dust coagulation
     78!$OMP THREADPRIVATE(coagulation,fullcoag,kernel_b,kernel_g,kernel_de,kernel_ti)
     79integer,save :: coal_kg ! mode for coalescence 0,1, or 2
     80!$OMP THREADPRIVATE(coal_kg)
    7581logical,save :: latentheat_surfwater ! latent heat release from ground water ice sublimation/condensation
    7682!$OMP THREADPRIVATE(latentheat_surfwater)
  • trunk/LMDZ.MARS/libf/phymars/conf_phys.F

    r4041 r4054  
    7070     &                        tf_injection, ti_injection, thermochem,
    7171     &                        thermoswater, tituscap, tke_heat_flux,
    72      &                        topflows, water
     72     &                        topflows, water, coagulation, kernel_b,
     73     &                        kernel_g,kernel_de,kernel_ti,coal_kg,
     74     &                        fullcoag
    7375
    7476      IMPLICIT NONE
     
    379381         call getin_p("topflows",topflows)
    380382         write(*,*)" topflows = ",topflows
     383
     384! dust particle coagulation
     385         write(*,*)"call coagulation of dust"
     386         coagulation=.false. ! default value
     387         call getin_p("coagulation",coagulation)
     388         write(*,*)" coagulation = ",coagulation
     389         fullcoag=.false. ! default value
     390         kernel_b=.true. ! default value (if coagulation=true)
     391         kernel_g=.false. ! default value
     392         kernel_de=.false. ! default value
     393         kernel_ti=.false. ! default value
     394         coal_kg=0 ! default value
     395         if (coagulation) then
     396           write(*,*)" coagulation fullcoag and mode= ",fullcoag,coal_kg
     397           write(*,*)" coagulation kernels= ",kernel_b,kernel_g,
     398     &                                        kernel_de,kernel_ti
     399         endif
    381400
    382401! latent heat release from ground water ice sublimation/condensation
  • trunk/LMDZ.MARS/libf/phymars/physiq_mod.F

    r4035 r4054  
    2525      use calcstormfract_mod, only: calcstormfract
    2626      use topmons_mod, only: topmons,topmons_setup
     27      use coagulation_mod, only: coagul_main,coagul_init
    2728      use nltecool_mod, only: nltecool
    2829      use nlte_tcool_mod, only: nlte_tcool
     
    150151      use callkeys_mod, only: photochem, callthermos
    151152      use callkeys_mod, only: startphy_file
     153      use callkeys_mod, only: coagulation
    152154
    153155      IMPLICIT NONE
     
    544546c entrainment by mountain top dust flows above sub-grid scale topography
    545547      REAL pdqtop(ngrid,nlayer,nq) ! tendency for dust after topmons
     548c dust coagulation tendency
     549      REAL pdqcoag(ngrid,nlayer,nq) ! tendency for dust coagulation
    546550
    547551c when no startfi file is asked for init
     
    791795c        ~~~~~~~~~~~~~~~
    792796        if (topflows) call topmons_setup(ngrid)
     797
     798c        Initialize coagulation parameters
     799c        ~~~~~~~~~~~~~~~
     800        if (coagulation) call coagul_init()
    793801
    794802c        Parameterization of the ATKE routine
     
    14471455      ENDIF ! end of if (topflows)
    14481456
    1449 c     3.3 Dust injection from the surface
     1457c     3.3 Dust coagulation
     1458c    -------------------------------------------
     1459      IF (coagulation) THEN
     1460         pdqcoag(:,:,:)=0.
     1461         CALL coagul_main(ngrid,nlayer,nq,ptime,ptimestep,
     1462     &                     pq,pdq,pt,pdt,pplay,pplev,
     1463     &                     pdqcoag)
     1464         !Update tendency :
     1465         DO l=1,nlayer
     1466          DO ig=1,ngrid
     1467           pdq(ig,l,igcm_dust_mass)=
     1468     & pdq(ig,l,igcm_dust_mass)+ pdqcoag(ig,l,igcm_dust_mass)
     1469           pdq(ig,l,igcm_dust_number)=
     1470     & pdq(ig,l,igcm_dust_number)+pdqcoag(ig,l,igcm_dust_number)
     1471          ENDDO
     1472         ENDDO
     1473
     1474         IF (topflows) THEN
     1475           DO l=1,nlayer
     1476            DO ig=1,ngrid
     1477              pdq(ig,l,igcm_topdust_mass)=
     1478     & pdq(ig,l,igcm_topdust_mass)+
     1479     &                      pdqcoag(ig,l,igcm_topdust_mass)
     1480              pdq(ig,l,igcm_topdust_number)=
     1481     & pdq(ig,l,igcm_topdust_number)+
     1482     &                      pdqcoag(ig,l,igcm_topdust_number)
     1483            ENDDO
     1484           ENDDO
     1485         ENDIF ! end of if (topflows)
     1486
     1487         IF (rdstorm) THEN
     1488           DO l=1,nlayer
     1489            DO ig=1,ngrid
     1490           pdq(ig,l,igcm_stormdust_mass)=
     1491     & pdq(ig,l,igcm_stormdust_mass)+
     1492     &                      pdqcoag(ig,l,igcm_stormdust_mass)
     1493           pdq(ig,l,igcm_stormdust_number)=
     1494     & pdq(ig,l,igcm_stormdust_number)+
     1495     &                      pdqcoag(ig,l,igcm_stormdust_number)
     1496            ENDDO
     1497           ENDDO
     1498         ENDIF ! end of if (rdstorm)
     1499
     1500      ENDIF ! end of if (coagulation)
     1501
     1502c     3.4 Dust injection from the surface
    14501503c    -------------------------------------------
    14511504           if (dustinjection.gt.0) then
     
    37443797           endif ! (topflows)
    37453798
     3799           if (coagulation) then
     3800             call write_output('zdqcoag_dustm',
     3801     &                     'coagulation tendency',
     3802     &                     'kg kg-1 s-1',pdqcoag(:,:,igcm_dust_mass))
     3803             call write_output('zdqcoag_dustn',
     3804     &                     'coagulation tendency',
     3805     &                     'nbp kg-1 s-1',pdqcoag(:,:,igcm_dust_number))
     3806           endif 
     3807
    37463808           if (dustscaling_mode==2) then
    37473809             call write_output("dust_rad_adjust",
Note: See TracChangeset for help on using the changeset viewer.