Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

This is EMC flake model #141

Merged
merged 9 commits into from
Jul 20, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions ccpp/config/ccpp_prebuild_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@
'FV3/ccpp/physics/physics/sfcsub.F',
'FV3/ccpp/physics/physics/sflx.f',
'FV3/ccpp/physics/physics/set_soilveg.f',
'FV3/ccpp/physics/physics/flake.F90',
'FV3/ccpp/physics/physics/surface_perturbation.F90',
'FV3/ccpp/physics/physics/cu_gf_deep.F90',
'FV3/ccpp/physics/physics/cu_gf_sh.F90',
Expand Down Expand Up @@ -289,6 +290,7 @@
'FV3/ccpp/physics/physics/sfc_diff.f',
'FV3/ccpp/physics/physics/sfc_drv.f',
'FV3/ccpp/physics/physics/sfc_noahmp_drv.f',
'FV3/ccpp/physics/physics/flake_driver.F90',
'FV3/ccpp/physics/physics/sfc_nst.f',
'FV3/ccpp/physics/physics/sfc_ocean.F',
'FV3/ccpp/physics/physics/sfc_sice.f',
Expand Down
94 changes: 94 additions & 0 deletions ccpp/suites/suite_FV3_GFS_v16beta_flake.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>

<suite name="FV3_GFS_v16beta_flake" lib="ccppphys" ver="3">
<!-- <init></init> -->
<group name="fast_physics">
<subcycle loop="1">
<scheme>fv_sat_adj</scheme>
</subcycle>
</group>
<group name="time_vary">
<subcycle loop="1">
<scheme>GFS_time_vary_pre</scheme>
<scheme>GFS_rrtmg_setup</scheme>
<scheme>GFS_rad_time_vary</scheme>
<scheme>GFS_phys_time_vary</scheme>
</subcycle>
</group>
<group name="radiation">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_rad_reset</scheme>
<scheme>GFS_rrtmg_pre</scheme>
<scheme>rrtmg_sw_pre</scheme>
<scheme>rrtmg_sw</scheme>
<scheme>rrtmg_sw_post</scheme>
<scheme>rrtmg_lw_pre</scheme>
<scheme>rrtmg_lw</scheme>
<scheme>rrtmg_lw_post</scheme>
<scheme>GFS_rrtmg_post</scheme>
</subcycle>
</group>
<group name="physics">
<subcycle loop="1">
<scheme>GFS_suite_interstitial_phys_reset</scheme>
<scheme>GFS_suite_stateout_reset</scheme>
<scheme>get_prs_fv3</scheme>
<scheme>GFS_suite_interstitial_1</scheme>
<scheme>GFS_surface_generic_pre</scheme>
<scheme>GFS_surface_composites_pre</scheme>
<scheme>dcyc2t3</scheme>
<scheme>GFS_surface_composites_inter</scheme>
<scheme>GFS_suite_interstitial_2</scheme>
</subcycle>
<!-- Surface iteration loop -->
<subcycle loop="2">
<scheme>sfc_diff</scheme>
<scheme>GFS_surface_loop_control_part1</scheme>
<scheme>sfc_nst_pre</scheme>
<scheme>sfc_nst</scheme>
<scheme>sfc_nst_post</scheme>
<scheme>lsm_noah</scheme>
<scheme>flake_driver</scheme>
<scheme>sfc_sice</scheme>
<scheme>GFS_surface_loop_control_part2</scheme>
</subcycle>
<!-- End of surface iteration loop -->
<subcycle loop="1">
<scheme>GFS_surface_composites_post</scheme>
<scheme>sfc_diag</scheme>
<scheme>sfc_diag_post</scheme>
<scheme>GFS_surface_generic_post</scheme>
<scheme>GFS_PBL_generic_pre</scheme>
<scheme>satmedmfvdifq</scheme>
<scheme>GFS_PBL_generic_post</scheme>
<scheme>GFS_GWD_generic_pre</scheme>
<scheme>cires_ugwp</scheme>
<scheme>cires_ugwp_post</scheme>
<scheme>GFS_GWD_generic_post</scheme>
<scheme>rayleigh_damp</scheme>
<scheme>GFS_suite_stateout_update</scheme>
<scheme>ozphys_2015</scheme>
<scheme>h2ophys</scheme>
<scheme>get_phi_fv3</scheme>
<scheme>GFS_suite_interstitial_3</scheme>
<scheme>GFS_DCNV_generic_pre</scheme>
<scheme>samfdeepcnv</scheme>
<scheme>GFS_DCNV_generic_post</scheme>
<scheme>GFS_SCNV_generic_pre</scheme>
<scheme>samfshalcnv</scheme>
<scheme>GFS_SCNV_generic_post</scheme>
<scheme>GFS_suite_interstitial_4</scheme>
<scheme>cnvc90</scheme>
<scheme>GFS_MP_generic_pre</scheme>
<scheme>gfdl_cloud_microphys</scheme>
<scheme>GFS_MP_generic_post</scheme>
<scheme>maximum_hourly_diagnostics</scheme>
</subcycle>
</group>
<group name="stochastics">
<subcycle loop="1">
<scheme>GFS_stochastics</scheme>
</subcycle>
</group>
<!-- <finalize></finalize> -->
</suite>
23 changes: 23 additions & 0 deletions gfsphysics/GFS_layer/GFS_typedefs.F90
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ module GFS_typedefs
real (kind=kind_phys), pointer :: oceanfrac(:) => null() !< ocean fraction [0:1]
real (kind=kind_phys), pointer :: landfrac(:) => null() !< land fraction [0:1]
real (kind=kind_phys), pointer :: lakefrac(:) => null() !< lake fraction [0:1]
real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ]
real (kind=kind_phys), pointer :: tsfc (:) => null() !< surface air temperature in K
!< [tsea in gbphys.f]
real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K
Expand Down Expand Up @@ -802,6 +803,9 @@ module GFS_typedefs

logical :: use_ufo !< flag for gcycle surface option

!--- flake model parameters
integer :: lkm !< flag for flake model

!--- tuning parameters for physical parameterizations
logical :: ras !< flag for ras convection scheme
logical :: flipv !< flag for vertical direction flip (ras)
Expand Down Expand Up @@ -2206,6 +2210,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
allocate (Sfcprop%oceanfrac(IM))
allocate (Sfcprop%landfrac (IM))
allocate (Sfcprop%lakefrac (IM))
allocate (Sfcprop%lakedepth(IM))
allocate (Sfcprop%tsfc (IM))
allocate (Sfcprop%tsfco (IM))
allocate (Sfcprop%tsfcl (IM))
Expand All @@ -2223,6 +2228,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model)
Sfcprop%oceanfrac = clear_val
Sfcprop%landfrac = clear_val
Sfcprop%lakefrac = clear_val
Sfcprop%lakedepth = clear_val
Sfcprop%tsfc = clear_val
Sfcprop%tsfco = clear_val
Sfcprop%tsfcl = clear_val
Expand Down Expand Up @@ -3056,6 +3062,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &

logical :: use_ufo = .false. !< flag for gcycle surface option

!--- flake model parameters
integer :: lkm = 0 !< flag for flake model

!--- tuning parameters for physical parameterizations
logical :: ras = .false. !< flag for ras convection scheme
logical :: flipv = .true. !< flag for vertical direction flip (ras)
Expand Down Expand Up @@ -3349,6 +3358,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
! Noah MP options
iopt_dveg,iopt_crs,iopt_btr,iopt_run,iopt_sfc, iopt_frz, &
iopt_inf, iopt_rad,iopt_alb,iopt_snf,iopt_tbot,iopt_stc, &

!--- lake model control
lkm, &

!--- physical parameterizations
ras, trans_trac, old_monin, cnvgwd, mstrat, moist_adj, &
cscnv, cal_pre, do_aw, do_shoc, shocaftcnv, shoc_cld, &
Expand Down Expand Up @@ -3793,6 +3806,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
Model%isot = isot
Model%use_ufo = use_ufo

!--- flake model parameters
Model%lkm = lkm

! Noah MP options from namelist
!
Model%iopt_dveg = iopt_dveg
Expand Down Expand Up @@ -4332,6 +4348,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, &
' ignore_lake=',ignore_lake
print *,' min_lakeice=',Model%min_lakeice,' min_seaice=',Model%min_seaice, &
'min_lake_height=',Model%min_lake_height

print *, 'flake model parameters'
print *, 'lkm : ', Model%lkm

if (Model%nstf_name(1) > 0 ) then
print *,' NSSTM is active '
print *,' nstf_name(1)=',Model%nstf_name(1)
Expand Down Expand Up @@ -4916,6 +4936,9 @@ subroutine control_print(Model)

print *, ' use_ufo : ', Model%use_ufo
print *, ' '
print *, 'flake model parameters'
print *, 'lkm : ', Model%lkm
print *, ' '
print *, 'tuning parameters for physical parameterizations'
print *, ' ras : ', Model%ras
if (Model%ras) then
Expand Down
13 changes: 13 additions & 0 deletions gfsphysics/GFS_layer/GFS_typedefs.meta
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,13 @@
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
[lakedepth]
standard_name = lake_depth
long_name = lake depth
units = m
dimensions = (horizontal_dimension)
type = real
kind = kind_phys
[tsfc]
standard_name = surface_skin_temperature
long_name = surface skin temperature
Expand Down Expand Up @@ -2975,6 +2982,12 @@
units = index
dimensions = ()
type = integer
[lkm]
standard_name = flag_for_lake_surface_scheme
long_name = flag for lake surface model
units = flag
dimensions = ()
type = integer
[ras]
standard_name = flag_for_ras_deep_convection
long_name = flag for ras convection scheme
Expand Down
3 changes: 3 additions & 0 deletions io/FV3GFS_io.F90
Original file line number Diff line number Diff line change
Expand Up @@ -640,6 +640,9 @@ subroutine sfc_prop_restart_read (Sfcprop, Atm_block, Model, fv_domain)
Sfcprop(nb)%oro_uf(ix) = oro_var2(i,j,16)
Sfcprop(nb)%landfrac(ix) = oro_var2(i,j,17) !land frac [0:1]
Sfcprop(nb)%lakefrac(ix) = oro_var2(i,j,18) !lake frac [0:1]

Sfcprop(nb)%lakedepth(ix) = oro_var2(i,j,19) !lake depth [m] !YWu

enddo
enddo

Expand Down