Changeset 4171 for trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90
- Timestamp:
- Apr 3, 2026, 5:21:58 PM (7 days ago)
- File:
-
- 1 edited
-
trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90 (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90
r4153 r4171 249 249 real zdtsw1(ngrid,nlayer), zdtlw1(ngrid,nlayer) ! Callcorrk routine. 250 250 real zdtlc(ngrid,nlayer) ! Condensation heating rate. 251 real refCorr, time ! for hrcorr_mod routines.251 real zdtlcfi(ngrid,nlayer) ! Condensation heating rate computed in the physics 252 252 253 253 ! For Surface Tracers : (kg/m2/s) … … 268 268 real zdqfibar(ngrid,nlayer,nq) ! For 2D chemistry 269 269 real zdqmufibar(ngrid,nlayer,nq) ! For 2D chemistry 270 real zdtlcbar(ngrid,nlayer) ! For 2D chemistry 270 271 271 272 ! For Winds : (m/s/s) … … 394 395 ! Or one can put calmufi in MMP_GCM module (in muphytitan). 395 396 INTERFACE 396 SUBROUTINE calmufi(dt, plev, zlev, play, zlay, g3d, temp, pq, zdqfi, zdq )397 SUBROUTINE calmufi(dt, plev, zlev, play, zlay, g3d, temp, pq, zdqfi, zdq, zdt) 397 398 REAL(kind=8), INTENT(IN) :: dt !! Physics timestep (s). 398 399 REAL(kind=8), DIMENSION(:,:), INTENT(IN) :: plev !! Pressure levels (Pa). … … 405 406 REAL(kind=8), DIMENSION(:,:,:), INTENT(IN) :: zdqfi !! Tendency from former processes for tracers (\(X.kg^{-1}}\)). 406 407 REAL(kind=8), DIMENSION(:,:,:), INTENT(OUT) :: zdq !! Microphysical tendency for tracers (\(X.kg^{-1}}\)). 408 REAL(kind=8), DIMENSION(:,:), INTENT(OUT) :: zdt !! Temperature tendencies due to condensation/evaporation (\(K.s^{-1}\)). 407 409 END SUBROUTINE calmufi 408 410 END INTERFACE … … 441 443 ! ~~~~~~~~~~~~~~~~~~ 442 444 dtrad(:,:) = 0.D0 443 zdtlc(:,:) = 0.D0444 445 fluxrad(:) = 0.D0 445 446 zdtsw(:,:) = 0.D0 446 447 zdtlw(:,:) = 0.D0 448 zdtlc(:,:) = 0.D0 449 zdtlcfi(:,:) = 0.D0 447 450 zpopthi(:,:,:,:) = 0.D0 448 451 zpopthv(:,:,:,:) = 0.D0 … … 1129 1132 #ifdef USE_QTEST 1130 1133 dtpq(:,:,:) = 0.D0 ! we want tpq to go only through mufi 1131 call calmufi(ptimestep,pplev,zzlev,pplay,zzlay,gzlat,pt,tpq,dtpq,zdqmufi )1134 call calmufi(ptimestep,pplev,zzlev,pplay,zzlay,gzlat,pt,tpq,dtpq,zdqmufi,zdtlc) 1132 1135 tpq(:,:,:) = tpq(:,:,:) + zdqmufi(:,:,:)*ptimestep ! only manipulation of tpq->*ptimestep here 1133 1136 1134 1137 #else 1135 call calmufi(ptimestep,pplev,zzlev,pplay,zzlay,gzlat,pt,pq,pdq,zdqmufi )1138 call calmufi(ptimestep,pplev,zzlev,pplay,zzlay,gzlat,pt,pq,pdq,zdqmufi,zdtlc) 1136 1139 pdq(:,:,:) = pdq(:,:,:) + zdqmufi(:,:,:) 1137 1140 … … 1184 1187 zdqfibar(:,:,:) = 0.D0 ! We work in zonal average -> forget processes other than condensation 1185 1188 call calmufi(ptimestep,zplevbar,zzlevbar,zplaybar,zzlaybar, & 1186 gzlat,ztfibar,zqfibar,zdqfibar,zdqmufibar )1189 gzlat,ztfibar,zqfibar,zdqfibar,zdqmufibar,zdtlcbar) 1187 1190 ! TODO : Add a sanity check here ! 1188 1191 endif 1189 1192 1190 1193 ! Condensation heating rate : 1191 if (callclouds ) then1194 if (callclouds .and. latent_heat) then 1192 1195 ! Default value -> no condensation [kg/kg_air/s] : 1193 1196 dmuficond(:,:,:) = 0.D0 … … 1195 1198 dmuficond(:,:,iq) = zdqmufi(:,:,gazs_indx(iq)) 1196 1199 enddo 1197 call cond_muphy(ngrid,nlayer,pt,dmuficond,zdtlc) 1198 if (latent_heat) then 1199 pdt(:,:) = pdt(:,:) + zdtlc(:,:) 1200 endif 1200 call cond_muphy(ngrid,nlayer,pt,dmuficond,zdtlcfi) 1201 pdt(:,:) = pdt(:,:) + zdtlc 1201 1202 endif 1202 1203 endif ! callmufi … … 1360 1361 zdmassmr_col(ig)=SUM(zdmassmr(ig,:)) 1361 1362 enddo 1362 1363 call writediagfi(ngrid,"mass_evap","mass gain"," ",3,zdmassmr) 1364 call writediagfi(ngrid,"mass_evap_col","mass gain col"," ",2,zdmassmr_col) 1365 call writediagfi(ngrid,"mass","mass","kg/m2",3,mass) 1363 1364 #ifndef CPP_XIOS 1365 call writediagfi(ngrid,"mass_evap","mass gain"," ",3,zdmassmr) 1366 call writediagfi(ngrid,"mass_evap_col","mass gain col"," ",2,zdmassmr_col) 1367 call writediagfi(ngrid,"mass","mass","kg/m2",3,mass) 1368 #endif 1366 1369 1367 1370 call mass_redistribution(ngrid,nlayer,nq,ptimestep, & … … 1631 1634 !----------------------------------------------------------------------------------------------------- 1632 1635 1636 #ifndef CPP_XIOS 1633 1637 1634 1638 call writediagfi(ngrid,"Ls","solar longitude","deg",0,zls*180./pi) … … 1715 1719 i2e(:,:) = ( pplev(:,1:nlayer)-pplev(:,2:nlayer+1) ) / gzlat(:,1:nlayer) /(zzlev(:,2:nlayer+1)-zzlev(:,1:nlayer)) 1716 1720 1717 #ifdef USE_QTEST1721 #ifdef USE_QTEST 1718 1722 ! Microphysical tracers passed through dyn+phys(except mufi) 1719 1723 call writediagfi(ngrid,"mu_m0as_dp","Dynphys only spherical mode 0th order moment",'m-3',3,zq(:,:,micro_indx(1))*i2e) … … 1726 1730 call writediagfi(ngrid,"mu_m0af_mo","Mufi only fractal mode 0th order moment",'m-3',3,tpq(:,:,micro_indx(3))*i2e) 1727 1731 call writediagfi(ngrid,"mu_m3af_mo","Mufi only fractal mode 3rd order moment",'m3/m3',3,tpq(:,:,micro_indx(4))*i2e) 1728 #else1732 #else 1729 1733 call writediagfi(ngrid,"mu_m0as","Spherical mode 0th order moment",'m-3',3,zq(:,:,micro_indx(1))*i2e) 1730 1734 call writediagfi(ngrid,"mu_m3as","Spherical mode 3rd order moment",'m3/m3',3,zq(:,:,micro_indx(2))*i2e) 1731 1735 call writediagfi(ngrid,"mu_m0af","Fractal mode 0th order moment",'m-3',3,zq(:,:,micro_indx(3))*i2e) 1732 1736 call writediagfi(ngrid,"mu_m3af","Fractal mode 3rd order moment",'m3/m3',3,zq(:,:,micro_indx(4))*i2e) 1733 #endif 1737 #endif ! USE_QTEST 1734 1738 1735 1739 ! Microphysical diagnostics … … 1751 1755 1752 1756 endif ! end of 'tracer' 1757 #endif ! not CPP_XIOS 1753 1758 1754 1759 #ifdef CPP_XIOS … … 1821 1826 CALL send_xios_field("dtdif",zdtdif) 1822 1827 CALL send_xios_field("dtadj",zdtadj(:,:)) 1823 IF (callclouds ) THEN1828 IF (callclouds .and. latent_heat) THEN 1824 1829 CALL send_xios_field("dtlc",zdtlc) 1830 CALL send_xios_field("dtlcfi",zdtlcfi) 1825 1831 ENDIF 1826 1832 … … 1952 1958 !-------------------------------------------------------- 1953 1959 IF (callmufi) THEN 1960 ! Microphysical tracers are expressed in unit/m3. 1961 ! convert X.kg-1 --> X.m-3 (whereas for optics was -> X.m-2) 1962 i2e(:,:) = ( pplev(:,1:nlayer)-pplev(:,2:nlayer+1) ) / gzlat(:,1:nlayer) /(zzlev(:,2:nlayer+1)-zzlev(:,1:nlayer)) 1954 1963 ! Atmosphere (3D) : 1955 1964 ! Moments M0 and M3 : … … 2012 2021 2013 2022 ! Condensation tendencies from microphysics (mol/mol/s) : 2014 IF (callclouds ) THEN2023 IF (callclouds .and. latent_heat) THEN 2015 2024 DO iq = 1, size(ices_indx) 2016 2025 CALL send_xios_field('dmuficond_'//trim(nameOfTracer(gazs_indx(iq))),dmuficond(:,:,iq)/rat_mmol(gazs_indx(iq))) ! kg/kg/s -> mol/mol/s
Note: See TracChangeset
for help on using the changeset viewer.
