Changeset 4639 for LMDZ6/trunk/libf/phylmd
- Timestamp:
- Jul 24, 2023, 4:46:18 PM (16 months ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lscp_ini_mod.F90
r4563 r4639 30 30 REAL ztfondue ! parameter to calculate melting fraction of precipitation 31 31 PARAMETER (ztfondue=278.15) 32 33 REAL temp_nowater ! temperature below which liquid water no longer exists 34 PARAMETER (temp_nowater=233.15) 32 35 33 36 REAL, SAVE :: rain_int_min=0.001 ! Minimum local rain intensity [mm/s] before the decrease in associated precipitation fraction -
LMDZ6/trunk/libf/phylmd/lscp_mod.F90
r4563 r4639 15 15 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 16 16 iflag_ice_thermo, ok_ice_sursat, qsatl, qsats, & 17 distcltop, 17 distcltop,temp_cltop, & 18 18 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 19 19 Tcontr, qcontr, qcontr2, fcontrN, fcontrP) … … 167 167 REAL, DIMENSION(klon,klev+1), INTENT(OUT) :: psfl ! large-scale snowfall flux in the column [kg/s/m2] 168 168 REAL, DIMENSION(klon,klev), INTENT(OUT) :: distcltop ! distance to cloud top [m] 169 169 REAL, DIMENSION(klon,klev), INTENT(OUT) :: temp_cltop ! temperature of cloud top [K] 170 170 ! fraction of aerosol scavenging through impaction and nucleation (for on-line) 171 171 … … 239 239 REAL radocondi(klon,klev), radocondl(klon,klev) 240 240 REAL effective_zneb 241 REAL distcltop1D(klon) 241 REAL distcltop1D(klon), temp_cltop1D(klon) 242 242 243 243 … … 320 320 qzero(:) = 0.0 321 321 distcltop1D(:)=0.0 322 322 temp_cltop1D(:) = 0.0 323 323 !--ice supersaturation 324 324 gamma_ss(:,:) = 1.0 … … 729 729 IF (iflag_t_glace.GE.4) THEN 730 730 ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top 731 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D )731 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D,temp_cltop1D) 732 732 ENDIF 733 CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:), zfice(:),dzfice(:))733 CALL icefrac_lscp(klon, zt(:), iflag_ice_thermo, distcltop1D(:),temp_cltop1D(:),zfice(:),dzfice(:)) 734 734 735 735 DO i=1,klon !todoan : check if loop in i is needed … … 827 827 ! For iflag_t_glace GE 4 the phase partition function dependends on temperature AND distance to cloud top 828 828 IF (iflag_t_glace.GE.4) THEN 829 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D )829 CALL distance_to_cloud_top(klon,klev,k,t,pplay,paprs,rneb,distcltop1D,temp_cltop1D) 830 830 distcltop(:,k)=distcltop1D(:) 831 temp_cltop(:,k)=temp_cltop1D(:) 831 832 ENDIF 832 833 833 834 ! Partition function in stratiform clouds (will be overwritten in boundary-layer MPCs) 834 CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:), zfice(:), dzfice(:))835 CALL icefrac_lscp(klon,zt(:),iflag_ice_thermo,distcltop1D(:),temp_cltop1D(:),zfice(:), dzfice(:)) 835 836 836 837 -
LMDZ6/trunk/libf/phylmd/lscp_tools_mod.F90
r4562 r4639 102 102 103 103 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 104 SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, icefrac, dicefracdT)104 SUBROUTINE ICEFRAC_LSCP(klon, temp, iflag_ice_thermo, distcltop, temp_cltop, icefrac, dicefracdT) 105 105 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 106 106 … … 114 114 USE print_control_mod, ONLY: lunout, prt_level 115 115 USE lscp_ini_mod, ONLY: t_glace_min, t_glace_max, exposant_glace, iflag_t_glace 116 USE lscp_ini_mod, ONLY : RTT, dist_liq 116 USE lscp_ini_mod, ONLY : RTT, dist_liq, temp_nowater 117 117 118 118 IMPLICIT NONE 119 119 120 120 121 INTEGER, INTENT(IN) :: klon ! number of horizontal grid points 122 REAL, INTENT(IN), DIMENSION(klon) :: temp ! temperature 123 REAL, INTENT(IN), DIMENSION(klon) :: distcltop ! distance to cloud top 121 INTEGER, INTENT(IN) :: klon ! number of horizontal grid points 122 REAL, INTENT(IN), DIMENSION(klon) :: temp ! temperature 123 REAL, INTENT(IN), DIMENSION(klon) :: distcltop ! distance to cloud top 124 REAL, INTENT(IN), DIMENSION(klon) :: temp_cltop ! temperature of cloud top 124 125 INTEGER, INTENT(IN) :: iflag_ice_thermo 125 126 REAL, INTENT(OUT), DIMENSION(klon) :: icefrac … … 224 225 ENDIF 225 226 227 ! if temperature of cloud top <-40°C, 228 IF (iflag_t_glace .GE. 4) THEN 229 IF ((temp_cltop(i) .LE. temp_nowater) .AND. (temp(i) .LE. t_glace_max)) THEN 230 icefrac(i) = 1. 231 dicefracdT(i) = 0. 232 ENDIF 233 ENDIF 226 234 227 235 … … 376 384 377 385 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 378 SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D )386 SUBROUTINE DISTANCE_TO_CLOUD_TOP(klon,klev,k,temp,pplay,paprs,rneb,distcltop1D,temp_cltop) 379 387 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 380 388 … … 391 399 392 400 REAL, INTENT(OUT), DIMENSION(klon) :: distcltop1D ! distance from cloud top 393 401 REAL, INTENT(OUT), DIMENSION(klon) :: temp_cltop ! temperature of cloud top 402 394 403 REAL dzlay(klon,klev) 395 404 REAL zlay(klon,klev) … … 415 424 ENDDO 416 425 417 k_top = k418 426 DO i=1,klon 427 k_top = k 419 428 IF (rneb(i,k) .LE. tresh_cl) THEN 420 429 bool_cl = .FALSE. … … 437 446 !interf for layer of cloud top 438 447 distcltop1D(i) = zlay(i,k_top) - zlay(i,k) + dzlay(i,k_top)/2 448 temp_cltop(i) = temp(i,k_top) 439 449 ENDDO ! klon 440 450 -
LMDZ6/trunk/libf/phylmd/newmicro.F90
r4562 r4639 3 3 SUBROUTINE newmicro(flag_aerosol, ok_cdnc, bl95_b0, bl95_b1, paprs, pplay, t, pqlwp, picefra, pclc, & 4 4 pcltau, pclemi, pch, pcl, pcm, pct, pctlwp, xflwp, xfiwp, xflwc, xfiwc, & 5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg, distcltop, re, fl, reliq, reice, &5 mass_solu_aero, mass_solu_aero_pi, pcldtaupi, latitude_deg, distcltop, temp_cltop, re, fl, reliq, reice, & 6 6 reliq_pi, reice_pi) 7 7 … … 43 43 ! latitude_deg-input latitude in degrees 44 44 ! distcltop ---input- distance from cloud top 45 ! temp_cltop -input- temperature of cloud top 45 46 46 47 ! re------output-R-Cloud droplet effective radius multiplied by fl [um] … … 100 101 101 102 REAL distcltop(klon,klev) 103 REAL temp_cltop(klon,klev) 102 104 LOGICAL lo 103 105 … … 244 246 245 247 IF (ok_new_lscp) THEN 246 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k), zfice(:,k),dzfice(:,k))248 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),temp_cltop(:,k),zfice(:,k),dzfice(:,k)) 247 249 ELSE 248 250 CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:,k)) -
LMDZ6/trunk/libf/phylmd/nuage.F90
r4562 r4639 3 3 SUBROUTINE nuage(paprs, pplay, t, pqlwp,picefra, pclc, pcltau, pclemi, pch, pcl, pcm, & 4 4 pct, pctlwp, ok_aie, mass_solu_aero, mass_solu_aero_pi, bl95_b0, bl95_b1, distcltop, & 5 cldtaupi, re, fl)5 temp_cltop, cldtaupi, re, fl) 6 6 USE dimphy 7 7 USE lscp_tools_mod, only: icefrac_lscp … … 51 51 REAL pct(klon), pctlwp(klon), pch(klon), pcl(klon), pcm(klon) 52 52 REAL distcltop(klon,klev) 53 REAL temp_cltop(klon,klev) 53 54 LOGICAL lo 54 55 … … 113 114 ! t_glace_max, exposant_glace) 114 115 IF (ok_new_lscp) THEN 115 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k), zfice(:),dzfice(:))116 CALL icefrac_lscp(klon,t(:,k),iflag_ice_thermo,distcltop(:,k),temp_cltop(:,k),zfice(:),dzfice(:)) 116 117 ELSE 117 118 CALL icefrac_lsc(klon,t(:,k),pplay(:,k)/paprs(:,1),zfice(:)) -
LMDZ6/trunk/libf/phylmd/phys_local_var_mod.F90
r4636 r4639 537 537 REAL, SAVE, ALLOCATABLE :: distcltop(:,:) 538 538 !$OMP THREADPRIVATE(distcltop) 539 REAL, SAVE, ALLOCATABLE :: temp_cltop(:,:) 540 !$OMP THREADPRIVATE(temp_cltop) 539 541 540 542 … … 908 910 pfraclr(:,:)=0. ; pfracld(:,:)=0. ! because not always defined 909 911 ALLOCATE(distcltop(klon,klev)) 910 912 ALLOCATE(temp_cltop(klon,klev)) 911 913 912 914 ALLOCATE (zxsnow(klon),snowhgt(klon),qsnow(klon),to_ice(klon)) … … 1223 1225 DEALLOCATE (zxsnow,snowhgt,qsnow,to_ice,sissnow,runoff,albsol3_lic) 1224 1226 DEALLOCATE(distcltop) 1227 DEALLOCATE(temp_cltop) 1225 1228 DEALLOCATE (p_tropopause) 1226 1229 DEALLOCATE (z_tropopause) -
LMDZ6/trunk/libf/phylmd/physiq_mod.F90
r4636 r4639 299 299 rneblsvol, & 300 300 pfraclr,pfracld, & 301 distcltop, &301 distcltop,temp_cltop, & 302 302 zqsatl, zqsats, & 303 303 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & … … 3739 3739 prfl, psfl, rhcl, & 3740 3740 zqasc, fraca,ztv,zpspsk,ztla,zthl,iflag_cld_th, & 3741 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, &3741 iflag_ice_thermo, ok_ice_sursat, zqsatl, zqsats, distcltop, temp_cltop, & 3742 3742 qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss, & 3743 3743 Tcontr, qcontr, qcontr2, fcontrN, fcontrP ) … … 4312 4312 flwp, fiwp, flwc, fiwc, & 4313 4313 mass_solu_aero, mass_solu_aero_pi, & 4314 cldtaupi, latitude_deg, distcltop, re, fl, ref_liq, ref_ice, &4314 cldtaupi, latitude_deg, distcltop, temp_cltop, re, fl, ref_liq, ref_ice, & 4315 4315 ref_liq_pi, ref_ice_pi) 4316 4316 ELSE … … 4320 4320 ok_aie, & 4321 4321 mass_solu_aero, mass_solu_aero_pi, & 4322 bl95_b0, bl95_b1, distcltop, &4322 bl95_b0, bl95_b1, distcltop, temp_cltop, & 4323 4323 cldtaupi, re, fl) 4324 4324 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.