Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
61a41dc
3D-TKE EMDF GFS PBL scheme related changes from FIU (Ping Zhu, Ping.Z…
BinLiu-NOAA Jul 18, 2024
e4cca28
Update changes in 3d TKE scheme
Oct 4, 2024
d67a88c
Update submodules related to feature/3dtke_gfspbl
BinLiu-NOAA Feb 14, 2025
0533368
3dtke changes at FV3 level for the updated ufs
Mar 28, 2025
f75fe60
Merge remote-tracking branch 'remotes/origin/develop' into feature/3d…
BinLiu-NOAA May 9, 2025
dedbd48
Update submodule fv3/atmos_cubed_sphere.
BinLiu-NOAA May 9, 2025
c496356
Update submodules fv3/atmos_cubed_sphere and ccpp/physics.
BinLiu-NOAA May 9, 2025
c32c8fd
Update submodules fv3/atmos_cubed_sphere 3dtke data structure
May 23, 2025
b6bdc1d
Add an option to use liquid potential temperature in temperature equa…
BinLiu-NOAA Jun 2, 2025
8102fe9
Merge remote-tracking branch 'remotes/origin/develop' into feature/gf…
BinLiu-NOAA Jun 2, 2025
73af13e
Update sa3dtke variables standard names
Jun 3, 2025
303ad6b
Update based on stylistic comments and mpi use in dyn_core
Jun 3, 2025
01bdaa3
Update submodule physics for sa3dtke nonlocal mixing and stylistic co…
Jun 4, 2025
c54ba15
Merge remote-tracking branch 'upstream/develop' into feature/3dtke_gf…
BinLiu-NOAA Jun 9, 2025
6676318
Merge remote-tracking branch 'remotes/upstream/develop' into feature/…
BinLiu-NOAA Jun 14, 2025
a156385
Update submodules physics for SA3DTKE non-local mixing
Jun 16, 2025
3c0493b
Update SA3DTKE variables names
Jun 16, 2025
4f27d87
Update submodules physics for SA3DTKE nonlocal mass-flux transport
Jun 17, 2025
c7d1271
Merge remote-tracking branch 'upstream/develop' into feature/3dtke_gf…
BinLiu-NOAA Jun 21, 2025
b0c32b2
Merge remote-tracking branch 'remotes/origin/develop' into feature/gf…
BinLiu-NOAA Jun 21, 2025
e11d3d6
Merge remote-tracking branch 'remotes/origin/feature/gfspbl_lpt' into…
BinLiu-NOAA Jun 21, 2025
3521eb6
Merge remote-tracking branch 'upstream/develop' into feature/3dtke_gf…
BinLiu-NOAA Jun 26, 2025
eeaec64
Update submodule fv3/atmos_cubed_sphere.
BinLiu-NOAA Jun 27, 2025
5bce7d4
Update submodules ccpp/physics and fv3/atmos_cubed_sphere.
BinLiu-NOAA Jun 30, 2025
63939d4
update physics branch name: ufs/dev
jkbk2004 Jun 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion ccpp/data/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,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
Expand Down Expand Up @@ -1181,6 +1186,7 @@ module GFS_typedefs
logical :: shinhong !< flag for scale-aware Shinhong vertical turbulent mixing scheme
logical :: do_ysu !< flag for YSU 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
Expand Down Expand Up @@ -1377,6 +1383,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
Expand Down Expand Up @@ -1798,6 +1805,11 @@ 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() !<
Expand Down Expand Up @@ -2273,11 +2285,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
Expand Down Expand Up @@ -3736,6 +3758,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
logical :: shinhong = .false. !< flag for scale-aware Shinhong vertical turbulent mixing scheme
logical :: do_ysu = .false. !< flag for YSU 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
Expand Down Expand Up @@ -3918,6 +3941,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
Expand Down Expand Up @@ -4162,6 +4186,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
Expand All @@ -4184,7 +4210,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
Expand Down Expand Up @@ -5141,6 +5167,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
Expand All @@ -5155,6 +5183,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
Expand Down Expand Up @@ -6904,6 +6933,7 @@ subroutine control_print(Model)
print *, ' shinhong : ', Model%shinhong
print *, ' do_ysu : ', Model%do_ysu
print *, ' dspheat : ', Model%dspheat
print *, ' sa3dtke : ', Model%sa3dtke
print *, ' lheatstrg : ', Model%lheatstrg
print *, ' lseaspray : ', Model%lseaspray
print *, ' cnvcld : ', Model%cnvcld
Expand Down Expand Up @@ -7000,6 +7030,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
Expand Down Expand Up @@ -7352,6 +7383,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
Expand Down
68 changes: 68 additions & 0 deletions ccpp/data/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -5525,6 +5567,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
Expand Down Expand Up @@ -6112,6 +6160,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
Expand Down Expand Up @@ -8005,6 +8059,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
Expand Down
6 changes: 4 additions & 2 deletions fv3/atmos_model.F90
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,8 @@ subroutine update_atmos_radiation_physics (Atmos)
call set_atmosphere_pelist()
call mpp_clock_begin(getClock)
if (GFS_control%do_skeb) call atmosphere_diss_est (GFS_control%skeb_npass) ! do smoothing for SKEB
call atmos_phys_driver_statein (GFS_Control, GFS_Statein, Atm_block, flip_vc)
! SA-3D-TKE added GFS_Tbd (kyf)
call atmos_phys_driver_statein (GFS_Control, GFS_Statein, GFS_Tbd, Atm_block, flip_vc)
call mpp_clock_end(getClock)

!--- if dycore only run, set up the dummy physics output state as the input state
Expand Down Expand Up @@ -752,7 +753,8 @@ subroutine atmos_model_init (Atmos, Time_init, Time, Time_step)
endif
! Populate the GFS_Statein container with the prognostic state
! in Atm_block, which contains the initial conditions/restart data.
call atmos_phys_driver_statein (GFS_control, GFS_statein, Atm_block, flip_vc)
! SA-3D-TKE added GFS_Tbd (kyf)
call atmos_phys_driver_statein (GFS_control, GFS_statein, GFS_Tbd, Atm_block, flip_vc)

! When asked to calculate 3-dim. tendencies, set Stateout variables to
! Statein variables here in order to capture the first call to dycore
Expand Down
Loading