- Timestamp:
- Jun 27, 2025, 7:30:06 PM (5 weeks ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/contrails/libf/phylmd/lmdz_lscp_precip.f90
r5717 r5728 18 18 SUBROUTINE histprecip_precld( & 19 19 klon, dtime, iftop, paprsdn, paprsup, pplay, zt, ztupnew, zq, & 20 zmqc, zneb, znebprecip, znebprecipclr, icesed_flux, &20 zmqc, zneb, znebprecip, znebprecipclr, flsed, flsed_lincont, flsed_circont, & 21 21 zrfl, zrflclr, zrflcld, zifl, ziflclr, ziflcld, dqreva, dqssub & 22 22 ) … … 44 44 REAL, INTENT(INOUT), DIMENSION(klon) :: zq !--current water vapor specific humidity (includes evaporated qi and ql) [kg/kg] 45 45 REAL, INTENT(INOUT), DIMENSION(klon) :: zmqc !--specific humidity in the precipitation falling from the upper layer [kg/kg] 46 REAL, INTENT(IN), DIMENSION(klon) :: icesed_flux !--sedimentated ice flux [kg/s/m2] 46 REAL, INTENT(IN), DIMENSION(klon) :: flsed !--sedimentated ice flux [kg/s/m2] 47 REAL, INTENT(IN), DIMENSION(klon) :: flsed_lincont !--linear contrails sedimentated ice flux [kg/s/m2] 48 REAL, INTENT(IN), DIMENSION(klon) :: flsed_circont !--contrail cirrus sedimentated ice flux [kg/s/m2] 47 49 48 50 REAL, INTENT(IN), DIMENSION(klon) :: zneb !--cloud fraction IN THE LAYER ABOVE [-] … … 132 134 !--If the sedimentation of ice crystals is activated, the falling ice is sublimated and 133 135 !--added to the total water content of the gridbox 134 IF ( icesed_flux(i) .GT. 0. ) THEN 135 qice_sedim = icesed_flux(i) / ( paprsdn(i) - paprsup(i) ) * RG * dtime 136 IF ( (flsed(i) + flsed_lincont(i) + flsed_circont(i)) .GT. 0. ) THEN 137 qice_sedim = (flsed(i) + flsed_lincont(i) + flsed_circont(i)) & 138 / ( paprsdn(i) - paprsup(i) ) * RG * dtime 136 139 137 140 !--Thermalisation of sedimentated ice … … 339 342 SUBROUTINE histprecip_postcld( & 340 343 klon, dtime, iftop, paprsdn, paprsup, pplay, ctot_vol, ptconv, pt_pron_clds, & 341 zdqsdT_raw, zt, zq, zoliq, zoliql, zoliqi, zcond, zfice, zmqc, icesed_flux,&344 zdqsdT_raw, zt, zq, zoliq, zoliql, zoliqi, zcond, zfice, zmqc, & 342 345 rneb, znebprecipclr, znebprecipcld, zneb, tot_zneb, zrho_up, zvelo_up, & 343 346 zrfl, zrflclr, zrflcld, zifl, ziflclr, ziflcld, & … … 394 397 REAL, INTENT(INOUT), DIMENSION(klon) :: ziflclr !--flux of snow gridbox-mean in clear sky [kg/s/m2] 395 398 REAL, INTENT(INOUT), DIMENSION(klon) :: ziflcld !--flux of snow gridbox-mean in cloudy air [kg/s/m2] 396 REAL, INTENT(INOUT), DIMENSION(klon) :: icesed_flux !--flux of sedimentated ice [kg/s/m2]397 399 398 400 REAL, INTENT(OUT), DIMENSION(klon) :: zradocond !--condensed water used in the radiation scheme [kg/kg] … … 438 440 zqpreci(:) = 0. 439 441 ziflprev(:) = 0. 440 441 ! AB ICE SEDIM442 !icesed_flux(:) = 0.443 442 444 443 … … 700 699 701 700 ENDDO 702 703 !---------------------------------------------------------704 !-- ICE SEDIMENTATION705 !---------------------------------------------------------706 !IF ( ok_ice_sedim ) THEN707 IF ( .FALSE. ) THEN ! AB ICE SEDIM708 709 DO i = 1, klon710 IF ( ( zoliqi(i) .GT. 0. ) .AND. ( rneb(i) .GT. eps ) .AND. pt_pron_clds(i) ) THEN711 712 iwcg = MAX( zrho(i) * zoliqi(i) / zneb(i) * 1000., eps ) ! iwc in g/m3713 !tempc = zt(i) - RTT ! celcius temp714 !! so-called 'empirical parameterization' in Stubenrauch et al. 2019715 !IF ( tempc .GE. -60. ) THEN716 ! icevelo = EXP( 1.9714 + 0.00216078 * tempc &717 ! - ( 0.0000414122 * tempc**2 + 0.00538922 * tempc + 0.0516344 ) * LOG(iwcg) )718 !ELSE719 ! icevelo = 65. * iwcg**0.2 * ( 15000. / pplay(i) )**0.15720 !ENDIF721 !icevelo = fallice_sedim * icevelo / 100.0 ! from cm/s to m/s722 723 icevelo = fallice_sedim * 1.645 * ( iwcg / 1000. )**0.16724 725 qice_sedim = zoliqi(i) * MIN(1., icevelo * dtime / zdz(i))726 !--We remove the ice that was sedimentated in the gridbox (it cannot sedimentate two727 !--times in the same timestep)728 qice_sedim = MAX(0., qice_sedim - dqised(i) * dtime)729 !--Add tendencies730 zoliqi(i) = zoliqi(i) - qice_sedim731 zoliq(i) = zoliq(i) - qice_sedim732 !--Convert to flux733 icesed_flux(i) = qice_sedim * ( paprsdn(i) - paprsup(i) ) / RG / dtime734 735 !--Diagnostic tendencies736 dqised(i) = dqised(i) - qice_sedim / dtime737 ENDIF738 ENDDO739 ENDIF740 701 741 702 ! LTP: limit of surface cloud fraction covered by precipitation when the local intensity of the flux is below rain_int_min … … 796 757 SUBROUTINE poprecip_precld( & 797 758 klon, dtime, iftop, paprsdn, paprsup, pplay, temp, tempupnew, qvap, & 798 qprecip, precipfracclr, precipfraccld, qvapclrup, qtotupnew, icesed_flux, & 759 qprecip, precipfracclr, precipfraccld, qvapclrup, qtotupnew, & 760 flsed, flsed_lincont, flsed_circont, & 799 761 cldfra, qvc, qliq, qice, & 800 762 rain, rainclr, raincld, snow, snowclr, snowcld, & … … 831 793 REAL, INTENT(IN), DIMENSION(klon) :: qvapclrup !--clear-sky specific humidity IN THE LAYER ABOVE [kg/kg] 832 794 REAL, INTENT(IN), DIMENSION(klon) :: qtotupnew !--total specific humidity IN THE LAYER ABOVE [kg/kg] 833 REAL, INTENT(IN), DIMENSION(klon) :: icesed_flux !--sedimentated ice water flux [kg/s/m2] 795 REAL, INTENT(IN), DIMENSION(klon) :: flsed !--sedimentated ice water flux [kg/s/m2] 796 REAL, INTENT(IN), DIMENSION(klon) :: flsed_lincont !--sedimentated ice water flux [kg/s/m2] 797 REAL, INTENT(IN), DIMENSION(klon) :: flsed_circont !--sedimentated ice water flux [kg/s/m2] 834 798 835 799 REAL, INTENT(INOUT), DIMENSION(klon) :: cldfra !--cloud fraction at the beginning of lscp - used only if the cloud properties are advected [-] … … 933 897 cpw = RCPD * RVTMP2 934 898 DO i = 1, klon 935 IF ( icesed_flux(i) .GT. 0. ) THEN936 qice_sedim = icesed_flux(i) / dhum_to_dflux(i)899 IF ( (flsed(i) + flsed_lincont(i) + flsed_circont(i)) .GT. 0. ) THEN 900 qice_sedim = (flsed(i) + flsed_lincont(i) + flsed_circont(i)) / dhum_to_dflux(i) 937 901 !--No condensed water so cp=cp(vapor+dry air) 938 902 !-- RVTMP2=rcpv/rcpd-1 … … 1042 1006 !--If the sedimentation of ice crystals is activated, the falling ice is sublimated and 1043 1007 !--added to the total water content of the gridbox 1044 IF ( icesed_flux(i) .GT. 0. ) THEN1045 qice_sedim = icesed_flux(i) / dhum_to_dflux(i)1008 IF ( (flsed(i) + flsed_lincont(i) + flsed_circont(i)) .GT. 0. ) THEN 1009 qice_sedim = (flsed(i) + flsed_lincont(i) + flsed_circont(i)) / dhum_to_dflux(i) 1046 1010 !--Vapor is updated after evaporation/sublimation (it is increased) 1047 1011 qvap(i) = qvap(i) + qice_sedim … … 1408 1372 SUBROUTINE poprecip_postcld( & 1409 1373 klon, dtime, paprsdn, paprsup, pplay, ctot_vol, ptconv, & 1410 temp, qvap, qliq, qice, icefrac, cldfra, icesed_flux,&1374 temp, qvap, qliq, qice, icefrac, cldfra, & 1411 1375 precipfracclr, precipfraccld, & 1412 1376 rain, rainclr, raincld, snow, snowclr, snowcld, & … … 1464 1428 REAL, INTENT(INOUT), DIMENSION(klon) :: snowcld !--flux of snow gridbox-mean in cloudy air coming from the layer above [kg/s/m2] 1465 1429 1466 REAL, INTENT(INOUT), DIMENSION(klon) :: icesed_flux !--flux of sedimentated ice [kg/s/m2]1467 1430 REAL, INTENT(OUT), DIMENSION(klon) :: qraindiag !--DIAGNOSTIC specific rain content [kg/kg] 1468 1431 REAL, INTENT(OUT), DIMENSION(klon) :: qsnowdiag !--DIAGNOSTIC specific snow content [kg/kg] … … 1528 1491 1529 1492 qzero(:) = 0. 1530 ! AB ICE SEDIM1531 !icesed_flux(:) = 0.1532 1493 1533 1494 dqrcol(:) = 0. … … 2000 1961 2001 1962 2002 !---------------------------------------------------------2003 !-- ICE SEDIMENTATION2004 !---------------------------------------------------------2005 !IF ( ok_ice_sedim ) THEN2006 IF ( .FALSE. ) THEN ! AB ICE SEDIM2007 2008 IF ( ( qice(i) .GT. 0. ) .AND. ( cldfra(i) .GT. eps ) ) THEN2009 2010 rho = pplay(i) / temp(i) / RD2011 iwcg = MAX( rho * qice(i) / cldfra(i) * 1000., eps ) ! iwc in g/m32012 !tempc = temp(i) - RTT ! celcius temp2013 !! so-called 'empirical parameterization' in Stubenrauch et al. 20192014 !IF ( tempc .GE. -60. ) THEN2015 ! icevelo = EXP( 1.9714 + 0.00216078 * tempc &2016 ! - ( 0.0000414122 * tempc**2 + 0.00538922 * tempc + 0.0516344 ) * LOG(iwcg) )2017 !ELSE2018 ! icevelo = 65. * iwcg**0.2 * ( 15000. / pplay(i) )**0.152019 !ENDIF2020 !icevelo = fallice_sedim * icevelo / 100.0 ! from cm/s to m/s2021 2022 icevelo = fallice_sedim * 1.645 * ( iwcg / 1000. )**0.162023 2024 dz = ( paprsdn(i) - paprsup(i) ) / RG / rho2025 qice_sedim = qice(i) * MIN(1., icevelo * dtime / dz)2026 !--We remove the ice that was sedimentated in the gridbox (it cannot sedimentate two2027 !--times in the same timestep)2028 qice_sedim = MAX(0., qice_sedim - dqised(i) * dtime)2029 !--Add tendencies2030 qice(i) = qice(i) - qice_sedim2031 !--Convert to flux2032 icesed_flux(i) = qice_sedim * dhum_to_dflux(i)2033 2034 !--Diagnostic tendencies2035 dqised(i) = dqised(i) - qice_sedim / dtime2036 ENDIF2037 ENDIF2038 2039 2040 1963 !--If the local flux of rain+snow in clear air is lower than min_precip, 2041 1964 !--we reduce the precipiration fraction in the clear air so that the new
Note: See TracChangeset
for help on using the changeset viewer.