diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 5b93b18cc..95b4e6a6c 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -115,6 +115,8 @@ 'ccpp/physics/physics/cires_ugwp_post.F90' , 'ccpp/physics/physics/unified_ugwp.F90' , 'ccpp/physics/physics/unified_ugwp_post.F90' , + 'ccpp/physics/physics/ugwpv1_gsldrag.F90' , + 'ccpp/physics/physics/ugwpv1_gsldrag_post.F90' , 'ccpp/physics/physics/cnvc90.f' , 'ccpp/physics/physics/cs_conv.F90' , 'ccpp/physics/physics/cs_conv_aw_adj.F90' , @@ -176,7 +178,7 @@ 'ccpp/physics/physics/sfc_drv.f' , 'ccpp/physics/physics/sfc_noah_wrfv4_interstitial.F90' , 'ccpp/physics/physics/sfc_noah_wrfv4.F90' , - 'ccpp/physics/physics/sfc_noahmp_drv.f' , + 'ccpp/physics/physics/sfc_noahmp_drv.F90' , 'ccpp/physics/physics/flake_driver.F90' , 'ccpp/physics/physics/sfc_nst.f' , 'ccpp/physics/physics/sfc_ocean.F' , diff --git a/ccpp/physics b/ccpp/physics index 8010a66d7..b127d9bbe 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 8010a66d7f7724d4df896995dc26196e199c0c1e +Subproject commit b127d9bbe9ea78a96d4d2f40a674881ccecd2790 diff --git a/ccpp/physics_namelists/input_GFS_v16beta.nml b/ccpp/physics_namelists/input_GFS_v16.nml similarity index 100% rename from ccpp/physics_namelists/input_GFS_v16beta.nml rename to ccpp/physics_namelists/input_GFS_v16.nml diff --git a/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP.nml b/ccpp/physics_namelists/input_GFS_v16_RRTMGP.nml similarity index 100% rename from ccpp/physics_namelists/input_GFS_v16beta_RRTMGP.nml rename to ccpp/physics_namelists/input_GFS_v16_RRTMGP.nml diff --git a/ccpp/physics_namelists/input_GFS_v16beta_RRTMGP_LWjac.nml b/ccpp/physics_namelists/input_GFS_v16_RRTMGP_LWjac.nml similarity index 100% rename from ccpp/physics_namelists/input_GFS_v16beta_RRTMGP_LWjac.nml rename to ccpp/physics_namelists/input_GFS_v16_RRTMGP_LWjac.nml diff --git a/ccpp/suites/suite_SCM_GFS_v16beta.xml b/ccpp/suites/suite_SCM_GFS_v16.xml similarity index 98% rename from ccpp/suites/suite_SCM_GFS_v16beta.xml rename to ccpp/suites/suite_SCM_GFS_v16.xml index 146b137ab..f8d48286a 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta.xml +++ b/ccpp/suites/suite_SCM_GFS_v16.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP.xml b/ccpp/suites/suite_SCM_GFS_v16_RRTMGP.xml similarity index 98% rename from ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP.xml rename to ccpp/suites/suite_SCM_GFS_v16_RRTMGP.xml index de5e0fb10..2a61854f1 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP.xml +++ b/ccpp/suites/suite_SCM_GFS_v16_RRTMGP.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP_ps.xml b/ccpp/suites/suite_SCM_GFS_v16_RRTMGP_ps.xml similarity index 98% rename from ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP_ps.xml rename to ccpp/suites/suite_SCM_GFS_v16_RRTMGP_ps.xml index ebf65fdb4..8d1eb7cff 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta_RRTMGP_ps.xml +++ b/ccpp/suites/suite_SCM_GFS_v16_RRTMGP_ps.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_no_nsst.xml b/ccpp/suites/suite_SCM_GFS_v16_no_nsst.xml similarity index 98% rename from ccpp/suites/suite_SCM_GFS_v16beta_no_nsst.xml rename to ccpp/suites/suite_SCM_GFS_v16_no_nsst.xml index 2f417a62e..801d7996d 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta_no_nsst.xml +++ b/ccpp/suites/suite_SCM_GFS_v16_no_nsst.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_no_nsst_ps.xml b/ccpp/suites/suite_SCM_GFS_v16_no_nsst_ps.xml similarity index 97% rename from ccpp/suites/suite_SCM_GFS_v16beta_no_nsst_ps.xml rename to ccpp/suites/suite_SCM_GFS_v16_no_nsst_ps.xml index 9fc3cd9ba..874ac8398 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta_no_nsst_ps.xml +++ b/ccpp/suites/suite_SCM_GFS_v16_no_nsst_ps.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre diff --git a/ccpp/suites/suite_SCM_GFS_v16beta_ps.xml b/ccpp/suites/suite_SCM_GFS_v16_ps.xml similarity index 97% rename from ccpp/suites/suite_SCM_GFS_v16beta_ps.xml rename to ccpp/suites/suite_SCM_GFS_v16_ps.xml index 33c00889e..af4c5ee5d 100644 --- a/ccpp/suites/suite_SCM_GFS_v16beta_ps.xml +++ b/ccpp/suites/suite_SCM_GFS_v16_ps.xml @@ -1,6 +1,6 @@ - + GFS_time_vary_pre diff --git a/scm/etc/scripts/plot_configs/all_vars_test_twpice.ini b/scm/etc/scripts/plot_configs/all_vars_test_twpice.ini index ee4002698..3ee0228c6 100644 --- a/scm/etc/scripts/plot_configs/all_vars_test_twpice.ini +++ b/scm/etc/scripts/plot_configs/all_vars_test_twpice.ini @@ -1,5 +1,5 @@ -gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GSD_v1/output.nc, -gmtb_scm_datasets_labels = GFSv15p2, GSDv1 +gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GFS_v16/output.nc, output_twpice_SCM_GSD_v1/output.nc, output_twpice_SCM_csawmg/output.nc, output_twpice_SCM_RRFS_v1beta/output.nc +gmtb_scm_datasets_labels = GFSv15p2, GFSv16, GSDv1, csawmg, RRFSv1b plot_dir = plots_all_vars_twpice/ obs_file = ../data/raw_case_input/twp180iopsndgvarana_v2.1_C3.c1.20060117.000000.cdf obs_compare = True @@ -93,12 +93,6 @@ time_series_resample = True vars = rad_eff_rad_ql, rad_eff_rad_qi, rad_eff_rad_qr, rad_eff_rad_qs vars_labels = 'cloud liquid effective radius','cloud ice effective radius','rain effective radius','snow effective radius' x_label = '$\mu m$' - [[[rad_heating_rate]]] - vars = sw_rad_heating_rate, lw_rad_heating_rate - vars_labels = 'SW heating rate','LW heating rate' - x_label = '$K day^{-1}$' - conversion_factor = 8.64E4 - [[profiles_instant]] diff --git a/scm/etc/scripts/plot_configs/arm_sgp_summer_1997_A_all_suites.ini b/scm/etc/scripts/plot_configs/arm_sgp_summer_1997_A_all_suites.ini index 02ca8bca6..cab9446d8 100644 --- a/scm/etc/scripts/plot_configs/arm_sgp_summer_1997_A_all_suites.ini +++ b/scm/etc/scripts/plot_configs/arm_sgp_summer_1997_A_all_suites.ini @@ -1,5 +1,5 @@ -gmtb_scm_datasets = output_arm_sgp_summer_1997_A_SCM_GFS_v15p2/output.nc, output_arm_sgp_summer_1997_A_SCM_GFS_v16beta/output.nc, output_arm_sgp_summer_1997_A_SCM_csawmg/output.nc, output_arm_sgp_summer_1997_A_SCM_GSD_v1/output.nc, -gmtb_scm_datasets_labels = GFSv15p2, GFSv16beta, csawmg, GSDv1 +gmtb_scm_datasets = output_arm_sgp_summer_1997_A_SCM_GFS_v15p2/output.nc, output_arm_sgp_summer_1997_A_SCM_GFS_v16/output.nc, output_arm_sgp_summer_1997_A_SCM_csawmg/output.nc, output_arm_sgp_summer_1997_A_SCM_GSD_v1/output.nc, +gmtb_scm_datasets_labels = GFSv15p2, GFSv16, csawmg, GSDv1 plot_dir = plots_arm_sgp_summer_1997_A/ obs_file = ../data/raw_case_input/sgp3hIOPsndgBasedV2.0_ConstrVarAnaX1.c1.19970618.000000.cdf obs_compare = True diff --git a/scm/etc/scripts/plot_configs/supported_suites.ini b/scm/etc/scripts/plot_configs/supported_suites.ini index c424f0918..13af73870 100644 --- a/scm/etc/scripts/plot_configs/supported_suites.ini +++ b/scm/etc/scripts/plot_configs/supported_suites.ini @@ -1,5 +1,5 @@ -gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GFS_v16beta/output.nc, output_twpice_SCM_GSD_v1/output.nc, output_twpice_SCM_csawmg/output.nc -gmtb_scm_datasets_labels = GFSv15.2, GFSv16beta, GSDv1, csawmg +gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GFS_v16/output.nc, output_twpice_SCM_GSD_v1/output.nc, output_twpice_SCM_csawmg/output.nc +gmtb_scm_datasets_labels = GFSv15.2, GFSv16, GSDv1, csawmg plot_dir = plots_supported_suites/ obs_file = ../data/raw_case_input/twp180iopsndgvarana_v2.1_C3.c1.20060117.000000.cdf obs_compare = True diff --git a/scm/etc/scripts/plot_configs/twpice_all_suites.ini b/scm/etc/scripts/plot_configs/twpice_all_suites.ini index f77fa2000..dcaeaaa19 100644 --- a/scm/etc/scripts/plot_configs/twpice_all_suites.ini +++ b/scm/etc/scripts/plot_configs/twpice_all_suites.ini @@ -1,4 +1,4 @@ -gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GFS_v16beta/output.nc, output_twpice_SCM_GSD_v1/output.nc, output_twpice_SCM_csawmg/output.nc, output_twpice_SCM_RRFS_v1beta/output.nc +gmtb_scm_datasets = output_twpice_SCM_GFS_v15p2/output.nc, output_twpice_SCM_GFS_v16/output.nc, output_twpice_SCM_GSD_v1/output.nc, output_twpice_SCM_csawmg/output.nc, output_twpice_SCM_RRFS_v1beta/output.nc gmtb_scm_datasets_labels = GFSv15.2, GFSv16b, GSDv1, csawmg, RRFSv1b plot_dir = plots_twpice_all_suites/ obs_file = ../data/raw_case_input/twp180iopsndgvarana_v2.1_C3.c1.20060117.000000.cdf diff --git a/scm/etc/tracer_config/tracers_GFS_v16beta.txt b/scm/etc/tracer_config/tracers_GFS_v16.txt similarity index 100% rename from scm/etc/tracer_config/tracers_GFS_v16beta.txt rename to scm/etc/tracer_config/tracers_GFS_v16.txt diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index c40301529..fa465ddc3 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -79,7 +79,7 @@ module GFS_typedefs ! GFS_sfcprop_type !< surface fields ! GFS_coupling_type !< fields to/from coupling with other components (e.g. land/ice/ocean/etc.) ! !---GFS specific containers -! GFS_control_type !< model control parameters +! GFS_control_type !< model control parameters ! GFS_grid_type !< grid and interpolation related data ! GFS_tbd_type !< to be determined data that doesn't fit in any one container ! GFS_cldprop_type !< cloud fields needed by radiation from physics @@ -150,7 +150,7 @@ module GFS_typedefs !! type GFS_statein_type -!--- level geopotential and pressures +!--- level geopotential and pressures real (kind=kind_phys), pointer :: phii (:,:) => null() !< interface geopotential height real (kind=kind_phys), pointer :: prsi (:,:) => null() !< model level pressure in Pa real (kind=kind_phys), pointer :: prsik (:,:) => null() !< Exner function at interface @@ -173,7 +173,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: smc (:,:) => null() !< soil moisture content real (kind=kind_phys), pointer :: stc (:,:) => null() !< soil temperature content real (kind=kind_phys), pointer :: slc (:,:) => null() !< soil liquid water content - + contains procedure :: create => statein_create !< allocate array data end type GFS_statein_type @@ -213,7 +213,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: oceanfrac(:) => null() !< ocean fraction [0:1] real (kind=kind_phys), pointer :: landfrac(:) => null() !< land fraction [0:1] real (kind=kind_phys), pointer :: lakefrac(:) => null() !< lake fraction [0:1] - real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ] + real (kind=kind_phys), pointer :: lakedepth(:) => null() !< lake depth [ m ] real (kind=kind_phys), pointer :: tsfc (:) => null() !< surface air temperature in K !< [tsea in gbphys.f] real (kind=kind_phys), pointer :: tsfco (:) => null() !< sst in K @@ -252,7 +252,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: vtype (:) => null() !< vegetation type real (kind=kind_phys), pointer :: stype (:) => null() !< soil type real (kind=kind_phys), pointer :: uustar (:) => null() !< boundary layer parameter - real (kind=kind_phys), pointer :: oro (:) => null() !< orography + real (kind=kind_phys), pointer :: oro (:) => null() !< orography real (kind=kind_phys), pointer :: oro_uf (:) => null() !< unfiltered orography real (kind=kind_phys), pointer :: evap (:) => null() !< real (kind=kind_phys), pointer :: hflx (:) => null() !< @@ -310,6 +310,11 @@ module GFS_typedefs real (kind=kind_phys), pointer :: smcwtdxy(:) => null() !< real (kind=kind_phys), pointer :: deeprechxy(:)=> null() !< real (kind=kind_phys), pointer :: rechxy (:) => null() !< + real (kind=kind_phys), pointer :: albdvis (:) => null() !< + real (kind=kind_phys), pointer :: albdnir (:) => null() !< + real (kind=kind_phys), pointer :: albivis (:) => null() !< + real (kind=kind_phys), pointer :: albinir (:) => null() !< + real (kind=kind_phys), pointer :: emiss (:) => null() !< real (kind=kind_phys), pointer :: snicexy (:,:) => null() !< real (kind=kind_phys), pointer :: snliqxy (:,:) => null() !< @@ -398,7 +403,7 @@ module GFS_typedefs type GFS_coupling_type !--- Out (radiation only) - real (kind=kind_phys), pointer :: nirbmdi(:) => null() !< sfc nir beam sw downward flux (w/m2) + real (kind=kind_phys), pointer :: nirbmdi(:) => null() !< sfc nir beam sw downward flux (w/m2) real (kind=kind_phys), pointer :: nirdfdi(:) => null() !< sfc nir diff sw downward flux (w/m2) real (kind=kind_phys), pointer :: visbmdi(:) => null() !< sfc uv+vis beam sw downward flux (w/m2) real (kind=kind_phys), pointer :: visdfdi(:) => null() !< sfc uv+vis diff sw downward flux (w/m2) @@ -414,8 +419,8 @@ module GFS_typedefs !< difference of dnfxc & upfxc from GFS_radtend_type%sfcfsw real (kind=kind_phys), pointer :: sfcdlw(:) => null() !< total sky sfc downward lw flux ( w/m**2 ) !< GFS_radtend_type%sfclsw%dnfxc - real (kind=kind_phys), pointer :: sfculw(:) => null() !< total sky sfc upward lw flux ( w/m**2 ) - real (kind=kind_phys), pointer :: sfculw_jac(:) => null() !< Jacobian of total sky sfc upward lw flux ( w/m**2/K ) + real (kind=kind_phys), pointer :: sfculw(:) => null() !< total sky sfc upward lw flux ( w/m**2 ) + real (kind=kind_phys), pointer :: sfculw_jac(:) => null() !< Jacobian of total sky sfc upward lw flux ( w/m**2/K ) !--- incoming quantities real (kind=kind_phys), pointer :: dusfcin_cpl(:) => null() !< aoi_fld%dusfcin(item,lan) real (kind=kind_phys), pointer :: dvsfcin_cpl(:) => null() !< aoi_fld%dvsfcin(item,lan) @@ -435,7 +440,7 @@ module GFS_typedefs !--- outgoing accumulated quantities real (kind=kind_phys), pointer :: rain_cpl (:) => null() !< total rain precipitation real (kind=kind_phys), pointer :: rainc_cpl (:) => null() !< convective rain precipitation - real (kind=kind_phys), pointer :: snow_cpl (:) => null() !< total snow precipitation + real (kind=kind_phys), pointer :: snow_cpl (:) => null() !< total snow precipitation real (kind=kind_phys), pointer :: dusfc_cpl (:) => null() !< sfc u momentum flux real (kind=kind_phys), pointer :: dvsfc_cpl (:) => null() !< sfc v momentum flux real (kind=kind_phys), pointer :: dtsfc_cpl (:) => null() !< sfc sensible heat flux @@ -484,7 +489,7 @@ module GFS_typedefs !--- 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 :: 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() ! @@ -518,7 +523,7 @@ module GFS_typedefs !---------------------------------------------------------------------------------- ! GFS_control_type ! model control parameters input from a namelist and/or derived from others -! list of those that can be modified during the run are at the bottom of the list +! list of those that can be modified during the run are at the bottom of the list !---------------------------------------------------------------------------------- !! \section arg_table_GFS_control_type !! \htmlinclude GFS_control_type.html @@ -624,7 +629,7 @@ module GFS_typedefs integer :: icliq_sw !< sw optical property for liquid clouds integer :: icice_sw !< sw optical property for ice clouds integer :: icliq_lw !< lw optical property for liquid clouds - integer :: icice_lw !< lw optical property for ice clouds + integer :: icice_lw !< lw optical property for ice clouds integer :: iovr !< max-random overlap clouds for sw & lw (maximum of both) integer :: ictm !< ictm=0 => use data at initial cond time, if not !< available; use latest; no extrapolation. @@ -632,7 +637,7 @@ module GFS_typedefs !< available; use latest; do extrapolation. !< ictm=yyyy0 => use yyyy data for the forecast time; !< no extrapolation. - !< ictm=yyyy1 = > use yyyy data for the fcst. If needed, + !< ictm=yyyy1 = > use yyyy data for the fcst. If needed, !< do extrapolation to match the fcst time. !< ictm=-1 => use user provided external data for !< the fcst time; no extrapolation. @@ -647,9 +652,9 @@ module GFS_typedefs !< =0 => Use constant decorrelation length, decorr_con !< =1 => Use spatially varying decorrelation length (Hogan et al. 2010) !< =2 => Use spatially and temporally varyint decorrelation length (Oreopoulos et al. 2012) - real(kind_phys) :: dcorr_con !< Decorrelation length constant (km) (if idcor = 0) + real(kind_phys) :: dcorr_con !< Decorrelation length constant (km) (if idcor = 0) logical :: crick_proof !< CRICK-Proof cloud water - logical :: ccnorm !< Cloud condensate normalized by cloud cover + logical :: ccnorm !< Cloud condensate normalized by cloud cover logical :: norad_precip !< radiation precip flag for Ferrier/Moorthi logical :: lwhtr !< flag to output lw heating rate (Radtend%lwhc) logical :: swhtr !< flag to output sw heating rate (Radtend%swhc) @@ -707,7 +712,7 @@ module GFS_typedefs integer :: fprcp !< no prognostic rain and snow (MG) integer :: pdfflag !< pdf flag for MG macrophysics real(kind=kind_phys) :: mg_dcs !< Morrison-Gettelman microphysics parameters - real(kind=kind_phys) :: mg_qcvar + real(kind=kind_phys) :: mg_qcvar real(kind=kind_phys) :: mg_ts_auto_ice(2) !< ice auto conversion time scale real(kind=kind_phys) :: mg_rhmini !< relative humidity threshold parameter for nucleating ice @@ -748,7 +753,7 @@ module GFS_typedefs real(kind=kind_phys) :: ttendlim !< temperature tendency limiter per time step in K/s !--- GFDL microphysical paramters - logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency + logical :: lgfdlmprad !< flag for GFDL mp scheme and radiation consistency !--- Thompson,GFDL mp parameter logical :: lrefres !< flag for radar reflectivity in restart file @@ -760,7 +765,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 :: ivegsrc !< ivegsrc = 0 => USGS, + integer :: ivegsrc !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) !< ivegsrc = 3 => NLCD40 (40 category, NOAH WRFv4 only) @@ -773,7 +778,9 @@ module GFS_typedefs 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 + integer :: lsnow_lsm_ubound!< upper bound for snow arrays, depending on lsnow_lsm real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model + real(kind=kind_phys), pointer :: dzs(:) => null() !< thickness of soil levels for land surface model real(kind=kind_phys), pointer :: pores(:) => null() !< max soil moisture for a given soil type for land surface model real(kind=kind_phys), pointer :: resid(:) => null() !< min soil moisture for a given soil type for land surface model logical :: rdlai !< read LAI from input file (for RUC LSM or NOAH LSM WRFv4) @@ -809,7 +816,7 @@ module GFS_typedefs 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 - + !--- flake model parameters integer :: lkm !< flag for flake model @@ -827,11 +834,13 @@ module GFS_typedefs !< gwd_opt = 33 => GSL drag suite with extra output logical :: do_ugwp_v0 !< flag for version 0 ugwp GWD logical :: do_ugwp_v0_orog_only !< flag for version 0 ugwp GWD (orographic drag only) + logical :: do_ugwp_v0_nst_only !< flag for version 0 ugwp GWD (non-stationary GWD only) logical :: do_gsl_drag_ls_bl !< flag for GSL drag (large-scale GWD and blocking only) logical :: do_gsl_drag_ss !< flag for GSL drag (small-scale GWD only) logical :: do_gsl_drag_tofd !< flag for GSL drag (turbulent orog form drag only) logical :: do_ugwp_v1 !< flag for version 1 ugwp GWD logical :: do_ugwp_v1_orog_only !< flag for version 1 ugwp GWD (orographic drag only) + logical :: do_ugwp_v1_w_gsldrag !< flag for version 1 ugwp with OGWD of GSL logical :: mstrat !< flag for moorthi approach for stratus logical :: moist_adj !< flag for moist convective adjustment logical :: cscnv !< flag for Chikira-Sugiyama convection @@ -909,11 +918,11 @@ module GFS_typedefs !< workfunction for RAS real(kind=kind_phys) :: cdmbgwd(4) !< multiplication factors for cdmb, gwd and NS gwd, tke based enhancement real(kind=kind_phys) :: sup !< supersaturation in pdf cloud when t is very low - real(kind=kind_phys) :: ctei_rm(2) !< critical cloud top entrainment instability criteria + real(kind=kind_phys) :: ctei_rm(2) !< critical cloud top entrainment instability criteria !< (used if mstrat=.true.) real(kind=kind_phys) :: crtrh(3) !< critical relative humidity at the surface !< PBL top and at the top of the atmosphere - real(kind=kind_phys) :: dlqf(2) !< factor for cloud condensate detrainment + real(kind=kind_phys) :: dlqf(2) !< factor for cloud condensate detrainment !< from cloud edges for RAS real(kind=kind_phys) :: psauras(2) !< [in] auto conversion coeff from ice to snow in ras real(kind=kind_phys) :: prauras(2) !< [in] auto conversion coeff from cloud to rain in ras @@ -926,6 +935,7 @@ module GFS_typedefs !--- MYNN parameters/switches logical :: do_mynnedmf logical :: do_mynnsfclay + ! DH* TODO - move this to MYNN namelist section integer :: grav_settling !< flag for initalizing fist time step integer :: bl_mynn_tkebudget !< flag for activating TKE budget logical :: bl_mynn_tkeadvect !< activate computation of TKE advection (not yet in use for FV3) @@ -942,7 +952,7 @@ module GFS_typedefs real(kind=kind_phys) :: var_ric real(kind=kind_phys) :: coef_ric_l real(kind=kind_phys) :: coef_ric_s - + ! *DH ! MYJ switches logical :: do_myjsfc !< flag for MYJ surface layer scheme logical :: do_myjpbl !< flag for MYJ PBL scheme @@ -996,7 +1006,7 @@ module GFS_typedefs !< nstf_name(5) : zsea2 in mm !--- fractional grid logical :: frac_grid !< flag for fractional grid - logical :: ignore_lake !< flag for ignoring lakes + 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 real(kind=kind_phys) :: min_lake_height !< minimum lake height value @@ -1030,10 +1040,10 @@ module GFS_typedefs 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 + 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 + 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 @@ -1058,10 +1068,10 @@ module GFS_typedefs logical :: lndp_each_step ! flag to indicate that land perturbations are applied at every time step, ! otherwise they are applied only after gcycle is run character(len=3) :: lndp_var_list(6) ! dimension here must match n_var_max_lndp in stochy_nml_def - real(kind=kind_phys) :: lndp_prt_list(6) ! dimension here must match n_var_max_lndp in stochy_nml_def - ! also previous code had dimension 5 for each pert, to allow - ! multiple patterns. It wasn't fully coded (and wouldn't have worked - ! with nlndp>1, so I just dropped it). If we want to code it properly, + real(kind=kind_phys) :: lndp_prt_list(6) ! dimension here must match n_var_max_lndp in stochy_nml_def + ! also previous code had dimension 5 for each pert, to allow + ! multiple patterns. It wasn't fully coded (and wouldn't have worked + ! with nlndp>1, so I just dropped it). If we want to code it properly, ! we'd need to make this dim(6,5). !--- tracer handling character(len=32), pointer :: tracer_names(:) !< array of initialized tracers from dynamic core @@ -1134,7 +1144,7 @@ module GFS_typedefs real(kind=kind_phys) :: slag !< equation of time ( radian ) [set via radupdate] real(kind=kind_phys) :: sdec !< sin of the solar declination angle [set via radupdate] real(kind=kind_phys) :: cdec !< cos of the solar declination angle [set via radupdate] - real(kind=kind_phys) :: clstp !< index used by cnvc90 (for convective clouds) + real(kind=kind_phys) :: clstp !< index used by cnvc90 (for convective clouds) !< legacy stuff - does not affect forecast real(kind=kind_phys) :: phour !< previous forecast hour real(kind=kind_phys) :: fhour !< current forecast hour @@ -1179,11 +1189,11 @@ module GFS_typedefs !! \htmlinclude GFS_grid_type.html !! type GFS_grid_type - + real (kind=kind_phys), pointer :: xlon (:) => null() !< grid longitude in radians, ok for both 0->2pi !! or -pi -> +pi ranges real (kind=kind_phys), pointer :: xlat (:) => null() !< grid latitude in radians, default to pi/2 -> - !! -pi/2 range, otherwise adj in subr called + !! -pi/2 range, otherwise adj in subr called real (kind=kind_phys), pointer :: xlat_d (:) => null() !< grid latitude in degrees, default to 90 -> !! -90 range, otherwise adj in subr called real (kind=kind_phys), pointer :: xlon_d (:) => null() !< grid longitude in degrees, default to 0 -> @@ -1218,6 +1228,13 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ddx_aer (:) => null() !< interpolation weight for iaerclm integer, pointer :: iindx1_aer (:) => null() !< interpolation low index for iaerclm integer, pointer :: iindx2_aer (:) => null() !< interpolation high index for iaerclm + +!--- grid-related interpolation data for cires_ugwp_v1 + real (kind=kind_phys), pointer :: ddy_j1tau (:) => null() !< interpolation weight for tau_ugwp + real (kind=kind_phys), pointer :: ddy_j2tau (:) => null() !< interpolation weight for tau_ugwp + integer, pointer :: jindx1_tau (:) => null() !< interpolation low index for tau_ugwp + integer, pointer :: jindx2_tau (:) => null() !< interpolation high index for tau_ugwp + contains procedure :: create => grid_create !< allocate array data end type GFS_grid_type @@ -1244,6 +1261,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: in_nm (:,:) => null() !< IN number concentration real (kind=kind_phys), pointer :: ccn_nm (:,:) => null() !< CCN number concentration real (kind=kind_phys), pointer :: aer_nm (:,:,:) => null() !< GOCART aerosol climo + real (kind=kind_phys), pointer :: tau_amf (: ) => null() !< nonsta-gw monthly data integer, pointer :: imap (:) => null() !< map of local index ix to global index i for this block integer, pointer :: jmap (:) => null() !< map of local index ix to global index j for this block @@ -1290,18 +1308,18 @@ module GFS_typedefs real (kind=kind_phys), pointer :: cov (:,:) => null() ! !--- MYJ schemes saved variables (from previous time step) - real (kind=kind_phys), pointer :: phy_myj_qsfc(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_thz0(:) => null() ! - 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_akhs(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_akms(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_chkqlm(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_elflx(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_a1u(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_a1t(:) => null() ! - real (kind=kind_phys), pointer :: phy_myj_a1q(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_qsfc(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_thz0(:) => null() ! + 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_akhs(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_akms(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_chkqlm(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_elflx(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_a1u(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_a1t(:) => null() ! + real (kind=kind_phys), pointer :: phy_myj_a1q(:) => null() ! contains procedure :: create => tbd_create !< allocate array data @@ -1310,7 +1328,7 @@ module GFS_typedefs !------------------------------------------------------------------ ! GFS_cldprop_type -! cloud properties and tendencies needed by radiation from physics +! cloud properties and tendencies needed by radiation from physics !------------------------------------------------------------------ !! \section arg_table_GFS_cldprop_type !! \htmlinclude GFS_cldprop_type.html @@ -1359,7 +1377,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: sfalb (:) => null() !< mean surface diffused sw albedo real (kind=kind_phys), pointer :: coszen(:) => null() !< mean cos of zenith angle over rad call period - real (kind=kind_phys), pointer :: tsflw (:) => null() !< surface air temp during lw calculation in k + real (kind=kind_phys), pointer :: tsflw (:) => null() !< surface air temp during lw calculation in k real (kind=kind_phys), pointer :: semis (:) => null() !< surface lw emissivity in fraction !--- In/Out (???) (radiaition only) @@ -1376,7 +1394,7 @@ module GFS_typedefs !---------------------------------------------------------------- ! GFS_diag_type -! internal diagnostic type used as arguments to gbphys and grrad +! internal diagnostic type used as arguments to gbphys and grrad !---------------------------------------------------------------- !! \section arg_table_GFS_diag_type !! \htmlinclude GFS_diag_type.html @@ -1460,24 +1478,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: exch_h (:,:) => null() ! real (kind=kind_phys), pointer :: exch_m (:,:) => null() ! - !--- Drag Suite variables - real (kind=kind_phys), pointer :: dtaux2d_ls (:,:) => null() ! - real (kind=kind_phys), pointer :: dtauy2d_ls (:,:) => null() ! - real (kind=kind_phys), pointer :: dtaux2d_bl (:,:) => null() ! - real (kind=kind_phys), pointer :: dtauy2d_bl (:,:) => null() ! - real (kind=kind_phys), pointer :: dtaux2d_ss (:,:) => null() ! - real (kind=kind_phys), pointer :: dtauy2d_ss (:,:) => null() ! - real (kind=kind_phys), pointer :: dtaux2d_fd (:,:) => null() ! - real (kind=kind_phys), pointer :: dtauy2d_fd (:,:) => null() ! - real (kind=kind_phys), pointer :: dusfc_ls (:) => null() ! - real (kind=kind_phys), pointer :: dvsfc_ls (:) => null() ! - real (kind=kind_phys), pointer :: dusfc_bl (:) => null() ! - real (kind=kind_phys), pointer :: dvsfc_bl (:) => null() ! - real (kind=kind_phys), pointer :: dusfc_ss (:) => null() ! - real (kind=kind_phys), pointer :: dvsfc_ss (:) => null() ! - real (kind=kind_phys), pointer :: dusfc_fd (:) => null() ! - real (kind=kind_phys), pointer :: dvsfc_fd (:) => null() ! - ! Output - only in physics real (kind=kind_phys), pointer :: u10m (:) => null() !< 10 meter u/v wind speed real (kind=kind_phys), pointer :: v10m (:) => null() !< 10 meter u/v wind speed @@ -1511,9 +1511,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 :: ca1 (:) => 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 :: 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 @@ -1539,13 +1539,37 @@ module GFS_typedefs real (kind=kind_phys), pointer :: upd_mf (:,:) => null() !< instantaneous convective updraft mass flux real (kind=kind_phys), pointer :: dwn_mf (:,:) => null() !< instantaneous convective downdraft mass flux real (kind=kind_phys), pointer :: det_mf (:,:) => null() !< instantaneous convective detrainment mass flux - real (kind=kind_phys), pointer :: cldcov (:,:) => null() !< instantaneous 3D cloud fraction !--- F-A MP scheme real (kind=kind_phys), pointer :: train (:,:) => null() !< accumulated stratiform T tendency (K s-1) real (kind=kind_phys), pointer :: cldfra (:,:) => null() !< instantaneous 3D cloud fraction - !--- MP quantities for 3D diagnositics + !--- MP quantities for 3D diagnositics real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm - +! +!---vay-2018 UGWP-diagnostics instantaneous +! +! OGWs +NGWs + real (kind=kind_phys), pointer :: dudt_gw(:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt_gw(:,:) => null() !< + real (kind=kind_phys), pointer :: dtdt_gw(:,:) => null() !< + real (kind=kind_phys), pointer :: kdis_gw(:,:) => null() !< +!oro-GWs + real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt_ogw(:,:) => null() !< + real (kind=kind_phys), pointer :: dudt_obl(:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt_obl(:,:) => null() !< + real (kind=kind_phys), pointer :: dudt_oss(:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt_oss(:,:) => null() !< + real (kind=kind_phys), pointer :: dudt_ofd(:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt_ofd(:,:) => null() !< + + real (kind=kind_phys), pointer :: du_ogwcol(:) => null() !< + real (kind=kind_phys), pointer :: dv_ogwcol(:) => null() !< + real (kind=kind_phys), pointer :: du_oblcol(:) => null() !< + real (kind=kind_phys), pointer :: dv_oblcol(:) => null() !< + real (kind=kind_phys), pointer :: du_osscol(:) => null() !< + real (kind=kind_phys), pointer :: dv_osscol(:) => null() !< + real (kind=kind_phys), pointer :: du_ofdcol(:) => null() !< + real (kind=kind_phys), pointer :: dv_ofdcol(:) => null() !< ! !---vay-2018 UGWP-diagnostics daily mean ! @@ -1786,7 +1810,6 @@ module GFS_typedefs real (kind=kind_phys), pointer :: graupelmp(:) => null() !< real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< - real (kind=kind_phys), pointer :: hefac(:) => null() !< real (kind=kind_phys), pointer :: hffac(:) => null() !< real (kind=kind_phys), pointer :: hflxq(:) => null() !< @@ -1921,7 +1944,6 @@ 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() !< @@ -1960,7 +1982,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: vdftra(:,:,:) => null() !< real (kind=kind_phys), pointer :: vegf1d(:) => null() !< real (kind=kind_phys) :: lndp_vgf !< - + integer, pointer :: vegtype(:) => null() !< real (kind=kind_phys), pointer :: w_upi(:,:) => null() !< real (kind=kind_phys), pointer :: wcbmax(:) => null() !< @@ -1980,22 +2002,33 @@ module GFS_typedefs real (kind=kind_phys), pointer :: zorl_land(:) => null() !< real (kind=kind_phys), pointer :: zorl_ocean(:) => null() !< real (kind=kind_phys), pointer :: zt1d(:) => null() !< - real (kind=kind_phys), pointer :: gw_dudt(:,:) => null() !< - real (kind=kind_phys), pointer :: gw_dvdt(:,:) => null() !< - real (kind=kind_phys), pointer :: gw_dtdt(:,:) => null() !< - real (kind=kind_phys), pointer :: gw_kdis(:,:) => null() !< +!================================================================================================== +! UGWP - five mechnanisms of momentum deposition due to various types of GWs +! (oss, ofd, obl, ogw) + ngw = sum( sso + ngw) +!================================================================================================== +! nGWs + real (kind=kind_phys), pointer :: dudt_ngw(:,:) => null() !< + real (kind=kind_phys), pointer :: dvdt_ngw(:,:) => null() !< + real (kind=kind_phys), pointer :: dtdt_ngw(:,:) => null() !< + real (kind=kind_phys), pointer :: kdis_ngw(:,:) => null() !< + + real (kind=kind_phys), pointer :: tau_oss(: ) => null() !< instantaneous momentum flux due to OSS real (kind=kind_phys), pointer :: tau_tofd(:) => null() !< instantaneous momentum flux due to TOFD - real (kind=kind_phys), pointer :: tau_mtb(:) => null() !< instantaneous momentum flux due to mountain blocking drag - real (kind=kind_phys), pointer :: tau_ogw(:) => null() !< instantaneous momentum flux due to orographic gravity wave drag - real (kind=kind_phys), pointer :: tau_ngw(:) => null() !< instantaneous momentum flux due to nonstationary gravity waves + real (kind=kind_phys), pointer :: tau_mtb(:) => null() !< instantaneous momentum of mountain blocking drag + real (kind=kind_phys), pointer :: tau_ogw(:) => null() !< instantaneous momentum flux of OGWs + real (kind=kind_phys), pointer :: tau_ngw(:) => null() !< instantaneous momentum flux of NGWs + + real (kind=kind_phys), pointer :: zngw(:) => null() !< launch levels of NGWs real (kind=kind_phys), pointer :: zmtb(:) => null() !< mountain blocking height real (kind=kind_phys), pointer :: zlwb(:) => null() !< low level wave breaking height - real (kind=kind_phys), pointer :: zogw(:) => null() !< height of drag due to orographic gravity wave - real (kind=kind_phys), pointer :: dudt_mtb(:,:) => null() !< daily aver u-wind tend due to mountain blocking drag - real (kind=kind_phys), pointer :: dudt_ogw(:,:) => null() !< daily aver u-wind tend due to orographic gravity wave drag + real (kind=kind_phys), pointer :: zogw(:) => null() !< height of OGW-launch + + real (kind=kind_phys), pointer :: dudt_mtb(:,:) => null() !< daily aver u-wind tend due to mountain blocking real (kind=kind_phys), pointer :: dudt_tms(:,:) => null() !< daily aver u-wind tend due to TMS ! RRTMGP + real (kind=kind_phys) :: minGPpres !< Minimum pressure allowed by RRTMGP. + real (kind=kind_phys) :: minGPtemp !< Minimum temperature allowed by RRTMGP. integer :: ipsdlw0 !< integer :: ipsdsw0 !< real (kind=kind_phys), pointer :: p_lay(:,:) => null() !< @@ -2031,7 +2064,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: fluxswUP_clrsky(:,:) => null() !< RRTMGP upward shortwave clr-sky flux profile real (kind=kind_phys), pointer :: fluxswDOWN_clrsky(:,:) => null() !< RRTMGP downward shortwave clr-sky flux profile real (kind=kind_phys), pointer :: fluxlwUP_jac(:,:) => null() !< RRTMGP upward Jacobian of longwave flux - real (kind=kind_phys), pointer :: fluxlwDOWN_jac(:,:) => null() !< RRTMGP downward Jacobian of longwave flux + real (kind=kind_phys), pointer :: fluxlwDOWN_jac(:,:) => null() !< RRTMGP downward Jacobian of longwave flux real (kind=kind_phys), pointer :: sfc_emiss_byband(:,:) => null() !< real (kind=kind_phys), pointer :: sec_diff_byband(:,:) => null() !< real (kind=kind_phys), pointer :: sfc_alb_nir_dir(:,:) => null() !< @@ -2045,10 +2078,6 @@ module GFS_typedefs integer, pointer :: icseed_sw(:) => null() !< RRTMGP seed for RNG for shortwave radiation type(proflw_type), pointer :: flxprf_lw(:,:) => null() !< DDT containing RRTMGP longwave fluxes type(profsw_type), pointer :: flxprf_sw(:,:) => null() !< DDT containing RRTMGP shortwave fluxes - type(ty_gas_optics_rrtmgp) :: lw_gas_props !< RRTMGP DDT - type(ty_gas_optics_rrtmgp) :: sw_gas_props !< RRTMGP DDT - type(ty_cloud_optics) :: lw_cloud_props !< RRTMGP DDT - type(ty_cloud_optics) :: sw_cloud_props !< RRTMGP DDT type(ty_optical_props_2str) :: lw_optical_props_cloudsByBand !< RRTMGP DDT type(ty_optical_props_2str) :: lw_optical_props_clouds !< RRTMGP DDT type(ty_optical_props_2str) :: lw_optical_props_precipByBand !< RRTMGP DDT @@ -2109,7 +2138,7 @@ module GFS_typedefs !------------------------ ! GFS_statein_type%create !------------------------ - subroutine statein_create (Statein, IM, Model) + subroutine statein_create (Statein, IM, Model) implicit none class(GFS_statein_type) :: Statein @@ -2422,10 +2451,15 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%taussxy (IM)) allocate (Sfcprop%smcwtdxy (IM)) allocate (Sfcprop%deeprechxy (IM)) - allocate (Sfcprop%rechxy (IM)) - allocate (Sfcprop%snicexy (IM, Model%lsnow_lsm_lbound:0)) - allocate (Sfcprop%snliqxy (IM, Model%lsnow_lsm_lbound:0)) - allocate (Sfcprop%tsnoxy (IM, Model%lsnow_lsm_lbound:0)) + allocate (Sfcprop%rechxy (IM)) + allocate (Sfcprop%albdvis (IM)) + allocate (Sfcprop%albdnir (IM)) + allocate (Sfcprop%albivis (IM)) + allocate (Sfcprop%albinir (IM)) + allocate (Sfcprop%emiss (IM)) + allocate (Sfcprop%snicexy (IM, Model%lsnow_lsm_lbound:Model%lsnow_lsm_ubound)) + allocate (Sfcprop%snliqxy (IM, Model%lsnow_lsm_lbound:Model%lsnow_lsm_ubound)) + allocate (Sfcprop%tsnoxy (IM, Model%lsnow_lsm_lbound:Model%lsnow_lsm_ubound)) allocate (Sfcprop%smoiseq (IM, Model%lsoil_lsm)) allocate (Sfcprop%zsnsoxy (IM, Model%lsnow_lsm_lbound:Model%lsoil_lsm)) @@ -2458,13 +2492,18 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%smcwtdxy = clear_val Sfcprop%deeprechxy = clear_val Sfcprop%rechxy = clear_val + Sfcprop%albdvis = clear_val + Sfcprop%albdnir = clear_val + Sfcprop%albivis = clear_val + Sfcprop%albinir = clear_val + Sfcprop%emiss = clear_val Sfcprop%snicexy = clear_val Sfcprop%snliqxy = clear_val Sfcprop%tsnoxy = clear_val Sfcprop%smoiseq = clear_val Sfcprop%zsnsoxy = clear_val - + allocate(Sfcprop%draincprv (IM)) allocate(Sfcprop%drainncprv (IM)) allocate(Sfcprop%diceprv (IM)) @@ -2476,7 +2515,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%diceprv = clear_val Sfcprop%dsnowprv = clear_val Sfcprop%dgraupelprv = clear_val - + endif ! HWRF NOAH LSM allocate and init when used @@ -2485,7 +2524,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) 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 @@ -2494,7 +2533,7 @@ subroutine sfcprop_create (Sfcprop, IM, Model) 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)) @@ -2582,12 +2621,12 @@ subroutine coupling_create (Coupling, IM, Model) !--- physics in allocate (Coupling%nirbmdi (IM)) allocate (Coupling%nirdfdi (IM)) - allocate (Coupling%visbmdi (IM)) - allocate (Coupling%visdfdi (IM)) - allocate (Coupling%nirbmui (IM)) - allocate (Coupling%nirdfui (IM)) - allocate (Coupling%visbmui (IM)) - allocate (Coupling%visdfui (IM)) + allocate (Coupling%visbmdi (IM)) + allocate (Coupling%visdfdi (IM)) + allocate (Coupling%nirbmui (IM)) + allocate (Coupling%nirdfui (IM)) + allocate (Coupling%visbmui (IM)) + allocate (Coupling%visdfui (IM)) Coupling%nirbmdi = clear_val Coupling%nirdfdi = clear_val @@ -2618,13 +2657,13 @@ subroutine coupling_create (Coupling, IM, Model) endif if (Model%cplflx .or. Model%cplwav) then - !--- instantaneous quantities + !--- instantaneous quantities allocate (Coupling%u10mi_cpl (IM)) allocate (Coupling%v10mi_cpl (IM)) Coupling%u10mi_cpl = clear_val Coupling%v10mi_cpl = clear_val - endif + endif ! if (Model%cplwav2atm) then !--- incoming quantities @@ -2762,7 +2801,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%condition = clear_val endif @@ -2914,8 +2953,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: fhlwr = 3600. !< frequency for longwave radiation (secs) integer :: nhfrad = 0 !< number of timesteps for which to call radiation on physics timestep (coldstarts) integer :: levr = -99 !< number of vertical levels for radiation calculations - integer :: nfxr = 39+6 !< second dimension of input/output array fluxr - logical :: iaerclm = .false. !< flag for initializing aero data + integer :: nfxr = 39+6 !< second dimension of input/output array fluxr + logical :: iaerclm = .false. !< flag for initializing aero data integer :: iccn = 0 !< logical to use IN CCN forcing for MG2/3 integer :: iflip = 1 !< iflip - is not the same as flipv integer :: isol = 0 !< use prescribed solar constant @@ -2925,9 +2964,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: iems = 0 !< use fixed value of 1.0 integer :: iaer = 1 !< default aerosol effect in sw only integer :: icliq_sw = 1 !< sw optical property for liquid clouds - integer :: icice_sw = 3 !< sw optical property for ice clouds - integer :: icliq_lw = 1 !< lw optical property for liquid clouds - integer :: icice_lw = 3 !< lw optical property for ice clouds + integer :: icice_sw = 3 !< sw optical property for ice clouds + integer :: icliq_lw = 1 !< lw optical property for liquid clouds + integer :: icice_lw = 3 !< lw optical property for ice clouds integer :: iovr = 1 !< cloud-overlap: max-random overlap clouds integer :: ictm = 1 !< ictm=0 => use data at initial cond time, if not !< available; use latest; no extrapolation. @@ -2935,7 +2974,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< available; use latest; do extrapolation. !< ictm=yyyy0 => use yyyy data for the forecast time; !< no extrapolation. - !< ictm=yyyy1 = > use yyyy data for the fcst. If needed, + !< ictm=yyyy1 = > use yyyy data for the fcst. If needed, !< do extrapolation to match the fcst time. !< ictm=-1 => use user provided external data for !< the fcst time; no extrapolation. @@ -2952,7 +2991,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< =2 => Use spatially and temporally varyint decorrelation length (Oreopoulos et al. 2012) real(kind_phys) :: dcorr_con = 2.5 !< Decorrelation length constant (km) (if idcor = 0) logical :: crick_proof = .false. !< CRICK-Proof cloud water - logical :: ccnorm = .false. !< Cloud condensate normalized by cloud cover + logical :: ccnorm = .false. !< Cloud condensate normalized by cloud cover logical :: norad_precip = .false. !< radiation precip flag for Ferrier/Moorthi logical :: lwhtr = .true. !< flag to output lw heating rate (Radtend%lwhc) logical :: swhtr = .true. !< flag to output sw heating rate (Radtend%swhc) @@ -2974,7 +3013,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: doGP_cldoptics_LUT = .false. !< Use RRTMGP cloud-optics: LUTs? integer :: rrtmgp_nrghice = 0 !< Number of ice-roughness categories integer :: rrtmgp_nGauss_ang = 1 !< Number of angles used in Gaussian quadrature - logical :: do_GPsw_Glw = .false. + logical :: do_GPsw_Glw = .false. logical :: use_LW_jacobian = .false. !< Use Jacobian of LW to update LW radiation tendencies. logical :: doGP_lwscat = .false. !< If true, include scattering in longwave cloud-optics, only compatible w/ GP cloud-optics !--- Z-C microphysical parameters @@ -3026,12 +3065,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- Thompson microphysical parameters logical :: ltaerosol = .false. !< flag for aerosol version - logical :: lradar = .false. !< flag for radar reflectivity + logical :: lradar = .false. !< flag for radar reflectivity real(kind=kind_phys) :: nsradar_reset = -999.0 !< seconds between resetting radar reflectivity calculation, set to <0 for every time step real(kind=kind_phys) :: ttendlim = -999.0 !< temperature tendency limiter, set to <0 to deactivate !--- GFDL microphysical parameters - logical :: lgfdlmprad = .false. !< flag for GFDLMP radiation interaction + logical :: lgfdlmprad = .false. !< flag for GFDLMP radiation interaction !--- Thompson,GFDL microphysical parameter logical :: lrefres = .false. !< flag for radar reflectivity in restart file @@ -3096,11 +3135,13 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< gwd_opt = 33: GSL drag suite with extra output logical :: do_ugwp_v0 = .true. !< flag for version 0 ugwp GWD logical :: do_ugwp_v0_orog_only = .false. !< flag for version 0 ugwp GWD (orographic drag only) + logical :: do_ugwp_v0_nst_only = .false. !< flag for version 0 ugwp GWD (non-stationary GWD only) logical :: do_gsl_drag_ls_bl = .false. !< flag for GSL drag (large-scale GWD and blocking only) logical :: do_gsl_drag_ss = .false. !< flag for GSL drag (small-scale GWD only) logical :: do_gsl_drag_tofd = .false. !< flag for GSL drag (turbulent orog form drag only) logical :: do_ugwp_v1 = .false. !< flag for version 1 ugwp GWD logical :: do_ugwp_v1_orog_only = .false. !< flag for version 1 ugwp GWD (orographic drag only) + logical :: do_ugwp_v1_w_gsldrag = .false. !< flag for version 1 ugwp GWD (orographic drag only) !--- vay-2018 logical :: ldiag_ugwp = .false. !< flag for UGWP diag fields logical :: do_ugwp = .false. !< flag do UGWP+RF @@ -3156,10 +3197,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< 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 :: 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 + ! DH* TODO - move to MYNN namelist section integer :: grav_settling = 0 integer :: bl_mynn_tkebudget = 0 logical :: bl_mynn_tkeadvect = .false. @@ -3176,6 +3218,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 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 + ! *DH logical :: do_myjsfc = .false. !< flag for MYJ surface layer scheme logical :: do_myjpbl = .false. !< flag for MYJ PBL scheme @@ -3191,11 +3234,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: cdmbgwd(4) = (/2.0d0,0.25d0,1.0d0,1.0d0/) !< multiplication factors for cdmb, gwd, and NS gwd, tke based enhancement real(kind=kind_phys) :: sup = 1.0 !< supersaturation in pdf cloud (IMP_physics=98) when t is very low !< or ice super saturation in SHOC (when do_shoc=.true.) - real(kind=kind_phys) :: ctei_rm(2) = (/10.0d0,10.0d0/) !< critical cloud top entrainment instability criteria + real(kind=kind_phys) :: ctei_rm(2) = (/10.0d0,10.0d0/) !< critical cloud top entrainment instability criteria !< (used if mstrat=.true.) real(kind=kind_phys) :: crtrh(3) = (/0.90d0,0.90d0,0.90d0/) !< critical relative humidity at the surface !< PBL top and at the top of the atmosphere - real(kind=kind_phys) :: dlqf(2) = (/0.0d0,0.0d0/) !< factor for cloud condensate detrainment + real(kind=kind_phys) :: dlqf(2) = (/0.0d0,0.0d0/) !< factor for cloud condensate detrainment !< from cloud edges for RAS real(kind=kind_phys) :: psauras(2) = (/1.0d-3,1.0d-3/) !< [in] auto conversion coeff from ice to snow in ras real(kind=kind_phys) :: prauras(2) = (/2.0d-3,2.0d-3/) !< [in] auto conversion coeff from cloud to rain in ras @@ -3225,7 +3268,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< cx = min([-0.7 ln(Nccn) + 24]*1.e-4, c0s) !< Nccn: CCN number concentration in cm^(-3) !< Until a realistic Nccn is provided, Nccns are assumed - !< as Nccn=100 for sea and Nccn=1000 for land + !< as Nccn=100 for sea and Nccn=1000 for land !--- mass flux shallow convection real(kind=kind_phys) :: clam_shal = 0.3 !< c_e for shallow convection (Han and Pan, 2011, eq(6)) @@ -3239,7 +3282,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< cx = min([-0.7 ln(Nccn) + 24]*1.e-4, c0s) !< Nccn: CCN number concentration in cm^(-3) !< Until a realistic Nccn is provided, Nccns are assumed - !< as Nccn=100 for sea and Nccn=1000 for land + !< as Nccn=100 for sea and Nccn=1000 for land !--- near surface sea temperature model logical :: nst_anl = .false. !< flag for NSSTM analysis in gcycle/sfcsub @@ -3267,9 +3310,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< negative when cplwav2atm=.true. - i.e. two way wave coupling !--- 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 + 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 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 @@ -3280,7 +3323,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & real(kind=kind_phys) :: z0fac = 0.3 real(kind=kind_phys) :: e0fac = 0.5 - + !---Cellular automaton options integer :: nca = 1 integer :: ncells = 5 @@ -3299,7 +3342,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: ca_smooth = .false. real(kind=kind_phys) :: nthresh = 0.0 real :: ca_amplitude = 500. - integer :: nsmooth = 100 + integer :: nsmooth = 100 logical :: ca_closure = .false. logical :: ca_entr = .false. logical :: ca_trigger = .false. @@ -3345,7 +3388,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & fhswr, fhlwr, levr, nfxr, iaerclm, iflip, isol, ico2, ialb, & isot, iems, iaer, icliq_sw, iovr, ictm, isubc_sw, & isubc_lw, crick_proof, ccnorm, lwhtr, swhtr, & -#ifdef CCPP nhfrad, idcor, dcorr_con, & ! --- RRTMGP do_RRTMGP, active_gases, nGases, rrtmgp_root, & @@ -3384,12 +3426,15 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & cscnv, cal_pre, do_aw, do_shoc, shocaftcnv, shoc_cld, & oz_phys, oz_phys_2015, & do_mynnedmf, do_mynnsfclay, & + ! DH* TODO - move to MYNN namelist section bl_mynn_cloudpdf, bl_mynn_edmf, bl_mynn_edmf_mom, & bl_mynn_edmf_tke, bl_mynn_edmf_part, bl_mynn_cloudmix, & bl_mynn_mixqt, bl_mynn_output, icloud_bl, bl_mynn_tkeadvect, & + ! *DH gwd_opt, do_ugwp_v0, do_ugwp_v0_orog_only, & + do_ugwp_v0_nst_only, & do_gsl_drag_ls_bl, do_gsl_drag_ss, do_gsl_drag_tofd, & - do_ugwp_v1, do_ugwp_v1_orog_only, & + do_ugwp_v1, do_ugwp_v1_orog_only, do_ugwp_v1_w_gsldrag, & var_ric, coef_ric_l, coef_ric_s, hurr_pbl, & do_myjsfc, do_myjpbl, & hwrf_samfdeep, hwrf_samfshal, & @@ -3426,7 +3471,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 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, & + nspinup,ca_amplitude,nsmooth,ca_closure,ca_entr,ca_trigger, & !--- IAU iau_delthrs,iaufhrs,iau_inc_files,iau_filter_increments, & iau_drymassfixer, & @@ -3438,7 +3483,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- aerosol scavenging factors ('name:value' string array) fscav_aero -!--- other parameters +!--- other parameters integer :: nctp = 0 !< number of cloud types in CS scheme logical :: gen_coord_hybrid = .false. !< for Henry's gen coord @@ -3559,6 +3604,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & elseif(me==master) then write(0,*) 'NO FLAG: dcnv is generic' endif + ! !VAY-ugwp --- set some GW-related switches ! @@ -3626,6 +3672,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- integrated dynamics through earth's atmosphere Model%lsidea = lsidea + if (Model%lsidea) then + print *,' LSIDEA is active but needs to be reworked for FV3 - shutting down' + stop + endif !--- calendars and time parameters and activation triggers Model%dtp = dt_phys @@ -3683,7 +3733,6 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ntrcaer = ntrcaer Model%idcor = idcor Model%dcorr_con = dcorr_con -#endif Model%icliq_sw = icliq_sw Model%icice_sw = icice_sw Model%icliq_lw = icliq_lw @@ -3726,7 +3775,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & ! RRTMGP LW scattering calculation not supported w/ RRTMG cloud-optics if (Model%doGP_lwscat .and. Model%doG_cldoptics) then write(0,*) "Logic error, RRTMGP Longwave cloud-scattering not supported with RRTMG cloud-optics." - stop + stop end if ! The CCPP versions of the RRTMG lw/sw schemes are configured @@ -3812,17 +3861,33 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & write(0,*) 'Logic error: rdlai = .true. only works with RUC LSM' stop end if + ! Set surface layers for CCPP physics if (lsoil_lsm==-1) then Model%lsoil_lsm = lsoil else Model%lsoil_lsm = lsoil_lsm end if - ! Allocate variable to store depth of soil layers - if (Model%lsm==Model%lsm_ruc) then - allocate (Model%zs(Model%lsoil_lsm)) - Model%zs = clear_val + ! DH* TODO - need to clean up how different land surface models handle initializing zs and dzs + ! For Noah and NoahMP, hardcode here for the moment; for RUC, these variables get initialized + ! in the RUC LSM init calls; for Noah WRF4, dzs gets initialized in sfc_noah_wrfv4_interstitial + ! init, and zs doesn't get used at all. + ! Allocate variables to store depth/thickness of soil layers + allocate (Model%zs (Model%lsoil_lsm)) + allocate (Model%dzs(Model%lsoil_lsm)) + if (Model%lsm==Model%lsm_noah .or. Model%lsm==Model%lsm_noahmp) then + if (Model%lsoil_lsm/=4) then + write(0,*) 'Error in GFS_typedefs.F90, number of soil layers must be 4 for Noah/NoahMP' + stop + end if + Model%zs = (/-0.1_kind_phys, -0.4_kind_phys, -1.0_kind_phys, -2.0_kind_phys/) + Model%dzs = (/ 0.1_kind_phys, 0.3_kind_phys, 0.6_kind_phys, 1.0_kind_phys/) + elseif (Model%lsm==Model%lsm_ruc .or. Model%lsm==Model%lsm_noah_wrfv4) then + Model%zs = clear_val + Model%dzs = clear_val end if + ! *DH + ! Set number of ice model layers Model%kice = kice @@ -3832,13 +3897,21 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%pores = clear_val Model%resid = clear_val ! - if (lsnow_lsm /= 3) then - write(0,*) 'Logic error: NoahMP expects the maximum number of snow layers to be exactly 3 (see sfc_noahmp_drv.f)' - stop + if (Model%lsm==Model%lsm_noahmp) then + if (lsnow_lsm/=3) then + write(0,*) 'Logic error: NoahMP expects the maximum number of snow layers to be exactly 3 (see sfc_noahmp_drv.f)' + stop + else + Model%lsnow_lsm = lsnow_lsm + ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) + Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 + Model%lsnow_lsm_ubound = 0 + end if else - Model%lsnow_lsm = lsnow_lsm - ! Set lower bound for LSM model, runs from negative (above surface) to surface (zero) - Model%lsnow_lsm_lbound = -Model%lsnow_lsm+1 + ! Not used by any of the other LSM choices + Model%lsnow_lsm = 0 + Model%lsnow_lsm_lbound = 0 + Model%lsnow_lsm_ubound = 0 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 @@ -3957,11 +4030,12 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%prauras = prauras Model%wminras = wminras Model%rbcr = rbcr - Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 + Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 ! flag to restore OGWs of GFS-v15 +! OLD GFS-v12-15 conv scheme Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 - Model%do_mynnedmf = do_mynnedmf Model%do_mynnsfclay = do_mynnsfclay + ! DH* TODO - move to MYNN namelist section Model%bl_mynn_cloudpdf = bl_mynn_cloudpdf Model%bl_mynn_mixlength = bl_mynn_mixlength Model%bl_mynn_edmf = bl_mynn_edmf @@ -3977,6 +4051,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%var_ric = var_ric Model%coef_ric_l = coef_ric_l Model%coef_ric_s = coef_ric_s + ! *DH Model%gwd_opt = gwd_opt if (Model%gwd_opt==3 .or. Model%gwd_opt==33 .or. & @@ -3986,11 +4061,27 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & end if Model%do_ugwp_v0 = do_ugwp_v0 Model%do_ugwp_v0_orog_only = do_ugwp_v0_orog_only + Model%do_ugwp_v0_nst_only = do_ugwp_v0_nst_only Model%do_gsl_drag_ls_bl = do_gsl_drag_ls_bl Model%do_gsl_drag_ss = do_gsl_drag_ss Model%do_gsl_drag_tofd = do_gsl_drag_tofd Model%do_ugwp_v1 = do_ugwp_v1 Model%do_ugwp_v1_orog_only = do_ugwp_v1_orog_only + Model%do_ugwp_v1_w_gsldrag = do_ugwp_v1_w_gsldrag +! +! consistency in application of the combined ugwp-v1 and gsldrag +! + if ( Model%do_ugwp_v1_w_gsldrag) then + if(Model%gwd_opt == 1 )then + Model%gwd_opt =2 + Model%nmtvr = 24 + endif + Model%do_gsl_drag_ls_bl = .true. + Model%do_gsl_drag_tofd = .true. + Model%do_gsl_drag_ss = .true. + Model%do_ugwp_v1_orog_only = .false. + endif + Model%do_myjsfc = do_myjsfc Model%do_myjpbl = do_myjpbl @@ -4074,8 +4165,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ca_sgs = ca_sgs Model%iseed_ca = iseed_ca Model%ca_smooth = ca_smooth - Model%nspinup = nspinup - Model%nthresh = nthresh + Model%nspinup = nspinup + Model%nthresh = nthresh Model%ca_amplitude = ca_amplitude Model%nsmooth = nsmooth Model%ca_closure = ca_closure @@ -4217,7 +4308,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%sdec = -9999. Model%cdec = -9999. Model%clstp = -9999 - rinc(1:5) = 0 + rinc(1:5) = 0 call w3difdat(jdat,idat,4,rinc) Model%phour = rinc(4)/con_hr Model%fhour = (rinc(4) + Model%dtp)/con_hr @@ -4248,8 +4339,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & 'max_lon=',max_lon,' max_lat=',max_lat,' min_lon=',min_lon,' min_lat=',min_lat, & ' rhc_max=',Model%rhcmax -!--- set nrcm - +!--- set nrcm if (Model%ras) then Model%nrcm = min(nrcmax, Model%levs-1) * (Model%dtp/1200.d0) + 0.10001d0 else @@ -4268,7 +4358,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (do_shoc) then if (Model%imp_physics == Model%imp_physics_thompson) then print *,'SHOC is not currently compatible with Thompson MP -- shutting down' - stop + stop endif Model%nshoc_3d = 3 Model%nshoc_2d = 0 @@ -4522,12 +4612,16 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ncnd = 1 if (Model%me == Model%master) print *,'Using Zhao/Carr/Sundqvist Microphysics with PDF Cloud' + !else if (Model%imp_physics == 5) then ! F-A goes here + ! print *,' Ferrier Microphysics scheme has been deprecated - job aborted' + ! stop else if (Model%imp_physics == Model%imp_physics_fer_hires) then ! Ferrier-Aligo scheme Model%npdf3d = 0 Model%num_p3d = 3 Model%num_p2d = 1 Model%pdfcld = .false. Model%shcnvcw = .false. + ! DH* REALLY ? Model%ncnd = 5 Model%nleffr = 1 Model%nieffr = 2 @@ -4653,7 +4747,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & elseif ((Model%npdf3d == 0) .and. (Model%ncnvcld3d == 1)) then Model%ncnvw = Model%num_p3d + 1 endif - + !--- derived totals for phy_f*d Model%ntot2d = Model%num_p2d + Model%nshoc_2d Model%ntot3d = Model%num_p3d + Model%nshoc_3d + Model%npdf3d + Model%ncnvcld3d @@ -4735,7 +4829,7 @@ subroutine control_print(Model) !--- interface variables class(GFS_control_type) :: Model - + if (Model%me == Model%master) then print *, ' ' print *, 'basic control parameters' @@ -4887,7 +4981,6 @@ subroutine control_print(Model) print *, ' lrefres : ', Model%lrefres print *, ' ' endif - if (Model%imp_physics == Model%imp_physics_fer_hires) then print *, ' Ferrier-Aligo microphysical parameters' print *, ' spec_adv : ', Model%spec_adv @@ -4895,13 +4988,19 @@ subroutine control_print(Model) print *, ' icloud : ', Model%icloud print *, ' ' endif - print *, 'land/surface model parameters' print *, ' lsm : ', Model%lsm print *, ' lsoil : ', Model%lsoil print *, ' rdlai : ', Model%rdlai print *, ' lsoil_lsm : ', Model%lsoil_lsm - print *, ' lsnow_lsm : ', Model%lsnow_lsm + if (Model%lsm==Model%lsm_noahmp) then + print *, ' lsnow_lsm : ', Model%lsnow_lsm + print *, ' lsnow_lsm_lbound : ', Model%lsnow_lsm_lbound + print *, ' lsnow_lsm_ubound : ', Model%lsnow_lsm_ubound + end if + print *, ' zs (may be unset): ', Model%zs + print *, ' dzs (may be unset): ', Model%dzs + ! print *, ' iopt_thcnd : ', Model%iopt_thcnd print *, ' ua_phys : ', Model%ua_phys print *, ' usemonalb : ', Model%usemonalb @@ -5002,11 +5101,13 @@ subroutine control_print(Model) print *, ' gwd_opt : ', Model%gwd_opt print *, ' do_ugwp_v0 : ', Model%do_ugwp_v0 print *, ' do_ugwp_v0_orog_only : ', Model%do_ugwp_v0_orog_only + print *, ' do_ugwp_v0_nst_only : ', Model%do_ugwp_v0_nst_only print *, ' do_gsl_drag_ls_bl : ', Model%do_gsl_drag_ls_bl print *, ' do_gsl_drag_ss : ', Model%do_gsl_drag_ss print *, ' do_gsl_drag_tofd : ', Model%do_gsl_drag_tofd print *, ' do_ugwp_v1 : ', Model%do_ugwp_v1 print *, ' do_ugwp_v1_orog_only : ', Model%do_ugwp_v1_orog_only + print *, ' do_ugwp_v1_w_gsldrag : ', Model%do_ugwp_v1_w_gsldrag print *, ' hurr_pbl : ', Model%hurr_pbl print *, ' var_ric : ', Model%var_ric print *, ' coef_ric_l : ', Model%coef_ric_l @@ -5132,7 +5233,7 @@ subroutine control_print(Model) print *, ' nscfshoc : ', Model%nscfshoc print *, ' ' print *, 'debug flags' - print *, ' debug : ', Model%debug + print *, ' debug : ', Model%debug print *, ' pre_rad : ', Model%pre_rad print *, ' ' print *, 'variables modified at each time step' @@ -5223,6 +5324,15 @@ subroutine grid_create (Grid, IM, Model) allocate (Grid%iindx1_aer(IM)) allocate (Grid%iindx2_aer(IM)) endif + +!--- Model%do_ugwpv1 + if ( Model%do_ugwp_v1 ) then + allocate (Grid%ddy_j1tau (IM)) + allocate (Grid%ddy_j2tau (IM)) + allocate (Grid%jindx1_tau (IM)) + allocate (Grid%jindx2_tau (IM)) + endif + end subroutine grid_create @@ -5247,8 +5357,6 @@ subroutine tbd_create (Tbd, IM, Model) endif !--- ozone and stratosphere h2o needs - ! DH* oz_coeff is set to zero if both ozphys options are false, - ! better to use conditional allocations here for ozpl (and h2opl)? *DH allocate (Tbd%ozpl (IM,levozp,oz_coeff)) allocate (Tbd%h2opl (IM,levh2o,h2o_coeff)) Tbd%ozpl = clear_val @@ -5266,8 +5374,11 @@ subroutine tbd_create (Tbd, IM, Model) allocate (Tbd%aer_nm (IM,Model%levs,ntrcaer)) Tbd%aer_nm = clear_val -! DH* TODO - MOVE THIS TO a block-vector dependent structure in GFS_control? -! e.g. GFS_Control%imap(blk), GFS_Control%jmap(blk), or ii instead if imap etc? *DH +!--- tau_amf for NGWs + ! DH* allocate only for UGWP ? *DH + allocate (Tbd%tau_amf(im) ) + Tbd%tau_amf = clear_val + !--- maps of local index ix to global indices i and j for this block allocate (Tbd%imap (IM)) allocate (Tbd%jmap (IM)) @@ -5374,18 +5485,18 @@ subroutine tbd_create (Tbd, IM, Model) allocate (Tbd%phy_myj_a1t (IM)) allocate (Tbd%phy_myj_a1q (IM)) !print*,"Allocating all MYJ schemes variables:" - Tbd%phy_myj_qsfc = clear_val - 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_akhs = clear_val - Tbd%phy_myj_akms = clear_val - Tbd%phy_myj_chkqlm = clear_val - Tbd%phy_myj_elflx = clear_val - Tbd%phy_myj_a1u = clear_val - Tbd%phy_myj_a1t = clear_val - Tbd%phy_myj_a1q = clear_val + Tbd%phy_myj_qsfc = clear_val + 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_akhs = clear_val + Tbd%phy_myj_akms = clear_val + Tbd%phy_myj_chkqlm = clear_val + Tbd%phy_myj_elflx = clear_val + Tbd%phy_myj_a1u = clear_val + Tbd%phy_myj_a1t = clear_val + Tbd%phy_myj_a1q = clear_val end if end subroutine tbd_create @@ -5403,13 +5514,13 @@ subroutine cldprop_create (Cldprop, IM, Model) type(GFS_control_type), intent(in) :: Model allocate (Cldprop%cv (IM)) - allocate (Cldprop%cvt (IM)) + allocate (Cldprop%cvt (IM)) allocate (Cldprop%cvb (IM)) - + Cldprop%cv = clear_val Cldprop%cvt = clear_val Cldprop%cvb = clear_val - + end subroutine cldprop_create @@ -5417,14 +5528,14 @@ end subroutine cldprop_create ! GFS_radtend_type%create !****************************************** subroutine radtend_create (Radtend, IM, Model) - + implicit none - + class(GFS_radtend_type) :: Radtend integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model - !--- Out (radiation only) + !--- Out (radiation only) allocate (Radtend%sfcfsw (IM)) allocate (Radtend%sfcflw (IM)) @@ -5436,7 +5547,7 @@ subroutine radtend_create (Radtend, IM, Model) Radtend%sfcflw%upfx0 = clear_val Radtend%sfcflw%dnfxc = clear_val Radtend%sfcflw%dnfx0 = clear_val - + allocate (Radtend%htrsw (IM,Model%levs)) allocate (Radtend%htrlw (IM,Model%levs)) allocate (Radtend%sfalb (IM)) @@ -5450,12 +5561,12 @@ subroutine radtend_create (Radtend, IM, Model) Radtend%coszen = clear_val Radtend%tsflw = clear_val Radtend%semis = clear_val - + !--- In/Out (???) (radiation only) allocate (Radtend%coszdg (IM)) Radtend%coszdg = clear_val - + !--- In/Out (???) (physics only) allocate (Radtend%swhc (IM,Model%levs)) allocate (Radtend%lwhc (IM,Model%levs)) @@ -5569,7 +5680,7 @@ 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)) @@ -5578,7 +5689,6 @@ subroutine diag_create (Diag, IM, Model) if (Model%imp_physics == Model%imp_physics_fer_hires) then allocate (Diag%train (IM,Model%levs)) end if - allocate (Diag%cldfra (IM,Model%levs)) allocate (Diag%ca_deep (IM)) @@ -5586,7 +5696,7 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%ca_shal (IM)) allocate (Diag%ca_rad (IM)) allocate (Diag%ca_micro (IM)) - + !--- 3D diagnostics if (Model%ldiag3d) then allocate (Diag%du3dt (IM,Model%levs,8)) @@ -5594,84 +5704,79 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%dt3dt (IM,Model%levs,11)) if (Model%qdiag3d) then allocate (Diag%dq3dt (IM,Model%levs,13)) + else + allocate (Diag%dq3dt (1,1,13)) endif -!--- needed to allocate GoCart coupling fields allocate (Diag%upd_mf (IM,Model%levs)) allocate (Diag%dwn_mf (IM,Model%levs)) allocate (Diag%det_mf (IM,Model%levs)) - allocate (Diag%cldcov (IM,Model%levs)) + else + allocate (Diag%du3dt (1,1,8)) + allocate (Diag%dv3dt (1,1,8)) + allocate (Diag%dt3dt (1,1,11)) + allocate (Diag%dq3dt (1,1,13)) endif -!vay-2018 +! UGWP + allocate (Diag%zmtb (IM) ) + allocate (Diag%zogw (IM) ) + allocate (Diag%zlwb (IM) ) + allocate (Diag%tau_ogw (IM) ) + allocate (Diag%tau_ngw (IM) ) + allocate (Diag%tau_mtb (IM) ) + allocate (Diag%tau_tofd (IM) ) + allocate (Diag%dudt_gw (IM,Model%levs)) + allocate (Diag%dvdt_gw (IM,Model%levs)) + allocate (Diag%dtdt_gw (IM,Model%levs)) + allocate (Diag%kdis_gw (IM,Model%levs)) + if (Model%ldiag_ugwp) then allocate (Diag%du3dt_dyn (IM,Model%levs) ) - allocate (Diag%du3dt_pbl (IM,Model%levs) ) allocate (Diag%dv3dt_pbl (IM,Model%levs) ) allocate (Diag%dt3dt_pbl (IM,Model%levs) ) - allocate (Diag%du3dt_ogw (IM,Model%levs) ) allocate (Diag%dv3dt_ogw (IM,Model%levs) ) allocate (Diag%dt3dt_ogw (IM,Model%levs) ) - allocate (Diag%du3dt_mtb (IM,Model%levs) ) allocate (Diag%dv3dt_mtb (IM,Model%levs) ) allocate (Diag%dt3dt_mtb (IM,Model%levs) ) - allocate (Diag%du3dt_tms (IM,Model%levs) ) allocate (Diag%dv3dt_tms (IM,Model%levs) ) allocate (Diag%dt3dt_tms (IM,Model%levs) ) - allocate (Diag%du3dt_ngw (IM,Model%levs) ) allocate (Diag%dv3dt_ngw (IM,Model%levs) ) allocate (Diag%dt3dt_ngw (IM,Model%levs) ) - allocate (Diag%du3dt_cgw (IM,Model%levs) ) allocate (Diag%dv3dt_cgw (IM,Model%levs) ) - allocate (Diag%dt3dt_moist (IM,Model%levs) ) - + allocate (Diag%dt3dt_moist (IM,Model%levs)) allocate (Diag%dudt_tot (IM,Model%levs) ) allocate (Diag%dvdt_tot (IM,Model%levs) ) allocate (Diag%dtdt_tot (IM,Model%levs) ) - - allocate (Diag%uav_ugwp (IM,Model%levs) ) - allocate (Diag%tav_ugwp (IM,Model%levs) ) + allocate (Diag%uav_ugwp (IM,Model%levs) ) + allocate (Diag%tav_ugwp (IM,Model%levs) ) endif - allocate (Diag%zmtb (IM) ) - allocate (Diag%zogw (IM) ) - allocate (Diag%zlwb (IM) ) - allocate (Diag%tau_ogw (IM) ) - allocate (Diag%tau_ngw (IM) ) - allocate (Diag%tau_mtb (IM) ) - allocate (Diag%tau_tofd (IM) ) -! endif - -! -!ugwp - instant -! - if (Model%do_ugwp) then - allocate (Diag%gwp_ax (IM,Model%levs) ) - allocate (Diag%gwp_ay (IM,Model%levs) ) - allocate (Diag%gwp_dtdt(IM,Model%levs) ) - allocate (Diag%gwp_kdis(IM,Model%levs) ) - - allocate (Diag%gwp_axo (IM,Model%levs) ) - allocate (Diag%gwp_ayo (IM,Model%levs) ) - allocate (Diag%gwp_axc (IM,Model%levs) ) - allocate (Diag%gwp_ayc (IM,Model%levs) ) - allocate (Diag%gwp_axf (IM,Model%levs) ) - allocate (Diag%gwp_ayf (IM,Model%levs) ) -!GW-sources - allocate (Diag%gwp_dcheat(IM,Model%levs) ) - allocate (Diag%gwp_scheat(IM,Model%levs) ) - allocate (Diag%gwp_fgf (IM ) ) - allocate (Diag%gwp_okw (IM ) ) - - allocate (Diag%gwp_precip(IM) ) - allocate (Diag%gwp_klevs (IM, 3) ) - - endif + if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22) then + allocate (Diag%dudt_ogw (IM,Model%levs)) + allocate (Diag%dvdt_ogw (IM,Model%levs)) + allocate (Diag%dudt_obl (IM,Model%levs)) + allocate (Diag%dvdt_obl (IM,Model%levs)) + allocate (Diag%dudt_oss (IM,Model%levs)) + allocate (Diag%dvdt_oss (IM,Model%levs)) + allocate (Diag%dudt_ofd (IM,Model%levs)) + allocate (Diag%dvdt_ofd (IM,Model%levs)) + allocate (Diag%du_ogwcol (IM) ) + allocate (Diag%dv_ogwcol (IM) ) + allocate (Diag%du_oblcol (IM) ) + allocate (Diag%dv_oblcol (IM) ) + allocate (Diag%du_osscol (IM) ) + allocate (Diag%dv_osscol (IM) ) + allocate (Diag%du_ofdcol (IM) ) + allocate (Diag%dv_ofdcol (IM) ) + else + allocate (Diag%dudt_ogw (IM,Model%levs)) + end if !--- 3D diagnostics for Thompson MP / GFDL MP allocate (Diag%refl_10cm(IM,Model%levs)) @@ -5722,43 +5827,6 @@ subroutine diag_create (Diag, IM, Model) Diag%exch_m = clear_val endif - !--- Drag Suite variables: - if (Model%gwd_opt == 33 .or. Model%gwd_opt == 22) then - !print*,"Allocating all Drag Suite variables:" - allocate (Diag%dtaux2d_ls (IM,Model%levs)) - allocate (Diag%dtauy2d_ls (IM,Model%levs)) - allocate (Diag%dtaux2d_bl (IM,Model%levs)) - allocate (Diag%dtauy2d_bl (IM,Model%levs)) - allocate (Diag%dtaux2d_ss (IM,Model%levs)) - allocate (Diag%dtauy2d_ss (IM,Model%levs)) - allocate (Diag%dtaux2d_fd (IM,Model%levs)) - allocate (Diag%dtauy2d_fd (IM,Model%levs)) - Diag%dtaux2d_ls = clear_val - Diag%dtauy2d_ls = clear_val - Diag%dtaux2d_bl = clear_val - Diag%dtauy2d_bl = clear_val - Diag%dtaux2d_ss = clear_val - Diag%dtauy2d_ss = clear_val - Diag%dtaux2d_fd = clear_val - Diag%dtauy2d_fd = clear_val - allocate (Diag%dusfc_ls (IM)) - allocate (Diag%dvsfc_ls (IM)) - allocate (Diag%dusfc_bl (IM)) - allocate (Diag%dvsfc_bl (IM)) - allocate (Diag%dusfc_ss (IM)) - allocate (Diag%dvsfc_ss (IM)) - allocate (Diag%dusfc_fd (IM)) - allocate (Diag%dvsfc_fd (IM)) - Diag%dusfc_ls = 0 - Diag%dvsfc_ls = 0 - Diag%dusfc_bl = 0 - Diag%dvsfc_bl = 0 - Diag%dusfc_ss = 0 - Diag%dvsfc_ss = 0 - Diag%dusfc_fd = 0 - Diag%dvsfc_fd = 0 - endif - ! Auxiliary arrays in output for debugging if (Model%naux2d>0) then allocate (Diag%aux2d(IM,Model%naux2d)) @@ -5794,9 +5862,6 @@ subroutine diag_rad_zero(Diag, Model) Diag%topfsw%upfx0 = zero Diag%topflw%upfxc = zero Diag%topflw%upfx0 = zero - if (Model%ldiag3d) then - Diag%cldcov = zero - endif end subroutine diag_rad_zero @@ -5946,69 +6011,69 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) endif ! -!----------------------------- - if (Model%ldiag_ugwp) then - if(Model%me == Model%master) print *,'VAY in diag_phys_zero at kdt=',Model%kdt, Model%ldiag_ugwp +! UGWP + Diag%zmtb = zero + Diag%zogw = zero + Diag%zlwb = zero + Diag%tau_mtb = zero + Diag%tau_ogw = zero + Diag%tau_ngw = zero + Diag%tau_tofd = zero + Diag%dudt_gw = zero + Diag%dvdt_gw = zero + Diag%dtdt_gw = zero + Diag%kdis_gw = zero + + if (Model%do_ugwp_v1 .or. Model%gwd_opt==33 .or. Model%gwd_opt==22) then + Diag%dudt_ogw = zero + Diag%dvdt_ogw = zero + Diag%dudt_obl = zero + Diag%dvdt_obl = zero + Diag%dudt_oss = zero + Diag%dvdt_oss = zero + Diag%dudt_ofd = zero + Diag%dvdt_ofd = zero + Diag%du_ogwcol = zero + Diag%dv_ogwcol = zero + Diag%du_oblcol = zero + Diag%dv_oblcol = zero + Diag%du_osscol = zero + Diag%dv_osscol = zero + Diag%du_ofdcol = zero + Diag%dv_ofdcol = zero + else + Diag%dudt_ogw = zero + end if + + if (Model%ldiag_ugwp) then Diag%du3dt_pbl = zero Diag%dv3dt_pbl = zero Diag%dt3dt_pbl = zero -! Diag%du3dt_ogw = zero Diag%dv3dt_ogw = zero Diag%dt3dt_ogw = zero - Diag%du3dt_mtb = zero Diag%dv3dt_mtb = zero Diag%dt3dt_mtb = zero - Diag%du3dt_tms = zero Diag%dv3dt_tms = zero Diag%dt3dt_tms = zero - Diag%du3dt_ngw = zero Diag%dv3dt_ngw = zero Diag%dt3dt_ngw = zero - Diag%du3dt_moist = zero Diag%dv3dt_moist = zero Diag%dt3dt_moist = zero - Diag%dudt_tot = zero Diag%dvdt_tot = zero Diag%dtdt_tot = zero - Diag%uav_ugwp = zero Diag%tav_ugwp = zero !COORDE Diag%du3dt_dyn = zero - Diag%zmtb = zero - Diag%zogw = zero - Diag%zlwb = zero - - Diag%tau_mtb = zero - Diag%tau_ogw = zero - Diag%tau_ngw = zero - Diag%tau_tofd = zero endif + ! - if (Model%do_ugwp) then - Diag%gwp_ax = zero - Diag%gwp_ay = zero - Diag%gwp_dtdt = zero - Diag%gwp_kdis = zero - Diag%gwp_axo = zero - Diag%gwp_ayo = zero - Diag%gwp_axc = zero - Diag%gwp_ayc = zero - Diag%gwp_axf = zero - Diag%gwp_ayf = zero - Diag%gwp_dcheat = zero - Diag%gwp_scheat = zero - Diag%gwp_precip = zero - Diag%gwp_klevs = -99 - Diag%gwp_fgf = zero - Diag%gwp_okw = zero - endif !----------------------------- ! max hourly diagnostics @@ -6139,6 +6204,7 @@ subroutine interstitial_create (Interstitial, IM, Model) class(GFS_interstitial_type) :: Interstitial integer, intent(in) :: IM type(GFS_control_type), intent(in) :: Model + integer :: iGas ! allocate (Interstitial%otspt (Model%ntracp1,2)) ! Set up numbers of tracers for PBL, convection, etc: sets @@ -6396,7 +6462,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%fluxswUP_allsky (IM, Model%levs+1)) allocate (Interstitial%fluxswDOWN_allsky (IM, Model%levs+1)) allocate (Interstitial%fluxswUP_clrsky (IM, Model%levs+1)) - allocate (Interstitial%fluxswDOWN_clrsky (IM, Model%levs+1)) + allocate (Interstitial%fluxswDOWN_clrsky (IM, Model%levs+1)) allocate (Interstitial%aerosolslw (IM, Model%levs, Model%rrtmgp_nBandsLW, NF_AELW)) allocate (Interstitial%aerosolssw (IM, Model%levs, Model%rrtmgp_nBandsSW, NF_AESW)) allocate (Interstitial%cld_frac (IM, Model%levs)) @@ -6410,7 +6476,7 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%cld_rerain (IM, Model%levs)) allocate (Interstitial%precip_frac (IM, Model%levs)) allocate (Interstitial%icseed_lw (IM)) - allocate (Interstitial%icseed_sw (IM)) + allocate (Interstitial%icseed_sw (IM)) allocate (Interstitial%flxprf_lw (IM, Model%levs+1)) allocate (Interstitial%flxprf_sw (IM, Model%levs+1)) allocate (Interstitial%sfc_emiss_byband (Model%rrtmgp_nBandsLW,IM)) @@ -6422,22 +6488,37 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%toa_src_sw (IM,Model%rrtmgp_nGptsSW)) allocate (Interstitial%toa_src_lw (IM,Model%rrtmgp_nGptsLW)) allocate (Interstitial%active_gases_array (Model%nGases)) + ! ty_gas_concs + Interstitial%gas_concentrations%ncol = IM + Interstitial%gas_concentrations%nlay = Model%levs + allocate(Interstitial%gas_concentrations%gas_name(Model%nGases)) + allocate(Interstitial%gas_concentrations%concs(Model%nGases)) + do iGas=1,Model%nGases + allocate(Interstitial%gas_concentrations%concs(iGas)%conc(IM, Model%levs)) + enddo end if -! CIRES UGWP v0 - allocate (Interstitial%gw_dudt (IM,Model%levs)) - allocate (Interstitial%gw_dvdt (IM,Model%levs)) - allocate (Interstitial%gw_dtdt (IM,Model%levs)) - allocate (Interstitial%gw_kdis (IM,Model%levs)) + +! UGWP common allocate (Interstitial%tau_mtb (IM)) allocate (Interstitial%tau_ogw (IM)) allocate (Interstitial%tau_tofd (IM)) allocate (Interstitial%tau_ngw (IM)) - allocate (Interstitial%zmtb (IM)) - allocate (Interstitial%zlwb (IM)) - allocate (Interstitial%zogw (IM)) + allocate (Interstitial%tau_oss (IM)) allocate (Interstitial%dudt_mtb (IM,Model%levs)) - allocate (Interstitial%dudt_ogw (IM,Model%levs)) allocate (Interstitial%dudt_tms (IM,Model%levs)) + allocate (Interstitial%zmtb (IM) ) + allocate (Interstitial%zlwb (IM) ) + allocate (Interstitial%zogw (IM) ) + allocate (Interstitial%zngw (IM) ) + +! CIRES UGWP v1 + if (Model%do_ugwp_v1) then + allocate (Interstitial%dudt_ngw (IM,Model%levs)) + allocate (Interstitial%dvdt_ngw (IM,Model%levs)) + allocate (Interstitial%dtdt_ngw (IM,Model%levs)) + allocate (Interstitial%kdis_ngw (IM,Model%levs)) + end if + !-- GSL drag suite if (Model%gwd_opt==3 .or. Model%gwd_opt==33 .or. & Model%gwd_opt==2 .or. Model%gwd_opt==22 ) then @@ -6521,7 +6602,6 @@ 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)) @@ -6745,6 +6825,7 @@ subroutine interstitial_rad_reset (Interstitial, Model) ! class(GFS_interstitial_type) :: Interstitial type(GFS_control_type), intent(in) :: Model + integer :: iGas ! Interstitial%aerodp = clear_val Interstitial%alb1d = clear_val @@ -6821,7 +6902,7 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%precip_overlap_param = clear_val Interstitial%fluxlwDOWN_allsky = clear_val Interstitial%fluxlwUP_clrsky = clear_val - Interstitial%fluxlwDOWN_clrsky = clear_val + Interstitial%fluxlwDOWN_clrsky = clear_val Interstitial%fluxswUP_allsky = clear_val Interstitial%fluxswDOWN_allsky = clear_val Interstitial%fluxswUP_clrsky = clear_val @@ -6848,6 +6929,9 @@ subroutine interstitial_rad_reset (Interstitial, Model) Interstitial%sfc_alb_uvvis_dif = clear_val Interstitial%toa_src_sw = clear_val Interstitial%toa_src_lw = clear_val + do iGas=1,Model%nGases + Interstitial%gas_concentrations%concs(iGas)%conc = clear_val + end do end if ! end subroutine interstitial_rad_reset @@ -7057,21 +7141,26 @@ subroutine interstitial_phys_reset (Interstitial, Model) Interstitial%zorl_land = huge Interstitial%zorl_ocean = huge Interstitial%zt1d = clear_val -! CIRES UGWP v0 - Interstitial%gw_dudt = clear_val - Interstitial%gw_dvdt = clear_val - Interstitial%gw_dtdt = clear_val - Interstitial%gw_kdis = clear_val + +! UGWP common Interstitial%tau_mtb = clear_val Interstitial%tau_ogw = clear_val Interstitial%tau_tofd = clear_val Interstitial%tau_ngw = clear_val + Interstitial%tau_oss = clear_val Interstitial%zmtb = clear_val Interstitial%zlwb = clear_val Interstitial%zogw = clear_val - Interstitial%dudt_mtb = clear_val - Interstitial%dudt_ogw = clear_val - Interstitial%dudt_tms = clear_val + Interstitial%zngw = clear_val + +! CIRES UGWP v1 + if (Model%do_ugwp_v1) then + Interstitial%dudt_ngw = clear_val + Interstitial%dvdt_ngw = clear_val + Interstitial%dtdt_ngw = clear_val + Interstitial%kdis_ngw = clear_val + end if + !-- GSL drag suite if (Model%gwd_opt==3 .or. Model%gwd_opt==33 .or. & Model%gwd_opt==2 .or. Model%gwd_opt==22) then @@ -7146,7 +7235,6 @@ 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 @@ -7439,21 +7527,27 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'sum(Interstitial%zorl_land ) = ', sum(Interstitial%zorl_land ) write (0,*) 'sum(Interstitial%zorl_ocean ) = ', sum(Interstitial%zorl_ocean ) write (0,*) 'sum(Interstitial%zt1d ) = ', sum(Interstitial%zt1d ) -! CIRES UGWP v0 - write (0,*) 'sum(Interstitial%gw_dudt ) = ', sum(Interstitial%gw_dudt ) - write (0,*) 'sum(Interstitial%gw_dvdt ) = ', sum(Interstitial%gw_dvdt ) - write (0,*) 'sum(Interstitial%gw_dtdt ) = ', sum(Interstitial%gw_dtdt ) - write (0,*) 'sum(Interstitial%gw_kdis ) = ', sum(Interstitial%gw_kdis ) - write (0,*) 'sum(Interstitial%tau_mtb ) = ', sum(Interstitial%tau_mtb ) - write (0,*) 'sum(Interstitial%tau_ogw ) = ', sum(Interstitial%tau_ogw ) - write (0,*) 'sum(Interstitial%tau_tofd ) = ', sum(Interstitial%tau_tofd ) - write (0,*) 'sum(Interstitial%tau_ngw ) = ', sum(Interstitial%tau_ngw ) - write (0,*) 'sum(Interstitial%zmtb ) = ', sum(Interstitial%zmtb ) - write (0,*) 'sum(Interstitial%zlwb ) = ', sum(Interstitial%zlwb ) - write (0,*) 'sum(Interstitial%zogw ) = ', sum(Interstitial%zogw ) - write (0,*) 'sum(Interstitial%dudt_mtb ) = ', sum(Interstitial%dudt_mtb ) - write (0,*) 'sum(Interstitial%dudt_ogw ) = ', sum(Interstitial%dudt_ogw ) - write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms ) + +! UGWP common + write (0,*) 'sum(Interstitial%tau_mtb ) = ', sum(Interstitial%tau_mtb ) + write (0,*) 'sum(Interstitial%tau_ogw ) = ', sum(Interstitial%tau_ogw ) + write (0,*) 'sum(Interstitial%tau_tofd ) = ', sum(Interstitial%tau_tofd ) + write (0,*) 'sum(Interstitial%tau_ngw ) = ', sum(Interstitial%tau_ngw ) + write (0,*) 'sum(Interstitial%tau_oss ) = ', sum(Interstitial%tau_oss ) + write (0,*) 'sum(Interstitial%dudt_mtb ) = ', sum(Interstitial%dudt_mtb ) + write (0,*) 'sum(Interstitial%dudt_tms ) = ', sum(Interstitial%dudt_tms ) + write (0,*) 'sum(Interstitial%zmtb ) = ', sum(Interstitial%zmtb ) + write (0,*) 'sum(Interstitial%zlwb ) = ', sum(Interstitial%zlwb ) + write (0,*) 'sum(Interstitial%zogw ) = ', sum(Interstitial%zogw ) + write (0,*) 'sum(Interstitial%zngw ) = ', sum(Interstitial%zngw ) + +! UGWP v1 + if (Model%do_ugwp_v1) then + write (0,*) 'sum(Interstitial%dudt_ngw ) = ', sum(Interstitial%dudt_ngw ) + write (0,*) 'sum(Interstitial%dvdt_ngw ) = ', sum(Interstitial%dvdt_ngw ) + write (0,*) 'sum(Interstitial%dtdt_ngw ) = ', sum(Interstitial%dtdt_ngw ) + write (0,*) 'sum(Interstitial%kdis_ngw ) = ', sum(Interstitial%kdis_ngw ) + end if !-- GSL drag suite if (Model%gwd_opt==3 .or. Model%gwd_opt==33 .or. & Model%gwd_opt==2 .or. Model%gwd_opt==22) then @@ -7528,7 +7622,6 @@ 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 197f164cc..e79be62e3 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -1,7 +1,7 @@ [ccpp-table-properties] name = GFS_statein_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_statein_type @@ -273,7 +273,7 @@ [ccpp-table-properties] name = GFS_stateout_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_stateout_type @@ -454,7 +454,7 @@ [ccpp-table-properties] name = GFS_sfcprop_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_sfcprop_type @@ -984,7 +984,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [tvxy] standard_name = vegetation_temperature long_name = vegetation temperature @@ -992,7 +992,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [tgxy] standard_name = ground_temperature_for_noahmp long_name = ground temperature for noahmp @@ -1000,7 +1000,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [canicexy] standard_name = canopy_intercepted_ice_mass long_name = canopy intercepted ice mass @@ -1008,7 +1008,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [canliqxy] standard_name = canopy_intercepted_liquid_water long_name = canopy intercepted liquid water @@ -1016,7 +1016,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [eahxy] standard_name = canopy_air_vapor_pressure long_name = canopy air vapor pressure @@ -1024,7 +1024,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [tahxy] standard_name = canopy_air_temperature long_name = canopy air temperature @@ -1032,7 +1032,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [cmxy] standard_name = surface_drag_coefficient_for_momentum_for_noahmp long_name = surface drag coefficient for momentum for noahmp @@ -1040,7 +1040,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [chxy] standard_name = surface_drag_coefficient_for_heat_and_moisture_for_noahmp long_name = surface exchange coeff heat & moisture for noahmp @@ -1048,7 +1048,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [fwetxy] standard_name = area_fraction_of_wet_canopy long_name = area fraction of canopy that is wetted/snowed @@ -1056,7 +1056,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [sneqvoxy] standard_name = snow_mass_at_previous_time_step long_name = snow mass at previous time step @@ -1064,7 +1064,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [alboldxy] standard_name = snow_albedo_at_previous_time_step long_name = snow albedo at previous time step @@ -1072,7 +1072,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [qsnowxy] standard_name = snow_precipitation_rate_at_surface long_name = snow precipitation rate at surface @@ -1080,7 +1080,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [wslakexy] standard_name = lake_water_storage long_name = lake water storage @@ -1088,7 +1088,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [zwtxy] standard_name = water_table_depth long_name = water table depth @@ -1096,7 +1096,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [waxy] standard_name = water_storage_in_aquifer long_name = water storage in aquifer @@ -1104,7 +1104,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [wtxy] standard_name = water_storage_in_aquifer_and_saturated_soil long_name = water storage in aquifer and saturated soil @@ -1112,7 +1112,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [tsnoxy] standard_name = snow_temperature long_name = snow_temperature @@ -1120,7 +1120,7 @@ dimensions = (horizontal_loop_extent, lower_bound_of_snow_vertical_dimension_for_land_surface_model:0) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [zsnsoxy] standard_name = layer_bottom_depth_from_snow_surface long_name = depth from the top of the snow surface at the bottom of the layer @@ -1128,7 +1128,7 @@ dimensions = (horizontal_loop_extent, lower_bound_of_snow_vertical_dimension_for_land_surface_model:soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [snicexy] standard_name = snow_layer_ice long_name = snow layer ice @@ -1136,7 +1136,7 @@ dimensions = (horizontal_loop_extent, lower_bound_of_snow_vertical_dimension_for_land_surface_model:0) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [snliqxy] standard_name = snow_layer_liquid_water long_name = snow layer liquid water @@ -1144,7 +1144,7 @@ dimensions = (horizontal_loop_extent, lower_bound_of_snow_vertical_dimension_for_land_surface_model:0) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [lfmassxy] standard_name = leaf_mass long_name = leaf mass @@ -1152,7 +1152,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [rtmassxy] standard_name = fine_root_mass long_name = fine root mass @@ -1160,7 +1160,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [stmassxy] standard_name = stem_mass long_name = stem mass @@ -1168,7 +1168,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [woodxy] standard_name = wood_mass long_name = wood mass including woody roots @@ -1176,7 +1176,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [stblcpxy] standard_name = slow_soil_pool_mass_content_of_carbon long_name = stable carbon in deep soil @@ -1184,7 +1184,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [fastcpxy] standard_name = fast_soil_pool_mass_content_of_carbon long_name = short-lived carbon in shallow soil @@ -1192,10 +1192,10 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [xlaixy] standard_name = leaf_area_index - long_name = leaf area index + long_name = leaf area index units = none dimensions = (horizontal_loop_extent) type = real @@ -1203,12 +1203,12 @@ active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme .or. (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme .and. flag_for_reading_leaf_area_index_from_input)) [xsaixy] standard_name = stem_area_index - long_name = stem area index + long_name = stem area index units = none dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [taussxy] standard_name = nondimensional_snow_age long_name = non-dimensional snow age @@ -1216,7 +1216,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [smoiseq] standard_name = equilibrium_soil_water_content long_name = equilibrium soil water content @@ -1224,7 +1224,7 @@ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [smcwtdxy] standard_name = soil_water_content_between_soil_bottom_and_water_table long_name = soil water content between the bottom of the soil and the water table @@ -1232,7 +1232,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [deeprechxy] standard_name = water_table_recharge_when_deep long_name = recharge to or from the water table when deep @@ -1240,7 +1240,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [rechxy] standard_name = water_table_recharge_when_shallow long_name = recharge to or from the water table when shallow @@ -1257,6 +1257,46 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_noah_wrfv4_land_surface_scheme) +[albdvis] + standard_name = surface_albedo_direct_visible + long_name = direct surface albedo visible band + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) +[albdnir] + standard_name = surface_albedo_direct_NIR + long_name = direct surface albedo NIR band + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) +[albivis] + standard_name = surface_albedo_diffuse_visible + long_name = diffuse surface albedo visible band + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) +[albinir] + standard_name = surface_albedo_diffuse_NIR + long_name = diffuse surface albedo NIR band + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) +[emiss] + standard_name = surface_emissivity_lsm + long_name = surface emissivity from lsm + units = frac + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [wetness] standard_name = normalized_soil_wetness_for_land_surface_model long_name = normalized soil wetness for lsm @@ -1264,7 +1304,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [sh2o] standard_name = volume_fraction_of_unfrozen_soil_moisture_for_land_surface_model long_name = volume fraction of unfrozen soil moisture for lsm @@ -1272,7 +1312,7 @@ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [keepsmfr] standard_name = volume_fraction_of_frozen_soil_moisture_for_land_surface_model long_name = volume fraction of frozen soil moisture for lsm @@ -1280,7 +1320,7 @@ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [smois] standard_name = volume_fraction_of_soil_moisture_for_land_surface_model long_name = volumetric fraction of soil moisture for lsm @@ -1288,7 +1328,7 @@ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [tslb] standard_name = soil_temperature_for_land_surface_model long_name = soil temperature for land surface model @@ -1312,7 +1352,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [qwv_surf_land] standard_name = water_vapor_mixing_ratio_at_surface_over_land long_name = water vapor mixing ratio at surface over land @@ -1328,7 +1368,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [flag_frsoil] standard_name = flag_for_frozen_soil_physics long_name = flag for frozen soil physics (RUC) @@ -1336,7 +1376,7 @@ dimensions = (horizontal_loop_extent,soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [rhofr] standard_name = density_of_frozen_precipitation long_name = density of frozen precipitation @@ -1344,7 +1384,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [tsnow_land] standard_name = snow_temperature_bottom_first_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land @@ -1360,7 +1400,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [snowfallac_land] standard_name = total_accumulated_snowfall_over_land long_name = run-total snow accumulation on the ground @@ -1376,7 +1416,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [ustm] standard_name = surface_friction_velocity_drag long_name = friction velocity isolated for momentum only @@ -1517,7 +1557,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [drainncprv] standard_name = explicit_rainfall_rate_from_previous_timestep long_name = explicit rainfall rate previous timestep @@ -1525,7 +1565,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [diceprv] standard_name = ice_precipitation_rate_from_previous_timestep long_name = ice precipitation rate from previous timestep @@ -1533,7 +1573,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [dsnowprv] standard_name = snow_precipitation_rate_from_previous_timestep long_name = snow precipitation rate from previous timestep @@ -1541,7 +1581,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [dgraupelprv] standard_name = graupel_precipitation_rate_from_previous_timestep long_name = graupel precipitation rate from previous timestep @@ -1549,7 +1589,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) + active = (flag_for_land_surface_scheme == flag_for_noahmp_land_surface_scheme) [alvsf] standard_name = mean_vis_albedo_with_strong_cosz_dependency long_name = mean vis albedo with strong cosz dependency @@ -1583,7 +1623,7 @@ [ccpp-table-properties] name = GFS_coupling_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_coupling_type @@ -2009,7 +2049,7 @@ [ulwsfcin_cpl] standard_name = surface_upwelling_longwave_flux_for_coupling long_name = surface upwelling LW flux for coupling - units = W m-2 + units = W m-2 dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -2017,7 +2057,7 @@ [dusfcin_cpl] standard_name = surface_x_momentum_flux_for_coupling long_name = sfc x momentum flux for coupling - units = Pa + units = Pa dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -2025,7 +2065,7 @@ [dvsfcin_cpl] standard_name = surface_y_momentum_flux_for_coupling long_name = sfc y momentum flux for coupling - units = Pa + units = Pa dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -2183,7 +2223,7 @@ [ccpp-table-properties] name = GFS_control_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_control_type @@ -2490,13 +2530,13 @@ [nsswr] standard_name = number_of_timesteps_between_shortwave_radiation_calls long_name = number of timesteps between shortwave radiation calls - units = + units = dimensions = () type = integer [nslwr] standard_name = number_of_timesteps_between_longwave_radiation_calls long_name = number of timesteps between longwave radiation calls - units = + units = dimensions = () type = integer [fhswr] @@ -2617,7 +2657,7 @@ type = integer [iovr] standard_name = flag_for_cloud_overlap_method_for_radiation - long_name = flag for cloud overlap method + long_name = flag for cloud overlap method units = flag dimensions = () type = integer @@ -2703,7 +2743,7 @@ type = character kind = len=128 [lw_file_clouds] - standard_name = rrtmgp_coeff_lw_cloud_optics + standard_name = rrtmgp_coeff_lw_cloud_optics long_name = file containing coefficients for RRTMGP LW cloud optics (Model%lw_file_clouds) units = none dimensions = () @@ -2721,7 +2761,7 @@ units = count dimensions = () type = integer -[sw_file_gas] +[sw_file_gas] standard_name = rrtmgp_kdistribution_sw long_name = file containing RRTMGP SW k-distribution (Model%sw_file_gas) units = none @@ -2729,9 +2769,9 @@ type = character kind = len=128 [sw_file_clouds] - standard_name = rrtmgp_coeff_sw_cloud_optics + standard_name = rrtmgp_coeff_sw_cloud_optics long_name = file containing coefficients for RRTMGP SW cloud optics (Model%sw_file_clouds) - units = none + units = none dimensions = () type = character kind = len=128 @@ -2752,7 +2792,7 @@ long_name = logical flag to control cloud optics scheme. units = flag dimensions = () - type = logical + type = logical [doGP_cldoptics_PADE] standard_name = flag_to_calc_lw_cld_optics_using_RRTMGP_PADE long_name = logical flag to control cloud optics scheme. @@ -2770,10 +2810,10 @@ long_name = logical flag to control RRTMGP LW calculation units = flag dimensions = () - type = logical -[doGP_lwscat] + type = logical +[doGP_lwscat] standard_name = flag_to_include_longwave_scattering_in_cloud_optics - long_name = logical flag to control the addition of LW scattering in RRTMGP + long_name = logical flag to control the addition of LW scattering in RRTMGP units = flag dimensions = () type = logical @@ -3006,7 +3046,7 @@ [mg_qcvar] standard_name = mg_cloud_water_variance long_name = cloud water relative variance for MG microphysics - units = + units = dimensions = () type = real kind = kind_phys @@ -3312,6 +3352,12 @@ units = count dimensions = () type = integer +[lsnow_lsm_ubound] + standard_name = upper_bound_of_snow_vertical_dimension_for_land_surface_model + long_name = upper bound of of snow-related arrays for land surface model + units = count + dimensions = () + type = integer [zs] standard_name = depth_of_soil_levels_for_land_surface_model long_name = depth of soil levels for land surface model @@ -3319,7 +3365,13 @@ dimensions = (soil_vertical_dimension_for_land_surface_model) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[dzs] + standard_name = thickness_of_soil_levels_for_land_surface_model + long_name = thickness of soil levels for land surface model + units = m + dimensions = (soil_vertical_dimension_for_land_surface_model) + type = real + kind = kind_phys [pores] standard_name = maximum_soil_moisture_content_for_land_surface_model long_name = maximum soil moisture for a given soil type for land surface model @@ -3402,9 +3454,9 @@ dimensions = () type = integer [spec_adv] - standard_name = flag_for_individual_cloud_species_advected + standard_name = flag_for_individual_cloud_species_advected long_name = flag for individual cloud species advected - units = flag + units = flag dimensions = () type = logical [flgmin] @@ -3641,7 +3693,7 @@ [shcnvcw] standard_name = flag_shallow_convective_cloud long_name = flag for shallow convective cloud - units = + units = dimensions = () type = logical [redrag] @@ -4250,14 +4302,14 @@ standard_name =magnitude_of_perturbations_for_landperts long_name = magnitude of perturbations for landperts units = variable - dimensions = (number_of_land_surface_variables_perturbed) + dimensions = (number_of_land_surface_variables_perturbed) type = real kind = kind_phys [lndp_var_list] standard_name = variables_to_be_perturbed_for_landperts long_name = variables to be perturbed for landperts units = none - dimensions = (number_of_land_surface_variables_perturbed) + dimensions = (number_of_land_surface_variables_perturbed) type = character kind = len=3 [ntrac] @@ -4510,43 +4562,43 @@ [nT2delt] standard_name = index_for_air_temperature_two_timesteps_back long_name = the index of air temperature two timesteps back in phy f3d - units = + units = dimensions = () type = integer [nTdelt] standard_name = index_for_air_temperature_at_previous_timestep long_name = the index of air temperature at previous timestep in phy f3d - units = + units = dimensions = () type = integer [nqv2delt] standard_name = index_for_specific_humidity_two_timesteps_back long_name = the index of specific humidity two timesteps back in phy f3d - units = + units = dimensions = () type = integer [nqvdelt] standard_name = index_for_specific_humidity_at_previous_timestep long_name = the index of specific humidity at previous timestep in phy f3d - units = + units = dimensions = () type = integer [nps2delt] standard_name = index_for_surface_air_pressure_two_timesteps_back long_name = the index of surface air pressure two timesteps back in phy f2d - units = + units = dimensions = () type = integer [npsdelt] standard_name = index_for_surface_air_pressure_at_previous_timestep long_name = the index of surface air pressure at previous timestep in phy f2d - units = + units = dimensions = () type = integer [ncnvwind] standard_name = index_for_surface_wind_enhancement_due_to_convection long_name = the index of surface wind enhancement due to convection in phy f2d - units = + units = dimensions = () type = integer [debug] @@ -4743,7 +4795,7 @@ standard_name = gwd_opt long_name = flag to choose gwd scheme units = flag - dimensions = () + dimensions = () type = integer [do_mynnedmf] standard_name = do_mynnedmf @@ -4911,7 +4963,7 @@ dimensions = () type = logical [do_ugwp_v0] - standard_name = do_ugwp_v0 + standard_name = flag_for_ugwp_version_0 long_name = flag to activate ver 0 CIRES UGWP units = flag dimensions = () @@ -4919,15 +4971,23 @@ intent = in optional = F [do_ugwp_v0_orog_only] - standard_name = do_ugwp_v0_orog_only + standard_name = flag_for_ugwp_version_0_orographic_gwd long_name = flag to activate ver 0 CIRES UGWP - orographic GWD only units = flag dimensions = () type = logical intent = in optional = F +[do_ugwp_v0_nst_only] + standard_name = flag_for_ugwp_version_0_nonorographic_gwd + long_name = flag to activate ver 0 CIRES UGWP - non-stationary GWD only + units = flag + dimensions = () + type = logical + intent = in + optional = F [do_gsl_drag_ls_bl] - standard_name = do_gsl_drag_ls_bl + standard_name = flag_for_gsl_drag_suite_large_scale_orographic_and_blocking_drag long_name = flag to activate GSL drag suite - large-scale GWD and blocking units = flag dimensions = () @@ -4935,7 +4995,7 @@ intent = in optional = F [do_gsl_drag_ss] - standard_name = do_gsl_drag_ss + standard_name = flag_for_gsl_drag_suite_small_scale_orographic_drag long_name = flag to activate GSL drag suite - small-scale GWD units = flag dimensions = () @@ -4943,7 +5003,7 @@ intent = in optional = F [do_gsl_drag_tofd] - standard_name = do_gsl_drag_tofd + standard_name = flag_for_gsl_drag_suite_turbulent_orographic_form_drag long_name = flag to activate GSL drag suite - turb orog form drag units = flag dimensions = () @@ -4951,7 +5011,7 @@ intent = in optional = F [do_ugwp_v1] - standard_name = do_ugwp_v1 + standard_name = flag_for_ugwp_version_1 long_name = flag to activate ver 1 CIRES UGWP units = flag dimensions = () @@ -4959,25 +5019,33 @@ intent = in optional = F [do_ugwp_v1_orog_only] - standard_name = do_ugwp_v1_orog_only + standard_name = flag_for_ugwp_version_1_orographic_gwd long_name = flag to activate ver 1 CIRES UGWP - orographic GWD only units = flag dimensions = () type = logical intent = in optional = F +[do_ugwp_v1_w_gsldrag] + standard_name = flag_for_ugwp_version_1_nonorographic_gwd + long_name = flag to activate ver 1 CIRES UGWP - with OGWD of GSL + units = flag + dimensions = () + type = logical + intent = in + optional = F [lmfdeep2] standard_name = flag_for_scale_aware_mass_flux_convection long_name = flag for some scale-aware mass-flux convection scheme active units = flag dimensions = () type = logical - + ######################################################################## [ccpp-table-properties] name = GFS_grid_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_grid_type @@ -5170,12 +5238,42 @@ type = real kind = kind_phys active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) +[jindx1_tau] + standard_name = lower_latitude_index_of_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag_for_interpolation + long_name = index1 for weight1 for tau NGWs + units = none + dimensions = (horizontal_loop_extent) + type = integer + active = (flag_for_ugwp_version_1) +[jindx2_tau] + standard_name = upper_latitude_index_of_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag_for_interpolation + long_name = index2 for weight2 for tau NGWs + units = none + dimensions = (horizontal_loop_extent) + type = integer + active = (flag_for_ugwp_version_1) +[ddy_j1tau] + standard_name = latitude_interpolation_weight_complement_for_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag + long_name = interpolation weight1 for tau NGWs + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_ugwp_version_1) +[ddy_j2tau] + standard_name = latitude_interpolation_weight_for_absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag + long_name = interpolation weight2 for tau NGWs + units = none + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_ugwp_version_1) ######################################################################## [ccpp-table-properties] name = GFS_tbd_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_tbd_type @@ -5194,6 +5292,13 @@ dimensions = (horizontal_loop_extent) type = integer active = (flag_for_lw_clouds_sub_grid_approximation == 2 .or. flag_for_sw_clouds_grid_approximation == 2) +[tau_amf] + standard_name = absolute_momentum_flux_due_to_nonorographic_gravity_wave_drag + long_name = ngw_absolute_momentum_flux + units = various + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [ozpl] standard_name = ozone_forcing long_name = ozone forcing data @@ -5664,7 +5769,7 @@ [ccpp-table-properties] name = GFS_cldprop_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_cldprop_type @@ -5695,7 +5800,7 @@ [ccpp-table-properties] name = GFS_radtend_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_radtend_type @@ -5787,7 +5892,7 @@ [ccpp-table-properties] name = GFS_diag_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_diag_type @@ -5909,134 +6014,6 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[dusfc_ls] - standard_name = integrated_x_momentum_flux_from_large_scale_gwd - long_name = integrated x momentum flux from large scale gwd - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dvsfc_ls] - standard_name = integrated_y_momentum_flux_from_large_scale_gwd - long_name = integrated y momentum flux from large scale gwd - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dusfc_bl] - standard_name = integrated_x_momentum_flux_from_blocking_drag - long_name = integrated x momentum flux from blocking drag - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dvsfc_bl] - standard_name = integrated_y_momentum_flux_from_blocking_drag - long_name = integrated y momentum flux from blocking drag - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dusfc_ss] - standard_name = integrated_x_momentum_flux_from_small_scale_gwd - long_name = integrated x momentum flux from small scale gwd - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dvsfc_ss] - standard_name = integrated_y_momentum_flux_from_small_scale_gwd - long_name = integrated y momentum flux from small scale gwd - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dusfc_fd] - standard_name = integrated_x_momentum_flux_from_form_drag - long_name = integrated x momentum flux from form drag - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dvsfc_fd] - standard_name = integrated_y_momentum_flux_from_form_drag - long_name = integrated y momentum flux from form drag - units = Pa s - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtaux2d_ls] - standard_name = x_momentum_tendency_from_large_scale_gwd - long_name = x momentum tendency from large scale gwd - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtauy2d_ls] - standard_name = y_momentum_tendency_from_large_scale_gwd - long_name = y momentum tendency from large scale gwd - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtaux2d_bl] - standard_name = x_momentum_tendency_from_blocking_drag - long_name = x momentum tendency from blocking drag - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtauy2d_bl] - standard_name = y_momentum_tendency_from_blocking_drag - long_name = y momentum tendency from blocking drag - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtaux2d_ss] - standard_name = x_momentum_tendency_from_small_scale_gwd - long_name = x momentum tendency from small scale gwd - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtauy2d_ss] - standard_name = y_momentum_tendency_from_small_scale_gwd - long_name = y momentum tendency from small scale gwd - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - active = (gwd_opt == 33) - kind = kind_phys -[dtaux2d_fd] - standard_name = x_momentum_tendency_from_form_drag - long_name = x momentum tendency from form drag - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) -[dtauy2d_fd] - standard_name = y_momentum_tendency_from_form_drag - long_name = y momentum tendency from form drag - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys - active = (gwd_opt == 33) [totprcp] standard_name = accumulated_lwe_thickness_of_precipitation_amount long_name = accumulated total precipitation @@ -7211,6 +7188,146 @@ type = real kind = kind_phys active = (diag_ugwp_flag) +[dudt_gw] + standard_name = tendency_of_x_wind_due_to_gravity_wave_drag + long_name = zonal wind tendency due to all GWs + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dvdt_gw] + standard_name = tendency_of_y_wind_due_to_gravity_wave_drag + long_name = meridional wind tendency due to all GWs + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dtdt_gw] + standard_name = tendency_of_air_temperature_due_to_gravity_wave_drag + long_name = air temperature tendency due to all GWs + units = K s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[kdis_gw] + standard_name = atmosphere_momentum_diffusivity_due_to_gravity_wave_drag + long_name = eddy mixing due to all GWs + units = m2 s-1 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dudt_ogw] + standard_name = tendency_of_x_wind_due_to_mesoscale_orographic_gravity_wave_drag + long_name = x momentum tendency from meso scale ogw + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dvdt_ogw] + standard_name = tendency_of_y_wind_due_to_mesoscale_orographic_gravity_wave_drag + long_name = y momentum tendency from meso scale ogw + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[du_ogwcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag + long_name = integrated x momentum flux from meso scale ogw + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dv_ogwcol] + standard_name = vertically_integrated_y_momentum_flux_due_to_mesoscale_orographic_gravity_wave_drag + long_name = integrated y momentum flux from meso scale ogw + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dudt_obl] + standard_name = tendency_of_x_momentum_due_to_blocking_drag + long_name = x momentum tendency from blocking drag + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dvdt_obl] + standard_name = tendency_of_y_momentum_due_to_blocking_drag + long_name = y momentum tendency from blocking drag + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[du_oblcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_blocking_drag + long_name = integrated x momentum flux from blocking drag + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dv_oblcol] + standard_name = vertically_integrated_y_momentum_flux_due_to_blocking_drag + long_name = integrated y momentum flux from blocking drag + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dudt_oss] + standard_name = tendency_of_x_momentum_due_to_small_scale_gravity_wave_drag + long_name = x momentum tendency from small scale gwd + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dvdt_oss] + standard_name = tendency_of_y_momentum_due_to_small_scale_gravity_wave_drag + long_name = y momentum tendency from small scale gwd + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[du_osscol] + standard_name = vertically_integrated_x_momentum_flux_due_to_small_scale_gravity_wave_drag + long_name = integrated x momentum flux from small scale gwd + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dv_osscol] + standard_name = vertically_integrated_y_momentum_flux_due_to_small_scale_gravity_wave_drag + long_name = integrated y momentum flux from small scale gwd + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dudt_ofd] + standard_name = tendency_of_x_momentum_due_to_form_drag + long_name = x momentum tendency from form drag + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[dvdt_ofd] + standard_name = tendency_of_y_momentum_due_to_form_drag + long_name = y momentum tendency from form drag + units = m s-2 + dimensions = (horizontal_loop_extent,vertical_dimension) + type = real + kind = kind_phys +[du_ofdcol] + standard_name = vertically_integrated_x_momentum_flux_due_to_form_drag + long_name = integrated x momentum flux from form drag + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dv_ofdcol] + standard_name = vertically_integrated_y_momentum_flux_due_to_form_drag + long_name = integrated y momentum flux from form drag + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [dv3dt_ngw] standard_name = time_integral_of_change_in_y_wind_due_to_nonstationary_gravity_wave long_name = time integral of change in y wind due to NGW @@ -7236,12 +7353,11 @@ kind = kind_phys active = (number_of_2d_auxiliary_arrays > 0) - ######################################################################## [ccpp-table-properties] name = GFS_interstitial_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_interstitial_type @@ -9481,14 +9597,6 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_noah_wrfv4_land_surface_scheme) -[sthick] - standard_name = soil_layer_thickness - long_name = soil layer thickness - units = m - dimensions = (soil_vertical_dimension) - type = real - kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_noah_wrfv4_land_surface_scheme) [stress] standard_name = surface_wind_stress long_name = surface wind stress @@ -9882,44 +9990,44 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[gw_dudt] - standard_name = tendency_of_x_wind_due_to_ugwp - long_name = zonal wind tendency due to UGWP +[zmtb] + standard_name = height_of_mountain_blocking + long_name = height of mountain blocking drag + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys +[dudt_ngw] + standard_name = tendency_of_x_wind_due_to_nonorographic_gravity_wave_drag + long_name = zonal wind tendency due to non-stationary GWs units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[gw_dvdt] - standard_name = tendency_of_y_wind_due_to_ugwp - long_name = meridional wind tendency due to UGWP +[dvdt_ngw] + standard_name = tendency_of_y_wind_due_to_nonorographic_gravity_wave_drag + long_name = meridional wind tendency due to non-stationary GWs units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[gw_dtdt] - standard_name = tendency_of_air_temperature_due_to_ugwp - long_name = air temperature tendency due to UGWP +[dtdt_ngw] + standard_name = tendency_of_air_temperature_due_to_nonorographic_gravity_wave_drag + long_name = air temperature tendency due to non-stationary GWs units = K s-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[gw_kdis] - standard_name = eddy_mixing_due_to_ugwp - long_name = eddy mixing due to UGWP +[kdis_ngw] + standard_name = atmosphere_momentum_diffusivity_due_to_nonorographic_gravity_wave_drag + long_name = eddy mixing due to non-stationary GWs units = m2 s-1 dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[zmtb] - standard_name = height_of_mountain_blocking - long_name = height of mountain blocking drag - units = m - dimensions = (horizontal_loop_extent) - type = real - kind = kind_phys [zlwb] standard_name = height_of_low_level_wave_breaking - long_name = height of drag due to low level wave breaking + long_name = height of low level wave breaking units = m dimensions = (horizontal_loop_extent) type = real @@ -9931,6 +10039,13 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[zngw] + standard_name = height_of_launch_level_of_nonorographic_gravity_waves + long_name = height of launch level of non-stationary GWs + units = m + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [tau_tofd] standard_name = instantaneous_momentum_flux_due_to_turbulent_orographic_form_drag long_name = instantaneous momentum flux due to TOFD @@ -9952,6 +10067,13 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[tau_oss] + standard_name = momentum_flux_due_to_subgrid_scale_orographic_gravity_wave_drag + long_name = momentum flux or stress due to SSO including OBL-OSS-OFD + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [tau_ngw] standard_name = instantaneous_momentum_flux_due_to_nonstationary_gravity_wave long_name = instantaneous momentum flux due to nonstationary gravity waves @@ -9966,15 +10088,8 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[dudt_ogw] - standard_name = instantaneous_change_in_x_wind_due_to_orographic_gravity_wave_drag - long_name = instantaneous change in x wind due to orographic gw drag - units = m s-2 - dimensions = (horizontal_loop_extent,vertical_dimension) - type = real - kind = kind_phys [dudt_tms] - standard_name = instantaneous_change_in_x_wind_due_to_turbulent_orographic_form_drag + standard_name = tendency_of_x_wind_due_to_turbulent_orographic_form_drag long_name = instantaneous change in x wind due to TOFD units = m s-2 dimensions = (horizontal_loop_extent,vertical_dimension) @@ -10078,15 +10193,29 @@ type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) +[minGPpres] + standard_name = minimum_pressure_in_RRTMGP + long_name = minimum pressure allowed in RRTMGP + units = Pa + dimensions = () + type = real + kind = kind_phys +[minGPtemp] + standard_name = minimum_temperature_in_RRTMGP + long_name = minimum temperature allowed in RRTMGP + units = K + dimensions = () + type = real + kind = kind_phys [ipsdsw0] standard_name = initial_permutation_seed_sw - long_name = initial seed for McICA SW + long_name = initial seed for McICA SW units = none dimensions = () type = integer [ipsdlw0] standard_name = initial_permutation_seed_lw - long_name = initial seed for McICA LW + long_name = initial seed for McICA LW units = none dimensions = () type = integer @@ -10262,114 +10391,104 @@ type = real kind = kind_phys active = (flag_for_rrtmgp_radiation_scheme) -[sw_gas_props] - standard_name = coefficients_for_sw_gas_optics - long_name = DDT containing spectral information for RRTMGP SW radiation scheme - units = DDT - dimensions = () - type = ty_gas_optics_rrtmgp -[sw_cloud_props] - standard_name = coefficients_for_sw_cloud_optics - long_name = DDT containing spectral information for RRTMGP SW radiation scheme - units = DDT - dimensions = () - type = ty_cloud_optics [sw_optical_props_clrsky] standard_name = shortwave_optical_properties_for_clear_sky long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [sw_optical_props_cloudsByBand] standard_name = shortwave_optical_properties_for_cloudy_atmosphere_by_band long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [sw_optical_props_precipByBand] standard_name = shortwave_optical_properties_for_precipitation_by_band long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () - type = ty_optical_props_2str + type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [sw_optical_props_precip] standard_name = shortwave_optical_properties_for_precipitation long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () - type = ty_optical_props_2str + type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [sw_optical_props_clouds] standard_name = shortwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [sw_optical_props_aerosol] standard_name = shortwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [gas_concentrations] standard_name = Gas_concentrations_for_RRTMGP_suite long_name = DDT containing gas concentrations for RRTMGP radiation scheme units = DDT dimensions = () type = ty_gas_concs + active = (flag_for_rrtmgp_radiation_scheme) [sources] standard_name = longwave_source_function long_name = Fortran DDT containing RRTMGP source functions units = DDT dimensions = () type = ty_source_func_lw -[lw_gas_props] - standard_name = coefficients_for_lw_gas_optics - long_name = DDT containing spectral information for RRTMGP LW radiation scheme - units = DDT - dimensions = () - type = ty_gas_optics_rrtmgp -[lw_cloud_props] - standard_name = coefficients_for_lw_cloud_optics - long_name = DDT containing spectral information for RRTMGP LW radiation scheme - units = DDT - dimensions = () - type = ty_cloud_optics + active = (flag_for_rrtmgp_radiation_scheme) [lw_optical_props_clrsky] standard_name = longwave_optical_properties_for_clear_sky long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_1scl + active = (flag_for_rrtmgp_radiation_scheme) [lw_optical_props_clouds] standard_name = longwave_optical_properties_for_cloudy_atmosphere long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [lw_optical_props_precip] standard_name = longwave_optical_properties_for_precipitation long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [lw_optical_props_cloudsByBand] standard_name = longwave_optical_properties_for_cloudy_atmosphere_by_band long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [lw_optical_props_precipByBand] standard_name = longwave_optical_properties_for_precipitation_by_band long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_2str + active = (flag_for_rrtmgp_radiation_scheme) [lw_optical_props_aerosol] standard_name = longwave_optical_properties_for_aerosols long_name = Fortran DDT containing RRTMGP optical properties units = DDT dimensions = () type = ty_optical_props_1scl + active = (flag_for_rrtmgp_radiation_scheme) [sfc_emiss_byband] standard_name = surface_emissivity_in_each_RRTMGP_LW_band long_name = surface emissivity in each RRTMGP LW band @@ -10447,7 +10566,7 @@ [ccpp-table-properties] name = GFS_data_type type = ddt - dependencies = + dependencies = [ccpp-arg-table] name = GFS_data_type diff --git a/scm/src/LASSO_multi_run.py b/scm/src/LASSO_multi_run.py index 6ff310b28..e2ddccdd2 100644 --- a/scm/src/LASSO_multi_run.py +++ b/scm/src/LASSO_multi_run.py @@ -1,3 +1,3 @@ cases = ["LASSO_20180514_s02","LASSO_20180522_s02","LASSO_20180606_s02","LASSO_20180618_s02","LASSO_20180619_s02","LASSO_20180705_s02","LASSO_20180707_s02","LASSO_20180709_s02","LASSO_20180712_s02","LASSO_20180731_s02","LASSO_20180911_s02","LASSO_20180914_s02","LASSO_20180916_s02","LASSO_20180917_s02","LASSO_20180918_s02","LASSO_20181002_s02"] -suites = ["SCM_GFS_v15p2","SCM_GFS_v16beta"] -namelists = ["input_GFS_v15p2.nml","input_GFS_v16beta.nml"] \ No newline at end of file +suites = ["SCM_GFS_v15p2","SCM_GFS_v16"] +namelists = ["input_GFS_v15p2.nml","input_GFS_v16.nml"] \ No newline at end of file diff --git a/scm/src/default_namelists.py b/scm/src/default_namelists.py index b914cd8f0..8b02ed14b 100644 --- a/scm/src/default_namelists.py +++ b/scm/src/default_namelists.py @@ -1,11 +1,11 @@ default_physics_namelists = {"SCM_csawmg":"input_csawmg.nml", "SCM_GSD_v1":"input_GSD_v1.nml", "SCM_GFS_v15p2":"input_GFS_v15p2.nml", - "SCM_GFS_v16beta":"input_GFS_v16beta.nml", + "SCM_GFS_v16":"input_GFS_v16.nml", "SCM_GFS_v15p2_no_nsst":"input_GFS_v15p2.nml", - "SCM_GFS_v16beta_no_nsst":"input_GFS_v16beta.nml", + "SCM_GFS_v16_no_nsst":"input_GFS_v16.nml", "SCM_GFS_v15p2_RRTMGP":"input_GFS_v15p2_RRTMGP.nml", - "SCM_GFS_v16beta_RRTMGP":"input_GFS_v16beta_RRTMGP.nml", + "SCM_GFS_v16_RRTMGP":"input_GFS_v16_RRTMGP.nml", "SCM_GFS_v15p2_noahmp":"input_GFS_v15p2_noahmp.nml", "SCM_GFS_v15p2_MYJ":"input_GFS_v15p2_MYJ.nml", "SCM_GFS_v15p2_FA":"input_GFS_v15p2_FA.nml", diff --git a/scm/src/default_tracers.py b/scm/src/default_tracers.py index 0e2f4ceb3..fae26b82f 100644 --- a/scm/src/default_tracers.py +++ b/scm/src/default_tracers.py @@ -1,10 +1,10 @@ default_tracers = {"SCM_GFS_v15p2":"tracers_GFS_v15p2.txt", - "SCM_GFS_v16beta":"tracers_GFS_v16beta.txt", + "SCM_GFS_v16":"tracers_GFS_v16.txt", "SCM_GFS_v15p2_RRTMGP":"tracers_GFS_v15p2.txt", - "SCM_GFS_v16beta_RRTMGP":"tracers_GFS_v16beta.txt", + "SCM_GFS_v16_RRTMGP":"tracers_GFS_v16.txt", "SCM_csawmg":"tracers_csawmg.txt", "SCM_GFS_v15p2_no_nsst":"tracers_GFS_v15p2.txt", - "SCM_GFS_v16beta_no_nsst":"tracers_GFS_v16beta.txt", + "SCM_GFS_v16_no_nsst":"tracers_GFS_v16.txt", "SCM_GFS_v15p2_noahmp":"tracers_GFS_v15p2.txt", "SCM_GFS_v15p2_MYJ":"tracers_GFS_v15p2.txt", "SCM_GSD_v1":"tracers_gsd.txt", diff --git a/scm/src/example_multi_run.py b/scm/src/example_multi_run.py index b2746af1f..82c6364b3 100644 --- a/scm/src/example_multi_run.py +++ b/scm/src/example_multi_run.py @@ -1,3 +1,3 @@ cases = ["bomex"] -suites = ["SCM_GFS_v15p2","SCM_GFS_v16beta"] -namelists = ["input_GFS_v15p2.nml","input_GFS_v16beta.nml"] \ No newline at end of file +suites = ["SCM_GFS_v15p2","SCM_GFS_v16"] +namelists = ["input_GFS_v15p2.nml","input_GFS_v16.nml"] \ No newline at end of file diff --git a/scm/src/supported_suites.py b/scm/src/supported_suites.py index 2a1ed3ebd..4f51b5f80 100644 --- a/scm/src/supported_suites.py +++ b/scm/src/supported_suites.py @@ -1 +1 @@ -suites = ["SCM_GFS_v15p2","SCM_GFS_v16beta","SCM_csawmg","SCM_GSD_v1","SCM_RRFS_v1beta"] \ No newline at end of file +suites = ["SCM_GFS_v15p2","SCM_GFS_v16","SCM_csawmg","SCM_GSD_v1","SCM_RRFS_v1beta"] \ No newline at end of file