Changeset 4059 for LMDZ6/trunk/libf/phylmd/lscp_mod.F90
- Timestamp:
- Jan 21, 2022, 3:50:54 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lscp_mod.F90
r3999 r4059 6 6 7 7 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8 SUBROUTINE LSCP(dtime,paprs,pplay,t,q,ptconv,ratqs, & 9 d_t, d_q, d_ql, d_qi, rneb, radliq, radicefrac, & 10 rain, snow, & 8 SUBROUTINE LSCP(dtime,missing_val, & 9 paprs,pplay,t,q,ptconv,ratqs, & 10 d_t, d_q, d_ql, d_qi, rneb, rneb_seri, & 11 radliq, radicefrac, rain, snow, & 11 12 pfrac_impa, pfrac_nucl, pfrac_1nucl, & 12 13 frac_impa, frac_nucl, beta, & 13 14 prfl, psfl, rhcl, zqta, fraca, & 14 15 ztv, zpspsk, ztla, zthl, iflag_cld_th, & 15 iflag_ice_thermo )16 iflag_ice_thermo, iflag_ice_sursat) 16 17 17 18 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 93 94 USE phys_local_var_mod, ONLY: rneblsvol 94 95 USE lscp_tools_mod, ONLY : CALC_QSAT_ECMWF, ICEFRAC_LSCP, CALC_GAMMASAT, FALLICE_VELOCITY 95 96 USE ice_sursat_mod 97 !--ice supersaturation 98 USE phys_local_var_mod, ONLY: zqsats, zqsatl 99 USE phys_local_var_mod, ONLY: qclr, qcld, qss, qvc, rnebclr, rnebss, gamma_ss 100 USE phys_local_var_mod, ONLY: Tcontr, qcontr, qcontr2, fcontrN, fcontrP 96 101 97 102 IMPLICIT NONE 98 99 100 103 101 104 !=============================================================================== … … 114 117 115 118 REAL, INTENT(IN) :: dtime ! time step [s] 119 REAL, INTENT(IN) :: missing_val ! missing value for output 120 116 121 REAL, DIMENSION(klon,klev+1), INTENT(IN) :: paprs ! inter-layer pressure [Pa] 117 122 REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay ! mid-layer pressure [Pa] … … 121 126 INTEGER, INTENT(IN) :: iflag_ice_thermo! flag to activate the ice thermodynamics 122 127 ! CR: if iflag_ice_thermo=2, only convection is active 128 INTEGER, INTENT(IN) :: iflag_ice_sursat ! 0 = sursat desativee, 1 = sursat activee 129 123 130 LOGICAL, DIMENSION(klon,klev), INTENT(IN) :: ptconv ! grid points where deep convection scheme is active 124 131 … … 138 145 REAL, DIMENSION(klon,klev), INTENT(INOUT):: ratqs ! function of pressure that sets the large-scale 139 146 ! cloud PDF (sigma=ratqs*qt) 147 148 ! Input sursaturation en glace 149 REAL, DIMENSION(klon,klev), INTENT(INOUT):: rneb_seri ! fraction nuageuse en memoire 140 150 141 151 ! OUTPUT variables … … 388 398 d_tot_zneb(:) = 0.0 389 399 400 !--ice sursaturation 401 gamma_ss(:,:) = 1. 402 qss(:,:) = 0. 403 rnebss(:,:) = 0. 404 Tcontr(:,:) = missing_val 405 qcontr(:,:) = missing_val 406 qcontr2(:,:) = missing_val 407 fcontrN(:,:) = 0.0 408 fcontrP(:,:) = 0.0 390 409 391 410 !=============================================================================== … … 645 664 qtot=zq(i)+zmqc(i) 646 665 CALL CALC_QSAT_ECMWF(zt(i),qtot,pplay(i,k),RTT,0,.false.,zqs(i),zdqs(i)) 647 zdqsdT_raw(i) = zdqs(i)* & 648 & RCPD*(1.0+RVTMP2*zq(i)) / (RLVTT*(1.-zdelta) + RLSTT*zdelta) 666 zdqsdT_raw(i) = zdqs(i)*RCPD*(1.0+RVTMP2*zq(i)) / (RLVTT*(1.-zdelta) + RLSTT*zdelta) 649 667 650 668 IF (zq(i) .LT. 1.e-15) THEN … … 677 695 qincloud_mpc(:)=0. 678 696 679 680 681 697 IF (iflag_cld_th.GE.5) THEN 682 698 … … 778 794 ! new temperature: 779 795 Tbef(i)=Tbef(i)+DT(i) 780 781 796 782 797 ! Rneb, qzn and zcond for lognormal PDFs … … 800 815 zpdf_e2(i)=1.-erf(zpdf_e2(i)) 801 816 802 IF (zpdf_e1(i).LT.1.e-10) THEN 803 rneb(i,k)=0. 804 zqn(i)=gammasat(i)*zqs(i) 817 !--ice sursaturation by Audran 818 IF ((iflag_ice_sursat.EQ.0).OR.(Tbef(i).GT.t_glace_min)) THEN 819 820 IF (zpdf_e1(i).LT.1.e-10) THEN 821 rneb(i,k)=0. 822 zqn(i)=gammasat(i)*zqs(i) 823 ELSE 824 rneb(i,k)=0.5*zpdf_e1(i) 825 zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i) 826 ENDIF 827 828 rnebss(i,k)=0.0 !--ajout OB (necessaire car boucle de convergence sur le temps) 829 fcontrN(i,k)=0.0 !--idem 830 fcontrP(i,k)=0.0 !--idem 831 qss(i,k)=0.0 !--idem 832 805 833 ELSE 806 rneb(i,k)=0.5*zpdf_e1(i) 807 zqn(i)=zq(i)*zpdf_e2(i)/zpdf_e1(i) 808 ENDIF 834 !------------------------------------ 835 ! SURSATURATION EN GLACE 836 !------------------------------------ 837 838 CALL ice_sursat(pplay(i,k), paprs(i,k)-paprs(i,k+1), dtime, i, k, t(i,k), zq(i), & 839 gamma_ss(i,k), zqs(i), Tbef(i), rneb_seri(i,k), ratqs(i,k), & 840 rneb(i,k), zqn(i), rnebss(i,k), qss(i,k), & 841 Tcontr(i,k), qcontr(i,k), qcontr2(i,k), fcontrN(i,k), fcontrP(i,k) ) 842 843 ENDIF ! ((flag_ice_sursat.eq.0).or.(Tbef(i).gt.t_glace_min)) 809 844 810 845 ! If vertical heterogeneity, change fraction by volume as well … … 823 858 ! EV: calculation of icefrac in one sole function 824 859 CALL icefrac_lscp(klon, zt(:),pplay(:,k)/paprs(:,1),zfice(:),dzfice(:)) 825 826 860 827 861 IF (zfice(i).LT.1) THEN … … 985 1019 ! remaining water in the cloud during the time step that is seen by the radiation 986 1020 ! ------------------------------------------------------------------------------- 987 988 1021 989 1022 DO n = 1, ninter … … 1128 1161 ENDDO 1129 1162 1130 1131 1132 1133 1163 ! LTP: limit of surface cloud fraction covered by precipitation when the local intensity of the flux is below rain_int_min 1134 1164 ! if iflag_evap_pre=4 … … 1137 1167 DO i=1, klon 1138 1168 1139 1140 1169 IF ((zrflclr(i) + ziflclr(i)) .GT. 0. ) THEN 1141 1170 znebprecipclr(i) = min(znebprecipclr(i),max(zrflclr(i)/ & … … 1144 1173 znebprecipclr(i)=0. 1145 1174 ENDIF 1146 1147 1175 1148 1176 IF ((zrflcld(i) + ziflcld(i)) .GT. 0.) THEN … … 1152 1180 znebprecipcld(i)=0. 1153 1181 ENDIF 1154 1155 1182 1156 1183 ENDDO … … 1190 1217 ENDIF 1191 1218 1192 zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0) & 1193 * (paprs(i,k)-paprs(i,k+1))/RG 1194 1219 zprec_cond(i) = MAX(zcond(i)-zoliq(i),0.0)*(paprs(i,k)-paprs(i,k+1))/RG 1195 1220 1196 1221 IF (rneb(i,k).GT.0.0.AND.zprec_cond(i).GT.0.) THEN 1197 1198 1222 1199 1223 IF (t(i,k) .GE. t_glace_min) THEN … … 1202 1226 zalpha_tr = a_tr_sca(4) 1203 1227 ENDIF 1204 1205 1228 1206 1229 zfrac_lessi = 1. - EXP(zalpha_tr*zprec_cond(i)/zneb(i)) … … 1241 1264 ENDDO 1242 1265 1243 1244 END DO 1266 !--save some variables for ice sursaturation 1267 ! 1268 DO i = 1, klon 1269 ! pour la mémoire 1270 rneb_seri(i,k) = rneb(i,k) 1271 1272 ! pour les diagnostics 1273 rnebclr(i,k) = 1.0 - rneb(i,k) - rnebss(i,k) 1274 1275 qvc(i,k) = zqs(i) * rneb(i,k) 1276 qclr(i,k) = MAX(1.e-10,zq(i) - qvc(i,k) - qss(i,k)) !--ajout OB a cause de cas pathologiques avec lognormale=F 1277 qcld(i,k) = qvc(i,k) + zcond(i) 1278 1279 !q_sat 1280 CALL CALC_QSAT_ECMWF(Tbef(i),0.,pplay(i,k),RTT,1,.false.,zqsatl(i,k),zdqs(i)) 1281 CALL CALC_QSAT_ECMWF(Tbef(i),0.,pplay(i,k),RTT,2,.false.,zqsats(i,k),zdqs(i)) 1282 1283 ENDDO 1284 1285 ENDDO 1245 1286 1246 1287 !====================================================================== 1247 1288 ! END OF VERTICAL LOOP 1248 1289 !====================================================================== 1249 1250 1290 1251 1291 ! Rain or snow at the surface (depending on the first layer temperature) … … 1254 1294 rain(i) = zrfl(i) 1255 1295 ENDDO 1256 1257 1258 1296 1259 1297 IF (ncoreczq>0) THEN … … 1261 1299 ENDIF 1262 1300 1263 1264 1265 1266 1301 END SUBROUTINE LSCP 1267 1302 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Note: See TracChangeset
for help on using the changeset viewer.