Changeset 5691 for LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90
- Timestamp:
- Jun 6, 2025, 11:55:21 AM (3 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp.f90
r5684 r5691 124 124 USE lmdz_lscp_ini, ONLY : ok_ice_supersat, ok_unadjusted_clouds, iflag_icefrac 125 125 USE lmdz_lscp_ini, ONLY : ok_weibull_warm_clouds, ok_no_issr_strato 126 USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_precip_ lincontrails, ok_ice_sedim126 USE lmdz_lscp_ini, ONLY : ok_plane_contrail, ok_precip_contrails, ok_ice_sedim 127 127 USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_nodeep_lscp_rad 128 128 … … 322 322 REAL, DIMENSION(klon) :: ztupnew 323 323 REAL, DIMENSION(klon) :: zqvapclr, zqupnew ! for poprecip evap / subl 324 REAL, DIMENSION(klon) :: cldfra_above, icesed_flux ! for sedimentation of ice crystals325 324 REAL, DIMENSION(klon) :: zrflclr, zrflcld 326 325 REAL, DIMENSION(klon) :: ziflclr, ziflcld … … 330 329 REAL, DIMENSION(klon) :: zdistcltop, ztemp_cltop 331 330 REAL, DIMENSION(klon) :: zqliq, zqice, zqvapcl ! for icefrac_lscp_turb 331 ! for ice sedimentation 332 REAL, DIMENSION(klon) :: dzsed, flsed, cfsed 333 REAL, DIMENSION(klon) :: dzsed_abv, flsed_abv, cfsed_abv 334 REAL :: qice_sedim 332 335 333 336 ! for quantity of condensates seen by radiation … … 342 345 REAL, DIMENSION(klon) :: totfra_in, qtot_in 343 346 LOGICAL, DIMENSION(klon) :: pt_pron_clds 347 REAL, DIMENSION(klon) :: dzsed_lincont, flsed_lincont, cfsed_lincont 348 REAL, DIMENSION(klon) :: dzsed_circont, flsed_circont, cfsed_circont 349 REAL, DIMENSION(klon) :: dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv 350 REAL, DIMENSION(klon) :: dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv 344 351 REAL :: qice_cont 345 352 !--for Lamquin et al 2012 diagnostics … … 448 455 qvc(:) = 0. 449 456 shear(:) = 0. 457 flsed(:) = 0. 450 458 pt_pron_clds(:) = .FALSE. 451 459 … … 480 488 zqupnew(:) = 0. 481 489 zqvapclr(:) = 0. 482 cldfra_above(:)= 0.483 icesed_flux(:)= 0.484 490 485 491 … … 537 543 CALL poprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), & 538 544 zt, ztupnew, zq, zmqc, znebprecipclr, znebprecipcld, & 539 zqvapclr, zqupnew, icesed_flux, &545 zqvapclr, zqupnew, flsed, & 540 546 cldfra_in, qvc_in, qliq_in, qice_in, & 541 547 zrfl, zrflclr, zrflcld, & … … 548 554 549 555 CALL histprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), & 550 zt, ztupnew, zq, zmqc, zneb, znebprecip, znebprecipclr, icesed_flux, &556 zt, ztupnew, zq, zmqc, zneb, znebprecip, znebprecipclr, flsed, & 551 557 zrfl, zrflclr, zrflcld, & 552 558 zifl, ziflclr, ziflcld, & … … 670 676 !--Initialisation 671 677 IF ( ok_plane_contrail ) THEN 672 lincontfra(:) = 0. 673 circontfra(:) = 0. 674 qlincont(:) = 0. 675 qcircont(:) = 0. 678 IF ( iftop ) THEN 679 dzsed_lincont_abv(:) = 0. 680 flsed_lincont_abv(:) = 0. 681 cfsed_lincont_abv(:) = 0. 682 dzsed_circont_abv(:) = 0. 683 flsed_circont_abv(:) = 0. 684 cfsed_circont_abv(:) = 0. 685 ELSE 686 dzsed_lincont_abv(:) = dzsed_lincont(:) 687 flsed_lincont_abv(:) = flsed_lincont(:) 688 cfsed_lincont_abv(:) = cfsed_lincont(:) 689 dzsed_circont_abv(:) = dzsed_circont(:) 690 flsed_circont_abv(:) = flsed_circont(:) 691 cfsed_circont_abv(:) = cfsed_circont(:) 692 ENDIF 693 dzsed_lincont(:) = 0. 694 flsed_lincont(:) = 0. 695 cfsed_lincont(:) = 0. 696 dzsed_circont(:) = 0. 697 flsed_circont(:) = 0. 698 cfsed_circont(:) = 0. 699 lincontfra(:) = 0. 700 circontfra(:) = 0. 701 qlincont(:) = 0. 702 qcircont(:) = 0. 676 703 ENDIF 704 705 IF ( iftop ) THEN 706 dzsed_abv(:) = 0. 707 flsed_abv(:) = 0. 708 cfsed_abv(:) = 0. 709 ELSE 710 dzsed_abv(:) = dzsed(:) 711 flsed_abv(:) = flsed(:) 712 cfsed_abv(:) = cfsed(:) 713 ENDIF 714 dzsed(:) = 0. 715 flsed(:) = 0. 716 cfsed(:) = 0. 677 717 678 718 DO i = 1, klon … … 821 861 IF (ok_ice_supersat) THEN 822 862 823 IF ( iftop ) THEN824 cldfra_above(:) = 0.825 ELSE826 cldfra_above(:) = rneb(:,k+1)827 ENDIF828 829 863 !--------------------------------------------- 830 864 !-- CONDENSATION AND ICE SUPERSATURATION -- … … 836 870 shear, tke_dissip(:,k), cell_area, Tbef, qtot_in, zqs, & 837 871 gammasat, ratqs(:,k), keepgoing, pt_pron_clds, & 838 cldfra_above, icesed_flux,& 872 dzsed_abv, flsed_abv, cfsed_abv, & 873 dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv, & 874 dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv, & 875 dzsed, flsed, cfsed, dzsed_lincont, flsed_lincont, cfsed_lincont, & 876 dzsed_circont, flsed_circont, cfsed_circont, & 839 877 rneb(:,k), zqn, qvc, issrfra(:,k), qissr(:,k), & 840 878 dcf_sub(:,k), dcf_con(:,k), dcf_mix(:,k), dcfsed(:,k), & … … 1047 1085 1048 1086 ENDIF 1087 1088 ! Remove the ice that was sedimentated. As it is not included in zqn, 1089 ! we only remove it from the total water 1090 IF ( ok_ice_sedim ) THEN 1091 zq(i) = zq(i) - flsed(i) / ( paprs(i,k) - paprs(i,k+1) ) * RG * dtime 1092 ENDIF 1049 1093 1050 1094 … … 1079 1123 1080 1124 IF (ok_plane_contrail) THEN 1125 1126 !--Ice water content of contrails 1127 qice_lincont(:,k) = qlincont(:) - zqs(:) * lincontfra(:) 1128 qice_circont(:,k) = qcircont(:) - zqs(:) * circontfra(:) 1129 1081 1130 !--Contrails precipitate as natural clouds. We save the partition of ice 1082 1131 !--between natural clouds and contrails 1083 1132 !--NB. we use qlincont / qcircont as a temporary variable to save this partition 1084 IF ( ok_precip_ lincontrails ) THEN1133 IF ( ok_precip_contrails ) THEN 1085 1134 DO i = 1, klon 1086 1135 IF ( zoliqi(i) .GT. 0. ) THEN 1087 qlincont(i) = ( qlincont(i) - zqs(i) * lincontfra(i) ) / zoliqi(i) 1136 qlincont(i) = qice_lincont(i,k) / zoliqi(i) 1137 qcircont(i) = qice_circont(i,k) / zoliqi(i) 1088 1138 ELSE 1089 1139 qlincont(i) = 0. 1140 qcircont(i) = 0. 1090 1141 ENDIF 1091 1142 ENDDO … … 1094 1145 !--the cloud variables 1095 1146 DO i = 1, klon 1096 qice_cont = q lincont(i) - zqs(i) * lincontfra(i)1097 rneb(i,k) = rneb(i,k) - lincontfra(i)1147 qice_cont = qice_lincont(i,k) + qice_circont(i,k) 1148 rneb(i,k) = rneb(i,k) - ( lincontfra(i) + circontfra(i) ) 1098 1149 zoliq(i) = zoliq(i) - qice_cont 1099 1150 zoliqi(i) = zoliqi(i) - qice_cont 1100 1151 ENDDO 1101 1152 ENDIF 1102 1103 DO i = 1, klon1104 IF ( zoliqi(i) .GT. 0. ) THEN1105 qcircont(i) = ( qcircont(i) - zqs(i) * circontfra(i) ) / zoliqi(i)1106 ELSE1107 qcircont(i) = 0.1108 ENDIF1109 ENDDO1110 1153 ENDIF 1111 1154 … … 1117 1160 ctot_vol(:,k), ptconv(:,k), & 1118 1161 zt, zq, zoliql, zoliqi, zfice, & 1119 rneb(:,k), icesed_flux, znebprecipclr, znebprecipcld, &1162 rneb(:,k), flsed, znebprecipclr, znebprecipcld, & 1120 1163 zrfl, zrflclr, zrflcld, & 1121 1164 zifl, ziflclr, ziflcld, & … … 1134 1177 CALL histprecip_postcld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), pplay(:,k), & 1135 1178 ctot_vol(:,k), ptconv(:,k), pt_pron_clds, zdqsdT_raw, & 1136 zt, zq, zoliq, zoliql, zoliqi, zcond, zfice, zmqc, icesed_flux, &1179 zt, zq, zoliq, zoliql, zoliqi, zcond, zfice, zmqc, flsed, & 1137 1180 rneb(:,k), znebprecipclr, znebprecipcld, & 1138 1181 zneb, tot_zneb, zrho_up, zvelo_up, & … … 1145 1188 IF ( ok_plane_contrail ) THEN 1146 1189 !--Contrails fraction is left unchanged, but contrails water has changed 1147 !--We alse compute the ice content that will be seen by radiation (qradice_lincont/circont) 1148 IF ( ok_precip_lincontrails ) THEN 1190 !--We alse compute the ice content that will be seen by radiation 1191 !--(qradice_lincont/circont) 1192 IF ( ok_precip_contrails ) THEN 1149 1193 DO i = 1, klon 1150 1194 IF ( zoliqi(i) .GT. 0. ) THEN 1151 1195 qradice_lincont(i,k) = zradocond(i) * qlincont(i) 1152 1196 qlincont(i) = zqs(i) * lincontfra(i) + zoliqi(i) * qlincont(i) 1197 qradice_circont(i,k) = zradocond(i) * qcircont(i) 1198 qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i) 1153 1199 ELSE 1154 1200 qradice_lincont(i,k) = 0. 1155 1201 lincontfra(i) = 0. 1156 1202 qlincont(i) = 0. 1203 qradice_circont(i,k) = 0. 1204 circontfra(i) = 0. 1205 qcircont(i) = 0. 1157 1206 ENDIF 1158 1207 ENDDO 1159 1208 ELSE 1160 !--If linearcontrails do not precipitate, they are put back into1209 !--If contrails do not precipitate, they are put back into 1161 1210 !--the cloud variables 1162 1211 DO i = 1, klon 1163 qice_cont = qlincont(i) - zqs(i) * lincontfra(i)1164 rneb(i,k) = rneb(i,k) + lincontfra(i)1212 rneb(i,k) = rneb(i,k) + ( lincontfra(i) + circontfra(i) ) 1213 qice_cont = qice_lincont(i,k) + qice_circont(i,k) 1165 1214 zoliq(i) = zoliq(i) + qice_cont 1166 1215 zoliqi(i) = zoliqi(i) + qice_cont 1167 1216 zradocond(i) = zradocond(i) + qice_cont 1168 1217 zradoice(i) = zradoice(i) + qice_cont 1169 qradice_lincont(i,k) = qice_cont 1218 qradice_lincont(i,k) = qice_lincont(i,k) 1219 qradice_circont(i,k) = qice_circont(i,k) 1170 1220 ENDDO 1171 1221 ENDIF 1172 1173 DO i = 1, klon1174 IF ( zoliqi(i) .GT. 0. ) THEN1175 qradice_circont(i,k) = zradocond(i) * qcircont(i)1176 qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i)1177 ELSE1178 qradice_circont(i,k) = 0.1179 circontfra(i) = 0.1180 qcircont(i) = 0.1181 ENDIF1182 ENDDO1183 1222 ENDIF 1184 1223 … … 1289 1328 qtl_seri(:,k) = qlincont(:) 1290 1329 qtc_seri(:,k) = qcircont(:) 1291 qice_lincont(:,k) = qlincont(:) - zqs(:) * lincontfra(:)1292 qice_circont(:,k) = qcircont(:) - zqs(:) * circontfra(:)1293 1330 ENDIF 1294 1331 … … 1445 1482 IF ( ok_ice_sedim ) THEN 1446 1483 DO i = 1, klon 1447 snow(i) = snow(i) + icesed_flux(i)1484 snow(i) = snow(i) + flsed(i) 1448 1485 ENDDO 1449 1486 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.