Changeset 5790 for LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_main.f90
- Timestamp:
- Jul 28, 2025, 6:44:28 PM (8 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_main.f90
r5779 r5790 29 29 dqi_adj, dqi_sub, dqi_con, dqi_mix, dqvc_adj, & 30 30 dqvc_sub, dqvc_con, dqvc_mix, qsatl, qsati, & 31 cfl_seri, cfc_seri, qtl_seri, qtc_seri, & 32 qice_lincont, qice_circont, flight_dist, & 33 flight_h2o, qradice_lincont, qradice_circont, & 31 cfc_seri, qtc_seri, nic_seri, & 32 qice_cont, flight_dist, flight_fuel, qradice_cont, & 34 33 Tcritcont, qcritcont, potcontfraP, potcontfraNP, & 35 34 cloudth_sth, & … … 128 127 USE lmdz_lscp_ini, ONLY : ok_ice_supersat, ok_unadjusted_clouds, iflag_icefrac 129 128 USE lmdz_lscp_ini, ONLY : ok_weibull_warm_clouds, ok_no_issr_strato, ok_ice_sedim 130 USE lmdz_lscp_ini, ONLY : ok_plane_contrail , ok_precip_lincontrails, ok_precip_circontrails129 USE lmdz_lscp_ini, ONLY : ok_plane_contrail 131 130 USE lmdz_lscp_ini, ONLY : ok_nodeep_lscp, ok_nodeep_lscp_rad 132 131 USE lmdz_lscp_ini, ONLY : ok_lscp_mergecond, gamma_mixth … … 135 134 USE phys_local_var_mod, ONLY : issrfra100to150, issrfra150to200, issrfra200to250 136 135 USE phys_local_var_mod, ONLY : issrfra250to300, issrfra300to400, issrfra400to500 137 USE phys_local_var_mod, ONLY : dcfl_ini, dqil_ini, dqtl_ini, dcfl_sub, dqil_sub, dqtl_sub 138 USE phys_local_var_mod, ONLY : dcfl_cir, dqtl_cir, dcfl_mix, dqil_mix, dqtl_mix 139 USE phys_local_var_mod, ONLY : dcfc_sub, dqic_sub, dqtc_sub, dcfc_mix, dqic_mix, dqtc_mix 140 USE phys_local_var_mod, ONLY : dcfl_sed, dqil_sed, dqtl_sed, dcfc_sed, dqic_sed, dqtc_sed 141 USE phys_local_var_mod, ONLY : dcfl_auto, dqil_auto, dqtl_auto, dcfc_auto, dqic_auto, dqtc_auto 136 USE phys_local_var_mod, ONLY : AEI_contrails, AEI_surv_contrails 137 USE phys_local_var_mod, ONLY : fsurv_contrails, section_contrails 138 USE phys_local_var_mod, ONLY : dcfc_ini, dqic_ini, dqtc_ini, dnic_ini 139 USE phys_local_var_mod, ONLY : dcfc_sub, dqic_sub, dqtc_sub, dnic_sub 140 USE phys_local_var_mod, ONLY : dcfc_mix, dqic_mix, dqtc_mix, dnic_mix, dnic_agg 141 USE phys_local_var_mod, ONLY : dcfc_sed, dqic_sed, dqtc_sed, dnic_sed 142 USE phys_local_var_mod, ONLY : dcfc_auto, dqic_auto, dqtc_auto, dnic_auto 142 143 USE phys_local_var_mod, ONLY : dcf_auto, dqi_auto, dqvc_auto 143 144 USE geometry_mod, ONLY: longitude_deg, latitude_deg … … 212 213 ! INPUT/OUTPUT aviation 213 214 !-------------------------------------------------- 214 REAL, DIMENSION(klon,klev), INTENT(INOUT):: cfl_seri ! linear contrails fraction [-] 215 REAL, DIMENSION(klon,klev), INTENT(INOUT):: cfc_seri ! contrail cirrus fraction [-] 216 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qtl_seri ! linear contrails total specific humidity [kg/kg] 217 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qtc_seri ! contrail cirrus total specific humidity [kg/kg] 218 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_dist ! aviation distance flown within the mesh [m/s/mesh] 219 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_h2o ! aviation H2O emitted within the mesh [kgH2O/s/mesh] 215 REAL, DIMENSION(klon,klev), INTENT(INOUT):: cfc_seri ! contrail fraction [-] 216 REAL, DIMENSION(klon,klev), INTENT(INOUT):: qtc_seri ! contrail total specific humidity [kg/kg] 217 REAL, DIMENSION(klon,klev), INTENT(INOUT):: nic_seri ! contrail ice crystals concentration [#/kg] 218 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_dist ! aviation distance flown concentration [m/s/m3] 219 REAL, DIMENSION(klon,klev), INTENT(IN) :: flight_fuel ! aviation fuel consumption concentration [kg/s/m3] 220 220 221 221 ! OUTPUT variables … … 279 279 ! for contrails and aviation 280 280 281 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qice_lincont !--condensed water in linear contrails [kg/kg] 282 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qice_circont !--condensed water in contrail cirrus [kg/kg] 283 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qradice_lincont!--condensed water in linear contrails used in the radiation scheme [kg/kg] 284 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qradice_circont!--condensed water in contrail cirrus used in the radiation scheme [kg/kg] 281 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qice_cont !--condensed water in contrails [kg/kg] 282 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qradice_cont !--condensed water in contrails used in the radiation scheme [kg/kg] 285 283 REAL, DIMENSION(klon,klev), INTENT(OUT) :: Tcritcont !--critical temperature for contrail formation [K] 286 284 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qcritcont !--critical specific humidity for contrail formation [kg/kg] … … 362 360 REAL :: delta_z, deepconv_coef 363 361 ! for contrails 364 REAL, DIMENSION(klon) :: lincontfra, circontfra, qlincont, qcircont362 REAL, DIMENSION(klon) :: contfra, qcont, Ncont 365 363 REAL, DIMENSION(klon) :: totfra_in, qtot_in 366 364 LOGICAL, DIMENSION(klon) :: pt_pron_clds 367 REAL, DIMENSION(klon) :: dzsed_lincont, flsed_lincont, cfsed_lincont 368 REAL, DIMENSION(klon) :: dzsed_circont, flsed_circont, cfsed_circont 369 REAL, DIMENSION(klon) :: dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv 370 REAL, DIMENSION(klon) :: dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv 365 REAL, DIMENSION(klon) :: dzsed_cont, flsed_cont, Nflsed_cont, cfsed_cont 366 REAL, DIMENSION(klon) :: dzsed_cont_abv, flsed_cont_abv, Nflsed_cont_abv, cfsed_cont_abv 371 367 !--for Lamquin et al 2012 diagnostics 372 368 REAL, DIMENSION(klon) :: issrfra100to150UP, issrfra150to200UP, issrfra200to250UP … … 472 468 flsed(:) = 0. 473 469 flauto(:) = 0. 474 flsed_ lincont(:)= 0.475 flsed_circont(:)= 0.470 flsed_cont(:) = 0. 471 Nflsed_cont(:) = 0. 476 472 pt_pron_clds(:) = .FALSE. 473 474 !--Contrails 475 dcfc_ini(:,:) = 0. 476 dqic_ini(:,:) = 0. 477 dqtc_ini(:,:) = 0. 478 dnic_ini(:,:) = 0. 479 dcfc_sub(:,:) = 0. 480 dqic_sub(:,:) = 0. 481 dqtc_sub(:,:) = 0. 482 dnic_sub(:,:) = 0. 483 dcfc_mix(:,:) = 0. 484 dqic_mix(:,:) = 0. 485 dqtc_mix(:,:) = 0. 486 dnic_mix(:,:) = 0. 487 dnic_agg(:,:) = 0. 488 dcfc_sed(:,:) = 0. 489 dqic_sed(:,:) = 0. 490 dqtc_sed(:,:) = 0. 491 dnic_sed(:,:) = 0. 492 dcfc_auto(:,:) = 0. 493 dqic_auto(:,:) = 0. 494 dqtc_auto(:,:) = 0. 495 dnic_auto(:,:) = 0. 496 Tcritcont(:,:) = missing_val 497 qcritcont(:,:) = missing_val 498 potcontfraP(:,:) = missing_val 499 potcontfraNP(:,:) = missing_val 500 AEI_contrails(:,:) = missing_val 501 AEI_surv_contrails(:,:) = missing_val 502 fsurv_contrails(:,:) = missing_val 503 section_contrails(:,:) = missing_val 504 477 505 478 506 !--for Lamquin et al (2012) diagnostics … … 580 608 CALL poprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), zp, & 581 609 zt, ztupnew, zq, zmqc, znebprecipclr, znebprecipcld, & 582 zqvapclr, zqupnew, flsed, flsed_ lincont, flsed_circont, &610 zqvapclr, zqupnew, flsed, flsed_cont, & 583 611 cldfra_in, qvc_in, qliq_in, qice_in, & 584 612 zrfl, zrflclr, zrflcld, & … … 592 620 CALL histprecip_precld(klon, dtime, iftop, paprs(:,k), paprs(:,k+1), zp, & 593 621 zt, ztupnew, zq, zmqc, zneb, znebprecip, znebprecipclr, & 594 flsed, flsed_ lincont, flsed_circont, &622 flsed, flsed_cont, & 595 623 zrfl, zrflclr, zrflcld, & 596 624 zifl, ziflclr, ziflcld, & … … 718 746 IF ( ok_plane_contrail ) THEN 719 747 IF ( iftop ) THEN 720 dzsed_lincont_abv(:) = 0. 721 flsed_lincont_abv(:) = 0. 722 cfsed_lincont_abv(:) = 0. 723 dzsed_circont_abv(:) = 0. 724 flsed_circont_abv(:) = 0. 725 cfsed_circont_abv(:) = 0. 748 dzsed_cont_abv(:) = 0. 749 flsed_cont_abv(:) = 0. 750 Nflsed_cont_abv(:)= 0. 751 cfsed_cont_abv(:) = 0. 726 752 ELSE 727 dzsed_lincont_abv(:) = dzsed_lincont(:) 728 flsed_lincont_abv(:) = flsed_lincont(:) 729 cfsed_lincont_abv(:) = cfsed_lincont(:) 730 dzsed_circont_abv(:) = dzsed_circont(:) 731 flsed_circont_abv(:) = flsed_circont(:) 732 cfsed_circont_abv(:) = cfsed_circont(:) 753 dzsed_cont_abv(:) = dzsed_cont(:) 754 flsed_cont_abv(:) = flsed_cont(:) 755 Nflsed_cont_abv(:)= Nflsed_cont(:) 756 cfsed_cont_abv(:) = cfsed_cont(:) 733 757 ENDIF 734 lincontfra(:) = 0. 735 circontfra(:) = 0. 736 qlincont(:) = 0. 737 qcircont(:) = 0. 758 contfra(:) = 0. 759 qcont(:) = 0. 760 Ncont(:) = 0. 761 dzsed_cont(:) = 0. 762 flsed_cont(:) = 0. 763 Nflsed_cont(:)= 0. 764 cfsed_cont(:) = 0. 738 765 ENDIF 739 766 … … 747 774 cfsed_abv(:) = cfsed(:) 748 775 ENDIF 776 dzsed(:) = 0. 777 flsed(:) = 0. 778 cfsed(:) = 0. 779 flauto(:) = 0. 749 780 750 781 DO i = 1, klon … … 796 827 !--If contrails are activated, their fraction is also reduced when deep 797 828 !--convection is active 798 cfl_seri(i,k) = cfl_seri(i,k) * deepconv_coef799 qtl_seri(i,k) = qtl_seri(i,k) * deepconv_coef800 829 cfc_seri(i,k) = cfc_seri(i,k) * deepconv_coef 801 830 qtc_seri(i,k) = qtc_seri(i,k) * deepconv_coef 831 nic_seri(i,k) = nic_seri(i,k) * deepconv_coef 802 832 ENDIF 803 833 ENDIF … … 925 955 shear, tke_dissip(:,k), cell_area, Tbef, qtot_in, zqs, & 926 956 gammasat, ratqs(:,k), keepgoing, pt_pron_clds, & 927 dzsed_abv, flsed_abv, cfsed_abv, & 928 dzsed_lincont_abv, flsed_lincont_abv, cfsed_lincont_abv, & 929 dzsed_circont_abv, flsed_circont_abv, cfsed_circont_abv, & 930 dzsed, flsed, cfsed, dzsed_lincont, flsed_lincont, cfsed_lincont, & 931 dzsed_circont, flsed_circont, cfsed_circont, flauto, & 957 dzsed_abv, flsed_abv, cfsed_abv, dzsed, flsed, cfsed, flauto, & 932 958 rneb(:,k), zqn, qvc, issrfra(:,k), qissr(:,k), & 933 959 dcf_sub(:,k), dcf_con(:,k), dcf_mix(:,k), & … … 937 963 dqvc_adj(:,k), dqvc_sub(:,k), dqvc_con(:,k), dqvc_mix(:,k), & 938 964 dqvc_sed(:,k), dqvc_auto(:,k), & 939 cf l_seri(:,k), cfc_seri(:,k), qtl_seri(:,k), qtc_seri(:,k), &940 flight_dist(:,k), flight_ h2o(:,k), &941 lincontfra, circontfra, qlincont, qcircont, &965 cfc_seri(:,k), qtc_seri(:,k), nic_seri(:,k), & 966 flight_dist(:,k), flight_fuel(:,k), & 967 contfra, qcont, Ncont, & 942 968 Tcritcont(:,k), qcritcont(:,k), potcontfraP(:,k), potcontfraNP(:,k), & 943 dcfl_ini(:,k), dqil_ini(:,k), dqtl_ini(:,k), & 944 dcfl_sub(:,k), dqil_sub(:,k), dqtl_sub(:,k), & 945 dcfl_cir(:,k), dqtl_cir(:,k), & 946 dcfl_mix(:,k), dqil_mix(:,k), dqtl_mix(:,k), & 947 dcfl_sed(:,k), dqil_sed(:,k), dqtl_sed(:,k), & 948 dcfl_auto(:,k), dqil_auto(:,k), dqtl_auto(:,k), & 949 dcfc_sub(:,k), dqic_sub(:,k), dqtc_sub(:,k), & 950 dcfc_mix(:,k), dqic_mix(:,k), dqtc_mix(:,k), & 951 dcfc_sed(:,k), dqic_sed(:,k), dqtc_sed(:,k), & 952 dcfc_auto(:,k), dqic_auto(:,k), dqtc_auto(:,k)) 969 AEI_contrails(:,k), AEI_surv_contrails(:,k), & 970 fsurv_contrails(:,k), section_contrails(:,k), & 971 dzsed_cont_abv, flsed_cont_abv, Nflsed_cont_abv, cfsed_cont_abv, & 972 dzsed_cont, flsed_cont, Nflsed_cont, cfsed_cont, & 973 dcfc_ini(:,k), dqic_ini(:,k), dqtc_ini(:,k), dnic_ini(:,k), & 974 dcfc_sub(:,k), dqic_sub(:,k), dqtc_sub(:,k), dnic_sub(:,k), & 975 dcfc_mix(:,k), dqic_mix(:,k), dqtc_mix(:,k), dnic_mix(:,k), dnic_agg(:,k), & 976 dcfc_sed(:,k), dqic_sed(:,k), dqtc_sed(:,k), dnic_sed(:,k), & 977 dcfc_auto(:,k), dqic_auto(:,k), dqtc_auto(:,k), dnic_auto(:,k)) 953 978 954 979 IF ( ok_nodeep_lscp ) THEN … … 1109 1134 1110 1135 IF ( ok_ice_sedim ) THEN 1111 qice_sedim = (flauto(i) + flsed(i) + flsed_ lincont(i) &1112 + flsed_circont(i))/ ( paprs(i,k) - paprs(i,k+1) ) * RG * dtime1136 qice_sedim = (flauto(i) + flsed(i) + flsed_cont(i)) & 1137 / ( paprs(i,k) - paprs(i,k+1) ) * RG * dtime 1113 1138 ! Add the ice that was sedimented, as it is not included in zqn 1114 1139 qlibef(i) = qlibef(i) + qice_sedim … … 1190 1215 1191 1216 IF ( ok_ice_sedim ) THEN 1192 qice_sedim = (flauto(i) + flsed(i) + flsed_ lincont(i) + flsed_circont(i)) &1217 qice_sedim = (flauto(i) + flsed(i) + flsed_cont(i)) & 1193 1218 / ( paprs(i,k) - paprs(i,k+1) ) * RG * dtime 1194 1219 ! Remove the ice that was sedimented. As it is not included in zqn, … … 1225 1250 1226 1251 !--Ice water content of contrails 1227 qice_lincont(:,k) = qlincont(:) - zqs(:) * lincontfra(:) 1228 qice_circont(:,k) = qcircont(:) - zqs(:) * circontfra(:) 1229 1230 !--Contrails precipitate as natural clouds. We save the partition of ice 1231 !--between natural clouds and contrails 1232 !--NB. we use qlincont / qcircont as a temporary variable to save this partition 1233 IF ( ok_precip_lincontrails ) THEN 1234 DO i = 1, klon 1235 IF ( zoliqi(i) .GT. 0. ) THEN 1236 qlincont(i) = qice_lincont(i,k) / zoliqi(i) 1237 ELSE 1238 qlincont(i) = 0. 1239 ENDIF 1240 ENDDO 1241 ELSE 1242 !--If linear contrails do not precipitate, they are removed temporarily from 1243 !--the cloud variables 1244 DO i = 1, klon 1245 rneb(i,k) = rneb(i,k) - lincontfra(i) 1246 zoliq(i) = zoliq(i) - qice_lincont(i,k) 1247 zoliqi(i) = zoliqi(i) - qice_lincont(i,k) 1248 ENDDO 1249 ENDIF 1250 IF ( ok_precip_circontrails ) THEN 1251 DO i = 1, klon 1252 IF ( zoliqi(i) .GT. 0. ) THEN 1253 qcircont(i) = qice_circont(i,k) / zoliqi(i) 1254 ELSE 1255 qcircont(i) = 0. 1256 ENDIF 1257 ENDDO 1258 ELSE 1259 !--If contrails cirrus do not precipitate, they are removed temporarily from 1260 !--the cloud variables 1261 DO i = 1, klon 1262 rneb(i,k) = rneb(i,k) - circontfra(i) 1263 zoliq(i) = zoliq(i) - qice_circont(i,k) 1264 zoliqi(i) = zoliqi(i) - qice_circont(i,k) 1265 ENDDO 1266 ENDIF 1252 qice_cont(:,k) = qcont(:) - zqs(:) * contfra(:) 1253 1254 !--If contrails do not precipitate 1255 DO i = 1, klon 1256 rneb(i,k) = rneb(i,k) - contfra(i) 1257 zoliq(i) = zoliq(i) - qice_cont(i,k) 1258 zoliqi(i) = zoliqi(i) - qice_cont(i,k) 1259 ENDDO 1267 1260 ENDIF 1268 1261 … … 1306 1299 1307 1300 IF ( ok_plane_contrail ) THEN 1308 !--Contrails fraction is left unchanged, but contrails water has changed 1309 !--We alse compute the ice content that will be seen by radiation 1310 !--(qradice_lincont/circont) 1311 IF ( ok_precip_circontrails ) THEN 1312 DO i = 1, klon 1313 IF ( zoliqi(i) .GT. 0. ) THEN 1314 qradice_circont(i,k) = zradocond(i) * qcircont(i) 1315 qcircont(i) = zqs(i) * circontfra(i) + zoliqi(i) * qcircont(i) 1316 ELSE 1317 qradice_circont(i,k) = 0. 1318 circontfra(i) = 0. 1319 qcircont(i) = 0. 1320 ENDIF 1321 ENDDO 1322 ELSE 1323 !--If contrails do not precipitate, they are put back into 1324 !--the cloud variables 1325 DO i = 1, klon 1326 rneb(i,k) = rneb(i,k) + circontfra(i) 1327 zoliq(i) = zoliq(i) + qice_circont(i,k) 1328 zoliqi(i) = zoliqi(i) + qice_circont(i,k) 1329 zradocond(i) = zradocond(i) + qice_circont(i,k) 1330 zradoice(i) = zradoice(i) + qice_circont(i,k) 1331 qradice_circont(i,k) = qice_circont(i,k) 1332 ENDDO 1333 ENDIF 1334 IF ( ok_precip_lincontrails ) THEN 1335 DO i = 1, klon 1336 IF ( zoliqi(i) .GT. 0. ) THEN 1337 qradice_lincont(i,k) = zradocond(i) * qlincont(i) 1338 qlincont(i) = zqs(i) * lincontfra(i) + zoliqi(i) * qlincont(i) 1339 ELSE 1340 qradice_lincont(i,k) = 0. 1341 lincontfra(i) = 0. 1342 qlincont(i) = 0. 1343 ENDIF 1344 ENDDO 1345 ELSE 1346 !--If contrails do not precipitate, they are put back into 1347 !--the cloud variables 1348 DO i = 1, klon 1349 rneb(i,k) = rneb(i,k) + lincontfra(i) 1350 zoliq(i) = zoliq(i) + qice_lincont(i,k) 1351 zoliqi(i) = zoliqi(i) + qice_lincont(i,k) 1352 zradocond(i) = zradocond(i) + qice_lincont(i,k) 1353 zradoice(i) = zradoice(i) + qice_lincont(i,k) 1354 qradice_lincont(i,k) = qice_lincont(i,k) 1355 ENDDO 1356 ENDIF 1301 !--Contrails do not precipitate 1302 DO i = 1, klon 1303 rneb(i,k) = rneb(i,k) + contfra(i) 1304 zoliq(i) = zoliq(i) + qice_cont(i,k) 1305 zoliqi(i) = zoliqi(i) + qice_cont(i,k) 1306 zradocond(i) = zradocond(i) + qice_cont(i,k) 1307 zradoice(i) = zradoice(i) + qice_cont(i,k) 1308 qradice_cont(i,k) = qice_cont(i,k) 1309 ENDDO 1357 1310 ENDIF 1358 1311 … … 1453 1406 DO i = 1, klon 1454 1407 IF ( zoliq(i) .LE. 0. ) THEN 1455 lincontfra(i) = 0. 1456 circontfra(i) = 0. 1457 qlincont(i) = 0. 1458 qcircont(i) = 0. 1408 contfra(i) = 0. 1409 qcont(i) = 0. 1410 Ncont(i) = 0. 1459 1411 ENDIF 1460 1412 ENDDO 1461 cfl_seri(:,k) = lincontfra(:) 1462 cfc_seri(:,k) = circontfra(:) 1463 qtl_seri(:,k) = qlincont(:) 1464 qtc_seri(:,k) = qcircont(:) 1413 cfc_seri(:,k) = contfra(:) 1414 qtc_seri(:,k) = qcont(:) 1415 nic_seri(:,k) = Ncont(:) 1465 1416 ENDIF 1466 1417 … … 1619 1570 IF ( ok_ice_sedim ) THEN 1620 1571 DO i = 1, klon 1621 snow(i) = snow(i) + flsed(i) + flsed_ lincont(i) + flsed_circont(i)1572 snow(i) = snow(i) + flsed(i) + flsed_cont(i) 1622 1573 ENDDO 1623 1574 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.