diff --git a/physics/GFS_debug.F90 b/physics/GFS_debug.F90 index 23d1be573..308376b10 100644 --- a/physics/GFS_debug.F90 +++ b/physics/GFS_debug.F90 @@ -593,6 +593,9 @@ subroutine GFS_diagtoscreen_run (Model, Statein, Stateout, Sfcprop, Coupling, call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Tbd%acvb' , Tbd%acvb) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Tbd%acvt' , Tbd%acvt) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Tbd%hpbl' , Tbd%hpbl) + if (Model%imfdeepcnv .ge. 0 .or. Model%imfshalcnv .ge. 0) then + call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Tbd%ud_mf' , Tbd%ud_mf) + end if if (Model%do_sppt) then call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Tbd%dtdtnp' , Tbd%dtdtnp) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Tbd%dtotprcp' , Tbd%dtotprcp) @@ -1331,7 +1334,6 @@ subroutine GFS_interstitialtoscreen_run (Model, Statein, Stateout, Sfcprop, Coup call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_ice ', Interstitial%tsurf_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_land ', Interstitial%tsurf_land ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%tsurf_water ', Interstitial%tsurf_water ) - call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%ud_mf ', Interstitial%ud_mf ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_ice ', Interstitial%uustar_ice ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_land ', Interstitial%uustar_land ) call print_var(mpirank, omprank, blkno, Grid%xlat_d, Grid%xlon_d, 'Interstitial%uustar_water ', Interstitial%uustar_water ) diff --git a/physics/module_SGSCloud_RadPost.F90 b/physics/module_SGSCloud_RadPost.F90 index ea262596f..c94d2dda1 100644 --- a/physics/module_SGSCloud_RadPost.F90 +++ b/physics/module_SGSCloud_RadPost.F90 @@ -21,8 +21,8 @@ end subroutine sgscloud_radpost_finalize subroutine sgscloud_radpost_run( & im,levs, & flag_init,flag_restart, & - qc,qi, & - qc_save,qi_save, & + qc,qi,qs, & + qc_save,qi_save,qs_save, & errmsg,errflg ) ! should be moved to inside the mynn: @@ -34,8 +34,8 @@ subroutine sgscloud_radpost_run( & integer, intent(in) :: im, levs logical, intent(in) :: flag_init, flag_restart - real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi - real(kind=kind_phys), dimension(:,:), intent(in) :: qc_save, qi_save + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi, qs + real(kind=kind_phys), dimension(:,:), intent(in) :: qc_save, qi_save, qs_save character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variable @@ -58,6 +58,7 @@ subroutine sgscloud_radpost_run( & do i = 1, im qc(i,k) = qc_save(i,k) qi(i,k) = qi_save(i,k) + qs(i,k) = qs_save(i,k) enddo enddo diff --git a/physics/module_SGSCloud_RadPost.meta b/physics/module_SGSCloud_RadPost.meta index 7298426ae..ed316433b 100644 --- a/physics/module_SGSCloud_RadPost.meta +++ b/physics/module_SGSCloud_RadPost.meta @@ -51,6 +51,14 @@ type = real kind = kind_phys intent = inout +[qs] + standard_name = snow_mixing_ratio + long_name = ratio of mass of snow water to mass of dry air plus vapor (without condensates) + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout [qc_save] standard_name = cloud_condensed_water_mixing_ratio_save long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) before entering a physics scheme @@ -67,6 +75,14 @@ type = real kind = kind_phys intent = in +[qs_save] + standard_name = snow_mixing_ratio_save + long_name = cloud snow mixing ratio before entering a physics scheme + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in [errmsg] standard_name = ccpp_error_message long_name = error message for error handling in CCPP diff --git a/physics/module_SGSCloud_RadPre.F90 b/physics/module_SGSCloud_RadPre.F90 index 68a520a84..02b400859 100644 --- a/physics/module_SGSCloud_RadPre.F90 +++ b/physics/module_SGSCloud_RadPre.F90 @@ -36,81 +36,105 @@ end subroutine sgscloud_radpre_finalize !! clouds(:,:,3) - mean effective radius for liquid cloud ! !! clouds(:,:,4) - layer cloud ice water path ! !! clouds(:,:,5) - mean effective radius for ice cloud ! +!! clouds(:,:,6) - layer rain drop water path ! +!! clouds(:,:,7) - mean effective radius for rain drop ! +!! clouds(:,:,8) - layer snow flake water path ! +!! clouds(:,:,9) - mean effective radius for snow flake !! !>\section sgscloud_radpre GSD SGS Scheme General Algorithm !> @{ subroutine sgscloud_radpre_run( & - im,levs, & + im,dt,levs, & flag_init,flag_restart, & con_g, con_pi, eps, epsm1, & + r_v, cpv, rcp, & + xlv, xlf, cp, & do_mynnedmf, & - qc, qi, qv, T3D, P3D, & + qc, qi, qv, T3D, P3D, exner, & qr, qs, qg, & - qci_conv, & + qci_conv,ud_mf, & imfdeepcnv, imfdeepcnv_gf, & - qc_save, qi_save, & + qc_save, qi_save, qs_save, & qc_bl,qi_bl,cldfra_bl, & delp,clouds1,clouds2,clouds3, & - clouds4,clouds5,slmsk, & + clouds4,clouds5, & + clouds8,clouds9,slmsk, & nlay, plyr, xlat, dz,de_lgth, & cldsa,mtopa,mbota, & imp_physics, imp_physics_gfdl,& iovr, & errmsg, errflg ) -! should be moved to inside the mynn: use machine , only : kind_phys use module_radiation_clouds, only : gethml - use radcons, only: qmin ! Minimum values for various calculations - use funcphys, only: fpvs ! Function ot compute sat. vapor pressure over liq. + use radcons, only: qmin ! Minimum values for various calculations + use funcphys, only: fpvs ! Function to compute sat. vapor pressure over liq. !------------------------------------------------------------------- implicit none !------------------------------------------------------------------- ! Interface variables - real(kind=kind_phys), intent(in) :: con_g, con_pi, eps, epsm1 - real (kind=kind_phys) :: gfac - integer, intent(in) :: im, levs, imfdeepcnv, imfdeepcnv_gf, & + real(kind=kind_phys), intent(in) :: con_g, con_pi, eps, epsm1 + real(kind=kind_phys), intent(in) :: r_v, cpv, rcp + real(kind=kind_phys), intent(in) :: xlv, xlf, cp + real(kind=kind_phys), intent(in) :: dt + real :: xls, xlvcp, xlscp !derived below + real(kind=kind_phys) :: gfac + integer, intent(in) :: im, levs, imfdeepcnv, imfdeepcnv_gf, & & nlay, imp_physics, imp_physics_gfdl - logical, intent(in) :: flag_init, flag_restart, do_mynnedmf + logical, intent(in) :: flag_init, flag_restart, do_mynnedmf + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc, qi real(kind=kind_phys), dimension(:,:), intent(inout) :: qr, qs, qg ! qci_conv only allocated if GF is used - real(kind=kind_phys), dimension(:,:), intent(inout) :: qci_conv - real(kind=kind_phys), dimension(:,:), intent(in) :: T3D,delp, & - & qv,P3D - real(kind=kind_phys), dimension(:,:), intent(inout) :: & - & clouds1,clouds2,clouds3,clouds4,clouds5 - real(kind=kind_phys), dimension(:,:), intent(inout) :: qc_save, qi_save + real(kind=kind_phys), dimension(:,:), intent(inout) :: qci_conv + real(kind=kind_phys), dimension(:,:), intent(in) :: ud_mf + real(kind=kind_phys), dimension(:,:), intent(in) :: T3D,delp + real(kind=kind_phys), dimension(:,:), intent(in) :: qv,P3D,exner + real(kind=kind_phys), dimension(:,:), intent(inout) :: & + & clouds1,clouds2,clouds3,clouds4,clouds5, & + & clouds8,clouds9 + real(kind=kind_phys), dimension(:,:), intent(inout) :: qc_save, qi_save, qs_save real(kind=kind_phys), dimension(:,:), intent(in) :: qc_bl, qi_bl, cldfra_bl - real(kind=kind_phys), dimension(:), intent(in) :: slmsk, xlat, de_lgth + real(kind=kind_phys), dimension(:), intent(in) :: slmsk, xlat, de_lgth real(kind=kind_phys), dimension(:,:), intent(in) :: plyr, dz - real(kind=kind_phys), dimension(:,:), intent(inout) :: cldsa - integer, dimension(:,:), intent(inout) :: mbota, mtopa - integer, intent(in) :: iovr + real(kind=kind_phys), dimension(:,:), intent(inout) :: cldsa + integer, dimension(:,:), intent(inout) :: mbota, mtopa + integer, intent(in) :: iovr character(len=*), intent(out) :: errmsg integer, intent(out) :: errflg ! Local variables ! pressure limits of cloud domain interfaces (low,mid,high) in mb (0.1kPa) - real (kind=kind_phys) :: ptop1(im,3+1) !< pressure limits of cloud domain interfaces - real (kind=kind_phys) :: ptopc(3+1,2 ) !< pressure limits of cloud domain interfaces - !! (low, mid, high) in mb (0.1kPa) + real(kind=kind_phys) :: ptop1(im,3+1) !< pressure limits of cloud domain interfaces + real(kind=kind_phys) :: ptopc(3+1,2 ) !< pressure limits of cloud domain interfaces + !! (low, mid, high) in mb (0.1kPa) data ptopc / 1050., 650., 400., 0.0, 1050., 750., 500., 0.0 / real(kind=kind_phys), dimension(im,nlay) :: cldcnv real(kind=kind_phys), dimension(im) :: rxlat - real (kind=kind_phys):: Tc, iwc + real(kind=kind_phys) :: Tc, Tk, liqfrac, iwc, ice_frac, snow_frac integer :: i, k, id ! DH* 20200723 - see comment at the end of this routine around 'gethml' real(kind=kind_phys), dimension(im,nlay) :: alpha_dummy ! *DH ! PARAMETERS FOR RANDALL AND XU (1996) CLOUD FRACTION - REAL, PARAMETER :: coef_p = 0.25, coef_gamm = 0.49, coef_alph = 100. - REAL :: rhgrid,h2oliq,qsat,tem1,tem2,clwt,es,onemrh,value + real, parameter :: coef_p = 0.25, coef_gamm = 0.49, coef_alph = 100. + real :: rhgrid,h2oliq,qsat,tem1,tem2,clwt,es,onemrh,value + + !Chaboureau and Bechtold (2002 and 2005) + real :: a, f, sigq, qmq, qt, xl, tlk, th, thl, rsl, cpm, cb_cf + + !Option to convective cloud fraction + integer, parameter :: conv_cf_opt = 0 !0: C-B, 1: X-R ! Initialize CCPP error handling variables errmsg = '' errflg = 0 + ! some derived variables from incoming constants: + xls=xlv+xlf + xlvcp=xlv/cp + xlscp=(xlv+xlf)/cp + !write(0,*)"==============================================" !write(0,*)"in SGSCLoud_RadPre" gfac=1.0e5/con_g @@ -151,6 +175,7 @@ subroutine sgscloud_radpre_run( & do i = 1, im qc_save(i,k) = qc(i,k) qi_save(i,k) = qi(i,k) + qs_save(i,k) = qs(i,k) end do end do @@ -171,39 +196,47 @@ subroutine sgscloud_radpre_run( & clouds1(i,k) = cldfra_bl(i,k) !endif - !if( qr(i,k) > 1.0e-7 .OR. qs(i,k) > 1.0e-7.or.qci_conv(i,k)>1.0e-7)THEN - !Keep Xu-RandalL clouds fraction - do not overwrite - !else - ! clouds1(i,k) = cldfra_bl(i,k) - !endif - if (qc(i,k) < 1.e-6 .and. cldfra_bl(i,k)>0.001) then qc(i,k) = qc_bl(i,k)*cldfra_bl(i,k) + + !eff radius cloud water (microns) from Miles et al. (2007) if (nint(slmsk(i)) == 1) then !land - if(qc(i,k)>1.E-8)clouds3(i,k)=5.4 !eff radius cloud water (microns) + if(qc(i,k)>1.E-8)clouds3(i,k)=5.4 else - !eff radius cloud water (microns), from Miles et al. if(qc(i,k)>1.E-8)clouds3(i,k)=9.6 endif + !calculate the liquid water path using additional BL clouds clouds2(i,k) = max(0.0, qc(i,k) * gfac * delp(i,k)) endif + + Tc = T3D(i,k) - 273.15 + !crudely split frozen species into 50% ice and 50% snow below + !~700 mb and decrease snow to zero by ~300 mb + snow_frac = min(0.5, max((p3d(i,k)-30000.0),0.0)/140000.0) + ice_frac = 1.0 - snow_frac if (qi(i,k) < 1.e-8 .and. cldfra_bl(i,k)>0.001) then - qi(i,k) = qi_bl(i,k)*cldfra_bl(i,k) - Tc = T3D(i,k) - 273.15 + qi(i,k) = ice_frac*qi_bl(i,k)*cldfra_bl(i,k) + + !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos, fig 6b) + if(qi(i,k)>1.E-8)clouds5(i,k)=max(173.45 + 2.14*Tc, 20.) + !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos, fig 8b) !iwc = qi(i,k)*1.0e6*rho(i,k) - if (nint(slmsk(i)) == 1) then !land - !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos, fig 6b) - if(qi(i,k)>1.E-8)clouds5(i,k)=max(173.45 + 2.14*Tc, 20.) - else - if(qi(i,k)>1.E-8)clouds5(i,k)=max(173.45 + 2.14*Tc, 20.) - !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos, fig 8b) - !IF(qi(i,k)>1.E-8)clouds5(i,k)=MAX(139.7 + 1.76*Tc + 13.49*LOG(iwc), 20.) - endif + !IF(qi(i,k)>1.E-8)clouds5(i,k)=MAX(139.7 + 1.76*Tc + 13.49*LOG(iwc), 20.) + !calculate the ice water path using additional BL clouds clouds4(i,k) = max(0.0, qi(i,k) * gfac * delp(i,k)) endif + if (qs(i,k) < 1.e-8 .and. cldfra_bl(i,k)>0.001) then + qs(i,k) = snow_frac*qi_bl(i,k)*cldfra_bl(i,k) + + !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos, fig 6b) + if(qs(i,k)>1.E-8)clouds9(i,k)=max(2.*(173.45 + 2.14*Tc), 50.) + + !calculate the snow water path using additional BL clouds + clouds8(i,k) = max(0.0, qs(i,k) * gfac * delp(i,k)) + endif enddo enddo @@ -241,55 +274,92 @@ subroutine sgscloud_radpre_run( & endif ! end MYNN or OTHER choice for background clouds fractions ! At this point, we have cloud properties for all non-deep convective clouds. - ! So now we add the convective clouds, + ! So now we add the convective clouds: if (imfdeepcnv == imfdeepcnv_gf) then do k = 1, levs do i = 1, im !if ( qci_conv(i,k) > 0. .AND. (qi(i,k) < 1E-7 .AND. qc(i,k) < 1E-7 ) ) then if ( qci_conv(i,k) > 0. ) then - !Partition the convective clouds into water & ice according to a linear - qc(i,k) = qc(i,k)+qci_conv(i,k)*(min(1., max(0., (T3D(i,k)-244.)/25.))) - qi(i,k) = qi(i,k)+qci_conv(i,k)*(1. - min(1., max(0., (T3D(i,k)-244.)/25.))) + Tk = T3D(i,k) + Tc = Tk - 273.15 - Tc = T3D(i,k) - 273.15 + !Partition the convective clouds into water & frozen species + liqfrac = min(1., max(0., (Tk-244.)/29.)) + qc(i,k) = qc(i,k)+qci_conv(i,k)*liqfrac + !split ice & snow 50-50% + qi(i,k) = qi(i,k)+0.5*qci_conv(i,k)*(1. - liqfrac) + qs(i,k) = qs(i,k)+0.5*qci_conv(i,k)*(1. - liqfrac) + !eff radius cloud water (microns) if (nint(slmsk(i)) == 1) then !land - if(qc(i,k)>1.E-8)clouds3(i,k)=5.4 !eff radius cloud water (microns) - !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos) - if(qi(i,k)>1.e-8)clouds5(i,k)=max(173.45 + 2.14*Tc, 20.) + if(qc(i,k)>1.E-8)clouds3(i,k)=5.4 else - !eff radius cloud water (microns), from Miles et al. + !from Miles et al. if(qc(i,k)>1.E-8)clouds3(i,k)=9.6 - !eff radius cloud ice (microns), from Mishra et al. (2014, JGR Atmos, fig 6b) - if(qi(i,k)>1.E-8)clouds5(i,k)=max(173.45 + 2.14*Tc, 20.) endif - - if ( do_mynnedmf ) then - !print *,'MYNN PBL cldcov used' + !from Mishra et al. (2014, JGR Atmos), assume R_sno = 2*R_ice + if(qi(i,k)>1.e-8)clouds5(i,k)=max( 173.45 + 2.14*Tc , 20.) + if(qs(i,k)>1.e-8)clouds9(i,k)=max(2.0*(173.45 + 2.14*Tc), 50.) + + if ( conv_cf_opt .eq. 0 ) then + !print *,'Chab-Bechtold cloud fraction used' + ! clouds1(i,k) = cldfra_bl(i,k) + + !Alternatively, use Chaboureau-Bechtold (CB) convective component + !Based on both CB2002 and CB2005. + xl = xlv*liqfrac + xls*(1.-liqfrac) ! blended heat capacity + tlk = t3d(i,k) - xlvcp/exner(i,k)*qc(i,k) & + & - xlscp/exner(i,k)*qi(i,k)! liquid temp + ! get saturation water vapor mixing ratio at tl and p + es = min( p3d(i,k), fpvs( tlk ) ) ! fpvs and prsl in pa + qsat= max( QMIN, eps*es / (p3d(i,k) + epsm1*es) ) + rsl = xl*qsat / (r_v*tlk**2) ! slope of C-C curve at t = tl + ! CB02, Eqn. 4 + qt = qc(i,k) + qi(i,k) + qv(i,k) !total water + cpm = cp + qt*cpv ! CB02, sec. 2, para. 1 + a = 1./(1. + xl*rsl/cpm) ! CB02 variable "a" + !Now calculate convective component of the cloud fraction: + if (a > 0.0) then + f = min(1.0/a, 4.0) ! f is the vertical profile + else ! scaling function (CB2005) + f = 1.0 + endif + sigq = 1.5E-3 * ud_mf(i,k)/dt * f + !sigq = 3.E-3 * ud_mf(i,k)/dt * f + sigq = SQRT(sigq**2 + 1e-10) ! combined conv + background components + qmq = a * (qt - qsat) ! saturation deficit/excess; + ! the numerator of Q1 + cb_cf= min(max(0.5 + 0.36 * atan(1.55*(qmq/sigq)),0.01),0.99) + if (do_mynnedmf .and. qmq .ge. 0.0) then + ! leverage C-B stratus clouds from MYNN in saturated conditions + clouds1(i,k) = 0.5*(clouds1(i,k) + cb_cf) + else ! unsaturated + clouds1(i,k) = cb_cf + endif else - !print *,'GF with Xu-Randall cloud fraction' - ! Xu-Randall (1996) cloud fraction - es = min( p3d(i,k), fpvs( t3d(i,k) ) ) ! fpvs and prsl in pa - qsat = max( QMIN, eps * es / (p3d(i,k) + epsm1*es) ) - rhgrid = max( 0., min( 1.00, qv(i,k)/qsat ) ) - h2oliq = qc(i,k) + qi(i,k) + qr(i,k) + qs(i,k) + qg(i,k) ! g/kg - clwt = 1.0e-6 * (p3d(i,k)*0.00001) - - if (h2oliq > clwt) then - onemrh= max( 1.e-10, 1.0-rhgrid ) - tem1 = min(max((onemrh*qsat)**0.49,0.0001),1.0) !jhan - tem1 = 100.0 / tem1 - value = max( min( tem1*(h2oliq-clwt), 50.0 ), 0.0 ) - tem2 = sqrt( sqrt(rhgrid) ) - - clouds1(i,k) = max( tem2*(1.0-exp(-value)), 0.0 ) - else - clouds1(i,k) = 0.0 - endif - !print*,"XuRandla- cf:",clouds1(i,k)," rh:",rhgrid," qt:",h2oliq - !print*,"XuRandlb- clwt:",clwt," qsat:",qsat," p:",p3d(i,k) - endif ! not MYNN PBL + !print *,'GF with Xu-Randall cloud fraction' + ! Xu-Randall (1996) cloud fraction + es = min( p3d(i,k), fpvs( t3d(i,k) ) ) ! fpvs and prsl in pa + qsat = max( QMIN, eps*es / (p3d(i,k) + epsm1*es) ) + rhgrid = max( 0., min( 1.00, qv(i,k)/qsat ) ) + h2oliq = qc(i,k) + qi(i,k) + qr(i,k) + qs(i,k) + qg(i,k) ! g/kg + clwt = 1.0e-6 * (p3d(i,k)*0.00001) + + if (h2oliq > clwt) then + onemrh= max( 1.e-10, 1.0-rhgrid ) + tem1 = min(max((onemrh*qsat)**0.49,0.0001),1.0) !jhan + tem1 = 100.0 / tem1 + value = max( min( tem1*(h2oliq-clwt), 50.0 ), 0.0 ) + tem2 = sqrt( sqrt(rhgrid) ) + + clouds1(i,k) = max( tem2*(1.0-exp(-value)), 0.0 ) + else + clouds1(i,k) = 0.0 + endif + !print*,"XuRandla- cf:",clouds1(i,k)," rh:",rhgrid," qt:",h2oliq + !print*,"XuRandlb- clwt:",clwt," qsat:",qsat," p:",p3d(i,k) + endif ! end convective cf choice endif ! qci_conv enddo enddo diff --git a/physics/module_SGSCloud_RadPre.meta b/physics/module_SGSCloud_RadPre.meta index 14c3127fc..95d73432d 100644 --- a/physics/module_SGSCloud_RadPre.meta +++ b/physics/module_SGSCloud_RadPre.meta @@ -14,6 +14,14 @@ dimensions = () type = integer intent = in +[dt] + standard_name = timestep_for_physics + long_name = physics time step + units = s + dimensions = () + type = real + kind = kind_phys + intent = in [levs] standard_name = vertical_layer_dimension long_name = vertical layer dimension @@ -67,6 +75,54 @@ type = real kind = kind_phys intent = in +[r_v] + standard_name = gas_constant_water_vapor + long_name = ideal gas constant for water vapor + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[cpv] + standard_name = specific_heat_of_water_vapor_at_constant_pressure + long_name = specific heat of water vapor at constant pressure + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[rcp] + standard_name = ratio_of_gas_constant_dry_air_to_specific_heat_of_dry_air_at_constant_pressure + long_name = (rd/cp) + units = none + dimensions = () + type = real + kind = kind_phys + intent = in +[xlv] + standard_name = latent_heat_of_vaporization_of_water_at_0C + long_name = latent heat of evaporation/sublimation + units = J kg-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[xlf] + standard_name = latent_heat_of_fusion_of_water_at_0C + long_name = latent heat of fusion + units = J kg-1 + dimensions = () + type = real + kind = kind_phys + intent = in +[cp] + standard_name = specific_heat_of_dry_air_at_constant_pressure + long_name = specific heat of dry air at constant pressure + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys + intent = in [do_mynnedmf] standard_name = flag_for_mellor_yamada_nakanishi_niino_pbl_scheme long_name = flag to activate MYNN-EDMF @@ -90,6 +146,14 @@ type = real kind = kind_phys intent = inout +[qs] + standard_name = snow_mixing_ratio + long_name = ratio of mass of snow water to mass of dry air plus vapor (without condensates) + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout [qv] standard_name = specific_humidity long_name = water vapor specific humidity @@ -114,17 +178,17 @@ type = real kind = kind_phys intent = in -[qr] - standard_name = rain_mixing_ratio - long_name = moist (dry+vapor, no condensates) mixing ratio of rain water - units = kg kg-1 +[exner] + standard_name = dimensionless_exner_function + long_name = Exner function at layers + units = none dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real kind = kind_phys - intent = inout -[qs] - standard_name = snow_mixing_ratio - long_name = moist (dry+vapor, no condensates) mixing ratio of snow water + intent = in +[qr] + standard_name = rain_mixing_ratio + long_name = moist (dry+vapor, no condensates) mixing ratio of rain water units = kg kg-1 dimensions = (horizontal_loop_extent,vertical_layer_dimension) type = real @@ -138,6 +202,14 @@ type = real kind = kind_phys intent = inout +[ud_mf] + standard_name = instantaneous_atmosphere_updraft_convective_mass_flux + long_name = (updraft mass flux) * delt + units = kg m-2 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = in [qci_conv] standard_name = convective_cloud_condesate_after_rainout long_name = convective cloud condesate after rainout @@ -176,6 +248,14 @@ type = real kind = kind_phys intent = inout +[qs_save] + standard_name = snow_mixing_ratio_save + long_name = cloud snow mixing ratio before entering a physics scheme + units = kg kg-1 + dimensions = (horizontal_loop_extent,vertical_layer_dimension) + type = real + kind = kind_phys + intent = inout [QC_BL] standard_name = subgrid_scale_cloud_liquid_water_mixing_ratio long_name = subgrid cloud water mixing ratio from PBL scheme @@ -248,6 +328,22 @@ type = real kind = kind_phys intent = inout +[clouds8] + standard_name = cloud_snow_water_path + long_name = cloud snow water path + units = g m-2 + dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation) + type = real + kind = kind_phys + intent = inout +[clouds9] + standard_name = mean_effective_radius_for_snow_flake + long_name = mean effective radius for snow flake + units = um + dimensions = (horizontal_loop_extent,adjusted_vertical_layer_dimension_for_radiation) + type = real + kind = kind_phys + intent = inout [slmsk] standard_name = area_type long_name = landmask: sea/land/ice=0/1/2