diff --git a/atmos_cubed_sphere b/atmos_cubed_sphere index 27d062906..27ad40e1e 160000 --- a/atmos_cubed_sphere +++ b/atmos_cubed_sphere @@ -1 +1 @@ -Subproject commit 27d0629067eb5c93ea5e5f518f42e5c4ee64f5e3 +Subproject commit 27ad40e1e6e548a89a029cb7646eac9c77265d1c diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index cb9a0ade4..a1aa5cd16 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/driver/makefile b/ccpp/driver/makefile index ccbae2c50..c64441135 100644 --- a/ccpp/driver/makefile +++ b/ccpp/driver/makefile @@ -64,8 +64,6 @@ clean: MKDEPENDS = ../../mkDepends.pl include ../../conf/make.rules -include ./depend - # do not include 'depend' file if the target contains string 'clean' ifneq (clean,$(findstring clean,$(MAKECMDGOALS))) -include depend diff --git a/ccpp/framework b/ccpp/framework index 5e648bb31..f2bceb3d0 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 5e648bb3180c3e36942fca597534ad1276c8271f +Subproject commit f2bceb3d0739e443812e597ba2cd81d823133dfd diff --git a/ccpp/physics b/ccpp/physics index 898db7907..30b3ba49e 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 898db7907e75158869ca1603dd885693e71bcd72 +Subproject commit 30b3ba49e4450940f73456d8b983b1f5e276c9d3 diff --git a/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml b/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml index 89f21fd7c..fac22314c 100644 --- a/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml +++ b/ccpp/suites/suite_FV3_GFS_2017_fv3wam.xml @@ -60,9 +60,9 @@ rayleigh_damp GFS_suite_stateout_update ozphys - GFS_DCNV_generic_pre get_phi_fv3 GFS_suite_interstitial_3 + GFS_DCNV_generic_pre samfdeepcnv GFS_DCNV_generic_post GFS_SCNV_generic_pre diff --git a/ccpp/suites/suite_FV3_GSD_SAR_v1.xml b/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml similarity index 79% rename from ccpp/suites/suite_FV3_GSD_SAR_v1.xml rename to ccpp/suites/suite_FV3_GFS_v16beta_flake.xml index d4558ea8e..dec1a76a2 100644 --- a/ccpp/suites/suite_FV3_GSD_SAR_v1.xml +++ b/ccpp/suites/suite_FV3_GFS_v16beta_flake.xml @@ -1,7 +1,12 @@ - + + + + fv_sat_adj + + GFS_time_vary_pre @@ -13,14 +18,12 @@ GFS_suite_interstitial_rad_reset - sgscloud_radpre GFS_rrtmg_pre rrtmg_sw_pre rrtmg_sw rrtmg_sw_post rrtmg_lw_pre rrtmg_lw - sgscloud_radpost rrtmg_lw_post GFS_rrtmg_post @@ -45,6 +48,7 @@ sfc_nst sfc_nst_post lsm_noah + flake_driver sfc_sice GFS_surface_loop_control_part2 @@ -54,7 +58,9 @@ sfc_diag sfc_diag_post GFS_surface_generic_post - mynnedmf_wrapper + GFS_PBL_generic_pre + satmedmfvdifq + GFS_PBL_generic_post GFS_GWD_generic_pre cires_ugwp cires_ugwp_post @@ -65,11 +71,16 @@ 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 - mp_thompson_pre - mp_thompson - mp_thompson_post + gfdl_cloud_microphys GFS_MP_generic_post maximum_hourly_diagnostics diff --git a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml index 72f1b659f..f2da9d4e8 100644 --- a/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_GSD_noah_mynnsfc.xml @@ -1,6 +1,6 @@ - + diff --git a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml index 50680a893..f1c22a774 100644 --- a/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml +++ b/ccpp/suites/suite_FV3_GSD_v0_mynnsfc.xml @@ -1,6 +1,6 @@ - + diff --git a/ccpp/suites/suite_FV3_RRFS_v0.xml b/ccpp/suites/suite_FV3_RRFS_v0.xml deleted file mode 100644 index a53479449..000000000 --- a/ccpp/suites/suite_FV3_RRFS_v0.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - GFS_time_vary_pre - GFS_rrtmg_setup - GFS_rad_time_vary - GFS_phys_time_vary - - - - - GFS_suite_interstitial_rad_reset - sgscloud_radpre - GFS_rrtmg_pre - rrtmg_sw_pre - rrtmg_sw - rrtmg_sw_post - rrtmg_lw_pre - rrtmg_lw - sgscloud_radpost - 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 - noahmpdrv - sfc_sice - GFS_surface_loop_control_part2 - - - - GFS_surface_composites_post - sfc_diag - sfc_diag_post - GFS_surface_generic_post - mynnedmf_wrapper - 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_suite_interstitial_4 - GFS_MP_generic_pre - mp_thompson_pre - mp_thompson - mp_thompson_post - GFS_MP_generic_post - maximum_hourly_diagnostics - - - - - GFS_stochastics - - - - diff --git a/ccpp/suites/suite_FV3_RRFS_v1beta.xml b/ccpp/suites/suite_FV3_RRFS_v1beta.xml index cbd19222c..3bff7b39d 100644 --- a/ccpp/suites/suite_FV3_RRFS_v1beta.xml +++ b/ccpp/suites/suite_FV3_RRFS_v1beta.xml @@ -1,6 +1,6 @@ - + diff --git a/gfsphysics/GFS_layer/GFS_typedefs.F90 b/gfsphysics/GFS_layer/GFS_typedefs.F90 index 59bcb9a50..70a565a36 100644 --- a/gfsphysics/GFS_layer/GFS_typedefs.F90 +++ b/gfsphysics/GFS_layer/GFS_typedefs.F90 @@ -140,7 +140,6 @@ module GFS_typedefs #ifdef CCPP !--- restart information logical :: restart !< flag whether this is a coldstart (.false.) or a warmstart/restart (.true.) - logical :: cycling !< flag whether this is a coldstart (.false.) or a cycled run (.true.) !--- hydrostatic/non-hydrostatic flag logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run #endif @@ -235,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 @@ -803,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) @@ -1125,7 +1128,6 @@ module GFS_typedefs #ifdef CCPP logical :: first_time_step !< flag signaling first time step for time integration routine logical :: restart !< flag whether this is a coldstart (.false.) or a warmstart/restart (.true.) - logical :: cycling !< flag whether this is a coldstart (.false.) or a cycled run (.true.) logical :: hydrostatic !< flag whether this is a hydrostatic or non-hydrostatic run #endif integer :: jdat(1:8) !< current forecast date and time @@ -2208,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)) @@ -2225,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 @@ -2890,7 +2894,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: aux2d_time_avg(1:naux2dmax) = .false. !< flags for time averaging of auxiliary 2d arrays logical :: aux3d_time_avg(1:naux3dmax) = .false. !< flags for time averaging of auxiliary 3d arrays - logical :: cycling = .false. !< flag to activate extra cycling procedures real(kind=kind_phys) :: fhcyc = 0. !< frequency for surface data cycling (hours) integer :: thermodyn_id = 1 !< valid for GFS only for get_prs/phi integer :: sfcpress_id = 1 !< valid for GFS only for get_prs/phi @@ -3059,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) @@ -3352,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, & @@ -3796,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 @@ -4164,7 +4177,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & #ifdef CCPP Model%first_time_step = .true. Model%restart = restart - Model%cycling = cycling Model%hydrostatic = hydrostatic #endif Model%jdat(1:8) = jdat(1:8) @@ -4336,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) @@ -4920,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 @@ -5128,7 +5147,6 @@ subroutine control_print(Model) print *, ' sec : ', Model%sec print *, ' first_time_step : ', Model%first_time_step print *, ' restart : ', Model%restart - print *, ' cycling : ', Model%cycling print *, ' hydrostatic : ', Model%hydrostatic #endif endif @@ -5783,7 +5801,6 @@ end subroutine diag_create subroutine diag_rad_zero(Diag, Model) class(GFS_diag_type) :: Diag type(GFS_control_type), intent(in) :: Model - integer :: i Diag%fluxr = zero Diag%topfsw%upfxc = zero @@ -5806,7 +5823,6 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) logical,optional, intent(in) :: linit, iauwindow_center logical set_totprcp - integer :: i !--- In/Out Diag%srunoff = zero diff --git a/gfsphysics/GFS_layer/GFS_typedefs.meta b/gfsphysics/GFS_layer/GFS_typedefs.meta index 337b3fce8..49023a1df 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 @@ -4010,7 +4023,7 @@ [slag] standard_name = equation_of_time long_name = equation of time (radian) - units = radians + units = radian dimensions = () type = real kind = kind_phys @@ -4074,12 +4087,6 @@ units = flag dimensions = () type = logical -[cycling] - standard_name = flag_for_cycling - long_name = flag for cycling or coldstart - units = flag - dimensions = () - type = logical [hydrostatic] standard_name = flag_for_hydrostatic_solver long_name = flag for hydrostatic solver from dynamics @@ -4319,14 +4326,14 @@ [xlat] standard_name = latitude long_name = latitude - units = radians + units = radian dimensions = (horizontal_dimension) type = real kind = kind_phys [xlon] standard_name = longitude long_name = longitude - units = radians + units = radian dimensions = (horizontal_dimension) type = real kind = kind_phys @@ -4345,9 +4352,9 @@ type = real kind = kind_phys [xlat_d] - standard_name = latitude_degree - long_name = latitude in degrees - units = degree + standard_name = latitude_in_degree + long_name = latitude in degree north + units = degree_north dimensions = (horizontal_dimension) type = real kind = kind_phys @@ -8150,7 +8157,7 @@ type = real kind = kind_phys [save_tcp] - standard_name = air_temperature_save_from_cumulus_paramterization + standard_name = air_temperature_save_from_convective_parameterization long_name = air temperature after cumulus parameterization units = K dimensions = (horizontal_dimension,vertical_dimension) @@ -8344,7 +8351,7 @@ [theta] standard_name = angle_from_east_of_maximum_subgrid_orographic_variations long_name = angle with_respect to east of maximum subgrid orographic variations - units = degrees + units = degree dimensions = (horizontal_dimension) type = real kind = kind_phys @@ -9482,7 +9489,7 @@ [con_pi] standard_name = pi long_name = ratio of a circle's circumference to its diameter - units = radians + units = none dimensions = () type = real kind = kind_phys @@ -9502,7 +9509,7 @@ kind = kind_phys [con_t0c] standard_name = temperature_at_zero_celsius - long_name = temperature at 0 degrees Celsius + long_name = temperature at 0 degree Celsius units = K dimensions = () type = real diff --git a/gfsphysics/makefile b/gfsphysics/makefile index 9f25780c8..2ae58e317 100644 --- a/gfsphysics/makefile +++ b/gfsphysics/makefile @@ -266,8 +266,6 @@ clean: MKDEPENDS = ../mkDepends.pl include ../conf/make.rules -include ./depend - # do not include 'depend' file if the target contains string 'clean' ifneq (clean,$(findstring clean,$(MAKECMDGOALS))) -include depend diff --git a/io/FV3GFS_io.F90 b/io/FV3GFS_io.F90 index 4b2738b23..b86cd0295 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 diff --git a/ipd/makefile b/ipd/makefile index 88cc6cbd1..ed4a2749b 100644 --- a/ipd/makefile +++ b/ipd/makefile @@ -51,8 +51,6 @@ clean: MKDEPENDS = ../mkDepends.pl include ../conf/make.rules -include ./depend - # do not include 'depend' file if the target contains string 'clean' ifneq (clean,$(findstring clean,$(MAKECMDGOALS))) -include depend