From 9e5074ee424fb4376d7f3ddaf59117c79f869e2f Mon Sep 17 00:00:00 2001 From: YihuaWu-NOAA / ufs-weather-model <55712832+YihuaWu-NOAA@users.noreply.github.com> Date: Mon, 20 Jul 2020 14:43:03 -0400 Subject: [PATCH] This is EMC flake model (#141) * This is EMC flake model * Updated .gitmodules file under FV3 * Removed the reset of lake fraction and lake depth statements * point to ccpp physics branch flake * Reset lkm to 0 * Swapped the order of calls in the suite file * update to the latest ccpp/physics branch * Revert change to .gitmodules and update submodule pointer for ccpp-physics --- ccpp/config/ccpp_prebuild_config.py | 2 + ccpp/physics | 2 +- ccpp/suites/suite_FV3_GFS_v16beta_flake.xml | 94 +++++++++++++++++++++ gfsphysics/GFS_layer/GFS_typedefs.F90 | 23 +++++ gfsphysics/GFS_layer/GFS_typedefs.meta | 13 +++ io/FV3GFS_io.F90 | 3 + 6 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 ccpp/suites/suite_FV3_GFS_v16beta_flake.xml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index cb9a0ade41..a1aa5cd16b 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -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', @@ -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', diff --git a/ccpp/physics b/ccpp/physics index 168932b60a..82a73dddd8 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 168932b60a6c5cabab1257e2ab99f9e6c1a1da36 +Subproject commit 82a73dddd8789f268fd6f8020b5b303540d68d0d diff --git a/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml b/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml new file mode 100644 index 0000000000..dec1a76a2a --- /dev/null +++ b/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml @@ -0,0 +1,94 @@ + + + + + + + fv_sat_adj + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_post + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + GFS_rrtmg_post + + + + + GFS_suite_interstitial_phys_reset + GFS_suite_stateout_reset + get_prs_fv3 + GFS_suite_interstitial_1 + GFS_surface_generic_pre + GFS_surface_composites_pre + dcyc2t3 + GFS_surface_composites_inter + GFS_suite_interstitial_2 + + + + sfc_diff + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + flake_driver + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post + GFS_GWD_generic_pre + cires_ugwp + cires_ugwp_post + GFS_GWD_generic_post + rayleigh_damp + GFS_suite_stateout_update + ozphys_2015 + h2ophys + get_phi_fv3 + GFS_suite_interstitial_3 + GFS_DCNV_generic_pre + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + gfdl_cloud_microphys + GFS_MP_generic_post + maximum_hourly_diagnostics + + + + + GFS_stochastics + + + + diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 7da19334f4..0af959b021 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -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 @@ -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) @@ -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)) @@ -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 @@ -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) @@ -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, & @@ -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 @@ -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) @@ -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 diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index b8b450f043..49023a1df6 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.meta +++ b/gfsphysics/GFS_layer/GFS_typedefs.meta @@ -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 @@ -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 diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 4b2738b230..b86cd02950 100644 --- a/io/FV3GFS_io.F90 +++ b/io/FV3GFS_io.F90 @@ -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