diff --git a/ccpp/physics b/ccpp/physics index 90cae2db6..9b527e42d 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 90cae2db626541daf4095d5e589d35400b87a75d +Subproject commit 9b527e42d1152a86555ff1057b4ba1782571f05c diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 712e2ddec..5bc6cfeb7 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -161,6 +161,11 @@ module GFS_typedefs real (kind=kind_phys), pointer :: vvl (:,:) => null() !< layer mean vertical velocity in pa/sec real (kind=kind_phys), pointer :: tgrs (:,:) => null() !< model layer mean temperature in k real (kind=kind_phys), pointer :: qgrs (:,:,:) => null() !< layer mean tracer concentration +!3D-SA-TKE + real (kind=kind_phys), pointer :: def_1 (:,:) => null() !< deformation + real (kind=kind_phys), pointer :: def_2 (:,:) => null() !< deformation + real (kind=kind_phys), pointer :: def_3 (:,:) => null() !< deformation +!3D-SA-TKE-end ! dissipation estimate real (kind=kind_phys), pointer :: diss_est(:,:) => null() !< model layer mean temperature in k ! soil state variables - for soil SPPT - sfc-perts, mgehne @@ -1176,6 +1181,7 @@ module GFS_typedefs logical :: do_ysu !< flag for YSU turbulent mixing scheme logical :: acm !< flag for ACM turbulent mixing scheme logical :: dspheat !< flag for tke dissipative heating + logical :: sa3dtke !< flag for scale-aware 3D tke scheme logical :: hurr_pbl !< flag for hurricane-specific options in PBL scheme logical :: lheatstrg !< flag for canopy heat storage parameterization logical :: lseaspray !< flag for sea spray parameterization @@ -1372,6 +1378,7 @@ module GFS_typedefs real(kind=kind_phys) :: elmx !< maximum allowed dissipation mixing length in boundary layer mass flux scheme integer :: sfc_rlm !< choice of near surface mixing length in boundary layer mass flux scheme integer :: tc_pbl !< control for TC applications in the PBL scheme + integer :: use_lpt !< control for using Liquid Potential Temp for TC applications in the GFSPBL scheme !--- parameters for canopy heat storage (CHS) parameterization real(kind=kind_phys) :: h0facu !< CHS factor for sensible heat flux in unstable surface layer @@ -1807,6 +1814,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: hpbl (:) => null() !< Planetary boundary layer height real (kind=kind_phys), pointer :: ud_mf (:,:) => null() !< updraft mass flux +!-- Diagnostic variable that passes to dyn_core (SA-3D-TKE) + real (kind=kind_phys), pointer :: dku3d_h (:,:) => null() !< Horizontal eddy diffusitivity for momentum + real (kind=kind_phys), pointer :: dku3d_e (:,:) => null() !< Eddy diffusitivity for momentum for tke + !--- dynamical forcing variables for Grell-Freitas convection real (kind=kind_phys), pointer :: forcet (:,:) => null() !< real (kind=kind_phys), pointer :: forceq (:,:) => null() !< @@ -2282,11 +2293,21 @@ subroutine statein_create (Statein, Model) allocate (Statein%wgrs (IM,Model%levs)) endif allocate (Statein%qgrs (IM,Model%levs,Model%ntrac)) +!3D-SA-TKE + allocate (Statein%def_1 (IM,Model%levs)) + allocate (Statein%def_2 (IM,Model%levs)) + allocate (Statein%def_3 (IM,Model%levs)) +!3D-SA-TKE-end Statein%qgrs = clear_val Statein%pgr = clear_val Statein%ugrs = clear_val Statein%vgrs = clear_val +!3D-SA-TKE + Statein%def_1 = clear_val + Statein%def_2 = clear_val + Statein%def_3 = clear_val +!3D-SA-TKE-end if(Model%lightning_threat) then Statein%wgrs = clear_val @@ -3746,6 +3767,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: do_ysu = .false. !< flag for YSU vertical turbulent mixing scheme logical :: acm = .false. !< flag for ACM vertical turbulent mixing scheme logical :: dspheat = .false. !< flag for tke dissipative heating + logical :: sa3dtke = .false. !< flag for scale-aware 3D tke scheme logical :: hurr_pbl = .false. !< flag for hurricane-specific options in PBL scheme logical :: lheatstrg = .false. !< flag for canopy heat storage parameterization logical :: lseaspray = .false. !< flag for sea spray parameterization @@ -3928,6 +3950,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: elmx = 300. !< maximum allowed dissipation mixing length in boundary layer mass flux scheme integer :: sfc_rlm = 0 !< choice of near surface mixing length in boundary layer mass flux scheme integer :: tc_pbl = 0 !< control for TC applications in the PBL scheme + integer :: use_lpt = 0 !< control for using Liquid Potential Temp for TC applications in the GFSPBL scheme !--- parameters for canopy heat storage (CHS) parameterization real(kind=kind_phys) :: h0facu = 0.25 @@ -4185,6 +4208,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & do_spp, n_var_spp, & lndp_type, n_var_lndp, lndp_each_step, & pert_mp,pert_clds,pert_radtend, & + !--- Scale-aware 3D TKE scheme + sa3dtke, & !--- Rayleigh friction prslrd0, ral_ts, ldiag_ugwp, do_ugwp, do_tofd, & ! --- Ferrier-Aligo @@ -4207,7 +4232,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & diag_flux, diag_log, & ! vertical diffusion xkzm_m, xkzm_h, xkzm_s, xkzminv, moninq_fac, dspfac, & - bl_upfr, bl_dnfr, rlmx, elmx, sfc_rlm, tc_pbl, & + bl_upfr, bl_dnfr, rlmx, elmx, sfc_rlm, tc_pbl, use_lpt, & !--- canopy heat storage parameterization h0facu, h0facs, & !--- cellular automata @@ -5214,6 +5239,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%diag_flux = diag_flux !--- flux method in 2-m diagnostics (for stable conditions) Model%diag_log = diag_log +!--- SA-3D-TKE option + Model%sa3dtke = sa3dtke !--- vertical diffusion Model%xkzm_m = xkzm_m @@ -5228,6 +5255,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%elmx = elmx Model%sfc_rlm = sfc_rlm Model%tc_pbl = tc_pbl + Model%use_lpt = use_lpt !--- canopy heat storage parametrization Model%h0facu = h0facu @@ -6975,6 +7003,7 @@ subroutine control_print(Model) print *, ' do_ysu : ', Model%do_ysu print *, ' acm : ', Model%acm print *, ' dspheat : ', Model%dspheat + print *, ' sa3dtke : ', Model%sa3dtke print *, ' lheatstrg : ', Model%lheatstrg print *, ' lseaspray : ', Model%lseaspray print *, ' cnvcld : ', Model%cnvcld @@ -7071,6 +7100,7 @@ subroutine control_print(Model) print *, ' elmx : ', Model%elmx print *, ' sfc_rlm : ', Model%sfc_rlm print *, ' tc_pbl : ', Model%tc_pbl + print *, ' use_lpt : ', Model%use_lpt print *, ' ' print *, 'parameters for canopy heat storage parametrization' print *, ' h0facu : ', Model%h0facu @@ -7423,6 +7453,12 @@ subroutine tbd_create (Tbd, Model) allocate (Tbd%hpbl (IM)) Tbd%hpbl = clear_val + ! Allocate horizontal component of dku for dyn_core (SA-3D-TKE) + allocate (Tbd%dku3d_h (IM,Model%levs)) + Tbd%dku3d_h = clear_val + allocate (Tbd%dku3d_e (IM,Model%levs)) + Tbd%dku3d_e = clear_val + if (Model%imfdeepcnv == Model%imfdeepcnv_gf .or. Model%imfdeepcnv == Model%imfdeepcnv_ntiedtke .or. Model%imfdeepcnv == Model%imfdeepcnv_samf .or. Model%imfshalcnv == Model%imfshalcnv_samf .or. Model%imfdeepcnv == Model%imfdeepcnv_c3 .or. Model%imfshalcnv == Model%imfshalcnv_c3) then allocate (Tbd%prevsq(IM, Model%levs)) Tbd%prevsq = clear_val diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 4f78fdd98..f45f4454e 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -119,6 +119,48 @@ type = real kind = kind_phys active = (do_lightning_threat_index_calculations) +[def_1] + standard_name = square_of_vertical_shear_due_to_dynamics + long_name = square of vertical shear calculated from dynamics + units = m2 s-2 + dimensions = (horizontal_dimension,vertical_layer_dimension) + type = real + kind = kind_phys +[def_1(:,1)] + standard_name = square_of_vertical_shear_due_to_dynamics_at_surface_adjacent_layer + long_name = square of vertical shear calculated from dynamics at lowest model layer + units = m2 s-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[def_2] + standard_name = square_of_horizontal_shear_due_to_dynamics + long_name = square of horizontal shear calculated from dynamics + units = m2 s-2 + dimensions = (horizontal_dimension,vertical_layer_dimension) + type = real + kind = kind_phys +[def_2(:,1)] + standard_name = square_of_horizontal_shear_due_to_dynamics_at_surface_adjacent_layer + long_name = square of horizontal shear calculated from dynamics at lowest model layer + units = m2 s-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[def_3] + standard_name = horizontal_transfer_rate_of_tke_due_to_dynamics + long_name = rate of horizontal TKE transfer and pressure correlation calculated from dynamics + units = m2 s-3 + dimensions = (horizontal_dimension,vertical_layer_dimension) + type = real + kind = kind_phys +[def_3(:,1)] + standard_name = horizontal_transfer_rate_tke_due_to_dynamics_at_surface_adjacent_layer + long_name = rate of horizontal TKE transfer and pressure correlation calculated from dynamics at lowest model layer + units = m2 s-3 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [vvl] standard_name = lagrangian_tendency_of_air_pressure long_name = layer mean vertical velocity @@ -5539,6 +5581,12 @@ units = flag dimensions = () type = logical +[sa3dtke] + standard_name = do_scale_aware_3d_tke + long_name = flag for scale-aware 3d tke scheme + units = flag + dimensions = () + type = logical [hurr_pbl] standard_name = flag_hurricane_PBL long_name = flag for hurricane-specific options in PBL scheme @@ -6126,6 +6174,12 @@ units = none dimensions = () type = integer +[use_lpt] + standard_name = control_for_using_LPT_for_TC_applications_in_the_PBL_scheme + long_name = control for using LPT in TC applications in the PBL scheme + units = none + dimensions = () + type = integer [h0facu] standard_name = multiplicative_tuning_parameter_for_reduced_surface_heat_fluxes_due_to_canopy_heat_storage long_name = canopy heat storage factor for sensible heat flux in unstable surface layer @@ -8098,6 +8152,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[dku3d_h] + standard_name = horizontal_atmosphere_momentum_diffusivity_for_dynamics + long_name = horizontal atmospheric momentum diffusivity for dynamics + units = m2 s-1 + dimensions = (horizontal_dimension,vertical_layer_dimension) + type = real + kind = kind_phys +[dku3d_e] + standard_name = horizontal_atmosphere_tke_diffusivity_for_dynamics + long_name = horizontal atmospheric tke diffusivity for dynamics + units = m2 s-1 + dimensions = (horizontal_dimension,vertical_layer_dimension) + type = real + kind = kind_phys [ud_mf] standard_name = instantaneous_atmosphere_updraft_convective_mass_flux long_name = (updraft mass flux) * delt