Changeset 3962
- Timestamp:
- Nov 17, 2025, 11:02:59 AM (5 hours ago)
- Location:
- trunk/LMDZ.PLUTO/libf
- Files:
-
- 3 edited
-
muphypluto/mp2m_microphysics.F90 (modified) (10 diffs)
-
phypluto/mp2m_calmufi.F90 (modified) (9 diffs)
-
phypluto/physiq_mod.F90 (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.PLUTO/libf/muphypluto/mp2m_microphysics.F90
r3957 r3962 22 22 USE MP2M_CLOUDS 23 23 USE MP2M_METHODS 24 USE MP2M_CLOUDS_METHODS 24 25 IMPLICIT NONE 25 26 … … 35 36 CONTAINS 36 37 37 FUNCTION muphys_all(m3as_prod,dm0as,dm3as,dm0af,dm3af,dm0ccn,dm3ccn,dm3ices,dmugases ) RESULT(ret)38 FUNCTION muphys_all(m3as_prod,dm0as,dm3as,dm0af,dm3af,dm0ccn,dm3ccn,dm3ices,dmugases,dtlc) RESULT(ret) 38 39 !! Compute the evolution of moments tracers through haze microphysics processes. 39 40 !! … … 48 49 !! before the latter are called to initialize a new step. 49 50 !! 50 51 51 ! Production of the 3rd order moment of the spherical mode distribution (m3.m-2). 52 52 REAL(kind=mm_wp), INTENT(in), DIMENSION(:) :: m3as_prod … … 67 67 ! Tendencies of each condensible gaz species (mol.mol-1). 68 68 REAL(kind=mm_wp), INTENT(inout), DIMENSION(:,:) :: dmugases 69 ! Latent heat of condensation (J.kg-1). 70 REAL(kind=mm_wp), INTENT(inout), DIMENSION(:) :: dtlc 69 71 70 72 ! .true. on succes (i.e. model has been initialized at least once previously), .false. otherwise. 71 73 LOGICAL :: ret 72 74 73 ! Local variables. 75 ! Local variables: 76 !~~~~~~~~~~~~~~~~~ 74 77 INTEGER :: i 75 78 ! Production of the spherical aerosols (m3.m-3). … … 82 85 ALLOCATE(m3a_s_prod(mm_nla)) 83 86 84 ! Sanity check for initialization 87 ! Sanity check for initialization: 88 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 85 89 ret = (mm_ini_col.AND.mm_ini_aer) 86 90 if (.NOT.ret) then … … 95 99 m3a_s_prod = m3as_prod(mm_nla:1:-1) / mm_dzlev(:) 96 100 97 ! Calls haze microphysics (/!\ tendencies in X/m-3) 101 ! Initialize latent heat 102 dtlc(:) = 0._mm_wp 103 104 ! Calls haze microphysics (/!\ tendencies in X/m-3): 105 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 98 106 call mm_haze_microphysics(m3a_s_prod,Hdm0as,Hdm3as,Hdm0af,Hdm3af) 99 107 100 ! Calls cloud microphysics (/!\ tendencies in X/m-3) 108 ! Calls cloud microphysics (/!\ tendencies in X/m-3): 109 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 101 110 if (mm_call_clouds) then 102 111 call mm_cloud_microphysics(Hdm0as,Hdm3as,Hdm0af,Hdm3af,& … … 110 119 dm3ices(:,i) = dm3ices(mm_nla:1:-1,i) * mm_dzlev(mm_nla:1:-1) 111 120 dmugases(:,i) = dmugases(mm_nla:1:-1,i) 121 122 ! Compute condensation heating rate 123 dtlc(:) = dtlc(:) + (dmugases(:,i) * mm_xESPS(i)%fmol2fmas * mm_LheatX(mm_temp,mm_xESPS(i))) 112 124 enddo 113 125 114 126 else 115 Cdm0as(:) = 0._mm_wp ; Cdm3as(:) = 0._mm_wp ; Cdm0af(:) = 0._mm_wp ; Cdm3af(:)= 0._mm_wp127 Cdm0as(:) = 0._mm_wp ; Cdm3as(:) = 0._mm_wp ; Cdm0af(:) = 0._mm_wp ; Cdm3af(:) = 0._mm_wp 116 128 dm0ccn(:) = 0._mm_wp ; dm3ccn(:) = 0._mm_wp ; dm3ices(:,:) = 0._mm_wp ; dmugases(:,:) = 0._mm_wp 129 dtlc(:) = 0._mm_wp 117 130 endif ! end of mm_call_clouds 118 131 … … 140 153 !! before the latter are called to initialize a new step. 141 154 !! 142 143 155 ! Production of the 3rd order moment of the spherical mode distribution (m3.m-2). 144 156 REAL(kind=mm_wp), INTENT(in), DIMENSION(:) :: m3as_prod … … 155 167 LOGICAL :: ret 156 168 157 ! Local variables. 169 ! Local variables: 170 !~~~~~~~~~~~~~~~~~ 158 171 ! Production of the spherical aerosols (m3.m-3). 159 172 REAL(kind=mm_wp), DIMENSION(:), ALLOCATABLE :: m3a_s_prod 160 173 ALLOCATE(m3a_s_prod(mm_nla)) 161 174 162 ! Sanity check for initialization 175 ! Sanity check for initialization: 176 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 163 177 ret = (mm_ini_col.AND.mm_ini_aer) 164 178 if (.NOT.ret) then … … 173 187 m3a_s_prod = m3as_prod(mm_nla:1:-1) / mm_dzlev(:) 174 188 175 ! Calls haze microphysics 189 ! Calls haze microphysics (/!\ tendencies in X/m-3): 190 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 176 191 call mm_haze_microphysics(m3a_s_prod,dm0as,dm3as,dm0af,dm3af) 177 192 -
trunk/LMDZ.PLUTO/libf/phypluto/mp2m_calmufi.F90
r3957 r3962 1 1 MODULE mp2m_calmufi 2 2 use tracer_h 3 use comcstfi_mod, only : mugaz 3 use comcstfi_mod, only : mugaz, cpp 4 4 use callkeys_mod, only : call_haze_prod_pCH4, haze_rho,& 5 5 callmuclouds … … 44 44 CONTAINS 45 45 46 SUBROUTINE calmufi(dt, plev, zlev, play, zlay, g3d, temp, pq, zdqfi, zdqmufi_prod, zdqmufi )46 SUBROUTINE calmufi(dt, plev, zlev, play, zlay, g3d, temp, pq, zdqfi, zdqmufi_prod, zdqmufi, zdtcond) 47 47 !! Interface subroutine to YAMMS model for LMD PCM. 48 48 !! … … 62 62 REAL(kind=8), DIMENSION(:,:,:), INTENT(IN) :: zdqmufi_prod ! Aerosols production tendency (kg/kg_of_air/s). 63 63 REAL(kind=8), DIMENSION(:,:,:), INTENT(OUT) :: zdqmufi ! Microphysical tendency for tracers (X.m-2 --> X.kg-1.s-1). 64 REAL(kind=8), DIMENSION(:,:), INTENT(OUT) :: zdtcond ! Condensation heating rate (K.s-1). 64 65 65 66 ! Local tracers: … … 90 91 REAL(kind=8), DIMENSION(:,:), ALLOCATABLE :: dm3ices ! Tendencies of the 3rd order moments of each ice components (m3.m-2). 91 92 REAL(kind=8), DIMENSION(:,:), ALLOCATABLE :: dmugases ! Tendencies of each condensible gas species (mol.mol-1). 93 REAL(kind=8), DIMENSION(:), ALLOCATABLE :: dtlc ! Latent heat of condensation (J.kg-1). 92 94 93 95 ! Local variables: … … 129 131 ALLOCATE(dm3ices(nlay,nmicro_ices)) 130 132 ALLOCATE(dmugases(nlay,nmicro_ices)) 133 ALLOCATE(dtlc(nlay)) 131 134 132 135 ALLOCATE(int2ext(nlon,nlay)) … … 138 141 ! Initialization of zdqmufi here since intent=out and no action performed on every tracers 139 142 zdqmufi(:,:,:) = 0.D0 143 144 ! Initialization of zdtcond here since intent=out 145 zdtcond(:,:) = 0.D0 140 146 141 147 ! Initialize tracers updated with former processes from physics … … 191 197 192 198 ! Initializes tendencies 193 dm0as(:) = 0._mm_wp ; dm3as(:) = 0._mm_wp ; dm0af(:) = 0._mm_wp ; dm3af(:)= 0._mm_wp199 dm0as(:) = 0._mm_wp ; dm3as(:) = 0._mm_wp ; dm0af(:) = 0._mm_wp ; dm3af(:) = 0._mm_wp 194 200 dm0ccn(:) = 0._mm_wp ; dm3ccn(:) = 0._mm_wp ; dm3ices(:,:) = 0._mm_wp ; dmugases(:,:) = 0._mm_wp 201 dtlc(:) = 0._mm_wp 195 202 196 203 !---------------------------- … … 200 207 ! Call microphysics 201 208 if (callmuclouds) then 202 if(.NOT.mm_muphys(m3as_prod,dm0as,dm3as,dm0af,dm3af,dm0ccn,dm3ccn,dm3ices,dmugases )) then209 if(.NOT.mm_muphys(m3as_prod,dm0as,dm3as,dm0af,dm3af,dm0ccn,dm3ccn,dm3ices,dmugases,dtlc)) then 203 210 call abort_program(error("mm_muphys (clouds) aborted -> initialization not done !",-1)) 204 211 endif … … 232 239 zdqmufi(ilon,:,micro_gas_indx(i)) = dmugases(:,i) * (mmol(micro_gas_indx(i))/mugaz) 233 240 enddo 241 242 ! Compute condensation heating rate in K.s-1 243 zdtcond(ilon,:) = dtlc(:) / cpp / dt 234 244 endif ! End of callmuclouds 235 245 -
trunk/LMDZ.PLUTO/libf/phypluto/physiq_mod.F90
r3957 r3962 411 411 real pdqmufi_prod(ngrid,nlayer,nq) ! Aerosols production tendency (kg/kg_of_air/s). 412 412 real int2ext(ngrid,nlayer) ! Intensive to extensive factor (kg_air/m3: X/kg_air --> X/m3). 413 real zdtcond(ngrid,nlayer) ! Condensation heating rate (K.s-1). 413 414 414 415 ! Local variables for LOCAL CALCULATIONS: … … 1617 1618 pdqmufi(:,:,:) = 0. 1618 1619 1619 call calmufi(ptimestep,pplev,zzlev,pplay,zzlay,gzlat,pt,pq,pdq,pdqmufi_prod,pdqmufi )1620 call calmufi(ptimestep,pplev,zzlev,pplay,zzlay,gzlat,pt,pq,pdq,pdqmufi_prod,pdqmufi,zdtcond) 1620 1621 1621 1622 pdq(:,:,:) = pdq(:,:,:) + pdqmufi(:,:,:) … … 2536 2537 call write_output("m3"//TRIM(str(6:)),"Volume of "//TRIM(str(6:))//" ice","m3.m-3",zq(:,:,micro_ice_indx(iq))*int2ext(:,:)) 2537 2538 enddo 2539 call write_output("dtcond","Condensation heating rate","K.s-1",zdtcond(:,:)) 2538 2540 2539 2541 ! Diagnostics:
Note: See TracChangeset
for help on using the changeset viewer.
