Changeset 4412 for LMDZ6/trunk/libf/phylmd/lscp_mod.F90
- Timestamp:
- Feb 1, 2023, 5:35:29 PM (17 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/lscp_mod.F90
r4397 r4412 9 9 paprs,pplay,t,q,ptconv,ratqs, & 10 10 d_t, d_q, d_ql, d_qi, rneb, rneblsvol, rneb_seri, & 11 rad liq, radicefrac, rain, snow, &11 radocond, radicefrac, rain, snow, & 12 12 frac_impa, frac_nucl, beta, & 13 13 prfl, psfl, rhcl, zqta, fraca, & … … 41 41 ! References: 42 42 ! 43 ! - Bony, S., & Emanuel, K. A. 2001, JAS, doi: 10.1175/1520-0469(2001)058<3158:APOTCA>2.0.CO;2 43 44 ! - Hourdin et al. 2013, Clim Dyn, doi:10.1007/s00382-012-1343-y 44 45 ! - Jam et al. 2013, Boundary-Layer Meteorol, doi:10.1007/s10546-012-9789-3 46 ! - Jouhaud, et al. 2018. JAMES, doi:10.1029/2018MS001379 45 47 ! - Madeleine et al. 2020, JAMES, doi:10.1029/2020MS002046 48 ! - Touzze-Peifert Ludo, PhD thesis, p117-124 46 49 ! ------------------------------------------------------------------------------- 47 50 ! Code structure: … … 50 53 ! P1> Evaporation of the precipitation (falling from the k+1 level) 51 54 ! P2> Cloud formation (at the k level) 52 ! P2.A.0> Cloud properties calculation from a rectangular pdf 53 ! P2.A.1> With the new PDFs, calculation of cloud properties using the inital 55 ! P2.A.1> With the PDFs, calculation of cloud properties using the inital 54 56 ! values of T and Q 55 57 ! P2.A.2> Coupling between condensed water and temperature 56 58 ! P2.A.3> Calculation of final quantities associated with cloud formation 57 ! P2.B> 'All or nothing' cloud 58 ! P2.C> Release of Latent heat after cloud formation 59 ! P2.B> Release of Latent heat after cloud formation 59 60 ! P3> Autoconversion to precipitation (k-level) 60 61 ! P4> Wet scavenging … … 65 66 ! water used in the physics and the dynamics 66 67 ! 67 ! During the autoconversion to precipitation (P3 step), rad liq(cloud water used68 ! During the autoconversion to precipitation (P3 step), radocond (cloud water used 68 69 ! by the radiation scheme) is calculated as an average of the water that remains 69 70 ! in the cloud during the precipitation and not the water remaining at the end … … 75 76 ! Radiation: 76 77 ! xflwc(newmicro)+xfiwc(newmicro) = 77 ! cldliq(physiq)=radliq(fisrt)=lwcon(nc)+iwcon(nc)78 ! radocond=lwcon(nc)+iwcon(nc) 78 79 ! 79 80 ! Notetheless, be aware of: 80 81 ! 81 ! rad liq(fisrt).NE. ocond(nc)82 ! radocond .NE. ocond(nc) 82 83 ! i.e.: 83 84 ! lwcon(nc)+iwcon(nc) .NE. ocond(nc) 85 ! but oliq+(ocond-oliq) .EQ. ocond 84 86 ! (which is not trivial) 85 87 !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ … … 91 93 92 94 USE lscp_ini_mod, ONLY : seuil_neb, ninter, iflag_evap_prec, t_coup, DDT0, ztfondue, rain_int_min 93 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_rad liq_snow, a_tr_sca95 USE lscp_ini_mod, ONLY : iflag_mpc_bl, ok_radocond_snow, a_tr_sca 94 96 95 97 … … 115 117 REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay ! mid-layer pressure [Pa] 116 118 REAL, DIMENSION(klon,klev), INTENT(IN) :: t ! temperature (K) 117 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! specific humidity[kg/kg]119 REAL, DIMENSION(klon,klev), INTENT(IN) :: q ! total specific humidity (= vapor phase) [kg/kg] 118 120 INTEGER, INTENT(IN) :: iflag_cld_th ! flag that determines the distribution of convective clouds 119 121 INTEGER, INTENT(IN) :: iflag_ice_thermo! flag to activate the ice thermodynamics … … 152 154 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneb ! cloud fraction [-] 153 155 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rneblsvol ! cloud fraction per unit volume [-] 154 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rad liq! condensed water used in the radiation scheme [kg/kg]156 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radocond ! condensed water used in the radiation scheme [kg/kg] 155 157 REAL, DIMENSION(klon,klev), INTENT(OUT) :: radicefrac ! ice fraction of condensed water for radiation scheme 156 158 REAL, DIMENSION(klon,klev), INTENT(OUT) :: rhcl ! clear-sky relative humidity [-] 157 REAL, DIMENSION(klon), INTENT(OUT) :: rain ! large-scale rainfall [kg/s/m2]158 REAL, DIMENSION(klon), INTENT(OUT) :: snow ! large-scale snowfall [kg/s/m2]159 REAL, DIMENSION(klon), INTENT(OUT) :: rain ! surface large-scale rainfall [kg/s/m2] 160 REAL, DIMENSION(klon), INTENT(OUT) :: snow ! surface large-scale snowfall [kg/s/m2] 159 161 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qsatl ! saturation specific humidity wrt liquid [kg/kg] 160 162 REAL, DIMENSION(klon,klev), INTENT(OUT) :: qsats ! saturation specific humidity wrt ice [kg/kg] … … 231 233 REAL velo(klon,klev), vr 232 234 REAL qlmpc, qimpc, rnebmpc 233 REAL rad liqi(klon,klev), radliql(klon,klev)235 REAL radocondi(klon,klev), radocondl(klon,klev) 234 236 235 237 INTEGER i, k, n, kk … … 295 297 d_qi(:,:) = 0.0 296 298 rneb(:,:) = 0.0 297 rad liq(:,:) = 0.0299 radocond(:,:) = 0.0 298 300 radicefrac(:,:) = 0.0 299 301 frac_nucl(:,:) = 1.0 … … 350 352 ! P0> Thermalization of precipitation falling from the overlying layer 351 353 ! -------------------------------------------------------------------- 352 ! Computes air temperature variation due to latent heattransported by354 ! Computes air temperature variation due to enthalpy transported by 353 355 ! precipitation. Precipitation is then thermalized with the air in the 354 356 ! layer. 355 357 ! The precipitation should remain thermalized throughout the different 356 ! thermodynamical transformations. The corresponding water mass should 358 ! thermodynamical transformations. 359 ! The corresponding water mass should 357 360 ! be added when calculating the layer's enthalpy change with 358 361 ! temperature 362 ! See lmdzpedia page todoan 363 ! todoan: check consistency with ice phase 364 ! todoan: understand why several steps 359 365 ! --------------------------------------------------------------------- 360 366 … … 409 415 IF (zrfl(i)+zifl(i).GT.0.) THEN 410 416 411 ! L TP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec=4).417 ! LudoTP: we only account for precipitation evaporation in the clear-sky (iflag_evap_prec=4). 412 418 ! c_iso: likely important to distinguish cs from neb isotope precipitation 413 419 … … 475 481 ! redistribute zqev0 conserving the ratio liquid/ice 476 482 483 ! todoan: check the consistency of this formula 477 484 IF (zqevt+zqevti.GT.zqev0) THEN 478 485 zqev=zqev0*zqevt/(zqevt+zqevti) … … 494 501 zq(i) = zq(i) - (zrfln(i)+zifln(i)-zrfl(i)-zifl(i)) & 495 502 * (RG/(paprs(i,k)-paprs(i,k+1)))*dtime 503 496 504 ! precip thermalization 497 505 zmqc(i) = zmqc(i) + (zrfln(i)+zifln(i)-zrfl(i)-zifl(i)) & … … 525 533 526 534 ! Melting: 527 zmelt = ((zt(i)- 273.15)/(ztfondue-273.15)) ! JYG535 zmelt = ((zt(i)-RTT)/(ztfondue-RTT)) ! JYG 528 536 ! precip fraction that is melted 529 537 zmelt = MIN(MAX(zmelt,0.),1.) 530 538 531 ! Icemelting539 ! update of rainfall and snowfall due to melting 532 540 IF (iflag_evap_prec.EQ.4) THEN 533 541 zrflclr(i)=zrflclr(i)+zmelt*ziflclr(i) 534 542 zrflcld(i)=zrflcld(i)+zmelt*ziflcld(i) 535 543 zrfl(i)=zrflclr(i)+zrflcld(i) 544 545 ziflclr(i)=ziflclr(i)*(1.-zmelt) 546 ziflcld(i)=ziflcld(i)*(1.-zmelt) 547 zifl(i)=ziflclr(i)+ziflcld(i) 548 536 549 ELSE 537 550 zrfl(i)=zrfl(i)+zmelt*zifl(i) 538 ENDIF 551 552 zifl(i)=zifl(i)*(1.-zmelt) 553 ENDIF 554 555 539 556 ! c_iso: melting of isotopic precipi with zmelt (no fractionation) 540 557 … … 543 560 *RLMLT/RCPD/(1.0+RVTMP2*(zq(i)+zmqc(i))) 544 561 545 IF (iflag_evap_prec.EQ.4) THEN546 ziflclr(i)=ziflclr(i)*(1.-zmelt)547 ziflcld(i)=ziflcld(i)*(1.-zmelt)548 zifl(i)=ziflclr(i)+ziflcld(i)549 ELSE550 zifl(i)=zifl(i)*(1.-zmelt)551 ENDIF552 !c_iso: same for isotopic precip.553 562 554 563 ELSE … … 908 917 ENDIF 909 918 910 ! Initialisation of zoliq and rad liqvariables919 ! Initialisation of zoliq and radocond variables 911 920 912 921 DO i = 1, klon … … 919 928 iwc(i) = 0. 920 929 zneb(i) = MAX(rneb(i,k),seuil_neb) 921 rad liq(i,k) = zoliq(i)/REAL(ninter+1)930 radocond(i,k) = zoliq(i)/REAL(ninter+1) 922 931 radicefrac(i,k) = zfice(i) 923 rad liqi(i,k)=zoliq(i)*zfice(i)/REAL(ninter+1)924 rad liql(i,k)=zoliq(i)*(1.-zfice(i))/REAL(ninter+1)932 radocondi(i,k)=zoliq(i)*zfice(i)/REAL(ninter+1) 933 radocondl(i,k)=zoliq(i)*(1.-zfice(i))/REAL(ninter+1) 925 934 ENDDO 926 935 … … 992 1001 ! c_iso: call isotope_conversion (for readibility) or duplicate 993 1002 994 rad liq(i,k) = radliq(i,k) + zoliq(i)/REAL(ninter+1)995 rad liql(i,k) = radliql(i,k) + zoliql(i)/REAL(ninter+1)996 rad liqi(i,k) = radliqi(i,k) + zoliqi(i)/REAL(ninter+1)1003 radocond(i,k) = radocond(i,k) + zoliq(i)/REAL(ninter+1) 1004 radocondl(i,k) = radocondl(i,k) + zoliql(i)/REAL(ninter+1) 1005 radocondi(i,k) = radocondi(i,k) + zoliqi(i)/REAL(ninter+1) 997 1006 998 1007 ENDIF ! rneb >0 … … 1109 1118 1110 1119 ! Calculation of the concentration of condensates seen by the radiation scheme 1111 ! for liquid phase, we take rad liql1112 ! for ice phase, we take rad liqi if we neglect snowfall, otherwise (ok_radliq_snow=true)1113 ! we recaulate rad liqi to account for contributions from the precipitation flux1114 1115 IF ((ok_rad liq_snow) .AND. (k .LT. klev)) THEN1120 ! for liquid phase, we take radocondl 1121 ! for ice phase, we take radocondi if we neglect snowfall, otherwise (ok_radocond_snow=true) 1122 ! we recaulate radocondi to account for contributions from the precipitation flux 1123 1124 IF ((ok_radocond_snow) .AND. (k .LT. klev)) THEN 1116 1125 ! for the solid phase (crystals + snowflakes) 1117 ! we recalculate rad liqi by summing1126 ! we recalculate radocondi by summing 1118 1127 ! the ice content calculated in the mesh 1119 1128 ! + the contribution of the non-evaporated snowfall … … 1121 1130 DO i=1,klon 1122 1131 IF (ziflprev(i) .NE. 0.0) THEN 1123 rad liqi(i,k)=zoliq(i)*zfice(i)+zqpreci(i)+ziflprev(i)/zrho(i,k+1)/velo(i,k+1)1132 radocondi(i,k)=zoliq(i)*zfice(i)+zqpreci(i)+ziflprev(i)/zrho(i,k+1)/velo(i,k+1) 1124 1133 ELSE 1125 rad liqi(i,k)=zoliq(i)*zfice(i)+zqpreci(i)1134 radocondi(i,k)=zoliq(i)*zfice(i)+zqpreci(i) 1126 1135 ENDIF 1127 rad liq(i,k)=radliql(i,k)+radliqi(i,k)1136 radocond(i,k)=radocondl(i,k)+radocondi(i,k) 1128 1137 ENDDO 1129 1138 ENDIF 1130 1139 1131 ! caculate the percentage of ice in "rad liq" so cloud+precip seen by the radiation scheme1140 ! caculate the percentage of ice in "radocond" so cloud+precip seen by the radiation scheme 1132 1141 DO i=1,klon 1133 IF (rad liq(i,k) .GT. 0.) THEN1134 radicefrac(i,k)=MIN(MAX(rad liqi(i,k)/radliq(i,k),0.),1.)1142 IF (radocond(i,k) .GT. 0.) THEN 1143 radicefrac(i,k)=MIN(MAX(radocondi(i,k)/radocond(i,k),0.),1.) 1135 1144 ENDIF 1136 1145 ENDDO
Note: See TracChangeset
for help on using the changeset viewer.