From f905bee1f4c4743964ff63c5522b355d8421258a Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 26 Jan 2021 20:44:22 -0700 Subject: [PATCH 1/5] implement timestep_init phases and catch up with master of ccpp-physics --- ccpp/config/ccpp_prebuild_config.py | 18 +- ccpp/suites/suite_SCM_GSD_v1.xml | 3 - scm/src/GFS_typedefs.F90 | 354 ++++++++++++++------------ scm/src/GFS_typedefs.meta | 181 ++++++++----- scm/src/gmtb_scm.F90 | 41 ++- scm/src/gmtb_scm_time_integration.F90 | 39 ++- scm/src/gmtb_scm_type_defs.F90 | 44 ++-- 7 files changed, 427 insertions(+), 253 deletions(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index 1128d1b52..de54de129 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -17,6 +17,8 @@ # actual variable definition files 'ccpp/physics/physics/machine.F', 'ccpp/physics/physics/radsw_param.f', + 'ccpp/physics/physics/h2o_def.f', + 'ccpp/physics/physics/ozne_def.f', 'ccpp/physics/physics/radlw_param.f', 'scm/src/GFS_typedefs.F90', 'scm/src/gmtb_scm_kinds.F90', @@ -158,7 +160,6 @@ 'ccpp/physics/physics/ozphys_2015.f' , 'ccpp/physics/physics/precpd.f' , 'ccpp/physics/physics/phys_tend.F90' , - 'ccpp/physics/physics/tracer_sanitizer.F90' , 'ccpp/physics/physics/radlw_main.F90' , 'ccpp/physics/physics/radsw_main.F90' , 'ccpp/physics/physics/rascnv.F90' , @@ -170,7 +171,6 @@ 'ccpp/physics/physics/sfc_diag.f' , 'ccpp/physics/physics/sfc_diag_post.F90' , 'ccpp/physics/physics/sfc_drv_ruc.F90' , - 'ccpp/physics/physics/lsm_ruc_sfc_sice_interstitial.F90', 'ccpp/physics/physics/sfc_cice.f' , 'ccpp/physics/physics/sfc_diff.f' , 'ccpp/physics/physics/sfc_drv.f' , @@ -215,19 +215,29 @@ TYPEDEFS_MAKEFILE = 'ccpp/physics/CCPP_TYPEDEFS.mk' TYPEDEFS_CMAKEFILE = 'ccpp/physics/CCPP_TYPEDEFS.cmake' TYPEDEFS_SOURCEFILE = 'ccpp/physics/CCPP_TYPEDEFS.sh' +#TYPEDEFS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.mk' +#TYPEDEFS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.cmake' +#TYPEDEFS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.sh' # Auto-generated makefile/cmakefile snippets that contain all schemes SCHEMES_MAKEFILE = 'ccpp/physics/CCPP_SCHEMES.mk' SCHEMES_CMAKEFILE = 'ccpp/physics/CCPP_SCHEMES.cmake' SCHEMES_SOURCEFILE = 'ccpp/physics/CCPP_SCHEMES.sh' +#SCHEMES_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.mk' +#SCHEMES_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.cmake' +#SCHEMES_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.sh' # Auto-generated makefile/cmakefile snippets that contain all caps CAPS_MAKEFILE = 'ccpp/physics/CCPP_CAPS.mk' CAPS_CMAKEFILE = 'ccpp/physics/CCPP_CAPS.cmake' CAPS_SOURCEFILE = 'ccpp/physics/CCPP_CAPS.sh' +#CAPS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.mk' +#CAPS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.cmake' +#CAPS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.sh' # Directory where to put all auto-generated physics caps CAPS_DIR = 'ccpp/physics/physics' +#CAPS_DIR = '{build_dir}/ccpp/physics/physics' # Directory where the suite definition files are stored SUITES_DIR = 'ccpp/suites' @@ -297,7 +307,7 @@ 'rrtmgp_sw_rte_run' : [ 'components_of_surface_downward_shortwave_fluxes', ], - }, + }, 'GFS_rrtmgp_sw_post' : { 'GFS_rrtmgp_sw_post_run' : [ 'tendency_of_air_temperature_due_to_shortwave_heating_assuming_clear_sky_on_radiation_time_step', @@ -325,4 +335,4 @@ HTML_VARTABLE_FILE = 'ccpp/physics/CCPP_VARIABLES_SCM.html' # LaTeX document containing the provided vs requested CCPP variables -LATEX_VARTABLE_FILE = 'ccpp/framework/doc/DevelopersGuide/CCPP_VARIABLES_SCM.tex' \ No newline at end of file +LATEX_VARTABLE_FILE = 'ccpp/framework/doc/DevelopersGuide/CCPP_VARIABLES_SCM.tex' diff --git a/ccpp/suites/suite_SCM_GSD_v1.xml b/ccpp/suites/suite_SCM_GSD_v1.xml index 27a5b124d..663e1d64d 100644 --- a/ccpp/suites/suite_SCM_GSD_v1.xml +++ b/ccpp/suites/suite_SCM_GSD_v1.xml @@ -45,9 +45,6 @@ sfc_nst sfc_nst_post lsm_ruc - lsm_ruc_sfc_sice_pre - sfc_sice - lsm_ruc_sfc_sice_post GFS_surface_loop_control_part2 diff --git a/scm/src/GFS_typedefs.F90 b/scm/src/GFS_typedefs.F90 index cfe78c59c..c40301529 100644 --- a/scm/src/GFS_typedefs.F90 +++ b/scm/src/GFS_typedefs.F90 @@ -5,12 +5,14 @@ module GFS_typedefs use machine, only: kind_phys use module_radsw_parameters, only: topfsw_type, sfcfsw_type, profsw_type, cmpfsw_type, NBDSW use module_radlw_parameters, only: topflw_type, sfcflw_type, proflw_type, NBDLW + use ozne_def, only: levozp, oz_coeff + use h2o_def, only: levh2o, h2o_coeff use mo_gas_optics_rrtmgp, only: ty_gas_optics_rrtmgp use mo_optical_props, only: ty_optical_props_1scl,ty_optical_props_2str use mo_cloud_optics, only: ty_cloud_optics use mo_gas_concentrations, only: ty_gas_concs use mo_source_functions, only: ty_source_func_lw - + implicit none ! To ensure that these values match what's in the physics, @@ -30,11 +32,12 @@ module GFS_typedefs ! from aerclm_def integer, parameter :: ntrcaerm = 15 - ! These will be set later in GFS_Control%initialize, - ! since they depend on the runtime config (e.g. Model%ntoz, Model%h2o_phys, Model%aero_in) - private :: levozp, oz_coeff, levh2o, h2o_coeff, ntrcaer - integer :: levozp, oz_coeff, levh2o, h2o_coeff, ntrcaer - + ! This will be set later in GFS_Control%initialize, since + ! it depends on the runtime config (Model%aero_in) + private :: ntrcaer + integer :: ntrcaer + + ! If these are changed to >99, need to adjust formatting string in GFS_diagnostics.F90 (and names in diag_tables) integer, parameter :: naux2dmax = 20 !< maximum number of auxiliary 2d arrays in output (for debugging) integer, parameter :: naux3dmax = 20 !< maximum number of auxiliary 3d arrays in output (for debugging) @@ -55,6 +58,7 @@ module GFS_typedefs real(kind=kind_phys), parameter :: cn_100 = 100._kind_phys real(kind=kind_phys), parameter :: cn_th = 1000._kind_phys real(kind=kind_phys), parameter :: cn_hr = 3600._kind_phys + ! optional extra top layer on top of low ceiling models ! this parameter was originally defined in the radiation driver ! (and is still for standard non-CCPP builds), but is required @@ -229,7 +233,8 @@ module GFS_typedefs real (kind=kind_phys), pointer :: semisbase(:) => null() !< background surface emissivity !--- In (radiation only) - real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction + real (kind=kind_phys), pointer :: sncovr (:) => null() !< snow cover in fraction over land + real (kind=kind_phys), pointer :: sncovr_ice (:) => null() !< snow cover in fraction over ice (RUC LSM only) real (kind=kind_phys), pointer :: snoalb (:) => null() !< maximum snow albedo in fraction real (kind=kind_phys), pointer :: alvsf (:) => null() !< mean vis albedo with strong cosz dependency real (kind=kind_phys), pointer :: alnsf (:) => null() !< mean nir albedo with strong cosz dependency @@ -256,7 +261,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: spec_lh_flux (:) => null() !< specified kinematic surface latent heat flux !-- In/Out - real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter hli 09/2017 + real (kind=kind_phys), pointer :: conv_act(:) => null() !< convective activity counter for Grell-Freitas real (kind=kind_phys), pointer :: hice (:) => null() !< sea ice thickness real (kind=kind_phys), pointer :: weasd (:) => null() !< water equiv of accumulated snow depth (kg/m**2) !< over land and sea ice @@ -336,20 +341,22 @@ module GFS_typedefs real (kind=kind_phys), pointer :: qrain (:) => null() !< nst_fld%qrain sensible heat flux due to rainfall (watts) ! Soil properties for RUC LSM (number of levels different from NOAH 4-layer model) - real (kind=kind_phys), pointer :: wetness(:) => null() !< normalized soil wetness for lsm - real (kind=kind_phys), pointer :: sh2o(:,:) => null() !< volume fraction of unfrozen soil moisture for lsm - real (kind=kind_phys), pointer :: keepsmfr(:,:) => null() !< RUC LSM: frozen moisture in soil - real (kind=kind_phys), pointer :: smois(:,:) => null() !< volumetric fraction of soil moisture for lsm - real (kind=kind_phys), pointer :: tslb(:,:) => null() !< soil temperature for land surface model - real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics + real (kind=kind_phys), pointer :: wetness(:) => null() !< normalized soil wetness for lsm + real (kind=kind_phys), pointer :: sh2o(:,:) => null() !< volume fraction of unfrozen soil moisture for lsm + real (kind=kind_phys), pointer :: keepsmfr(:,:) => null() !< RUC LSM: frozen moisture in soil + real (kind=kind_phys), pointer :: smois(:,:) => null() !< volumetric fraction of soil moisture for lsm + real (kind=kind_phys), pointer :: tslb(:,:) => null() !< soil temperature for land surface model + real (kind=kind_phys), pointer :: flag_frsoil(:,:) => null() !< RUC LSM: flag for frozen soil physics ! - real (kind=kind_phys), pointer :: clw_surf(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface - real (kind=kind_phys), pointer :: qwv_surf(:) => null() !< RUC LSM: water vapor mixing ratio at surface - real (kind=kind_phys), pointer :: cndm_surf(:) => null() !< RUC LSM: surface condensation mass - real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation - real (kind=kind_phys), pointer :: tsnow(:) => null() !< RUC LSM: snow temperature at the bottom of the first soil layer - real (kind=kind_phys), pointer :: snowfallac(:) => null() !< ruc lsm diagnostics - real (kind=kind_phys), pointer :: acsnow(:) => null() !< ruc lsm diagnostics + real (kind=kind_phys), pointer :: clw_surf_land(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over land + real (kind=kind_phys), pointer :: clw_surf_ice(:) => null() !< RUC LSM: moist cloud water mixing ratio at surface over ice + real (kind=kind_phys), pointer :: qwv_surf_land(:) => null() !< RUC LSM: water vapor mixing ratio at surface over land + real (kind=kind_phys), pointer :: qwv_surf_ice(:) => null() !< RUC LSM: water vapor mixing ratio at surface over ice + real (kind=kind_phys), pointer :: rhofr(:) => null() !< RUC LSM: density of frozen precipitation + real (kind=kind_phys), pointer :: tsnow_land(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over land + real (kind=kind_phys), pointer :: tsnow_ice(:) => null() !< RUC LSM: snow temperature at the bottom of the first snow layer over ice + real (kind=kind_phys), pointer :: snowfallac_land(:) => null() !< ruc lsm diagnostics over land + real (kind=kind_phys), pointer :: snowfallac_ice(:) => null() !< ruc lsm diagnostics over ice ! MYNN surface layer real (kind=kind_phys), pointer :: ustm (:) => null() !u* including drag @@ -361,7 +368,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: chs2(:) => null() !exch coeff for heat at 2m real (kind=kind_phys), pointer :: cqs2(:) => null() !exch coeff for moisture at 2m real (kind=kind_phys), pointer :: lh(:) => null() !latent heating at the surface - + !---- precipitation amounts from previous time step for RUC LSM/NoahMP LSM real (kind=kind_phys), pointer :: raincprv (:) => null() !< explicit rainfall from previous timestep real (kind=kind_phys), pointer :: rainncprv (:) => null() !< convective_precipitation_amount from previous timestep @@ -526,8 +533,8 @@ module GFS_typedefs integer :: nlunit !< unit for namelist character(len=64) :: fn_nml !< namelist filename for surface data cycling character(len=256), pointer :: input_nml_file(:) !< character string containing full namelist - !< for use with internal file reads - integer :: input_nml_file_length + !< for use with internal file reads + integer :: input_nml_file_length !< length (number of lines) in namelist for internal reads integer :: logunit real(kind=kind_phys) :: fhzero !< hours between clearing of diagnostic buckets logical :: ldiag3d !< flag for 3d diagnostic fields @@ -553,11 +560,11 @@ module GFS_typedefs integer :: nx !< number of points in the i-dir for this MPI-domain integer :: ny !< number of points in the j-dir for this MPI-domain integer :: levs !< number of vertical levels - integer :: levsp1 !< number of vertical levels plus one - integer :: levsm1 !< number of vertical levels minus one !--- ak/bk for pressure level calculations real(kind=kind_phys), pointer :: ak(:) !< from surface (k=1) to TOA (k=levs) real(kind=kind_phys), pointer :: bk(:) !< from surface (k=1) to TOA (k=levs) + integer :: levsp1 !< number of vertical levels plus one + integer :: levsm1 !< number of vertical levels minus one integer :: cnx !< number of points in the i-dir for this cubed-sphere face integer :: cny !< number of points in the j-dir for this cubed-sphere face integer :: lonr !< number of global points in x-dir (i) along the equator @@ -636,16 +643,17 @@ module GFS_typedefs !< =1 => sub-grid cloud with prescribed seeds !< =2 => sub-grid cloud with randomly generated !< seeds - integer :: idcor !< Decorrelation length type for overlap assumption - !< =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) + integer :: idcor !< Decorrelation length type for overlap assumption + !< =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) logical :: crick_proof !< CRICK-Proof cloud water 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) + ! RRTMGP logical :: do_RRTMGP !< Use RRTMGP character(len=128) :: active_gases !< Character list of active gases used in RRTMGP @@ -659,17 +667,18 @@ module GFS_typedefs character(len=128) :: sw_file_clouds !< RRTMGP file containing coefficients used to compute clouds optical properties integer :: rrtmgp_nBandsSW !< Number of RRTMGP SW bands. integer :: rrtmgp_nGptsSW !< Number of RRTMGP SW spectral points. - logical :: doG_cldoptics !< Use legacy RRTMG cloud-optics? - logical :: doGP_cldoptics_PADE !< Use RRTMGP cloud-optics: PADE approximation? - logical :: doGP_cldoptics_LUT !< Use RRTMGP cloud-optics: LUTs? + logical :: doG_cldoptics !< Use legacy RRTMG cloud-optics? + logical :: doGP_cldoptics_PADE !< Use RRTMGP cloud-optics: PADE approximation? + logical :: doGP_cldoptics_LUT !< Use RRTMGP cloud-optics: LUTs? integer :: rrtmgp_nrghice !< Number of ice-roughness categories integer :: rrtmgp_nGauss_ang !< Number of angles used in Gaussian quadrature logical :: do_GPsw_Glw !< If set to true use rrtmgp for SW calculation, rrtmg for LW. character(len=128) :: active_gases_array(100) !< character array for each trace gas name logical :: use_LW_jacobian !< If true, use Jacobian of LW to update radiation tendency. logical :: doGP_lwscat !< If true, include scattering in longwave cloud-optics, only compatible w/ GP cloud-optics + !--- microphysical switch - integer :: ncld !< choice of cloud scheme + integer :: ncld !< choice of cloud scheme !--- new microphysical switch integer :: imp_physics !< choice of microphysics scheme integer :: imp_physics_gfdl = 11 !< choice of GFDL microphysics scheme @@ -760,11 +769,13 @@ module GFS_typedefs integer :: isot !< isot = 0 => Zobler soil type ( 9 category) !< isot = 1 => STATSGO soil type (19 category, AKA 'STAS'(?)) !< isot = 2 => STAS-RUC soil type (19 category, NOAH WRFv4 only) - integer :: kice=2 !< number of layers in sice + integer :: kice !< number of layers in sice 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 - real(kind=kind_phys), pointer :: zs(:) => null() !< depth of soil levels for land surface model + real(kind=kind_phys), pointer :: zs(:) => null() !< depth 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) logical :: ua_phys !< flag for using University of Arizona? extension to NOAH LSM WRFv4 logical :: usemonalb !< flag to read surface diffused shortwave albedo from input file for NOAH LSM WRFv4 @@ -776,8 +787,8 @@ module GFS_typedefs integer :: iopt_thcnd !< option to treat thermal conductivity in Noah LSM (new in 3.8) !< = 1, original (default) !< = 2, McCumber and Pielke for silt loam and sandy loam - ! -- the Noah MP options + ! -- the Noah MP options integer :: iopt_dveg ! 1-> off table lai 2-> on 3-> off;4->off;5 -> on integer :: iopt_crs !canopy stomatal resistance (1-> ball-berry; 2->jarvis) integer :: iopt_btr !soil moisture factor for stomatal resistance (1-> noah; 2-> clm; 3-> ssib) @@ -798,7 +809,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 @@ -851,8 +862,9 @@ module GFS_typedefs logical :: dspheat !< flag for tke dissipative heating logical :: hurr_pbl !< flag for hurricane-specific options in PBL scheme logical :: lheatstrg !< flag for canopy heat storage parameterization - logical :: cnvcld + logical :: cnvcld logical :: random_clds !< flag controls whether clouds are random + logical :: shal_cnv !< flag for calling shallow convection logical :: do_deep !< whether to do deep convection integer :: imfshalcnv !< flag for mass-flux shallow convection scheme @@ -885,6 +897,7 @@ module GFS_typedefs !< 1: updated version of satmedmf (as of May 2019) integer :: isatmedmf_vdif = 0 !< flag for initial version of satmedmf (Nov. 2018) integer :: isatmedmf_vdifq = 1 !< flag for updated version of satmedmf (as of May 2019) + integer :: nmtvr !< number of topographic variables such as variance etc !< used in the GWD parameterization - 10 more added if !< GSL orographic drag scheme is used @@ -909,6 +922,7 @@ module GFS_typedefs integer :: seed0 !< random seed for radiation real(kind=kind_phys) :: rbcr !< Critical Richardson Number in the PBL scheme + !--- MYNN parameters/switches logical :: do_mynnedmf logical :: do_mynnsfclay @@ -1041,6 +1055,8 @@ module GFS_typedefs integer :: skeb_npass integer :: lndp_type integer :: n_var_lndp + 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 @@ -1102,9 +1118,10 @@ module GFS_typedefs integer :: nqvdelt !< the index of specific humidity at the previous timestep for Z-C MP in phy_f3d integer :: nps2delt !< the index of surface air pressure 2 timesteps back for Z-C MP in phy_f2d integer :: npsdelt !< the index of surface air pressure at the previous timestep for Z-C MP in phy_f2d + integer :: ncnvwind !< the index of surface wind enhancement due to convection for MYNN SFC and RAS CNV in phy f2d !--- debug flag - logical :: debug + logical :: debug logical :: pre_rad !< flag for testing purpose !--- variables modified at each time step @@ -1228,9 +1245,10 @@ module GFS_typedefs real (kind=kind_phys), pointer :: ccn_nm (:,:) => null() !< CCN number concentration real (kind=kind_phys), pointer :: aer_nm (:,:,:) => null() !< GOCART aerosol climo - !--- active when ((.not. newsas .or. cal_pre) .and. random_clds) 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 + + !--- active when ((.not. newsas .or. cal_pre) .and. random_clds) real (kind=kind_phys), pointer :: rann (:,:) => null() !< random number array (0-1) !--- In/Out @@ -1338,7 +1356,7 @@ module GFS_typedefs !--- Out (radiation only) real (kind=kind_phys), pointer :: htrsw (:,:) => null() !< swh total sky sw heating rate in k/sec real (kind=kind_phys), pointer :: htrlw (:,:) => null() !< hlw total sky lw heating rate in k/sec - real (kind=kind_phys), pointer :: sfalb (:) => null() !< mean surface diffused sw albedo + 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 @@ -1425,7 +1443,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: totsnwb(:) => null() !< accumulated snow precipitation in bucket (kg/m2) real (kind=kind_phys), pointer :: totgrpb(:) => null() !< accumulated graupel precipitation in bucket (kg/m2) - !--- MYNN variables + !--- MYNN variables real (kind=kind_phys), pointer :: edmf_a (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_w (:,:) => null() ! real (kind=kind_phys), pointer :: edmf_qt (:,:) => null() ! @@ -1523,8 +1541,8 @@ module GFS_typedefs 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 + 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 real (kind=kind_phys), pointer :: refl_10cm(:,:) => null() !< instantaneous refl_10cm @@ -1572,15 +1590,15 @@ module GFS_typedefs real (kind=kind_phys), pointer :: gwp_scheat(:,:) => null() ! instant shal-conv heat tendency real (kind=kind_phys), pointer :: gwp_dcheat(:,:) => null() ! instant deep-conv heat tendency - real (kind=kind_phys), pointer :: gwp_precip(:) => null() ! total precip rates - integer , pointer :: gwp_klevs(:,:)=> null() ! instant levels for GW-launches - real (kind=kind_phys), pointer :: gwp_fgf(:) => null() ! fgf triggers - real (kind=kind_phys), pointer :: gwp_okw(:) => null() ! okw triggers - - real (kind=kind_phys), pointer :: gwp_ax(:,:) => null() ! instant total UGWP tend m/s/s EW - real (kind=kind_phys), pointer :: gwp_ay(:,:) => null() ! instant total UGWP tend m/s/s NS - real (kind=kind_phys), pointer :: gwp_dtdt(:,:) => null() ! instant total heat tend K/s - real (kind=kind_phys), pointer :: gwp_kdis(:,:) => null() ! instant total eddy mixing m2/s + real (kind=kind_phys), pointer :: gwp_precip(:) => null() ! total precip rates + integer , pointer :: gwp_klevs(:,:) => null() ! instant levels for GW-launches + real (kind=kind_phys), pointer :: gwp_fgf(:) => null() ! fgf triggers + real (kind=kind_phys), pointer :: gwp_okw(:) => null() ! okw triggers + + real (kind=kind_phys), pointer :: gwp_ax(:,:) => null() ! instant total UGWP tend m/s/s EW + real (kind=kind_phys), pointer :: gwp_ay(:,:) => null() ! instant total UGWP tend m/s/s NS + real (kind=kind_phys), pointer :: gwp_dtdt(:,:) => null() ! instant total heat tend K/s + real (kind=kind_phys), pointer :: gwp_kdis(:,:) => null() ! instant total eddy mixing m2/s real (kind=kind_phys), pointer :: gwp_axc(:,:) => null() ! instant con-UGWP tend m/s/s EW real (kind=kind_phys), pointer :: gwp_ayc(:,:) => null() ! instant con-UGWP tend m/s/s NS real (kind=kind_phys), pointer :: gwp_axo(:,:) => null() ! instant oro-UGWP tend m/s/s EW @@ -1588,18 +1606,18 @@ module GFS_typedefs real (kind=kind_phys), pointer :: gwp_axf(:,:) => null() ! instant jet-UGWP tend m/s/s EW real (kind=kind_phys), pointer :: gwp_ayf(:,:) => null() ! instant jet-UGWP tend m/s/s NS - real (kind=kind_phys), pointer :: uav_ugwp(:,:) => null() ! aver wind UAV from physics - real (kind=kind_phys), pointer :: tav_ugwp(:,:) => null() ! aver temp UAV from physics - real (kind=kind_phys), pointer :: du3dt_dyn(:,:) => null() ! U Tend-dynamics "In"-"PhysOut" + real (kind=kind_phys), pointer :: uav_ugwp(:,:) => null() ! aver wind UAV from physics + real (kind=kind_phys), pointer :: tav_ugwp(:,:) => null() ! aver temp UAV from physics + real (kind=kind_phys), pointer :: du3dt_dyn(:,:) => null() ! U Tend-dynamics "In"-"PhysOut" !--- COODRE ORO diagnostics - real (kind=kind_phys), pointer :: zmtb(:) => null() ! - real (kind=kind_phys), pointer :: zogw(:) => null() ! - real (kind=kind_phys), pointer :: zlwb(:) => null() !! - real (kind=kind_phys), pointer :: tau_ogw(:) => null() !! - real (kind=kind_phys), pointer :: tau_ngw(:) => null() !! - real (kind=kind_phys), pointer :: tau_mtb(:) => null() ! - real (kind=kind_phys), pointer :: tau_tofd(:) => null() ! + real (kind=kind_phys), pointer :: zmtb(:) => null() ! + real (kind=kind_phys), pointer :: zogw(:) => null() ! + real (kind=kind_phys), pointer :: zlwb(:) => null() ! + real (kind=kind_phys), pointer :: tau_ogw(:) => null() ! + real (kind=kind_phys), pointer :: tau_ngw(:) => null() ! + real (kind=kind_phys), pointer :: tau_mtb(:) => null() ! + real (kind=kind_phys), pointer :: tau_tofd(:) => null() ! !---vay-2018 UGWP-diagnostics !--- Output diagnostics for coupled chemistry @@ -1768,8 +1786,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: graupelmp(:) => null() !< real (kind=kind_phys), pointer :: gwdcu(:,:) => null() !< real (kind=kind_phys), pointer :: gwdcv(:,:) => null() !< - integer :: h2o_coeff !< - real (kind=kind_phys), pointer :: h2o_pres(:) => null() !< + real (kind=kind_phys), pointer :: hefac(:) => null() !< real (kind=kind_phys), pointer :: hffac(:) => null() !< real (kind=kind_phys), pointer :: hflxq(:) => null() !< @@ -1803,8 +1820,6 @@ module GFS_typedefs integer, pointer :: ktop(:) => null() !< integer :: latidxprnt !< integer :: levi !< - integer :: levh2o !< - integer :: levozp !< integer :: lmk !< integer :: lmp !< integer, pointer :: mbota(:,:) => null() !< @@ -1837,9 +1852,7 @@ module GFS_typedefs real (kind=kind_phys), pointer :: oc(:) => null() !< real (kind=kind_phys), pointer :: olyr(:,:) => null() !< logical , pointer :: otspt(:,:) => null() !< - integer :: oz_coeff !< integer :: oz_coeffp5 !< - real (kind=kind_phys), pointer :: oz_pres(:) => null() !< logical :: phys_hydrostatic !< real (kind=kind_phys), pointer :: plvl(:,:) => null() !< real (kind=kind_phys), pointer :: plyr(:,:) => null() !< @@ -2288,6 +2301,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%hice (IM)) allocate (Sfcprop%weasd (IM)) allocate (Sfcprop%sncovr (IM)) + if (Model%lsm == Model%lsm_ruc) then + allocate (Sfcprop%sncovr_ice (IM)) + end if allocate (Sfcprop%canopy (IM)) allocate (Sfcprop%ffmm (IM)) allocate (Sfcprop%ffhh (IM)) @@ -2301,6 +2317,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) Sfcprop%hice = clear_val Sfcprop%weasd = clear_val Sfcprop%sncovr = clear_val + if (Model%lsm == Model%lsm_ruc) then + Sfcprop%sncovr_ice = clear_val + end if Sfcprop%canopy = clear_val Sfcprop%ffmm = clear_val Sfcprop%ffhh = clear_val @@ -2316,9 +2335,9 @@ subroutine sfcprop_create (Sfcprop, IM, Model) allocate (Sfcprop%th2m(IM)) allocate (Sfcprop%q2m (IM)) - Sfcprop%t2m = clear_val + Sfcprop%t2m = clear_val Sfcprop%th2m = clear_val - Sfcprop%q2m = clear_val + Sfcprop%q2m = clear_val if (Model%nstf_name(1) > 0) then allocate (Sfcprop%tref (IM)) @@ -2478,33 +2497,37 @@ subroutine sfcprop_create (Sfcprop, IM, Model) 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)) - allocate (Sfcprop%sh2o (IM,Model%lsoil_lsm)) - allocate (Sfcprop%keepsmfr (IM,Model%lsoil_lsm)) - allocate (Sfcprop%smois (IM,Model%lsoil_lsm)) - allocate (Sfcprop%tslb (IM,Model%lsoil_lsm)) - allocate (Sfcprop%flag_frsoil (IM,Model%lsoil_lsm)) - allocate (Sfcprop%clw_surf (IM)) - allocate (Sfcprop%qwv_surf (IM)) - allocate (Sfcprop%cndm_surf (IM)) - allocate (Sfcprop%rhofr (IM)) - allocate (Sfcprop%tsnow (IM)) - allocate (Sfcprop%snowfallac (IM)) - allocate (Sfcprop%acsnow (IM)) + allocate (Sfcprop%wetness (IM)) + allocate (Sfcprop%sh2o (IM,Model%lsoil_lsm)) + allocate (Sfcprop%keepsmfr (IM,Model%lsoil_lsm)) + allocate (Sfcprop%smois (IM,Model%lsoil_lsm)) + allocate (Sfcprop%tslb (IM,Model%lsoil_lsm)) + allocate (Sfcprop%flag_frsoil (IM,Model%lsoil_lsm)) + allocate (Sfcprop%clw_surf_land (IM)) + allocate (Sfcprop%clw_surf_ice (IM)) + allocate (Sfcprop%qwv_surf_land (IM)) + allocate (Sfcprop%qwv_surf_ice (IM)) + allocate (Sfcprop%rhofr (IM)) + allocate (Sfcprop%tsnow_land (IM)) + allocate (Sfcprop%tsnow_ice (IM)) + allocate (Sfcprop%snowfallac_land (IM)) + allocate (Sfcprop%snowfallac_ice (IM)) ! - Sfcprop%wetness = clear_val - Sfcprop%sh2o = clear_val - Sfcprop%keepsmfr = clear_val - Sfcprop%smois = clear_val - Sfcprop%tslb = clear_val - Sfcprop%clw_surf = clear_val - Sfcprop%qwv_surf = clear_val - Sfcprop%cndm_surf = clear_val - Sfcprop%flag_frsoil = clear_val - Sfcprop%rhofr = clear_val - Sfcprop%tsnow = clear_val - Sfcprop%snowfallac = clear_val - Sfcprop%acsnow = clear_val + Sfcprop%wetness = clear_val + Sfcprop%sh2o = clear_val + Sfcprop%keepsmfr = clear_val + Sfcprop%smois = clear_val + Sfcprop%tslb = clear_val + Sfcprop%clw_surf_land = clear_val + Sfcprop%clw_surf_ice = clear_val + Sfcprop%qwv_surf_land = clear_val + Sfcprop%qwv_surf_ice = clear_val + Sfcprop%flag_frsoil = clear_val + Sfcprop%rhofr = clear_val + Sfcprop%tsnow_land = clear_val + Sfcprop%tsnow_ice = clear_val + Sfcprop%snowfallac_land = clear_val + Sfcprop%snowfallac_ice = clear_val ! if (Model%rdlai) then allocate (Sfcprop%xlaixy (IM)) @@ -2809,16 +2832,15 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & cnx, cny, gnx, gny, dt_dycore, & dt_phys, iau_offset, idat, jdat, & tracer_names, & - input_nml_file, tile_num, blksz & - ,ak, bk, restart, hydrostatic, & - communicator, ntasks, nthreads & - ) + input_nml_file, tile_num, blksz, & + ak, bk, restart, hydrostatic, & + communicator, ntasks, nthreads) !--- modules use physcons, only: con_rerth, con_pi, con_p0, rhowater use mersenne_twister, only: random_setseed, random_number use parse_tracers, only: get_tracer_index - +! implicit none !--- interface variables @@ -2947,15 +2969,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & character(len=128) :: sw_file_clouds = '' !< RRTMGP file containing coefficients used to compute clouds optical properties integer :: rrtmgp_nBandsSW = 14 !< Number of RRTMGP SW bands. integer :: rrtmgp_nGptsSW = 224 !< Number of RRTMGP SW spectral points. - logical :: doG_cldoptics = .false. !< Use legacy RRTMG cloud-optics? + logical :: doG_cldoptics = .false. !< Use legacy RRTMG cloud-optics? logical :: doGP_cldoptics_PADE = .false. !< Use RRTMGP cloud-optics: PADE approximation? - logical :: doGP_cldoptics_LUT = .false. !< Use RRTMGP cloud-optics: LUTs? + 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 :: use_LW_jacobian = .false. !< Use Jacobian of LW to update LW radiation tendencies. + 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 integer :: ncld = 1 !< choice of cloud scheme integer :: imp_physics = 99 !< choice of cloud scheme @@ -3028,6 +3049,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & integer :: iopt_thcnd = 1 !< option to treat thermal conductivity in Noah LSM (new in 3.8) !< = 1, original (default) !< = 2, McCumber and Pielke for silt loam and sandy loam + integer :: kice = 2 !< number of layers in ice; default is 2 (GFS sice) integer :: ivegsrc = 2 !< ivegsrc = 0 => USGS, !< ivegsrc = 1 => IGBP (20 category) !< ivegsrc = 2 => UMD (13 category) @@ -3133,6 +3155,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !< 0: initial version of satmedmf (Nov. 2018) !< 1: updated version of satmedmf (as of May 2019) logical :: do_deep = .true. !< whether to do deep convection + logical :: hwrf_samfdeep = .false. !< flag for HWRF SAMF deepcnv scheme logical :: hwrf_samfshal = .false. !< flag for HWRF SAMF shalcnv scheme logical :: do_mynnedmf = .false. !< flag for MYNN-EDMF @@ -3302,8 +3325,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & logical :: do_shum = .false. logical :: do_skeb = .false. integer :: skeb_npass = 11 - integer :: lndp_type = 0 - integer :: n_var_lndp = 0 + integer :: lndp_type = 0 + integer :: n_var_lndp = 0 + logical :: lndp_each_step = .false. !--- aerosol scavenging factors character(len=20) :: fscav_aero(20) = 'default' @@ -3345,7 +3369,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- max hourly avg_max_length, & !--- land/surface model control - lsm, lsoil, lsoil_lsm, lsnow_lsm, rdlai, & + lsm, lsoil, lsoil_lsm, lsnow_lsm, kice, rdlai, & nmtvr, ivegsrc, use_ufo, iopt_thcnd, ua_phys, usemonalb, & aoasis, fasdas, & ! Noah MP options @@ -3375,7 +3399,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & do_deep, jcap, & cs_parm, flgmin, cgwf, ccwf, cdmbgwd, sup, ctei_rm, crtrh, & dlqf, rbcr, shoc_parm, psauras, prauras, wminras, & - do_sppt, do_shum, do_skeb, lndp_type, n_var_lndp, & + do_sppt, do_shum, do_skeb, & + lndp_type, n_var_lndp, lndp_each_step, & !--- Rayleigh friction prslrd0, ral_ts, ldiag_ugwp, do_ugwp, do_tofd, & ! --- Ferrier-Aligo @@ -3629,12 +3654,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if (Model%me == Model%master .and. nhfrad>0) & write(*,'(a,i0)') 'Number of high-frequency radiation calls for coldstart run: ', nhfrad endif + if (levr < 0) then Model%levr = levs else Model%levr = levr endif Model%levrp1 = Model%levr + 1 + Model%nfxr = nfxr Model%iccn = iccn ! further down: set Model%iccn to .false. @@ -3669,7 +3696,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%ccnorm = ccnorm Model%lwhtr = lwhtr Model%swhtr = swhtr - ! RRTMGP + + ! RRTMGP Model%do_RRTMGP = do_RRTMGP Model%rrtmgp_nrghice = rrtmgp_nrghice Model%rrtmgp_nGauss_ang = rrtmgp_nGauss_ang @@ -3762,9 +3790,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- F-A MP parameters Model%rhgrd = rhgrd Model%spec_adv = spec_adv - Model%icloud = icloud + Model%icloud = icloud -!--- gfdl MP parameters +!--- GFDL MP parameters Model%lgfdlmprad = lgfdlmprad !--- Thompson,GFDL MP parameter Model%lrefres = lrefres @@ -3772,6 +3800,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- land/surface model parameters Model%lsm = lsm Model%lsoil = lsoil + ! Consistency check for HWRF Noah LSM if (Model%lsm == Model%lsm_noah_wrfv4 .and. Model%nscyc>0) then write(0,*) 'Logic error: NOAH WRFv4 LSM cannot be used with surface data cycling at this point (fhcyc>0)' @@ -3794,6 +3823,14 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & allocate (Model%zs(Model%lsoil_lsm)) Model%zs = clear_val end if + ! Set number of ice model layers + Model%kice = kice + + ! Allocate variable for min/max soil moisture for a given soil type + allocate (Model%pores(30)) + allocate (Model%resid(30)) + 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)' @@ -3875,6 +3912,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%oz_phys = oz_phys Model%oz_phys_2015 = oz_phys_2015 Model%h2o_phys = h2o_phys + ! To ensure that these values match what's in the physics, ! array sizes are compared during model init in GFS_phys_time_vary_init() ! @@ -3886,6 +3924,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & levh2o = 1 h2o_coeff = 1 end if + Model%pdfcld = pdfcld Model%shcnvcw = shcnvcw Model%redrag = redrag @@ -3919,8 +3958,8 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%wminras = wminras Model%rbcr = rbcr Model%do_gwd = maxval(Model%cdmbgwd) > 0.0 - Model%do_cnvgwd = Model%cnvgwd .and. maxval(Model%cdmbgwd(3:4)) == 0.0 + Model%do_mynnedmf = do_mynnedmf Model%do_mynnsfclay = do_mynnsfclay Model%bl_mynn_cloudpdf = bl_mynn_cloudpdf @@ -4018,6 +4057,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%do_skeb = do_skeb Model%lndp_type = lndp_type Model%n_var_lndp = n_var_lndp + Model%lndp_each_step = lndp_each_step !--- cellular automata options Model%nca = nca @@ -4051,11 +4091,11 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & Model%iau_drymassfixer = iau_drymassfixer if(Model%me==0) print *,' model init,iaufhrs=',Model%iaufhrs - !--- debug flag +!--- debug flag Model%debug = debug Model%pre_rad = pre_rad - !--- tracer handling +!--- tracer handling Model%ntrac = size(tracer_names) Model%ntracp1 = Model%ntrac + 1 allocate (Model%tracer_names(Model%ntrac)) @@ -4156,7 +4196,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & stop else levozp = 1 - oz_coeff = 0 + oz_coeff = 1 end if end if @@ -4199,7 +4239,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- BEGIN CODE FROM GFS_PHYSICS_INITIALIZE !--- define physcons module variables - tem = con_rerth*con_rerth*(con_pi+con_pi)*con_pi + tem = con_rerth*con_rerth*(con_pi+con_pi)*con_pi Model%dxmax = log(tem/(max_lon*max_lat)) Model%dxmin = log(tem/(min_lon*min_lat)) Model%dxinv = 1.0d0 / (Model%dxmax-Model%dxmin) @@ -4226,6 +4266,10 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & !--- BEGIN CODE FROM COMPNS_PHYSICS !--- shoc scheme 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 + endif Model%nshoc_3d = 3 Model%nshoc_2d = 0 Model%shal_cnv = .false. @@ -4339,6 +4383,7 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & write(0,*) "Logic error: if NTDK deep convection is used, must also use NTDK shallow convection (and vice versa)" stop end if + if (.not. Model%cscnv) then if (Model%ras) then print *,' RAS Convection scheme used with ccwf=',Model%ccwf @@ -4596,6 +4641,9 @@ subroutine control_initialize (Model, nlunit, fn_nml, me, master, & if(Model%do_shoc .or. Model%pdfcld .or. Model%do_mynnedmf) Model%cnvcld = .false. if(Model%cnvcld) Model%ncnvcld3d = 1 +!--- get cnvwind index in phy_f2d; last entry in phy_f2d array + Model%ncnvwind = Model%num_p2d + !--- get cnvw and cnvc indices in phy_f3d Model%ncnvw = -999 Model%ncnvc = -999 @@ -4859,6 +4907,9 @@ subroutine control_print(Model) print *, ' usemonalb : ', Model%usemonalb print *, ' aoasis : ', Model%aoasis print *, ' fasdas : ', Model%fasdas + print *, ' kice : ', Model%kice + print *, ' shape(pores) : ', shape(Model%pores) + print *, ' shape(resid) : ', shape(Model%resid) print *, ' ivegsrc : ', Model%ivegsrc print *, ' isot : ', Model%isot @@ -4910,6 +4961,8 @@ subroutine control_print(Model) print *, ' shocaftcnv : ', Model%shocaftcnv print *, ' shoc_cld : ', Model%shoc_cld print *, ' uni_cld : ', Model%uni_cld + print *, ' oz_phys : ', Model%oz_phys + print *, ' oz_phys_2015 : ', Model%oz_phys_2015 print *, ' h2o_phys : ', Model%h2o_phys print *, ' pdfcld : ', Model%pdfcld print *, ' shcnvcw : ', Model%shcnvcw @@ -5012,7 +5065,8 @@ subroutine control_print(Model) print *, ' do_shum : ', Model%do_shum print *, ' do_skeb : ', Model%do_skeb print *, ' lndp_type : ', Model%lndp_type - print *, ' n_var_lndp : ', Model%n_var_lndp + print *, ' n_var_lndp : ', Model%n_var_lndp + print *, ' lndp_each_step : ', Model%lndp_each_step print *, ' ' print *, 'cellular automata' print *, ' nca : ', Model%nca @@ -5308,16 +5362,16 @@ subroutine tbd_create (Tbd, IM, Model) if (Model%do_myjsfc.or.Model%do_myjpbl) then !print*,"Allocating all MYJ surface variables:" allocate (Tbd%phy_myj_qsfc (IM)) - allocate (Tbd%phy_myj_thz0 (IM)) - allocate (Tbd%phy_myj_qz0 (IM)) - allocate (Tbd%phy_myj_uz0 (IM)) - allocate (Tbd%phy_myj_vz0 (IM)) - allocate (Tbd%phy_myj_akhs (IM)) - allocate (Tbd%phy_myj_akms (IM)) - allocate (Tbd%phy_myj_chkqlm (IM)) - allocate (Tbd%phy_myj_elflx (IM)) - allocate (Tbd%phy_myj_a1u (IM)) - allocate (Tbd%phy_myj_a1t (IM)) + allocate (Tbd%phy_myj_thz0 (IM)) + allocate (Tbd%phy_myj_qz0 (IM)) + allocate (Tbd%phy_myj_uz0 (IM)) + allocate (Tbd%phy_myj_vz0 (IM)) + allocate (Tbd%phy_myj_akhs (IM)) + allocate (Tbd%phy_myj_akms (IM)) + allocate (Tbd%phy_myj_chkqlm (IM)) + allocate (Tbd%phy_myj_elflx (IM)) + allocate (Tbd%phy_myj_a1u (IM)) + allocate (Tbd%phy_myj_a1t (IM)) allocate (Tbd%phy_myj_a1q (IM)) !print*,"Allocating all MYJ schemes variables:" Tbd%phy_myj_qsfc = clear_val @@ -5522,7 +5576,7 @@ subroutine diag_create (Diag, IM, Model) ! F-A MP scheme if (Model%imp_physics == Model%imp_physics_fer_hires) then - allocate (Diag%TRAIN (IM,Model%levs)) + allocate (Diag%train (IM,Model%levs)) end if allocate (Diag%cldfra (IM,Model%levs)) @@ -5530,8 +5584,8 @@ subroutine diag_create (Diag, IM, Model) allocate (Diag%ca_deep (IM)) allocate (Diag%ca_turb (IM)) allocate (Diag%ca_shal (IM)) - allocate (Diag%ca_rad (IM)) - allocate (Diag%ca_micro (IM)) + allocate (Diag%ca_rad (IM)) + allocate (Diag%ca_micro (IM)) !--- 3D diagnostics if (Model%ldiag3d) then @@ -5836,17 +5890,17 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%zmtnblck = zero if (Model%imp_physics == Model%imp_physics_fer_hires) then - Diag%TRAIN = zero + Diag%train = zero end if Diag%cldfra = zero - + Diag%totprcpb = zero Diag%cnvprcpb = zero Diag%toticeb = zero Diag%totsnwb = zero Diag%totgrpb = zero -! -!--- MYNN variables: + + !--- MYNN variables: if (Model%do_mynnedmf) then if (Model%bl_mynn_output .ne. 0) then Diag%edmf_a = clear_val @@ -5866,7 +5920,7 @@ subroutine diag_phys_zero (Diag, Model, linit, iauwindow_center) Diag%exch_h = clear_val Diag%exch_m = clear_val endif -! + if (Model%do_ca) then Diag%ca1 = zero Diag%ca2 = zero @@ -6017,6 +6071,7 @@ subroutine diag_chem_init(Diag, IM, Model) ! -- get number of tracers with enabled diagnostics n = count(Model%ntdiag) Diag%ntchmdiag = n + ! -- initialize sedimentation allocate (Diag%sedim(IM,n)) Diag%sedim = zero @@ -6205,7 +6260,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%gflx_ocean (IM)) allocate (Interstitial%gwdcu (IM,Model%levs)) allocate (Interstitial%gwdcv (IM,Model%levs)) - allocate (Interstitial%h2o_pres (levh2o)) allocate (Interstitial%hefac (IM)) allocate (Interstitial%hffac (IM)) allocate (Interstitial%hflxq (IM)) @@ -6234,7 +6288,6 @@ subroutine interstitial_create (Interstitial, IM, Model) allocate (Interstitial%oa4 (IM,4)) allocate (Interstitial%oc (IM)) allocate (Interstitial%olyr (IM,Model%levr+LTP)) - allocate (Interstitial%oz_pres (levozp)) allocate (Interstitial%plvl (IM,Model%levr+1+LTP)) allocate (Interstitial%plyr (IM,Model%levr+LTP)) allocate (Interstitial%prnum (IM,Model%levs)) @@ -6480,23 +6533,18 @@ subroutine interstitial_create (Interstitial, IM, Model) Interstitial%ipr = min(IM,10) Interstitial%latidxprnt = 1 Interstitial%levi = Model%levs+1 - Interstitial%levh2o = levh2o - Interstitial%levozp = levozp Interstitial%lmk = Model%levr+LTP Interstitial%lmp = Model%levr+1+LTP - Interstitial%h2o_coeff = h2o_coeff Interstitial%nbdlw = NBDLW Interstitial%nbdsw = NBDSW Interstitial%nf_aelw = NF_AELW Interstitial%nf_aesw = NF_AESW Interstitial%nspc1 = NSPC1 - Interstitial%oz_coeff = oz_coeff - Interstitial%oz_coeffp5 = oz_coeff+5 - ! h2o_pres and oz_pres do not change during the run, but - ! need to be set later in GFS_phys_time_vary_init (after - ! h2o_pres/oz_pres are read in read_h2odata/read_o3data) - Interstitial%h2o_pres = clear_val - Interstitial%oz_pres = clear_val + if (Model%oz_phys .or. Model%oz_phys_2015) then + Interstitial%oz_coeffp5 = oz_coeff+5 + else + Interstitial%oz_coeffp5 = 5 + endif ! Interstitial%skip_macro = .false. ! The value phys_hydrostatic from dynamics does not match the @@ -7130,14 +7178,10 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) ! Print static variables write (0,'(a,3i6)') 'Interstitial_print for mpirank, omprank, blkno: ', mpirank, omprank, blkno write (0,*) 'Interstitial_print: values that do not change' - write (0,*) 'Interstitial%h2o_coeff = ', Interstitial%h2o_coeff - write (0,*) 'sum(Interstitial%h2o_pres) = ', sum(Interstitial%h2o_pres) write (0,*) 'Interstitial%ipr = ', Interstitial%ipr write (0,*) 'Interstitial%itc = ', Interstitial%itc write (0,*) 'Interstitial%latidxprnt = ', Interstitial%latidxprnt write (0,*) 'Interstitial%levi = ', Interstitial%levi - write (0,*) 'Interstitial%levh2o = ', Interstitial%levh2o - write (0,*) 'Interstitial%levozp = ', Interstitial%levozp write (0,*) 'Interstitial%lmk = ', Interstitial%lmk write (0,*) 'Interstitial%lmp = ', Interstitial%lmp write (0,*) 'Interstitial%nbdlw = ', Interstitial%nbdlw @@ -7149,8 +7193,6 @@ subroutine interstitial_print(Interstitial, Model, mpirank, omprank, blkno) write (0,*) 'Interstitial%nspc1 = ', Interstitial%nspc1 write (0,*) 'Interstitial%ntiwx = ', Interstitial%ntiwx write (0,*) 'Interstitial%nvdiff = ', Interstitial%nvdiff - write (0,*) 'Interstitial%oz_coeff = ', Interstitial%oz_coeff - write (0,*) 'sum(Interstitial%oz_pres) = ', sum(Interstitial%oz_pres) write (0,*) 'Interstitial%phys_hydrostatic = ', Interstitial%phys_hydrostatic write (0,*) 'Interstitial%skip_macro = ', Interstitial%skip_macro write (0,*) 'Interstitial%trans_aero = ', Interstitial%trans_aero diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index f8bd89cd5..f02877f36 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -20,6 +20,13 @@ dimensions = (horizontal_loop_extent,vertical_dimension_plus_one) type = real kind = kind_phys +[prsi(:,1)] + standard_name = air_pressure_at_lowest_model_interface + long_name = air pressure at lowest model interface + units = Pa + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys [prsik] standard_name = dimensionless_exner_function_at_model_interfaces long_name = dimensionless Exner function at model layer interfaces @@ -607,6 +614,14 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys +[sncovr_ice] + standard_name = surface_snow_area_fraction_over_ice + long_name = surface snow area fraction over ice + units = frac + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) [snoalb] standard_name = upper_bound_on_max_albedo_over_deep_snow long_name = maximum snow albedo @@ -1281,27 +1296,35 @@ 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) -[clw_surf] - standard_name = cloud_condensed_water_mixing_ratio_at_surface - long_name = moist cloud water mixing ratio at surface + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[clw_surf_land] + standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_land + long_name = moist cloud water mixing ratio at surface over land units = kg kg-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[qwv_surf] - standard_name = water_vapor_mixing_ratio_at_surface - long_name = water vapor mixing ratio at surface + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[clw_surf_ice] + standard_name = cloud_condensed_water_mixing_ratio_at_surface_over_ice + long_name = moist cloud water mixing ratio at surface over ice units = kg kg-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[cndm_surf] - standard_name = surface_condensation_mass - long_name = surface condensation mass - units = kg m-2 +[qwv_surf_land] + standard_name = water_vapor_mixing_ratio_at_surface_over_land + long_name = water vapor mixing ratio at surface over land + units = kg kg-1 + dimensions = (horizontal_loop_extent) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[qwv_surf_ice] + standard_name = water_vapor_mixing_ratio_at_surface_over_ice + long_name = water vapor mixing ratio at surface over ice + units = kg kg-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys @@ -1322,25 +1345,33 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[tsnow] - standard_name = snow_temperature_bottom_first_layer - long_name = snow temperature at the bottom of the first snow layer +[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 + units = K + dimensions = (horizontal_dimension) + type = real + kind = kind_phys + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[tsnow_ice] + standard_name = snow_temperature_bottom_first_layer_over_ice + long_name = snow temperature at the bottom of the first snow layer over ice units = K dimensions = (horizontal_loop_extent) type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[snowfallac] - standard_name = total_accumulated_snowfall +[snowfallac_land] + standard_name = total_accumulated_snowfall_over_land long_name = run-total snow accumulation on the ground units = kg m-2 dimensions = (horizontal_loop_extent) type = real kind = kind_phys - active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) -[acsnow] - standard_name = accumulated_water_equivalent_of_frozen_precip - long_name = snow water equivalent of run-total frozen precip + active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[snowfallac_ice] + standard_name = total_accumulated_snowfall_over_ice + long_name = run-total snow accumulation on the ice units = kg m-2 dimensions = (horizontal_loop_extent) type = real @@ -3289,6 +3320,20 @@ type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) +[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 + units = m + dimensions = (30) + type = real + kind = kind_phys +[resid] + standard_name = minimum_soil_moisture_content_for_land_surface_model + long_name = minimum soil moisture for a given soil type for land surface model + units = m + dimensions = (30) + type = real + kind = kind_phys [rdlai] standard_name = flag_for_reading_leaf_area_index_from_input long_name = flag for reading leaf area index from initial conditions @@ -3441,6 +3486,12 @@ units = index dimensions = () type = integer +[use_ufo] + standard_name = flag_for_gcycle_surface_option + long_name = flag for gcycle surface option + units = flag + dimensions = () + type = logical [lcurr_sf] standard_name = flag_for_ocean_currents_in_surface_layer_scheme long_name = flag for taking ocean currents into account in surface layer scheme @@ -3961,6 +4012,12 @@ dimensions = () type = real kind = kind_phys +[nst_anl] + standard_name = flag_for_nsstm_analysis_in_gcycle + long_name = flag for NSSTM analysis in gcycle/sfcsub + units = flag + dimensions = () + type = logical [nstf_name(1)] standard_name = flag_for_nsstm_run long_name = NSSTM flag: off/uncoupled/coupled=0/1/2 @@ -4486,6 +4543,12 @@ 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 = + dimensions = () + type = integer [debug] standard_name = flag_debug long_name = control flag for debug @@ -4981,12 +5044,14 @@ units = index dimensions = (horizontal_loop_extent) type = integer + active = (index_for_ozone>0) [jindx2_o3] standard_name = upper_ozone_interpolation_index long_name = interpolation high index for ozone units = index dimensions = (horizontal_loop_extent) type = integer + active = (index_for_ozone>0) [ddy_o3] standard_name = ozone_interpolation_weight long_name = interpolation high index for ozone @@ -4994,18 +5059,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (index_for_ozone>0) [jindx1_h] standard_name = lower_water_vapor_interpolation_index long_name = interpolation low index for stratospheric water vapor units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_stratospheric_water_vapor_physics) [jindx2_h] standard_name = upper_water_vapor_interpolation_index long_name = interpolation high index for stratospheric water vapor units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_stratospheric_water_vapor_physics) [ddy_h] standard_name = water_vapor_interpolation_weight long_name = interpolation high index for stratospheric water vapor @@ -5013,18 +5081,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_stratospheric_water_vapor_physics) [jindx1_aer] standard_name = lower_aerosol_y_interpolation_index long_name = interpolation low index for prescribed aerosols in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [jindx2_aer] standard_name = upper_aerosol_y_interpolation_index long_name = interpolation high index for prescribed aerosols in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [ddy_aer] standard_name = aerosol_y_interpolation_weight long_name = interpolation high index for prescribed aerosols in the y direction @@ -5032,18 +5103,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_aerosol_input_MG_radiation) [iindx1_aer] standard_name = lower_aerosol_x_interpolation_index long_name = interpolation low index for prescribed aerosols in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [iindx2_aer] standard_name = upper_aerosol_x_interpolation_index long_name = interpolation high index for prescribed aerosols in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_aerosol_input_MG_radiation) [ddx_aer] standard_name = aerosol_x_interpolation_weight long_name = interpolation high index for prescribed aerosols in the x direction @@ -5051,18 +5125,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_aerosol_input_MG_radiation) [jindx1_ci] standard_name = lower_cloud_nuclei_y_interpolation_index long_name = interpolation low index for ice and cloud condensation nuclei in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [jindx2_ci] standard_name = upper_cloud_nuclei_y_interpolation_index long_name = interpolation high index for ice and cloud condensation nuclei in the y direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [ddy_ci] standard_name = cloud_nuclei_y_interpolation_weight long_name = interpolation high index for ice and cloud condensation nuclei in the y direction @@ -5070,18 +5147,21 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [iindx1_ci] standard_name = lower_cloud_nuclei_x_interpolation_index long_name = interpolation low index for ice and cloud condensation nuclei in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [iindx2_ci] standard_name = upper_cloud_nuclei_x_interpolation_index long_name = interpolation high index for ice and cloud condensation nuclei in the x direction units = index dimensions = (horizontal_loop_extent) type = integer + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) [ddx_ci] standard_name = cloud_nuclei_x_interpolation_weight long_name = interpolation high index for ice and cloud condensation nuclei in the x direction @@ -5089,6 +5169,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (flag_for_in_ccn_forcing_for_morrison_gettelman_microphysics==1) ######################################################################## [ccpp-table-properties] @@ -5234,6 +5315,7 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (index_for_surface_air_pressure_two_timesteps_back > 0) [phy_f2d(:,index_for_surface_air_pressure_at_previous_timestep)] standard_name = surface_air_pressure_at_previous_timestep long_name = surface air pressure at previous timestep @@ -5241,13 +5323,15 @@ dimensions = (horizontal_loop_extent) type = real kind = kind_phys -[phy_f2d(:,array_dimension_of_2d_arrays_for_microphysics)] + active = (index_for_surface_air_pressure_at_previous_timestep > 0) +[phy_f2d(:,index_for_surface_wind_enhancement_due_to_convection)] standard_name = surface_wind_enhancement_due_to_convection long_name = surface wind enhancement due to convection units = m s-1 dimensions = (horizontal_loop_extent) type = real kind = kind_phys + active = (index_for_surface_wind_enhancement_due_to_convection > 0) [phy_f3d(:,:,index_for_air_temperature_two_timesteps_back)] standard_name = air_temperature_two_timesteps_back long_name = air temperature two timesteps back @@ -5255,6 +5339,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_air_temperature_two_timesteps_back > 0) [phy_f3d(:,:,index_for_specific_humidity_two_timesteps_back)] standard_name = water_vapor_specific_humidity_two_timesteps_back long_name = water vapor specific humidity two timesteps back @@ -5262,6 +5347,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_specific_humidity_two_timesteps_back > 0) [phy_f3d(:,:,index_for_air_temperature_at_previous_timestep)] standard_name = air_temperature_at_previous_timestep long_name = air temperature at previous timestep @@ -5269,6 +5355,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_air_temperature_at_previous_timestep > 0) [phy_f3d(:,:,index_for_specific_humidity_at_previous_timestep)] standard_name = water_vapor_specific_humidity_at_previous_timestep long_name = water vapor specific humidity at previous timestep @@ -5276,6 +5363,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_specific_humidity_at_previous_timestep > 0) [phy_f3d(:,:,index_for_convective_cloud_water_mixing_ratio_in_phy_f3d)] standard_name = convective_cloud_water_mixing_ratio_in_phy_f3d long_name = convective cloud water mixing ratio in the phy_f3d array @@ -5283,6 +5371,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_convective_cloud_water_mixing_ratio_in_phy_f3d > 0) [phy_f3d(:,:,index_for_convective_cloud_cover_in_phy_f3d)] standard_name = convective_cloud_cover_in_phy_f3d long_name = convective cloud cover in the phy_f3d array @@ -5290,6 +5379,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_convective_cloud_cover_in_phy_f3d > 0) [phy_f3d(:,:,index_of_kinematic_buoyancy_flux_from_shoc_in_phy_f3d)] standard_name = kinematic_buoyancy_flux_from_shoc long_name = upward kinematic buoyancy flux from the SHOC scheme @@ -5297,6 +5387,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_of_kinematic_buoyancy_flux_from_shoc_in_phy_f3d > 0) [phy_f3d(:,:,index_of_atmosphere_heat_diffusivity_from_shoc_in_phy_f3d)] standard_name = atmosphere_heat_diffusivity_from_shoc long_name = diffusivity for heat from the SHOC scheme @@ -5304,6 +5395,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_of_atmosphere_heat_diffusivity_from_shoc_in_phy_f3d > 0) [phy_f3d(:,:,index_of_subgrid_scale_cloud_fraction_from_shoc_in_phy_f3d)] standard_name = subgrid_scale_cloud_fraction_from_shoc long_name = subgrid-scale cloud fraction from the SHOC scheme @@ -5311,6 +5403,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_of_subgrid_scale_cloud_fraction_from_shoc_in_phy_f3d > 0) [phy_f3d(:,:,index_for_cloud_fraction_in_3d_arrays_for_microphysics)] standard_name = cloud_fraction_for_MG long_name = cloud fraction used by Morrison-Gettelman MP @@ -5318,6 +5411,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_cloud_fraction_in_3d_arrays_for_microphysics > 0) [phy_f3d(:,:,index_for_cloud_liquid_water_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_liquid_water_particle_in_um long_name = eff. radius of cloud liquid water particle in micrometer @@ -5325,6 +5419,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_cloud_liquid_water_effective_radius > 0) [phy_f3d(:,:,index_for_ice_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_ice_particle_in_um long_name = eff. radius of cloud ice water particle in micrometer @@ -5332,6 +5427,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_ice_effective_radius > 0) [phy_f3d(:,:,index_for_rain_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_rain_particle_in_um long_name = effective radius of cloud rain particle in micrometers @@ -5339,6 +5435,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_rain_effective_radius > 0) [phy_f3d(:,:,index_for_snow_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_snow_particle_in_um long_name = effective radius of cloud snow particle in micrometers @@ -5346,6 +5443,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_snow_effective_radius > 0) [phy_f3d(:,:,index_for_graupel_effective_radius)] standard_name = effective_radius_of_stratiform_cloud_graupel_particle_in_um long_name = eff. radius of cloud graupel particle in micrometer @@ -5353,6 +5451,7 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys + active = (index_for_graupel_effective_radius > 0) [forcet] standard_name = temperature_tendency_due_to_dynamics long_name = temperature tendency due to dynamics only @@ -8431,19 +8530,6 @@ dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys -[h2o_coeff] - standard_name = number_of_coefficients_in_h2o_forcing_data - long_name = number of coefficients in h2o forcing data - units = index - dimensions = () - type = integer -[h2o_pres] - standard_name = natural_log_of_h2o_forcing_data_pressure_levels - long_name = natural log of h2o forcing data pressure levels - units = log(Pa) - dimensions = (vertical_dimension_of_h2o_forcing_data) - type = real - kind = kind_phys [hefac] standard_name = surface_upward_latent_heat_flux_reduction_factor long_name = surface upward latent heat flux reduction factor from canopy heat storage @@ -8642,18 +8728,6 @@ units = count dimensions = () type = integer -[levh2o] - standard_name = vertical_dimension_of_h2o_forcing_data - long_name = number of vertical layers in h2o forcing data - units = count - dimensions = () - type = integer -[levozp] - standard_name = vertical_dimension_of_ozone_forcing_data - long_name = number of vertical layers in ozone forcing data - units = count - dimensions = () - type = integer [lmk] standard_name = adjusted_vertical_layer_dimension_for_radiation long_name = adjusted number of vertical layers for radiation @@ -8883,25 +8957,12 @@ units = flag dimensions = (number_of_tracers_plus_one,2) type = logical -[oz_coeff] - standard_name = number_of_coefficients_in_ozone_forcing_data - long_name = number of coefficients in ozone forcing data - units = index - dimensions = () - type = integer [oz_coeffp5] standard_name = number_of_coefficients_in_ozone_forcing_data_plus_five long_name = number of coefficients in ozone forcing data plus five units = index dimensions = () type = integer -[oz_pres] - standard_name = natural_log_of_ozone_forcing_data_pressure_levels - long_name = natural log of ozone forcing data pressure levels - units = log(Pa) - dimensions = (vertical_dimension_of_ozone_forcing_data) - type = real - kind = kind_phys [phys_hydrostatic] standard_name = flag_for_hydrostatic_heating_from_physics long_name = flag for use of hydrostatic heating in physics diff --git a/scm/src/gmtb_scm.F90 b/scm/src/gmtb_scm.F90 index d0f2a08e2..0db258fe5 100644 --- a/scm/src/gmtb_scm.F90 +++ b/scm/src/gmtb_scm.F90 @@ -16,9 +16,11 @@ subroutine gmtb_scm_main_sub() use gmtb_scm_output use gmtb_scm_type_defs - use :: ccpp_static_api, & - only: ccpp_physics_init, & - ccpp_physics_run, & + use :: ccpp_static_api, & + only: ccpp_physics_init, & + ccpp_physics_timestep_init, & + ccpp_physics_run, & + ccpp_physics_timestep_finalize, & ccpp_physics_finalize @@ -28,7 +30,7 @@ subroutine gmtb_scm_main_sub() type(scm_input_type), target :: scm_input type(scm_reference_type), target :: scm_reference - integer :: i, j, grid_error + integer :: i, j, grid_error, kdt_rad real(kind=8) :: rinc(5) !(DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS) integer :: jdat(1:8) @@ -252,11 +254,40 @@ subroutine gmtb_scm_main_sub() endif end do - call ccpp_physics_run(cdata, suite_name=trim(trim(adjustl(scm_state%physics_suite_name))), ierr=ierr) + call ccpp_physics_timestep_init(cdata, suite_name=trim(adjustl(scm_state%physics_suite_name)), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_timestep_init: ' // trim(cdata%errmsg) // '. Exiting...' + stop + end if + + !--- determine if radiation diagnostics buckets need to be cleared + if (nint(physics%Model%fhzero*3600) >= nint(max(physics%Model%fhswr,physics%Model%fhlwr))) then + if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + call physics%Diag%rad_zero (physics%Model) + endif + else + kdt_rad = nint(min(physics%Model%fhswr,physics%Model%fhlwr)/physics%Model%dtp) + if (mod(physics%Model%kdt,kdt_rad) == 0) then + call physics%Diag%rad_zero (physics%Model) + endif + endif + + !--- determine if physics diagnostics buckets need to be cleared + if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + call physics%Diag%phys_zero (physics%Model) + endif + + call ccpp_physics_run(cdata, suite_name=trim(adjustl(scm_state%physics_suite_name)), ierr=ierr) if (ierr/=0) then write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_run: ' // trim(cdata%errmsg) // '. Exiting...' stop end if + + call ccpp_physics_timestep_finalize(cdata, suite_name=trim(adjustl(scm_state%physics_suite_name)), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_timestep_finalize: ' // trim(cdata%errmsg) // '. Exiting...' + stop + end if !the filter routine (called after the following leapfrog time step) expects time level 2 in temp_tracer to be the updated, unfiltered state after the previous time step scm_state%temp_tracer(:,:,:,2) = scm_state%state_tracer(:,:,:,2) diff --git a/scm/src/gmtb_scm_time_integration.F90 b/scm/src/gmtb_scm_time_integration.F90 index 7d2b84dcd..cff3ef696 100644 --- a/scm/src/gmtb_scm_time_integration.F90 +++ b/scm/src/gmtb_scm_time_integration.F90 @@ -7,7 +7,11 @@ module gmtb_scm_time_integration use gmtb_scm_forcing use ccpp_api, only: ccpp_t -use ccpp_static_api, only: ccpp_physics_run +use :: ccpp_static_api, & + only: ccpp_physics_timestep_init, & + ccpp_physics_run, & + ccpp_physics_timestep_finalize + implicit none @@ -57,7 +61,7 @@ subroutine do_time_step(scm_state, physics, cdata, in_spinup) type(ccpp_t), intent(inout) :: cdata logical, intent(in) :: in_spinup - integer :: i, ierr + integer :: i, ierr, kdt_rad !> \section do_time_step_alg Algorithm !! @{ @@ -99,13 +103,42 @@ subroutine do_time_step(scm_state, physics, cdata, in_spinup) endif endif end do - + + call ccpp_physics_timestep_init(cdata, suite_name=trim(adjustl(scm_state%physics_suite_name)), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_timestep_init: ' // trim(cdata%errmsg) // '. Exiting...' + stop + end if + + !--- determine if radiation diagnostics buckets need to be cleared + if (nint(physics%Model%fhzero*3600) >= nint(max(physics%Model%fhswr,physics%Model%fhlwr))) then + if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + call physics%Diag%rad_zero (physics%Model) + endif + else + kdt_rad = nint(min(physics%Model%fhswr,physics%Model%fhlwr)/physics%Model%dtp) + if (mod(physics%Model%kdt,kdt_rad) == 0) then + call physics%Diag%rad_zero (physics%Model) + endif + endif + + !--- determine if physics diagnostics buckets need to be cleared + if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + call physics%Diag%phys_zero (physics%Model) + endif + call ccpp_physics_run(cdata, suite_name=trim(adjustl(scm_state%physics_suite_name)), ierr=ierr) if (ierr/=0) then write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_run: ' // trim(cdata%errmsg) // '. Exiting...' stop end if + call ccpp_physics_timestep_finalize(cdata, suite_name=trim(adjustl(scm_state%physics_suite_name)), ierr=ierr) + if (ierr/=0) then + write(*,'(a,i0,a)') 'An error occurred in ccpp_physics_timestep_finalize: ' // trim(cdata%errmsg) // '. Exiting...' + stop + end if + !if no physics call, need to transfer state_variables(:,:,1) to state_variables (:,:,2) ! scm_state%state_T(:,:,2) = scm_state%state_T(:,:,1) ! scm_state%state_tracer(:,:,:,2) = scm_state%state_tracer(:,:,:,1) diff --git a/scm/src/gmtb_scm_type_defs.F90 b/scm/src/gmtb_scm_type_defs.F90 index d555f893a..884ab9acc 100644 --- a/scm/src/gmtb_scm_type_defs.F90 +++ b/scm/src/gmtb_scm_type_defs.F90 @@ -1092,28 +1092,28 @@ subroutine physics_set(physics, scm_input, scm_state) if ((scm_state%model_ics .or. scm_state%lsm_ics) .and. physics%Model%lsm == physics%Model%lsm_ruc) then !.and. warm_start (not implemented here -- assuming that RUC LSM has warm start data from file) !--- Extra RUC LSM variables - write(0,'(a)') "Setting internal physics variables from the RUC LSM section of the case input file (scalars)..." - call conditionally_set_var(scm_input%input_wetness, physics%Sfcprop%wetness(i), "wetness", .false., missing_var(1)) - call conditionally_set_var(scm_input%input_clw_surf, physics%Sfcprop%clw_surf(i), "clw_surf", .false., missing_var(2)) - call conditionally_set_var(scm_input%input_qwv_surf, physics%Sfcprop%qwv_surf(i), "qwv_surf", .false., missing_var(3)) - call conditionally_set_var(scm_input%input_tsnow, physics%Sfcprop%tsnow(i), "tsnow", .false., missing_var(4)) - call conditionally_set_var(scm_input%input_snowfallac, physics%Sfcprop%snowfallac(i), "snowfallac", .false., missing_var(5)) - call conditionally_set_var(scm_input%input_acsnow, physics%Sfcprop%acsnow(i), "acsnow", .false., missing_var(6)) - if (physics%Model%lsm == physics%Model%lsm_ruc .and. physics%Model%rdlai) then - !when rdlai = T, RUC LSM expects the LAI to be read in, hence the required variable attribute below - call conditionally_set_var(scm_input%input_lai, physics%Sfcprop%xlaixy(i), "lai", .true., missing_var(7)) - end if - - !write out warning if missing data for non-required variables - n = 7 - if ( i==1 .and. ANY( missing_var(1:n) ) ) then - write(0,'(a)') "INPUT CHECK: Some missing input data was found related to (potentially non-required) surface variables for RUC LSM. This may lead to crashes or other strange behavior." - write(0,'(a)') "Check gmtb_scm_type_defs.F90/physics_set to see the names of variables that are missing, corresponding to the following indices:" - do j=1, n - if (missing_var(j)) write(0,'(a,i0)') "variable index ",j - end do - end if - missing_var = .false. + ! write(0,'(a)') "Setting internal physics variables from the RUC LSM section of the case input file (scalars)..." + ! call conditionally_set_var(scm_input%input_wetness, physics%Sfcprop%wetness(i), "wetness", .false., missing_var(1)) + ! call conditionally_set_var(scm_input%input_clw_surf, physics%Sfcprop%clw_surf(i), "clw_surf", .false., missing_var(2)) + ! call conditionally_set_var(scm_input%input_qwv_surf, physics%Sfcprop%qwv_surf(i), "qwv_surf", .false., missing_var(3)) + ! call conditionally_set_var(scm_input%input_tsnow, physics%Sfcprop%tsnow(i), "tsnow", .false., missing_var(4)) + ! call conditionally_set_var(scm_input%input_snowfallac, physics%Sfcprop%snowfallac(i), "snowfallac", .false., missing_var(5)) + ! call conditionally_set_var(scm_input%input_acsnow, physics%Sfcprop%acsnow(i), "acsnow", .false., missing_var(6)) + ! if (physics%Model%lsm == physics%Model%lsm_ruc .and. physics%Model%rdlai) then + ! !when rdlai = T, RUC LSM expects the LAI to be read in, hence the required variable attribute below + ! call conditionally_set_var(scm_input%input_lai, physics%Sfcprop%xlaixy(i), "lai", .true., missing_var(7)) + ! end if + ! + ! !write out warning if missing data for non-required variables + ! n = 7 + ! if ( i==1 .and. ANY( missing_var(1:n) ) ) then + ! write(0,'(a)') "INPUT CHECK: Some missing input data was found related to (potentially non-required) surface variables for RUC LSM. This may lead to crashes or other strange behavior." + ! write(0,'(a)') "Check gmtb_scm_type_defs.F90/physics_set to see the names of variables that are missing, corresponding to the following indices:" + ! do j=1, n + ! if (missing_var(j)) write(0,'(a,i0)') "variable index ",j + ! end do + ! end if + ! missing_var = .false. elseif ((scm_state%model_ics .or. scm_state%lsm_ics) .and. physics%Model%lsm == physics%Model%lsm_noahmp) then write(0,'(a)') "Setting internal physics variables from the NoahMP section of the case input file (scalars)..." !all of these can be missing, since a method exists to "cold start" these variables From e42509b41b2dc9d59a4155805b683c6e316e34a8 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 1 Mar 2021 14:28:59 -0700 Subject: [PATCH 2/5] update ccpp_prebuild.py and CMakeLists.txt to write CCPP prebuild output in the right place in order to build --- ccpp/config/ccpp_prebuild_config.py | 30 ++++++++++------------------- ccpp/framework | 2 +- ccpp/physics | 2 +- scm/src/CMakeLists.txt | 4 +++- 4 files changed, 15 insertions(+), 23 deletions(-) diff --git a/ccpp/config/ccpp_prebuild_config.py b/ccpp/config/ccpp_prebuild_config.py index de54de129..5b93b18cc 100755 --- a/ccpp/config/ccpp_prebuild_config.py +++ b/ccpp/config/ccpp_prebuild_config.py @@ -212,32 +212,22 @@ DEFAULT_BUILD_DIR = 'scm/bin' # Auto-generated makefile/cmakefile snippets that contain all type definitions -TYPEDEFS_MAKEFILE = 'ccpp/physics/CCPP_TYPEDEFS.mk' -TYPEDEFS_CMAKEFILE = 'ccpp/physics/CCPP_TYPEDEFS.cmake' -TYPEDEFS_SOURCEFILE = 'ccpp/physics/CCPP_TYPEDEFS.sh' -#TYPEDEFS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.mk' -#TYPEDEFS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.cmake' -#TYPEDEFS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.sh' +TYPEDEFS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.mk' +TYPEDEFS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.cmake' +TYPEDEFS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_TYPEDEFS.sh' # Auto-generated makefile/cmakefile snippets that contain all schemes -SCHEMES_MAKEFILE = 'ccpp/physics/CCPP_SCHEMES.mk' -SCHEMES_CMAKEFILE = 'ccpp/physics/CCPP_SCHEMES.cmake' -SCHEMES_SOURCEFILE = 'ccpp/physics/CCPP_SCHEMES.sh' -#SCHEMES_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.mk' -#SCHEMES_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.cmake' -#SCHEMES_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.sh' +SCHEMES_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.mk' +SCHEMES_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.cmake' +SCHEMES_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_SCHEMES.sh' # Auto-generated makefile/cmakefile snippets that contain all caps -CAPS_MAKEFILE = 'ccpp/physics/CCPP_CAPS.mk' -CAPS_CMAKEFILE = 'ccpp/physics/CCPP_CAPS.cmake' -CAPS_SOURCEFILE = 'ccpp/physics/CCPP_CAPS.sh' -#CAPS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.mk' -#CAPS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.cmake' -#CAPS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.sh' +CAPS_MAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.mk' +CAPS_CMAKEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.cmake' +CAPS_SOURCEFILE = '{build_dir}/ccpp/physics/CCPP_CAPS.sh' # Directory where to put all auto-generated physics caps -CAPS_DIR = 'ccpp/physics/physics' -#CAPS_DIR = '{build_dir}/ccpp/physics/physics' +CAPS_DIR = '{build_dir}/ccpp/physics/physics' # Directory where the suite definition files are stored SUITES_DIR = 'ccpp/suites' diff --git a/ccpp/framework b/ccpp/framework index f1dc8d6f0..612dd1aa9 160000 --- a/ccpp/framework +++ b/ccpp/framework @@ -1 +1 @@ -Subproject commit f1dc8d6f038e590508c272070f673d1fd7ea566f +Subproject commit 612dd1aa9ed6f8c08b4c280ba1c992dd5357fc59 diff --git a/ccpp/physics b/ccpp/physics index b670bb2a0..162a47a8d 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit b670bb2a0e8814e9a1df46b9a0a89945f627ccd0 +Subproject commit 162a47a8ddd0f0c6828543ecccda552f3f55b5f0 diff --git a/scm/src/CMakeLists.txt b/scm/src/CMakeLists.txt index b8f694963..0d773754b 100644 --- a/scm/src/CMakeLists.txt +++ b/scm/src/CMakeLists.txt @@ -27,8 +27,10 @@ endif("${SUITES}" STREQUAL "") string(REGEX REPLACE "(.+),$" "\\1" SUITES ${SUITES}) # Run CCPP prebuild.py message (STATUS "Running ccpp_prebuild.py for CCPP") +# Make the directories where the ccpp_prebuild.py script wants to write caps and make snippets +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ccpp/physics/physics) execute_process( - COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR}/.. + COMMAND ccpp/framework/scripts/ccpp_prebuild.py --config=ccpp/config/ccpp_prebuild_config.py --suites=${SUITES} --builddir=${CMAKE_CURRENT_BINARY_DIR} OUTPUT_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.out ERROR_FILE ${PROJECT_BINARY_DIR}/ccpp_prebuild.err WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../.. From 29a65ff6775861c97c669a67ced8c2815b5bb252 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Mon, 1 Mar 2021 15:29:27 -0700 Subject: [PATCH 3/5] fix diagnostic clearing --- scm/etc/case_config/arm_sgp_summer_1997_A.nml | 1 + scm/src/gmtb_scm.F90 | 6 +++--- scm/src/gmtb_scm_time_integration.F90 | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/scm/etc/case_config/arm_sgp_summer_1997_A.nml b/scm/etc/case_config/arm_sgp_summer_1997_A.nml index d1efaabbb..fc08d016e 100644 --- a/scm/etc/case_config/arm_sgp_summer_1997_A.nml +++ b/scm/etc/case_config/arm_sgp_summer_1997_A.nml @@ -7,6 +7,7 @@ time_scheme = 1, runtime = 345600, n_itt_out = 1, n_levels = 64, +n_itt_diag = 1, output_file = 'output', case_data_dir = '../data/processed_case_input', vert_coord_data_dir = '../data/vert_coord_data', diff --git a/scm/src/gmtb_scm.F90 b/scm/src/gmtb_scm.F90 index c887787a0..38549d146 100644 --- a/scm/src/gmtb_scm.F90 +++ b/scm/src/gmtb_scm.F90 @@ -282,18 +282,18 @@ subroutine gmtb_scm_main_sub() !--- determine if radiation diagnostics buckets need to be cleared if (nint(physics%Model%fhzero*3600) >= nint(max(physics%Model%fhswr,physics%Model%fhlwr))) then - if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + if (mod(physics%Model%kdt,physics%Model%nszero) == 1 .or. physics%Model%nszero == 1) then call physics%Diag%rad_zero (physics%Model) endif else kdt_rad = nint(min(physics%Model%fhswr,physics%Model%fhlwr)/physics%Model%dtp) - if (mod(physics%Model%kdt,kdt_rad) == 0) then + if (mod(physics%Model%kdt,kdt_rad) == 1) then call physics%Diag%rad_zero (physics%Model) endif endif !--- determine if physics diagnostics buckets need to be cleared - if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + if (mod(physics%Model%kdt,physics%Model%nszero) == 1 .or. physics%Model%nszero == 1) then call physics%Diag%phys_zero (physics%Model) endif diff --git a/scm/src/gmtb_scm_time_integration.F90 b/scm/src/gmtb_scm_time_integration.F90 index a2c39a6ed..e1e21ad8c 100644 --- a/scm/src/gmtb_scm_time_integration.F90 +++ b/scm/src/gmtb_scm_time_integration.F90 @@ -126,18 +126,18 @@ subroutine do_time_step(scm_state, physics, cdata, in_spinup) !--- determine if radiation diagnostics buckets need to be cleared if (nint(physics%Model%fhzero*3600) >= nint(max(physics%Model%fhswr,physics%Model%fhlwr))) then - if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + if (mod(physics%Model%kdt,physics%Model%nszero) == 1 .or. physics%Model%nszero == 1) then call physics%Diag%rad_zero (physics%Model) endif else kdt_rad = nint(min(physics%Model%fhswr,physics%Model%fhlwr)/physics%Model%dtp) - if (mod(physics%Model%kdt,kdt_rad) == 0) then + if (mod(physics%Model%kdt,kdt_rad) == 1) then call physics%Diag%rad_zero (physics%Model) endif endif !--- determine if physics diagnostics buckets need to be cleared - if (mod(physics%Model%kdt,physics%Model%nszero) == 0) then + if (mod(physics%Model%kdt,physics%Model%nszero) == 1 .or. physics%Model%nszero == 1) then call physics%Diag%phys_zero (physics%Model) endif From 75258e2329cf27e264d807f72103f0bb0e3f90a4 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Tue, 2 Mar 2021 11:28:00 -0700 Subject: [PATCH 4/5] remove change to ARM case_config; fix horizontal_dimension in GFS_typedefs.meta; update submodule pointer for ccpp-physics --- ccpp/physics | 2 +- scm/etc/case_config/arm_sgp_summer_1997_A.nml | 1 - scm/src/GFS_typedefs.meta | 8 ++++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/ccpp/physics b/ccpp/physics index 162a47a8d..8010a66d7 160000 --- a/ccpp/physics +++ b/ccpp/physics @@ -1 +1 @@ -Subproject commit 162a47a8ddd0f0c6828543ecccda552f3f55b5f0 +Subproject commit 8010a66d7f7724d4df896995dc26196e199c0c1e diff --git a/scm/etc/case_config/arm_sgp_summer_1997_A.nml b/scm/etc/case_config/arm_sgp_summer_1997_A.nml index fc08d016e..d1efaabbb 100644 --- a/scm/etc/case_config/arm_sgp_summer_1997_A.nml +++ b/scm/etc/case_config/arm_sgp_summer_1997_A.nml @@ -7,7 +7,6 @@ time_scheme = 1, runtime = 345600, n_itt_out = 1, n_levels = 64, -n_itt_diag = 1, output_file = 'output', case_data_dir = '../data/processed_case_input', vert_coord_data_dir = '../data/vert_coord_data', diff --git a/scm/src/GFS_typedefs.meta b/scm/src/GFS_typedefs.meta index f02877f36..197f164cc 100644 --- a/scm/src/GFS_typedefs.meta +++ b/scm/src/GFS_typedefs.meta @@ -618,7 +618,7 @@ standard_name = surface_snow_area_fraction_over_ice long_name = surface snow area fraction over ice units = frac - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) @@ -1349,7 +1349,7 @@ standard_name = snow_temperature_bottom_first_layer_over_land long_name = snow temperature at the bottom of the first snow layer over land units = K - dimensions = (horizontal_dimension) + dimensions = (horizontal_loop_extent) type = real kind = kind_phys active = (flag_for_land_surface_scheme == flag_for_ruc_land_surface_scheme) @@ -9984,7 +9984,7 @@ standard_name = saturation_vapor_pressure long_name = saturation vapor pressure units = Pa - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys optional = F @@ -9993,7 +9993,7 @@ standard_name = water_vapor_mixing_ratio long_name = water vaport mixing ratio units = kg/kg - dimensions = (horizontal_dimension,vertical_dimension) + dimensions = (horizontal_loop_extent,vertical_dimension) type = real kind = kind_phys optional = F From 77d7cdfe4f7159ef2cea875e0bd23ccac0a96c51 Mon Sep 17 00:00:00 2001 From: Grant Firl Date: Thu, 4 Mar 2021 13:32:36 -0700 Subject: [PATCH 5/5] catch up with develop branch of FV3 and ccpp-physics master --- ccpp/config/ccpp_prebuild_config.py | 4 +- ccpp/physics | 2 +- ...nput_GFS_v16beta.nml => input_GFS_v16.nml} | 0 ...ta_RRTMGP.nml => input_GFS_v16_RRTMGP.nml} | 0 ...jac.nml => input_GFS_v16_RRTMGP_LWjac.nml} | 0 ..._GFS_v16beta.xml => suite_SCM_GFS_v16.xml} | 2 +- ...RTMGP.xml => suite_SCM_GFS_v16_RRTMGP.xml} | 2 +- ...ps.xml => suite_SCM_GFS_v16_RRTMGP_ps.xml} | 2 +- ...nsst.xml => suite_SCM_GFS_v16_no_nsst.xml} | 2 +- ...s.xml => suite_SCM_GFS_v16_no_nsst_ps.xml} | 2 +- ...16beta_ps.xml => suite_SCM_GFS_v16_ps.xml} | 2 +- .../plot_configs/all_vars_test_twpice.ini | 10 +- .../arm_sgp_summer_1997_A_all_suites.ini | 4 +- .../scripts/plot_configs/supported_suites.ini | 4 +- .../plot_configs/twpice_all_suites.ini | 2 +- ...rs_GFS_v16beta.txt => tracers_GFS_v16.txt} | 0 scm/src/GFS_typedefs.F90 | 789 ++++++++++-------- scm/src/GFS_typedefs.meta | 701 +++++++++------- scm/src/LASSO_multi_run.py | 4 +- scm/src/default_namelists.py | 6 +- scm/src/default_tracers.py | 6 +- scm/src/example_multi_run.py | 4 +- scm/src/supported_suites.py | 2 +- 23 files changed, 879 insertions(+), 671 deletions(-) rename ccpp/physics_namelists/{input_GFS_v16beta.nml => input_GFS_v16.nml} (100%) rename ccpp/physics_namelists/{input_GFS_v16beta_RRTMGP.nml => input_GFS_v16_RRTMGP.nml} (100%) rename ccpp/physics_namelists/{input_GFS_v16beta_RRTMGP_LWjac.nml => input_GFS_v16_RRTMGP_LWjac.nml} (100%) rename ccpp/suites/{suite_SCM_GFS_v16beta.xml => suite_SCM_GFS_v16.xml} (98%) rename ccpp/suites/{suite_SCM_GFS_v16beta_RRTMGP.xml => suite_SCM_GFS_v16_RRTMGP.xml} (98%) rename ccpp/suites/{suite_SCM_GFS_v16beta_RRTMGP_ps.xml => suite_SCM_GFS_v16_RRTMGP_ps.xml} (98%) rename ccpp/suites/{suite_SCM_GFS_v16beta_no_nsst.xml => suite_SCM_GFS_v16_no_nsst.xml} (98%) rename ccpp/suites/{suite_SCM_GFS_v16beta_no_nsst_ps.xml => suite_SCM_GFS_v16_no_nsst_ps.xml} (97%) rename ccpp/suites/{suite_SCM_GFS_v16beta_ps.xml => suite_SCM_GFS_v16_ps.xml} (97%) rename scm/etc/tracer_config/{tracers_GFS_v16beta.txt => tracers_GFS_v16.txt} (100%) 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