Changeset 5691
- Timestamp:
- Jun 6, 2025, 11:55:21 AM (3 weeks ago)
- Location:
- LMDZ6/branches/contrails/libf/phylmd
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/libf/phylmd/lmdz_cloud_optics_prop.f90
r5643 r5691 33 33 USE lmdz_cloud_optics_prop_ini , ONLY : rei_coef, rei_min_temp 34 34 USE lmdz_cloud_optics_prop_ini , ONLY : zepsec, novlp, iflag_ice_thermo, ok_new_lscp 35 USE lmdz_cloud_optics_prop_ini , ONLY : ok_plane_contrail, re_ice_crystals_contrails 35 USE lmdz_cloud_optics_prop_ini , ONLY : ok_plane_contrail 36 USE lmdz_cloud_optics_prop_ini , ONLY : rei_linear_contrails, rei_cirrus_contrails 36 37 37 38 … … 691 692 IF ( lincontfra(i,k) .GT. zepsec ) THEN 692 693 pclc_lincont(i,k) = lincontfra(i,k) 693 rei_lincont = re _ice_crystals_contrails * 1.E6694 rei_lincont = rei_linear_contrails * 1.E6 694 695 ELSE 695 696 pclc_lincont(i,k) = 0. … … 702 703 pclc_circont(i,k) = circontfra(i,k) 703 704 704 tc = temp(i, k) - 273.15 705 rei_circont = d_rei_dt*tc + rei_max 706 IF (tc<=-81.4) rei_circont = rei_min 705 !tc = temp(i, k) - 273.15 706 !rei_circont = d_rei_dt*tc + rei_max 707 !IF (tc<=-81.4) rei_circont = rei_min 708 rei_circont = rei_cirrus_contrails * 1.E6 707 709 708 710 ELSE -
LMDZ6/branches/contrails/libf/phylmd/lmdz_cloud_optics_prop_ini.f90
r5639 r5691 24 24 REAL, PROTECTED :: rei_coef, rei_min_temp 25 25 REAL, PROTECTED :: zepsec 26 REAL, PROTECTED :: re_ice_crystals_contrails=7.5E-6 ! [m] effective radius of ice crystals in contrails 26 REAL, PROTECTED :: rei_linear_contrails=7.5E-6 ! [m] effective radius of ice crystals in linear contrails 27 REAL, PROTECTED :: rei_cirrus_contrails=10.E-6 ! [m] effective radius of ice crystals in contrails cirrus 27 28 REAL, PARAMETER :: thres_tau=0.3, thres_neb=0.001 28 29 REAL, PARAMETER :: prmhc=440.*100. ! Pressure between medium and high level cloud in Pa … … 43 44 !$OMP THREADPRIVATE(rei_coef, rei_min_temp) 44 45 !$OMP THREADPRIVATE(zepsec) 45 !$OMP THREADPRIVATE(re _ice_crystals_contrails, seuil_neb)46 !$OMP THREADPRIVATE(rei_linear_contrails, rei_cirrus_contrails, seuil_neb) 46 47 47 48 … … 110 111 rei_min_temp = 175. 111 112 CALL getin_p('rei_min_temp',rei_min_temp) 112 CALL getin_p('re_ice_crystals_contrails', re_ice_crystals_contrails) 113 CALL getin_p('rei_linear_contrails', rei_linear_contrails) 114 write(lunout,*)'rei_linear_contrails=',rei_linear_contrails 115 CALL getin_p('rei_cirrus_contrails', rei_cirrus_contrails) 116 write(lunout,*)'rei_cirrus_contrails=',rei_cirrus_contrails 113 117 CALL getin_p('seuil_neb_rad', seuil_neb) 114 118 write(lunout,*)'seuil_neb_rad=',seuil_neb -
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 -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_condensation.f90
r5684 r5691 97 97 cldfra_in, qvc_in, qliq_in, qice_in, shear, pbl_eps, cell_area, & 98 98 temp, qtot_in, qsat, gamma_cond, ratqs, keepgoing, pt_pron_clds, & 99 cldfra_above, icesed_flux, & 99 dzsed_abv, flsed_abv, cfsed_abv_in, & 100 dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv, & 101 dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv, & 102 dzsed, flsed, cfsed, dzsed_lincont, flsed_lincont, cfsed_lincont, & 103 dzsed_circont, flsed_circont, cfsed_circont, & 100 104 cldfra, qincld, qvc, issrfra, qissr, dcf_sub, dcf_con, dcf_mix, dcf_sed, & 101 105 dqi_adj, dqi_sub, dqi_con, dqi_mix, dqi_sed, & … … 131 135 USE lmdz_lscp_ini, ONLY: coef_mixing_lscp, coef_shear_lscp 132 136 USE lmdz_lscp_ini, ONLY: aspect_ratio_cirrus, cooling_rate_ice_thresh 137 USE lmdz_lscp_ini, ONLY: ok_ice_sedim, fallice_sedim 133 138 134 139 USE lmdz_lscp_ini, ONLY: ok_plane_contrail, aspect_ratio_lincontrails 135 140 USE lmdz_lscp_ini, ONLY: coef_mixing_lincontrails, coef_shear_lincontrails 136 141 USE lmdz_lscp_ini, ONLY: chi_mixing_lincontrails, linear_contrails_lifetime 142 USE lmdz_lscp_ini, ONLY: fallice_linear_contrails, fallice_cirrus_contrails 137 143 USE lmdz_aviation, ONLY: contrails_formation 138 144 … … 163 169 LOGICAL, INTENT(IN) , DIMENSION(klon) :: keepgoing ! .TRUE. if a new condensation loop should be computed 164 170 LOGICAL, INTENT(IN) , DIMENSION(klon) :: pt_pron_clds ! .TRUE. if clouds are prognostic in this mesh 165 REAL, INTENT(IN) , DIMENSION(klon) :: cldfra_above ! cloud fraction IN THE LAYER ABOVE [-] 166 REAL, INTENT(IN) , DIMENSION(klon) :: icesed_flux ! sedimentated ice flux [kg/s/m2] 171 REAL, INTENT(IN) , DIMENSION(klon) :: dzsed_abv ! sedimentated cloud height IN THE LAYER ABOVE [m] 172 REAL, INTENT(IN) , DIMENSION(klon) :: flsed_abv ! sedimentated ice flux FROM THE LAYER ABOVE [kg/s/m2] 173 REAL, INTENT(IN) , DIMENSION(klon) :: cfsed_abv_in ! cloud fraction IN THE LAYER ABOVE [-] 174 REAL, INTENT(IN) , DIMENSION(klon) :: dzsed_lincont_abv ! sedimentated linear contrails height IN THE LAYER ABOVE [m] 175 REAL, INTENT(IN) , DIMENSION(klon) :: flsed_lincont_abv ! sedimentated ice flux in linear contrails FROM THE LAYER ABOVE [kg/s/m2] 176 REAL, INTENT(IN) , DIMENSION(klon) :: cfsed_lincont_abv ! linear contrails fraction IN THE LAYER ABOVE [-] 177 REAL, INTENT(IN) , DIMENSION(klon) :: dzsed_circont_abv ! sedimentated contrails cirrus height IN THE LAYER ABOVE [m] 178 REAL, INTENT(IN) , DIMENSION(klon) :: flsed_circont_abv ! sedimentated ice flux in contrails cirrus FROM THE LAYER ABOVE [kg/s/m2] 179 REAL, INTENT(IN) , DIMENSION(klon) :: cfsed_circont_abv ! contrails cirrus fraction IN THE LAYER ABOVE [-] 180 REAL, INTENT(INOUT), DIMENSION(klon) :: dzsed ! sedimentated cloud height [m] 181 REAL, INTENT(INOUT), DIMENSION(klon) :: flsed ! sedimentated ice flux [kg/s/m2] 182 REAL, INTENT(INOUT), DIMENSION(klon) :: cfsed ! sedimentated cloud fraction [-] 183 REAL, INTENT(INOUT), DIMENSION(klon) :: dzsed_lincont ! sedimentated linear contrails height [m] 184 REAL, INTENT(INOUT), DIMENSION(klon) :: flsed_lincont ! sedimentated ice flux in linear contrails [kg/s/m2] 185 REAL, INTENT(INOUT), DIMENSION(klon) :: cfsed_lincont ! sedimentated linear contrails fraction [-] 186 REAL, INTENT(INOUT), DIMENSION(klon) :: dzsed_circont ! sedimentated contrails cirrus height [m] 187 REAL, INTENT(INOUT), DIMENSION(klon) :: flsed_circont ! sedimentated ice flux in contrails cirrus [kg/s/m2] 188 REAL, INTENT(INOUT), DIMENSION(klon) :: cfsed_circont ! sedimentated contrails cirrus fraction [-] 167 189 ! 168 190 ! Input for aviation … … 266 288 ! 267 289 ! for sedimentation 268 REAL, DIMENSION(klon) :: qice_sedim 269 REAL :: clrfra_sed 290 REAL, DIMENSION(klon) :: cfsed_abv, qised_abv 291 REAL :: qice_sedim 292 REAL :: sedfra_abv, sedfra1, sedfra2, sedfra3 270 293 ! 271 294 ! for mixing … … 284 307 ! for contrails 285 308 REAL :: contrails_conversion_factor 309 REAL, DIMENSION(klon) :: qised_lincont_abv, qised_circont_abv 286 310 287 311 qzero(:) = 0. … … 375 399 dqvc_sed(i) = 0. 376 400 377 IF ( icesed_flux(i) .GT. 0. ) THEN 401 qised_abv(i) = 0. 402 cfsed_abv(i) = cfsed_abv_in(i) 403 IF ( dzsed_abv(i) .GT. eps ) THEN 378 404 !--If ice sedimentation is activated, the quantity of sedimentated ice was added 379 405 !--to the total water vapor in the precipitation routine. Here we remove it 380 406 !--(it will be reincluded later) 381 qi ce_sedim(i) = icesed_flux(i) / ( paprsdn(i) - paprsup(i) ) * RG * dtime382 qclr(i) = qclr(i) - qi ce_sedim(i)407 qised_abv(i) = flsed_abv(i) / ( paprsdn(i) - paprsup(i) ) * RG * dtime 408 qclr(i) = qclr(i) - qised_abv(i) 383 409 ENDIF 384 410 … … 487 513 ENDIF 488 514 515 IF ( dzsed_lincont_abv(i) .GT. eps ) THEN 516 qised_lincont_abv(i) = flsed_lincont_abv(i) / ( paprsdn(i) - paprsup(i) ) * RG * dtime 517 qised_abv(i) = qised_abv(i) - qised_lincont_abv(i) 518 cfsed_abv(i) = cfsed_abv(i) - cfsed_lincont_abv(i) 519 ENDIF 520 521 IF ( dzsed_circont_abv(i) .GT. eps ) THEN 522 qised_circont_abv(i) = flsed_circont_abv(i) / ( paprsdn(i) - paprsup(i) ) * RG * dtime 523 qised_abv(i) = qised_abv(i) - qised_circont_abv(i) 524 cfsed_abv(i) = cfsed_abv(i) - cfsed_circont_abv(i) 525 ENDIF 526 489 527 dcfl_ini(i) = 0. 490 528 dqil_ini(i) = 0. … … 1314 1352 1315 1353 1316 !--------------------------------------- 1317 !-- ICE SEDIMENTATION -- 1318 !--------------------------------------- 1319 ! 1320 !--If ice supersaturation is activated, the cloud properties are prognostic. 1321 !--The falling ice is then partly considered a new cloud in the gridbox. 1322 !--BEWARE with this parameterisation, we can create a new cloud with a much 1323 !--different ice water content and water vapor content than the existing cloud 1324 !--(if it exists). This implies than unphysical fluxes of ice and vapor 1325 !--occur between the existing cloud and the newly formed cloud (from sedimentation). 1326 !--Note also that currently, the precipitation scheme assume a maximum 1327 !--random overlap, meaning that the new formed clouds will not be affected 1328 !--by vertical wind shear. 1329 ! 1330 IF ( icesed_flux(i) .GT. 0. ) THEN 1331 1332 clrfra_sed = MIN(clrfra(i), cldfra_above(i) - cldfra(i)) 1333 1334 IF ( ( clrfra_sed .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN 1335 1336 qiceincld = qice_sedim(i) / cldfra_above(i) 1337 IF ( ok_unadjusted_clouds .AND. .NOT. ok_warm_cloud ) THEN 1338 tauinv_depsub = qiceincld**(1./3.) * kappa_depsub 1339 qvapinclr_lim = qsat(i) - qiceincld / ( 1. - EXP( - dtime * tauinv_depsub ) ) 1340 ELSE 1341 qvapinclr_lim = qsat(i) - qiceincld 1354 IF ( ok_ice_sedim ) THEN 1355 !--------------------------------------- 1356 !-- ICE SEDIMENTATION -- 1357 !--------------------------------------- 1358 ! 1359 !--First, the current ice is sedimentated into the layer below. The ice fallspeed 1360 !--velocity is calculated and the quantity of sedimentated ice is computed 1361 !--accordingly. The decrease in cloud fraction is calculated such that 1362 !--in-cloud ice water content is constant. 1363 ! 1364 qice_sedim = 0. 1365 IF ( cldfra(i) .GT. eps ) THEN 1366 dzsed(i) = MIN(fallice_sedim * dtime, dz) 1367 cfsed(i) = cldfra(i) 1368 qice_sedim = ( qcld(i) - qvc(i) ) * dzsed(i) / dz 1369 !--Tendencies 1370 dcf_sed(i) = - cldfra(i) * dzsed(i) / dz 1371 dqi_sed(i) = - qice_sedim 1372 dqvc_sed(i) = - qvc(i) * dzsed(i) / dz 1373 !--Convert to flux 1374 flsed(i) = qice_sedim * ( paprsdn(i) - paprsup(i) ) / RG / dtime 1375 ENDIF 1376 ! 1377 !--Then, the sedimentated ice from above is added to the gridbox 1378 !--The falling ice is partly considered a new cloud in the gridbox. 1379 !--BEWARE with this parameterisation, we can create a new cloud with a much 1380 !--different ice water content and water vapor content than the existing cloud 1381 !--(if it exists). This implies than unphysical fluxes of ice and vapor 1382 !--occur between the existing cloud and the newly formed cloud (from sedimentation). 1383 !--Note also that currently, the precipitation scheme assume a maximum 1384 !--random overlap, meaning that the new formed clouds will not be affected 1385 !--by vertical wind shear. 1386 ! 1387 sedfra_abv = MIN(dzsed_abv(i), dz) / dz * cfsed_abv(i) 1388 IF ( sedfra_abv .GT. eps ) THEN 1389 1390 !--Three regions to be defined: (1) clear-sky, (2) cloudy, and 1391 !--(3) region where it was previously cloudy but now clear-sky because of 1392 !--ice sedimentation 1393 !--(1) we use the clear-sky PDF to determine the humidity and increase the 1394 !--cloud fraction / sublimate falling ice 1395 !--(2) we do not increase cloud fraction and add the falling ice to the cloud 1396 !--(3) we increase the cloud fraction but use in-cloud water vapor as 1397 !--background vapor 1398 sedfra2 = MIN(cfsed(i), cfsed_abv(i)) & 1399 * MAX(0., MIN(dz, dzsed_abv(i)) - dzsed(i)) / dz 1400 sedfra3 = MIN(cfsed(i), cfsed_abv(i)) & 1401 * MIN(MIN(dz, dzsed_abv(i)), dzsed(i)) / dz 1402 sedfra1 = sedfra_abv - sedfra3 - sedfra2 1403 1404 qiceincld = qised_abv(i) / sedfra_abv 1405 1406 !--For region (1) 1407 IF ( ( sedfra1 .GT. eps ) .AND. ( clrfra(i) .GT. eps ) ) THEN 1408 1409 IF ( ok_unadjusted_clouds .AND. .NOT. ok_warm_cloud ) THEN 1410 tauinv_depsub = qiceincld**(1./3.) * kappa_depsub 1411 qvapinclr_lim = qsat(i) - qiceincld / ( 1. - EXP( - dtime * tauinv_depsub ) ) 1412 ELSE 1413 qvapinclr_lim = qsat(i) - qiceincld 1414 ENDIF 1415 1416 rhl_clr = qclr(i) / clrfra(i) / qsatl(i) * 100. 1417 pdf_x = qvapinclr_lim / qsatl(i) * 100. 1418 pdf_loc = rhl_clr - pdf_scale(i) * pdf_gamma(i) 1419 pdf_x = qsat(i) / qsatl(i) * 100. 1420 pdf_y = LOG( MAX( ( pdf_x - pdf_loc ) / pdf_scale(i), eps) ) * pdf_alpha(i) 1421 IF ( pdf_y .GT. 10. ) THEN !--Avoid overflows 1422 pdf_fra_above_lim = 0. 1423 pdf_q_above_lim = 0. 1424 ELSEIF ( pdf_y .LT. -10. ) THEN 1425 pdf_fra_above_lim = clrfra(i) 1426 pdf_q_above_lim = qclr(i) 1427 ELSE 1428 pdf_y = EXP( pdf_y ) 1429 pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y ) 1430 pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_gamma(i) 1431 pdf_fra_above_lim = EXP( - pdf_y ) * clrfra(i) 1432 pdf_q_above_lim = ( pdf_e3 * clrfra(i) & 1433 + pdf_loc * pdf_fra_above_lim ) * qsatl(i) / 100. 1434 ENDIF 1435 1436 IF ( pdf_fra_above_lim .GT. eps ) THEN 1437 sedfra1 = sedfra1 * pdf_fra_above_lim / clrfra(i) 1438 dcf_sed(i) = dcf_sed(i) + sedfra1 1439 dqvc_sed(i) = dqvc_sed(i) + sedfra1 * pdf_q_above_lim / pdf_fra_above_lim 1440 dqi_sed(i) = dqi_sed(i) + sedfra1 * qiceincld 1441 ENDIF 1442 ENDIF ! ( sedfra1 .GT. eps .AND. ( clrfra(i) .GT. eps ) 1443 1444 !--For region (2) 1445 dqi_sed(i) = dqi_sed(i) + sedfra2 * qiceincld 1446 1447 !--For region (3) 1448 IF ( sedfra3 .GT. eps ) THEN 1449 dcf_sed(i) = dcf_sed(i) + sedfra3 1450 dqvc_sed(i) = dqvc_sed(i) + sedfra3 * qvc(i) / cldfra(i) 1451 dqi_sed(i) = dqi_sed(i) + sedfra3 * qiceincld 1342 1452 ENDIF 1343 1344 rhl_clr = qclr(i) / clrfra(i) / qsatl(i) * 100. 1345 pdf_x = qvapinclr_lim / qsatl(i) * 100. 1346 pdf_loc = rhl_clr - pdf_scale(i) * pdf_gamma(i) 1347 pdf_x = qsat(i) / qsatl(i) * 100. 1348 pdf_y = LOG( MAX( ( pdf_x - pdf_loc ) / pdf_scale(i), eps) ) * pdf_alpha(i) 1349 IF ( pdf_y .GT. 10. ) THEN !--Avoid overflows 1350 pdf_fra_above_lim = 0. 1351 pdf_q_above_lim = 0. 1352 ELSEIF ( pdf_y .LT. -10. ) THEN 1353 pdf_fra_above_lim = clrfra(i) 1354 pdf_q_above_lim = qclr(i) 1355 ELSE 1356 pdf_y = EXP( pdf_y ) 1357 pdf_e3 = GAMMAINC ( 1. + 1. / pdf_alpha(i) , pdf_y ) 1358 pdf_e3 = pdf_scale(i) * ( 1. - pdf_e3 ) * pdf_gamma(i) 1359 pdf_fra_above_lim = EXP( - pdf_y ) * clrfra(i) 1360 pdf_q_above_lim = ( pdf_e3 * clrfra(i) & 1361 + pdf_loc * pdf_fra_above_lim ) * qsatl(i) / 100. 1362 ENDIF 1363 1364 IF ( pdf_fra_above_lim .GT. eps ) THEN 1365 dcf_sed(i) = clrfra_sed * pdf_fra_above_lim / clrfra(i) 1366 dqvc_sed(i) = dcf_sed(i) * pdf_q_above_lim / pdf_fra_above_lim 1367 ENDIF 1368 !--We include the sedimentated ice: 1369 dqi_sed(i) = qiceincld & !--We include the sedimentated ice: 1370 * ( dcf_sed(i) & !--the part that falls in the newly formed cloud and 1371 + cldfra(i) ) !--the part that falls in the existing cloud 1372 1373 ELSE 1374 1375 dqi_sed(i) = qice_sedim(i) 1376 1377 ENDIF ! ( clrfra_sed .GT. eps .AND. ( clrfra(i) .GT. eps ) 1453 ENDIF ! qised_abv(i) .GT. 0. 1454 !PRINT *, 'A', cldfra(i), dcf_sed(i), clrfra(i) 1455 !PRINT *, 'B', qcld(i) - qvc(i), qvc(i), dqvc_sed(i), dqi_sed(i) 1378 1456 1379 1457 !--Add tendencies … … 1383 1461 clrfra(i) = MAX(0., clrfra(i) - dcf_sed(i)) 1384 1462 !--We re-include sublimated sedimentated ice into clear sky water vapor 1385 qclr(i) = qclr(i) - dqvc_sed(i) + qi ce_sedim(i) - dqi_sed(i)1386 1387 ENDIF ! icesed_flux(i) .GT. 0.1463 qclr(i) = qclr(i) - dqvc_sed(i) + qised_abv(i) - dqi_sed(i) 1464 1465 ENDIF ! ok_ice_sedim 1388 1466 1389 1467 -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_ini.f90
r5643 r5691 228 228 !$OMP THREADPRIVATE(ok_plane_contrail) 229 229 230 LOGICAL, SAVE, PROTECTED :: ok_precip_ lincontrails=.TRUE. ! if True, linear contrails can precipitate231 !$OMP THREADPRIVATE(ok_precip_ lincontrails)230 LOGICAL, SAVE, PROTECTED :: ok_precip_contrails=.TRUE. ! if True, contrails can be autoconverted to snow 231 !$OMP THREADPRIVATE(ok_precip_contrails) 232 232 233 233 REAL, SAVE, PROTECTED :: aspect_ratio_lincontrails=.1 ! [-] aspect ratio of linear contrails … … 260 260 REAL, SAVE, PROTECTED :: initial_height_contrails=200. ! [m] initial height of the linear contrails formed 261 261 !$OMP THREADPRIVATE(initial_height_contrails) 262 263 REAL, SAVE, PROTECTED :: fallice_linear_contrails=1. ! [m/s] Ice fallspeed velocity in linear contrails 264 !$OMP THREADPRIVATE(fallice_linear_contrails) 265 266 REAL, SAVE, PROTECTED :: fallice_cirrus_contrails=1. ! [m/s] Ice fallspeed velocity in cirrus contrails 267 !$OMP THREADPRIVATE(fallice_cirrus_contrails) 262 268 263 269 REAL, SAVE, PROTECTED :: aviation_coef=1. ! [-] scaling factor for aviation emissions and flown distance … … 512 518 CALL getin_p('coef_shear_lscp',coef_shear_lscp) 513 519 ! for aviation 514 CALL getin_p('ok_precip_ lincontrails',ok_precip_lincontrails)520 CALL getin_p('ok_precip_contrails',ok_precip_contrails) 515 521 CALL getin_p('aspect_ratio_lincontrails',aspect_ratio_lincontrails) 516 522 coef_mixing_lincontrails=coef_mixing_lscp … … 525 531 CALL getin_p('initial_width_contrails',initial_width_contrails) 526 532 CALL getin_p('initial_height_contrails',initial_height_contrails) 533 CALL getin_p('fallice_linear_contrails',fallice_linear_contrails) 534 CALL getin_p('fallice_cirrus_contrails',fallice_cirrus_contrails) 527 535 CALL getin_p('aviation_coef',aviation_coef) 528 536 … … 615 623 WRITE(lunout,*) 'lscp_ini, coef_shear_lscp:', coef_shear_lscp 616 624 ! for aviation 617 WRITE(lunout,*) 'lscp_ini, ok_precip_ lincontrails:', ok_precip_lincontrails625 WRITE(lunout,*) 'lscp_ini, ok_precip_contrails:', ok_precip_contrails 618 626 WRITE(lunout,*) 'lscp_ini, aspect_ratio_lincontrails:', aspect_ratio_lincontrails 619 627 WRITE(lunout,*) 'lscp_ini, coef_mixing_lincontrails:', coef_mixing_lincontrails … … 626 634 WRITE(lunout,*) 'lscp_ini, initial_width_contrails:', initial_width_contrails 627 635 WRITE(lunout,*) 'lscp_ini, initial_height_contrails:', initial_height_contrails 636 WRITE(lunout,*) 'lscp_ini, fallice_linear_contrails:', fallice_linear_contrails 637 WRITE(lunout,*) 'lscp_ini, fallice_cirrus_contrails:', fallice_cirrus_contrails 628 638 WRITE(lunout,*) 'lscp_ini, aviation_coef:', aviation_coef 629 639 -
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_precip.f90
r5613 r5691 126 126 !-------------------- 127 127 IF ( ok_ice_sedim ) THEN 128 129 zcpeau = RCPD * RVTMP2 130 128 131 DO i =1, klon 129 132 !--If the sedimentation of ice crystals is activated, the falling ice is sublimated and … … 131 134 IF ( icesed_flux(i) .GT. 0. ) THEN 132 135 qice_sedim = icesed_flux(i) / ( paprsdn(i) - paprsup(i) ) * RG * dtime 136 137 !--Thermalisation of sedimentated ice 138 zcpair = RCPD * ( 1. + RVTMP2 * zq(i) ) 139 zt(i) = ( ztupnew(i) * qice_sedim * zcpeau + zcpair * zt(i) ) & 140 / ( zcpair + qice_sedim * zcpeau ) 141 133 142 !--Vapor is updated after evaporation/sublimation (it is increased) 134 143 zq(i) = zq(i) + qice_sedim … … 384 393 REAL, INTENT(INOUT), DIMENSION(klon) :: ziflclr !--flux of snow gridbox-mean in clear sky [kg/s/m2] 385 394 REAL, INTENT(INOUT), DIMENSION(klon) :: ziflcld !--flux of snow gridbox-mean in cloudy air [kg/s/m2] 386 REAL, INTENT( OUT),DIMENSION(klon) :: icesed_flux !--flux of sedimentated ice [kg/s/m2]395 REAL, INTENT(INOUT), DIMENSION(klon) :: icesed_flux !--flux of sedimentated ice [kg/s/m2] 387 396 388 397 REAL, INTENT(OUT), DIMENSION(klon) :: zradocond !--condensed water used in the radiation scheme [kg/kg] … … 429 438 ziflprev(:) = 0. 430 439 431 icesed_flux(:) = 0. 440 ! AB ICE SEDIM 441 !icesed_flux(:) = 0. 432 442 433 443 … … 691 701 !-- ICE SEDIMENTATION 692 702 !--------------------------------------------------------- 693 IF ( ok_ice_sedim ) THEN 703 !IF ( ok_ice_sedim ) THEN 704 IF ( .FALSE. ) THEN ! AB ICE SEDIM 694 705 695 706 DO i = 1, klon … … 908 919 ENDDO 909 920 921 ENDIF 922 923 !-------------------------------------- 924 !-- THERMALISATION OF ICE SEDIMENTATION 925 !-------------------------------------- 926 927 !--If the sedimentation of ice crystals is activated, the falling ice is thermzalised 928 !--to the temperature of the gridbox 929 IF ( ok_ice_sedim ) THEN 930 cpw = RCPD * RVTMP2 931 DO i = 1, klon 932 IF ( icesed_flux(i) .GT. 0. ) THEN 933 qice_sedim = icesed_flux(i) / dhum_to_dflux(i) 934 !--No condensed water so cp=cp(vapor+dry air) 935 !-- RVTMP2=rcpv/rcpd-1 936 cpair = RCPD * ( 1. + RVTMP2 * qvap(i) ) 937 !-- t(i,k+1) + d_t(i,k+1): new temperature of the overlying layer 938 temp(i) = ( tempupnew(i) * qice_sedim * cpw + cpair * temp(i) ) & 939 / ( cpair + qice_sedim * cpw ) 940 ENDIF ! ok_ice_sedim 941 ENDDO 910 942 ENDIF 911 943 … … 1424 1456 REAL, INTENT(INOUT), DIMENSION(klon) :: snowcld !--flux of snow gridbox-mean in cloudy air coming from the layer above [kg/s/m2] 1425 1457 1426 REAL, INTENT( OUT),DIMENSION(klon) :: icesed_flux !--flux of sedimentated ice [kg/s/m2]1458 REAL, INTENT(INOUT), DIMENSION(klon) :: icesed_flux !--flux of sedimentated ice [kg/s/m2] 1427 1459 REAL, INTENT(OUT), DIMENSION(klon) :: qraindiag !--DIAGNOSTIC specific rain content [kg/kg] 1428 1460 REAL, INTENT(OUT), DIMENSION(klon) :: qsnowdiag !--DIAGNOSTIC specific snow content [kg/kg] … … 1487 1519 1488 1520 qzero(:) = 0. 1489 icesed_flux(:) = 0. 1521 ! AB ICE SEDIM 1522 !icesed_flux(:) = 0. 1490 1523 1491 1524 dqrcol(:) = 0. … … 1960 1993 !-- ICE SEDIMENTATION 1961 1994 !--------------------------------------------------------- 1962 IF ( ok_ice_sedim ) THEN 1995 !IF ( ok_ice_sedim ) THEN 1996 IF ( .FALSE. ) THEN ! AB ICE SEDIM 1963 1997 1964 1998 IF ( ( qice(i) .GT. 0. ) .AND. ( cldfra(i) .GT. eps ) ) THEN
Note: See TracChangeset
for help on using the changeset viewer.