From 5faeca870d3485bbad4cdef3a1da8c18b040bb37 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 10 Dec 2019 12:22:01 -0700 Subject: [PATCH 01/26] add hurricane-specific variables for moninedmf to GFS_typedefs and add a namelist that exercises the hurricane version of moninedmf --- ccpp/physics_namelists/input_GFS_v15_hurr.nml | 138 ++++++++++++++++++ scm/src/GFS_typedefs.F90 | 20 ++- scm/src/GFS_typedefs.meta | 29 +++- 3 files changed, 185 insertions(+), 2 deletions(-) create mode 100644 ccpp/physics_namelists/input_GFS_v15_hurr.nml diff --git a/ccpp/physics_namelists/input_GFS_v15_hurr.nml b/ccpp/physics_namelists/input_GFS_v15_hurr.nml new file mode 100644 index 000000000..5ddecdaff --- /dev/null +++ b/ccpp/physics_namelists/input_GFS_v15_hurr.nml @@ -0,0 +1,138 @@ +&gfs_physics_nml + fhzero = 6. + ldiag3d = .true. + ldiag_ugwp = .false. + do_ugwp = .false. + do_tofd = .false. + fhcyc = 24. + nst_anl = .true. + use_ufo = .true. + pre_rad = .false. + ncld = 5 + imp_physics = 11 + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 1 + iems = 1 + IAER = 111 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .true. + satmedmf = .false. + hurr_pbl = .true. + do_myjsfc = .false. + do_myjpbl = .false. + shinhong = .false. + do_ysu = .false. + lheatstrg = .false. + lgfdlmprad = .false. + effr_in = .false. + random_clds = .false. + trans_trac = .false. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + cdmbgwd = 3.5,0.25 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsm = 1 + iopt_dveg = 2 + iopt_crs = 1 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_alb = 2 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 1 + debug = .false. + oz_phys = .false. + oz_phys_2015 = .true. + h2o_phys = .true. + nstf_name = 2,1,1,0,5 + xkzminv = 0.3 + xkzm_m = 1.0 + xkzm_h = 1.0 + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_sfcperts = .false. +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .false. + fast_sat_adj = .false. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 ! This is a key parameter for cloud water + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. +/ + +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 25 +/ diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 2b8187880..0faae5851 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -751,6 +751,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 :: hurr_pbl !< flag for hurricane-specific options in PBL scheme logical :: lheatstrg !< flag for canopy heat storage parameterization logical :: cnvcld logical :: random_clds !< flag controls whether clouds are random @@ -822,6 +823,10 @@ module GFS_typedefs integer :: bl_mynn_cloudmix !< flag to activate mixing of cloud species integer :: bl_mynn_mixqt !< flag to mix total water or individual species integer :: icloud_bl !< flag for coupling sgs clouds to radiation + real(kind=kind_phys) :: var_ric + real(kind=kind_phys) :: coef_ric_l + real(kind=kind_phys) :: coef_ric_s + ! MYJ switches logical :: do_myjsfc !< flag for MYJ surface layer scheme logical :: do_myjpbl !< flag for MYJ PBL scheme @@ -2765,6 +2770,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 :: hurr_pbl = .false. !< flag for hurricane-specific options in PBL scheme logical :: lheatstrg = .false. !< flag for canopy heat storage parameterization logical :: cnvcld = .false. logical :: random_clds = .false. !< flag controls whether clouds are random @@ -2802,6 +2808,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: bl_mynn_cloudmix = 1 integer :: bl_mynn_mixqt = 0 integer :: icloud_bl = 1 + real(kind=kind_phys) :: var_ric = 1.0 + real(kind=kind_phys) :: coef_ric_l = 0.16 + real(kind=kind_phys) :: coef_ric_s = 0.25 logical :: do_myjsfc = .false. !< flag for MYJ surface layer scheme logical :: do_myjpbl = .false. !< flag for MYJ PBL scheme @@ -2986,9 +2995,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & bl_mynn_cloudpdf, bl_mynn_edmf, bl_mynn_edmf_mom, & bl_mynn_edmf_tke, bl_mynn_edmf_part, bl_mynn_cloudmix, & bl_mynn_mixqt, icloud_bl, bl_mynn_tkeadvect, gwd_opt, & + var_ric, coef_ric_l, coef_ric_s, & do_myjsfc, do_myjpbl, & h2o_phys, pdfcld, shcnvcw, redrag, hybedmf, satmedmf, & - shinhong, do_ysu, dspheat, lheatstrg, cnvcld, & + shinhong, do_ysu, dspheat, hurr_pbl, lheatstrg, cnvcld, & random_clds, shal_cnv, imfshalcnv, imfdeepcnv, isatmedmf, & do_deep, jcap, & cs_parm, flgmin, cgwf, ccwf, cdmbgwd, sup, ctei_rm, crtrh, & @@ -3329,6 +3339,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%shinhong = shinhong Model%do_ysu = do_ysu Model%dspheat = dspheat + Model%hurr_pbl = hurr_pbl Model%lheatstrg = lheatstrg Model%cnvcld = cnvcld Model%random_clds = random_clds @@ -3367,6 +3378,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%bl_mynn_tkeadvect = bl_mynn_tkeadvect Model%grav_settling = grav_settling Model%icloud_bl = icloud_bl + Model%var_ric = var_ric + Model%coef_ric_l = coef_ric_l + Model%coef_ric_s = coef_ric_s Model%gwd_opt = gwd_opt Model%do_myjsfc = do_myjsfc @@ -4245,6 +4259,7 @@ subroutine control_print(Model) print *, ' shinhong : ', Model%shinhong print *, ' do_ysu : ', Model%do_ysu print *, ' dspheat : ', Model%dspheat + print *, ' hurr_pbl : ', Model%hurr_pbl print *, ' lheatstrg : ', Model%lheatstrg print *, ' cnvcld : ', Model%cnvcld print *, ' random_clds : ', Model%random_clds @@ -4270,6 +4285,9 @@ subroutine control_print(Model) print *, ' do_myjsfc : ', Model%do_myjsfc print *, ' do_myjpbl : ', Model%do_myjpbl print *, ' gwd_opt : ', Model%gwd_opt + print *, ' var_ric : ', Model%var_ric + print *, ' coef_ric_l : ', Model%coef_ric_l + print *, ' coef_ric_s : ', Model%coef_ric_s print *, ' ' print *, 'Rayleigh friction' print *, ' prslrd0 : ', Model%prslrd0 diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index b5e0502a8..070d5b237 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -2882,6 +2882,12 @@ units = flag dimensions = () type = logical +[hurr_pbl] + standard_name = flag_hurricane_PBL + long_name = flag for hurricane-specific options in PBL scheme + units = flag + dimensions = () + type = logical [lheatstrg] standard_name = flag_for_canopy_heat_storage long_name = flag for canopy heat storage parameterization @@ -3261,7 +3267,7 @@ kind = kind_phys [moninq_fac] standard_name = atmosphere_diffusivity_coefficient_factor - long_name = multiplicative constant for atmospheric diffusivities + long_name = multiplicative constant for atmospheric diffusivities (AKA alpha) units = none dimensions = () type = real @@ -3978,6 +3984,27 @@ units = flag dimensions = () type = integer +[var_ric] + standard_name = flag_variable_bulk_richardson_number + long_name = flag for calculating variable bulk richardson number for hurricane PBL + units = flag + dimensions = () + type = real + kind = kind_phys +[coef_ric_l] + standard_name = coefficient_for_variable_bulk_richardson_number_over_land + long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over land + units = none + dimensions = () + type = real + kind = kind_phys +[coef_ric_s] + standard_name = coefficient_for_variable_bulk_richardson_number_over_ocean + long_name = coefficient for calculating variable bulk richardson number for hurricane PBL over ocean + units = none + dimensions = () + type = real + kind = kind_phys [do_ugwp] standard_name = do_ugwp long_name = flag to activate CIRES UGWP From 8e38fc11110823bfb8788475ebe0725dd2279895 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 12 Dec 2019 11:28:58 -0700 Subject: [PATCH 02/26] apply non-default value of moninq_fac (0.7) in namelist for HWRF PBL --- ccpp/physics_namelists/input_GFS_v15_hurr.nml | 1 + 1 file changed, 1 insertion(+) diff --git a/ccpp/physics_namelists/input_GFS_v15_hurr.nml b/ccpp/physics_namelists/input_GFS_v15_hurr.nml index 5ddecdaff..0b639271b 100644 --- a/ccpp/physics_namelists/input_GFS_v15_hurr.nml +++ b/ccpp/physics_namelists/input_GFS_v15_hurr.nml @@ -30,6 +30,7 @@ hybedmf = .true. satmedmf = .false. hurr_pbl = .true. + moninq_fac = 0.7 do_myjsfc = .false. do_myjpbl = .false. shinhong = .false. From 75492b9668e256a1b2346dc59a69dbae715eb562 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 13 Dec 2019 13:59:51 -0700 Subject: [PATCH 03/26] change value of moninq_fac for HWRF_PBL namelist to -1.0 after consulting with Weiguo Wang --- ccpp/physics_namelists/input_GFS_v15_hurr.nml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/physics_namelists/input_GFS_v15_hurr.nml b/ccpp/physics_namelists/input_GFS_v15_hurr.nml index 0b639271b..9e22c01a9 100644 --- a/ccpp/physics_namelists/input_GFS_v15_hurr.nml +++ b/ccpp/physics_namelists/input_GFS_v15_hurr.nml @@ -30,7 +30,7 @@ hybedmf = .true. satmedmf = .false. hurr_pbl = .true. - moninq_fac = 0.7 + moninq_fac = -1.0 do_myjsfc = .false. do_myjpbl = .false. shinhong = .false. From 3d2c920acf610dae9f8c5ccfdb8d1d51c43356bd Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 24 Mar 2020 17:49:09 -0600 Subject: [PATCH 04/26] rename physics namelist that uses hurricane flag in hybrid EDMF scheme; add a multi_run configuration file for the using the hurricane PBL namelist for all supported cases --- ..._v15_hurr.nml => input_GFS_v15p2_hurr.nml} | 65 ++++++------------- scm/src/hurr_multi_run.py | 3 + 2 files changed, 24 insertions(+), 44 deletions(-) rename ccpp/physics_namelists/{input_GFS_v15_hurr.nml => input_GFS_v15p2_hurr.nml} (66%) create mode 100644 scm/src/hurr_multi_run.py diff --git a/ccpp/physics_namelists/input_GFS_v15_hurr.nml b/ccpp/physics_namelists/input_GFS_v15p2_hurr.nml similarity index 66% rename from ccpp/physics_namelists/input_GFS_v15_hurr.nml rename to ccpp/physics_namelists/input_GFS_v15p2_hurr.nml index 9e22c01a9..b23219056 100644 --- a/ccpp/physics_namelists/input_GFS_v15_hurr.nml +++ b/ccpp/physics_namelists/input_GFS_v15p2_hurr.nml @@ -1,11 +1,8 @@ &gfs_physics_nml fhzero = 6. + h2o_phys = .true. ldiag3d = .true. - ldiag_ugwp = .false. - do_ugwp = .false. - do_tofd = .false. fhcyc = 24. - nst_anl = .true. use_ufo = .true. pre_rad = .false. ncld = 5 @@ -15,7 +12,7 @@ fhlwr = 3600. ialb = 1 iems = 1 - IAER = 111 + iaer = 111 ico2 = 2 isubc_sw = 2 isubc_lw = 2 @@ -28,18 +25,10 @@ redrag = .true. dspheat = .true. hybedmf = .true. - satmedmf = .false. hurr_pbl = .true. moninq_fac = -1.0 - do_myjsfc = .false. - do_myjpbl = .false. - shinhong = .false. - do_ysu = .false. - lheatstrg = .false. - lgfdlmprad = .false. - effr_in = .false. random_clds = .false. - trans_trac = .false. + trans_trac = .true. cnvcld = .true. imfshalcnv = 2 imfdeepcnv = 2 @@ -47,27 +36,15 @@ prslrd0 = 0. ivegsrc = 1 isot = 1 - lsm = 1 - iopt_dveg = 2 - iopt_crs = 1 - iopt_btr = 1 - iopt_run = 1 - iopt_sfc = 1 - iopt_frz = 1 - iopt_inf = 1 - iopt_rad = 1 - iopt_alb = 2 - iopt_snf = 4 - iopt_tbot = 2 - iopt_stc = 1 debug = .false. oz_phys = .false. oz_phys_2015 = .true. - h2o_phys = .true. - nstf_name = 2,1,1,0,5 - xkzminv = 0.3 - xkzm_m = 1.0 - xkzm_h = 1.0 + nstf_name = 2,1,0,0,0 + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + effr_in = .true. do_sppt = .false. do_shum = .false. do_skeb = .false. @@ -124,16 +101,16 @@ / &cires_ugwp_nml - knob_ugwp_solver = 2 - knob_ugwp_source = 1,1,0,0 - knob_ugwp_wvspec = 1,25,25,25 - knob_ugwp_azdir = 2,4,4,4 - knob_ugwp_stoch = 0,0,0,0 - knob_ugwp_effac = 1,1,1,1 - knob_ugwp_doaxyz = 1 - knob_ugwp_doheat = 1 - knob_ugwp_dokdis = 1 - knob_ugwp_ndx4lh = 1 - knob_ugwp_version = 0 - launch_level = 25 + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 25 / diff --git a/scm/src/hurr_multi_run.py b/scm/src/hurr_multi_run.py new file mode 100644 index 000000000..4ac3fea87 --- /dev/null +++ b/scm/src/hurr_multi_run.py @@ -0,0 +1,3 @@ +cases = ["arm_sgp_summer_1997_A","astex","bomex","LASSO_2016051812","twpice"] +suites = ["SCM_GFS_v15p2"] +namelists = ["input_GFS_v15p2_hurr.nml"] \ No newline at end of file From 4e390e7c0bfe741a64fdfefdd2e1a8c4b0093fad Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 8 Apr 2020 09:25:11 -0600 Subject: [PATCH 05/26] add new PBL diagnostic for satmedmfvdifq --- scm/src/GFS_typedefs.F90 | 11 ++++++++++- scm/src/GFS_typedefs.meta | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 0cfb68906..8f8318f99 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -1416,7 +1416,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: TRAIN (:,:) => null() !< accumulated stratiform T tendency (K s-1) !--- MP quantities for 3D diagnositics - real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm + real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm + + !--- Extra PBL diagnostics + real (kind=kind_phys), pointer :: dkudiagnostic(:,:) => null() !< Eddy diffusitivity from the EDMF and EDMF-TKE ! !---vay-2018 UGWP-diagnostics daily mean ! @@ -4988,6 +4991,9 @@ subroutine diag_create (Diag, IM, Model) !--- 3D diagnostics for Thompson MP / GFDL MP allocate (Diag%refl_10cm(IM,Model%levs)) + !--- New PBL Diagnostics + allocate (Diag%dkudiagnostic(IM,Model%levs)) + !-- New max hourly diag. allocate (Diag%refdmax(IM)) allocate (Diag%refdmax263k(IM)) @@ -5278,6 +5284,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) endif !----------------------------- +! Extra PBL diagnostics + Diag%dkudiagnostic = zero + ! max hourly diagnostics Diag%refl_10cm = zero Diag%refdmax = -35. diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index be07e80b3..744627f6b 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -5647,6 +5647,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dkudiagnostic] + standard_name = atmosphere_momentum_diffusivity + long_name = diffusivity for momentum + units = m2 s-1 + dimensions = (horizontal_dimension,vertical_dimension_minus_one) + type = real + kind = kind_phys [ndust] standard_name = number_of_dust_bins_for_diagnostics long_name = number of dust bins for diagnostics From 2c0ff6219880d60ab7285b86fbe7a0aaf2e6115f Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 8 Apr 2020 13:08:05 -0600 Subject: [PATCH 06/26] add variables, SDFs, namelist, and data files for HWRF version of NOAH LSM --- ccpp/config/ccpp_prebuild_config.py | 3 + .../input_GFS_v16beta_hafs.nml | 139 ++++++++++ ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml | 83 ++++++ scm/data/physics_input_data/GENPARM.TBL | 36 +++ scm/data/physics_input_data/SOILPARM.TBL | 45 ++++ scm/data/physics_input_data/VEGPARM.TBL | 243 ++++++++++++++++++ scm/etc/case_config/fv3_model_point_noah.nml | 1 - .../case_config/fv3_model_point_noahmp.nml | 1 - scm/src/GFS_typedefs.F90 | 161 +++++++++++- scm/src/GFS_typedefs.meta | 240 ++++++++++++++++- scm/src/gmtb_scm_physical_constants.F90 | 1 + scm/src/gmtb_scm_physical_constants.meta | 7 + 12 files changed, 939 insertions(+), 21 deletions(-) create mode 100644 ccpp/physics_namelists/input_GFS_v16beta_hafs.nml create mode 100644 ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml create mode 100644 scm/data/physics_input_data/GENPARM.TBL create mode 100644 scm/data/physics_input_data/SOILPARM.TBL create mode 100644 scm/data/physics_input_data/VEGPARM.TBL diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 366706f3b..6216e016f 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -142,6 +142,7 @@ 'ccpp/physics/physics/namelist_soilveg_ruc.F90', 'ccpp/physics/physics/set_soilveg_ruc.F90', 'ccpp/physics/physics/module_soil_pre.F90', + 'ccpp/physics/physics/module_sf_noahlsm.F', # derived data type definitions 'scm/src/GFS_typedefs.F90', 'scm/src/gmtb_scm_kinds.F90', @@ -227,6 +228,8 @@ 'ccpp/physics/physics/sfc_cice.f' : ['physics'], 'ccpp/physics/physics/sfc_diff.f' : ['physics'], 'ccpp/physics/physics/sfc_drv.f' : ['physics'], + 'ccpp/physics/physics/sfc_noah_GFS_interstitial.F90' : ['physics'], + 'ccpp/physics/physics/sfc_noah.F90' : ['physics'], 'ccpp/physics/physics/sfc_noahmp_drv.f' : ['physics'], 'ccpp/physics/physics/sfc_nst.f' : ['physics'], 'ccpp/physics/physics/sfc_ocean.F' : ['physics'], diff --git a/ccpp/physics_namelists/input_GFS_v16beta_hafs.nml b/ccpp/physics_namelists/input_GFS_v16beta_hafs.nml new file mode 100644 index 000000000..a14fbc064 --- /dev/null +++ b/ccpp/physics_namelists/input_GFS_v16beta_hafs.nml @@ -0,0 +1,139 @@ +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .true. + fhcyc = 0 + use_ufo = .true. + pre_rad = .false. + ncld = 5 + imp_physics = 11 + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 1 + iems = 1 + iaer = 5111 + icliq_sw = 2 + iovr_lw = 3 + iovr_sw = 3 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .true. + isatmedmf = 1 + lheatstrg = .true. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + cdmbgwd = 4.0,0.15,1.0,1.0 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsoil = 4 + lsm = 4 + iopt_dveg = 1 + iopt_crs = 1 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_alb = 2 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 1 + debug = .false. + oz_phys = .false. + oz_phys_2015 = .true. + nstf_name = 2,1,0,0,0 + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + effr_in = .true. + ldiag_ugwp = .false. + do_ugwp = .false. + do_tofd = .true. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_sfcperts = .false. +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .false. + fast_sat_adj = .false. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 ! This is a key parameter for cloud water + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. + reiflag = 2 +/ + +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 27 +/ + diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml b/ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml new file mode 100644 index 000000000..a4a127864 --- /dev/null +++ b/ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml @@ -0,0 +1,83 @@ + + + + + + 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 + sfc_noah_GFS_pre + sfc_noah + sfc_noah_GFS_post + 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 + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + 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 + + + diff --git a/scm/data/physics_input_data/GENPARM.TBL b/scm/data/physics_input_data/GENPARM.TBL new file mode 100644 index 000000000..17fc9172b --- /dev/null +++ b/scm/data/physics_input_data/GENPARM.TBL @@ -0,0 +1,36 @@ +General Parameters +SLOPE_DATA +9 +0.1 +0.6 +1.0 +0.35 +0.55 +0.8 +0.63 +0.0 +0.0 +SBETA_DATA +-2.0 +FXEXP_DATA +2.0 +CSOIL_DATA +2.00E+6 +SALP_DATA +2.6 +REFDK_DATA +2.0E-6 +REFKDT_DATA +3.0 +FRZK_DATA +0.15 +ZBOT_DATA +-8.0 +CZIL_DATA +0.1 +SMLOW_DATA +0.5 +SMHIGH_DATA +3.0 +LVCOEF_DATA +0.5 diff --git a/scm/data/physics_input_data/SOILPARM.TBL b/scm/data/physics_input_data/SOILPARM.TBL new file mode 100644 index 000000000..518ba6f8b --- /dev/null +++ b/scm/data/physics_input_data/SOILPARM.TBL @@ -0,0 +1,45 @@ +Soil Parameters +STAS +19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 2.79, 0.010, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.010, 0.92, 'SAND' +2, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.82, 'LOAMY SAND' +3, 4.74, 0.047, -0.569, 0.434, 0.312, 0.141, 5.23E-6, 8.05E-6, 0.047, 0.60, 'SANDY LOAM' +4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 2.39E-5, 0.084, 0.25, 'SILT LOAM' +5, 3.86, 0.061, 0.162, 0.484, 0.347, 0.955, 2.18E-6, 1.66E-5, 0.061, 0.10, 'SILT' +6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.40, 'LOAM' +7, 6.77, 0.069, -1.491, 0.404, 0.315, 0.135, 4.45E-6, 1.01E-5, 0.069, 0.60, 'SANDY CLAY LOAM' +8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.03E-6, 2.35E-5, 0.120, 0.10, 'SILTY CLAY LOAM' +9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 1.13E-5, 0.103, 0.35, 'CLAY LOAM' +10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 1.87E-5, 0.100, 0.52, 'SANDY CLAY' +11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 9.64E-6, 0.126, 0.10, 'SILTY CLAY' +12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 1.12E-5, 0.138, 0.25, 'CLAY' +13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' +15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.07, 'BEDROCK' +16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.25, 'OTHER(land-ice)' +17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 1.12E-5, 0.030, 0.60, 'PLAYA' +18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.52, 'LAVA' +19, 2.79, 0.01, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.01, 0.92, 'WHITE SAND' +Soil Parameters +STAS-RUC +19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' +1, 4.05, 0.002, 1.47, 0.395, 0.174, 0.121, 1.76E-4, 0.608E-6, 0.033, 0.92, 'SAND' +2, 4.38, 0.035, 1.41, 0.410, 0.179, 0.090, 1.56E-4, 0.514E-5, 0.055, 0.82, 'LOAMY SAND' +3, 4.90, 0.041, 1.34, 0.435, 0.249, 0.218, 3.47E-5, 0.805E-5, 0.095, 0.60, 'SANDY LOAM' +4, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.25, 'SILT LOAM' +5, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.10, 'SILT' +6, 5.39, 0.050, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.137, 0.40, 'LOAM' +7, 7.12, 0.068, 1.18, 0.420, 0.299, 0.299, 6.30E-6, 0.990E-5, 0.148, 0.60, 'SANDY CLAY LOAM' +8, 7.75, 0.060, 1.32, 0.477, 0.357, 0.356, 1.70E-6, 0.237E-4, 0.208, 0.10, 'SILTY CLAY LOAM' +9, 8.52, 0.085, 1.23, 0.476, 0.391, 0.630, 2.45E-6, 0.113E-4, 0.230, 0.35, 'CLAY LOAM' +10, 10.40, 0.100, 1.18, 0.426, 0.316, 0.153, 2.17E-6, 0.187E-4, 0.210, 0.52, 'SANDY CLAY' +11, 10.40, 0.070, 1.15, 0.492, 0.409, 0.490, 1.03E-6, 0.964E-5, 0.250, 0.10, 'SILTY CLAY' +12, 11.40, 0.068, 1.09, 0.482, 0.400, 0.405, 1.28E-6, 0.112E-4, 0.268, 0.25, 'CLAY' +13, 5.39, 0.027, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.117, 0.05, 'ORGANIC MATERIAL' +14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' +15, 4.05, 0.004, 2.03, 0.200, 0.10 , 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' +16, 4.90, 0.065, 2.10, 0.435, 0.249, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' +17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' +18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' +19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' + diff --git a/scm/data/physics_input_data/VEGPARM.TBL b/scm/data/physics_input_data/VEGPARM.TBL new file mode 100644 index 000000000..5b7ab79a5 --- /dev/null +++ b/scm/data/physics_input_data/VEGPARM.TBL @@ -0,0 +1,243 @@ +Vegetation Parameters +USGS +27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' +1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 0.00, 0.00, 'Urban and Built-Up Land' +2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 0.50, 0.01, 'Dryland Cropland and Pasture' +3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 0.50, 0.01, 'Irrigated Cropland and Pasture' +4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 0.50, 0.01, 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 0.50, 0.01, 'Cropland/Grassland Mosaic' +6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 0.50, 0.01, 'Cropland/Woodland Mosaic' +7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.01, 'Grassland' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Shrubland' +9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 0.50, 0.10, 'Mixed Shrubland/Grassland' +10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 5.00, 0.10, 'Savanna' +11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 20.0, 11.5, 'Deciduous Broadleaf Forest' +12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 14.0, 7.0, 'Deciduous Needleleaf Forest' +13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 35.0, 1.0, 'Evergreen Broadleaf Forest' +14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 17.0, 8.5, 'Evergreen Needleleaf Forest' +15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.0, 10.0, 'Mixed Forest' +16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'Water Bodies' +17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 0.50, 0.01, 'Herbaceous Wetland' +18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 20.0, 11.5, 'Wooded Wetland' +19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren or Sparsely Vegetated' +20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 0.50, 0.01, 'Herbaceous Tundra' +21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 10.0, 0.10, 'Wooded Tundra' +22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 5.00, 0.10, 'Mixed Tundra' +23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 0.02, 0.01, 'Bare Ground Tundra' +24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Snow or Ice' +25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 0.00, 0.00, 'Playa' +26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 0.00, 0.00, 'Lava' +27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 0.00, 0.00, 'White Sand' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +CROP +3 +LOW_DENSITY_RESIDENTIAL +31 +HIGH_DENSITY_RESIDENTIAL +32 +HIGH_INTENSITY_INDUSTRIAL +33 +Vegetation Parameters +MODIFIED_IGBP_MODIS_NOAH +20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' +1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 17.0, 8.5, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 35.0, 1.0, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 14.0, 7.0, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 20.0, 11.5, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.0, 10.0, 'Mixed Forests' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Closed Shrublands' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 0.50, 0.10, 'Open Shrublands' +8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Woody Savannas' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 0.50, 0.10, 'Savannas' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.01, 'Grasslands' +11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 0.00, 0.00, 'Permanent wetlands' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 0.50, 0.01, 'Croplands' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 0.00, 0.00, 'Urban and Built-Up' +14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 0.50, 0.01, 'cropland/natural vegetation mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Snow and Ice' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren or Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'Water' +18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 10.0, 0.10, 'Wooded Tundra' +19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 5.00, 0.10, 'Mixed Tundra' +20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 0.02, 0.01, 'Barren Tundra' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +CROP +12 +LOW_DENSITY_RESIDENTIAL +31 +HIGH_DENSITY_RESIDENTIAL +32 +HIGH_INTENSITY_INDUSTRIAL +33 +Vegetation Parameters +NLCD40 +40,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' +1, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 17.00, 8.50, 'Evergreen Needleleaf Forest' +2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 35.00, 1.00, 'Evergreen Broadleaf Forest' +3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 14.00, 7.00, 'Deciduous Needleleaf Forest' +4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 20.00, 11.50, 'Deciduous Broadleaf Forest' +5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.00, 10.00, 'Mixed Forest' +6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Closed Shrubland' +7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 0.50, 0.10, 'Open Shrubland' +8, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.00, 0.00, 'Woody Savanna' +9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 0.50, 0.10, 'Savanna' +10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.10, 'Grassland' +11, .60, 2, 100., 30., 51.93, 0.02, 50., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 0.50, 0.10, 'Permanent Wetland' +12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.50, 5.68, .920, .985, .15, .23, .05, .15, 0.50, 0.10, 'Cropland' +13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 0.00, 0.00, 'Urban and Built-Up' +14, .80, 3, 40., 100., 36.25, 0.04, 66., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 0.50, 0.10, 'Cropland / Natural Veg. Mosaic' +15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Permanent Snow' +16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren / Sparsely Vegetated' +17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'IGBP Water' +18, .00, 0, 999., 999., 999.0, 999., 999., 999.0, 999.0, 999., 999.0, 999.0, 999.0, 999.0, 999.0, 0.00, 0.00, 'Unclassified' +19, .00, 0, 999., 999., 999.0, 999., 999., 999.0, 999.0, 999., 999.0, 999.0, 999.0, 999.0, 999.0, 0.00, 0.00, 'Fill Value' +20, .00, 0, 999., 999., 999.0, 999., 999., 999.0, 999.0, 999., 999.0, 999.0, 999.0, 999.0, 999.0, 0.00, 0.00, 'Unclassified' +21, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'Open Water' +22, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Perennial Ice/Snow' +23, .30, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, .50, .50, 0.00, 0.00, 'Developed Open Space' +24, .27, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, .70, .70, 0.00, 0.00, 'Developed Low Intensity' +25, .02, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, 1.5, 1.5, 0.00, 0.00, 'Developed Medium Intensity' +26, .11, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, 2.0, 2.0, 0.00, 0.00, 'Developed High Intensity' +27, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren Land' +28, .80, 4, 125., 30., 54.70, 0.08, 56., 1.00, 5.16, .930, .940, .14, .17, .50, .50, 20.00, 11.50, 'Deciduous Forest' +29, .95, 4, 140., 30., 44.00, 0.08, 42., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 17.00, 8.50, 'Evergreen Forest' +30, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.00, 10.00, 'Mixed Forest' +31, .70, 3, 170., 100., 39.18, 0.035, 65., 1.00, 4.00, .930, .950, .16, .30, .01, .04, 0.50, 0.10, 'Dwarf Scrub' +32, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .22, .30, .01, .05, 0.50, 0.10, 'Shrub/Scrub' +33, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.10, 'Grassland/Herbaceous' +34, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 0.50, 0.10, 'Sedge/Herbaceous' +35, .60, 2, 40., 100., 60.00, 0.01, 68., 1.00, 2.00, .950, .950, .31, .31, .01, .01, 0.00, 0.00, 'Lichens' +36, .60, 2, 40., 100., 60.00, 0.01, 68., 1.00, 2.00, .950, .950, .24, .24, .01, .01, 0.00, 0.00, 'Moss' +37, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 0.50, 0.10, 'Pasture/Hay' +38, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 0.50, 0.10, 'Cultivated Crops' +39, .60, 2, 100., 30., 51.93, 0.02, 50., 0.70, 3.50, .950, .950, .14, .14, .40, .40, 20.00, 11.50, 'Woody Wetland' +40, .60, 2, 40., 100., 60.00, 0.01, 68., 0.70, 3.50, .950, .950, .12, .12, .20, .20, 0.50, 0.10, 'Emergent Herbaceous Wetland' +TOPT_DATA +298.0 +CMCMAX_DATA +0.5E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +14 +CROP +12 +LOW_DENSITY_RESIDENTIAL +24 +HIGH_DENSITY_RESIDENTIAL +26 +HIGH_INTENSITY_INDUSTRIAL +99 +Vegetation Parameters +USGS-RUC +28,1, 'ALBEDO Z0 LEMI PC SHDFAC IFOR RS RGL HS SNUP LAI MAXALB' +1, .18, 1.0, .88, .40, .10, 9, 200., 999., 999.0, 0.04, 1.00, 40., 'Urban and Built-Up Land' +2, .17, .06, .92, .30, .80, 7, 40., 100., 36.25, 0.04, 5.68, 64., 'Dryland Cropland and Pasture' +3, .18, .075, .92, .40, .80, 7, 40., 100., 36.25, 0.04, 5.68, 64., 'Irrigated Cropland and Pasture' +4, .18, .125, .92, .40, .80, 7, 40., 100., 36.25, 0.04, 4.50, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' +5, .18, .15, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.29, 64., 'Cropland/Grassland Mosaic' +6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.00, 60., 'Cropland/Woodland Mosaic' +7, .19, .075 .92, .40, .80, 5, 40., 100., 36.35, 0.04, 2.90, 64., 'Grassland' +8, .22, .10, .88, .40, .70, 4, 300., 100., 42.00, 0.03, 3.66, 69., 'Shrubland' +9, .20, .11, .90, .40, .70, 4, 170., 100., 39.18, 0.035, 2.60, 67., 'Mixed Shrubland/Grassland' +10, .20, .15, .92, .40, .50, 5, 70., 65., 54.53, 0.04, 3.66, 45., 'Savanna' +11, .16, .70, .93, .55, .80, 3, 100., 30., 54.53, 0.08, 3.31, 58., 'Deciduous Broadleaf Forest' +12, .14, .70, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 5.16, 54., 'Deciduous Needleleaf Forest' +13, .12, .70, .95, .55, .95, 2, 150., 30., 41.69, 0.08, 6.48, 32., 'Evergreen Broadleaf Forest' +14, .12, .70, .95, .55, .70, 1, 125., 30., 47.35, 0.08, 6.40, 52., 'Evergreen Needleleaf Forest' +15, .13, .70, .94, .55, .80, 2, 125., 30., 51.93, 0.08, 5.50, 53., 'Mixed Forest' +16, .08, .0001, .98, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Water Bodies' +17, .14, .20, .95, .55, .60, 4, 40., 100., 60.00, 0.01, 5.65, 35., 'Herbaceous Wetland' +18, .14, .40, .95, .55, .60, 4, 100., 30., 51.93, 0.02, 5.80, 30., 'Wooded Wetland' +19, .25, .05, .85, .30, .01, 5, 999., 999., 999.0, 0.02, 0.75, 69., 'Barren or Sparsely Vegetated' +20, .15, .10, .92, .30, .60, 5, 150., 100., 42.00, 0.025, 3.35, 58., 'Herbaceous Tundra' +21, .15, .15, .93, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 55., 'Wooded Tundra' +22, .15, .10, .92, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 55., 'Mixed Tundra' +23, .25, .065, .85, .30, .30, 5, 200., 100., 42.00, 0.02, 3.35, 65., 'Bare Ground Tundra' +24, .55, .0024, .98, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 75., 'Snow or Ice' +25, .30, .01, .85, .30, .50, 9, 40., 100., 36.25, 0.02, 0.01, 69., 'Playa' +26, .16, .15, .85, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 69., 'Lava' +27, .60, .01, .90, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 69., 'White Sand' +28, .08, .0001, .98, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Lakes' +TOPT_DATA +298.0 +CMCMAX_DATA +0.2E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +19 +NATURAL +5 +CROP +3 +URBAN +1 +Vegetation Parameters +MODI-RUC +21,1, 'ALBEDO Z0 LEMI PC SHDFAC IFOR RS RGL HS SNUP LAI MAXALB' +1 .12, .70, .950, .55, .70, 1, 125., 30., 47.35, 0.08, 6.40, 52., 'Evergreen Needleleaf Forest' +2, .12, .70, .950, .55, .95, 2, 150., 30., 41.69, 0.08, 6.48, 35., 'Evergreen Broadleaf Forest' +3, .14, .70, .940, .55, .70, 4, 150., 30., 47.35, 0.08, 5.16, 54., 'Deciduous Needleleaf Forest' +4, .16, .70, .930, .55, .80, 3, 100., 30., 54.53, 0.08, 3.31, 58., 'Deciduous Broadleaf Forest' +5, .13, .70, .940, .55, .80, 2, 125., 30., 51.93, 0.08, 5.50, 53., 'Mixed Forests' +6, .22, .10, .930, .40, .70, 4, 300., 100., 42.00, 0.03, 3.66, 60., 'Closed Shrublands' +7, .20, .10, .880, .40, .70, 4, 170., 100., 39.18, 0.035, 2.60, 65., 'Open Shrublands' +8, .20, .15, .930, .40, .70, 5, 300., 100., 42.00, 0.03, 3.66, 60., 'Woody Savannas' +9, .20, .15, .920, .40, .50, 5, 70., 65., 54.53, 0.04, 3.66, 50., 'Savannas' +10, .19, .075, .920, .40, .80, 5, 40., 100., 36.35, 0.04, 2.90, 70., 'Grasslands' +11 .14, .30, .950, .40, .60, 4, 70., 65., 55.97 0.015 5.72, 59., 'Permanent wetlands' +12, .18, .20, .935, .40, .80, 7, 40., 100., 36.25, 0.04, 5.68, 66., 'Croplands' +13, .18, 1.0, .880, .40, .10, 9, 200., 999., 999.0, 0.04, 1.00, 46., 'Urban and Built-Up' +14 .16, .20, .920, .40, .80, 7, 40., 100., 36.25, 0.04, 4.29, 68., 'cropland/natural vegetation mosaic' +15, .55, .011, .980, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 82., 'Snow and Ice' +16, .25, .065, .850, .30, .01, 5, 999., 999., 999.0, 0.02, 0.75, 75., 'Barren or Sparsely Vegetated' +17, .08, .0001, .980, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Water' +18, .15, .15, .930, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 55., 'Wooded Tundra' +19, .15, .10, .920, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 60., 'Mixed Tundra' +20, .15, .06, .900, .30, .30, 5, 200., 100., 42.00, 0.02, 3.35, 75., 'Barren Tundra' +21, .08, .0001, .980, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Lakes' +TOPT_DATA +298.0 +CMCMAX_DATA +0.2E-3 +CFACTR_DATA +0.5 +RSMAX_DATA +5000.0 +BARE +16 +NATURAL +10 +CROP +12 +URBAN +13 diff --git a/scm/etc/case_config/fv3_model_point_noah.nml b/scm/etc/case_config/fv3_model_point_noah.nml index 47f916a37..77bdf1cbb 100644 --- a/scm/etc/case_config/fv3_model_point_noah.nml +++ b/scm/etc/case_config/fv3_model_point_noah.nml @@ -22,6 +22,5 @@ year = 2016, month = 10, day = 3, hour = 0, -output_dir = 'output_fv3_model_point_noah' $end diff --git a/scm/etc/case_config/fv3_model_point_noahmp.nml b/scm/etc/case_config/fv3_model_point_noahmp.nml index 6aab81340..4ca6d61d2 100644 --- a/scm/etc/case_config/fv3_model_point_noahmp.nml +++ b/scm/etc/case_config/fv3_model_point_noahmp.nml @@ -22,6 +22,5 @@ year = 2016, month = 10, day = 3, hour = 0, -output_dir = 'output_fv3_model_point_noahmp' $end diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 8f8318f99..36aa2e9e3 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -220,6 +220,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: fice (:) => null() !< ice fraction over open water grid ! real (kind=kind_phys), pointer :: hprim (:) => null() !< topographic standard deviation in m real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics + real (kind=kind_phys), pointer :: z0base (:) => null() !< background or baseline surface roughness length in m + real (kind=kind_phys), pointer :: semisbase(:)=> null() !< background surface emissivity !--- In (radiation only) real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction @@ -259,6 +261,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: slc (:,:) => null() !< liquid soil moisture real (kind=kind_phys), pointer :: smc (:,:) => null() !< total soil moisture real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature + real (kind=kind_phys), pointer :: sthick (:) => null() !< soil layer thickness (m) !--- Out real (kind=kind_phys), pointer :: t2m (:) => null() !< 2 meter temperature @@ -694,16 +697,29 @@ module GFS_typedefs integer :: lsm_noah=1 !< flag for NOAH land surface model integer :: lsm_noahmp=2 !< flag for NOAH land surface model integer :: lsm_ruc=3 !< flag for RUC land surface model + integer :: lsm_noah_hafs = 4 !< flag for NOAH land surface model for HAFS application integer :: lsoil !< number of soil layers integer :: lsoil_lsm !< number of soil layers internal to land surface model integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm - logical :: rdlai + logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) + logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM HAFS + logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS + real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM HAFS + integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) + !< ivegsrc = 3 => NLCD40 (40 category, NOAH/HAFS only) + !< ivegsrc = 4 => USGS-RUC (28 category, NOAH/HAFS only) + !< ivegsrc = 5 => MODI-RUC (21 category, NOAH/HAFS only) integer :: isot !< isot = 0 => Zobler soil type ( 9 category) - !< isot = 1 => STATSGO soil type (19 category) + !< isot = 1 => STATSGO soil type (19 category, AKA 'STAS'(?)) + !< isot = 2 => STAS-RUC soil type (19 category, NOAH/HAFS only) + integer :: isurban !< vegetation/land use type corresponding to the urban environment for the chosen ivegsrc + integer :: iopt_thcnd !< option to treat thermal conductivity in Noah LSM (new in 3.8) + !< = 1, original (default) + !< = 2, McCumber and Pielke for silt loam and sandy loam ! -- the Noah MP options integer :: iopt_dveg ! 1-> off table lai 2-> on 3-> off;4->off;5 -> on @@ -1166,7 +1182,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: phy_myj_qz0(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_uz0(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_vz0(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_z0base(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_akhs(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_akms(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_chkqlm(:) => null() ! @@ -1541,6 +1556,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: aerodp(:,:) => null() !< real (kind=kind_phys), pointer :: alb1d(:) => null() !< real (kind=kind_phys), pointer :: bexp1d(:) => null() !< + real (kind=kind_phys), pointer :: canopy_save(:) => null() !< real (kind=kind_phys), pointer :: cd(:) => null() !< real (kind=kind_phys), pointer :: cd_ice(:) => null() !< real (kind=kind_phys), pointer :: cd_land(:) => null() !< @@ -1553,6 +1569,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: chh_ice(:) => null() !< real (kind=kind_phys), pointer :: chh_land(:) => null() !< real (kind=kind_phys), pointer :: chh_ocean(:) => null() !< + real (kind=kind_phys), pointer :: chk_land(:) => null() !< real (kind=kind_phys), pointer :: clcn(:,:) => null() !< real (kind=kind_phys), pointer :: cldf(:) => null() !< real (kind=kind_phys), pointer :: cldsa(:,:) => null() !< @@ -1563,6 +1580,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< real (kind=kind_phys), pointer :: clw_surf(:) => null() !< real (kind=kind_phys), pointer :: clx(:,:) => null() !< + real (kind=kind_phys), pointer :: cmc(:) => null() !< real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< real (kind=kind_phys), pointer :: cmm_land(:) => null() !< real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< @@ -1585,8 +1603,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dkt(:,:) => null() !< real (kind=kind_phys), pointer :: dlength(:) => null() !< real (kind=kind_phys), pointer :: dqdt(:,:,:) => null() !< + real (kind=kind_phys), pointer :: dqsdt2(:) => null() !< real (kind=kind_phys), pointer :: dqsfc1(:) => null() !< real (kind=kind_phys), pointer :: drain(:) => null() !< + real (kind=kind_phys), pointer :: drain_in_m_sm1(:) => null() !< real (kind=kind_phys), pointer :: dtdt(:,:) => null() !< real (kind=kind_phys), pointer :: dtdtc(:,:) => null() !< real (kind=kind_phys), pointer :: dtsfc1(:) => null() !< @@ -1623,6 +1643,7 @@ module GFS_typedefs logical, pointer :: flag_cice(:) => null() !< logical, pointer :: flag_guess(:) => null() !< logical, pointer :: flag_iter(:) => null() !< + logical, pointer :: flag_lsm(:) => null() !< real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< real (kind=kind_phys), pointer :: ffmm_ocean(:) => null() !< @@ -1726,6 +1747,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qss_ice(:) => null() !< real (kind=kind_phys), pointer :: qss_land(:) => null() !< real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< + real (kind=kind_phys), pointer :: qs1(:) => null() !< + real (kind=kind_phys), pointer :: qv1(:) => null() !< logical :: radar_reset !< real (kind=kind_phys) :: raddt !< real (kind=kind_phys), pointer :: rainmp(:) => null() !< @@ -1739,7 +1762,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: rb_ocean(:) => null() !< logical :: reset !< real (kind=kind_phys), pointer :: rhc(:,:) => null() !< + real (kind=kind_phys), pointer :: rho1(:) => null() !< real (kind=kind_phys), pointer :: runoff(:) => null() !< + real (kind=kind_phys), pointer :: runoff_in_m_sm1(:) => null() !< real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< real (kind=kind_phys), pointer :: save_t(:,:) => null() !< real (kind=kind_phys), pointer :: save_u(:,:) => null() !< @@ -1755,27 +1780,39 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sigmafrac(:,:) => null() !< real (kind=kind_phys), pointer :: sigmatot(:,:) => null() !< logical :: skip_macro !< + real (kind=kind_phys), pointer :: slc_save(:,:) => null() !< integer, pointer :: slopetype(:) => null() !< + real (kind=kind_phys), pointer :: smcmax(:) => null() !< + real (kind=kind_phys), pointer :: smc_save(:,:) => null() !< real (kind=kind_phys), pointer :: snowc(:) => null() !< real (kind=kind_phys), pointer :: snowd_ice(:) => null() !< real (kind=kind_phys), pointer :: snowd_land(:) => null() !< + real (kind=kind_phys), pointer :: snowd_land_save(:) => null() !< real (kind=kind_phys), pointer :: snowd_ocean(:) => null() !< + real (kind=kind_phys), pointer :: snow_depth(:) => null() !< real (kind=kind_phys), pointer :: snohf(:) => null() !< + real (kind=kind_phys), pointer :: snohf_snow(:) => null() !< + real (kind=kind_phys), pointer :: snohf_frzgra(:) => null() !< + real (kind=kind_phys), pointer :: snohf_snowmelt(:) => null() !< real (kind=kind_phys), pointer :: snowmp(:) => null() !< real (kind=kind_phys), pointer :: snowmt(:) => null() !< + real (kind=kind_phys), pointer :: soilm_in_m(:) => null() !< integer, pointer :: soiltype(:) => null() !< + real (kind=kind_phys), pointer :: stc_save(:,:) => null() !< real (kind=kind_phys), pointer :: stress(:) => null() !< real (kind=kind_phys), pointer :: stress_ice(:) => null() !< real (kind=kind_phys), pointer :: stress_land(:) => null() !< real (kind=kind_phys), pointer :: stress_ocean(:) => null() !< real (kind=kind_phys), pointer :: t2mmp(:) => null() !< real (kind=kind_phys), pointer :: theta(:) => null() !< + real (kind=kind_phys), pointer :: th1(:) => null() !< real (kind=kind_phys), pointer :: tice(:) => null() !< real (kind=kind_phys), pointer :: tlvl(:,:) => null() !< real (kind=kind_phys), pointer :: tlyr(:,:) => null() !< real (kind=kind_phys), pointer :: tprcp_ice(:) => null() !< real (kind=kind_phys), pointer :: tprcp_land(:) => null() !< real (kind=kind_phys), pointer :: tprcp_ocean(:) => null() !< + real (kind=kind_phys), pointer :: tprcp_rate_land(:) => null() !< integer :: tracers_start_index !< integer :: tracers_total !< integer :: tracers_water !< @@ -1785,6 +1822,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfa(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !< real (kind=kind_phys), pointer :: tsfc_land(:) => null() !< + real (kind=kind_phys), pointer :: tsfc_land_save(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< real (kind=kind_phys), pointer :: tsfg(:) => null() !< real (kind=kind_phys), pointer :: tsnow(:) => null() !< @@ -1808,6 +1846,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: wcbmax(:) => null() !< real (kind=kind_phys), pointer :: weasd_ocean(:) => null() !< real (kind=kind_phys), pointer :: weasd_land(:) => null() !< + real (kind=kind_phys), pointer :: weasd_land_save(:) => null() !< real (kind=kind_phys), pointer :: weasd_ice(:) => null() !< real (kind=kind_phys), pointer :: wind(:) => null() !< real (kind=kind_phys), pointer :: work1(:) => null() !< @@ -2064,6 +2103,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%slc (IM,Model%lsoil)) allocate (Sfcprop%smc (IM,Model%lsoil)) allocate (Sfcprop%stc (IM,Model%lsoil)) + allocate (Sfcprop%sthick (Model%lsoil)) Sfcprop%hice = clear_val Sfcprop%weasd = clear_val @@ -2077,6 +2117,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%slc = clear_val Sfcprop%smc = clear_val Sfcprop%stc = clear_val + Sfcprop%sthick = clear_val !--- Out allocate (Sfcprop%t2m (IM)) @@ -2226,7 +2267,16 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%dgraupelprv = clear_val endif - + + if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_hafs)) then + allocate(Sfcprop%z0base(IM)) + Sfcprop%z0base = clear_val + end if + if (Model%lsm == Model%lsm_noah_hafs) then + allocate(Sfcprop%semisbase(IM)) + Sfcprop%semisbase = clear_val + end if + if (Model%lsm == Model%lsm_ruc) then ! For land surface models with different numbers of levels than the four NOAH levels allocate (Sfcprop%wetness (IM)) @@ -2731,12 +2781,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model - logical :: rdlai = .false. + logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) + logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM HAFS + logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS + real(kind=kind_phys) :: aoasis = 1.0 !< potential evaporation multiplication factor for NOAH LSM HAFS + integer :: fasdas = 0 !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) integer :: isot = 0 !< isot = 0 => Zobler soil type ( 9 category) !< isot = 1 => STATSGO soil type (19 category) + integer :: iopt_thcnd = 1 !< option to treat thermal conductivity in Noah LSM (new in 3.8) + !< = 1, original (default) + !< = 2, McCumber and Pielke for silt loam and sandy loam ! -- to use Noah MP, lsm needs to be set to 2 and both ivegsrc and isot are set ! to 1 - MODIS IGBP and STATSGO - the defaults are the same as in the ! scripts;change from namelist @@ -3016,7 +3073,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & avg_max_length, & !--- land/surface model control lsm, lsoil, lsoil_lsm, lsnow_lsm, rdlai, & - nmtvr, ivegsrc, use_ufo, & + nmtvr, ivegsrc, use_ufo, iopt_thcnd, ua_phys, usemonalb, & + aoasis, fasdas, & ! 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, & @@ -3288,7 +3346,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lsm = lsm Model%lsoil = lsoil ! Consistency check for RUC LSM - if (Model%lsm == Model%lsm_ruc .and. Model%nscyc>0) then + if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_hafs) .and. Model%nscyc>0) then write(0,*) 'Logic error: RUC LSM cannot be used with surface data cycling at this point (fhcyc>0)' stop end if @@ -3314,6 +3372,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & end if Model%ivegsrc = ivegsrc Model%isot = isot + Model%isurban = -999 !GJF isurban is only used in NOAH/HAFS and is initialized in sfc_drv_hafs.F90/lsm_noah_hafs_init + Model%iopt_thcnd = iopt_thcnd + Model%ua_phys = ua_phys + Model%usemonalb = usemonalb + Model%aoasis = aoasis + Model%fasdas = fasdas Model%use_ufo = use_ufo ! Noah MP options from namelist @@ -3772,6 +3836,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print *,'iopt_stc = ', Model%iopt_stc elseif (Model%lsm == Model%lsm_ruc) then print *,' RUC Land Surface Model used' + elseif (Model%lsm == Model%lsm_noah_hafs) then + print *,' NOAH/HAFS Land Surface Model used' else print *,' Unsupported LSM type - job aborted - lsm=',Model%lsm stop @@ -4260,6 +4326,12 @@ subroutine control_print(Model) print *, ' lsnow_lsm : ', Model%lsnow_lsm print *, ' ivegsrc : ', Model%ivegsrc print *, ' isot : ', Model%isot + print *, ' iopt_thcnd : ', Model%iopt_thcnd + print *, ' ua_phys : ', Model%ua_phys + print *, ' usemonalb : ', Model%usemonalb + print *, ' aoasis : ', Model%aoasis + print *, ' fasdas : ', Model%fasdas + if (Model%lsm == Model%lsm_noahmp) then print *, ' Noah MP LSM is used, the options are' @@ -4682,8 +4754,7 @@ subroutine tbd_create (Tbd, IM, Model) allocate (Tbd%phy_myj_thz0 (IM)) allocate (Tbd%phy_myj_qz0 (IM)) allocate (Tbd%phy_myj_uz0 (IM)) - allocate (Tbd%phy_myj_vz0 (IM)) - allocate (Tbd%phy_myj_z0base (IM)) + allocate (Tbd%phy_myj_vz0 (IM)) allocate (Tbd%phy_myj_akhs (IM)) allocate (Tbd%phy_myj_akms (IM)) allocate (Tbd%phy_myj_chkqlm (IM)) @@ -4696,8 +4767,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%phy_myj_thz0 = clear_val Tbd%phy_myj_qz0 = clear_val Tbd%phy_myj_uz0 = clear_val - Tbd%phy_myj_vz0 = clear_val - Tbd%phy_myj_z0base = clear_val + Tbd%phy_myj_vz0 = clear_val Tbd%phy_myj_akhs = clear_val Tbd%phy_myj_akms = clear_val Tbd%phy_myj_chkqlm = clear_val @@ -5433,6 +5503,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%aerodp (IM,NSPC1)) allocate (Interstitial%alb1d (IM)) allocate (Interstitial%bexp1d (IM)) + allocate (Interstitial%canopy_save (IM)) allocate (Interstitial%cd (IM)) allocate (Interstitial%cd_ice (IM)) allocate (Interstitial%cd_land (IM)) @@ -5444,6 +5515,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%chh_ice (IM)) allocate (Interstitial%chh_land (IM)) allocate (Interstitial%chh_ocean (IM)) + allocate (Interstitial%chk_land (IM)) allocate (Interstitial%cldf (IM)) allocate (Interstitial%cldsa (IM,5)) allocate (Interstitial%cldtaulw (IM,Model%levr+LTP)) @@ -5452,6 +5524,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%clouds (IM,Model%levr+LTP,NF_CLDS)) allocate (Interstitial%clw (IM,Model%levs,Interstitial%nn)) allocate (Interstitial%clx (IM,4)) + allocate (Interstitial%cmc (IM)) allocate (Interstitial%cmm_ice (IM)) allocate (Interstitial%cmm_land (IM)) allocate (Interstitial%cmm_ocean (IM)) @@ -5468,8 +5541,10 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%dkt (IM,Model%levs-1)) allocate (Interstitial%dlength (IM)) allocate (Interstitial%dqdt (IM,Model%levs,Model%ntrac)) + allocate (Interstitial%dqsdt2 (IM)) allocate (Interstitial%dqsfc1 (IM)) allocate (Interstitial%drain (IM)) + allocate (Interstitial%drain_in_m_sm1 (IM)) allocate (Interstitial%dtdt (IM,Model%levs)) allocate (Interstitial%dtdtc (IM,Model%levs)) allocate (Interstitial%dtsfc1 (IM)) @@ -5506,6 +5581,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%flag_cice (IM)) allocate (Interstitial%flag_guess (IM)) allocate (Interstitial%flag_iter (IM)) + allocate (Interstitial%flag_lsm (IM)) allocate (Interstitial%ffmm_ice (IM)) allocate (Interstitial%ffmm_land (IM)) allocate (Interstitial%ffmm_ocean (IM)) @@ -5563,6 +5639,8 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%qss_ice (IM)) allocate (Interstitial%qss_land (IM)) allocate (Interstitial%qss_ocean (IM)) + allocate (Interstitial%qs1 (IM)) + allocate (Interstitial%qv1 (IM)) allocate (Interstitial%raincd (IM)) allocate (Interstitial%raincs (IM)) allocate (Interstitial%rainmcadj (IM)) @@ -5572,7 +5650,9 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%rb_land (IM)) allocate (Interstitial%rb_ocean (IM)) allocate (Interstitial%rhc (IM,Model%levs)) + allocate (Interstitial%rho1 (IM)) allocate (Interstitial%runoff (IM)) + allocate (Interstitial%runoff_in_m_sm1 (IM)) allocate (Interstitial%save_q (IM,Model%levs,Model%ntrac)) allocate (Interstitial%save_t (IM,Model%levs)) allocate (Interstitial%save_u (IM,Model%levs)) @@ -5587,30 +5667,43 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%sigmaf (IM)) allocate (Interstitial%sigmafrac (IM,Model%levs)) allocate (Interstitial%sigmatot (IM,Model%levs)) + allocate (Interstitial%slc_save (IM,Model%lsoil)) allocate (Interstitial%slopetype (IM)) + allocate (Interstitial%smcmax (IM)) + allocate (Interstitial%smc_save (IM,Model%lsoil)) allocate (Interstitial%snowc (IM)) allocate (Interstitial%snowd_ice (IM)) allocate (Interstitial%snowd_land (IM)) + allocate (Interstitial%snowd_land_save (IM)) allocate (Interstitial%snowd_ocean (IM)) + allocate (Interstitial%snow_depth (IM)) allocate (Interstitial%snohf (IM)) + allocate (Interstitial%snohf_snow (IM)) + allocate (Interstitial%snohf_frzgra (IM)) + allocate (Interstitial%snohf_snowmelt (IM)) allocate (Interstitial%snowmt (IM)) + allocate (Interstitial%soilm_in_m (IM)) allocate (Interstitial%soiltype (IM)) + allocate (Interstitial%stc_save (IM,Model%lsoil)) allocate (Interstitial%stress (IM)) allocate (Interstitial%stress_ice (IM)) allocate (Interstitial%stress_land (IM)) allocate (Interstitial%stress_ocean (IM)) allocate (Interstitial%theta (IM)) + allocate (Interstitial%th1 (IM)) allocate (Interstitial%tice (IM)) allocate (Interstitial%tlvl (IM,Model%levr+1+LTP)) allocate (Interstitial%tlyr (IM,Model%levr+LTP)) allocate (Interstitial%tprcp_ice (IM)) allocate (Interstitial%tprcp_land (IM)) allocate (Interstitial%tprcp_ocean (IM)) + allocate (Interstitial%tprcp_rate_land (IM)) allocate (Interstitial%trans (IM)) allocate (Interstitial%tseal (IM)) allocate (Interstitial%tsfa (IM)) allocate (Interstitial%tsfc_ice (IM)) allocate (Interstitial%tsfc_land (IM)) + allocate (Interstitial%tsfc_land_save (IM)) allocate (Interstitial%tsfc_ocean (IM)) allocate (Interstitial%tsfg (IM)) allocate (Interstitial%tsurf (IM)) @@ -5632,6 +5725,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%wcbmax (IM)) allocate (Interstitial%weasd_ice (IM)) allocate (Interstitial%weasd_land (IM)) + allocate (Interstitial%weasd_land_save (IM)) allocate (Interstitial%weasd_ocean (IM)) allocate (Interstitial%wind (IM)) allocate (Interstitial%work1 (IM)) @@ -5982,6 +6076,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%adjvisdfu = clear_val Interstitial%adjvisdfd = clear_val Interstitial%bexp1d = clear_val + Interstitial%canopy_save = clear_val Interstitial%cd = clear_val Interstitial%cd_ice = huge Interstitial%cd_land = huge @@ -5993,11 +6088,13 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%chh_ice = huge Interstitial%chh_land = huge Interstitial%chh_ocean = huge + Interstitial%chk_land = huge Interstitial%cld1d = clear_val Interstitial%cldf = clear_val Interstitial%clw = clear_val Interstitial%clw(:,:,2) = -999.9 Interstitial%clx = clear_val + Interstitial%cmc = clear_val Interstitial%cmm_ice = huge Interstitial%cmm_land = huge Interstitial%cmm_ocean = huge @@ -6012,8 +6109,10 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%dkt = clear_val Interstitial%dlength = clear_val Interstitial%dqdt = clear_val + Interstitial%dqsdt2 = clear_val Interstitial%dqsfc1 = clear_val Interstitial%drain = clear_val + Interstitial%drain_in_m_sm1 = clear_val Interstitial%dt_mf = clear_val Interstitial%dtdt = clear_val Interstitial%dtdtc = clear_val @@ -6047,6 +6146,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%flag_cice = .false. Interstitial%flag_guess = .false. Interstitial%flag_iter = .true. + Interstitial%flag_lsm = .false. Interstitial%ffmm_ice = huge Interstitial%ffmm_land = huge Interstitial%ffmm_ocean = huge @@ -6094,6 +6194,8 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%qss_ice = huge Interstitial%qss_land = huge Interstitial%qss_ocean = huge + Interstitial%qs1 = huge + Interstitial%qv1 = huge Interstitial%raincd = clear_val Interstitial%raincs = clear_val Interstitial%rainmcadj = clear_val @@ -6103,7 +6205,9 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%rb_land = huge Interstitial%rb_ocean = huge Interstitial%rhc = clear_val + Interstitial%rho1 = clear_val Interstitial%runoff = clear_val + Interstitial%runoff_in_m_sm1 = clear_val Interstitial%save_q = clear_val Interstitial%save_t = clear_val Interstitial%save_u = clear_val @@ -6116,27 +6220,40 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%sigmaf = clear_val Interstitial%sigmafrac = clear_val Interstitial%sigmatot = clear_val + Interstitial%slc_save = clear_val Interstitial%slopetype = 0 + Interstitial%smcmax = clear_val + Interstitial%smc_save = clear_val Interstitial%snowc = clear_val Interstitial%snowd_ice = huge Interstitial%snowd_land = huge + Interstitial%snowd_land_save = huge Interstitial%snowd_ocean = huge + Interstitial%snow_depth = clear_val Interstitial%snohf = clear_val + Interstitial%snohf_snow = clear_val + Interstitial%snohf_frzgra = clear_val + Interstitial%snohf_snowmelt = clear_val Interstitial%snowmt = clear_val + Interstitial%soilm_in_m = clear_val Interstitial%soiltype = 0 + Interstitial%stc_save = clear_val Interstitial%stress = clear_val Interstitial%stress_ice = huge Interstitial%stress_land = huge Interstitial%stress_ocean = huge Interstitial%theta = clear_val + Interstitial%th1 = clear_val Interstitial%tice = clear_val Interstitial%tprcp_ice = huge Interstitial%tprcp_land = huge Interstitial%tprcp_ocean = huge + Interstitial%tprcp_rate_land = huge Interstitial%trans = clear_val Interstitial%tseal = clear_val Interstitial%tsfc_ice = huge Interstitial%tsfc_land = huge + Interstitial%tsfc_land_save = huge Interstitial%tsfc_ocean = huge Interstitial%tsurf = clear_val Interstitial%tsurf_ice = huge @@ -6157,6 +6274,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%wcbmax = clear_val Interstitial%weasd_ice = huge Interstitial%weasd_land = huge + Interstitial%weasd_land_save = huge Interstitial%weasd_ocean = huge Interstitial%wind = huge Interstitial%work1 = clear_val @@ -6292,6 +6410,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%aerodp ) = ', sum(Interstitial%aerodp ) write (0,*) 'sum(Interstitial%alb1d ) = ', sum(Interstitial%alb1d ) write (0,*) 'sum(Interstitial%bexp1d ) = ', sum(Interstitial%bexp1d ) + write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) write (0,*) 'sum(Interstitial%cd_land ) = ', sum(Interstitial%cd_land ) @@ -6303,6 +6422,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%chh_ice ) = ', sum(Interstitial%chh_ice ) write (0,*) 'sum(Interstitial%chh_land ) = ', sum(Interstitial%chh_land ) write (0,*) 'sum(Interstitial%chh_ocean ) = ', sum(Interstitial%chh_ocean ) + write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) write (0,*) 'sum(Interstitial%cldf ) = ', sum(Interstitial%cldf ) write (0,*) 'sum(Interstitial%cldsa ) = ', sum(Interstitial%cldsa ) write (0,*) 'sum(Interstitial%cldtaulw ) = ', sum(Interstitial%cldtaulw ) @@ -6311,6 +6431,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%clw ) = ', sum(Interstitial%clw ) write (0,*) 'sum(Interstitial%clx ) = ', sum(Interstitial%clx ) write (0,*) 'sum(Interstitial%clouds ) = ', sum(Interstitial%clouds ) + write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) write (0,*) 'sum(Interstitial%cmm_ice ) = ', sum(Interstitial%cmm_ice ) write (0,*) 'sum(Interstitial%cmm_land ) = ', sum(Interstitial%cmm_land ) write (0,*) 'sum(Interstitial%cmm_ocean ) = ', sum(Interstitial%cmm_ocean ) @@ -6327,8 +6448,10 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%dkt ) = ', sum(Interstitial%dkt ) write (0,*) 'sum(Interstitial%dlength ) = ', sum(Interstitial%dlength ) write (0,*) 'sum(Interstitial%dqdt ) = ', sum(Interstitial%dqdt ) + write (0,*) 'sum(Interstitial%dqsdt2 ) = ', sum(Interstitial%dqsdt2 ) write (0,*) 'sum(Interstitial%dqsfc1 ) = ', sum(Interstitial%dqsfc1 ) write (0,*) 'sum(Interstitial%drain ) = ', sum(Interstitial%drain ) + write (0,*) 'sum(Interstitial%drain_in_m_sm1 ) = ', sum(Interstitial%drain_in_m_sm1 ) write (0,*) 'sum(Interstitial%dtdt ) = ', sum(Interstitial%dtdt ) write (0,*) 'sum(Interstitial%dtdtc ) = ', sum(Interstitial%dtdtc ) write (0,*) 'sum(Interstitial%dtsfc1 ) = ', sum(Interstitial%dtsfc1 ) @@ -6365,6 +6488,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'Interstitial%flag_cice(1) = ', Interstitial%flag_cice(1) write (0,*) 'Interstitial%flag_guess(1) = ', Interstitial%flag_guess(1) write (0,*) 'Interstitial%flag_iter(1) = ', Interstitial%flag_iter(1) + write (0,*) 'Interstitial%flag_lsm(1) = ', Interstitial%flag_lsm(1) write (0,*) 'sum(Interstitial%ffmm_ice ) = ', sum(Interstitial%ffmm_ice ) write (0,*) 'sum(Interstitial%ffmm_land ) = ', sum(Interstitial%ffmm_land ) write (0,*) 'sum(Interstitial%ffmm_ocean ) = ', sum(Interstitial%ffmm_ocean ) @@ -6425,6 +6549,8 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) + write (0,*) 'sum(Interstitial%qs1 ) = ', sum(Interstitial%qs1 ) + write (0,*) 'sum(Interstitial%qv1 ) = ', sum(Interstitial%qv1 ) write (0,*) 'Interstitial%radar_reset = ', Interstitial%radar_reset write (0,*) 'Interstitial%raddt = ', Interstitial%raddt write (0,*) 'sum(Interstitial%raincd ) = ', sum(Interstitial%raincd ) @@ -6437,7 +6563,9 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%rb_ocean ) = ', sum(Interstitial%rb_ocean ) write (0,*) 'Interstitial%reset = ', Interstitial%reset write (0,*) 'sum(Interstitial%rhc ) = ', sum(Interstitial%rhc ) + write (0,*) 'sum(Interstitial%rho1 ) = ', sum(Interstitial%rho1 ) write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) + write (0,*) 'sum(Interstitial%runoff_in_m_sm1 ) = ', sum(Interstitial%runoff_in_m_sm1 ) write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) @@ -6458,29 +6586,39 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%sigmafrac ) = ', sum(Interstitial%sigmafrac ) write (0,*) 'sum(Interstitial%sigmatot ) = ', sum(Interstitial%sigmatot ) write (0,*) 'sum(Interstitial%slopetype ) = ', sum(Interstitial%slopetype ) + write (0,*) 'sum(Interstitial%smcmax ) = ', sum(Interstitial%smcmax ) write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) + write (0,*) 'sum(Interstitial%snowd_land_save ) = ', sum(Interstitial%snowd_land_save ) write (0,*) 'sum(Interstitial%snowd_ocean ) = ', sum(Interstitial%snowd_ocean ) + write (0,*) 'sum(Interstitial%snow_depth ) = ', sum(Interstitial%snow_depth ) write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) + write (0,*) 'sum(Interstitial%snohf_snow ) = ', sum(Interstitial%snohf_snow ) + write (0,*) 'sum(Interstitial%snohf_frzgra ) = ', sum(Interstitial%snohf_frzgra ) + write (0,*) 'sum(Interstitial%snohf_snowmelt ) = ', sum(Interstitial%snohf_snowmelt ) write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) + write (0,*) 'sum(Interstitial%soilm_in_m ) = ', sum(Interstitial%soilm_in_m ) write (0,*) 'sum(Interstitial%soiltype ) = ', sum(Interstitial%soiltype ) write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) write (0,*) 'sum(Interstitial%stress_ocean ) = ', sum(Interstitial%stress_ocean ) write (0,*) 'sum(Interstitial%theta ) = ', sum(Interstitial%theta ) + write (0,*) 'sum(Interstitial%th1 ) = ', sum(Interstitial%th1 ) write (0,*) 'sum(Interstitial%tice ) = ', sum(Interstitial%tice ) write (0,*) 'sum(Interstitial%tlvl ) = ', sum(Interstitial%tlvl ) write (0,*) 'sum(Interstitial%tlyr ) = ', sum(Interstitial%tlyr ) write (0,*) 'sum(Interstitial%tprcp_ice ) = ', sum(Interstitial%tprcp_ice ) write (0,*) 'sum(Interstitial%tprcp_land ) = ', sum(Interstitial%tprcp_land ) write (0,*) 'sum(Interstitial%tprcp_ocean ) = ', sum(Interstitial%tprcp_ocean ) + write (0,*) 'sum(Interstitial%tprcp_rate_land ) = ', sum(Interstitial%tprcp_rate_land ) write (0,*) 'sum(Interstitial%trans ) = ', sum(Interstitial%trans ) write (0,*) 'sum(Interstitial%tseal ) = ', sum(Interstitial%tseal ) write (0,*) 'sum(Interstitial%tsfa ) = ', sum(Interstitial%tsfa ) write (0,*) 'sum(Interstitial%tsfc_ice ) = ', sum(Interstitial%tsfc_ice ) write (0,*) 'sum(Interstitial%tsfc_land ) = ', sum(Interstitial%tsfc_land ) + write (0,*) 'sum(Interstitial%tsfc_land_save ) = ', sum(Interstitial%tsfc_land_save ) write (0,*) 'sum(Interstitial%tsfc_ocean ) = ', sum(Interstitial%tsfc_ocean ) write (0,*) 'sum(Interstitial%tsfg ) = ', sum(Interstitial%tsfg ) write (0,*) 'sum(Interstitial%tsurf ) = ', sum(Interstitial%tsurf ) @@ -6502,6 +6640,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) write (0,*) 'sum(Interstitial%weasd_land ) = ', sum(Interstitial%weasd_land ) + write (0,*) 'sum(Interstitial%weasd_land_save ) = ', sum(Interstitial%weasd_land_save ) write (0,*) 'sum(Interstitial%weasd_ocean ) = ', sum(Interstitial%weasd_ocean ) write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 744627f6b..25d40be4b 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -541,6 +541,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[z0base] + standard_name = baseline_surface_roughness_length + long_name = baseline surface roughness length for momentum in meter + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[semisbase] + standard_name = baseline_surface_longwave_emissivity + long_name = baseline surface lw emissivity in fraction + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [sncovr] standard_name = surface_snow_area_fraction_over_land long_name = surface snow area fraction @@ -737,6 +751,13 @@ dimensions = (horizontal_dimension,soil_vertical_dimension) type = real kind = kind_phys +[sthick] + standard_name = soil_layer_thickness + long_name = soil layer thickness + units = m + dimensions = (soil_vertical_dimension) + type = real + kind = kind_phys [t2m] standard_name = temperature_at_2m long_name = 2 meter temperature @@ -2650,6 +2671,12 @@ units = flag dimensions = () type = integer +[lsm_noah_hafs] + standard_name = flag_for_noah_hafs_land_surface_scheme + long_name = flag for NOAH HAFS land surface model + units = flag + dimensions = () + type = integer [lsoil] standard_name = soil_vertical_dimension long_name = number of soil layers @@ -2676,10 +2703,35 @@ type = integer [rdlai] standard_name = flag_for_reading_leaf_area_index_from_input - long_name = flag for reading leaf area index from initial conditions for RUC LSM + long_name = flag for reading leaf area index from initial conditions + units = flag + dimensions = () + type = logical +[ua_phys] + standard_name = flag_for_noah_lsm_ua_extension + long_name = flag for using University of Arizona(?) extension for NOAH LSM HAFS (see module_sf_noahlsm.F) + units = flag + dimensions = () + type = logical +[usemonalb] + standard_name = flag_for_reading_surface_diffused_shortwave_albedo_from_input + long_name = flag for reading surface diffused shortwave albedo for NOAH LSM HAFS (see module_sf_noahlsm.F) units = flag dimensions = () type = logical +[aoasis] + standard_name = potential_evaporation_multiplicative_factor + long_name = potential evaporation multiplicative factor for NOAH LSM HAFS (see module_sf_noahlsm.F) + units = none + dimensions = () + type = real + kind = kind_phys +[fasdas] + standard_name = flag_flux_adjusting_surface_data_assimilation_system + long_name = flag to use the flux adjusting surface data assimilation system for NOAH LSM HAFS (see module_sf_noahlsm.F) + units = flag + dimensions = () + type = integer [ivegsrc] standard_name = vegetation_type_dataset_choice long_name = land use dataset choice @@ -2692,6 +2744,18 @@ units = index dimensions = () type = integer +[isurban] + standard_name = urban_vegetation_category + long_name = index of the urban vegetation category in the chosen vegetation dataset + units = index + dimensions = () + type = integer +[iopt_thcnd] + standard_name = flag_for_thermal_conductivity_option + long_name = choice for thermal conductivity option (see module_sf_noahlsm) + units = index + dimensions = () + type = integer [spec_adv] standard_name = flag_for_individual_cloud_species_advected long_name = flag for individual cloud species advected @@ -4523,13 +4587,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[phy_myj_z0base] - standard_name = baseline_surface_roughness_length - long_name = baseline surface roughness length for momentum in meter - units = m - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [phy_myj_akhs] standard_name = heat_exchange_coefficient_for_MYJ_schemes long_name = surface heat exchange_coefficient for MYJ schemes @@ -6060,6 +6117,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[canopy_save] + standard_name = canopy_water_amount_save + long_name = canopy water amount before entering a physics scheme + units = kg m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cd] standard_name = surface_drag_coefficient_for_momentum_in_air long_name = surface exchange coeff for momentum @@ -6137,6 +6201,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[chk_land] + standard_name = surface_conductance_for_heat_and_moisture_in_air_over_land + long_name = surface conductance for heat & moisture over land + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cf_upi] standard_name = convective_cloud_fraction_for_microphysics long_name = convective cloud fraction for microphysics @@ -6284,6 +6355,13 @@ dimensions = (horizontal_dimension,4) type = real kind = kind_phys +[cmc] + standard_name = canopy_water_amount_in_m + long_name = canopy water amount in m + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cmm_ocean] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean long_name = momentum exchange coefficient over ocean @@ -6515,6 +6593,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dqsdt2] + standard_name = saturation_specific_humidity_slope + long_name = saturation specific humidity slope at lowest model layer + units = K-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [dqsfc1] standard_name = instantaneous_surface_upward_latent_heat_flux long_name = surface upward latent heat flux @@ -6529,6 +6614,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[drain_in_m_sm1] + standard_name = subsurface_runoff_flux_in_m_sm1 + long_name = subsurface runoff flux in m s-1 + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [dtdt] standard_name = tendency_of_air_temperature_due_to_model_physics long_name = air temperature tendency due to model physics @@ -6869,6 +6961,12 @@ units = flag dimensions = (horizontal_dimension) type = logical +[flag_lsm] + standard_name = flag_for_calling_land_surface_model + long_name = flag for calling land surface model + units = flag + dimensions = (horizontal_dimension) + type = logical [ffmm_ocean] standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean long_name = Monin-Obukhov similarity function for momentum over ocean @@ -7606,6 +7704,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[qs1] + standard_name = saturation_specific_humidity_at_lowest_model_layer + long_name = saturation specific humidity at lowest model layer + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[qv1] + standard_name = bounded_specific_humidity_at_lowest_model_layer_over_land + long_name = specific humidity at lowest model layer over land bounded between a nonzero epsilon and saturation + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [radar_reset] standard_name = flag_for_resetting_radar_reflectivity_calculation long_name = flag for resetting radar reflectivity calculation @@ -7695,6 +7807,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[rho1] + standard_name = air_density_at_lowest_model_layer + long_name = air density at lowest model layer + units = kg m-3 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [runoff] standard_name = surface_runoff_flux long_name = surface runoff flux @@ -7702,6 +7821,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[runoff_in_m_sm1] + standard_name = surface_runoff_flux_in_m_sm1 + long_name = surface runoff flux in m s-1 + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [save_q(:,:,index_for_liquid_cloud_condensate)] standard_name = cloud_condensed_water_mixing_ratio_save long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) before entering a physics scheme @@ -7826,12 +7952,33 @@ units = flag dimensions = () type = logical +[slc_save] + standard_name = volume_fraction_of_unfrozen_soil_moisture_save + long_name = liquid soil moisture before entering a physics scheme + units = frac + dimensions = (horizontal_dimension,soil_vertical_dimension) + type = real + kind = kind_phys [slopetype] standard_name = surface_slope_classification long_name = surface slope type at each grid cell units = index dimensions = (horizontal_dimension) type = integer +[smcmax] + standard_name = soil_porosity + long_name = volumetric soil porosity + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[smc_save] + standard_name = volume_fraction_of_soil_moisture_save + long_name = total soil moisture before entering a physics scheme + units = frac + dimensions = (horizontal_dimension,soil_vertical_dimension) + type = real + kind = kind_phys [snowc] standard_name = surface_snow_area_fraction long_name = surface snow area fraction @@ -7853,6 +8000,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snowd_land_save] + standard_name = surface_snow_thickness_water_equivalent_over_land_save + long_name = water equivalent snow depth over land before entering a physics scheme + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snowd_ice] standard_name = surface_snow_thickness_water_equivalent_over_ice long_name = water equivalent snow depth over ice @@ -7860,6 +8014,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snow_depth] + standard_name = actual_snow_depth + long_name = actual snow depth + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snohf] standard_name = snow_freezing_rain_upward_latent_heat_flux long_name = latent heat flux due to snow and frz rain @@ -7867,6 +8028,27 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snohf_snow] + standard_name = latent_heat_flux_from_precipitating_snow + long_name = latent heat flux due to precipitating snow + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[snohf_frzgra] + standard_name = latent_heat_flux_from_freezing_rain + long_name = latent heat flux due to freezing rain + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[snohf_snowmelt] + standard_name = latent_heat_flux_due_to_snowmelt + long_name = latent heat flux due to snowmelt phase change + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snowmp] standard_name = lwe_thickness_of_snow_amount long_name = explicit snow fall on physics timestep @@ -7881,12 +8063,26 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[soilm_in_m] + standard_name = soil_moisture_content_in_m + long_name = soil moisture in meters + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [soiltype] standard_name = soil_type_classification long_name = soil type at each grid cell units = index dimensions = (horizontal_dimension) type = integer +[stc_save] + standard_name = soil_temperature_save + long_name = soil temperature before entering a physics scheme + units = K + dimensions = (horizontal_dimension,soil_vertical_dimension) + type = real + kind = kind_phys [stress] standard_name = surface_wind_stress long_name = surface wind stress @@ -7929,6 +8125,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[th1] + standard_name = potential_temperature_at_lowest_model_layer + long_name = potential_temperature_at_lowest_model_layer + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tice] standard_name = sea_ice_temperature_interstitial long_name = sea ice surface skin temperature use as interstitial @@ -7971,6 +8174,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tprcp_rate_land] + standard_name = total_precipitation_rate_on_dynamics_timestep_over_land + long_name = total precipitation rate in each time step over land + units = kg m-2 s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tracers_start_index] standard_name = start_index_of_other_tracers long_name = beginning index of the non-water tracer species @@ -8024,6 +8234,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tsfc_land_save] + standard_name = surface_skin_temperature_over_land_interstitial_save + long_name = surface skin temperature over land before entering a physics scheme (temporary use as interstitial) + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tsfc_ice] standard_name = surface_skin_temperature_over_ice_interstitial long_name = surface skin temperature over ice (temporary use as interstitial) @@ -8155,6 +8372,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[weasd_land_save] + standard_name = water_equivalent_accumulated_snow_depth_over_land_save + long_name = water equiv of acc snow depth over land before entering a physics scheme + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [weasd_ice] standard_name = water_equivalent_accumulated_snow_depth_over_ice long_name = water equiv of acc snow depth over ice diff --git a/scm/src/gmtb_scm_physical_constants.F90 b/scm/src/gmtb_scm_physical_constants.F90 index c74894767..f6d85a265 100644 --- a/scm/src/gmtb_scm_physical_constants.F90 +++ b/scm/src/gmtb_scm_physical_constants.F90 @@ -19,6 +19,7 @@ module gmtb_scm_physical_constants real(kind=dp),parameter:: con_rv =4.6150e+2 real(kind=dp),parameter:: con_cp =1.0046e+3 real(kind=dp),parameter:: con_cliq =4.1855e+3 + real(kind=dp),parameter:: con_csol =2.1060e+3 real(kind=dp),parameter:: con_cvap =1.8460e+3 real(kind=dp),parameter:: con_hvap =2.5000e+6 real(kind=dp),parameter:: con_hfus =3.3358e+5 diff --git a/scm/src/gmtb_scm_physical_constants.meta b/scm/src/gmtb_scm_physical_constants.meta index eb7f23bde..3b521a796 100644 --- a/scm/src/gmtb_scm_physical_constants.meta +++ b/scm/src/gmtb_scm_physical_constants.meta @@ -8,6 +8,13 @@ dimensions = () type = real kind = kind_phys +[con_csol] + standard_name = specific_heat_of_ice_water_at_constant_pressure + long_name = specific heat of ice water at constant pressure + units = J kg-1 K-1 + dimensions = () + type = real + kind = kind_phys [con_cp] standard_name = specific_heat_of_dry_air_at_constant_pressure long_name = specific heat of dry air at constant pressure From fda4986166b956eced145bda694d55b598590528 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 8 Apr 2020 17:47:43 -0600 Subject: [PATCH 07/26] update GFS_typedefs.F90 to be in sync with FV3's version --- scm/src/GFS_typedefs.F90 | 171 ++++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 81 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 36aa2e9e3..a061eb46a 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -688,10 +688,10 @@ module GFS_typedefs !--- GFDL microphysical paramters logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency - + !--- Thompson,GFDL mp parameter logical :: lrefres !< flag for radar reflectivity in restart file - + !--- land/surface model parameters integer :: lsm !< flag for land surface model lsm=1 for noah lsm integer :: lsm_noah=1 !< flag for NOAH land surface model @@ -1432,9 +1432,10 @@ module GFS_typedefs !--- MP quantities for 3D diagnositics real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm - + !--- Extra PBL diagnostics real (kind=kind_phys), pointer :: dkudiagnostic(:,:) => null() !< Eddy diffusitivity from the EDMF and EDMF-TKE + ! !---vay-2018 UGWP-diagnostics daily mean ! @@ -2178,7 +2179,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%iceprv = clear_val Sfcprop%snowprv = clear_val Sfcprop%graupelprv = clear_val - end if + end if ! Noah MP allocate and init when used ! if (Model%lsm == Model%lsm_noahmp ) then @@ -3347,7 +3348,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lsoil = lsoil ! Consistency check for RUC LSM if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_hafs) .and. Model%nscyc>0) then - write(0,*) 'Logic error: RUC LSM cannot be used with surface data cycling at this point (fhcyc>0)' + write(0,*) 'Logic error: RUC LSM and NOAH HAFS LSM cannot be used with surface data cycling at this point (fhcyc>0)' stop end if ! Flag to read leaf area index from input files (initial conditions) @@ -3370,14 +3371,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 end if - Model%ivegsrc = ivegsrc - Model%isot = isot - Model%isurban = -999 !GJF isurban is only used in NOAH/HAFS and is initialized in sfc_drv_hafs.F90/lsm_noah_hafs_init + Model%isurban = -999 !GJF isurban is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init Model%iopt_thcnd = iopt_thcnd Model%ua_phys = ua_phys Model%usemonalb = usemonalb Model%aoasis = aoasis Model%fasdas = fasdas + Model%ivegsrc = ivegsrc + Model%isot = isot Model%use_ufo = use_ufo ! Noah MP options from namelist @@ -3465,6 +3466,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%wminras = wminras Model%rbcr = rbcr Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 + Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 Model%do_mynnedmf = do_mynnedmf @@ -3521,7 +3523,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ignore_lake = ignore_lake if (Model%frac_grid) then write(0,*) "ERROR: CCPP has not been tested with fractional landmask turned on" -! stop +! stop end if Model%min_lakeice = min_lakeice Model%min_seaice = min_seaice @@ -4331,7 +4333,8 @@ subroutine control_print(Model) print *, ' usemonalb : ', Model%usemonalb print *, ' aoasis : ', Model%aoasis print *, ' fasdas : ', Model%fasdas - + print *, ' ivegsrc : ', Model%ivegsrc + print *, ' isot : ', Model%isot if (Model%lsm == Model%lsm_noahmp) then print *, ' Noah MP LSM is used, the options are' @@ -5259,7 +5262,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%zmtnblck = zero if (Model%imp_physics == Model%imp_physics_fer_hires) then - Diag%TRAIN = zero + Diag%TRAIN = zero end if Diag%totprcpb = zero @@ -5356,7 +5359,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) ! Extra PBL diagnostics Diag%dkudiagnostic = zero - + ! max hourly diagnostics Diag%refl_10cm = zero Diag%refdmax = -35. @@ -5503,7 +5506,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%aerodp (IM,NSPC1)) allocate (Interstitial%alb1d (IM)) allocate (Interstitial%bexp1d (IM)) - allocate (Interstitial%canopy_save (IM)) allocate (Interstitial%cd (IM)) allocate (Interstitial%cd_ice (IM)) allocate (Interstitial%cd_land (IM)) @@ -5515,7 +5517,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%chh_ice (IM)) allocate (Interstitial%chh_land (IM)) allocate (Interstitial%chh_ocean (IM)) - allocate (Interstitial%chk_land (IM)) allocate (Interstitial%cldf (IM)) allocate (Interstitial%cldsa (IM,5)) allocate (Interstitial%cldtaulw (IM,Model%levr+LTP)) @@ -5524,7 +5525,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%clouds (IM,Model%levr+LTP,NF_CLDS)) allocate (Interstitial%clw (IM,Model%levs,Interstitial%nn)) allocate (Interstitial%clx (IM,4)) - allocate (Interstitial%cmc (IM)) allocate (Interstitial%cmm_ice (IM)) allocate (Interstitial%cmm_land (IM)) allocate (Interstitial%cmm_ocean (IM)) @@ -5541,10 +5541,8 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%dkt (IM,Model%levs-1)) allocate (Interstitial%dlength (IM)) allocate (Interstitial%dqdt (IM,Model%levs,Model%ntrac)) - allocate (Interstitial%dqsdt2 (IM)) allocate (Interstitial%dqsfc1 (IM)) allocate (Interstitial%drain (IM)) - allocate (Interstitial%drain_in_m_sm1 (IM)) allocate (Interstitial%dtdt (IM,Model%levs)) allocate (Interstitial%dtdtc (IM,Model%levs)) allocate (Interstitial%dtsfc1 (IM)) @@ -5581,7 +5579,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%flag_cice (IM)) allocate (Interstitial%flag_guess (IM)) allocate (Interstitial%flag_iter (IM)) - allocate (Interstitial%flag_lsm (IM)) allocate (Interstitial%ffmm_ice (IM)) allocate (Interstitial%ffmm_land (IM)) allocate (Interstitial%ffmm_ocean (IM)) @@ -5639,8 +5636,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%qss_ice (IM)) allocate (Interstitial%qss_land (IM)) allocate (Interstitial%qss_ocean (IM)) - allocate (Interstitial%qs1 (IM)) - allocate (Interstitial%qv1 (IM)) allocate (Interstitial%raincd (IM)) allocate (Interstitial%raincs (IM)) allocate (Interstitial%rainmcadj (IM)) @@ -5650,9 +5645,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%rb_land (IM)) allocate (Interstitial%rb_ocean (IM)) allocate (Interstitial%rhc (IM,Model%levs)) - allocate (Interstitial%rho1 (IM)) allocate (Interstitial%runoff (IM)) - allocate (Interstitial%runoff_in_m_sm1 (IM)) allocate (Interstitial%save_q (IM,Model%levs,Model%ntrac)) allocate (Interstitial%save_t (IM,Model%levs)) allocate (Interstitial%save_u (IM,Model%levs)) @@ -5667,43 +5660,30 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%sigmaf (IM)) allocate (Interstitial%sigmafrac (IM,Model%levs)) allocate (Interstitial%sigmatot (IM,Model%levs)) - allocate (Interstitial%slc_save (IM,Model%lsoil)) allocate (Interstitial%slopetype (IM)) - allocate (Interstitial%smcmax (IM)) - allocate (Interstitial%smc_save (IM,Model%lsoil)) allocate (Interstitial%snowc (IM)) allocate (Interstitial%snowd_ice (IM)) allocate (Interstitial%snowd_land (IM)) - allocate (Interstitial%snowd_land_save (IM)) allocate (Interstitial%snowd_ocean (IM)) - allocate (Interstitial%snow_depth (IM)) allocate (Interstitial%snohf (IM)) - allocate (Interstitial%snohf_snow (IM)) - allocate (Interstitial%snohf_frzgra (IM)) - allocate (Interstitial%snohf_snowmelt (IM)) allocate (Interstitial%snowmt (IM)) - allocate (Interstitial%soilm_in_m (IM)) allocate (Interstitial%soiltype (IM)) - allocate (Interstitial%stc_save (IM,Model%lsoil)) allocate (Interstitial%stress (IM)) allocate (Interstitial%stress_ice (IM)) allocate (Interstitial%stress_land (IM)) allocate (Interstitial%stress_ocean (IM)) allocate (Interstitial%theta (IM)) - allocate (Interstitial%th1 (IM)) allocate (Interstitial%tice (IM)) allocate (Interstitial%tlvl (IM,Model%levr+1+LTP)) allocate (Interstitial%tlyr (IM,Model%levr+LTP)) allocate (Interstitial%tprcp_ice (IM)) allocate (Interstitial%tprcp_land (IM)) allocate (Interstitial%tprcp_ocean (IM)) - allocate (Interstitial%tprcp_rate_land (IM)) allocate (Interstitial%trans (IM)) allocate (Interstitial%tseal (IM)) allocate (Interstitial%tsfa (IM)) allocate (Interstitial%tsfc_ice (IM)) allocate (Interstitial%tsfc_land (IM)) - allocate (Interstitial%tsfc_land_save (IM)) allocate (Interstitial%tsfc_ocean (IM)) allocate (Interstitial%tsfg (IM)) allocate (Interstitial%tsurf (IM)) @@ -5725,7 +5705,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%wcbmax (IM)) allocate (Interstitial%weasd_ice (IM)) allocate (Interstitial%weasd_land (IM)) - allocate (Interstitial%weasd_land_save (IM)) allocate (Interstitial%weasd_ocean (IM)) allocate (Interstitial%wind (IM)) allocate (Interstitial%work1 (IM)) @@ -5807,6 +5786,32 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%t2mmp (IM)) allocate (Interstitial%q2mp (IM)) end if + if (Model%lsm == Model%lsm_noah_hafs) then + allocate (Interstitial%canopy_save (IM)) + allocate (Interstitial%chk_land (IM)) + allocate (Interstitial%cmc (IM)) + allocate (Interstitial%dqsdt2 (IM)) + allocate (Interstitial%drain_in_m_sm1 (IM)) + allocate (Interstitial%flag_lsm (IM)) + allocate (Interstitial%qs1 (IM)) + allocate (Interstitial%qv1 (IM)) + allocate (Interstitial%rho1 (IM)) + allocate (Interstitial%runoff_in_m_sm1 (IM)) + allocate (Interstitial%slc_save (IM,Model%lsoil)) + allocate (Interstitial%smcmax (IM)) + allocate (Interstitial%smc_save (IM,Model%lsoil)) + allocate (Interstitial%snowd_land_save (IM)) + allocate (Interstitial%snow_depth (IM)) + allocate (Interstitial%snohf_snow (IM)) + allocate (Interstitial%snohf_frzgra (IM)) + allocate (Interstitial%snohf_snowmelt (IM)) + allocate (Interstitial%soilm_in_m (IM)) + allocate (Interstitial%stc_save (IM,Model%lsoil)) + allocate (Interstitial%th1 (IM)) + allocate (Interstitial%tprcp_rate_land (IM)) + allocate (Interstitial%tsfc_land_save (IM)) + allocate (Interstitial%weasd_land_save (IM)) + end if ! ! Set components that do not change Interstitial%frain = Model%dtf/Model%dtp @@ -6076,7 +6081,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%adjvisdfu = clear_val Interstitial%adjvisdfd = clear_val Interstitial%bexp1d = clear_val - Interstitial%canopy_save = clear_val Interstitial%cd = clear_val Interstitial%cd_ice = huge Interstitial%cd_land = huge @@ -6088,13 +6092,11 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%chh_ice = huge Interstitial%chh_land = huge Interstitial%chh_ocean = huge - Interstitial%chk_land = huge Interstitial%cld1d = clear_val Interstitial%cldf = clear_val Interstitial%clw = clear_val Interstitial%clw(:,:,2) = -999.9 Interstitial%clx = clear_val - Interstitial%cmc = clear_val Interstitial%cmm_ice = huge Interstitial%cmm_land = huge Interstitial%cmm_ocean = huge @@ -6109,10 +6111,8 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%dkt = clear_val Interstitial%dlength = clear_val Interstitial%dqdt = clear_val - Interstitial%dqsdt2 = clear_val Interstitial%dqsfc1 = clear_val Interstitial%drain = clear_val - Interstitial%drain_in_m_sm1 = clear_val Interstitial%dt_mf = clear_val Interstitial%dtdt = clear_val Interstitial%dtdtc = clear_val @@ -6146,7 +6146,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%flag_cice = .false. Interstitial%flag_guess = .false. Interstitial%flag_iter = .true. - Interstitial%flag_lsm = .false. Interstitial%ffmm_ice = huge Interstitial%ffmm_land = huge Interstitial%ffmm_ocean = huge @@ -6194,8 +6193,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%qss_ice = huge Interstitial%qss_land = huge Interstitial%qss_ocean = huge - Interstitial%qs1 = huge - Interstitial%qv1 = huge Interstitial%raincd = clear_val Interstitial%raincs = clear_val Interstitial%rainmcadj = clear_val @@ -6205,9 +6202,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%rb_land = huge Interstitial%rb_ocean = huge Interstitial%rhc = clear_val - Interstitial%rho1 = clear_val Interstitial%runoff = clear_val - Interstitial%runoff_in_m_sm1 = clear_val Interstitial%save_q = clear_val Interstitial%save_t = clear_val Interstitial%save_u = clear_val @@ -6220,40 +6215,27 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%sigmaf = clear_val Interstitial%sigmafrac = clear_val Interstitial%sigmatot = clear_val - Interstitial%slc_save = clear_val Interstitial%slopetype = 0 - Interstitial%smcmax = clear_val - Interstitial%smc_save = clear_val Interstitial%snowc = clear_val Interstitial%snowd_ice = huge Interstitial%snowd_land = huge - Interstitial%snowd_land_save = huge Interstitial%snowd_ocean = huge - Interstitial%snow_depth = clear_val Interstitial%snohf = clear_val - Interstitial%snohf_snow = clear_val - Interstitial%snohf_frzgra = clear_val - Interstitial%snohf_snowmelt = clear_val Interstitial%snowmt = clear_val - Interstitial%soilm_in_m = clear_val Interstitial%soiltype = 0 - Interstitial%stc_save = clear_val Interstitial%stress = clear_val Interstitial%stress_ice = huge Interstitial%stress_land = huge Interstitial%stress_ocean = huge Interstitial%theta = clear_val - Interstitial%th1 = clear_val Interstitial%tice = clear_val Interstitial%tprcp_ice = huge Interstitial%tprcp_land = huge Interstitial%tprcp_ocean = huge - Interstitial%tprcp_rate_land = huge Interstitial%trans = clear_val Interstitial%tseal = clear_val Interstitial%tsfc_ice = huge Interstitial%tsfc_land = huge - Interstitial%tsfc_land_save = huge Interstitial%tsfc_ocean = huge Interstitial%tsurf = clear_val Interstitial%tsurf_ice = huge @@ -6274,7 +6256,6 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%wcbmax = clear_val Interstitial%weasd_ice = huge Interstitial%weasd_land = huge - Interstitial%weasd_land_save = huge Interstitial%weasd_ocean = huge Interstitial%wind = huge Interstitial%work1 = clear_val @@ -6347,6 +6328,32 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%t2mmp = clear_val Interstitial%q2mp = clear_val end if + if (Model%lsm == Model%lsm_noah_hafs) then + Interstitial%canopy_save = clear_val + Interstitial%chk_land = huge + Interstitial%cmc = clear_val + Interstitial%dqsdt2 = clear_val + Interstitial%drain_in_m_sm1 = clear_val + Interstitial%flag_lsm = .false. + Interstitial%qs1 = huge + Interstitial%qv1 = huge + Interstitial%rho1 = clear_val + Interstitial%runoff_in_m_sm1 = clear_val + Interstitial%slc_save = clear_val + Interstitial%smcmax = clear_val + Interstitial%smc_save = clear_val + Interstitial%snowd_land_save = huge + Interstitial%snow_depth = clear_val + Interstitial%snohf_snow = clear_val + Interstitial%snohf_frzgra = clear_val + Interstitial%snohf_snowmelt = clear_val + Interstitial%soilm_in_m = clear_val + Interstitial%stc_save = clear_val + Interstitial%th1 = clear_val + Interstitial%tprcp_rate_land = huge + Interstitial%tsfc_land_save = huge + Interstitial%weasd_land_save = huge + end if ! ! Set flag for resetting maximum hourly output fields Interstitial%reset = mod(Model%kdt-1, nint(Model%avg_max_length/Model%dtp)) == 0 @@ -6410,7 +6417,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%aerodp ) = ', sum(Interstitial%aerodp ) write (0,*) 'sum(Interstitial%alb1d ) = ', sum(Interstitial%alb1d ) write (0,*) 'sum(Interstitial%bexp1d ) = ', sum(Interstitial%bexp1d ) - write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) write (0,*) 'sum(Interstitial%cd ) = ', sum(Interstitial%cd ) write (0,*) 'sum(Interstitial%cd_ice ) = ', sum(Interstitial%cd_ice ) write (0,*) 'sum(Interstitial%cd_land ) = ', sum(Interstitial%cd_land ) @@ -6422,7 +6428,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%chh_ice ) = ', sum(Interstitial%chh_ice ) write (0,*) 'sum(Interstitial%chh_land ) = ', sum(Interstitial%chh_land ) write (0,*) 'sum(Interstitial%chh_ocean ) = ', sum(Interstitial%chh_ocean ) - write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) write (0,*) 'sum(Interstitial%cldf ) = ', sum(Interstitial%cldf ) write (0,*) 'sum(Interstitial%cldsa ) = ', sum(Interstitial%cldsa ) write (0,*) 'sum(Interstitial%cldtaulw ) = ', sum(Interstitial%cldtaulw ) @@ -6431,7 +6436,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%clw ) = ', sum(Interstitial%clw ) write (0,*) 'sum(Interstitial%clx ) = ', sum(Interstitial%clx ) write (0,*) 'sum(Interstitial%clouds ) = ', sum(Interstitial%clouds ) - write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) write (0,*) 'sum(Interstitial%cmm_ice ) = ', sum(Interstitial%cmm_ice ) write (0,*) 'sum(Interstitial%cmm_land ) = ', sum(Interstitial%cmm_land ) write (0,*) 'sum(Interstitial%cmm_ocean ) = ', sum(Interstitial%cmm_ocean ) @@ -6448,10 +6452,8 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%dkt ) = ', sum(Interstitial%dkt ) write (0,*) 'sum(Interstitial%dlength ) = ', sum(Interstitial%dlength ) write (0,*) 'sum(Interstitial%dqdt ) = ', sum(Interstitial%dqdt ) - write (0,*) 'sum(Interstitial%dqsdt2 ) = ', sum(Interstitial%dqsdt2 ) write (0,*) 'sum(Interstitial%dqsfc1 ) = ', sum(Interstitial%dqsfc1 ) write (0,*) 'sum(Interstitial%drain ) = ', sum(Interstitial%drain ) - write (0,*) 'sum(Interstitial%drain_in_m_sm1 ) = ', sum(Interstitial%drain_in_m_sm1 ) write (0,*) 'sum(Interstitial%dtdt ) = ', sum(Interstitial%dtdt ) write (0,*) 'sum(Interstitial%dtdtc ) = ', sum(Interstitial%dtdtc ) write (0,*) 'sum(Interstitial%dtsfc1 ) = ', sum(Interstitial%dtsfc1 ) @@ -6488,7 +6490,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'Interstitial%flag_cice(1) = ', Interstitial%flag_cice(1) write (0,*) 'Interstitial%flag_guess(1) = ', Interstitial%flag_guess(1) write (0,*) 'Interstitial%flag_iter(1) = ', Interstitial%flag_iter(1) - write (0,*) 'Interstitial%flag_lsm(1) = ', Interstitial%flag_lsm(1) write (0,*) 'sum(Interstitial%ffmm_ice ) = ', sum(Interstitial%ffmm_ice ) write (0,*) 'sum(Interstitial%ffmm_land ) = ', sum(Interstitial%ffmm_land ) write (0,*) 'sum(Interstitial%ffmm_ocean ) = ', sum(Interstitial%ffmm_ocean ) @@ -6549,8 +6550,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%qss_ice ) = ', sum(Interstitial%qss_ice ) write (0,*) 'sum(Interstitial%qss_land ) = ', sum(Interstitial%qss_land ) write (0,*) 'sum(Interstitial%qss_ocean ) = ', sum(Interstitial%qss_ocean ) - write (0,*) 'sum(Interstitial%qs1 ) = ', sum(Interstitial%qs1 ) - write (0,*) 'sum(Interstitial%qv1 ) = ', sum(Interstitial%qv1 ) write (0,*) 'Interstitial%radar_reset = ', Interstitial%radar_reset write (0,*) 'Interstitial%raddt = ', Interstitial%raddt write (0,*) 'sum(Interstitial%raincd ) = ', sum(Interstitial%raincd ) @@ -6563,9 +6562,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%rb_ocean ) = ', sum(Interstitial%rb_ocean ) write (0,*) 'Interstitial%reset = ', Interstitial%reset write (0,*) 'sum(Interstitial%rhc ) = ', sum(Interstitial%rhc ) - write (0,*) 'sum(Interstitial%rho1 ) = ', sum(Interstitial%rho1 ) write (0,*) 'sum(Interstitial%runoff ) = ', sum(Interstitial%runoff ) - write (0,*) 'sum(Interstitial%runoff_in_m_sm1 ) = ', sum(Interstitial%runoff_in_m_sm1 ) write (0,*) 'sum(Interstitial%save_q ) = ', sum(Interstitial%save_q ) write (0,*) 'sum(Interstitial%save_t ) = ', sum(Interstitial%save_t ) write (0,*) 'sum(Interstitial%save_u ) = ', sum(Interstitial%save_u ) @@ -6586,39 +6583,29 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%sigmafrac ) = ', sum(Interstitial%sigmafrac ) write (0,*) 'sum(Interstitial%sigmatot ) = ', sum(Interstitial%sigmatot ) write (0,*) 'sum(Interstitial%slopetype ) = ', sum(Interstitial%slopetype ) - write (0,*) 'sum(Interstitial%smcmax ) = ', sum(Interstitial%smcmax ) write (0,*) 'sum(Interstitial%snowc ) = ', sum(Interstitial%snowc ) write (0,*) 'sum(Interstitial%snowd_ice ) = ', sum(Interstitial%snowd_ice ) write (0,*) 'sum(Interstitial%snowd_land ) = ', sum(Interstitial%snowd_land ) - write (0,*) 'sum(Interstitial%snowd_land_save ) = ', sum(Interstitial%snowd_land_save ) write (0,*) 'sum(Interstitial%snowd_ocean ) = ', sum(Interstitial%snowd_ocean ) - write (0,*) 'sum(Interstitial%snow_depth ) = ', sum(Interstitial%snow_depth ) write (0,*) 'sum(Interstitial%snohf ) = ', sum(Interstitial%snohf ) - write (0,*) 'sum(Interstitial%snohf_snow ) = ', sum(Interstitial%snohf_snow ) - write (0,*) 'sum(Interstitial%snohf_frzgra ) = ', sum(Interstitial%snohf_frzgra ) - write (0,*) 'sum(Interstitial%snohf_snowmelt ) = ', sum(Interstitial%snohf_snowmelt ) write (0,*) 'sum(Interstitial%snowmt ) = ', sum(Interstitial%snowmt ) - write (0,*) 'sum(Interstitial%soilm_in_m ) = ', sum(Interstitial%soilm_in_m ) write (0,*) 'sum(Interstitial%soiltype ) = ', sum(Interstitial%soiltype ) write (0,*) 'sum(Interstitial%stress ) = ', sum(Interstitial%stress ) write (0,*) 'sum(Interstitial%stress_ice ) = ', sum(Interstitial%stress_ice ) write (0,*) 'sum(Interstitial%stress_land ) = ', sum(Interstitial%stress_land ) write (0,*) 'sum(Interstitial%stress_ocean ) = ', sum(Interstitial%stress_ocean ) write (0,*) 'sum(Interstitial%theta ) = ', sum(Interstitial%theta ) - write (0,*) 'sum(Interstitial%th1 ) = ', sum(Interstitial%th1 ) write (0,*) 'sum(Interstitial%tice ) = ', sum(Interstitial%tice ) write (0,*) 'sum(Interstitial%tlvl ) = ', sum(Interstitial%tlvl ) write (0,*) 'sum(Interstitial%tlyr ) = ', sum(Interstitial%tlyr ) write (0,*) 'sum(Interstitial%tprcp_ice ) = ', sum(Interstitial%tprcp_ice ) write (0,*) 'sum(Interstitial%tprcp_land ) = ', sum(Interstitial%tprcp_land ) write (0,*) 'sum(Interstitial%tprcp_ocean ) = ', sum(Interstitial%tprcp_ocean ) - write (0,*) 'sum(Interstitial%tprcp_rate_land ) = ', sum(Interstitial%tprcp_rate_land ) write (0,*) 'sum(Interstitial%trans ) = ', sum(Interstitial%trans ) write (0,*) 'sum(Interstitial%tseal ) = ', sum(Interstitial%tseal ) write (0,*) 'sum(Interstitial%tsfa ) = ', sum(Interstitial%tsfa ) write (0,*) 'sum(Interstitial%tsfc_ice ) = ', sum(Interstitial%tsfc_ice ) write (0,*) 'sum(Interstitial%tsfc_land ) = ', sum(Interstitial%tsfc_land ) - write (0,*) 'sum(Interstitial%tsfc_land_save ) = ', sum(Interstitial%tsfc_land_save ) write (0,*) 'sum(Interstitial%tsfc_ocean ) = ', sum(Interstitial%tsfc_ocean ) write (0,*) 'sum(Interstitial%tsfg ) = ', sum(Interstitial%tsfg ) write (0,*) 'sum(Interstitial%tsurf ) = ', sum(Interstitial%tsurf ) @@ -6640,7 +6627,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%wcbmax ) = ', sum(Interstitial%wcbmax ) write (0,*) 'sum(Interstitial%weasd_ice ) = ', sum(Interstitial%weasd_ice ) write (0,*) 'sum(Interstitial%weasd_land ) = ', sum(Interstitial%weasd_land ) - write (0,*) 'sum(Interstitial%weasd_land_save ) = ', sum(Interstitial%weasd_land_save ) write (0,*) 'sum(Interstitial%weasd_ocean ) = ', sum(Interstitial%weasd_ocean ) write (0,*) 'sum(Interstitial%wind ) = ', sum(Interstitial%wind ) write (0,*) 'sum(Interstitial%work1 ) = ', sum(Interstitial%work1 ) @@ -6716,6 +6702,29 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) end if + if (Model%lsm == Model%lsm_noah_hafs) then + write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) + write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) + write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) + write (0,*) 'sum(Interstitial%dqsdt2 ) = ', sum(Interstitial%dqsdt2 ) + write (0,*) 'sum(Interstitial%drain_in_m_sm1 ) = ', sum(Interstitial%drain_in_m_sm1 ) + write (0,*) 'Interstitial%flag_lsm(1) = ', Interstitial%flag_lsm(1) + write (0,*) 'sum(Interstitial%qs1 ) = ', sum(Interstitial%qs1 ) + write (0,*) 'sum(Interstitial%qv1 ) = ', sum(Interstitial%qv1 ) + write (0,*) 'sum(Interstitial%rho1 ) = ', sum(Interstitial%rho1 ) + write (0,*) 'sum(Interstitial%runoff_in_m_sm1 ) = ', sum(Interstitial%runoff_in_m_sm1 ) + write (0,*) 'sum(Interstitial%smcmax ) = ', sum(Interstitial%smcmax ) + write (0,*) 'sum(Interstitial%snowd_land_save ) = ', sum(Interstitial%snowd_land_save ) + write (0,*) 'sum(Interstitial%snow_depth ) = ', sum(Interstitial%snow_depth ) + write (0,*) 'sum(Interstitial%snohf_snow ) = ', sum(Interstitial%snohf_snow ) + write (0,*) 'sum(Interstitial%snohf_frzgra ) = ', sum(Interstitial%snohf_frzgra ) + write (0,*) 'sum(Interstitial%snohf_snowmelt ) = ', sum(Interstitial%snohf_snowmelt ) + write (0,*) 'sum(Interstitial%soilm_in_m ) = ', sum(Interstitial%soilm_in_m ) + write (0,*) 'sum(Interstitial%th1 ) = ', sum(Interstitial%th1 ) + write (0,*) 'sum(Interstitial%tprcp_rate_land ) = ', sum(Interstitial%tprcp_rate_land ) + write (0,*) 'sum(Interstitial%tsfc_land_save ) = ', sum(Interstitial%tsfc_land_save ) + write (0,*) 'sum(Interstitial%weasd_land_save ) = ', sum(Interstitial%weasd_land_save ) + end if write (0,*) 'Interstitial_print: end' ! end subroutine interstitial_print From 95bdd9074333d3e556c4e6d8ce16d565e5c06a15 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 8 Apr 2020 21:21:35 -0600 Subject: [PATCH 08/26] change name of physical constant and rearrange a few lines in GFS_typedefs --- scm/src/GFS_typedefs.F90 | 16 ++++++++-------- scm/src/gmtb_scm_physical_constants.meta | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index a061eb46a..d8b228872 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -699,14 +699,6 @@ module GFS_typedefs integer :: lsm_ruc=3 !< flag for RUC land surface model integer :: lsm_noah_hafs = 4 !< flag for NOAH land surface model for HAFS application integer :: lsoil !< number of soil layers - integer :: lsoil_lsm !< number of soil layers internal to land surface model - integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model - integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm - logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) - logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM HAFS - logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS - real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM HAFS - integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) @@ -716,6 +708,14 @@ module GFS_typedefs integer :: isot !< isot = 0 => Zobler soil type ( 9 category) !< isot = 1 => STATSGO soil type (19 category, AKA 'STAS'(?)) !< isot = 2 => STAS-RUC soil type (19 category, NOAH/HAFS only) + integer :: lsoil_lsm !< number of soil layers internal to land surface model + integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model + integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm + logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) + logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM HAFS + logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS + real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM HAFS + integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: isurban !< vegetation/land use type corresponding to the urban environment for the chosen ivegsrc integer :: iopt_thcnd !< option to treat thermal conductivity in Noah LSM (new in 3.8) !< = 1, original (default) diff --git a/scm/src/gmtb_scm_physical_constants.meta b/scm/src/gmtb_scm_physical_constants.meta index 3b521a796..a7a10f88a 100644 --- a/scm/src/gmtb_scm_physical_constants.meta +++ b/scm/src/gmtb_scm_physical_constants.meta @@ -9,8 +9,8 @@ type = real kind = kind_phys [con_csol] - standard_name = specific_heat_of_ice_water_at_constant_pressure - long_name = specific heat of ice water at constant pressure + standard_name = specific_heat_of_ice_at_constant_pressure + long_name = specific heat of ice at constant pressure units = J kg-1 K-1 dimensions = () type = real From fe3010a5abc686effcfe36cf6fa8988f2c0e54cb Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 9 Apr 2020 16:49:01 -0600 Subject: [PATCH 09/26] edit GFS_typedefs.F90/meta for HWRF RRTMG --- scm/src/GFS_typedefs.F90 | 12 +++++++++++- scm/src/GFS_typedefs.meta | 40 ++++++++++++++++++++++----------------- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 8f8318f99..5d5030865 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -738,6 +738,8 @@ module GFS_typedefs logical :: cal_pre !< flag controls precip type algorithm real(kind=kind_phys) :: rhgrd !< fer_hires microphysics only logical :: spec_adv !< flag for individual cloud species advected + integer :: icloud !< cloud effect to the optical depth in radiation; this also controls the cloud fraction options + !< 3: with cloud effect, and use cloud fraction option 3, based on Sundqvist et al. (1989) logical :: do_aw !< AW scale-aware option in cs convection logical :: do_awdd !< AW scale-aware option in cs convection logical :: flx_form !< AW scale-aware option in cs convection @@ -2681,6 +2683,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- Ferrier-Aligo microphysical parameters real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only logical :: spec_adv = .true. !< Individual cloud species advected + integer :: icloud = 0 !< cloud effect to the optical depth in radiation; this also controls the cloud fraction options + !< 3: with cloud effect from FA, and use cloud fraction option 3, based on Sundqvist et al. (1989) !--- M-G microphysical parameters integer :: fprcp = 0 !< no prognostic rain and snow (MG) integer :: pdfflag = 4 !< pdf flag for MG macro physics @@ -3040,7 +3044,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- Rayleigh friction prslrd0, ral_ts, ldiag_ugwp, do_ugwp, do_tofd, & ! --- Ferrier-Aligo - spec_adv, rhgrd, & + spec_adv, rhgrd, icloud, & !--- mass flux deep convection clam_deep, c0s_deep, c1_deep, betal_deep, & betas_deep, evfact_deep, evfactl_deep, pgcon_deep, & @@ -3278,6 +3282,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- F-A MP parameters Model%rhgrd = rhgrd Model%spec_adv = spec_adv + Model%icloud = icloud !--- gfdl MP parameters Model%lgfdlmprad = lgfdlmprad @@ -3882,11 +3887,15 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print *,' Radiative heating calculated at',Model%levr, ' layers' if (Model%iovr_sw == 0) then print *,' random cloud overlap for Shortwave IOVR_SW=',Model%iovr_sw + elseif (Model%iovr_sw == 4) then + print *,'exponential cloud overlap for Shortwave IOVR_SW=',Model%iovr_lw else print *,' max-random cloud overlap for Shortwave IOVR_SW=',Model%iovr_sw endif if (Model%iovr_lw == 0) then print *,' random cloud overlap for Longwave IOVR_LW=',Model%iovr_lw + elseif (Model%iovr_lw == 4) then + print *,'exponential cloud overlap for Longwave IOVR_LW=',Model%iovr_lw else print *,' max-random cloud overlap for Longwave IOVR_LW=',Model%iovr_lw endif @@ -4249,6 +4258,7 @@ subroutine control_print(Model) print *, ' Ferrier-Aligo microphysical parameters' print *, ' spec_adv : ', Model%spec_adv print *, ' rhgrd : ', Model%rhgrd + print *, ' icloud : ', Model%icloud print *, ' ' endif diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 744627f6b..5c208740a 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -2188,14 +2188,14 @@ dimensions = () type = integer [iovr_sw] - standard_name = flag_for_max_random_overlap_clouds_for_shortwave_radiation - long_name = sw: max-random overlap clouds + standard_name = flag_for_cloud_overlapping_method_for_shortwave_radiation + long_name = control flag for cloud overlapping method for SW units = flag dimensions = () type = integer [iovr_lw] - standard_name = flag_for_max_random_overlap_clouds_for_longwave_radiation - long_name = lw: max-random overlap clouds + standard_name = flag_for_cloud_overlapping_method_for_longwave_radiation + long_name = control flag for cloud overlapping method for LW units = flag dimensions = () type = integer @@ -2206,14 +2206,14 @@ dimensions = () type = integer [isubc_sw] - standard_name = flag_for_sw_clouds_without_sub_grid_approximation - long_name = flag for sw clouds without sub-grid approximation + standard_name = flag_for_sw_clouds_grid_approximation + long_name = flag for sw clouds sub-grid approximation units = flag dimensions = () type = integer [isubc_lw] - standard_name = flag_for_lw_clouds_without_sub_grid_approximation - long_name = flag for lw clouds without sub-grid approximation + standard_name = flag_for_lw_clouds_sub_grid_approximation + long_name = flag for lw clouds sub-grid approximation units = flag dimensions = () type = integer @@ -3917,6 +3917,12 @@ dimensions = () type = real kind = kind_phys +[icloud] + standard_name = cloud_effect_to_optical_depth_and_cloud_fraction + long_name = cloud effect to the optical depth and cloud fraction in radiation + units = flag + dimensions = () + type = integer [gwd_opt] standard_name = gwd_opt long_name = flag to choose gwd scheme @@ -6190,63 +6196,63 @@ standard_name = total_cloud_fraction long_name = layer total cloud fraction units = frac - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,2)] standard_name = cloud_liquid_water_path long_name = layer cloud liquid water path units = g m-2 - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,3)] standard_name = mean_effective_radius_for_liquid_cloud long_name = mean effective radius for liquid cloud units = micron - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,4)] standard_name = cloud_ice_water_path long_name = layer cloud ice water path units = g m-2 - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,5)] standard_name = mean_effective_radius_for_ice_cloud long_name = mean effective radius for ice cloud units = micron - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,6)] standard_name = cloud_rain_water_path long_name = cloud rain water path units = g m-2 - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,7)] standard_name = mean_effective_radius_for_rain_drop long_name = mean effective radius for rain drop units = micron - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,8)] standard_name = cloud_snow_water_path long_name = cloud snow water path units = g m-2 - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clouds(:,:,9)] standard_name = mean_effective_radius_for_snow_flake long_name = mean effective radius for snow flake units = micron - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) type = real kind = kind_phys [clw] From 680691c898314a4629b295ccf224a45b232dccaa Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 9 Apr 2020 16:52:07 -0600 Subject: [PATCH 10/26] add HWRF RRTMG to ccpp_prebuild_config --- ccpp/config/ccpp_prebuild_config.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 366706f3b..3d93e02ae 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -92,6 +92,8 @@ 'ccpp/physics/physics/module_mp_thompson.F90', 'ccpp/physics/physics/module_mp_thompson_make_number_concentrations.F90', 'ccpp/physics/physics/module_MP_FER_HIRES.F90', + 'ccpp/physics/physics/HWRF_mersenne_twister.F90', + 'ccpp/physics/physics/HWRF_mcica_random_numbers.F90', 'ccpp/physics/physics/module_bl_mynn.F90', 'ccpp/physics/physics/module_sf_mynn.F90', 'ccpp/physics/physics/module_SF_JSFC.F90', @@ -213,8 +215,8 @@ 'ccpp/physics/physics/ozphys.f' : ['physics'], 'ccpp/physics/physics/ozphys_2015.f' : ['physics'], 'ccpp/physics/physics/precpd.f' : ['physics'], - 'ccpp/physics/physics/radlw_main.f' : ['physics'], - 'ccpp/physics/physics/radsw_main.f' : ['physics'], + 'ccpp/physics/physics/radlw_main.F90' : ['physics'], + 'ccpp/physics/physics/radsw_main.F90' : ['physics'], 'ccpp/physics/physics/rayleigh_damp.f' : ['physics'], 'ccpp/physics/physics/rrtmg_lw_post.F90' : ['physics'], 'ccpp/physics/physics/rrtmg_lw_pre.F90' : ['physics'], From 8102c0dce3d7493f2f202d0f01fdd97758edec44 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 9 Apr 2020 19:26:43 -0600 Subject: [PATCH 11/26] change extension on module_sf_noahlsm.F[90] in ccpp_prebuild_config --- ccpp/config/ccpp_prebuild_config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 5b330eda9..11fc62153 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -144,7 +144,7 @@ 'ccpp/physics/physics/namelist_soilveg_ruc.F90', 'ccpp/physics/physics/set_soilveg_ruc.F90', 'ccpp/physics/physics/module_soil_pre.F90', - 'ccpp/physics/physics/module_sf_noahlsm.F', + 'ccpp/physics/physics/module_sf_noahlsm.F90', # derived data type definitions 'scm/src/GFS_typedefs.F90', 'scm/src/gmtb_scm_kinds.F90', From 2b3a978df95254a05f28c08e8a10b887d10d5667 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 13 Apr 2020 17:56:25 -0600 Subject: [PATCH 12/26] add snotime as a sfcprop variable --- scm/src/GFS_typedefs.F90 | 10 +++++++++- scm/src/GFS_typedefs.meta | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 0e3d21a7a..1b1e87488 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -305,7 +305,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: smoiseq (:,:) => null() !< real (kind=kind_phys), pointer :: zsnsoxy (:,:) => null() !< - +! -- In/Out for HWRF NOAH LSM + real (kind=kind_phys), pointer :: snotime (:) => null() !--- NSSTM variables (only allocated when [Model%nstf_name(1) > 0]) real (kind=kind_phys), pointer :: tref (:) => null() !< nst_fld%Tref - Reference Temperature @@ -2270,6 +2271,13 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%dgraupelprv = clear_val endif + + ! HWRF NOAH LSM allocate and init when used + ! + if (Model%lsm == Model%lsm_noah_hafs ) then + allocate(Sfcprop%snotime(IM)) + Sfcprop%snotime = clear_val + end if if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_hafs)) then allocate(Sfcprop%z0base(IM)) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 67d55de1b..6feaaf37c 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -1143,6 +1143,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snotime] + standard_name = time_since_last_snowfall + long_name = elapsed time since last snowfall + units = s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [wetness] standard_name = normalized_soil_wetness_for_land_surface_model long_name = normalized soil wetness for lsm From facdcee281bf0e34ab0ca89499adf8255cbf52c4 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 16 Apr 2020 10:54:12 -0600 Subject: [PATCH 13/26] update GFS_typedefs for sflx_glacial and add HWRF SDF/namelist --- ccpp/config/ccpp_prebuild_config.py | 1 + ccpp/physics_namelists/input_HWRF.nml | 122 ++++++++++++++++++ ccpp/suites/suite_SCM_HWRF.xml | 83 ++++++++++++ .../fv3_model_point_glacier.nc | Bin 0 -> 138885 bytes .../case_config/fv3_model_point_glacier.nml | 26 ++++ scm/src/GFS_typedefs.F90 | 8 ++ scm/src/GFS_typedefs.meta | 18 +++ 7 files changed, 258 insertions(+) create mode 100644 ccpp/physics_namelists/input_HWRF.nml create mode 100644 ccpp/suites/suite_SCM_HWRF.xml create mode 100644 scm/data/processed_case_input/fv3_model_point_glacier.nc create mode 100644 scm/etc/case_config/fv3_model_point_glacier.nml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 11fc62153..1f9bfd017 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -145,6 +145,7 @@ 'ccpp/physics/physics/set_soilveg_ruc.F90', 'ccpp/physics/physics/module_soil_pre.F90', 'ccpp/physics/physics/module_sf_noahlsm.F90', + 'ccpp/physics/physics/module_sf_noahlsm_glacial_only.F90', # derived data type definitions 'scm/src/GFS_typedefs.F90', 'scm/src/gmtb_scm_kinds.F90', diff --git a/ccpp/physics_namelists/input_HWRF.nml b/ccpp/physics_namelists/input_HWRF.nml new file mode 100644 index 000000000..1d41bf56d --- /dev/null +++ b/ccpp/physics_namelists/input_HWRF.nml @@ -0,0 +1,122 @@ +&gfs_physics_nml + fhzero = 6. + h2o_phys = .true. + ldiag3d = .true. + fhcyc = 0. + use_ufo = .true. + pre_rad = .false. + ncld = 5 + imp_physics = 15 + spec_adv = .true. + RHGRD = 0.98 + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 1 + iems = 1 + iaer = 111 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .true. + hurr_pbl = .true. + moninq_fac = -1.0 + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + cdmbgwd = 3.5,0.25 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsm = 4 + debug = .false. + oz_phys = .false. + oz_phys_2015 = .true. + nstf_name = 2,1,0,0,0 + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + effr_in = .true. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_sfcperts = .false. + icloud = 3 + iovr_lw = 4 + iovr_sw = 4 +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .false. + fast_sat_adj = .false. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 ! This is a key parameter for cloud water + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. +/ + +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 25 +/ diff --git a/ccpp/suites/suite_SCM_HWRF.xml b/ccpp/suites/suite_SCM_HWRF.xml new file mode 100644 index 000000000..a3417b369 --- /dev/null +++ b/ccpp/suites/suite_SCM_HWRF.xml @@ -0,0 +1,83 @@ + + + + + + GFS_time_vary_pre + GFS_rrtmg_setup + GFS_rad_time_vary + GFS_phys_time_vary + + + + + GFS_suite_interstitial_rad_reset + GFS_rrtmg_pre + rrtmg_lw_pre + rrtmg_lw + rrtmg_lw_post + rrtmg_sw_pre + rrtmg_sw + rrtmg_sw_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 + sfc_noah_GFS_pre + sfc_noah + sfc_noah_GFS_post + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + 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 + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + samfdeepcnv + GFS_DCNV_generic_post + GFS_SCNV_generic_pre + samfshalcnv + GFS_SCNV_generic_post + GFS_suite_interstitial_4 + cnvc90 + GFS_MP_generic_pre + mp_fer_hires + GFS_MP_generic_post + maximum_hourly_diagnostics + + + diff --git a/scm/data/processed_case_input/fv3_model_point_glacier.nc b/scm/data/processed_case_input/fv3_model_point_glacier.nc new file mode 100644 index 0000000000000000000000000000000000000000..e5ce1fdd5e249837ef173dfc28fd4be412ab36eb GIT binary patch literal 138885 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 literal 0 HcmV?d00001 diff --git a/scm/etc/case_config/fv3_model_point_glacier.nml b/scm/etc/case_config/fv3_model_point_glacier.nml new file mode 100644 index 000000000..c7e2a0e20 --- /dev/null +++ b/scm/etc/case_config/fv3_model_point_glacier.nml @@ -0,0 +1,26 @@ +$case_config +model_name = 'FV3', +n_columns = 1, +case_name = 'fv3_model_point_glacier', +dt = 900.0, +time_scheme = 1, +runtime = 86400, +output_frequency = 900.0, +n_levels = 64, +output_file = 'output', +case_data_dir = '../data/processed_case_input', +vert_coord_data_dir = '../data/vert_coord_data', +thermo_forcing_type = 0, +model_ics=.true., +mom_forcing_type = 0, +relax_time = 7200.0, +sfc_flux_spec = .false., +sfc_type=1, +reference_profile_choice = 2, +C_RES = 96, +year = 2016, +month = 10, +day = 3, +hour = 0, +$end + diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 1b1e87488..0dabd56db 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -718,6 +718,8 @@ module GFS_typedefs real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM HAFS integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: isurban !< vegetation/land use type corresponding to the urban environment for the chosen ivegsrc + integer :: isice !< vegetation/land use type corresponding to permanent ice/snow for the chosen ivegsrc + integer :: iswater !< vegetation/land use type corresponding to water bodies for the chosen ivegsrc integer :: iopt_thcnd !< option to treat thermal conductivity in Noah LSM (new in 3.8) !< = 1, original (default) !< = 2, McCumber and Pielke for silt loam and sandy loam @@ -1648,6 +1650,7 @@ module GFS_typedefs logical, pointer :: flag_guess(:) => null() !< logical, pointer :: flag_iter(:) => null() !< logical, pointer :: flag_lsm(:) => null() !< + logical, pointer :: flag_lsm_glacier(:)=> null() !< real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< real (kind=kind_phys), pointer :: ffmm_ocean(:) => null() !< @@ -3385,6 +3388,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 end if Model%isurban = -999 !GJF isurban is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%isice = -999 !GJF isice is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%iswater = -999 !GJF iswater is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init Model%iopt_thcnd = iopt_thcnd Model%ua_phys = ua_phys Model%usemonalb = usemonalb @@ -5811,6 +5816,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%dqsdt2 (IM)) allocate (Interstitial%drain_in_m_sm1 (IM)) allocate (Interstitial%flag_lsm (IM)) + allocate (Interstitial%flag_lsm_glacier(IM)) allocate (Interstitial%qs1 (IM)) allocate (Interstitial%qv1 (IM)) allocate (Interstitial%rho1 (IM)) @@ -6353,6 +6359,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%dqsdt2 = clear_val Interstitial%drain_in_m_sm1 = clear_val Interstitial%flag_lsm = .false. + Interstitial%flag_lsm_glacier= .false. Interstitial%qs1 = huge Interstitial%qv1 = huge Interstitial%rho1 = clear_val @@ -6727,6 +6734,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%dqsdt2 ) = ', sum(Interstitial%dqsdt2 ) write (0,*) 'sum(Interstitial%drain_in_m_sm1 ) = ', sum(Interstitial%drain_in_m_sm1 ) write (0,*) 'Interstitial%flag_lsm(1) = ', Interstitial%flag_lsm(1) + write (0,*) 'Interstitial%flag_lsm_glacier(1) = ', Interstitial%flag_lsm_glacier(1) write (0,*) 'sum(Interstitial%qs1 ) = ', sum(Interstitial%qs1 ) write (0,*) 'sum(Interstitial%qv1 ) = ', sum(Interstitial%qv1 ) write (0,*) 'sum(Interstitial%rho1 ) = ', sum(Interstitial%rho1 ) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 6feaaf37c..383898830 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -2757,6 +2757,18 @@ units = index dimensions = () type = integer +[isice] + standard_name = ice_vegetation_category + long_name = index of the permanent snow/ice category in the chosen vegetation dataset + units = index + dimensions = () + type = integer +[iswater] + standard_name = water_vegetation_category + long_name = index of the water body vegetation category in the chosen vegetation dataset + units = index + dimensions = () + type = integer [iopt_thcnd] standard_name = flag_for_thermal_conductivity_option long_name = choice for thermal conductivity option (see module_sf_noahlsm) @@ -6980,6 +6992,12 @@ units = flag dimensions = (horizontal_dimension) type = logical +[flag_lsm_glacier] + standard_name = flag_for_calling_land_surface_model_glacier + long_name = flag for calling land surface model over glacier + units = flag + dimensions = (horizontal_dimension) + type = logical [ffmm_ocean] standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean long_name = Monin-Obukhov similarity function for momentum over ocean From 472f8a21322f898af1489ee3161b4d56e00adc07 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 16 Apr 2020 14:02:53 -0600 Subject: [PATCH 14/26] move sthick --- scm/src/GFS_typedefs.F90 | 7 ++++--- scm/src/GFS_typedefs.meta | 14 +++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 0dabd56db..b67832f97 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -261,7 +261,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: slc (:,:) => null() !< liquid soil moisture real (kind=kind_phys), pointer :: smc (:,:) => null() !< total soil moisture real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature - real (kind=kind_phys), pointer :: sthick (:) => null() !< soil layer thickness (m) !--- Out real (kind=kind_phys), pointer :: t2m (:) => null() !< 2 meter temperature @@ -1806,6 +1805,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: soilm_in_m(:) => null() !< integer, pointer :: soiltype(:) => null() !< real (kind=kind_phys), pointer :: stc_save(:,:) => null() !< + real (kind=kind_phys), pointer :: sthick (:) => null() !< real (kind=kind_phys), pointer :: stress(:) => null() !< real (kind=kind_phys), pointer :: stress_ice(:) => null() !< real (kind=kind_phys), pointer :: stress_land(:) => null() !< @@ -2110,7 +2110,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%slc (IM,Model%lsoil)) allocate (Sfcprop%smc (IM,Model%lsoil)) allocate (Sfcprop%stc (IM,Model%lsoil)) - allocate (Sfcprop%sthick (Model%lsoil)) Sfcprop%hice = clear_val Sfcprop%weasd = clear_val @@ -2124,7 +2123,6 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%slc = clear_val Sfcprop%smc = clear_val Sfcprop%stc = clear_val - Sfcprop%sthick = clear_val !--- Out allocate (Sfcprop%t2m (IM)) @@ -5831,6 +5829,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%snohf_snowmelt (IM)) allocate (Interstitial%soilm_in_m (IM)) allocate (Interstitial%stc_save (IM,Model%lsoil)) + allocate (Interstitial%sthick (Model%lsoil)) allocate (Interstitial%th1 (IM)) allocate (Interstitial%tprcp_rate_land (IM)) allocate (Interstitial%tsfc_land_save (IM)) @@ -6374,6 +6373,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%snohf_snowmelt = clear_val Interstitial%soilm_in_m = clear_val Interstitial%stc_save = clear_val + Interstitial%sthick = clear_val Interstitial%th1 = clear_val Interstitial%tprcp_rate_land = huge Interstitial%tsfc_land_save = huge @@ -6746,6 +6746,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%snohf_frzgra ) = ', sum(Interstitial%snohf_frzgra ) write (0,*) 'sum(Interstitial%snohf_snowmelt ) = ', sum(Interstitial%snohf_snowmelt ) write (0,*) 'sum(Interstitial%soilm_in_m ) = ', sum(Interstitial%soilm_in_m ) + write (0,*) 'sum(Interstitial%sthick ) = ', sum(Interstitial%sthick ) write (0,*) 'sum(Interstitial%th1 ) = ', sum(Interstitial%th1 ) write (0,*) 'sum(Interstitial%tprcp_rate_land ) = ', sum(Interstitial%tprcp_rate_land ) write (0,*) 'sum(Interstitial%tsfc_land_save ) = ', sum(Interstitial%tsfc_land_save ) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 383898830..1e05f4695 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -751,13 +751,6 @@ dimensions = (horizontal_dimension,soil_vertical_dimension) type = real kind = kind_phys -[sthick] - standard_name = soil_layer_thickness - long_name = soil layer thickness - units = m - dimensions = (soil_vertical_dimension) - type = real - kind = kind_phys [t2m] standard_name = temperature_at_2m long_name = 2 meter temperature @@ -8114,6 +8107,13 @@ dimensions = (horizontal_dimension,soil_vertical_dimension) type = real kind = kind_phys +[sthick] + standard_name = soil_layer_thickness + long_name = soil layer thickness + units = m + dimensions = (soil_vertical_dimension) + type = real + kind = kind_phys [stress] standard_name = surface_wind_stress long_name = surface wind stress From 95a698610440d7d74dc1b175a0220fe4b50480af Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Fri, 17 Apr 2020 17:44:57 -0600 Subject: [PATCH 15/26] change away from hafs name --- ccpp/config/ccpp_prebuild_config.py | 4 +- ...a_hafs.nml => input_GFS_v16beta_wrfv4.nml} | 0 ...fs.xml => suite_SCM_GFS_v16beta_wrfv4.xml} | 8 +-- ccpp/suites/suite_SCM_HWRF.xml | 6 +-- scm/src/GFS_typedefs.F90 | 53 ++++++++++--------- scm/src/GFS_typedefs.meta | 14 ++--- 6 files changed, 43 insertions(+), 42 deletions(-) rename ccpp/physics_namelists/{input_GFS_v16beta_hafs.nml => input_GFS_v16beta_wrfv4.nml} (100%) rename ccpp/suites/{suite_SCM_GFS_v16beta_hafs.xml => suite_SCM_GFS_v16beta_wrfv4.xml} (93%) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 1f9bfd017..f77d12cee 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -231,8 +231,8 @@ 'ccpp/physics/physics/sfc_cice.f' : ['physics'], 'ccpp/physics/physics/sfc_diff.f' : ['physics'], 'ccpp/physics/physics/sfc_drv.f' : ['physics'], - 'ccpp/physics/physics/sfc_noah_GFS_interstitial.F90' : ['physics'], - 'ccpp/physics/physics/sfc_noah.F90' : ['physics'], + 'ccpp/physics/physics/sfc_noah_wrfv4_interstitial.F90' : ['physics'], + 'ccpp/physics/physics/sfc_noah_wrfv4.F90' : ['physics'], 'ccpp/physics/physics/sfc_noahmp_drv.f' : ['physics'], 'ccpp/physics/physics/sfc_nst.f' : ['physics'], 'ccpp/physics/physics/sfc_ocean.F' : ['physics'], diff --git a/ccpp/physics_namelists/input_GFS_v16beta_hafs.nml b/ccpp/physics_namelists/input_GFS_v16beta_wrfv4.nml similarity index 100% rename from ccpp/physics_namelists/input_GFS_v16beta_hafs.nml rename to ccpp/physics_namelists/input_GFS_v16beta_wrfv4.nml diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml b/ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml similarity index 93% rename from ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml rename to ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml index a4a127864..7ca2d3887 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta_hafs.xml +++ b/ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre @@ -41,9 +41,9 @@ sfc_nst_pre sfc_nst sfc_nst_post - sfc_noah_GFS_pre - sfc_noah - sfc_noah_GFS_post + sfc_noah_wrfv4_pre + sfc_noah_wrfv4 + sfc_noah_wrfv4_post sfc_sice GFS_surface_loop_control_part2 diff --git a/ccpp/suites/suite_SCM_HWRF.xml b/ccpp/suites/suite_SCM_HWRF.xml index a3417b369..0a14448e0 100644 --- a/ccpp/suites/suite_SCM_HWRF.xml +++ b/ccpp/suites/suite_SCM_HWRF.xml @@ -41,9 +41,9 @@ sfc_nst_pre sfc_nst sfc_nst_post - sfc_noah_GFS_pre - sfc_noah - sfc_noah_GFS_post + sfc_noah_wrfv4_pre + sfc_noah_wrfv4 + sfc_noah_wrfv4_post sfc_sice GFS_surface_loop_control_part2 diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index b67832f97..01e3d466c 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -697,24 +697,24 @@ module GFS_typedefs integer :: lsm_noah=1 !< flag for NOAH land surface model integer :: lsm_noahmp=2 !< flag for NOAH land surface model integer :: lsm_ruc=3 !< flag for RUC land surface model - integer :: lsm_noah_hafs = 4 !< flag for NOAH land surface model for HAFS application + integer :: lsm_noah_wrfv4 = 4 !< flag for NOAH land surface from WRF v4.0 integer :: lsoil !< number of soil layers integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) - !< ivegsrc = 3 => NLCD40 (40 category, NOAH/HAFS only) - !< ivegsrc = 4 => USGS-RUC (28 category, NOAH/HAFS only) - !< ivegsrc = 5 => MODI-RUC (21 category, NOAH/HAFS only) + !< ivegsrc = 3 => NLCD40 (40 category, NOAH WRFv4 only) + !< ivegsrc = 4 => USGS-RUC (28 category, NOAH WRFv4 only) + !< ivegsrc = 5 => MODI-RUC (21 category, NOAH WRFv4 only) integer :: isot !< isot = 0 => Zobler soil type ( 9 category) !< isot = 1 => STATSGO soil type (19 category, AKA 'STAS'(?)) - !< isot = 2 => STAS-RUC soil type (19 category, NOAH/HAFS only) + !< isot = 2 => STAS-RUC soil type (19 category, NOAH WRFv4 only) integer :: lsoil_lsm !< number of soil layers internal to land surface model integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm - logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) - logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM HAFS - logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS - real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM HAFS + logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) + logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM WRFv4 + logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 + real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM WRFv4 integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: isurban !< vegetation/land use type corresponding to the urban environment for the chosen ivegsrc integer :: isice !< vegetation/land use type corresponding to permanent ice/snow for the chosen ivegsrc @@ -2275,16 +2275,16 @@ subroutine sfcprop_create (Sfcprop, IM, Model) ! HWRF NOAH LSM allocate and init when used ! - if (Model%lsm == Model%lsm_noah_hafs ) then + if (Model%lsm == Model%lsm_noah_wrfv4 ) then allocate(Sfcprop%snotime(IM)) Sfcprop%snotime = clear_val end if - if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_hafs)) then + if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_wrfv4)) then allocate(Sfcprop%z0base(IM)) Sfcprop%z0base = clear_val end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then allocate(Sfcprop%semisbase(IM)) Sfcprop%semisbase = clear_val end if @@ -2795,10 +2795,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model - logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM HAFS) - logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM HAFS - logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM HAFS - real(kind=kind_phys) :: aoasis = 1.0 !< potential evaporation multiplication factor for NOAH LSM HAFS + logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) + logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM WRFv4 + logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 + real(kind=kind_phys) :: aoasis = 1.0 !< potential evaporation multiplication factor for NOAH LSM WRFv4 integer :: fasdas = 0 !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) @@ -3361,8 +3361,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lsm = lsm Model%lsoil = lsoil ! Consistency check for RUC LSM - if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_hafs) .and. Model%nscyc>0) then - write(0,*) 'Logic error: RUC LSM and NOAH HAFS LSM cannot be used with surface data cycling at this point (fhcyc>0)' + if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_wrfv4) .and. Model%nscyc>0) then + write(0,*) 'Logic error: RUC LSM and NOAH WRFv4 LSM cannot be used with surface data cycling at this point (fhcyc>0)' stop end if ! Flag to read leaf area index from input files (initial conditions) @@ -3385,9 +3385,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 end if - Model%isurban = -999 !GJF isurban is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init - Model%isice = -999 !GJF isice is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init - Model%iswater = -999 !GJF iswater is only used in NOAH/HAFS and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%isurban = -999 !GJF isurban is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%isice = -999 !GJF isice is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%iswater = -999 !GJF iswater is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init Model%iopt_thcnd = iopt_thcnd Model%ua_phys = ua_phys Model%usemonalb = usemonalb @@ -3854,8 +3854,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print *,'iopt_stc = ', Model%iopt_stc elseif (Model%lsm == Model%lsm_ruc) then print *,' RUC Land Surface Model used' - elseif (Model%lsm == Model%lsm_noah_hafs) then - print *,' NOAH/HAFS Land Surface Model used' + elseif (Model%lsm == Model%lsm_noah_wrfv4) then + print *,' NOAH WRFv4 Land Surface Model used' else print *,' Unsupported LSM type - job aborted - lsm=',Model%lsm stop @@ -5807,7 +5807,8 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%t2mmp (IM)) allocate (Interstitial%q2mp (IM)) end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then + write(*,*) 'ALLOCATING WRF4 HERE' allocate (Interstitial%canopy_save (IM)) allocate (Interstitial%chk_land (IM)) allocate (Interstitial%cmc (IM)) @@ -6351,7 +6352,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%t2mmp = clear_val Interstitial%q2mp = clear_val end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then Interstitial%canopy_save = clear_val Interstitial%chk_land = huge Interstitial%cmc = clear_val @@ -6727,7 +6728,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) end if - if (Model%lsm == Model%lsm_noah_hafs) then + if (Model%lsm == Model%lsm_noah_wrfv4) then write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 1e05f4695..026db45d1 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -2671,9 +2671,9 @@ units = flag dimensions = () type = integer -[lsm_noah_hafs] - standard_name = flag_for_noah_hafs_land_surface_scheme - long_name = flag for NOAH HAFS land surface model +[lsm_noah_wrfv4] + standard_name = flag_for_noah_wrfv4_land_surface_scheme + long_name = flag for NOAH WRFv4 land surface model units = flag dimensions = () type = integer @@ -2709,26 +2709,26 @@ type = logical [ua_phys] standard_name = flag_for_noah_lsm_ua_extension - long_name = flag for using University of Arizona(?) extension for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = flag for using University of Arizona(?) extension for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = logical [usemonalb] standard_name = flag_for_reading_surface_diffused_shortwave_albedo_from_input - long_name = flag for reading surface diffused shortwave albedo for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = flag for reading surface diffused shortwave albedo for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = logical [aoasis] standard_name = potential_evaporation_multiplicative_factor - long_name = potential evaporation multiplicative factor for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = potential evaporation multiplicative factor for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = none dimensions = () type = real kind = kind_phys [fasdas] standard_name = flag_flux_adjusting_surface_data_assimilation_system - long_name = flag to use the flux adjusting surface data assimilation system for NOAH LSM HAFS (see module_sf_noahlsm.F) + long_name = flag to use the flux adjusting surface data assimilation system for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = integer From b8ed24f7f00db8301f93db8da6519d26fa830acd Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 20 Apr 2020 14:31:52 -0600 Subject: [PATCH 16/26] add variables to GFS_typedefs for HWRF SAS --- scm/src/GFS_typedefs.F90 | 27 ++++++++++++++++++++++----- scm/src/GFS_typedefs.meta | 12 ++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 5d5030865..cd6e54a47 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -265,8 +265,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: th2m (:) => null() !< 2 meter potential temperature real (kind=kind_phys), pointer :: q2m (:) => null() !< 2 meter humidity -! -- In/Out for Noah MP - real (kind=kind_phys), pointer :: snowxy (:) => null() ! +! -- In/Out for Noah MP + real (kind=kind_phys), pointer :: snowxy (:) => null() !< real (kind=kind_phys), pointer :: tvxy (:) => null() !< veg temp real (kind=kind_phys), pointer :: tgxy (:) => null() !< ground temp real (kind=kind_phys), pointer :: canicexy(:) => null() !< @@ -293,7 +293,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: xlaixy (:) => null() !< real (kind=kind_phys), pointer :: taussxy (:) => null() !< real (kind=kind_phys), pointer :: smcwtdxy(:) => null() !< - real (kind=kind_phys), pointer :: deeprechxy(:) => null() !< + real (kind=kind_phys), pointer :: deeprechxy(:)=> null() !< real (kind=kind_phys), pointer :: rechxy (:) => null() !< real (kind=kind_phys), pointer :: snicexy (:,:) => null() !< @@ -777,6 +777,7 @@ module GFS_typedefs integer :: imfshalcnv_samf = 2 !< flag for SAMF scale- & aerosol-aware mass-flux shallow convection scheme integer :: imfshalcnv_gf = 3 !< flag for scale- & aerosol-aware Grell-Freitas scheme (GSD) integer :: imfshalcnv_ntiedtke = 4 !< flag for new Tiedtke scheme (CAPS) + logical :: hwrf_samfdeep !< flag for HWRF SAMF deepcnv scheme (HWRF) integer :: imfdeepcnv !< flag for mass-flux deep convection scheme !< 1: July 2010 version of SAS conv scheme !< current operational version as of 2016 @@ -788,6 +789,7 @@ module GFS_typedefs integer :: imfdeepcnv_samf = 2 !< flag for SAMF scale- & aerosol-aware mass-flux deep convection scheme integer :: imfdeepcnv_gf = 3 !< flag for scale- & aerosol-aware Grell-Freitas scheme (GSD) integer :: imfdeepcnv_ntiedtke = 4 !< flag for new Tiedtke scheme (CAPS) + logical :: hwrf_samfshal !< flag for HWRF SAMF shalcnv scheme (HWRF) integer :: isatmedmf !< flag for scale-aware TKE-based moist edmf scheme !< 0: initial version of satmedmf (Nov. 2018) !< 1: updated version of satmedmf (as of May 2019) @@ -2489,7 +2491,7 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%ca_turb = clear_val Coupling%ca_shal = clear_val Coupling%ca_rad = clear_val - Coupling%ca_micro = clear_val + Coupling%ca_micro = clear_val Coupling%cape = clear_val Coupling%tconvtend = clear_val Coupling%qconvtend = clear_val @@ -2823,7 +2825,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< 0: initial version of satmedmf (Nov. 2018) !< 1: updated version of satmedmf (as of May 2019) logical :: do_deep = .true. !< whether to do deep convection - + logical :: hwrf_samfdeep = .false. !< flag for HWRF SAMF deepcnv scheme + logical :: hwrf_samfshal = .false. !< flag for HWRF SAMF shalcnv scheme logical :: do_mynnedmf = .false. !< flag for MYNN-EDMF logical :: do_mynnsfclay = .false. !< flag for MYNN Surface Layer Scheme integer :: grav_settling = 0 @@ -3034,6 +3037,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & bl_mynn_mixqt, icloud_bl, bl_mynn_tkeadvect, gwd_opt, & var_ric, coef_ric_l, coef_ric_s, & do_myjsfc, do_myjpbl, & + hwrf_samfdeep, hwrf_samfshal, & h2o_phys, pdfcld, shcnvcw, redrag, hybedmf, satmedmf, & shinhong, do_ysu, dspheat, hurr_pbl, lheatstrg, cnvcld, & random_clds, shal_cnv, imfshalcnv, imfdeepcnv, isatmedmf, & @@ -3356,6 +3360,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%shoc_parm = shoc_parm Model%shocaftcnv = shocaftcnv Model%shoc_cld = shoc_cld + +!HWRF physics suite + if (hwrf_samfdeep .and. imfdeepcnv .ne. 2) then + write(*,*) 'Logic error: hwrf_samfdeep has to be used along with imfdeepcnv=2' + stop + end if + if (hwrf_samfshal .and. imfshalcnv .ne. 2) then + write(*,*) 'Logic error: hwrf_samfshal has to be used along with imfshalcnv=2' + stop + end if + Model%hwrf_samfdeep = hwrf_samfdeep + Model%hwrf_samfshal = hwrf_samfshal + if (oz_phys .and. oz_phys_2015) then write(*,*) 'Logic error: can only use one ozone physics option (oz_phys or oz_phys_2015), not both. Exiting.' stop diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 5c208740a..c212b00ca 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -2988,6 +2988,18 @@ units = flag dimensions = () type = integer +[hwrf_samfdeep] + standard_name = flag_for_hwrf_samfdeepcnv_scheme + long_name = flag for hwrf samfdeepcnv scheme + units = flag + dimensions = () + type = logical +[hwrf_samfshal] + standard_name = flag_for_hwrf_samfshalcnv_scheme + long_name = flag for hwrf samfshalcnv scheme + units = flag + dimensions = () + type = logical [isatmedmf] standard_name = choice_of_scale_aware_TKE_moist_EDMF_PBL long_name = choice of scale-aware TKE moist EDMF PBL scheme From 5dc86bff6fc832f8a8a860d3992652cfb8705a81 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Wed, 22 Apr 2020 21:08:31 -0600 Subject: [PATCH 17/26] initial changes for GFDL surface layer scheme --- ccpp/config/ccpp_prebuild_config.py | 2 + .../suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml | 82 +++++++++++++++++++ scm/src/GFS_typedefs.meta | 7 ++ 3 files changed, 91 insertions(+) create mode 100644 ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 3d93e02ae..6c2aa1dd0 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -144,6 +144,7 @@ 'ccpp/physics/physics/namelist_soilveg_ruc.F90', 'ccpp/physics/physics/set_soilveg_ruc.F90', 'ccpp/physics/physics/module_soil_pre.F90', + 'ccpp/physics/physics/module_sf_exchcoef.f90', # derived data type definitions 'scm/src/GFS_typedefs.F90', 'scm/src/gmtb_scm_kinds.F90', @@ -183,6 +184,7 @@ 'ccpp/physics/physics/gcm_shoc.F90' : ['physics'], 'ccpp/physics/physics/get_prs_fv3.F90' : ['physics'], 'ccpp/physics/physics/gfdl_cloud_microphys.F90' : ['physics'], + 'ccpp/physics/physics/gfdl_sfc_layer.F90' : ['physics'], 'ccpp/physics/physics/gscond.f' : ['physics'], 'ccpp/physics/physics/gwdc.f' : ['physics'], 'ccpp/physics/physics/gwdps.f' : ['physics'], diff --git a/ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml b/ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml new file mode 100644 index 000000000..6b4c94283 --- /dev/null +++ b/ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml @@ -0,0 +1,82 @@ + + + + + + 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 + + + + + gfdl_sfc_layer + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + lsm_noah + sfc_sice + GFS_surface_loop_control_part2 + + + + GFS_surface_composites_post + sfc_diag + sfc_diag_post + GFS_surface_generic_post + GFS_PBL_generic_pre + hedmf + 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 + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + 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 + + + diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index c212b00ca..088c805c7 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -20,6 +20,13 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys +[prsi(:,1)] + standard_name = air_pressure_at_lowest_model_interface + long_name = air pressure at model layer interfaces + units = Pa + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [prsik] standard_name = dimensionless_exner_function_at_model_interfaces long_name = dimensionless Exner function at model layer interfaces From 18c433d2508c4b8f8c9f5bb0f9cae7f140b04ff1 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 27 Apr 2020 16:03:45 -0600 Subject: [PATCH 18/26] add roughness length to non-prescribed surface flux cases (needs to be initialized to something other than 0 in gfdl_sfc_layer) --- scm/etc/case_config/astex.nml | 1 + scm/etc/case_config/twpice.nml | 1 + scm/src/gmtb_scm_type_defs.F90 | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scm/etc/case_config/astex.nml b/scm/etc/case_config/astex.nml index de8389425..30c1f54c8 100644 --- a/scm/etc/case_config/astex.nml +++ b/scm/etc/case_config/astex.nml @@ -15,6 +15,7 @@ mom_forcing_type = 2, relax_time = 7200.0, sfc_flux_spec = .false., sfc_type = 0, +sfc_roughness_length_cm = 0.02, reference_profile_choice = 1, year = 1992, month = 6, diff --git a/scm/etc/case_config/twpice.nml b/scm/etc/case_config/twpice.nml index b8e81e3dc..f9c2b16d4 100644 --- a/scm/etc/case_config/twpice.nml +++ b/scm/etc/case_config/twpice.nml @@ -15,6 +15,7 @@ mom_forcing_type = 3, relax_time = 7200.0, sfc_flux_spec = .false., sfc_type = 0, +sfc_roughness_length_cm = 0.02, reference_profile_choice = 1, year = 2006, month = 1, diff --git a/scm/src/gmtb_scm_type_defs.F90 b/scm/src/gmtb_scm_type_defs.F90 index cc60f74c3..08f62b953 100644 --- a/scm/src/gmtb_scm_type_defs.F90 +++ b/scm/src/gmtb_scm_type_defs.F90 @@ -896,13 +896,13 @@ subroutine physics_associate(physics, scm_state, col) physics%Stateout(col)%gq0 => scm_state%state_tracer(col,:,:,:,1) endif + physics%Sfcprop(col)%zorl => scm_state%sfc_roughness_length_cm if(scm_state%sfc_flux_spec) then physics%Sfcprop(col)%spec_sh_flux => scm_state%sh_flux physics%Sfcprop(col)%spec_lh_flux => scm_state%lh_flux - physics%Sfcprop(col)%zorl => scm_state%sfc_roughness_length_cm endif if(scm_state%model_ics) then - physics%Sfcprop(col)%zorl => scm_state%sfc_roughness_length_cm + !physics%Sfcprop(col)%zorl => scm_state%sfc_roughness_length_cm physics%Sfcprop(col)%canopy => scm_state%canopy(col,:) physics%Sfcprop(col)%hice => scm_state%hice(col,:) physics%Sfcprop(col)%fice => scm_state%fice(col,:) From e614bc018931ae276bc333a50aa575bf4b46bc49 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 27 Apr 2020 20:50:56 -0600 Subject: [PATCH 19/26] add namelist options for GFDL surface layer; add suites that combines HWRF LSM and surface layer for testing --- .../input_GFS_v16beta_hwrf_sfc.nml | 140 +++++++++ .../suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml | 83 +++++ scm/src/GFS_typedefs.F90 | 241 ++++++++++++-- scm/src/GFS_typedefs.meta | 297 +++++++++++++++++- 4 files changed, 720 insertions(+), 41 deletions(-) create mode 100644 ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml create mode 100644 ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml diff --git a/ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml b/ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml new file mode 100644 index 000000000..353c16933 --- /dev/null +++ b/ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml @@ -0,0 +1,140 @@ +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .true. + fhcyc = 0 + use_ufo = .true. + pre_rad = .false. + ncld = 5 + imp_physics = 11 + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 1 + iems = 1 + iaer = 5111 + icliq_sw = 2 + iovr_lw = 3 + iovr_sw = 3 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .true. + isatmedmf = 1 + lheatstrg = .true. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + cdmbgwd = 4.0,0.15,1.0,1.0 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsoil = 4 + lsm = 4 + iopt_dveg = 1 + iopt_crs = 1 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 1 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 1 + iopt_alb = 2 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 1 + sfc_z0_type = 4 + debug = .false. + oz_phys = .false. + oz_phys_2015 = .true. + nstf_name = 2,1,0,0,0 + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .true. + effr_in = .true. + ldiag_ugwp = .false. + do_ugwp = .false. + do_tofd = .true. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + do_sfcperts = .false. +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .F. + const_vs = .F. + const_vg = .F. + const_vr = .F. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .false. + fast_sat_adj = .false. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 ! This is a key parameter for cloud water + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0E-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. + reiflag = 2 +/ + +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + launch_level = 27 +/ + diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml b/ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml new file mode 100644 index 000000000..3ee8bbead --- /dev/null +++ b/ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml @@ -0,0 +1,83 @@ + + + + + + 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 + + + + gfdl_sfc_layer + GFS_surface_loop_control_part1 + sfc_nst_pre + sfc_nst + sfc_nst_post + sfc_noah_wrfv4_pre + sfc_noah_wrfv4 + sfc_noah_wrfv4_post + 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 + GFS_DCNV_generic_pre + get_phi_fv3 + GFS_suite_interstitial_3 + 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 + + + diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index cd6e54a47..a32c87bb6 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -220,6 +220,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: fice (:) => null() !< ice fraction over open water grid ! real (kind=kind_phys), pointer :: hprim (:) => null() !< topographic standard deviation in m real (kind=kind_phys), pointer :: hprime (:,:) => null() !< orographic metrics + real (kind=kind_phys), pointer :: z0base (:) => null() !< background or baseline surface roughness length in m + real (kind=kind_phys), pointer :: semisbase(:)=> null() !< background surface emissivity !--- In (radiation only) real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction @@ -302,7 +304,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: smoiseq (:,:) => null() !< real (kind=kind_phys), pointer :: zsnsoxy (:,:) => null() !< - +! -- In/Out for HWRF NOAH LSM + real (kind=kind_phys), pointer :: snotime (:) => null() !--- NSSTM variables (only allocated when [Model%nstf_name(1) > 0]) real (kind=kind_phys), pointer :: tref (:) => null() !< nst_fld%Tref - Reference Temperature @@ -685,25 +688,40 @@ module GFS_typedefs !--- GFDL microphysical paramters logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency - + !--- Thompson,GFDL mp parameter logical :: lrefres !< flag for radar reflectivity in restart file - + !--- land/surface model parameters integer :: lsm !< flag for land surface model lsm=1 for noah lsm integer :: lsm_noah=1 !< flag for NOAH land surface model integer :: lsm_noahmp=2 !< flag for NOAH land surface model integer :: lsm_ruc=3 !< flag for RUC land surface model + integer :: lsm_noah_wrfv4 = 4 !< flag for NOAH land surface from WRF v4.0 integer :: lsoil !< number of soil layers - integer :: lsoil_lsm !< number of soil layers internal to land surface model - integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model - integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm - logical :: rdlai integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) + !< ivegsrc = 3 => NLCD40 (40 category, NOAH WRFv4 only) + !< ivegsrc = 4 => USGS-RUC (28 category, NOAH WRFv4 only) + !< ivegsrc = 5 => MODI-RUC (21 category, NOAH WRFv4 only) integer :: isot !< isot = 0 => Zobler soil type ( 9 category) - !< isot = 1 => STATSGO soil type (19 category) + !< isot = 1 => STATSGO soil type (19 category, AKA 'STAS'(?)) + !< isot = 2 => STAS-RUC soil type (19 category, NOAH WRFv4 only) + integer :: lsoil_lsm !< number of soil layers internal to land surface model + integer :: lsnow_lsm !< maximum number of snow layers internal to land surface model + integer :: lsnow_lsm_lbound!< lower bound for snow arrays, depending on lsnow_lsm + logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) + logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM WRFv4 + logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 + real(kind=kind_phys) :: aoasis !< potential evaporation multiplication factor for NOAH LSM WRFv4 + integer :: fasdas !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON + integer :: isurban !< vegetation/land use type corresponding to the urban environment for the chosen ivegsrc + integer :: isice !< vegetation/land use type corresponding to permanent ice/snow for the chosen ivegsrc + integer :: iswater !< vegetation/land use type corresponding to water bodies for the chosen ivegsrc + integer :: iopt_thcnd !< option to treat thermal conductivity in Noah LSM (new in 3.8) + !< = 1, original (default) + !< = 2, McCumber and Pielke for silt loam and sandy loam ! -- the Noah MP options integer :: iopt_dveg ! 1-> off table lai 2-> on 3-> off;4->off;5 -> on @@ -720,7 +738,13 @@ module GFS_typedefs integer :: iopt_stc !snow/soil temperature time scheme (only layer 1) logical :: use_ufo !< flag for gcycle surface option - + + ! GFDL Surface Layer options + logical :: lcurr_sf !flag for taking ocean currents into account in GFDL surface layer + logical :: pert_cd !flag for perturbing the surface drag coefficient for momentum in surface layer scheme (1 = True) + integer :: ntsflg !flag for updating skin temperature in the GFDL surface layer scheme + real(kind=kind_phys) :: sfenth !enthalpy flux factor 0 zot via charnock ..>0 zot enhanced>15m/s + !--- tuning parameters for physical parameterizations logical :: ras !< flag for ras convection scheme logical :: flipv !< flag for vertical direction flip (ras) @@ -1170,7 +1194,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: phy_myj_qz0(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_uz0(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_vz0(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_z0base(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_akhs(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_akms(:) => null() ! real (kind=kind_phys), pointer :: phy_myj_chkqlm(:) => null() ! @@ -1421,9 +1444,10 @@ module GFS_typedefs !--- MP quantities for 3D diagnositics real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm - + !--- Extra PBL diagnostics real (kind=kind_phys), pointer :: dkudiagnostic(:,:) => null() !< Eddy diffusitivity from the EDMF and EDMF-TKE + ! !---vay-2018 UGWP-diagnostics daily mean ! @@ -1545,6 +1569,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: aerodp(:,:) => null() !< real (kind=kind_phys), pointer :: alb1d(:) => null() !< real (kind=kind_phys), pointer :: bexp1d(:) => null() !< + real (kind=kind_phys), pointer :: canopy_save(:) => null() !< real (kind=kind_phys), pointer :: cd(:) => null() !< real (kind=kind_phys), pointer :: cd_ice(:) => null() !< real (kind=kind_phys), pointer :: cd_land(:) => null() !< @@ -1557,6 +1582,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: chh_ice(:) => null() !< real (kind=kind_phys), pointer :: chh_land(:) => null() !< real (kind=kind_phys), pointer :: chh_ocean(:) => null() !< + real (kind=kind_phys), pointer :: chk_land(:) => null() !< real (kind=kind_phys), pointer :: clcn(:,:) => null() !< real (kind=kind_phys), pointer :: cldf(:) => null() !< real (kind=kind_phys), pointer :: cldsa(:,:) => null() !< @@ -1567,6 +1593,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: clw(:,:,:) => null() !< real (kind=kind_phys), pointer :: clw_surf(:) => null() !< real (kind=kind_phys), pointer :: clx(:,:) => null() !< + real (kind=kind_phys), pointer :: cmc(:) => null() !< real (kind=kind_phys), pointer :: cmm_ice(:) => null() !< real (kind=kind_phys), pointer :: cmm_land(:) => null() !< real (kind=kind_phys), pointer :: cmm_ocean(:) => null() !< @@ -1589,8 +1616,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: dkt(:,:) => null() !< real (kind=kind_phys), pointer :: dlength(:) => null() !< real (kind=kind_phys), pointer :: dqdt(:,:,:) => null() !< + real (kind=kind_phys), pointer :: dqsdt2(:) => null() !< real (kind=kind_phys), pointer :: dqsfc1(:) => null() !< real (kind=kind_phys), pointer :: drain(:) => null() !< + real (kind=kind_phys), pointer :: drain_in_m_sm1(:) => null() !< real (kind=kind_phys), pointer :: dtdt(:,:) => null() !< real (kind=kind_phys), pointer :: dtdtc(:,:) => null() !< real (kind=kind_phys), pointer :: dtsfc1(:) => null() !< @@ -1627,6 +1656,8 @@ module GFS_typedefs logical, pointer :: flag_cice(:) => null() !< logical, pointer :: flag_guess(:) => null() !< logical, pointer :: flag_iter(:) => null() !< + logical, pointer :: flag_lsm(:) => null() !< + logical, pointer :: flag_lsm_glacier(:)=> null() !< real (kind=kind_phys), pointer :: ffmm_ice(:) => null() !< real (kind=kind_phys), pointer :: ffmm_land(:) => null() !< real (kind=kind_phys), pointer :: ffmm_ocean(:) => null() !< @@ -1730,6 +1761,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qss_ice(:) => null() !< real (kind=kind_phys), pointer :: qss_land(:) => null() !< real (kind=kind_phys), pointer :: qss_ocean(:) => null() !< + real (kind=kind_phys), pointer :: qs1(:) => null() !< + real (kind=kind_phys), pointer :: qv1(:) => null() !< logical :: radar_reset !< real (kind=kind_phys) :: raddt !< real (kind=kind_phys), pointer :: rainmp(:) => null() !< @@ -1743,7 +1776,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: rb_ocean(:) => null() !< logical :: reset !< real (kind=kind_phys), pointer :: rhc(:,:) => null() !< + real (kind=kind_phys), pointer :: rho1(:) => null() !< real (kind=kind_phys), pointer :: runoff(:) => null() !< + real (kind=kind_phys), pointer :: runoff_in_m_sm1(:) => null() !< real (kind=kind_phys), pointer :: save_q(:,:,:) => null() !< real (kind=kind_phys), pointer :: save_t(:,:) => null() !< real (kind=kind_phys), pointer :: save_u(:,:) => null() !< @@ -1759,27 +1794,40 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sigmafrac(:,:) => null() !< real (kind=kind_phys), pointer :: sigmatot(:,:) => null() !< logical :: skip_macro !< + real (kind=kind_phys), pointer :: slc_save(:,:) => null() !< integer, pointer :: slopetype(:) => null() !< + real (kind=kind_phys), pointer :: smcmax(:) => null() !< + real (kind=kind_phys), pointer :: smc_save(:,:) => null() !< real (kind=kind_phys), pointer :: snowc(:) => null() !< real (kind=kind_phys), pointer :: snowd_ice(:) => null() !< real (kind=kind_phys), pointer :: snowd_land(:) => null() !< + real (kind=kind_phys), pointer :: snowd_land_save(:) => null() !< real (kind=kind_phys), pointer :: snowd_ocean(:) => null() !< + real (kind=kind_phys), pointer :: snow_depth(:) => null() !< real (kind=kind_phys), pointer :: snohf(:) => null() !< + real (kind=kind_phys), pointer :: snohf_snow(:) => null() !< + real (kind=kind_phys), pointer :: snohf_frzgra(:) => null() !< + real (kind=kind_phys), pointer :: snohf_snowmelt(:) => null() !< real (kind=kind_phys), pointer :: snowmp(:) => null() !< real (kind=kind_phys), pointer :: snowmt(:) => null() !< + real (kind=kind_phys), pointer :: soilm_in_m(:) => null() !< integer, pointer :: soiltype(:) => null() !< + real (kind=kind_phys), pointer :: stc_save(:,:) => null() !< + real (kind=kind_phys), pointer :: sthick (:) => null() !< real (kind=kind_phys), pointer :: stress(:) => null() !< real (kind=kind_phys), pointer :: stress_ice(:) => null() !< real (kind=kind_phys), pointer :: stress_land(:) => null() !< real (kind=kind_phys), pointer :: stress_ocean(:) => null() !< real (kind=kind_phys), pointer :: t2mmp(:) => null() !< real (kind=kind_phys), pointer :: theta(:) => null() !< + real (kind=kind_phys), pointer :: th1(:) => null() !< real (kind=kind_phys), pointer :: tice(:) => null() !< real (kind=kind_phys), pointer :: tlvl(:,:) => null() !< real (kind=kind_phys), pointer :: tlyr(:,:) => null() !< real (kind=kind_phys), pointer :: tprcp_ice(:) => null() !< real (kind=kind_phys), pointer :: tprcp_land(:) => null() !< real (kind=kind_phys), pointer :: tprcp_ocean(:) => null() !< + real (kind=kind_phys), pointer :: tprcp_rate_land(:) => null() !< integer :: tracers_start_index !< integer :: tracers_total !< integer :: tracers_water !< @@ -1789,6 +1837,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfa(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ice(:) => null() !< real (kind=kind_phys), pointer :: tsfc_land(:) => null() !< + real (kind=kind_phys), pointer :: tsfc_land_save(:) => null() !< real (kind=kind_phys), pointer :: tsfc_ocean(:) => null() !< real (kind=kind_phys), pointer :: tsfg(:) => null() !< real (kind=kind_phys), pointer :: tsnow(:) => null() !< @@ -1812,6 +1861,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: wcbmax(:) => null() !< real (kind=kind_phys), pointer :: weasd_ocean(:) => null() !< real (kind=kind_phys), pointer :: weasd_land(:) => null() !< + real (kind=kind_phys), pointer :: weasd_land_save(:) => null() !< real (kind=kind_phys), pointer :: weasd_ice(:) => null() !< real (kind=kind_phys), pointer :: wind(:) => null() !< real (kind=kind_phys), pointer :: work1(:) => null() !< @@ -2141,7 +2191,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%iceprv = clear_val Sfcprop%snowprv = clear_val Sfcprop%graupelprv = clear_val - end if + end if ! Noah MP allocate and init when used ! if (Model%lsm == Model%lsm_noahmp ) then @@ -2230,7 +2280,23 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%dgraupelprv = clear_val endif - + + ! HWRF NOAH LSM allocate and init when used + ! + if (Model%lsm == Model%lsm_noah_wrfv4 ) then + allocate(Sfcprop%snotime(IM)) + Sfcprop%snotime = clear_val + end if + + if (Model%do_myjsfc.or.Model%do_myjpbl.or.(Model%lsm == Model%lsm_noah_wrfv4)) then + allocate(Sfcprop%z0base(IM)) + Sfcprop%z0base = clear_val + end if + if (Model%lsm == Model%lsm_noah_wrfv4) then + allocate(Sfcprop%semisbase(IM)) + Sfcprop%semisbase = clear_val + end if + if (Model%lsm == Model%lsm_ruc) then ! For land surface models with different numbers of levels than the four NOAH levels allocate (Sfcprop%wetness (IM)) @@ -2737,12 +2803,19 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: lsoil = 4 !< number of soil layers integer :: lsoil_lsm = -1 !< number of soil layers internal to land surface model; -1 use lsoil integer :: lsnow_lsm = 3 !< maximum number of snow layers internal to land surface model - logical :: rdlai = .false. + logical :: rdlai = .false. !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) + logical :: ua_phys = .false. !< flag for using University of Arizona? extension to NOAH LSM WRFv4 + logical :: usemonalb = .true. !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 + real(kind=kind_phys) :: aoasis = 1.0 !< potential evaporation multiplication factor for NOAH LSM WRFv4 + integer :: fasdas = 0 !< flag to use "flux-adjusting surface data assimilation system"; 0 = OFF, 1 = ON integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) integer :: isot = 0 !< isot = 0 => Zobler soil type ( 9 category) !< isot = 1 => STATSGO soil type (19 category) + integer :: iopt_thcnd = 1 !< option to treat thermal conductivity in Noah LSM (new in 3.8) + !< = 1, original (default) + !< = 2, McCumber and Pielke for silt loam and sandy loam ! -- to use Noah MP, lsm needs to be set to 2 and both ivegsrc and isot are set ! to 1 - MODIS IGBP and STATSGO - the defaults are the same as in the ! scripts;change from namelist @@ -2761,7 +2834,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: iopt_stc = 1 !snow/soil temperature time scheme (only layer 1) logical :: use_ufo = .false. !< flag for gcycle surface option - + + logical :: lcurr_sf = .false. !< flag for taking ocean currents into account in GFDL surface layer + logical :: pert_cd = .false. !< flag for perturbing the surface drag coefficient for momentum in surface layer scheme + integer :: ntsflg = 0 !< flag for updating skin temperature in the GFDL surface layer scheme + real(kind=kind_phys) :: sfenth = 0.0 !< enthalpy flux factor 0 zot via charnock ..>0 zot enhanced>15m/s + !--- tuning parameters for physical parameterizations logical :: ras = .false. !< flag for ras convection scheme logical :: flipv = .true. !< flag for vertical direction flip (ras) @@ -3023,10 +3101,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & avg_max_length, & !--- land/surface model control lsm, lsoil, lsoil_lsm, lsnow_lsm, rdlai, & - nmtvr, ivegsrc, use_ufo, & + nmtvr, ivegsrc, use_ufo, iopt_thcnd, ua_phys, usemonalb, & + aoasis, fasdas, & ! 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, & + ! GFDL surface layer options + lcurr_sf, pert_cd, ntsflg, sfenth, & !--- physical parameterizations ras, trans_trac, old_monin, cnvgwd, mstrat, moist_adj, & cscnv, cal_pre, do_aw, do_shoc, shocaftcnv, shoc_cld, & @@ -3297,8 +3378,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%lsm = lsm Model%lsoil = lsoil ! Consistency check for RUC LSM - if (Model%lsm == Model%lsm_ruc .and. Model%nscyc>0) then - write(0,*) 'Logic error: RUC LSM cannot be used with surface data cycling at this point (fhcyc>0)' + if ((Model%lsm == Model%lsm_ruc .or. Model%lsm == Model%lsm_noah_wrfv4) .and. Model%nscyc>0) then + write(0,*) 'Logic error: RUC LSM and NOAH WRFv4 LSM cannot be used with surface data cycling at this point (fhcyc>0)' stop end if ! Flag to read leaf area index from input files (initial conditions) @@ -3321,10 +3402,24 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 end if + Model%isurban = -999 !GJF isurban is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%isice = -999 !GJF isice is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%iswater = -999 !GJF iswater is only used in NOAH WRFv4 and is initialized in sfc_noah_GFS_interstitial.F90/sfc_noah_GFS_pre_init + Model%iopt_thcnd = iopt_thcnd + Model%ua_phys = ua_phys + Model%usemonalb = usemonalb + Model%aoasis = aoasis + Model%fasdas = fasdas Model%ivegsrc = ivegsrc Model%isot = isot Model%use_ufo = use_ufo - + +! GFDL surface layer options + Model%lcurr_sf = lcurr_sf + Model%pert_cd = pert_cd + Model%ntsflg = ntsflg + Model%sfenth = sfenth + ! Noah MP options from namelist ! Model%iopt_dveg = iopt_dveg @@ -3423,6 +3518,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%wminras = wminras Model%rbcr = rbcr Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 + Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 Model%do_mynnedmf = do_mynnedmf @@ -3479,7 +3575,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ignore_lake = ignore_lake if (Model%frac_grid) then write(0,*) "ERROR: CCPP has not been tested with fractional landmask turned on" -! stop +! stop end if Model%min_lakeice = min_lakeice Model%min_seaice = min_seaice @@ -3794,6 +3890,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & print *,'iopt_stc = ', Model%iopt_stc elseif (Model%lsm == Model%lsm_ruc) then print *,' RUC Land Surface Model used' + elseif (Model%lsm == Model%lsm_noah_wrfv4) then + print *,' NOAH WRFv4 Land Surface Model used' else print *,' Unsupported LSM type - job aborted - lsm=',Model%lsm stop @@ -4287,6 +4385,13 @@ subroutine control_print(Model) print *, ' lsnow_lsm : ', Model%lsnow_lsm print *, ' ivegsrc : ', Model%ivegsrc print *, ' isot : ', Model%isot + print *, ' iopt_thcnd : ', Model%iopt_thcnd + print *, ' ua_phys : ', Model%ua_phys + print *, ' usemonalb : ', Model%usemonalb + print *, ' aoasis : ', Model%aoasis + print *, ' fasdas : ', Model%fasdas + print *, ' ivegsrc : ', Model%ivegsrc + print *, ' isot : ', Model%isot if (Model%lsm == Model%lsm_noahmp) then print *, ' Noah MP LSM is used, the options are' @@ -4304,6 +4409,10 @@ subroutine control_print(Model) print *, ' iopt_stc : ', Model%iopt_stc endif print *, ' use_ufo : ', Model%use_ufo + print *, ' lcurr_sf : ', Model%lcurr_sf + print *, ' pert_cd : ', Model%pert_cd + print *, ' ntsflg : ', Model%ntsflg + print *, ' sfenth : ', Model%sfenth print *, ' ' print *, 'tuning parameters for physical parameterizations' print *, ' ras : ', Model%ras @@ -4709,8 +4818,7 @@ subroutine tbd_create (Tbd, IM, Model) allocate (Tbd%phy_myj_thz0 (IM)) allocate (Tbd%phy_myj_qz0 (IM)) allocate (Tbd%phy_myj_uz0 (IM)) - allocate (Tbd%phy_myj_vz0 (IM)) - allocate (Tbd%phy_myj_z0base (IM)) + allocate (Tbd%phy_myj_vz0 (IM)) allocate (Tbd%phy_myj_akhs (IM)) allocate (Tbd%phy_myj_akms (IM)) allocate (Tbd%phy_myj_chkqlm (IM)) @@ -4723,8 +4831,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%phy_myj_thz0 = clear_val Tbd%phy_myj_qz0 = clear_val Tbd%phy_myj_uz0 = clear_val - Tbd%phy_myj_vz0 = clear_val - Tbd%phy_myj_z0base = clear_val + Tbd%phy_myj_vz0 = clear_val Tbd%phy_myj_akhs = clear_val Tbd%phy_myj_akms = clear_val Tbd%phy_myj_chkqlm = clear_val @@ -5216,7 +5323,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%zmtnblck = zero if (Model%imp_physics == Model%imp_physics_fer_hires) then - Diag%TRAIN = zero + Diag%TRAIN = zero end if Diag%totprcpb = zero @@ -5313,7 +5420,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) ! Extra PBL diagnostics Diag%dkudiagnostic = zero - + ! max hourly diagnostics Diag%refl_10cm = zero Diag%refdmax = -35. @@ -5740,6 +5847,35 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%t2mmp (IM)) allocate (Interstitial%q2mp (IM)) end if + if (Model%lsm == Model%lsm_noah_wrfv4) then + write(*,*) 'ALLOCATING WRF4 HERE' + allocate (Interstitial%canopy_save (IM)) + allocate (Interstitial%chk_land (IM)) + allocate (Interstitial%cmc (IM)) + allocate (Interstitial%dqsdt2 (IM)) + allocate (Interstitial%drain_in_m_sm1 (IM)) + allocate (Interstitial%flag_lsm (IM)) + allocate (Interstitial%flag_lsm_glacier(IM)) + allocate (Interstitial%qs1 (IM)) + allocate (Interstitial%qv1 (IM)) + allocate (Interstitial%rho1 (IM)) + allocate (Interstitial%runoff_in_m_sm1 (IM)) + allocate (Interstitial%slc_save (IM,Model%lsoil)) + allocate (Interstitial%smcmax (IM)) + allocate (Interstitial%smc_save (IM,Model%lsoil)) + allocate (Interstitial%snowd_land_save (IM)) + allocate (Interstitial%snow_depth (IM)) + allocate (Interstitial%snohf_snow (IM)) + allocate (Interstitial%snohf_frzgra (IM)) + allocate (Interstitial%snohf_snowmelt (IM)) + allocate (Interstitial%soilm_in_m (IM)) + allocate (Interstitial%stc_save (IM,Model%lsoil)) + allocate (Interstitial%sthick (Model%lsoil)) + allocate (Interstitial%th1 (IM)) + allocate (Interstitial%tprcp_rate_land (IM)) + allocate (Interstitial%tsfc_land_save (IM)) + allocate (Interstitial%weasd_land_save (IM)) + end if ! ! Set components that do not change Interstitial%frain = Model%dtf/Model%dtp @@ -6256,6 +6392,34 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%t2mmp = clear_val Interstitial%q2mp = clear_val end if + if (Model%lsm == Model%lsm_noah_wrfv4) then + Interstitial%canopy_save = clear_val + Interstitial%chk_land = huge + Interstitial%cmc = clear_val + Interstitial%dqsdt2 = clear_val + Interstitial%drain_in_m_sm1 = clear_val + Interstitial%flag_lsm = .false. + Interstitial%flag_lsm_glacier= .false. + Interstitial%qs1 = huge + Interstitial%qv1 = huge + Interstitial%rho1 = clear_val + Interstitial%runoff_in_m_sm1 = clear_val + Interstitial%slc_save = clear_val + Interstitial%smcmax = clear_val + Interstitial%smc_save = clear_val + Interstitial%snowd_land_save = huge + Interstitial%snow_depth = clear_val + Interstitial%snohf_snow = clear_val + Interstitial%snohf_frzgra = clear_val + Interstitial%snohf_snowmelt = clear_val + Interstitial%soilm_in_m = clear_val + Interstitial%stc_save = clear_val + Interstitial%sthick = clear_val + Interstitial%th1 = clear_val + Interstitial%tprcp_rate_land = huge + Interstitial%tsfc_land_save = huge + Interstitial%weasd_land_save = huge + end if ! ! Set flag for resetting maximum hourly output fields Interstitial%reset = mod(Model%kdt-1, nint(Model%avg_max_length/Model%dtp)) == 0 @@ -6604,6 +6768,31 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%t2mmp ) = ', sum(Interstitial%t2mmp ) write (0,*) 'sum(Interstitial%q2mp ) = ', sum(Interstitial%q2mp ) end if + if (Model%lsm == Model%lsm_noah_wrfv4) then + write (0,*) 'sum(Interstitial%canopy_save ) = ', sum(Interstitial%canopy_save ) + write (0,*) 'sum(Interstitial%chk_land ) = ', sum(Interstitial%chk_land ) + write (0,*) 'sum(Interstitial%cmc ) = ', sum(Interstitial%cmc ) + write (0,*) 'sum(Interstitial%dqsdt2 ) = ', sum(Interstitial%dqsdt2 ) + write (0,*) 'sum(Interstitial%drain_in_m_sm1 ) = ', sum(Interstitial%drain_in_m_sm1 ) + write (0,*) 'Interstitial%flag_lsm(1) = ', Interstitial%flag_lsm(1) + write (0,*) 'Interstitial%flag_lsm_glacier(1) = ', Interstitial%flag_lsm_glacier(1) + write (0,*) 'sum(Interstitial%qs1 ) = ', sum(Interstitial%qs1 ) + write (0,*) 'sum(Interstitial%qv1 ) = ', sum(Interstitial%qv1 ) + write (0,*) 'sum(Interstitial%rho1 ) = ', sum(Interstitial%rho1 ) + write (0,*) 'sum(Interstitial%runoff_in_m_sm1 ) = ', sum(Interstitial%runoff_in_m_sm1 ) + write (0,*) 'sum(Interstitial%smcmax ) = ', sum(Interstitial%smcmax ) + write (0,*) 'sum(Interstitial%snowd_land_save ) = ', sum(Interstitial%snowd_land_save ) + write (0,*) 'sum(Interstitial%snow_depth ) = ', sum(Interstitial%snow_depth ) + write (0,*) 'sum(Interstitial%snohf_snow ) = ', sum(Interstitial%snohf_snow ) + write (0,*) 'sum(Interstitial%snohf_frzgra ) = ', sum(Interstitial%snohf_frzgra ) + write (0,*) 'sum(Interstitial%snohf_snowmelt ) = ', sum(Interstitial%snohf_snowmelt ) + write (0,*) 'sum(Interstitial%soilm_in_m ) = ', sum(Interstitial%soilm_in_m ) + write (0,*) 'sum(Interstitial%sthick ) = ', sum(Interstitial%sthick ) + write (0,*) 'sum(Interstitial%th1 ) = ', sum(Interstitial%th1 ) + write (0,*) 'sum(Interstitial%tprcp_rate_land ) = ', sum(Interstitial%tprcp_rate_land ) + write (0,*) 'sum(Interstitial%tsfc_land_save ) = ', sum(Interstitial%tsfc_land_save ) + write (0,*) 'sum(Interstitial%weasd_land_save ) = ', sum(Interstitial%weasd_land_save ) + end if write (0,*) 'Interstitial_print: end' ! end subroutine interstitial_print diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 088c805c7..64beb132b 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -20,13 +20,6 @@ dimensions = (horizontal_dimension,vertical_dimension_plus_one) type = real kind = kind_phys -[prsi(:,1)] - standard_name = air_pressure_at_lowest_model_interface - long_name = air pressure at model layer interfaces - units = Pa - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [prsik] standard_name = dimensionless_exner_function_at_model_interfaces long_name = dimensionless Exner function at model layer interfaces @@ -548,6 +541,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[z0base] + standard_name = baseline_surface_roughness_length + long_name = baseline surface roughness length for momentum in meter + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[semisbase] + standard_name = baseline_surface_longwave_emissivity + long_name = baseline surface lw emissivity in fraction + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [sncovr] standard_name = surface_snow_area_fraction_over_land long_name = surface snow area fraction @@ -1129,6 +1136,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snotime] + standard_name = time_since_last_snowfall + long_name = elapsed time since last snowfall + units = s + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [wetness] standard_name = normalized_soil_wetness_for_land_surface_model long_name = normalized soil wetness for lsm @@ -2657,6 +2671,12 @@ units = flag dimensions = () type = integer +[lsm_noah_wrfv4] + standard_name = flag_for_noah_wrfv4_land_surface_scheme + long_name = flag for NOAH WRFv4 land surface model + units = flag + dimensions = () + type = integer [lsoil] standard_name = soil_vertical_dimension long_name = number of soil layers @@ -2683,10 +2703,35 @@ type = integer [rdlai] standard_name = flag_for_reading_leaf_area_index_from_input - long_name = flag for reading leaf area index from initial conditions for RUC LSM + long_name = flag for reading leaf area index from initial conditions + units = flag + dimensions = () + type = logical +[ua_phys] + standard_name = flag_for_noah_lsm_ua_extension + long_name = flag for using University of Arizona(?) extension for NOAH LSM WRFv4 (see module_sf_noahlsm.F) units = flag dimensions = () type = logical +[usemonalb] + standard_name = flag_for_reading_surface_diffused_shortwave_albedo_from_input + long_name = flag for reading surface diffused shortwave albedo for NOAH LSM WRFv4 (see module_sf_noahlsm.F) + units = flag + dimensions = () + type = logical +[aoasis] + standard_name = potential_evaporation_multiplicative_factor + long_name = potential evaporation multiplicative factor for NOAH LSM WRFv4 (see module_sf_noahlsm.F) + units = none + dimensions = () + type = real + kind = kind_phys +[fasdas] + standard_name = flag_flux_adjusting_surface_data_assimilation_system + long_name = flag to use the flux adjusting surface data assimilation system for NOAH LSM WRFv4 (see module_sf_noahlsm.F) + units = flag + dimensions = () + type = integer [ivegsrc] standard_name = vegetation_type_dataset_choice long_name = land use dataset choice @@ -2699,6 +2744,30 @@ units = index dimensions = () type = integer +[isurban] + standard_name = urban_vegetation_category + long_name = index of the urban vegetation category in the chosen vegetation dataset + units = index + dimensions = () + type = integer +[isice] + standard_name = ice_vegetation_category + long_name = index of the permanent snow/ice category in the chosen vegetation dataset + units = index + dimensions = () + type = integer +[iswater] + standard_name = water_vegetation_category + long_name = index of the water body vegetation category in the chosen vegetation dataset + units = index + dimensions = () + type = integer +[iopt_thcnd] + standard_name = flag_for_thermal_conductivity_option + long_name = choice for thermal conductivity option (see module_sf_noahlsm) + units = index + dimensions = () + type = integer [spec_adv] standard_name = flag_for_individual_cloud_species_advected long_name = flag for individual cloud species advected @@ -2784,6 +2853,31 @@ units = index dimensions = () type = integer +[lcurr_sf] + standard_name = flag_for_ocean_currents_in_surface_layer_scheme + long_name = flag for taking ocean currents into account in surface layer scheme + units = flag + dimensions = () + type = logical +[pert_cd] + standard_name = flag_for_perturbation_of_surface_drag_coefficient_for_momentum_in_air + long_name = flag for perturbing the surface drag coefficient for momentum in surface layer scheme + units = flag + dimensions = () + type = logical +[ntsflg] + standard_name = flag_for_updating_skin_temperatuer_in_surface_layer_scheme + long_name = flag for updating skin temperature in the surface layer scheme + units = flag + dimensions = () + type = integer +[sfenth] + standard_name = enthalpy_flux_factor + long_name = enthalpy flux factor used in surface layer scheme + units = none + dimensions = () + type = real + kind = kind_phys [ras] standard_name = flag_for_ras_deep_convection long_name = flag for ras convection scheme @@ -4548,13 +4642,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[phy_myj_z0base] - standard_name = baseline_surface_roughness_length - long_name = baseline surface roughness length for momentum in meter - units = m - dimensions = (horizontal_dimension) - type = real - kind = kind_phys [phy_myj_akhs] standard_name = heat_exchange_coefficient_for_MYJ_schemes long_name = surface heat exchange_coefficient for MYJ schemes @@ -6085,6 +6172,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[canopy_save] + standard_name = canopy_water_amount_save + long_name = canopy water amount before entering a physics scheme + units = kg m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cd] standard_name = surface_drag_coefficient_for_momentum_in_air long_name = surface exchange coeff for momentum @@ -6162,6 +6256,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[chk_land] + standard_name = surface_conductance_for_heat_and_moisture_in_air_over_land + long_name = surface conductance for heat & moisture over land + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cf_upi] standard_name = convective_cloud_fraction_for_microphysics long_name = convective cloud fraction for microphysics @@ -6309,6 +6410,13 @@ dimensions = (horizontal_dimension,4) type = real kind = kind_phys +[cmc] + standard_name = canopy_water_amount_in_m + long_name = canopy water amount in m + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [cmm_ocean] standard_name = surface_drag_wind_speed_for_momentum_in_air_over_ocean long_name = momentum exchange coefficient over ocean @@ -6540,6 +6648,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[dqsdt2] + standard_name = saturation_specific_humidity_slope + long_name = saturation specific humidity slope at lowest model layer + units = K-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [dqsfc1] standard_name = instantaneous_surface_upward_latent_heat_flux long_name = surface upward latent heat flux @@ -6554,6 +6669,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[drain_in_m_sm1] + standard_name = subsurface_runoff_flux_in_m_sm1 + long_name = subsurface runoff flux in m s-1 + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [dtdt] standard_name = tendency_of_air_temperature_due_to_model_physics long_name = air temperature tendency due to model physics @@ -6894,6 +7016,18 @@ units = flag dimensions = (horizontal_dimension) type = logical +[flag_lsm] + standard_name = flag_for_calling_land_surface_model + long_name = flag for calling land surface model + units = flag + dimensions = (horizontal_dimension) + type = logical +[flag_lsm_glacier] + standard_name = flag_for_calling_land_surface_model_glacier + long_name = flag for calling land surface model over glacier + units = flag + dimensions = (horizontal_dimension) + type = logical [ffmm_ocean] standard_name = Monin_Obukhov_similarity_function_for_momentum_over_ocean long_name = Monin-Obukhov similarity function for momentum over ocean @@ -7631,6 +7765,20 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[qs1] + standard_name = saturation_specific_humidity_at_lowest_model_layer + long_name = saturation specific humidity at lowest model layer + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[qv1] + standard_name = bounded_specific_humidity_at_lowest_model_layer_over_land + long_name = specific humidity at lowest model layer over land bounded between a nonzero epsilon and saturation + units = kg kg-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [radar_reset] standard_name = flag_for_resetting_radar_reflectivity_calculation long_name = flag for resetting radar reflectivity calculation @@ -7720,6 +7868,13 @@ dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys +[rho1] + standard_name = air_density_at_lowest_model_layer + long_name = air density at lowest model layer + units = kg m-3 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [runoff] standard_name = surface_runoff_flux long_name = surface runoff flux @@ -7727,6 +7882,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[runoff_in_m_sm1] + standard_name = surface_runoff_flux_in_m_sm1 + long_name = surface runoff flux in m s-1 + units = m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [save_q(:,:,index_for_liquid_cloud_condensate)] standard_name = cloud_condensed_water_mixing_ratio_save long_name = ratio of mass of cloud water to mass of dry air plus vapor (without condensates) before entering a physics scheme @@ -7851,12 +8013,33 @@ units = flag dimensions = () type = logical +[slc_save] + standard_name = volume_fraction_of_unfrozen_soil_moisture_save + long_name = liquid soil moisture before entering a physics scheme + units = frac + dimensions = (horizontal_dimension,soil_vertical_dimension) + type = real + kind = kind_phys [slopetype] standard_name = surface_slope_classification long_name = surface slope type at each grid cell units = index dimensions = (horizontal_dimension) type = integer +[smcmax] + standard_name = soil_porosity + long_name = volumetric soil porosity + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[smc_save] + standard_name = volume_fraction_of_soil_moisture_save + long_name = total soil moisture before entering a physics scheme + units = frac + dimensions = (horizontal_dimension,soil_vertical_dimension) + type = real + kind = kind_phys [snowc] standard_name = surface_snow_area_fraction long_name = surface snow area fraction @@ -7878,6 +8061,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snowd_land_save] + standard_name = surface_snow_thickness_water_equivalent_over_land_save + long_name = water equivalent snow depth over land before entering a physics scheme + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snowd_ice] standard_name = surface_snow_thickness_water_equivalent_over_ice long_name = water equivalent snow depth over ice @@ -7885,6 +8075,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snow_depth] + standard_name = actual_snow_depth + long_name = actual snow depth + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snohf] standard_name = snow_freezing_rain_upward_latent_heat_flux long_name = latent heat flux due to snow and frz rain @@ -7892,6 +8089,27 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[snohf_snow] + standard_name = latent_heat_flux_from_precipitating_snow + long_name = latent heat flux due to precipitating snow + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[snohf_frzgra] + standard_name = latent_heat_flux_from_freezing_rain + long_name = latent heat flux due to freezing rain + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[snohf_snowmelt] + standard_name = latent_heat_flux_due_to_snowmelt + long_name = latent heat flux due to snowmelt phase change + units = W m-2 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [snowmp] standard_name = lwe_thickness_of_snow_amount long_name = explicit snow fall on physics timestep @@ -7906,12 +8124,33 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[soilm_in_m] + standard_name = soil_moisture_content_in_m + long_name = soil moisture in meters + units = m + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [soiltype] standard_name = soil_type_classification long_name = soil type at each grid cell units = index dimensions = (horizontal_dimension) type = integer +[stc_save] + standard_name = soil_temperature_save + long_name = soil temperature before entering a physics scheme + units = K + dimensions = (horizontal_dimension,soil_vertical_dimension) + type = real + kind = kind_phys +[sthick] + standard_name = soil_layer_thickness + long_name = soil layer thickness + units = m + dimensions = (soil_vertical_dimension) + type = real + kind = kind_phys [stress] standard_name = surface_wind_stress long_name = surface wind stress @@ -7954,6 +8193,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[th1] + standard_name = potential_temperature_at_lowest_model_layer + long_name = potential_temperature_at_lowest_model_layer + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tice] standard_name = sea_ice_temperature_interstitial long_name = sea ice surface skin temperature use as interstitial @@ -7996,6 +8242,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tprcp_rate_land] + standard_name = total_precipitation_rate_on_dynamics_timestep_over_land + long_name = total precipitation rate in each time step over land + units = kg m-2 s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tracers_start_index] standard_name = start_index_of_other_tracers long_name = beginning index of the non-water tracer species @@ -8049,6 +8302,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tsfc_land_save] + standard_name = surface_skin_temperature_over_land_interstitial_save + long_name = surface skin temperature over land before entering a physics scheme (temporary use as interstitial) + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [tsfc_ice] standard_name = surface_skin_temperature_over_ice_interstitial long_name = surface skin temperature over ice (temporary use as interstitial) @@ -8180,6 +8440,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[weasd_land_save] + standard_name = water_equivalent_accumulated_snow_depth_over_land_save + long_name = water equiv of acc snow depth over land before entering a physics scheme + units = mm + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [weasd_ice] standard_name = water_equivalent_accumulated_snow_depth_over_ice long_name = water equiv of acc snow depth over ice From a1e50227ce1c57e7f0213710a42d78ac403e29de Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 4 May 2020 14:54:19 -0600 Subject: [PATCH 20/26] update GFS_typedefs to work with master branch of ccpp-physics, remove static/no-static differentiation, remove unused namelist option --- ccpp/physics_namelists/input_csawmg.nml | 3 +- scm/src/CMakeLists.txt | 80 +++++-------- scm/src/GFS_typedefs.F90 | 152 +++++++++++++++++------- scm/src/GFS_typedefs.meta | 114 ++++++++++++------ scm/src/gmtb_scm.F90 | 60 ++-------- scm/src/gmtb_scm_time_integration.F90 | 9 -- 6 files changed, 231 insertions(+), 187 deletions(-) diff --git a/ccpp/physics_namelists/input_csawmg.nml b/ccpp/physics_namelists/input_csawmg.nml index 5d88a3ee0..7a5071a42 100644 --- a/ccpp/physics_namelists/input_csawmg.nml +++ b/ccpp/physics_namelists/input_csawmg.nml @@ -72,8 +72,7 @@ mg_qcvar = 1.0 fprcp = 2 pdfflag = 4 - iccn = .false. - aero_in = .false. + iccn = 0 mg_do_graupel = .true. mg_do_hail = .false. do_sb_physics = .true. diff --git a/scm/src/CMakeLists.txt b/scm/src/CMakeLists.txt index 0a9698e28..1b7745a22 100644 --- a/scm/src/CMakeLists.txt +++ b/scm/src/CMakeLists.txt @@ -2,45 +2,39 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(scm) set(PROJECT "CCPP-SCM") -# The only option to build is the static build -set(STATIC TRUE) - #################################################################### # Begin CCPP prebuild step # #################################################################### -if(STATIC) - # Start with empty list of suites - message (STATUS "Generating list of suites to compile for static CCPP") - set(SUITES "") - # Get list of all suite definition files (with full path) - file(GLOB SUITE_DEFINITION_FILES - "${CMAKE_CURRENT_SOURCE_DIR}/../../ccpp/suites/suite_*.xml" - ) - # Extract file name and suite name and append to SUITES - foreach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) - get_filename_component(suite_definition_filename ${suite_definition_filepath} NAME) - string(REGEX REPLACE "^suite_(.+)\\.xml$" "\\1" suite_name ${suite_definition_filename}) - set(SUITES ${SUITES}${suite_name},) - message (STATUS " adding suite ${suite_name}") - endforeach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) - # Abort if no suites found - if ("${SUITES}" STREQUAL "") - message(FATAL_ERROR "No suites found to compile for static CCPP") - endif("${SUITES}" STREQUAL "") - # Remove trailing comma from list of suites - string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) - # Run CCPP prebuild.py - message (STATUS "Running ccpp_prebuild.py for static CCPP") - execute_process( - COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --static --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. - OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out - ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. - RESULT_VARIABLE return_code - ) -else(STATIC) - message(FATAL_ERROR "Dynamic CCPP build no longer supported") -endif(STATIC) +# Start with empty list of suites +message (STATUS "Generating list of suites to compile for CCPP") +set(SUITES "") +# Get list of all suite definition files (with full path) +file(GLOB SUITE_DEFINITION_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/../../ccpp/suites/suite_*.xml" +) +# Extract file name and suite name and append to SUITES +foreach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) + get_filename_component(suite_definition_filename ${suite_definition_filepath} NAME) + string(REGEX REPLACE "^suite_(.+)\\.xml$" "\\1" suite_name ${suite_definition_filename}) + set(SUITES ${SUITES}${suite_name},) + message (STATUS " adding suite ${suite_name}") +endforeach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) +# Abort if no suites found +if ("${SUITES}" STREQUAL "") + message(FATAL_ERROR "No suites found to compile for CCPP") +endif("${SUITES}" STREQUAL "") +# Remove trailing comma from list of suites +string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) +# Run CCPP prebuild.py +message (STATUS "Running ccpp_prebuild.py for CCPP") +execute_process( + COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. + OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out + ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. + RESULT_VARIABLE return_code +) + # Check return code from CCPP prebuild.py if(return_code EQUAL 0) message (STATUS "CCPP prebuild step completed successfully") @@ -88,10 +82,6 @@ ELSE(DEFINED ENV{W3NCO_LIBd}) MESSAGE(FATAL_ERROR "The W3NCO_LIBd environment variable must be set to point to your W3NCO installation (part of NCEPLIBS) before building. Stopping...") ENDIF(DEFINED ENV{W3NCO_LIBd}) -if(STATIC) - ADD_DEFINITIONS(-DSTATIC) -endif(STATIC) - SET(CCPP_SRC ${CMAKE_SOURCE_DIR}/../../ccpp/framework) SET(GFSPHYSICS_SRC ${CMAKE_SOURCE_DIR}/../../ccpp/physics) @@ -299,13 +289,9 @@ SET(scm_source_files gmtb_scm.F90 gmtb_scm_output.F90 ) -if(STATIC) - ADD_EXECUTABLE(gmtb_scm ${scm_source_files} ccpp_static_api.F90) - TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp ${BACIO_LIB4} ${SP_LIBd} ${W3NCO_LIBd}) -else(STATIC) - ADD_EXECUTABLE(gmtb_scm ${scm_source_files}) - TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp) -endif(STATIC) +ADD_EXECUTABLE(gmtb_scm ${scm_source_files} ccpp_static_api.F90) +TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp ${BACIO_LIB4} ${SP_LIBd} ${W3NCO_LIBd}) + set_target_properties(gmtb_scm PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS}" diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index db7a9af72..bbca9cac2 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -462,18 +462,16 @@ module GFS_typedefs real (kind=kind_phys), pointer :: slmsk_cpl (:) => null() !< Land/Sea/Ice mask (slmsk from GFS_sfcprop_type) !--- cellular automata - real (kind=kind_phys), pointer :: tconvtend(:,:) => null() - real (kind=kind_phys), pointer :: qconvtend(:,:) => null() - real (kind=kind_phys), pointer :: uconvtend(:,:) => null() - real (kind=kind_phys), pointer :: vconvtend(:,:) => null() - real (kind=kind_phys), pointer :: ca_out (:) => null() ! + real (kind=kind_phys), pointer :: ca1 (:) => null() ! + real (kind=kind_phys), pointer :: ca2 (:) => null() ! + real (kind=kind_phys), pointer :: ca3 (:) => null() ! real (kind=kind_phys), pointer :: ca_deep (:) => null() ! real (kind=kind_phys), pointer :: ca_turb (:) => null() ! real (kind=kind_phys), pointer :: ca_shal (:) => null() ! real (kind=kind_phys), pointer :: ca_rad (:) => null() ! real (kind=kind_phys), pointer :: ca_micro (:) => null() ! - real (kind=kind_phys), pointer :: cape (:) => null() ! - + real (kind=kind_phys), pointer :: condition(:) => null() ! + real (kind=kind_phys), pointer :: vfact_ca(:) => null() ! !--- stochastic physics real (kind=kind_phys), pointer :: shum_wts (:,:) => null() ! real (kind=kind_phys), pointer :: sppt_wts (:,:) => null() ! @@ -909,7 +907,7 @@ module GFS_typedefs !< 6=areodynamical roughness over water with input 10-m wind !< 7=slightly decrease Cd for higher wind speed compare to 6 -!--- background vertical diffusion +!--- vertical diffusion real(kind=kind_phys) :: xkzm_m !< [in] bkgd_vdif_m background vertical diffusion for momentum real(kind=kind_phys) :: xkzm_h !< [in] bkgd_vdif_h background vertical diffusion for heat q real(kind=kind_phys) :: xkzm_s !< [in] bkgd_vdif_s sigma threshold for background mom. diffusion @@ -919,20 +917,34 @@ module GFS_typedefs real(kind=kind_phys) :: bl_upfr !< updraft fraction in boundary layer mass flux scheme real(kind=kind_phys) :: bl_dnfr !< downdraft fraction in boundary layer mass flux scheme - !---cellular automata control parameters +!--- parameters for canopy heat storage (CHS) parameterization + real(kind=kind_phys) :: z0fac !< surface roughness fraction factor + real(kind=kind_phys) :: e0fac !< latent heat flux fraction factor relative to sensible heat flux + !< e.g., e0fac=0.5 indicates that CHS for latent heat flux is 50% of that for + !< sensible heat flux + +!---cellular automata control parameters integer :: nca !< number of independent cellular automata integer :: nlives !< cellular automata lifetime integer :: ncells !< cellular automata finer grid - real(kind=kind_phys) :: nfracseed !< cellular automata seed probability + integer :: nca_g !< number of independent cellular automata + integer :: nlives_g !< cellular automata lifetime + integer :: ncells_g !< cellular automata finer grid + real(kind=kind_phys) :: nfracseed !< cellular automata seed probability integer :: nseed !< cellular automata seed frequency + integer :: nseed_g !< cellular automata seed frequency logical :: do_ca !< cellular automata main switch logical :: ca_sgs !< switch for sgs ca logical :: ca_global !< switch for global ca logical :: ca_smooth !< switch for gaussian spatial filter - logical :: isppt_deep !< switch for combination with isppt_deep. OBS! Switches off SPPT on other tendencies! integer :: iseed_ca !< seed for random number generation in ca scheme integer :: nspinup !< number of iterations to spin up the ca real(kind=kind_phys) :: nthresh !< threshold used for perturbed vertical velocity + real :: ca_amplitude !< amplitude of ca trigger perturbation + integer :: nsmooth !< number of passes through smoother + logical :: ca_closure !< logical switch for ca on closure + logical :: ca_entr !< logical switch for ca on entrainment + logical :: ca_trigger !< logical switch for ca on trigger !--- stochastic physics control parameters logical :: do_sppt @@ -1382,7 +1394,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tdomip (:) => null() !< dominant accumulated sleet type real (kind=kind_phys), pointer :: tdoms (:) => null() !< dominant accumulated snow type - real (kind=kind_phys), pointer :: ca_out (:) => null() !< cellular automata fraction + real (kind=kind_phys), pointer :: ca1 (:) => null() ! + real (kind=kind_phys), pointer :: ca2 (:) => null() ! + real (kind=kind_phys), pointer :: ca3 (:) => null() ! real (kind=kind_phys), pointer :: ca_deep (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_turb (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_shal (:) => null() !< cellular automata fraction @@ -1598,6 +1612,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ep1d_land(:) => null() !< real (kind=kind_phys), pointer :: ep1d_ocean(:) => null() !< real (kind=kind_phys), pointer :: evap(:) => null() !< + real (kind=kind_phys), pointer :: evapq(:) => null() !< real (kind=kind_phys), pointer :: evap_ice(:) => null() !< real (kind=kind_phys), pointer :: evap_land(:) => null() !< real (kind=kind_phys), pointer :: evap_ocean(:) => null() !< @@ -1643,7 +1658,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< integer :: h2o_coeff !< real (kind=kind_phys), pointer :: h2o_pres(:) => null() !< + real (kind=kind_phys), pointer :: hefac(:) => null() !< + real (kind=kind_phys), pointer :: hffac(:) => null() !< real (kind=kind_phys), pointer :: hflx(:) => null() !< + real (kind=kind_phys), pointer :: hflxq(:) => null() !< real (kind=kind_phys), pointer :: hflx_ice(:) => null() !< real (kind=kind_phys), pointer :: hflx_land(:) => null() !< real (kind=kind_phys), pointer :: hflx_ocean(:) => null() !< @@ -2391,7 +2409,7 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%sfcnsw = clear_val Coupling%sfcdlw = clear_val - if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm) then + if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm .or. Model%ca_global) then allocate (Coupling%rain_cpl (IM)) allocate (Coupling%snow_cpl (IM)) Coupling%rain_cpl = clear_val @@ -2524,29 +2542,27 @@ subroutine coupling_create (Coupling, IM, Model) endif !-- cellular automata + allocate (Coupling%condition(IM)) + allocate (Coupling%vfact_ca(Model%levs)) if (Model%do_ca) then - allocate (Coupling%tconvtend (IM,Model%levs)) - allocate (Coupling%qconvtend (IM,Model%levs)) - allocate (Coupling%uconvtend (IM,Model%levs)) - allocate (Coupling%vconvtend (IM,Model%levs)) - allocate (Coupling%cape (IM)) - allocate (Coupling%ca_out (IM)) + allocate (Coupling%ca1 (IM)) + allocate (Coupling%ca2 (IM)) + allocate (Coupling%ca3 (IM)) allocate (Coupling%ca_deep (IM)) allocate (Coupling%ca_turb (IM)) allocate (Coupling%ca_shal (IM)) allocate (Coupling%ca_rad (IM)) allocate (Coupling%ca_micro (IM)) - Coupling%ca_out = clear_val + Coupling%vfact_ca = clear_val + Coupling%ca1 = clear_val + Coupling%ca2 = clear_val + Coupling%ca3 = clear_val Coupling%ca_deep = clear_val Coupling%ca_turb = clear_val Coupling%ca_shal = clear_val Coupling%ca_rad = clear_val Coupling%ca_micro = clear_val - Coupling%cape = clear_val - Coupling%tconvtend = clear_val - Coupling%qconvtend = clear_val - Coupling%uconvtend = clear_val - Coupling%vconvtend = clear_val + Coupling%condition = clear_val endif ! -- GSDCHEM coupling options @@ -2565,7 +2581,7 @@ subroutine coupling_create (Coupling, IM, Model) endif !--- stochastic physics option - if (Model%do_sppt) then + if (Model%do_sppt .or. Model%ca_global)then allocate (Coupling%sppt_wts (IM,Model%levs)) Coupling%sppt_wts = clear_val endif @@ -2998,7 +3014,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< 7=slightly decrease Cd for higher wind speed compare to 6 !< negative when cplwav2atm=.true. - i.e. two way wave coupling -!--- background vertical diffusion +!--- vertical diffusion real(kind=kind_phys) :: xkzm_m = 1.0d0 !< [in] bkgd_vdif_m background vertical diffusion for momentum real(kind=kind_phys) :: xkzm_h = 1.0d0 !< [in] bkgd_vdif_h background vertical diffusion for heat q real(kind=kind_phys) :: xkzm_s = 1.0d0 !< [in] bkgd_vdif_s sigma threshold for background mom. diffusion @@ -3009,22 +3025,34 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: bl_upfr = 0.13 !< updraft fraction in boundary layer mass flux scheme real(kind=kind_phys) :: bl_dnfr = 0.1 !< downdraft fraction in boundary layer mass flux scheme +!--- parameters for canopy heat storage (CHS) parameterization + real(kind=kind_phys) :: z0fac = 0.3 + real(kind=kind_phys) :: e0fac = 0.5 + !---Cellular automaton options integer :: nca = 1 integer :: ncells = 5 - integer :: nlives = 10 + integer :: nlives = 30 + integer :: nca_g = 1 + integer :: ncells_g = 1 + integer :: nlives_g = 100 real(kind=kind_phys) :: nfracseed = 0.5 integer :: nseed = 100000 + integer :: nseed_g = 100 integer :: iseed_ca = 0 integer :: nspinup = 1 logical :: do_ca = .false. logical :: ca_sgs = .false. logical :: ca_global = .false. logical :: ca_smooth = .false. - logical :: isppt_deep = .false. real(kind=kind_phys) :: nthresh = 0.0 - + real :: ca_amplitude = 500. + integer :: nsmooth = 100 + logical :: ca_closure = .false. + logical :: ca_entr = .false. + logical :: ca_trigger = .false. + !--- IAU options real(kind=kind_phys) :: iau_delthrs = 0 !< iau time interval (to scale increments) character(len=240) :: iau_inc_files(7) = '' !< list of increment files @@ -3128,12 +3156,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & frac_grid_off, ignore_lake, & !--- surface layer sfc_z0_type, & - ! background vertical diffusion + ! vertical diffusion xkzm_m, xkzm_h, xkzm_s, xkzminv, moninq_fac, dspfac, & bl_upfr, bl_dnfr, & + !--- canopy heat storage parameterization + z0fac, e0fac, & !--- cellular automata - nca, ncells, nlives, nfracseed,nseed, nthresh, do_ca, & - ca_sgs, ca_global,iseed_ca,ca_smooth,isppt_deep,nspinup, & + nca, ncells, nlives, nca_g, ncells_g, nlives_g, nfracseed, & + nseed, nseed_g, nthresh, do_ca, & + ca_sgs, ca_global,iseed_ca,ca_smooth, & + nspinup,ca_amplitude,nsmooth,ca_closure,ca_entr,ca_trigger, & !--- IAU iau_delthrs,iaufhrs,iau_inc_files,iau_filter_increments, & iau_drymassfixer, & @@ -3571,6 +3603,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%bl_upfr = bl_upfr Model%bl_dnfr = bl_dnfr +!--- canopy heat storage parametrization + Model%z0fac = z0fac + Model%e0fac = e0fac + !--- stochastic physics options ! do_sppt, do_shum, do_skeb and do_sfcperts are namelist variables in group ! physics that are parsed here and then compared in init_stochastic_physics @@ -3592,16 +3628,24 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nca = nca Model%ncells = ncells Model%nlives = nlives + Model%nca_g = nca_g + Model%ncells_g = ncells_g + Model%nlives_g = nlives_g Model%nfracseed = nfracseed Model%nseed = nseed + Model%nseed_g = nseed_g Model%ca_global = ca_global Model%do_ca = do_ca Model%ca_sgs = ca_sgs Model%iseed_ca = iseed_ca Model%ca_smooth = ca_smooth - Model%isppt_deep = isppt_deep Model%nspinup = nspinup Model%nthresh = nthresh + Model%ca_amplitude = ca_amplitude + Model%nsmooth = nsmooth + Model%ca_closure = ca_closure + Model%ca_entr = ca_entr + Model%ca_trigger = ca_trigger ! IAU flags !--- iau parameters @@ -4481,7 +4525,7 @@ subroutine control_print(Model) print *, 'surface layer options' print *, ' sfc_z0_type : ', Model%sfc_z0_type print *, ' ' - print *, 'background vertical diffusion coefficients' + print *, 'vertical diffusion coefficients' print *, ' xkzm_m : ', Model%xkzm_m print *, ' xkzm_h : ', Model%xkzm_h print *, ' xkzm_s : ', Model%xkzm_s @@ -4491,6 +4535,10 @@ subroutine control_print(Model) print *, ' bl_upfr : ', Model%bl_upfr print *, ' bl_dnfr : ', Model%bl_dnfr print *, ' ' + print *, 'parameters for canopy heat storage parametrization' + print *, ' z0fac : ', Model%z0fac + print *, ' e0fac : ', Model%e0fac + print *, ' ' print *, 'stochastic physics' print *, ' do_sppt : ', Model%do_sppt print *, ' do_shum : ', Model%do_shum @@ -4498,19 +4546,27 @@ subroutine control_print(Model) print *, ' do_sfcperts : ', Model%do_sfcperts print *, ' ' print *, 'cellular automata' - print *, ' nca : ', Model%ncells + print *, ' nca : ', Model%nca print *, ' ncells : ', Model%ncells print *, ' nlives : ', Model%nlives + print *, ' nca_g : ', Model%nca_g + print *, ' ncells_g : ', Model%ncells_g + print *, ' nlives_g : ', Model%nlives_g print *, ' nfracseed : ', Model%nfracseed + print *, ' nseed_g : ', Model%nseed_g print *, ' nseed : ', Model%nseed print *, ' ca_global : ', Model%ca_global print *, ' ca_sgs : ', Model%ca_sgs print *, ' do_ca : ', Model%do_ca print *, ' iseed_ca : ', Model%iseed_ca print *, ' ca_smooth : ', Model%ca_smooth - print *, ' isppt_deep : ', Model%isppt_deep print *, ' nspinup : ', Model%nspinup print *, ' nthresh : ', Model%nthresh + print *, ' ca_amplitude : ', Model%ca_amplitude + print *, ' nsmooth : ', Model%nsmooth + print *, ' ca_closure : ', Model%ca_closure + print *, ' ca_entr : ', Model%ca_entr + print *, ' ca_trigger : ', Model%ca_trigger print *, ' ' print *, 'tracers' print *, ' tracer_names : ', Model%tracer_names @@ -4714,7 +4770,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%dsnow_cpl = clear_val endif - if (Model%do_sppt) then + if (Model%do_sppt .or. Model%ca_global) then allocate (Tbd%dtdtr (IM,Model%levs)) allocate (Tbd%dtotprcp (IM)) allocate (Tbd%dcnvprcp (IM)) @@ -4989,13 +5045,15 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%sppt_wts(IM,Model%levs)) allocate (Diag%shum_wts(IM,Model%levs)) allocate (Diag%zmtnblck(IM)) + allocate (Diag%ca1 (IM)) + allocate (Diag%ca2 (IM)) + allocate (Diag%ca3 (IM)) ! F-A MP scheme if (Model%imp_physics == Model%imp_physics_fer_hires) then allocate (Diag%TRAIN (IM,Model%levs)) end if - allocate (Diag%ca_out (IM)) allocate (Diag%ca_deep (IM)) allocate (Diag%ca_turb (IM)) allocate (Diag%ca_shal (IM)) @@ -5295,7 +5353,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totgrpb = zero ! if (Model%do_ca) then - Diag%ca_out = zero + Diag%ca1 = zero + Diag%ca2 = zero + Diag%ca3 = zero Diag%ca_deep = zero Diag%ca_turb = zero Diag%ca_shal = zero @@ -5582,6 +5642,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%ep1d_land (IM)) allocate (Interstitial%ep1d_ocean (IM)) allocate (Interstitial%evap (IM)) + allocate (Interstitial%evapq (IM)) allocate (Interstitial%evap_ice (IM)) allocate (Interstitial%evap_land (IM)) allocate (Interstitial%evap_ocean (IM)) @@ -5624,7 +5685,10 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%gwdcu (IM,Model%levs)) allocate (Interstitial%gwdcv (IM,Model%levs)) allocate (Interstitial%h2o_pres (levh2o)) + allocate (Interstitial%hefac (IM)) + allocate (Interstitial%hffac (IM)) allocate (Interstitial%hflx (IM)) + allocate (Interstitial%hflxq (IM)) allocate (Interstitial%hflx_ice (IM)) allocate (Interstitial%hflx_land (IM)) allocate (Interstitial%hflx_ocean (IM)) @@ -6222,6 +6286,7 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%ep1d_land = huge Interstitial%ep1d_ocean = huge Interstitial%evap = clear_val + Interstitial%evapq = clear_val Interstitial%evap_ice = huge Interstitial%evap_land = huge Interstitial%evap_ocean = huge @@ -6260,7 +6325,10 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%gflx_ocean = clear_val Interstitial%gwdcu = clear_val Interstitial%gwdcv = clear_val + Interstitial%hefac = clear_val + Interstitial%hffac = clear_val Interstitial%hflx = clear_val + Interstitial%hflxq = clear_val Interstitial%hflx_ice = huge Interstitial%hflx_land = huge Interstitial%hflx_ocean = huge @@ -6533,6 +6601,7 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%ep1d_land ) = ', sum(Interstitial%ep1d_land ) write (0,*) 'sum(Interstitial%ep1d_ocean ) = ', sum(Interstitial%ep1d_ocean ) write (0,*) 'sum(Interstitial%evap ) = ', sum(Interstitial%evap ) + write (0,*) 'sum(Interstitial%evapq ) = ', sum(Interstitial%evapq ) write (0,*) 'sum(Interstitial%evap_ice ) = ', sum(Interstitial%evap_ice ) write (0,*) 'sum(Interstitial%evap_land ) = ', sum(Interstitial%evap_land ) write (0,*) 'sum(Interstitial%evap_ocean ) = ', sum(Interstitial%evap_ocean ) @@ -6575,7 +6644,10 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%gflx_ocean ) = ', sum(Interstitial%gflx_ocean ) write (0,*) 'sum(Interstitial%gwdcu ) = ', sum(Interstitial%gwdcu ) write (0,*) 'sum(Interstitial%gwdcv ) = ', sum(Interstitial%gwdcv ) + write (0,*) 'sum(Interstitial%hefac ) = ', sum(Interstitial%hefac ) + write (0,*) 'sum(Interstitial%hffac ) = ', sum(Interstitial%hffac ) write (0,*) 'sum(Interstitial%hflx ) = ', sum(Interstitial%hflx ) + write (0,*) 'sum(Interstitial%hflxq ) = ', sum(Interstitial%hflxq ) write (0,*) 'sum(Interstitial%hflx_ice ) = ', sum(Interstitial%hflx_ice ) write (0,*) 'sum(Interstitial%hflx_land ) = ', sum(Interstitial%hflx_land ) write (0,*) 'sum(Interstitial%hflx_ocean ) = ', sum(Interstitial%hflx_ocean ) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index c89cfa221..bd0106859 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -1792,34 +1792,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[tconvtend] - standard_name = tendency_of_air_temperature_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency of air temperature due to deep convection - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[qconvtend] - standard_name = tendency_of_water_vapor_specific_humidity_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency of specific humidity due to deep convection - units = kg kg-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[uconvtend] - standard_name = tendency_of_x_wind_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency_of_x_wind_due_to_deep_convection - units = m s-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[vconvtend] - standard_name = tendency_of_y_wind_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency_of_y_wind_due_to_deep_convection - units = m s-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys [ca_deep] standard_name = fraction_of_cellular_automata_for_deep_convection long_name = fraction of cellular automata for deep convection @@ -1827,9 +1799,23 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[cape] - standard_name = convective_available_potential_energy_for_coupling - long_name = convective available potential energy for coupling +[vfact_ca] + standard_name = vertical_weight_for_ca + long_name = vertical weight for ca + units = frac + dimensions = (vertical_dimension) + type = real + kind = kind_phys +[ca1] + standard_name = cellular_automata_global_pattern + long_name = cellular automata global pattern + units = flag + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[condition] + standard_name = physics_field_for_coupling + long_name = physics_field_for_coupling units = m2 s-2 dimensions = (horizontal_dimension) type = real @@ -3452,6 +3438,20 @@ dimensions = () type = real kind = kind_phys +[z0fac] + standard_name = surface_roughness_fraction_factor + long_name = surface roughness fraction for canopy heat storage parameterization + units = none + dimensions = () + type = real + kind = kind_phys +[e0fac] + standard_name = latent_heat_flux_fraction_factor_relative_to_sensible_heat_flux + long_name = latent heat flux fraction relative to sensible heat flux for canopy heat storage parameterization + units = none + dimensions = () + type = real + kind = kind_phys [nca] standard_name = number_of_independent_cellular_automata long_name = number of independent cellular automata @@ -3501,15 +3501,27 @@ units = flag dimensions = () type = logical -[ca_smooth] - standard_name = flag_for_gaussian_spatial_filter - long_name = switch for gaussian spatial filter +[ca_closure] + standard_name = flag_for_global_cellular_automata_closure + long_name = switch for ca on closure units = flag dimensions = () type = logical -[isppt_deep] - standard_name = flag_for_combination_of_sppt_with_isppt_deep - long_name = switch for combination with isppt_deep. +[ca_entr] + standard_name = flag_for_global_cellular_automata_entr + long_name = switch for ca on entr + units = flag + dimensions = () + type = logical +[ca_trigger] + standard_name = flag_for_global_cellular_automata_trigger + long_name = switch for ca on trigger + units = flag + dimensions = () + type = logical +[ca_smooth] + standard_name = flag_for_gaussian_spatial_filter + long_name = switch for gaussian spatial filter units = flag dimensions = () type = logical @@ -6758,6 +6770,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[evapq] + standard_name = kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward latent heat flux reduced by surface roughness + units = kg kg-1 m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [evap_ocean] standard_name = kinematic_surface_upward_latent_heat_flux_over_ocean long_name = kinematic surface upward latent heat flux over ocean @@ -7174,6 +7193,20 @@ dimensions = (vertical_dimension_of_h2o_forcing_data) type = real kind = kind_phys +[hefac] + standard_name = surface_upward_latent_heat_flux_reduction_factor + long_name = surface upward latent heat flux reduction factor from canopy heat storage + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[hffac] + standard_name = surface_upward_sensible_heat_flux_reduction_factor + long_name = surface upward sensible heat flux reduction factor from canopy heat storage + units = none + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [hflx] standard_name = kinematic_surface_upward_sensible_heat_flux long_name = kinematic surface upward sensible heat flux @@ -7181,6 +7214,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[hflxq] + standard_name = kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness + long_name = kinematic surface upward sensible heat flux reduced by surface roughness + units = K m s-1 + dimensions = (horizontal_dimension) + type = real + kind = kind_phys [hflx_ocean] standard_name = kinematic_surface_upward_sensible_heat_flux_over_ocean long_name = kinematic surface upward sensible heat flux over ocean diff --git a/scm/src/gmtb_scm.F90 b/scm/src/gmtb_scm.F90 index 0b9ac864e..35c57c054 100644 --- a/scm/src/gmtb_scm.F90 +++ b/scm/src/gmtb_scm.F90 @@ -15,29 +15,12 @@ subroutine gmtb_scm_main_sub() use gmtb_scm_time_integration use gmtb_scm_output use gmtb_scm_type_defs - -#ifdef STATIC - use :: ccpp_api, & - only: ccpp_init, & - ccpp_finalize + use :: ccpp_static_api, & only: ccpp_physics_init, & ccpp_physics_run, & ccpp_physics_finalize -#else - use :: ccpp_api, & - only: ccpp_init, & - ccpp_finalize, & - ccpp_physics_init, & - ccpp_physics_run, & - ccpp_physics_finalize, & - ccpp_field_add, & - ccpp_initialized, & - ccpp_error - use :: iso_c_binding, only: c_loc -#include "ccpp_modules.inc" -#endif implicit none @@ -112,11 +95,11 @@ subroutine gmtb_scm_main_sub() do i = 1, scm_state%n_cols !set up each column's physics suite (which may be different) - call ccpp_init(trim(adjustl(scm_state%physics_suite_name(i))), cdata_cols(i), ierr) - if (ierr/=0) then - write(*,'(a,i0,a)') 'An error occurred in ccpp_init for column ', i, '. Exiting...' - stop - end if + ! call ccpp_init(trim(adjustl(scm_state%physics_suite_name(i))), cdata_cols(i), ierr) + ! if (ierr/=0) then + ! write(*,'(a,i0,a)') 'An error occurred in ccpp_init for column ', i, '. Exiting...' + ! stop + ! end if !open a logfile for each column if (physics%Init_parm(i)%me == physics%Init_parm(i)%master .and. physics%Init_parm(i)%logunit>=0) then @@ -156,23 +139,11 @@ subroutine gmtb_scm_main_sub() call physics%associate(scm_state, i) -#ifndef STATIC -! use ccpp_fields.inc to call ccpp_field_add for all variables to add -! (this is auto-generated from ccpp/scripts/ccpp_prebuild.py, -! the script parses tables in gmtb_scm_type_defs.f90) - associate_column: associate (cdata => cdata_cols(i)) -#include "ccpp_fields.inc" - end associate associate_column -#endif - !initialize each column's physics -#ifdef STATIC + write(0,'(a,i0,a)') "Calling ccpp_physics_init for column ", i, " with suite '" // trim(trim(adjustl(scm_state%physics_suite_name(i)))) // "'" call ccpp_physics_init(cdata_cols(i), suite_name=trim(trim(adjustl(scm_state%physics_suite_name(i)))), ierr=ierr) write(0,'(a,i0,a,i0)') "Called ccpp_physics_init for column ", i, " with suite '" // trim(trim(adjustl(scm_state%physics_suite_name(i)))) // "', ierr=", ierr -#else - call ccpp_physics_init(cdata_cols(i), ierr=ierr) -#endif if (ierr/=0) then write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_init for column ', i, ': ' // trim(cdata_cols(i)%errmsg) // '. Exiting...' stop @@ -220,11 +191,7 @@ subroutine gmtb_scm_main_sub() scm_state%state_v(:,:,:,2) = scm_state%state_v(:,:,:,1) do i=1, scm_state%n_cols -#ifdef STATIC call ccpp_physics_run(cdata_cols(i), suite_name=trim(trim(adjustl(scm_state%physics_suite_name(i)))), ierr=ierr) -#else - call ccpp_physics_run(cdata_cols(i), ierr=ierr) -#endif if (ierr/=0) then write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_run for column ', i, ': ' // trim(cdata_cols(i)%errmsg) // '. Exiting...' stop @@ -328,21 +295,10 @@ subroutine gmtb_scm_main_sub() end do do i=1, scm_state%n_cols -#ifdef STATIC call ccpp_physics_finalize(cdata_cols(i), suite_name=trim(trim(adjustl(scm_state%physics_suite_name(i)))), ierr=ierr) -#else - call ccpp_physics_finalize(cdata_cols(i), ierr=ierr) -#endif - if (ierr/=0) then - write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_finalize for column ', i, ': ' // trim(cdata_cols(i)%errmsg) // '. Exiting...' - stop - end if - end do - do i=1, scm_state%n_cols - call ccpp_finalize(cdata_cols(i), ierr) if (ierr/=0) then - write(*,'(a,i0,a)') 'An error occurred in ccpp_finalize for column ', i, '. Exiting...' + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_finalize for column ', i, ': ' // trim(cdata_cols(i)%errmsg) // '. Exiting...' stop end if end do diff --git a/scm/src/gmtb_scm_time_integration.F90 b/scm/src/gmtb_scm_time_integration.F90 index 6aa224f69..3ccc14529 100644 --- a/scm/src/gmtb_scm_time_integration.F90 +++ b/scm/src/gmtb_scm_time_integration.F90 @@ -6,13 +6,8 @@ module gmtb_scm_time_integration use gmtb_scm_kinds, only: sp, dp, qp use gmtb_scm_forcing -#ifdef STATIC use ccpp_api, only: ccpp_t use ccpp_static_api, only: ccpp_physics_run -#else -use ccpp_api, only: ccpp_t, & - ccpp_physics_run -#endif implicit none @@ -84,11 +79,7 @@ subroutine do_time_step(scm_state, cdata_cols) end if do i=1, scm_state%n_cols -#ifdef STATIC call ccpp_physics_run(cdata_cols(i), suite_name=trim(adjustl(scm_state%physics_suite_name(i))), ierr=ierr) -#else - call ccpp_physics_run(cdata_cols(i), ierr=ierr) -#endif if (ierr/=0) then write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_run for column ', i, ': ' // trim(cdata_cols(i)%errmsg) // '. Exiting...' stop From e5bc573b156bbd2f5d36e0c2995b424b801b1ccd Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 28 May 2020 11:50:12 -0600 Subject: [PATCH 21/26] update GFS_typedefs to work with latest dtc/hwrf-physics --- scm/src/GFS_typedefs.F90 | 112 ++++++++++++-------------------------- scm/src/GFS_typedefs.meta | 72 ++++++++++++------------ 2 files changed, 71 insertions(+), 113 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index 65fc1bc34..e030d3d2c 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -3,8 +3,8 @@ module GFS_typedefs use machine, only: kind_phys - use module_radlw_parameters, only: sfcflw_type, topflw_type, NBDLW, proflw_type - use module_radsw_parameters, only: cmpfsw_type, sfcfsw_type, topfsw_type, NBDSW, profsw_type + use module_radsw_parameters, only: topfsw_type, sfcfsw_type, profsw_type, cmpfsw_type, NBDSW + use module_radlw_parameters, only: topflw_type, sfcflw_type, proflw_type, NBDLW use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_1scl,ty_optical_props_2str use mo_cloud_optics, only: ty_cloud_optics @@ -465,16 +465,18 @@ module GFS_typedefs real (kind=kind_phys), pointer :: slmsk_cpl (:) => null() !< Land/Sea/Ice mask (slmsk from GFS_sfcprop_type) !--- cellular automata - real (kind=kind_phys), pointer :: ca1 (:) => null() ! - real (kind=kind_phys), pointer :: ca2 (:) => null() ! - real (kind=kind_phys), pointer :: ca3 (:) => null() ! + real (kind=kind_phys), pointer :: tconvtend(:,:) => null() + real (kind=kind_phys), pointer :: qconvtend(:,:) => null() + real (kind=kind_phys), pointer :: uconvtend(:,:) => null() + real (kind=kind_phys), pointer :: vconvtend(:,:) => null() + real (kind=kind_phys), pointer :: ca_out (:) => null() ! real (kind=kind_phys), pointer :: ca_deep (:) => null() ! real (kind=kind_phys), pointer :: ca_turb (:) => null() ! real (kind=kind_phys), pointer :: ca_shal (:) => null() ! real (kind=kind_phys), pointer :: ca_rad (:) => null() ! real (kind=kind_phys), pointer :: ca_micro (:) => null() ! - real (kind=kind_phys), pointer :: condition(:) => null() ! - real (kind=kind_phys), pointer :: vfact_ca(:) => null() ! + real (kind=kind_phys), pointer :: cape (:) => null() ! + !--- stochastic physics real (kind=kind_phys), pointer :: shum_wts (:,:) => null() ! real (kind=kind_phys), pointer :: sppt_wts (:,:) => null() ! @@ -960,24 +962,16 @@ module GFS_typedefs integer :: nca !< number of independent cellular automata integer :: nlives !< cellular automata lifetime integer :: ncells !< cellular automata finer grid - integer :: nca_g !< number of independent cellular automata - integer :: nlives_g !< cellular automata lifetime - integer :: ncells_g !< cellular automata finer grid - real(kind=kind_phys) :: nfracseed !< cellular automata seed probability + real(kind=kind_phys) :: nfracseed !< cellular automata seed probability integer :: nseed !< cellular automata seed frequency - integer :: nseed_g !< cellular automata seed frequency logical :: do_ca !< cellular automata main switch logical :: ca_sgs !< switch for sgs ca logical :: ca_global !< switch for global ca logical :: ca_smooth !< switch for gaussian spatial filter + logical :: isppt_deep !< switch for combination with isppt_deep. OBS! Switches off SPPT on other tendencies! integer :: iseed_ca !< seed for random number generation in ca scheme integer :: nspinup !< number of iterations to spin up the ca real(kind=kind_phys) :: nthresh !< threshold used for perturbed vertical velocity - real :: ca_amplitude !< amplitude of ca trigger perturbation - integer :: nsmooth !< number of passes through smoother - logical :: ca_closure !< logical switch for ca on closure - logical :: ca_entr !< logical switch for ca on entrainment - logical :: ca_trigger !< logical switch for ca on trigger !--- stochastic physics control parameters logical :: do_sppt @@ -1426,9 +1420,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tdomip (:) => null() !< dominant accumulated sleet type real (kind=kind_phys), pointer :: tdoms (:) => null() !< dominant accumulated snow type - real (kind=kind_phys), pointer :: ca1 (:) => null() ! - real (kind=kind_phys), pointer :: ca2 (:) => null() ! - real (kind=kind_phys), pointer :: ca3 (:) => null() ! + real (kind=kind_phys), pointer :: ca_out (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_deep (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_turb (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_shal (:) => null() !< cellular automata fraction @@ -2487,7 +2479,7 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%sfcnsw = clear_val Coupling%sfcdlw = clear_val - if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm .or. Model%ca_global) then + if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm) then allocate (Coupling%rain_cpl (IM)) allocate (Coupling%snow_cpl (IM)) Coupling%rain_cpl = clear_val @@ -2620,21 +2612,19 @@ subroutine coupling_create (Coupling, IM, Model) endif !-- cellular automata - allocate (Coupling%condition(IM)) - allocate (Coupling%vfact_ca(Model%levs)) if (Model%do_ca) then - allocate (Coupling%ca1 (IM)) - allocate (Coupling%ca2 (IM)) - allocate (Coupling%ca3 (IM)) + allocate (Coupling%tconvtend (IM,Model%levs)) + allocate (Coupling%qconvtend (IM,Model%levs)) + allocate (Coupling%uconvtend (IM,Model%levs)) + allocate (Coupling%vconvtend (IM,Model%levs)) + allocate (Coupling%cape (IM)) + allocate (Coupling%ca_out (IM)) allocate (Coupling%ca_deep (IM)) allocate (Coupling%ca_turb (IM)) allocate (Coupling%ca_shal (IM)) allocate (Coupling%ca_rad (IM)) allocate (Coupling%ca_micro (IM)) - Coupling%vfact_ca = clear_val - Coupling%ca1 = clear_val - Coupling%ca2 = clear_val - Coupling%ca3 = clear_val + Coupling%ca_out = clear_val Coupling%ca_deep = clear_val Coupling%ca_turb = clear_val Coupling%ca_shal = clear_val @@ -2663,7 +2653,7 @@ subroutine coupling_create (Coupling, IM, Model) endif !--- stochastic physics option - if (Model%do_sppt .or. Model%ca_global)then + if (Model%do_sppt) then allocate (Coupling%sppt_wts (IM,Model%levs)) Coupling%sppt_wts = clear_val endif @@ -2851,7 +2841,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !---Max hourly real(kind=kind_phys) :: avg_max_length = 3600. !< reset value in seconds for max hourly !--- Ferrier-Aligo microphysical parameters - real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only + real(kind=kind_phys) :: rhgrd = 1.0 !< fer_hires microphysics only; for 3-km domain logical :: spec_adv = .true. !< Individual cloud species advected integer :: icloud = 0 !< cloud effect to the optical depth in radiation; this also controls the cloud fraction options !< 3: with cloud effect from FA, and use cloud fraction option 3, based on Sundqvist et al. (1989) @@ -3122,7 +3112,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: xkzminv = 0.3 !< diffusivity in inversion layers real(kind=kind_phys) :: moninq_fac = 1.0 !< turbulence diffusion coefficient factor real(kind=kind_phys) :: dspfac = 1.0 !< tke dissipative heating factor - real(kind=kind_phys) :: bl_upfr = 0.13 !< updraft fraction in boundary layer mass flux scheme real(kind=kind_phys) :: bl_dnfr = 0.1 !< downdraft fraction in boundary layer mass flux scheme @@ -3134,25 +3123,17 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !---Cellular automaton options integer :: nca = 1 integer :: ncells = 5 - integer :: nlives = 30 - integer :: nca_g = 1 - integer :: ncells_g = 1 - integer :: nlives_g = 100 + integer :: nlives = 10 real(kind=kind_phys) :: nfracseed = 0.5 integer :: nseed = 100000 - integer :: nseed_g = 100 integer :: iseed_ca = 0 integer :: nspinup = 1 logical :: do_ca = .false. logical :: ca_sgs = .false. logical :: ca_global = .false. logical :: ca_smooth = .false. + logical :: isppt_deep = .false. real(kind=kind_phys) :: nthresh = 0.0 - real :: ca_amplitude = 500. - integer :: nsmooth = 100 - logical :: ca_closure = .false. - logical :: ca_entr = .false. - logical :: ca_trigger = .false. !--- IAU options real(kind=kind_phys) :: iau_delthrs = 0 !< iau time interval (to scale increments) @@ -3268,10 +3249,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- canopy heat storage parameterization z0fac, e0fac, & !--- cellular automata - nca, ncells, nlives, nca_g, ncells_g, nlives_g, nfracseed, & - nseed, nseed_g, nthresh, do_ca, & - ca_sgs, ca_global,iseed_ca,ca_smooth, & - nspinup,ca_amplitude,nsmooth,ca_closure,ca_entr,ca_trigger, & + nca, ncells, nlives, nfracseed,nseed, nthresh, do_ca, & + ca_sgs, ca_global,iseed_ca,ca_smooth,isppt_deep,nspinup, & !--- IAU iau_delthrs,iaufhrs,iau_inc_files,iau_filter_increments, & iau_drymassfixer, & @@ -3666,8 +3645,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%rbcr = rbcr Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 - Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 - Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 Model%do_mynnedmf = do_mynnedmf Model%do_mynnsfclay = do_mynnsfclay @@ -3769,24 +3746,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nca = nca Model%ncells = ncells Model%nlives = nlives - Model%nca_g = nca_g - Model%ncells_g = ncells_g - Model%nlives_g = nlives_g Model%nfracseed = nfracseed Model%nseed = nseed - Model%nseed_g = nseed_g Model%ca_global = ca_global Model%do_ca = do_ca Model%ca_sgs = ca_sgs Model%iseed_ca = iseed_ca Model%ca_smooth = ca_smooth + Model%isppt_deep = isppt_deep Model%nspinup = nspinup Model%nthresh = nthresh - Model%ca_amplitude = ca_amplitude - Model%nsmooth = nsmooth - Model%ca_closure = ca_closure - Model%ca_entr = ca_entr - Model%ca_trigger = ca_trigger ! IAU flags !--- iau parameters @@ -4624,7 +4593,6 @@ subroutine control_print(Model) print *, ' shinhong : ', Model%shinhong print *, ' do_ysu : ', Model%do_ysu print *, ' dspheat : ', Model%dspheat - print *, ' hurr_pbl : ', Model%hurr_pbl print *, ' lheatstrg : ', Model%lheatstrg print *, ' cnvcld : ', Model%cnvcld print *, ' random_clds : ', Model%random_clds @@ -4650,6 +4618,7 @@ subroutine control_print(Model) print *, ' do_myjsfc : ', Model%do_myjsfc print *, ' do_myjpbl : ', Model%do_myjpbl print *, ' gwd_opt : ', Model%gwd_opt + print *, ' hurr_pbl : ', Model%hurr_pbl print *, ' var_ric : ', Model%var_ric print *, ' coef_ric_l : ', Model%coef_ric_l print *, ' coef_ric_s : ', Model%coef_ric_s @@ -4709,27 +4678,19 @@ subroutine control_print(Model) print *, ' do_sfcperts : ', Model%do_sfcperts print *, ' ' print *, 'cellular automata' - print *, ' nca : ', Model%nca + print *, ' nca : ', Model%ncells print *, ' ncells : ', Model%ncells print *, ' nlives : ', Model%nlives - print *, ' nca_g : ', Model%nca_g - print *, ' ncells_g : ', Model%ncells_g - print *, ' nlives_g : ', Model%nlives_g print *, ' nfracseed : ', Model%nfracseed - print *, ' nseed_g : ', Model%nseed_g print *, ' nseed : ', Model%nseed print *, ' ca_global : ', Model%ca_global print *, ' ca_sgs : ', Model%ca_sgs print *, ' do_ca : ', Model%do_ca print *, ' iseed_ca : ', Model%iseed_ca print *, ' ca_smooth : ', Model%ca_smooth + print *, ' isppt_deep : ', Model%isppt_deep print *, ' nspinup : ', Model%nspinup print *, ' nthresh : ', Model%nthresh - print *, ' ca_amplitude : ', Model%ca_amplitude - print *, ' nsmooth : ', Model%nsmooth - print *, ' ca_closure : ', Model%ca_closure - print *, ' ca_entr : ', Model%ca_entr - print *, ' ca_trigger : ', Model%ca_trigger print *, ' ' print *, 'tracers' print *, ' tracer_names : ', Model%tracer_names @@ -4933,7 +4894,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%dsnow_cpl = clear_val endif - if (Model%do_sppt .or. Model%ca_global) then + if (Model%do_sppt) then allocate (Tbd%dtdtr (IM,Model%levs)) allocate (Tbd%dtotprcp (IM)) allocate (Tbd%dcnvprcp (IM)) @@ -5205,16 +5166,14 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%skebv_wts(IM,Model%levs)) allocate (Diag%sppt_wts(IM,Model%levs)) allocate (Diag%shum_wts(IM,Model%levs)) - allocate (Diag%zmtnblck(IM)) - allocate (Diag%ca1 (IM)) - allocate (Diag%ca2 (IM)) - allocate (Diag%ca3 (IM)) + allocate (Diag%zmtnblck(IM)) ! F-A MP scheme if (Model%imp_physics == Model%imp_physics_fer_hires) then allocate (Diag%TRAIN (IM,Model%levs)) end if + allocate (Diag%ca_out (IM)) allocate (Diag%ca_deep (IM)) allocate (Diag%ca_turb (IM)) allocate (Diag%ca_shal (IM)) @@ -5517,9 +5476,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totgrpb = zero ! if (Model%do_ca) then - Diag%ca1 = zero - Diag%ca2 = zero - Diag%ca3 = zero + Diag%ca_out = zero Diag%ca_deep = zero Diag%ca_turb = zero Diag%ca_shal = zero @@ -6085,7 +6042,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%q2mp (IM)) end if if (Model%lsm == Model%lsm_noah_wrfv4) then - write(*,*) 'ALLOCATING WRF4 HERE' allocate (Interstitial%canopy_save (IM)) allocate (Interstitial%chk_land (IM)) allocate (Interstitial%cmc (IM)) diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index cd4d7d9ef..3bea23872 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -1813,30 +1813,44 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[ca_deep] - standard_name = fraction_of_cellular_automata_for_deep_convection - long_name = fraction of cellular automata for deep convection - units = frac - dimensions = (horizontal_dimension) +[tconvtend] + standard_name = tendency_of_air_temperature_due_to_deep_convection_for_coupling_on_physics_timestep + long_name = tendency of air temperature due to deep convection + units = K + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[vfact_ca] - standard_name = vertical_weight_for_ca - long_name = vertical weight for ca - units = frac - dimensions = (vertical_dimension) +[qconvtend] + standard_name = tendency_of_water_vapor_specific_humidity_due_to_deep_convection_for_coupling_on_physics_timestep + long_name = tendency of specific humidity due to deep convection + units = kg kg-1 + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys -[ca1] - standard_name = cellular_automata_global_pattern - long_name = cellular automata global pattern - units = flag +[uconvtend] + standard_name = tendency_of_x_wind_due_to_deep_convection_for_coupling_on_physics_timestep + long_name = tendency_of_x_wind_due_to_deep_convection + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[vconvtend] + standard_name = tendency_of_y_wind_due_to_deep_convection_for_coupling_on_physics_timestep + long_name = tendency_of_y_wind_due_to_deep_convection + units = m s-1 + dimensions = (horizontal_dimension,vertical_dimension) + type = real + kind = kind_phys +[ca_deep] + standard_name = fraction_of_cellular_automata_for_deep_convection + long_name = fraction of cellular automata for deep convection + units = frac dimensions = (horizontal_dimension) type = real kind = kind_phys -[condition] - standard_name = physics_field_for_coupling - long_name = physics_field_for_coupling +[cape] + standard_name = convective_available_potential_energy_for_coupling + long_name = convective available potential energy for coupling units = m2 s-2 dimensions = (horizontal_dimension) type = real @@ -3620,30 +3634,18 @@ units = flag dimensions = () type = logical -[ca_closure] - standard_name = flag_for_global_cellular_automata_closure - long_name = switch for ca on closure - units = flag - dimensions = () - type = logical -[ca_entr] - standard_name = flag_for_global_cellular_automata_entr - long_name = switch for ca on entr - units = flag - dimensions = () - type = logical -[ca_trigger] - standard_name = flag_for_global_cellular_automata_trigger - long_name = switch for ca on trigger - units = flag - dimensions = () - type = logical [ca_smooth] standard_name = flag_for_gaussian_spatial_filter long_name = switch for gaussian spatial filter units = flag dimensions = () type = logical +[isppt_deep] + standard_name = flag_for_combination_of_sppt_with_isppt_deep + long_name = switch for combination with isppt_deep. + units = flag + dimensions = () + type = logical [iseed_ca] standard_name = seed_for_random_number_generation_in_cellular_automata_scheme long_name = seed for random number generation in ca scheme From de084cb0168e5761c5a8cad475ab2f6a24cedee3 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 28 May 2020 13:16:42 -0600 Subject: [PATCH 22/26] revert changes to CMakeLists.txt to use older version of ccpp-framework (temporary) --- scm/src/CMakeLists.txt | 83 +++++++++++++++++++++++++----------------- 1 file changed, 50 insertions(+), 33 deletions(-) diff --git a/scm/src/CMakeLists.txt b/scm/src/CMakeLists.txt index 1b7745a22..75fa57cb5 100644 --- a/scm/src/CMakeLists.txt +++ b/scm/src/CMakeLists.txt @@ -2,39 +2,45 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(scm) set(PROJECT "CCPP-SCM") +# The only option to build is the static build +set(STATIC TRUE) + #################################################################### # Begin CCPP prebuild step # #################################################################### -# Start with empty list of suites -message (STATUS "Generating list of suites to compile for CCPP") -set(SUITES "") -# Get list of all suite definition files (with full path) -file(GLOB SUITE_DEFINITION_FILES - "${CMAKE_CURRENT_SOURCE_DIR}/../../ccpp/suites/suite_*.xml" -) -# Extract file name and suite name and append to SUITES -foreach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) - get_filename_component(suite_definition_filename ${suite_definition_filepath} NAME) - string(REGEX REPLACE "^suite_(.+)\\.xml$" "\\1" suite_name ${suite_definition_filename}) - set(SUITES ${SUITES}${suite_name},) - message (STATUS " adding suite ${suite_name}") -endforeach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) -# Abort if no suites found -if ("${SUITES}" STREQUAL "") - message(FATAL_ERROR "No suites found to compile for CCPP") -endif("${SUITES}" STREQUAL "") -# Remove trailing comma from list of suites -string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) -# Run CCPP prebuild.py -message (STATUS "Running ccpp_prebuild.py for CCPP") -execute_process( - COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. - OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out - ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. - RESULT_VARIABLE return_code -) - +if(STATIC) + # Start with empty list of suites + message (STATUS "Generating list of suites to compile for static CCPP") + set(SUITES "") + # Get list of all suite definition files (with full path) + file(GLOB SUITE_DEFINITION_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/../../ccpp/suites/suite_*.xml" + ) + # Extract file name and suite name and append to SUITES + foreach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) + get_filename_component(suite_definition_filename ${suite_definition_filepath} NAME) + string(REGEX REPLACE "^suite_(.+)\\.xml$" "\\1" suite_name ${suite_definition_filename}) + set(SUITES ${SUITES}${suite_name},) + message (STATUS " adding suite ${suite_name}") + endforeach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) + # Abort if no suites found + if ("${SUITES}" STREQUAL "") + message(FATAL_ERROR "No suites found to compile for static CCPP") + endif("${SUITES}" STREQUAL "") + # Remove trailing comma from list of suites + string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) + # Run CCPP prebuild.py + message (STATUS "Running ccpp_prebuild.py for static CCPP") + execute_process( + COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --static --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. + OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out + ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. + RESULT_VARIABLE return_code + ) +else(STATIC) + message(FATAL_ERROR "Dynamic CCPP build no longer supported") +endif(STATIC) # Check return code from CCPP prebuild.py if(return_code EQUAL 0) message (STATUS "CCPP prebuild step completed successfully") @@ -82,6 +88,10 @@ ELSE(DEFINED ENV{W3NCO_LIBd}) MESSAGE(FATAL_ERROR "The W3NCO_LIBd environment variable must be set to point to your W3NCO installation (part of NCEPLIBS) before building. Stopping...") ENDIF(DEFINED ENV{W3NCO_LIBd}) +if(STATIC) + ADD_DEFINITIONS(-DSTATIC) +endif(STATIC) + SET(CCPP_SRC ${CMAKE_SOURCE_DIR}/../../ccpp/framework) SET(GFSPHYSICS_SRC ${CMAKE_SOURCE_DIR}/../../ccpp/physics) @@ -287,11 +297,18 @@ SET(scm_source_files gmtb_scm.F90 gmtb_scm_forcing.F90 gmtb_scm_time_integration.F90 gmtb_scm_output.F90 + gmtb_scm_kinds.F90 + gmtb_scm_physical_constants.F90 + gmtb_scm_type_defs.F90 ) -ADD_EXECUTABLE(gmtb_scm ${scm_source_files} ccpp_static_api.F90) -TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp ${BACIO_LIB4} ${SP_LIBd} ${W3NCO_LIBd}) - +if(STATIC) + ADD_EXECUTABLE(gmtb_scm ${scm_source_files} ccpp_static_api.F90) + TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp ${BACIO_LIB4} ${SP_LIBd} ${W3NCO_LIBd}) +else(STATIC) + ADD_EXECUTABLE(gmtb_scm ${scm_source_files}) + TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp) +endif(STATIC) set_target_properties(gmtb_scm PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS}" From 43c457086489b7a15a034c8fb856e1a61808e766 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 8 Jun 2020 13:43:26 -0600 Subject: [PATCH 23/26] Revert "revert changes to CMakeLists.txt to use older version of ccpp-framework (temporary)" This reverts commit de084cb0168e5761c5a8cad475ab2f6a24cedee3. --- scm/src/CMakeLists.txt | 83 +++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 50 deletions(-) diff --git a/scm/src/CMakeLists.txt b/scm/src/CMakeLists.txt index 75fa57cb5..1b7745a22 100644 --- a/scm/src/CMakeLists.txt +++ b/scm/src/CMakeLists.txt @@ -2,45 +2,39 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(scm) set(PROJECT "CCPP-SCM") -# The only option to build is the static build -set(STATIC TRUE) - #################################################################### # Begin CCPP prebuild step # #################################################################### -if(STATIC) - # Start with empty list of suites - message (STATUS "Generating list of suites to compile for static CCPP") - set(SUITES "") - # Get list of all suite definition files (with full path) - file(GLOB SUITE_DEFINITION_FILES - "${CMAKE_CURRENT_SOURCE_DIR}/../../ccpp/suites/suite_*.xml" - ) - # Extract file name and suite name and append to SUITES - foreach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) - get_filename_component(suite_definition_filename ${suite_definition_filepath} NAME) - string(REGEX REPLACE "^suite_(.+)\\.xml$" "\\1" suite_name ${suite_definition_filename}) - set(SUITES ${SUITES}${suite_name},) - message (STATUS " adding suite ${suite_name}") - endforeach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) - # Abort if no suites found - if ("${SUITES}" STREQUAL "") - message(FATAL_ERROR "No suites found to compile for static CCPP") - endif("${SUITES}" STREQUAL "") - # Remove trailing comma from list of suites - string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) - # Run CCPP prebuild.py - message (STATUS "Running ccpp_prebuild.py for static CCPP") - execute_process( - COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --static --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. - OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out - ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. - RESULT_VARIABLE return_code - ) -else(STATIC) - message(FATAL_ERROR "Dynamic CCPP build no longer supported") -endif(STATIC) +# Start with empty list of suites +message (STATUS "Generating list of suites to compile for CCPP") +set(SUITES "") +# Get list of all suite definition files (with full path) +file(GLOB SUITE_DEFINITION_FILES + "${CMAKE_CURRENT_SOURCE_DIR}/../../ccpp/suites/suite_*.xml" +) +# Extract file name and suite name and append to SUITES +foreach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) + get_filename_component(suite_definition_filename ${suite_definition_filepath} NAME) + string(REGEX REPLACE "^suite_(.+)\\.xml$" "\\1" suite_name ${suite_definition_filename}) + set(SUITES ${SUITES}${suite_name},) + message (STATUS " adding suite ${suite_name}") +endforeach(suite_definition_filepath IN LISTS SUITE_DEFINITION_FILES) +# Abort if no suites found +if ("${SUITES}" STREQUAL "") + message(FATAL_ERROR "No suites found to compile for CCPP") +endif("${SUITES}" STREQUAL "") +# Remove trailing comma from list of suites +string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) +# Run CCPP prebuild.py +message (STATUS "Running ccpp_prebuild.py for CCPP") +execute_process( + COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. + OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out + ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. + RESULT_VARIABLE return_code +) + # Check return code from CCPP prebuild.py if(return_code EQUAL 0) message (STATUS "CCPP prebuild step completed successfully") @@ -88,10 +82,6 @@ ELSE(DEFINED ENV{W3NCO_LIBd}) MESSAGE(FATAL_ERROR "The W3NCO_LIBd environment variable must be set to point to your W3NCO installation (part of NCEPLIBS) before building. Stopping...") ENDIF(DEFINED ENV{W3NCO_LIBd}) -if(STATIC) - ADD_DEFINITIONS(-DSTATIC) -endif(STATIC) - SET(CCPP_SRC ${CMAKE_SOURCE_DIR}/../../ccpp/framework) SET(GFSPHYSICS_SRC ${CMAKE_SOURCE_DIR}/../../ccpp/physics) @@ -297,18 +287,11 @@ SET(scm_source_files gmtb_scm.F90 gmtb_scm_forcing.F90 gmtb_scm_time_integration.F90 gmtb_scm_output.F90 - gmtb_scm_kinds.F90 - gmtb_scm_physical_constants.F90 - gmtb_scm_type_defs.F90 ) -if(STATIC) - ADD_EXECUTABLE(gmtb_scm ${scm_source_files} ccpp_static_api.F90) - TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp ${BACIO_LIB4} ${SP_LIBd} ${W3NCO_LIBd}) -else(STATIC) - ADD_EXECUTABLE(gmtb_scm ${scm_source_files}) - TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp) -endif(STATIC) +ADD_EXECUTABLE(gmtb_scm ${scm_source_files} ccpp_static_api.F90) +TARGET_LINK_LIBRARIES(gmtb_scm ccppphys ccpp ${BACIO_LIB4} ${SP_LIBd} ${W3NCO_LIBd}) + set_target_properties(gmtb_scm PROPERTIES COMPILE_FLAGS "${CMAKE_Fortran_FLAGS}" From 227ac70bccfcd0542d95a9b7e4ed4227df3910a5 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 8 Jun 2020 15:32:16 -0600 Subject: [PATCH 24/26] update GFS_typedefs.[F90/meta] and ccpp_prebuild_config.py to work with latest dtc/develop branch; update submodule pointers --- ccpp/config/ccpp_prebuild_config.py | 22 +-- ccpp/framework | 2 +- ccpp/physics | 2 +- .../suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml | 82 ----------- .../suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml | 83 ----------- ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml | 83 ----------- ccpp/suites/suite_SCM_HWRF.xml | 83 ----------- scm/src/GFS_typedefs.F90 | 135 +++++++++++------- scm/src/GFS_typedefs.meta | 119 ++++++++------- 9 files changed, 163 insertions(+), 448 deletions(-) delete mode 100644 ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml delete mode 100644 ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml delete mode 100644 ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml delete mode 100644 ccpp/suites/suite_SCM_HWRF.xml diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 16d491c7c..e4957669b 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -120,8 +120,8 @@ 'ccpp/physics/physics/module_mp_thompson.F90', 'ccpp/physics/physics/module_mp_thompson_make_number_concentrations.F90', 'ccpp/physics/physics/module_MP_FER_HIRES.F90', - 'ccpp/physics/physics/HWRF_mersenne_twister.F90', - 'ccpp/physics/physics/HWRF_mcica_random_numbers.F90', +# 'ccpp/physics/physics/HWRF_mersenne_twister.F90', +# 'ccpp/physics/physics/HWRF_mcica_random_numbers.F90', 'ccpp/physics/physics/module_bl_mynn.F90', 'ccpp/physics/physics/module_sf_mynn.F90', 'ccpp/physics/physics/module_SF_JSFC.F90', @@ -172,9 +172,9 @@ 'ccpp/physics/physics/namelist_soilveg_ruc.F90', 'ccpp/physics/physics/set_soilveg_ruc.F90', 'ccpp/physics/physics/module_soil_pre.F90', - 'ccpp/physics/physics/module_sf_noahlsm.F90', - 'ccpp/physics/physics/module_sf_noahlsm_glacial_only.F90', - 'ccpp/physics/physics/module_sf_exchcoef.f90', +# 'ccpp/physics/physics/module_sf_noahlsm.F90', +# 'ccpp/physics/physics/module_sf_noahlsm_glacial_only.F90', +# 'ccpp/physics/physics/module_sf_exchcoef.f90', # RRTMGP 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_concentrations.F90', 'ccpp/physics/physics/rte-rrtmgp/rrtmgp/mo_gas_optics.F90', @@ -242,7 +242,7 @@ 'ccpp/physics/physics/gcm_shoc.F90' : ['physics'], 'ccpp/physics/physics/get_prs_fv3.F90' : ['physics'], 'ccpp/physics/physics/gfdl_cloud_microphys.F90' : ['physics'], - 'ccpp/physics/physics/gfdl_sfc_layer.F90' : ['physics'], +# 'ccpp/physics/physics/gfdl_sfc_layer.F90' : ['physics'], 'ccpp/physics/physics/gscond.f' : ['physics'], 'ccpp/physics/physics/gwdc.f' : ['physics'], 'ccpp/physics/physics/gwdps.f' : ['physics'], @@ -275,8 +275,10 @@ 'ccpp/physics/physics/ozphys.f' : ['physics'], 'ccpp/physics/physics/ozphys_2015.f' : ['physics'], 'ccpp/physics/physics/precpd.f' : ['physics'], - 'ccpp/physics/physics/radlw_main.F90' : ['physics'], - 'ccpp/physics/physics/radsw_main.F90' : ['physics'], +# 'ccpp/physics/physics/radlw_main.F90' : ['physics'], +# 'ccpp/physics/physics/radsw_main.F90' : ['physics'], + 'ccpp/physics/physics/radlw_main.f' : ['physics'], + 'ccpp/physics/physics/radsw_main.f' : ['physics'], 'ccpp/physics/physics/rayleigh_damp.f' : ['physics'], 'ccpp/physics/physics/rrtmg_lw_post.F90' : ['physics'], 'ccpp/physics/physics/rrtmg_lw_pre.F90' : ['physics'], @@ -289,8 +291,8 @@ 'ccpp/physics/physics/sfc_cice.f' : ['physics'], 'ccpp/physics/physics/sfc_diff.f' : ['physics'], 'ccpp/physics/physics/sfc_drv.f' : ['physics'], - 'ccpp/physics/physics/sfc_noah_wrfv4_interstitial.F90' : ['physics'], - 'ccpp/physics/physics/sfc_noah_wrfv4.F90' : ['physics'], +# 'ccpp/physics/physics/sfc_noah_wrfv4_interstitial.F90' : ['physics'], +# 'ccpp/physics/physics/sfc_noah_wrfv4.F90' : ['physics'], 'ccpp/physics/physics/sfc_noahmp_drv.f' : ['physics'], 'ccpp/physics/physics/sfc_nst.f' : ['physics'], 'ccpp/physics/physics/sfc_ocean.F' : ['physics'], diff --git a/ccpp/framework b/ccpp/framework index 54f9b0709..a1fe9c109 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit 54f9b07098dc6fc3c25f0b38a7d047b5274d3afb +Subproject commit a1fe9c1091f2122a8e748154a9ce79c3020468fd diff --git a/ccpp/physics b/ccpp/physics index 0aa89846e..19998f0a6 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 0aa89846e9bb0c22482fa131aba39b85f9ac4ff2 +Subproject commit 19998f0a6aa3d5e265ae0bd080a7cddf9f07a3c1 diff --git a/ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml b/ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml deleted file mode 100644 index 6b4c94283..000000000 --- a/ccpp/suites/suite_SCM_GFS_v15p2_gfdl_sfc_layer.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - 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 - - - - - gfdl_sfc_layer - GFS_surface_loop_control_part1 - sfc_nst_pre - sfc_nst - sfc_nst_post - lsm_noah - sfc_sice - GFS_surface_loop_control_part2 - - - - GFS_surface_composites_post - sfc_diag - sfc_diag_post - GFS_surface_generic_post - GFS_PBL_generic_pre - hedmf - 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 - GFS_DCNV_generic_pre - get_phi_fv3 - GFS_suite_interstitial_3 - 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 - - - diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml b/ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.xml deleted file mode 100644 index 3ee8bbead..000000000 --- a/ccpp/suites/suite_SCM_GFS_v16beta_hwrf_sfc.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 - 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 - - - - gfdl_sfc_layer - GFS_surface_loop_control_part1 - sfc_nst_pre - sfc_nst - sfc_nst_post - sfc_noah_wrfv4_pre - sfc_noah_wrfv4 - sfc_noah_wrfv4_post - 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 - GFS_DCNV_generic_pre - get_phi_fv3 - GFS_suite_interstitial_3 - 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 - - - diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml b/ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.xml deleted file mode 100644 index 7ca2d3887..000000000 --- a/ccpp/suites/suite_SCM_GFS_v16beta_wrfv4.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 - 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 - sfc_noah_wrfv4_pre - sfc_noah_wrfv4 - sfc_noah_wrfv4_post - 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 - GFS_DCNV_generic_pre - get_phi_fv3 - GFS_suite_interstitial_3 - 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 - - - diff --git a/ccpp/suites/suite_SCM_HWRF.xml b/ccpp/suites/suite_SCM_HWRF.xml deleted file mode 100644 index 0a14448e0..000000000 --- a/ccpp/suites/suite_SCM_HWRF.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 - GFS_rrtmg_pre - rrtmg_lw_pre - rrtmg_lw - rrtmg_lw_post - rrtmg_sw_pre - rrtmg_sw - rrtmg_sw_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 - sfc_noah_wrfv4_pre - sfc_noah_wrfv4 - sfc_noah_wrfv4_post - sfc_sice - GFS_surface_loop_control_part2 - - - - GFS_surface_composites_post - sfc_diag - sfc_diag_post - GFS_surface_generic_post - GFS_PBL_generic_pre - hedmf - 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 - GFS_DCNV_generic_pre - get_phi_fv3 - GFS_suite_interstitial_3 - samfdeepcnv - GFS_DCNV_generic_post - GFS_SCNV_generic_pre - samfshalcnv - GFS_SCNV_generic_post - GFS_suite_interstitial_4 - cnvc90 - GFS_MP_generic_pre - mp_fer_hires - GFS_MP_generic_post - maximum_hourly_diagnostics - - - diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index e030d3d2c..b03c20306 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -211,6 +211,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K real (kind=kind_phys), pointer :: tsfcl (:) => null() !< surface land temperature in K real (kind=kind_phys), pointer :: tisfc (:) => null() !< surface temperature over ice fraction + real (kind=kind_phys), pointer :: tiice(:,:) => null() !< internal ice temperature real (kind=kind_phys), pointer :: snowd (:) => null() !< snow depth water equivalent in mm ; same as snwdph real (kind=kind_phys), pointer :: zorl (:) => null() !< composite surface roughness in cm real (kind=kind_phys), pointer :: zorlo (:) => null() !< ocean surface roughness in cm @@ -465,18 +466,16 @@ module GFS_typedefs real (kind=kind_phys), pointer :: slmsk_cpl (:) => null() !< Land/Sea/Ice mask (slmsk from GFS_sfcprop_type) !--- cellular automata - real (kind=kind_phys), pointer :: tconvtend(:,:) => null() - real (kind=kind_phys), pointer :: qconvtend(:,:) => null() - real (kind=kind_phys), pointer :: uconvtend(:,:) => null() - real (kind=kind_phys), pointer :: vconvtend(:,:) => null() - real (kind=kind_phys), pointer :: ca_out (:) => null() ! + real (kind=kind_phys), pointer :: ca1 (:) => null() ! + real (kind=kind_phys), pointer :: ca2 (:) => null() ! + real (kind=kind_phys), pointer :: ca3 (:) => null() ! real (kind=kind_phys), pointer :: ca_deep (:) => null() ! real (kind=kind_phys), pointer :: ca_turb (:) => null() ! real (kind=kind_phys), pointer :: ca_shal (:) => null() ! real (kind=kind_phys), pointer :: ca_rad (:) => null() ! real (kind=kind_phys), pointer :: ca_micro (:) => null() ! - real (kind=kind_phys), pointer :: cape (:) => null() ! - + real (kind=kind_phys), pointer :: condition(:) => null() ! + real (kind=kind_phys), pointer :: vfact_ca(:) => null() ! !--- stochastic physics real (kind=kind_phys), pointer :: shum_wts (:,:) => null() ! real (kind=kind_phys), pointer :: sppt_wts (:,:) => null() ! @@ -714,6 +713,7 @@ module GFS_typedefs integer :: lsm_ruc=3 !< flag for RUC land surface model integer :: lsm_noah_wrfv4 = 4 !< flag for NOAH land surface from WRF v4.0 integer :: lsoil !< number of soil layers + integer :: kice=2 !< number of layers in sice integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) @@ -929,7 +929,6 @@ module GFS_typedefs !< nstf_name(5) : zsea2 in mm !--- fractional grid logical :: frac_grid !< flag for fractional grid - logical :: frac_grid_off !< flag for using fractional grid logical :: ignore_lake !< flag for ignoring lakes real(kind=kind_phys) :: min_lakeice !< minimum lake ice value real(kind=kind_phys) :: min_seaice !< minimum sea ice value @@ -962,16 +961,24 @@ module GFS_typedefs integer :: nca !< number of independent cellular automata integer :: nlives !< cellular automata lifetime integer :: ncells !< cellular automata finer grid - real(kind=kind_phys) :: nfracseed !< cellular automata seed probability + integer :: nca_g !< number of independent cellular automata + integer :: nlives_g !< cellular automata lifetime + integer :: ncells_g !< cellular automata finer grid + real(kind=kind_phys) :: nfracseed !< cellular automata seed probability integer :: nseed !< cellular automata seed frequency + integer :: nseed_g !< cellular automata seed frequency logical :: do_ca !< cellular automata main switch logical :: ca_sgs !< switch for sgs ca logical :: ca_global !< switch for global ca logical :: ca_smooth !< switch for gaussian spatial filter - logical :: isppt_deep !< switch for combination with isppt_deep. OBS! Switches off SPPT on other tendencies! integer :: iseed_ca !< seed for random number generation in ca scheme integer :: nspinup !< number of iterations to spin up the ca real(kind=kind_phys) :: nthresh !< threshold used for perturbed vertical velocity + real :: ca_amplitude !< amplitude of ca trigger perturbation + integer :: nsmooth !< number of passes through smoother + logical :: ca_closure !< logical switch for ca on closure + logical :: ca_entr !< logical switch for ca on entrainment + logical :: ca_trigger !< logical switch for ca on trigger !--- stochastic physics control parameters logical :: do_sppt @@ -1420,7 +1427,9 @@ module GFS_typedefs real (kind=kind_phys), pointer :: tdomip (:) => null() !< dominant accumulated sleet type real (kind=kind_phys), pointer :: tdoms (:) => null() !< dominant accumulated snow type - real (kind=kind_phys), pointer :: ca_out (:) => null() !< cellular automata fraction + real (kind=kind_phys), pointer :: ca1 (:) => null() ! + real (kind=kind_phys), pointer :: ca2 (:) => null() ! + real (kind=kind_phys), pointer :: ca3 (:) => null() ! real (kind=kind_phys), pointer :: ca_deep (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_turb (:) => null() !< cellular automata fraction real (kind=kind_phys), pointer :: ca_shal (:) => null() !< cellular automata fraction @@ -2105,6 +2114,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%tsfco (IM)) allocate (Sfcprop%tsfcl (IM)) allocate (Sfcprop%tisfc (IM)) + allocate (Sfcprop%tiice (IM,Model%kice)) allocate (Sfcprop%snowd (IM)) allocate (Sfcprop%zorl (IM)) allocate (Sfcprop%zorlo (IM)) @@ -2121,6 +2131,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%tsfco = clear_val Sfcprop%tsfcl = clear_val Sfcprop%tisfc = clear_val + Sfcprop%tiice = clear_val Sfcprop%snowd = clear_val Sfcprop%zorl = clear_val Sfcprop%zorlo = clear_val @@ -2479,7 +2490,7 @@ subroutine coupling_create (Coupling, IM, Model) Coupling%sfcnsw = clear_val Coupling%sfcdlw = clear_val - if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm) then + if (Model%cplflx .or. Model%do_sppt .or. Model%cplchm .or. Model%ca_global) then allocate (Coupling%rain_cpl (IM)) allocate (Coupling%snow_cpl (IM)) Coupling%rain_cpl = clear_val @@ -2612,29 +2623,27 @@ subroutine coupling_create (Coupling, IM, Model) endif !-- cellular automata + allocate (Coupling%condition(IM)) + allocate (Coupling%vfact_ca(Model%levs)) if (Model%do_ca) then - allocate (Coupling%tconvtend (IM,Model%levs)) - allocate (Coupling%qconvtend (IM,Model%levs)) - allocate (Coupling%uconvtend (IM,Model%levs)) - allocate (Coupling%vconvtend (IM,Model%levs)) - allocate (Coupling%cape (IM)) - allocate (Coupling%ca_out (IM)) + allocate (Coupling%ca1 (IM)) + allocate (Coupling%ca2 (IM)) + allocate (Coupling%ca3 (IM)) allocate (Coupling%ca_deep (IM)) allocate (Coupling%ca_turb (IM)) allocate (Coupling%ca_shal (IM)) allocate (Coupling%ca_rad (IM)) allocate (Coupling%ca_micro (IM)) - Coupling%ca_out = clear_val + Coupling%vfact_ca = clear_val + Coupling%ca1 = clear_val + Coupling%ca2 = clear_val + Coupling%ca3 = clear_val Coupling%ca_deep = clear_val Coupling%ca_turb = clear_val Coupling%ca_shal = clear_val Coupling%ca_rad = clear_val - Coupling%ca_micro = clear_val - Coupling%cape = clear_val - Coupling%tconvtend = clear_val - Coupling%qconvtend = clear_val - Coupling%uconvtend = clear_val - Coupling%vconvtend = clear_val + Coupling%ca_micro = clear_val + Coupling%condition = clear_val endif ! -- GSDCHEM coupling options @@ -2653,7 +2662,7 @@ subroutine coupling_create (Coupling, IM, Model) endif !--- stochastic physics option - if (Model%do_sppt) then + if (Model%do_sppt .or. Model%ca_global)then allocate (Coupling%sppt_wts (IM,Model%levs)) Coupling%sppt_wts = clear_val endif @@ -2841,7 +2850,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !---Max hourly real(kind=kind_phys) :: avg_max_length = 3600. !< reset value in seconds for max hourly !--- Ferrier-Aligo microphysical parameters - real(kind=kind_phys) :: rhgrd = 1.0 !< fer_hires microphysics only; for 3-km domain + real(kind=kind_phys) :: rhgrd = 0.98 !< fer_hires microphysics only; for 3-km domain logical :: spec_adv = .true. !< Individual cloud species advected integer :: icloud = 0 !< cloud effect to the optical depth in radiation; this also controls the cloud fraction options !< 3: with cloud effect from FA, and use cloud fraction option 3, based on Sundqvist et al. (1989) @@ -3091,7 +3100,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< nstf_name(5) : zsea2 in mm !--- fractional grid logical :: frac_grid = .false. !< flag for fractional grid - logical :: frac_grid_off = .true. !< flag for using fractional grid logical :: ignore_lake = .true. !< flag for ignoring lakes real(kind=kind_phys) :: min_lakeice = 0.15d0 !< minimum lake ice value real(kind=kind_phys) :: min_seaice = 1.0d-11 !< minimum sea ice value @@ -3123,17 +3131,25 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !---Cellular automaton options integer :: nca = 1 integer :: ncells = 5 - integer :: nlives = 10 + integer :: nlives = 30 + integer :: nca_g = 1 + integer :: ncells_g = 1 + integer :: nlives_g = 100 real(kind=kind_phys) :: nfracseed = 0.5 integer :: nseed = 100000 + integer :: nseed_g = 100 integer :: iseed_ca = 0 integer :: nspinup = 1 logical :: do_ca = .false. logical :: ca_sgs = .false. logical :: ca_global = .false. logical :: ca_smooth = .false. - logical :: isppt_deep = .false. real(kind=kind_phys) :: nthresh = 0.0 + real :: ca_amplitude = 500. + integer :: nsmooth = 100 + logical :: ca_closure = .false. + logical :: ca_entr = .false. + logical :: ca_trigger = .false. !--- IAU options real(kind=kind_phys) :: iau_delthrs = 0 !< iau time interval (to scale increments) @@ -3240,7 +3256,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- near surface sea temperature model nst_anl, lsea, nstf_name, & frac_grid, min_lakeice, min_seaice, min_lake_height, & - frac_grid_off, ignore_lake, & + ignore_lake, & !--- surface layer sfc_z0_type, & ! vertical diffusion @@ -3249,8 +3265,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- canopy heat storage parameterization z0fac, e0fac, & !--- cellular automata - nca, ncells, nlives, nfracseed,nseed, nthresh, do_ca, & - ca_sgs, ca_global,iseed_ca,ca_smooth,isppt_deep,nspinup, & + nca, ncells, nlives, nca_g, ncells_g, nlives_g, nfracseed, & + nseed, nseed_g, nthresh, do_ca, & + ca_sgs, ca_global,iseed_ca,ca_smooth, & + nspinup,ca_amplitude,nsmooth,ca_closure,ca_entr,ca_trigger, & !--- IAU iau_delthrs,iaufhrs,iau_inc_files,iau_filter_increments, & iau_drymassfixer, & @@ -3583,12 +3601,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%shoc_cld = shoc_cld !HWRF physics suite - if (hwrf_samfdeep .and. imfdeepcnv .ne. 2) then - write(*,*) 'Logic error: hwrf_samfdeep has to be used along with imfdeepcnv=2' + if (hwrf_samfdeep .and. imfdeepcnv/=2) then + write(*,*) 'Logic error: hwrf_samfdeep requires imfdeepcnv=2' stop end if - if (hwrf_samfshal .and. imfshalcnv .ne. 2) then - write(*,*) 'Logic error: hwrf_samfshal has to be used along with imfshalcnv=2' + if (hwrf_samfshal .and. imfshalcnv/=2) then + write(*,*) 'Logic error: hwrf_samfshal requires imfshalcnv=2' stop end if Model%hwrf_samfdeep = hwrf_samfdeep @@ -3696,12 +3714,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- fractional grid Model%frac_grid = frac_grid - Model%frac_grid_off = frac_grid_off Model%ignore_lake = ignore_lake - if (Model%frac_grid) then - write(0,*) "ERROR: CCPP has not been tested with fractional landmask turned on" -! stop - end if Model%min_lakeice = min_lakeice Model%min_seaice = min_seaice Model%min_lake_height = min_lake_height @@ -3711,7 +3724,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%sfc_z0_type = sfc_z0_type if (Model%cplwav2atm) Model%sfc_z0_type = -1 -!--- backgroud vertical diffusion +!--- vertical diffusion Model%xkzm_m = xkzm_m Model%xkzm_h = xkzm_h Model%xkzm_s = xkzm_s @@ -3746,16 +3759,24 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%nca = nca Model%ncells = ncells Model%nlives = nlives + Model%nca_g = nca_g + Model%ncells_g = ncells_g + Model%nlives_g = nlives_g Model%nfracseed = nfracseed Model%nseed = nseed + Model%nseed_g = nseed_g Model%ca_global = ca_global Model%do_ca = do_ca Model%ca_sgs = ca_sgs Model%iseed_ca = iseed_ca Model%ca_smooth = ca_smooth - Model%isppt_deep = isppt_deep Model%nspinup = nspinup Model%nthresh = nthresh + Model%ca_amplitude = ca_amplitude + Model%nsmooth = nsmooth + Model%ca_closure = ca_closure + Model%ca_entr = ca_entr + Model%ca_trigger = ca_trigger ! IAU flags !--- iau parameters @@ -4030,7 +4051,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & endif print *,' nst_anl=',Model%nst_anl,' use_ufo=',Model%use_ufo,' frac_grid=',Model%frac_grid,& - ' frac_grid_off=',frac_grid_off,' ignore_lake=',ignore_lake + ' ignore_lake=',ignore_lake print *,' min_lakeice=',Model%min_lakeice,' min_seaice=',Model%min_seaice, & 'min_lake_height=',Model%min_lake_height if (Model%nstf_name(1) > 0 ) then @@ -4678,19 +4699,27 @@ subroutine control_print(Model) print *, ' do_sfcperts : ', Model%do_sfcperts print *, ' ' print *, 'cellular automata' - print *, ' nca : ', Model%ncells + print *, ' nca : ', Model%nca print *, ' ncells : ', Model%ncells print *, ' nlives : ', Model%nlives + print *, ' nca_g : ', Model%nca_g + print *, ' ncells_g : ', Model%ncells_g + print *, ' nlives_g : ', Model%nlives_g print *, ' nfracseed : ', Model%nfracseed + print *, ' nseed_g : ', Model%nseed_g print *, ' nseed : ', Model%nseed print *, ' ca_global : ', Model%ca_global print *, ' ca_sgs : ', Model%ca_sgs print *, ' do_ca : ', Model%do_ca print *, ' iseed_ca : ', Model%iseed_ca print *, ' ca_smooth : ', Model%ca_smooth - print *, ' isppt_deep : ', Model%isppt_deep print *, ' nspinup : ', Model%nspinup print *, ' nthresh : ', Model%nthresh + print *, ' ca_amplitude : ', Model%ca_amplitude + print *, ' nsmooth : ', Model%nsmooth + print *, ' ca_closure : ', Model%ca_closure + print *, ' ca_entr : ', Model%ca_entr + print *, ' ca_trigger : ', Model%ca_trigger print *, ' ' print *, 'tracers' print *, ' tracer_names : ', Model%tracer_names @@ -4894,7 +4923,7 @@ subroutine tbd_create (Tbd, IM, Model) Tbd%dsnow_cpl = clear_val endif - if (Model%do_sppt) then + if (Model%do_sppt .or. Model%ca_global) then allocate (Tbd%dtdtr (IM,Model%levs)) allocate (Tbd%dtotprcp (IM)) allocate (Tbd%dcnvprcp (IM)) @@ -5166,14 +5195,16 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%skebv_wts(IM,Model%levs)) allocate (Diag%sppt_wts(IM,Model%levs)) allocate (Diag%shum_wts(IM,Model%levs)) - allocate (Diag%zmtnblck(IM)) + allocate (Diag%zmtnblck(IM)) + allocate (Diag%ca1 (IM)) + allocate (Diag%ca2 (IM)) + allocate (Diag%ca3 (IM)) ! F-A MP scheme if (Model%imp_physics == Model%imp_physics_fer_hires) then allocate (Diag%TRAIN (IM,Model%levs)) end if - allocate (Diag%ca_out (IM)) allocate (Diag%ca_deep (IM)) allocate (Diag%ca_turb (IM)) allocate (Diag%ca_shal (IM)) @@ -5476,7 +5507,9 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%totgrpb = zero ! if (Model%do_ca) then - Diag%ca_out = zero + Diag%ca1 = zero + Diag%ca2 = zero + Diag%ca3 = zero Diag%ca_deep = zero Diag%ca_turb = zero Diag%ca_shal = zero diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index 3bea23872..53710f3a7 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -492,6 +492,13 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys +[tiice] + standard_name = internal_ice_temperature + long_name = sea ice internal temperature + units = K + dimensions = (horizontal_dimension,ice_vertical_dimension) + type = real + kind = kind_phys [snowd] standard_name = surface_snow_thickness_water_equivalent long_name = water equivalent snow depth @@ -1813,34 +1820,6 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[tconvtend] - standard_name = tendency_of_air_temperature_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency of air temperature due to deep convection - units = K - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[qconvtend] - standard_name = tendency_of_water_vapor_specific_humidity_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency of specific humidity due to deep convection - units = kg kg-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[uconvtend] - standard_name = tendency_of_x_wind_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency_of_x_wind_due_to_deep_convection - units = m s-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys -[vconvtend] - standard_name = tendency_of_y_wind_due_to_deep_convection_for_coupling_on_physics_timestep - long_name = tendency_of_y_wind_due_to_deep_convection - units = m s-1 - dimensions = (horizontal_dimension,vertical_dimension) - type = real - kind = kind_phys [ca_deep] standard_name = fraction_of_cellular_automata_for_deep_convection long_name = fraction of cellular automata for deep convection @@ -1848,9 +1827,23 @@ dimensions = (horizontal_dimension) type = real kind = kind_phys -[cape] - standard_name = convective_available_potential_energy_for_coupling - long_name = convective available potential energy for coupling +[vfact_ca] + standard_name = vertical_weight_for_ca + long_name = vertical weight for ca + units = frac + dimensions = (vertical_dimension) + type = real + kind = kind_phys +[ca1] + standard_name = cellular_automata_global_pattern + long_name = cellular automata global pattern + units = flag + dimensions = (horizontal_dimension) + type = real + kind = kind_phys +[condition] + standard_name = physics_field_for_coupling + long_name = physics_field_for_coupling units = m2 s-2 dimensions = (horizontal_dimension) type = real @@ -2237,14 +2230,14 @@ dimensions = () type = integer [iovr_sw] - standard_name = flag_for_cloud_overlapping_method_for_shortwave_radiation - long_name = control flag for cloud overlapping method for SW + standard_name = flag_for_max_random_overlap_clouds_for_shortwave_radiation + long_name = sw: max-random overlap clouds units = flag dimensions = () type = integer [iovr_lw] - standard_name = flag_for_cloud_overlapping_method_for_longwave_radiation - long_name = control flag for cloud overlapping method for LW + standard_name = flag_for_max_random_overlap_clouds_for_longwave_radiation + long_name = lw: max-random overlap clouds units = flag dimensions = () type = integer @@ -2255,14 +2248,14 @@ dimensions = () type = integer [isubc_sw] - standard_name = flag_for_sw_clouds_grid_approximation - long_name = flag for sw clouds sub-grid approximation + standard_name = flag_for_sw_clouds_without_sub_grid_approximation + long_name = flag for sw clouds without sub-grid approximation units = flag dimensions = () type = integer [isubc_lw] - standard_name = flag_for_lw_clouds_sub_grid_approximation - long_name = flag for lw clouds sub-grid approximation + standard_name = flag_for_lw_clouds_without_sub_grid_approximation + long_name = flag for lw clouds without sub-grid approximation units = flag dimensions = () type = integer @@ -2807,6 +2800,12 @@ units = flag dimensions = () type = integer +[kice] + standard_name = ice_vertical_dimension + long_name = vertical loop extent for ice levels, start at 1 + units = count + dimensions = () + type = integer [lsoil] standard_name = soil_vertical_dimension long_name = number of soil layers @@ -3634,15 +3633,27 @@ units = flag dimensions = () type = logical -[ca_smooth] - standard_name = flag_for_gaussian_spatial_filter - long_name = switch for gaussian spatial filter +[ca_closure] + standard_name = flag_for_global_cellular_automata_closure + long_name = switch for ca on closure + units = flag + dimensions = () + type = logical +[ca_entr] + standard_name = flag_for_global_cellular_automata_entr + long_name = switch for ca on entr units = flag dimensions = () type = logical -[isppt_deep] - standard_name = flag_for_combination_of_sppt_with_isppt_deep - long_name = switch for combination with isppt_deep. +[ca_trigger] + standard_name = flag_for_global_cellular_automata_trigger + long_name = switch for ca on trigger + units = flag + dimensions = () + type = logical +[ca_smooth] + standard_name = flag_for_gaussian_spatial_filter + long_name = switch for gaussian spatial filter units = flag dimensions = () type = logical @@ -6439,63 +6450,63 @@ standard_name = total_cloud_fraction long_name = layer total cloud fraction units = frac - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,2)] standard_name = cloud_liquid_water_path long_name = layer cloud liquid water path units = g m-2 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,3)] standard_name = mean_effective_radius_for_liquid_cloud long_name = mean effective radius for liquid cloud units = micron - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,4)] standard_name = cloud_ice_water_path long_name = layer cloud ice water path units = g m-2 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,5)] standard_name = mean_effective_radius_for_ice_cloud long_name = mean effective radius for ice cloud units = micron - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,6)] standard_name = cloud_rain_water_path long_name = cloud rain water path units = g m-2 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,7)] standard_name = mean_effective_radius_for_rain_drop long_name = mean effective radius for rain drop units = micron - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,8)] standard_name = cloud_snow_water_path long_name = cloud snow water path units = g m-2 - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clouds(:,:,9)] standard_name = mean_effective_radius_for_snow_flake long_name = mean effective radius for snow flake units = micron - dimensions = (horizontal_dimension,adjusted_vertical_layer_dimension_for_radiation) + dimensions = (horizontal_dimension,vertical_dimension) type = real kind = kind_phys [clw] From 2d6bf80760becdcbfc98dac20c3cda51a8814119 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 8 Jun 2020 15:49:53 -0600 Subject: [PATCH 25/26] remove hurricane specific files --- .../input_GFS_v15p2_hurr.nml | 116 --------- .../input_GFS_v16beta_hwrf_sfc.nml | 140 ---------- .../input_GFS_v16beta_wrfv4.nml | 139 ---------- ccpp/physics_namelists/input_HWRF.nml | 122 --------- scm/data/physics_input_data/GENPARM.TBL | 36 --- scm/data/physics_input_data/SOILPARM.TBL | 45 ---- scm/data/physics_input_data/VEGPARM.TBL | 243 ------------------ .../fv3_model_point_glacier.nc | Bin 138885 -> 0 bytes .../case_config/fv3_model_point_glacier.nml | 26 -- scm/src/hurr_multi_run.py | 3 - 10 files changed, 870 deletions(-) delete mode 100644 ccpp/physics_namelists/input_GFS_v15p2_hurr.nml delete mode 100644 ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml delete mode 100644 ccpp/physics_namelists/input_GFS_v16beta_wrfv4.nml delete mode 100644 ccpp/physics_namelists/input_HWRF.nml delete mode 100644 scm/data/physics_input_data/GENPARM.TBL delete mode 100644 scm/data/physics_input_data/SOILPARM.TBL delete mode 100644 scm/data/physics_input_data/VEGPARM.TBL delete mode 100644 scm/data/processed_case_input/fv3_model_point_glacier.nc delete mode 100644 scm/etc/case_config/fv3_model_point_glacier.nml delete mode 100644 scm/src/hurr_multi_run.py diff --git a/ccpp/physics_namelists/input_GFS_v15p2_hurr.nml b/ccpp/physics_namelists/input_GFS_v15p2_hurr.nml deleted file mode 100644 index b23219056..000000000 --- a/ccpp/physics_namelists/input_GFS_v15p2_hurr.nml +++ /dev/null @@ -1,116 +0,0 @@ -&gfs_physics_nml - fhzero = 6. - h2o_phys = .true. - ldiag3d = .true. - fhcyc = 24. - use_ufo = .true. - pre_rad = .false. - ncld = 5 - imp_physics = 11 - pdfcld = .false. - fhswr = 3600. - fhlwr = 3600. - ialb = 1 - iems = 1 - iaer = 111 - ico2 = 2 - isubc_sw = 2 - isubc_lw = 2 - isol = 2 - lwhtr = .true. - swhtr = .true. - cnvgwd = .true. - shal_cnv = .true. - cal_pre = .false. - redrag = .true. - dspheat = .true. - hybedmf = .true. - hurr_pbl = .true. - moninq_fac = -1.0 - random_clds = .false. - trans_trac = .true. - cnvcld = .true. - imfshalcnv = 2 - imfdeepcnv = 2 - cdmbgwd = 3.5,0.25 - prslrd0 = 0. - ivegsrc = 1 - isot = 1 - debug = .false. - oz_phys = .false. - oz_phys_2015 = .true. - nstf_name = 2,1,0,0,0 - nst_anl = .true. - psautco = 0.0008,0.0005 - prautco = 0.00015,0.00015 - lgfdlmprad = .true. - effr_in = .true. - do_sppt = .false. - do_shum = .false. - do_skeb = .false. - do_sfcperts = .false. -/ - -&gfdl_cloud_microphysics_nml - sedi_transport = .true. - do_sedi_heat = .false. - rad_snow = .true. - rad_graupel = .true. - rad_rain = .true. - const_vi = .F. - const_vs = .F. - const_vg = .F. - const_vr = .F. - vi_max = 1. - vs_max = 2. - vg_max = 12. - vr_max = 12. - qi_lim = 1. - prog_ccn = .false. - do_qa = .false. - fast_sat_adj = .false. - tau_l2v = 225. - tau_v2l = 150. - tau_g2v = 900. - rthresh = 10.e-6 ! This is a key parameter for cloud water - dw_land = 0.16 - dw_ocean = 0.10 - ql_gen = 1.0e-3 - ql_mlt = 1.0e-3 - qi0_crt = 8.0E-5 - qs0_crt = 1.0e-3 - tau_i2s = 1000. - c_psaci = 0.05 - c_pgacs = 0.01 - rh_inc = 0.30 - rh_inr = 0.30 - rh_ins = 0.30 - ccn_l = 300. - ccn_o = 100. - c_paut = 0.5 - c_cracw = 0.8 - use_ppm = .false. - use_ccn = .true. - mono_prof = .true. - z_slope_liq = .true. - z_slope_ice = .true. - de_ice = .false. - fix_negative = .true. - icloud_f = 1 - mp_time = 150. -/ - -&cires_ugwp_nml - knob_ugwp_solver = 2 - knob_ugwp_source = 1,1,0,0 - knob_ugwp_wvspec = 1,25,25,25 - knob_ugwp_azdir = 2,4,4,4 - knob_ugwp_stoch = 0,0,0,0 - knob_ugwp_effac = 1,1,1,1 - knob_ugwp_doaxyz = 1 - knob_ugwp_doheat = 1 - knob_ugwp_dokdis = 1 - knob_ugwp_ndx4lh = 1 - knob_ugwp_version = 0 - launch_level = 25 -/ diff --git a/ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml b/ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml deleted file mode 100644 index 353c16933..000000000 --- a/ccpp/physics_namelists/input_GFS_v16beta_hwrf_sfc.nml +++ /dev/null @@ -1,140 +0,0 @@ -&gfs_physics_nml - fhzero = 6 - h2o_phys = .true. - ldiag3d = .true. - fhcyc = 0 - use_ufo = .true. - pre_rad = .false. - ncld = 5 - imp_physics = 11 - pdfcld = .false. - fhswr = 3600. - fhlwr = 3600. - ialb = 1 - iems = 1 - iaer = 5111 - icliq_sw = 2 - iovr_lw = 3 - iovr_sw = 3 - ico2 = 2 - isubc_sw = 2 - isubc_lw = 2 - isol = 2 - lwhtr = .true. - swhtr = .true. - cnvgwd = .true. - shal_cnv = .true. - cal_pre = .false. - redrag = .true. - dspheat = .true. - hybedmf = .false. - satmedmf = .true. - isatmedmf = 1 - lheatstrg = .true. - random_clds = .false. - trans_trac = .true. - cnvcld = .true. - imfshalcnv = 2 - imfdeepcnv = 2 - cdmbgwd = 4.0,0.15,1.0,1.0 - prslrd0 = 0. - ivegsrc = 1 - isot = 1 - lsoil = 4 - lsm = 4 - iopt_dveg = 1 - iopt_crs = 1 - iopt_btr = 1 - iopt_run = 1 - iopt_sfc = 1 - iopt_frz = 1 - iopt_inf = 1 - iopt_rad = 1 - iopt_alb = 2 - iopt_snf = 4 - iopt_tbot = 2 - iopt_stc = 1 - sfc_z0_type = 4 - debug = .false. - oz_phys = .false. - oz_phys_2015 = .true. - nstf_name = 2,1,0,0,0 - nst_anl = .true. - psautco = 0.0008,0.0005 - prautco = 0.00015,0.00015 - lgfdlmprad = .true. - effr_in = .true. - ldiag_ugwp = .false. - do_ugwp = .false. - do_tofd = .true. - do_sppt = .false. - do_shum = .false. - do_skeb = .false. - do_sfcperts = .false. -/ - -&gfdl_cloud_microphysics_nml - sedi_transport = .true. - do_sedi_heat = .false. - rad_snow = .true. - rad_graupel = .true. - rad_rain = .true. - const_vi = .F. - const_vs = .F. - const_vg = .F. - const_vr = .F. - vi_max = 1. - vs_max = 2. - vg_max = 12. - vr_max = 12. - qi_lim = 1. - prog_ccn = .false. - do_qa = .false. - fast_sat_adj = .false. - tau_l2v = 225. - tau_v2l = 150. - tau_g2v = 900. - rthresh = 10.e-6 ! This is a key parameter for cloud water - dw_land = 0.16 - dw_ocean = 0.10 - ql_gen = 1.0e-3 - ql_mlt = 1.0e-3 - qi0_crt = 8.0E-5 - qs0_crt = 1.0e-3 - tau_i2s = 1000. - c_psaci = 0.05 - c_pgacs = 0.01 - rh_inc = 0.30 - rh_inr = 0.30 - rh_ins = 0.30 - ccn_l = 300. - ccn_o = 100. - c_paut = 0.5 - c_cracw = 0.8 - use_ppm = .false. - use_ccn = .true. - mono_prof = .true. - z_slope_liq = .true. - z_slope_ice = .true. - de_ice = .false. - fix_negative = .true. - icloud_f = 1 - mp_time = 150. - reiflag = 2 -/ - -&cires_ugwp_nml - knob_ugwp_solver = 2 - knob_ugwp_source = 1,1,0,0 - knob_ugwp_wvspec = 1,25,25,25 - knob_ugwp_azdir = 2,4,4,4 - knob_ugwp_stoch = 0,0,0,0 - knob_ugwp_effac = 1,1,1,1 - knob_ugwp_doaxyz = 1 - knob_ugwp_doheat = 1 - knob_ugwp_dokdis = 1 - knob_ugwp_ndx4lh = 1 - knob_ugwp_version = 0 - launch_level = 27 -/ - diff --git a/ccpp/physics_namelists/input_GFS_v16beta_wrfv4.nml b/ccpp/physics_namelists/input_GFS_v16beta_wrfv4.nml deleted file mode 100644 index a14fbc064..000000000 --- a/ccpp/physics_namelists/input_GFS_v16beta_wrfv4.nml +++ /dev/null @@ -1,139 +0,0 @@ -&gfs_physics_nml - fhzero = 6 - h2o_phys = .true. - ldiag3d = .true. - fhcyc = 0 - use_ufo = .true. - pre_rad = .false. - ncld = 5 - imp_physics = 11 - pdfcld = .false. - fhswr = 3600. - fhlwr = 3600. - ialb = 1 - iems = 1 - iaer = 5111 - icliq_sw = 2 - iovr_lw = 3 - iovr_sw = 3 - ico2 = 2 - isubc_sw = 2 - isubc_lw = 2 - isol = 2 - lwhtr = .true. - swhtr = .true. - cnvgwd = .true. - shal_cnv = .true. - cal_pre = .false. - redrag = .true. - dspheat = .true. - hybedmf = .false. - satmedmf = .true. - isatmedmf = 1 - lheatstrg = .true. - random_clds = .false. - trans_trac = .true. - cnvcld = .true. - imfshalcnv = 2 - imfdeepcnv = 2 - cdmbgwd = 4.0,0.15,1.0,1.0 - prslrd0 = 0. - ivegsrc = 1 - isot = 1 - lsoil = 4 - lsm = 4 - iopt_dveg = 1 - iopt_crs = 1 - iopt_btr = 1 - iopt_run = 1 - iopt_sfc = 1 - iopt_frz = 1 - iopt_inf = 1 - iopt_rad = 1 - iopt_alb = 2 - iopt_snf = 4 - iopt_tbot = 2 - iopt_stc = 1 - debug = .false. - oz_phys = .false. - oz_phys_2015 = .true. - nstf_name = 2,1,0,0,0 - nst_anl = .true. - psautco = 0.0008,0.0005 - prautco = 0.00015,0.00015 - lgfdlmprad = .true. - effr_in = .true. - ldiag_ugwp = .false. - do_ugwp = .false. - do_tofd = .true. - do_sppt = .false. - do_shum = .false. - do_skeb = .false. - do_sfcperts = .false. -/ - -&gfdl_cloud_microphysics_nml - sedi_transport = .true. - do_sedi_heat = .false. - rad_snow = .true. - rad_graupel = .true. - rad_rain = .true. - const_vi = .F. - const_vs = .F. - const_vg = .F. - const_vr = .F. - vi_max = 1. - vs_max = 2. - vg_max = 12. - vr_max = 12. - qi_lim = 1. - prog_ccn = .false. - do_qa = .false. - fast_sat_adj = .false. - tau_l2v = 225. - tau_v2l = 150. - tau_g2v = 900. - rthresh = 10.e-6 ! This is a key parameter for cloud water - dw_land = 0.16 - dw_ocean = 0.10 - ql_gen = 1.0e-3 - ql_mlt = 1.0e-3 - qi0_crt = 8.0E-5 - qs0_crt = 1.0e-3 - tau_i2s = 1000. - c_psaci = 0.05 - c_pgacs = 0.01 - rh_inc = 0.30 - rh_inr = 0.30 - rh_ins = 0.30 - ccn_l = 300. - ccn_o = 100. - c_paut = 0.5 - c_cracw = 0.8 - use_ppm = .false. - use_ccn = .true. - mono_prof = .true. - z_slope_liq = .true. - z_slope_ice = .true. - de_ice = .false. - fix_negative = .true. - icloud_f = 1 - mp_time = 150. - reiflag = 2 -/ - -&cires_ugwp_nml - knob_ugwp_solver = 2 - knob_ugwp_source = 1,1,0,0 - knob_ugwp_wvspec = 1,25,25,25 - knob_ugwp_azdir = 2,4,4,4 - knob_ugwp_stoch = 0,0,0,0 - knob_ugwp_effac = 1,1,1,1 - knob_ugwp_doaxyz = 1 - knob_ugwp_doheat = 1 - knob_ugwp_dokdis = 1 - knob_ugwp_ndx4lh = 1 - knob_ugwp_version = 0 - launch_level = 27 -/ - diff --git a/ccpp/physics_namelists/input_HWRF.nml b/ccpp/physics_namelists/input_HWRF.nml deleted file mode 100644 index 1d41bf56d..000000000 --- a/ccpp/physics_namelists/input_HWRF.nml +++ /dev/null @@ -1,122 +0,0 @@ -&gfs_physics_nml - fhzero = 6. - h2o_phys = .true. - ldiag3d = .true. - fhcyc = 0. - use_ufo = .true. - pre_rad = .false. - ncld = 5 - imp_physics = 15 - spec_adv = .true. - RHGRD = 0.98 - pdfcld = .false. - fhswr = 3600. - fhlwr = 3600. - ialb = 1 - iems = 1 - iaer = 111 - ico2 = 2 - isubc_sw = 2 - isubc_lw = 2 - isol = 2 - lwhtr = .true. - swhtr = .true. - cnvgwd = .true. - shal_cnv = .true. - cal_pre = .false. - redrag = .true. - dspheat = .true. - hybedmf = .true. - hurr_pbl = .true. - moninq_fac = -1.0 - random_clds = .false. - trans_trac = .true. - cnvcld = .true. - imfshalcnv = 2 - imfdeepcnv = 2 - cdmbgwd = 3.5,0.25 - prslrd0 = 0. - ivegsrc = 1 - isot = 1 - lsm = 4 - debug = .false. - oz_phys = .false. - oz_phys_2015 = .true. - nstf_name = 2,1,0,0,0 - nst_anl = .true. - psautco = 0.0008,0.0005 - prautco = 0.00015,0.00015 - lgfdlmprad = .true. - effr_in = .true. - do_sppt = .false. - do_shum = .false. - do_skeb = .false. - do_sfcperts = .false. - icloud = 3 - iovr_lw = 4 - iovr_sw = 4 -/ - -&gfdl_cloud_microphysics_nml - sedi_transport = .true. - do_sedi_heat = .false. - rad_snow = .true. - rad_graupel = .true. - rad_rain = .true. - const_vi = .F. - const_vs = .F. - const_vg = .F. - const_vr = .F. - vi_max = 1. - vs_max = 2. - vg_max = 12. - vr_max = 12. - qi_lim = 1. - prog_ccn = .false. - do_qa = .false. - fast_sat_adj = .false. - tau_l2v = 225. - tau_v2l = 150. - tau_g2v = 900. - rthresh = 10.e-6 ! This is a key parameter for cloud water - dw_land = 0.16 - dw_ocean = 0.10 - ql_gen = 1.0e-3 - ql_mlt = 1.0e-3 - qi0_crt = 8.0E-5 - qs0_crt = 1.0e-3 - tau_i2s = 1000. - c_psaci = 0.05 - c_pgacs = 0.01 - rh_inc = 0.30 - rh_inr = 0.30 - rh_ins = 0.30 - ccn_l = 300. - ccn_o = 100. - c_paut = 0.5 - c_cracw = 0.8 - use_ppm = .false. - use_ccn = .true. - mono_prof = .true. - z_slope_liq = .true. - z_slope_ice = .true. - de_ice = .false. - fix_negative = .true. - icloud_f = 1 - mp_time = 150. -/ - -&cires_ugwp_nml - knob_ugwp_solver = 2 - knob_ugwp_source = 1,1,0,0 - knob_ugwp_wvspec = 1,25,25,25 - knob_ugwp_azdir = 2,4,4,4 - knob_ugwp_stoch = 0,0,0,0 - knob_ugwp_effac = 1,1,1,1 - knob_ugwp_doaxyz = 1 - knob_ugwp_doheat = 1 - knob_ugwp_dokdis = 1 - knob_ugwp_ndx4lh = 1 - knob_ugwp_version = 0 - launch_level = 25 -/ diff --git a/scm/data/physics_input_data/GENPARM.TBL b/scm/data/physics_input_data/GENPARM.TBL deleted file mode 100644 index 17fc9172b..000000000 --- a/scm/data/physics_input_data/GENPARM.TBL +++ /dev/null @@ -1,36 +0,0 @@ -General Parameters -SLOPE_DATA -9 -0.1 -0.6 -1.0 -0.35 -0.55 -0.8 -0.63 -0.0 -0.0 -SBETA_DATA --2.0 -FXEXP_DATA -2.0 -CSOIL_DATA -2.00E+6 -SALP_DATA -2.6 -REFDK_DATA -2.0E-6 -REFKDT_DATA -3.0 -FRZK_DATA -0.15 -ZBOT_DATA --8.0 -CZIL_DATA -0.1 -SMLOW_DATA -0.5 -SMHIGH_DATA -3.0 -LVCOEF_DATA -0.5 diff --git a/scm/data/physics_input_data/SOILPARM.TBL b/scm/data/physics_input_data/SOILPARM.TBL deleted file mode 100644 index 518ba6f8b..000000000 --- a/scm/data/physics_input_data/SOILPARM.TBL +++ /dev/null @@ -1,45 +0,0 @@ -Soil Parameters -STAS -19,1 'BB DRYSMC F11 MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' -1, 2.79, 0.010, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.010, 0.92, 'SAND' -2, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.82, 'LOAMY SAND' -3, 4.74, 0.047, -0.569, 0.434, 0.312, 0.141, 5.23E-6, 8.05E-6, 0.047, 0.60, 'SANDY LOAM' -4, 5.33, 0.084, 0.162, 0.476, 0.360, 0.759, 2.81E-6, 2.39E-5, 0.084, 0.25, 'SILT LOAM' -5, 3.86, 0.061, 0.162, 0.484, 0.347, 0.955, 2.18E-6, 1.66E-5, 0.061, 0.10, 'SILT' -6, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.40, 'LOAM' -7, 6.77, 0.069, -1.491, 0.404, 0.315, 0.135, 4.45E-6, 1.01E-5, 0.069, 0.60, 'SANDY CLAY LOAM' -8, 8.72, 0.120, -1.118, 0.464, 0.387, 0.617, 2.03E-6, 2.35E-5, 0.120, 0.10, 'SILTY CLAY LOAM' -9, 8.17, 0.103, -1.297, 0.465, 0.382, 0.263, 2.45E-6, 1.13E-5, 0.103, 0.35, 'CLAY LOAM' -10, 10.73, 0.100, -3.209, 0.406, 0.338, 0.098, 7.22E-6, 1.87E-5, 0.100, 0.52, 'SANDY CLAY' -11, 10.39, 0.126, -1.916, 0.468, 0.404, 0.324, 1.34E-6, 9.64E-6, 0.126, 0.10, 'SILTY CLAY' -12, 11.55, 0.138, -2.138, 0.468, 0.412, 0.468, 9.74E-7, 1.12E-5, 0.138, 0.25, 'CLAY' -13, 5.25, 0.066, -0.327, 0.439, 0.329, 0.355, 3.38E-6, 1.43E-5, 0.066, 0.05, 'ORGANIC MATERIAL' -14, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.60, 'WATER' -15, 2.79, 0.006, -1.111, 0.20, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.07, 'BEDROCK' -16, 4.26, 0.028, -1.044, 0.421, 0.283, 0.036, 1.41E-5, 5.14E-6, 0.028, 0.25, 'OTHER(land-ice)' -17, 11.55, 0.030, -10.472, 0.468, 0.454, 0.468, 9.74E-7, 1.12E-5, 0.030, 0.60, 'PLAYA' -18, 2.79, 0.006, -0.472, 0.200, 0.17, 0.069, 1.41E-4, 1.36E-4, 0.006, 0.52, 'LAVA' -19, 2.79, 0.01, -0.472, 0.339, 0.192, 0.069, 4.66E-5, 2.65E-5, 0.01, 0.92, 'WHITE SAND' -Soil Parameters -STAS-RUC -19,1 'BB DRYSMC HC MAXSMC REFSMC SATPSI SATDK SATDW WLTSMC QTZ ' -1, 4.05, 0.002, 1.47, 0.395, 0.174, 0.121, 1.76E-4, 0.608E-6, 0.033, 0.92, 'SAND' -2, 4.38, 0.035, 1.41, 0.410, 0.179, 0.090, 1.56E-4, 0.514E-5, 0.055, 0.82, 'LOAMY SAND' -3, 4.90, 0.041, 1.34, 0.435, 0.249, 0.218, 3.47E-5, 0.805E-5, 0.095, 0.60, 'SANDY LOAM' -4, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.25, 'SILT LOAM' -5, 5.30, 0.034, 1.27, 0.485, 0.369, 0.786, 7.20E-6, 0.239E-4, 0.143, 0.10, 'SILT' -6, 5.39, 0.050, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.137, 0.40, 'LOAM' -7, 7.12, 0.068, 1.18, 0.420, 0.299, 0.299, 6.30E-6, 0.990E-5, 0.148, 0.60, 'SANDY CLAY LOAM' -8, 7.75, 0.060, 1.32, 0.477, 0.357, 0.356, 1.70E-6, 0.237E-4, 0.208, 0.10, 'SILTY CLAY LOAM' -9, 8.52, 0.085, 1.23, 0.476, 0.391, 0.630, 2.45E-6, 0.113E-4, 0.230, 0.35, 'CLAY LOAM' -10, 10.40, 0.100, 1.18, 0.426, 0.316, 0.153, 2.17E-6, 0.187E-4, 0.210, 0.52, 'SANDY CLAY' -11, 10.40, 0.070, 1.15, 0.492, 0.409, 0.490, 1.03E-6, 0.964E-5, 0.250, 0.10, 'SILTY CLAY' -12, 11.40, 0.068, 1.09, 0.482, 0.400, 0.405, 1.28E-6, 0.112E-4, 0.268, 0.25, 'CLAY' -13, 5.39, 0.027, 1.21, 0.451, 0.314, 0.478, 6.95E-6, 0.143E-4, 0.117, 0.05, 'ORGANIC MATERIAL' -14, 0.0, 0.0, 4.18, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.00, 'WATER' -15, 4.05, 0.004, 2.03, 0.200, 0.10 , 0.121, 1.41E-4, 0.136E-3, 0.006, 0.60, 'BEDROCK' -16, 4.90, 0.065, 2.10, 0.435, 0.249, 0.218, 3.47E-5, 0.514E-5, 0.114, 0.05, 'OTHER(land-ice)' -17, 11.40, 0.030, 1.41, 0.468, 0.454, 0.468, 9.74E-7, 0.112E-4, 0.030, 0.60, 'PLAYA' -18, 4.05, 0.006, 1.41, 0.200, 0.17, 0.069, 1.41E-4, 0.136E-3, 0.006, 0.52, 'LAVA' -19, 4.05, 0.01, 1.47, 0.339, 0.236, 0.069, 1.76E-4, 0.608E-6, 0.060, 0.92, 'WHITE SAND' - diff --git a/scm/data/physics_input_data/VEGPARM.TBL b/scm/data/physics_input_data/VEGPARM.TBL deleted file mode 100644 index 5b7ab79a5..000000000 --- a/scm/data/physics_input_data/VEGPARM.TBL +++ /dev/null @@ -1,243 +0,0 @@ -Vegetation Parameters -USGS -27,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' -1, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 0.00, 0.00, 'Urban and Built-Up Land' -2, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 0.50, 0.01, 'Dryland Cropland and Pasture' -3, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 0.50, 0.01, 'Irrigated Cropland and Pasture' -4, .80, 3, 40., 100., 36.25, 0.04, 66., 1.00, 4.50, .920, .985, .18, .23, .05, .15, 0.50, 0.01, 'Mixed Dryland/Irrigated Cropland and Pasture' -5, .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 0.50, 0.01, 'Cropland/Grassland Mosaic' -6, .80, 3, 70., 65., 44.14, 0.04, 60., 2.00, 4.00, .930, .985, .16, .20, .20, .20, 0.50, 0.01, 'Cropland/Woodland Mosaic' -7, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.01, 'Grassland' -8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Shrubland' -9, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 0.50, 0.10, 'Mixed Shrubland/Grassland' -10, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 5.00, 0.10, 'Savanna' -11, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 20.0, 11.5, 'Deciduous Broadleaf Forest' -12, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 14.0, 7.0, 'Deciduous Needleleaf Forest' -13, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 35.0, 1.0, 'Evergreen Broadleaf Forest' -14, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 17.0, 8.5, 'Evergreen Needleleaf Forest' -15, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.0, 10.0, 'Mixed Forest' -16, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'Water Bodies' -17, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 0.50, 0.01, 'Herbaceous Wetland' -18, .60, 2, 100., 30., 51.93, 0.02, 50., 2.00, 5.80, .950, .950, .14, .14, .40, .40, 20.0, 11.5, 'Wooded Wetland' -19, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren or Sparsely Vegetated' -20, .60, 3, 150., 100., 42.00, 0.025, 68., 0.41, 3.35, .920, .920, .15, .20, .10, .10, 0.50, 0.01, 'Herbaceous Tundra' -21, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 10.0, 0.10, 'Wooded Tundra' -22, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 5.00, 0.10, 'Mixed Tundra' -23, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 0.02, 0.01, 'Bare Ground Tundra' -24, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Snow or Ice' -25, .50, 1, 40., 100., 36.25, 0.02, 75., 0.01, 0.01, .890, .890, .30, .30, .01, .01, 0.00, 0.00, 'Playa' -26, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .880, .880, .16, .16, .15, .15, 0.00, 0.00, 'Lava' -27, .00, 0, 999., 999., 999.0, 0.02, 75., 0.01, 0.01, .830, .830, .60, .60, .01, .01, 0.00, 0.00, 'White Sand' -TOPT_DATA -298.0 -CMCMAX_DATA -0.5E-3 -CFACTR_DATA -0.5 -RSMAX_DATA -5000.0 -BARE -19 -NATURAL -5 -CROP -3 -LOW_DENSITY_RESIDENTIAL -31 -HIGH_DENSITY_RESIDENTIAL -32 -HIGH_INTENSITY_INDUSTRIAL -33 -Vegetation Parameters -MODIFIED_IGBP_MODIS_NOAH -20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' -1 .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 17.0, 8.5, 'Evergreen Needleleaf Forest' -2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 35.0, 1.0, 'Evergreen Broadleaf Forest' -3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 14.0, 7.0, 'Deciduous Needleleaf Forest' -4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 20.0, 11.5, 'Deciduous Broadleaf Forest' -5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.0, 10.0, 'Mixed Forests' -6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Closed Shrublands' -7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 0.50, 0.10, 'Open Shrublands' -8, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Woody Savannas' -9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 0.50, 0.10, 'Savannas' -10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.01, 'Grasslands' -11 .60, 2, 70., 65., 55.97 0.015 59., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 0.00, 0.00, 'Permanent wetlands' -12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 0.50, 0.01, 'Croplands' -13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 0.00, 0.00, 'Urban and Built-Up' -14 .80, 3, 40., 100., 36.25, 0.04, 68., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 0.50, 0.01, 'cropland/natural vegetation mosaic' -15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Snow and Ice' -16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren or Sparsely Vegetated' -17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'Water' -18, .60, 3, 150., 100., 42.00, 0.025, 55., 0.41, 3.35, .930, .930, .15, .20, .30, .30, 10.0, 0.10, 'Wooded Tundra' -19, .60, 3, 150., 100., 42.00, 0.025, 60., 0.41, 3.35, .920, .920, .15, .20, .15, .15, 5.00, 0.10, 'Mixed Tundra' -20, .30, 2, 200., 100., 42.00, 0.02, 75., 0.41, 3.35, .900, .900, .25, .25, .05, .10, 0.02, 0.01, 'Barren Tundra' -TOPT_DATA -298.0 -CMCMAX_DATA -0.5E-3 -CFACTR_DATA -0.5 -RSMAX_DATA -5000.0 -BARE -16 -NATURAL -14 -CROP -12 -LOW_DENSITY_RESIDENTIAL -31 -HIGH_DENSITY_RESIDENTIAL -32 -HIGH_INTENSITY_INDUSTRIAL -33 -Vegetation Parameters -NLCD40 -40,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' -1, .70, 4, 125., 30., 47.35, 0.08, 52., 5.00, 6.40, .950, .950, .12, .12, .50, .50, 17.00, 8.50, 'Evergreen Needleleaf Forest' -2, .95, 4, 150., 30., 41.69, 0.08, 35., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 35.00, 1.00, 'Evergreen Broadleaf Forest' -3, .70, 4, 150., 30., 47.35, 0.08, 54., 1.00, 5.16, .930, .940, .14, .15, .50, .50, 14.00, 7.00, 'Deciduous Needleleaf Forest' -4, .80, 4, 100., 30., 54.53, 0.08, 58., 1.85, 3.31, .930, .930, .16, .17, .50, .50, 20.00, 11.50, 'Deciduous Broadleaf Forest' -5, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.00, 10.00, 'Mixed Forest' -6, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.50, 0.10, 'Closed Shrubland' -7, .70, 3, 170., 100., 39.18, 0.035, 65., 0.60, 2.60, .930, .950, .22, .30, .01, .06, 0.50, 0.10, 'Open Shrubland' -8, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .930, .930, .25, .30, .01, .05, 0.00, 0.00, 'Woody Savanna' -9, .50, 3, 70., 65., 54.53, 0.04, 50., 0.50, 3.66, .920, .920, .20, .20, .15, .15, 0.50, 0.10, 'Savanna' -10, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.10, 'Grassland' -11, .60, 2, 100., 30., 51.93, 0.02, 50., 1.75, 5.72, .950, .950, .14, .14, .30, .30, 0.50, 0.10, 'Permanent Wetland' -12, .80, 3, 40., 100., 36.25, 0.04, 66., 1.50, 5.68, .920, .985, .15, .23, .05, .15, 0.50, 0.10, 'Cropland' -13, .10, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .15, .15, .50, .50, 0.00, 0.00, 'Urban and Built-Up' -14, .80, 3, 40., 100., 36.25, 0.04, 66., 2.29, 4.29, .920, .980, .18, .23, .05, .14, 0.50, 0.10, 'Cropland / Natural Veg. Mosaic' -15, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Permanent Snow' -16, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren / Sparsely Vegetated' -17, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'IGBP Water' -18, .00, 0, 999., 999., 999.0, 999., 999., 999.0, 999.0, 999., 999.0, 999.0, 999.0, 999.0, 999.0, 0.00, 0.00, 'Unclassified' -19, .00, 0, 999., 999., 999.0, 999., 999., 999.0, 999.0, 999., 999.0, 999.0, 999.0, 999.0, 999.0, 0.00, 0.00, 'Fill Value' -20, .00, 0, 999., 999., 999.0, 999., 999., 999.0, 999.0, 999., 999.0, 999.0, 999.0, 999.0, 999.0, 0.00, 0.00, 'Unclassified' -21, .00, 0, 100., 30., 51.75, 0.01, 70., 0.01, 0.01, .980, .980, .08, .08, 0.0001, 0.0001, 0.00, 0.00, 'Open Water' -22, .00, 1, 999., 999., 999.0, 0.02, 82., 0.01, 0.01, .950, .950, .55, .70, 0.001, 0.001, 0.00, 0.00, 'Perennial Ice/Snow' -23, .30, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, .50, .50, 0.00, 0.00, 'Developed Open Space' -24, .27, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, .70, .70, 0.00, 0.00, 'Developed Low Intensity' -25, .02, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, 1.5, 1.5, 0.00, 0.00, 'Developed Medium Intensity' -26, .11, 1, 200., 999., 999.0, 0.04, 46., 1.00, 1.00, .880, .880, .20, .20, 2.0, 2.0, 0.00, 0.00, 'Developed High Intensity' -27, .01, 1, 999., 999., 999.0, 0.02, 75., 0.10, 0.75, .900, .900, .38, .38, .01, .01, 0.02, 0.01, 'Barren Land' -28, .80, 4, 125., 30., 54.70, 0.08, 56., 1.00, 5.16, .930, .940, .14, .17, .50, .50, 20.00, 11.50, 'Deciduous Forest' -29, .95, 4, 140., 30., 44.00, 0.08, 42., 3.08, 6.48, .950, .950, .12, .12, .50, .50, 17.00, 8.50, 'Evergreen Forest' -30, .80, 4, 125., 30., 51.93, 0.08, 53., 2.80, 5.50, .930, .970, .17, .25, .20, .50, 18.00, 10.00, 'Mixed Forest' -31, .70, 3, 170., 100., 39.18, 0.035, 65., 1.00, 4.00, .930, .950, .16, .30, .01, .04, 0.50, 0.10, 'Dwarf Scrub' -32, .70, 3, 300., 100., 42.00, 0.03, 60., 0.50, 3.66, .930, .930, .22, .30, .01, .05, 0.50, 0.10, 'Shrub/Scrub' -33, .80, 3, 40., 100., 36.35, 0.04, 70., 0.52, 2.90, .920, .960, .19, .23, .10, .12, 0.50, 0.10, 'Grassland/Herbaceous' -34, .60, 2, 40., 100., 60.00, 0.01, 68., 1.50, 5.65, .950, .950, .14, .14, .20, .20, 0.50, 0.10, 'Sedge/Herbaceous' -35, .60, 2, 40., 100., 60.00, 0.01, 68., 1.00, 2.00, .950, .950, .31, .31, .01, .01, 0.00, 0.00, 'Lichens' -36, .60, 2, 40., 100., 60.00, 0.01, 68., 1.00, 2.00, .950, .950, .24, .24, .01, .01, 0.00, 0.00, 'Moss' -37, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .920, .985, .17, .23, .05, .15, 0.50, 0.10, 'Pasture/Hay' -38, .80, 3, 40., 100., 36.25, 0.04, 66., 1.56, 5.68, .930, .985, .20, .25, .02, .10, 0.50, 0.10, 'Cultivated Crops' -39, .60, 2, 100., 30., 51.93, 0.02, 50., 0.70, 3.50, .950, .950, .14, .14, .40, .40, 20.00, 11.50, 'Woody Wetland' -40, .60, 2, 40., 100., 60.00, 0.01, 68., 0.70, 3.50, .950, .950, .12, .12, .20, .20, 0.50, 0.10, 'Emergent Herbaceous Wetland' -TOPT_DATA -298.0 -CMCMAX_DATA -0.5E-3 -CFACTR_DATA -0.5 -RSMAX_DATA -5000.0 -BARE -16 -NATURAL -14 -CROP -12 -LOW_DENSITY_RESIDENTIAL -24 -HIGH_DENSITY_RESIDENTIAL -26 -HIGH_INTENSITY_INDUSTRIAL -99 -Vegetation Parameters -USGS-RUC -28,1, 'ALBEDO Z0 LEMI PC SHDFAC IFOR RS RGL HS SNUP LAI MAXALB' -1, .18, 1.0, .88, .40, .10, 9, 200., 999., 999.0, 0.04, 1.00, 40., 'Urban and Built-Up Land' -2, .17, .06, .92, .30, .80, 7, 40., 100., 36.25, 0.04, 5.68, 64., 'Dryland Cropland and Pasture' -3, .18, .075, .92, .40, .80, 7, 40., 100., 36.25, 0.04, 5.68, 64., 'Irrigated Cropland and Pasture' -4, .18, .125, .92, .40, .80, 7, 40., 100., 36.25, 0.04, 4.50, 64., 'Mixed Dryland/Irrigated Cropland and Pasture' -5, .18, .15, .92, .40, .80, 3, 40., 100., 36.25, 0.04, 4.29, 64., 'Cropland/Grassland Mosaic' -6, .16, .20, .93, .40, .80, 3, 70., 65., 44.14, 0.04, 4.00, 60., 'Cropland/Woodland Mosaic' -7, .19, .075 .92, .40, .80, 5, 40., 100., 36.35, 0.04, 2.90, 64., 'Grassland' -8, .22, .10, .88, .40, .70, 4, 300., 100., 42.00, 0.03, 3.66, 69., 'Shrubland' -9, .20, .11, .90, .40, .70, 4, 170., 100., 39.18, 0.035, 2.60, 67., 'Mixed Shrubland/Grassland' -10, .20, .15, .92, .40, .50, 5, 70., 65., 54.53, 0.04, 3.66, 45., 'Savanna' -11, .16, .70, .93, .55, .80, 3, 100., 30., 54.53, 0.08, 3.31, 58., 'Deciduous Broadleaf Forest' -12, .14, .70, .94, .55, .70, 4, 150., 30., 47.35, 0.08, 5.16, 54., 'Deciduous Needleleaf Forest' -13, .12, .70, .95, .55, .95, 2, 150., 30., 41.69, 0.08, 6.48, 32., 'Evergreen Broadleaf Forest' -14, .12, .70, .95, .55, .70, 1, 125., 30., 47.35, 0.08, 6.40, 52., 'Evergreen Needleleaf Forest' -15, .13, .70, .94, .55, .80, 2, 125., 30., 51.93, 0.08, 5.50, 53., 'Mixed Forest' -16, .08, .0001, .98, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Water Bodies' -17, .14, .20, .95, .55, .60, 4, 40., 100., 60.00, 0.01, 5.65, 35., 'Herbaceous Wetland' -18, .14, .40, .95, .55, .60, 4, 100., 30., 51.93, 0.02, 5.80, 30., 'Wooded Wetland' -19, .25, .05, .85, .30, .01, 5, 999., 999., 999.0, 0.02, 0.75, 69., 'Barren or Sparsely Vegetated' -20, .15, .10, .92, .30, .60, 5, 150., 100., 42.00, 0.025, 3.35, 58., 'Herbaceous Tundra' -21, .15, .15, .93, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 55., 'Wooded Tundra' -22, .15, .10, .92, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 55., 'Mixed Tundra' -23, .25, .065, .85, .30, .30, 5, 200., 100., 42.00, 0.02, 3.35, 65., 'Bare Ground Tundra' -24, .55, .0024, .98, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 75., 'Snow or Ice' -25, .30, .01, .85, .30, .50, 9, 40., 100., 36.25, 0.02, 0.01, 69., 'Playa' -26, .16, .15, .85, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 69., 'Lava' -27, .60, .01, .90, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 69., 'White Sand' -28, .08, .0001, .98, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Lakes' -TOPT_DATA -298.0 -CMCMAX_DATA -0.2E-3 -CFACTR_DATA -0.5 -RSMAX_DATA -5000.0 -BARE -19 -NATURAL -5 -CROP -3 -URBAN -1 -Vegetation Parameters -MODI-RUC -21,1, 'ALBEDO Z0 LEMI PC SHDFAC IFOR RS RGL HS SNUP LAI MAXALB' -1 .12, .70, .950, .55, .70, 1, 125., 30., 47.35, 0.08, 6.40, 52., 'Evergreen Needleleaf Forest' -2, .12, .70, .950, .55, .95, 2, 150., 30., 41.69, 0.08, 6.48, 35., 'Evergreen Broadleaf Forest' -3, .14, .70, .940, .55, .70, 4, 150., 30., 47.35, 0.08, 5.16, 54., 'Deciduous Needleleaf Forest' -4, .16, .70, .930, .55, .80, 3, 100., 30., 54.53, 0.08, 3.31, 58., 'Deciduous Broadleaf Forest' -5, .13, .70, .940, .55, .80, 2, 125., 30., 51.93, 0.08, 5.50, 53., 'Mixed Forests' -6, .22, .10, .930, .40, .70, 4, 300., 100., 42.00, 0.03, 3.66, 60., 'Closed Shrublands' -7, .20, .10, .880, .40, .70, 4, 170., 100., 39.18, 0.035, 2.60, 65., 'Open Shrublands' -8, .20, .15, .930, .40, .70, 5, 300., 100., 42.00, 0.03, 3.66, 60., 'Woody Savannas' -9, .20, .15, .920, .40, .50, 5, 70., 65., 54.53, 0.04, 3.66, 50., 'Savannas' -10, .19, .075, .920, .40, .80, 5, 40., 100., 36.35, 0.04, 2.90, 70., 'Grasslands' -11 .14, .30, .950, .40, .60, 4, 70., 65., 55.97 0.015 5.72, 59., 'Permanent wetlands' -12, .18, .20, .935, .40, .80, 7, 40., 100., 36.25, 0.04, 5.68, 66., 'Croplands' -13, .18, 1.0, .880, .40, .10, 9, 200., 999., 999.0, 0.04, 1.00, 46., 'Urban and Built-Up' -14 .16, .20, .920, .40, .80, 7, 40., 100., 36.25, 0.04, 4.29, 68., 'cropland/natural vegetation mosaic' -15, .55, .011, .980, .00, .00, 9, 999., 999., 999.0, 0.02, 0.01, 82., 'Snow and Ice' -16, .25, .065, .850, .30, .01, 5, 999., 999., 999.0, 0.02, 0.75, 75., 'Barren or Sparsely Vegetated' -17, .08, .0001, .980, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Water' -18, .15, .15, .930, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 55., 'Wooded Tundra' -19, .15, .10, .920, .40, .60, 5, 150., 100., 42.00, 0.025, 3.35, 60., 'Mixed Tundra' -20, .15, .06, .900, .30, .30, 5, 200., 100., 42.00, 0.02, 3.35, 75., 'Barren Tundra' -21, .08, .0001, .980, .00, .00, 9, 100., 30., 51.75, 0.01, 0.01, 70., 'Lakes' -TOPT_DATA -298.0 -CMCMAX_DATA -0.2E-3 -CFACTR_DATA -0.5 -RSMAX_DATA -5000.0 -BARE -16 -NATURAL -10 -CROP -12 -URBAN -13 diff --git a/scm/data/processed_case_input/fv3_model_point_glacier.nc b/scm/data/processed_case_input/fv3_model_point_glacier.nc deleted file mode 100644 index e5ce1fdd5e249837ef173dfc28fd4be412ab36eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138885 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 diff --git a/scm/etc/case_config/fv3_model_point_glacier.nml b/scm/etc/case_config/fv3_model_point_glacier.nml deleted file mode 100644 index c7e2a0e20..000000000 --- a/scm/etc/case_config/fv3_model_point_glacier.nml +++ /dev/null @@ -1,26 +0,0 @@ -$case_config -model_name = 'FV3', -n_columns = 1, -case_name = 'fv3_model_point_glacier', -dt = 900.0, -time_scheme = 1, -runtime = 86400, -output_frequency = 900.0, -n_levels = 64, -output_file = 'output', -case_data_dir = '../data/processed_case_input', -vert_coord_data_dir = '../data/vert_coord_data', -thermo_forcing_type = 0, -model_ics=.true., -mom_forcing_type = 0, -relax_time = 7200.0, -sfc_flux_spec = .false., -sfc_type=1, -reference_profile_choice = 2, -C_RES = 96, -year = 2016, -month = 10, -day = 3, -hour = 0, -$end - diff --git a/scm/src/hurr_multi_run.py b/scm/src/hurr_multi_run.py deleted file mode 100644 index 4ac3fea87..000000000 --- a/scm/src/hurr_multi_run.py +++ /dev/null @@ -1,3 +0,0 @@ -cases = ["arm_sgp_summer_1997_A","astex","bomex","LASSO_2016051812","twpice"] -suites = ["SCM_GFS_v15p2"] -namelists = ["input_GFS_v15p2_hurr.nml"] \ No newline at end of file From bacbc930fcae211d943e452156156a4e80cd64d0 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 8 Jun 2020 20:50:43 -0600 Subject: [PATCH 26/26] remove whitespace --- scm/src/GFS_typedefs.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index b03c20306..b406da928 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -3662,7 +3662,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%wminras = wminras Model%rbcr = rbcr Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 - + Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 Model%do_mynnedmf = do_mynnedmf Model%do_mynnsfclay = do_mynnsfclay @@ -5497,7 +5497,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%zmtnblck = zero if (Model%imp_physics == Model%imp_physics_fer_hires) then - Diag%TRAIN = zero + Diag%TRAIN = zero end if Diag%totprcpb = zero