diff --git a/modulefiles/tasks/wcoss2/analysis_gsi.local.lua b/modulefiles/tasks/wcoss2/analysis_gsi.local.lua
index bd953c28a..415599d80 100644
--- a/modulefiles/tasks/wcoss2/analysis_gsi.local.lua
+++ b/modulefiles/tasks/wcoss2/analysis_gsi.local.lua
@@ -22,3 +22,4 @@ load(pathJoin("crtm", os.getenv("crtm_ver")))
load(pathJoin("udunits", os.getenv("udunits_ver")))
load(pathJoin("gsl", os.getenv("gsl_ver")))
load(pathJoin("nco", os.getenv("nco_ver")))
+
diff --git a/modulefiles/tasks/wcoss2/enkfupdt.local.lua b/modulefiles/tasks/wcoss2/enkfupdt.local.lua
index 86747d3b2..6b53eb714 100644
--- a/modulefiles/tasks/wcoss2/enkfupdt.local.lua
+++ b/modulefiles/tasks/wcoss2/enkfupdt.local.lua
@@ -1,4 +1,3 @@
-load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver")))
load(pathJoin("intel", os.getenv("intel_ver")))
load(pathJoin("craype", os.getenv("craype_ver")))
load(pathJoin("python", os.getenv("python_ver")))
diff --git a/modulefiles/tasks/wcoss2/make_ics.local.lua b/modulefiles/tasks/wcoss2/make_ics.local.lua
index b2eb55bfd..e7c567001 100644
--- a/modulefiles/tasks/wcoss2/make_ics.local.lua
+++ b/modulefiles/tasks/wcoss2/make_ics.local.lua
@@ -1,4 +1,3 @@
-load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver")))
load(pathJoin("intel", os.getenv("intel_ver")))
load(pathJoin("craype", os.getenv("craype_ver")))
load(pathJoin("python", os.getenv("python_ver")))
@@ -13,7 +12,7 @@ load(pathJoin("pnetcdf-D", os.getenv("pnetcdf_ver")))
load(pathJoin("bacio", os.getenv("bacio_ver")))
load(pathJoin("w3emc", os.getenv("w3emc_ver")))
load(pathJoin("nemsio", os.getenv("nemsio_ver")))
+load(pathJoin("libaec",os.getenv("libaec_ver")))
+load(pathJoin("g2c",os.getenv("g2c_ver")))
+load(pathJoin("libjpeg-turbo",os.getenv("libjpeg_turbo_ver")))
load(pathJoin("wgrib2", os.getenv("wgrib2_ver")))
-load(pathJoin("udunits", os.getenv("udunits_ver")))
-load(pathJoin("gsl", os.getenv("gsl_ver")))
-load(pathJoin("nco", os.getenv("nco_ver")))
diff --git a/modulefiles/tasks/wcoss2/make_lbcs.local.lua b/modulefiles/tasks/wcoss2/make_lbcs.local.lua
index e8fdcb468..f215f77f3 100644
--- a/modulefiles/tasks/wcoss2/make_lbcs.local.lua
+++ b/modulefiles/tasks/wcoss2/make_lbcs.local.lua
@@ -1,4 +1,3 @@
-load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver")))
load(pathJoin("intel", os.getenv("intel_ver")))
load(pathJoin("craype", os.getenv("craype_ver")))
load(pathJoin("python", os.getenv("python_ver")))
@@ -14,7 +13,11 @@ load(pathJoin("pnetcdf-D", os.getenv("pnetcdf_ver")))
load(pathJoin("bacio", os.getenv("bacio_ver")))
load(pathJoin("w3emc", os.getenv("w3emc_ver")))
load(pathJoin("nemsio", os.getenv("nemsio_ver")))
+load(pathJoin("libaec",os.getenv("libaec_ver")))
+load(pathJoin("g2c",os.getenv("g2c_ver")))
+load(pathJoin("libjpeg-turbo",os.getenv("libjpeg_turbo_ver")))
load(pathJoin("wgrib2", os.getenv("wgrib2_ver")))
load(pathJoin("udunits", os.getenv("udunits_ver")))
load(pathJoin("gsl", os.getenv("gsl_ver")))
load(pathJoin("nco", os.getenv("nco_ver")))
+
diff --git a/modulefiles/tasks/wcoss2/post.local.lua b/modulefiles/tasks/wcoss2/post.local.lua
index b35c3b4ab..39be88e2d 100644
--- a/modulefiles/tasks/wcoss2/post.local.lua
+++ b/modulefiles/tasks/wcoss2/post.local.lua
@@ -1,7 +1,6 @@
unload("PrgEnv-intel")
unload("netcdf")
-load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver")))
load(pathJoin("intel", os.getenv("intel_ver")))
load(pathJoin("craype", os.getenv("craype_ver")))
load(pathJoin("python", os.getenv("python_ver")))
@@ -14,4 +13,7 @@ load(pathJoin("hdf5-D", os.getenv("hdf5_ver")))
load(pathJoin("netcdf-D", os.getenv("netcdf_ver")))
load(pathJoin("pnetcdf-D", os.getenv("pnetcdf_ver")))
load(pathJoin("libjpeg", os.getenv("libjpeg_ver")))
+load(pathJoin("libaec",os.getenv("libaec_ver")))
+load(pathJoin("g2c",os.getenv("g2c_ver")))
+load(pathJoin("libjpeg-turbo",os.getenv("libjpeg_turbo_ver")))
load(pathJoin("wgrib2", os.getenv("wgrib2_ver")))
diff --git a/modulefiles/tasks/wcoss2/prdgen.local.lua b/modulefiles/tasks/wcoss2/prdgen.local.lua
index bb7b8ee46..0e3bc174d 100644
--- a/modulefiles/tasks/wcoss2/prdgen.local.lua
+++ b/modulefiles/tasks/wcoss2/prdgen.local.lua
@@ -1,6 +1,6 @@
+
load(pathJoin("cfp", os.getenv("cfp_ver")))
-load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver")))
load(pathJoin("intel", os.getenv("intel_ver")))
load(pathJoin("craype", os.getenv("craype_ver")))
load(pathJoin("python", os.getenv("python_ver")))
@@ -11,10 +11,9 @@ load(pathJoin("cray-pals", os.getenv("cray_pals_ver")))
load(pathJoin("hdf5-D", os.getenv("hdf5_ver")))
load(pathJoin("netcdf-D", os.getenv("netcdf_ver")))
load(pathJoin("pnetcdf-D", os.getenv("pnetcdf_ver")))
+load(pathJoin("libaec",os.getenv("libaec_ver")))
+load(pathJoin("g2c",os.getenv("g2c_ver")))
+load(pathJoin("libjpeg-turbo",os.getenv("libjpeg_turbo_ver")))
load(pathJoin("wgrib2", os.getenv("wgrib2_ver")))
load(pathJoin("libjpeg", os.getenv("libjpeg_ver")))
load(pathJoin("grib_util", os.getenv("grib_util_ver")))
-
-load(pathJoin("udunits", os.getenv("udunits_ver")))
-load(pathJoin("gsl", os.getenv("gsl_ver")))
-load(pathJoin("nco", os.getenv("nco_ver")))
diff --git a/modulefiles/wflow_wcoss2.lua b/modulefiles/wflow_wcoss2.lua
index 853e5b43d..b93ca7402 100644
--- a/modulefiles/wflow_wcoss2.lua
+++ b/modulefiles/wflow_wcoss2.lua
@@ -12,5 +12,5 @@ prepend_path("MODULEPATH", os.getenv("modulepath_mpi"))
load(pathJoin("crtm", os.getenv("crtm_ver")))
prepend_path("MODULEPATH","/apps/ops/test/nco/modulefiles")
-load(pathJoin("core/rocoto", os.getenv("rocoto_ver")))
+load(pathJoin("core/rocoto", os.getenv("rocoto_ver") or "1.3.5"))
diff --git a/parm/FV3LAM_wflow_nco.xml b/parm/FV3LAM_wflow_nco.xml
new file mode 100644
index 000000000..ba4c00316
--- /dev/null
+++ b/parm/FV3LAM_wflow_nco.xml
@@ -0,0 +1,3719 @@
+{#
+
+This is a Jinja-enabled Rocoto XML template. It is filled in using the
+fill_template.py script, and is done automatically by the
+generate_workflow.sh step of preparing a regional workflow configured
+experiment.
+
+See README.xml_templating.md for information on using the Templating mechanisms.
+-#}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{%- if is_rtma %}
+
+{%- else %}
+
+{%- endif %}
+
+
+
+
+{%- if partition_default is not none %}
+&ACCOUNT;&QUEUE_DEFAULT;{{ partition_default }}&RRFS_RESERVE;">
+{%- else %}
+&ACCOUNT;&QUEUE_DEFAULT;">
+{%- endif %}
+{%- if partition_forecast is not none %}
+&ACCOUNT;&QUEUE_FORECAST;{{ partition_forecast }}">
+{%- else %}
+&ACCOUNT;&QUEUE_FORECAST;">
+{%- endif %}
+{%- if partition_analysis is not none %}
+&ACCOUNT;&QUEUE_ANALYSIS;{{ partition_analysis }}">
+&ACCOUNT;&QUEUE_ANALYSIS;{{ partition_analysis }}&RRFS_RESERVE;">
+{%- else %}
+&ACCOUNT;&QUEUE_ANALYSIS;">
+&ACCOUNT;&QUEUE_ANALYSIS;">
+{%- endif %}
+{%- if partition_post is not none %}
+&SERVICE_ACCOUNT;&QUEUE_POST;{{ partition_post }}&RRFS_POST_RESERVE;">
+{%- else %}
+&SERVICE_ACCOUNT;&QUEUE_POST;">
+{%- endif %}
+{%- if partition_prdgen is not none %}
+&SERVICE_ACCOUNT;&QUEUE_PRDGEN;{{ partition_prdgen }}&RRFS_POST_RESERVE;">
+{%- else %}
+&SERVICE_ACCOUNT;&QUEUE_PRDGEN;">
+{%- endif %}
+
+
+{{ nnodes_process_smoke }}:ppn={{ ppn_process_smoke }}">
+{{ nnodes_process_radar }}:ppn={{ ppn_process_radar }}">
+{{ nnodes_process_lightning }}:ppn={{ ppn_process_lightning }}">
+{{ nnodes_process_bufr }}:ppn={{ ppn_process_bufr }}">
+{{ nnodes_prep_cyc }}:ppn={{ ppn_prep_cyc }}">
+{{ nnodes_save_restart }}:ppn={{ ppn_save_restart }}">
+{{ nnodes_recenter }}:ppn={{ ppn_recenter }}">
+{{ nnodes_update_lbc_soil }}:ppn={{ ppn_update_lbc_soil }}">
+{{ nnodes_analysis_gsidiag }}:ppn={{ ppn_analysis_gsidiag }}">
+{{ nnodes_prdgen }}:ppn={{ ppn_prdgen }}">
+{{ nnodes_analysis_nonvarcld }}:ppn={{ ppn_analysis_nonvarcld }}">
+
+{%- if machine in ["WCOSS2"] %}
+{{ nnodes_bufrsnd }}:ppn={{ ppn_bufrsnd }}:tpp={{ tpp_bufrsnd }}">
+{{ nnodes_post }}:ppn={{ ppn_post }}:tpp={{ tpp_post }}">
+{{ nnodes_analysis_enkf }}:ppn={{ ppn_analysis_enkf }}:tpp={{ tpp_analysis_enkf }}">
+{{ nnodes_make_ics }}:ppn={{ ppn_make_ics }}:tpp={{ tpp_make_ics }}">
+{{ nnodes_blend_ics }}:ppn={{ ppn_blend_ics }}">
+{{ nnodes_make_lbcs }}:ppn={{ ppn_make_lbcs }}:tpp={{ tpp_make_lbcs }}">
+{{ nnodes_analysis_gsi }}:ppn={{ ppn_analysis_gsi }}:tpp={{ tpp_analysis_gsi }}">
+{{ nnodes_forecast }}:ppn={{ ppn_forecast }}:tpp={{ tpp_forecast }}">
+{{ nnodes_forecast }}:ppn={{ ppn_forecast }}:tpp={{ tpp_forecast }}">
+
+-l place=excl">
+-l place=excl">
+-l place=excl">
+-l place=excl">
+{%- if is_rtma %}
+-l place=excl:scatter">
+{%- endif %}
+{%- elif machine in ["JET"] %}
+{{ nnodes_bufrsnd }}:ppn={{ ppn_bufrsnd }}">
+{{ nnodes_post }}:ppn={{ ppn_post }}">
+{{ nnodes_analysis_enkf }}:ppn={{ ppn_analysis_enkf }}">
+{{ nnodes_make_ics }}:ppn={{ ppn_make_ics }}">
+{{ nnodes_blend_ics }}:ppn={{ ppn_blend_ics }}">
+{{ nnodes_make_lbcs }}:ppn={{ ppn_make_lbcs }}">
+{{ ncores_analysis_gsi }}">
+{{ ncores_forecast }}">
+{{ ncores_forecast }}">
+{{ ncores_per_node }}">
+--export=NONE">
+{{ native_analysis_gsi }} &RRFS_RESERVE;">
+{{ native_forecast }} &RRFS_RESERVE;">
+{{ native_forecast }} &RRFS_RESERVE;">
+{%- elif machine in ["HERA"] %}
+{{ nnodes_bufrsnd }}:ppn={{ ppn_bufrsnd }}">
+{{ nnodes_post }}:ppn={{ ppn_post }}">
+{{ nnodes_analysis_enkf }}:ppn={{ ppn_analysis_enkf }}">
+{{ nnodes_make_ics }}:ppn={{ ppn_make_ics }}">
+{{ nnodes_blend_ics }}:ppn={{ ppn_blend_ics }}">
+{{ nnodes_make_lbcs }}:ppn={{ ppn_make_lbcs }}">
+{{ ncores_analysis_gsi }}">
+{{ nnodes_forecast }}:ppn={{ ppn_forecast }}">
+{{ nnodes_forecast }}:ppn={{ ppn_forecast }}">
+{{ ncores_per_node }}">
+--export=NONE">
+{{ native_analysis_gsi }} &RRFS_RESERVE;">
+
+
+{%- else %}
+{{ nnodes_bufrsnd }}:ppn={{ ppn_bufrsnd }}">
+{{ nnodes_post }}:ppn={{ ppn_post }}">
+{{ nnodes_analysis_enkf }}:ppn={{ ppn_analysis_enkf }}">
+{{ nnodes_make_ics }}:ppn={{ ppn_make_ics }}">
+{{ nnodes_blend_ics }}:ppn={{ ppn_blend_ics }}">
+{{ nnodes_make_lbcs }}:ppn={{ ppn_make_lbcs }}">
+{{ nnodes_analysis_gsi }}:ppn={{ ppn_analysis_gsi }}">
+{{ nnodes_forecast }}:ppn={{ ppn_forecast }}">
+{{ nnodes_forecast }}:ppn={{ ppn_forecast }}">
+{{ ncores_per_node }}">
+--export=NONE">
+
+
+
+{%- endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{ memo_prep_cyc}}">
+
+
+
+
+{%- if do_retro %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{%- else %}
+
+
+
+
+
+
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+@Y@m@d@H@M'>
+{%- endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+]>
+
+{%- if do_retro %}
+
+{% else %}
+
+{%- endif %}
+{# Double quotes are required inside the strftime! Expect an error from reading the template if using single quotes. #}
+ {{ at_start_cycledef }}
+
+ {{ initial_cycledef }}
+ {{ boundary_cycledef }}
+
+ {{ spinup_cycledef }}
+ {{ prod_cycledef }}
+ {{ prodlong_cycledef }}
+
+{%- if do_save_da_output %}
+ {{ saveda_cycledef }}
+{%- endif %}
+ {{ recenter_cycledef }}
+
+
+ &LOGDIR;/FV3LAM_wflow_&TAG;.log
+
+
+
+
+
+
+{%- if run_task_make_grid %}
+
+
+
+ &RSRV_DEFAULT;
+ &LOAD_MODULES_RUN_TASK_FP; "&MAKE_GRID_TN;" "&HOMErrfs;/jobs/JRRFS_MAKE_GRID"
+ {{ nnodes_make_grid }}:ppn={{ ppn_make_grid }}
+ {{ wtime_make_grid }}
+ &NODESIZE_ALL;
+ &TAG;_&MAKE_GRID_TN;
+ &LOGDIR;/&MAKE_GRID_TN;.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&MAKE_GRID_TN;_&envir;_@H
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ envir&envir;
+ KEEPDATAYES
+
+
+{% endif %}
+
+{%- if run_task_make_orog %}
+
+
+
+ &RSRV_DEFAULT;
+ &LOAD_MODULES_RUN_TASK_FP; "&MAKE_OROG_TN;" "&HOMErrfs;/jobs/JRRFS_MAKE_OROG"
+ {{ nnodes_make_orog }}:ppn={{ ppn_make_orog }}
+ {{ wtime_make_orog }}
+ &NODESIZE_ALL;
+ &TAG;_&MAKE_OROG_TN;
+ &LOGDIR;/&MAKE_OROG_TN;.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&MAKE_OROG_TN;_&envir;_@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ envir&envir;
+ KEEPDATAYES
+
+
+
+
+ &RUN_TASK_MAKE_GRID;FALSE
+
+
+
+
+{% endif %}
+
+{%- if run_task_make_sfc_climo %}
+
+
+
+ &RSRV_DEFAULT;
+ &LOAD_MODULES_RUN_TASK_FP; "&MAKE_SFC_CLIMO_TN;" "&HOMErrfs;/jobs/JRRFS_MAKE_SFC_CLIMO"
+ {{ nnodes_make_sfc_climo }}:ppn={{ ppn_make_sfc_climo }}
+ {{ wtime_make_sfc_climo }}
+ &NODESIZE_ALL;
+ &TAG;_&MAKE_SFC_CLIMO_TN;
+ &LOGDIR;/&MAKE_SFC_CLIMO_TN;.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&MAKE_SFC_CLIMO_TN;_&envir;_@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ envir&envir;
+ KEEPDATAYES
+
+
+
+
+
+ &RUN_TASK_MAKE_GRID;FALSE
+
+
+
+ &RUN_TASK_MAKE_OROG;FALSE
+
+
+
+
+
+{% endif %}
+
+
+{%- if not do_ensfcst %}
+
+
+
+{%- if do_spinup %}
+ spinupcyc prodcyc,prodcyc_long
+ spinup prod
+{% else %}
+ prodcyc,prodcyc_long
+ prod
+{%- endif %}
+
+{%- if do_smoke_dust %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PROCESS_SMOKE_TN;" "&HOMErrfs;/jobs/JRRFS_PROCESS_SMOKE"
+
+ &RESOURCES_PROCESS_SMOKE;
+ &NATIVE_ALL;
+ &WALLTIME_PROCESS_SMOKE;
+ &MEMO_PROCESS_SMOKE;
+ &NODESIZE_ALL;
+ &TAG;_&PROCESS_SMOKE_TN;_#type#
+ &LOGDIR;/&PROCESS_SMOKE_TN;_#type#_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&PROCESS_SMOKE_TN;_#type#_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ DCOMROOT&DCOMROOT;
+ CYCLE_TYPE#type#
+ GESROOT&GESROOT;
+ cyc@H
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+ {%- if do_retro %}
+ &FG_ROOT;/&RUN;.@Y@m@d/@H/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+
+
+{%- endif %}
+
+{%- if do_analysis_nonvarcld or do_enkf_radar_ref or do_envar_radar_ref %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_PROCESS_RADAR"
+
+ &RESOURCES_PROCESS_RADAR;
+ &NATIVE_ALL;
+ &WALLTIME_PROCESS_RADAR;
+ &NODESIZE_ALL;
+ &TAG;_&PROCESS_RADAR_TN;_#type#
+ &LOGDIR;/&PROCESS_RADAR_TN;_#type#_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&PROCESS_RADAR_TN;_#type#_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ CYCLE_TYPE#type#
+ RADAR_REF_THINNING{{ radar_ref_thinning }}
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ DCOMROOT&DCOMROOT;
+ cyc@H
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+
+
+
+
+
+{%- if do_glmfed_da %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PROCESS_SMOKE_TN;" "&HOMErrfs;/jobs/JRRFS_PROCESS_LIGHTNING"
+
+ &RESOURCES_PROCESS_LIGHTNING;
+ &NATIVE_ALL;
+ &WALLTIME_PROCESS_LIGHTNING;
+ &NODESIZE_ALL;
+ &TAG;_&PROCESS_LIGHTNING_TN;_#type#
+ &LOGDIR;/&PROCESS_LIGHTNING_TN;_#type#_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&PROCESS_LIGHTNING_TN;_#type#_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ DCOMROOT&DCOMROOT;
+ CYCLE_TYPE#type#
+ cyc@H
+ PREP_MODEL0
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+ @Y@m@d@H@M00
+
+
+
+{%- endif %}
+
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_PROCESS_BUFR"
+
+ &RESOURCES_PROCESS_BUFR;
+ &NATIVE_ALL;
+ &WALLTIME_PROCESS_BUFR;
+ &MEMO_PROCESS_BUFR;
+ &NODESIZE_ALL;
+ &TAG;_&PROCESS_BUFR_TN;_#type#
+ &LOGDIR;/&PROCESS_BUFR_TN;_#type#_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&PROCESS_BUFR_TN;_#type#_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPE#type#
+ cyc@H
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+
+
+
+
+
+{%- endif %}
+
+
+
+{% endif %}
+
+{% if not is_rtma %}
+{%- if do_ensemble %}
+
+
+
+ {%- for m in range(1, num_ens_members+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+ {%- if do_enscontrol %}
+ /gec00{% for m in range(2, num_ens_members+1) %}{{ " /gep%02d"%m }}{% endfor %}
+ _mem0000{% for m in range(2, num_ens_members+1) %}{{ " _mem%04d"%m }}{% endfor %}
+ {%- else %}
+ {% for m in range(1, num_ens_members+1) %}{{ " /gep%02d"%m }}{% endfor %}
+ {% for m in range(1, num_ens_members+1) %}{{ " _mem%04d"%m }}{% endfor %}
+ {% for m in range(1, num_ens_members+1) %}{{ " mem%03d"%m }}{% endfor %}
+ {%- endif %}
+ {% for m in range(1, num_ens_members+1) %}{{ " /mem%03d"%m }}{% endfor %}
+{%- endif %}
+
+{%- if not do_ensfcst %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&MAKE_ICS_TN;" "&HOMErrfs;/jobs/JRRFS_MAKE_ICS"
+ &RESOURCES_MAKE_ICS;
+ &NATIVE_ALL;
+ &WALLTIME_MAKE_ICS;
+ &NODESIZE_ALL;
+ &TAG;_&MAKE_ICS_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&MAKE_ICS_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&MAKE_ICS_TN;{{ uscore_ensmem_name}}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ FG_ROOT&FG_ROOT;
+ EXTRN_MDL_NAME_ICS{{ extrn_mdl_name_ics }}
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GEFS_INPUT_SUBDIR#subdirGE#
+ WRF_MEM_NAME#memNameWRF#
+ GDASENKF_INPUT_SUBDIR#subdirGDAS#
+ GDAS_MEM_NAME#memNameGDAS#
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+ &RUN_TASK_MAKE_GRID;FALSE
+
+
+
+ &RUN_TASK_MAKE_OROG;FALSE
+
+
+
+ &RUN_TASK_MAKE_SFC_CLIMO;FALSE
+
+
+ {%- if machine in ["WCOSS2"] %}
+ {%- if extrn_mdl_name_ics in ["GFS"] %}
+ {%- if do_retro %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {% else %}
+ {{ extrn_mdl_sysbasedir_ics }}/gfs.@Y@m@d/@H/atmos/gfs.t@Hz.atmf{{ "%03d" % extrn_mdl_ics_offset_hrs }}.nc
+ {%- endif %}
+ {%- elif extrn_mdl_name_ics in ["GDASENKF"] %}
+
+ {{ extrn_mdl_sysbasedir_ics }}/enkfgdas.@Y@m@d/@H/atmos/#subdirGDAS#/gdas.t@Hz.atmf00{{ extrn_mdl_ics_offset_hrs }}.nc
+ {{ extrn_mdl_sysbasedir_ics }}/enkfgdas.@Y@m@d/@H/atmos/#subdirGDAS#/gdas.t@Hz.sfcf00{{ extrn_mdl_ics_offset_hrs }}.nc
+
+ {%- elif extrn_mdl_name_ics in ["GEFS"] %}
+ {%- if do_retro %}
+ {{ extrn_mdl_sysbasedir_ics }}/#subdirGE#/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {% else %}
+ {{ extrn_mdl_sysbasedir_ics }}/gefs.@Y@m@d/@H/atmos/pgrb2bp5/#subdirGE#.t@Hz.pgrb2b.0p50.f{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {%- endif %}
+ {% else %}
+ {%- if do_retro %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {% else %}
+ {{ extrn_mdl_sysbasedir_ics }}/gfs.@Y@m@d/@H/atmos/gfs.t@Hz.pgrb2.0p25.f{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {%- endif %}
+ {%- endif %}
+ {% else %}
+ {%- if extrn_mdl_name_ics in ["GEFS"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/#subdirGE#/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {%- elif extrn_mdl_name_ics in ["GDASENKF"] %}
+
+ {%- if machine in ["HERA"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/enkfgdas.@Y@m@d/@H/atmos/#subdirGDAS#/gdas.t@Hz.atmf00{{ extrn_mdl_ics_offset_hrs }}.nc
+ {{ extrn_mdl_sysbasedir_ics }}/enkfgdas.@Y@m@d/@H/atmos/#subdirGDAS#/gdas.t@Hz.sfcf00{{ extrn_mdl_ics_offset_hrs }}.nc
+ {%- elif machine in ["JET"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.atmf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.sfcf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc
+ {%- elif machine in ["ORION","HERCULES"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.atmf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.sfcf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc
+ {%- endif %}
+
+ {%- else %}
+ {%- if machine in ["JET"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {%- elif machine in ["HERA"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {%- elif machine in ["ORION","HERCULES"] %}
+ {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }}
+ {%- endif %}
+ {%- endif %}
+ {%- endif %}
+
+
+
+
+
+
+ {% if do_ens_blending %}
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&BLEND_ICS_TN;" "&HOMErrfs;/jobs/JRRFS_BLEND_ICS"
+ &RESOURCES_BLEND_ICS;
+ &NATIVE_ALL;
+ &WALLTIME_BLEND_ICS;
+ &NODESIZE_ALL;
+ &TAG;_&BLEND_ICS_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&BLEND_ICS_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&MAKE_ICS_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ FG_ROOT&FG_ROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+ {%- if not do_retro %}
+ @Y@m@d@H@M00
+ {%- endif %}
+
+ {%- for mmm in range(1, 31, 1) %}
+ &COMROOT;/&RUN;.@Y@m@d/@H/m{{ "%03d" % mmm }}/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endfor %}
+
+
+
+
+
+
+ {% endif %}
+{% endif %}
+
+
+
+ {% for h in range(0, boundary_proc_group_num) %}{{ " %02d" % h }}{% endfor %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&MAKE_LBCS_TN;" "&HOMErrfs;/jobs/JRRFS_MAKE_LBCS"
+ &RESOURCES_MAKE_LBCS;
+ &NATIVE_ALL;
+ &WALLTIME_MAKE_LBCS;
+ &NODESIZE_ALL;
+ &TAG;_&MAKE_LBCS_TN;_#bcgrp#{{ uscore_ensmem_name }}
+ &LOGDIR;/&MAKE_LBCS_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H_#bcgrp#.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&MAKE_LBCS_TN;{{ uscore_ensmem_name}}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ GESROOT&GESROOT;
+ EXTRN_MDL_NAME_LBCS{{ extrn_mdl_name_lbcs }}
+ BOUNDARY_LEN{{ boundary_len_hrs }}
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GEFS_INPUT_SUBDIR#subdirGE#
+ GDASENKF_INPUT_SUBDIR#subdirGDAS#
+ GDAS_MEM_NAME#memNameGDAS#
+ BCGRP#bcgrp#
+ BCGRPNUM{{ boundary_proc_group_num }}
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+ &RUN_TASK_MAKE_GRID;FALSE
+
+
+
+ &RUN_TASK_MAKE_OROG;FALSE
+
+
+
+ &RUN_TASK_MAKE_SFC_CLIMO;FALSE
+
+
+
+ {%- if extrn_mdl_name_lbcs in ["GEFS"] %}
+ {%- if machine in ["WCOSS2"] %}
+ {%- if do_retro %}
+ {%- for h in range(extrn_mdl_lbcs_offset_hrs, boundary_len_hrs+extrn_mdl_lbcs_offset_hrs+1, 3) %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/#subdirGE#/@y@j@H000{{ "%03d" % h }}
+ {%- endfor %}
+ {% else %}
+ {%- for h in range(extrn_mdl_lbcs_offset_hrs, boundary_len_hrs+extrn_mdl_lbcs_offset_hrs+1, 3) %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/gefs.@Y@m@d/@H/atmos/pgrb2bp5/#subdirGE#.t@Hz.pgrb2b.0p50.f{{ "%03d" % h }}
+ {%- endfor %}
+ {%- endif %}
+ {% else %}
+ {%- for h in range(extrn_mdl_lbcs_offset_hrs, boundary_len_hrs+extrn_mdl_lbcs_offset_hrs+1, 3) %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/#subdirGE#/@y@j@H000{{ "%03d" % h }}
+ {%- endfor %}
+ {%- endif %}
+
+ {%- else %}
+ {%- for h in range(extrn_mdl_lbcs_offset_hrs, boundary_len_hrs+extrn_mdl_lbcs_offset_hrs+1, bc_update_interval) %}
+ {%- if machine in ["WCOSS2"] %}
+ {%- if gfs_file_fmt_lbcs in ["netcdf"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/gfs.@Y@m@d/@H/atmos/gfs.t@Hz.atmf{{ "%03d" % h }}.nc
+ {%- else %}
+ {%- if do_retro %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }}
+ {%- else %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/gfs.@Y@m@d/@H/atmos/gfs.t@Hz.pgrb2.0p25.f{{ "%03d" % h }}
+ {%- endif %}
+ {%- endif %}
+ {%- else %}
+ {%- if extrn_mdl_name_lbcs in ["GEFS"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/#subdirGE#/@y@j@H000{{ "%03d" % h }}
+ {%- elif extrn_mdl_name_lbcs in ["GDASENKF"] %}
+ {%- if machine in ["HERA"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/enkfgdas.@Y@m@d/@H/atmos/#subdirGDAS#/gdas.t@Hz.atmf{{ "%03d" % h }}.nc
+ {{ extrn_mdl_sysbasedir_lbcs }}/enkfgdas.@Y@m@d/@H/atmos/#subdirGDAS#/gdas.t@Hz.sfcf{{ "%03d" % h }}.nc
+ {%- elif machine in ["JET"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.atmf{{ "%03d" % h }}.#memNameGDAS#.nc
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.sfcf{{ "%03d" % h }}.#memNameGDAS#.nc
+ {%- elif machine in ["ORION","HERCULES"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.atmf{{ "%03d" % h }}.#memNameGDAS#.nc
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.sfcf{{ "%03d" % h }}.#memNameGDAS#.nc
+ {%- endif %}
+ {%- else %}
+ {%- if machine in ["JET"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }}
+ {%- elif machine in ["HERA"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }}
+ {%- elif machine in ["ORION","HERCULES"] %}
+ {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }}
+ {%- endif %}
+ {%- endif %}
+ {%- endif %}
+ {%- endfor %}
+
+ {%- endif %}
+
+
+
+
+
+
+
+
+{%- if do_ensemble %}
+
+{%- endif %}
+
+{%- endif %}
+{%- if not do_ensfcst %}
+{%- if do_ensemble %}
+
+
+ {%- for m in range(1, num_ens_members+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+{%- endif %}
+
+{%- if do_spinup %}
+
+{%- if not do_ensinit %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PREP_CYC_TN;" "&HOMErrfs;/jobs/JRRFS_PREP_CYC"
+
+ &RESOURCES_PREP_CYC;
+ &NATIVE_ALL;
+ &WALLTIME_PREP_CYC;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&PREP_CYC_SPINUP_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&PREP_CYC_SPINUP_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ {%- if do_ensinit %}
+ taskid&RUN;_&FORECAST_TN;_ensinit{{ uscore_ensmem_name }}_&envir;_@H
+ {%- else %}
+ taskid&RUN;_&FORECAST_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ {%- endif %}
+ PDY@Y@m@d
+ HH@H
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ FG_ROOT&FG_ROOT;
+ LBCS_ROOT&FG_ROOT;
+ CYCLE_TYPEspinup
+ {%- if do_ensinit %}
+ CYCLE_SUBTYPEensinit
+ {%- endif %}
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+ {%- for h in cycl_hrs_spinstart %}
+ {{ h }}@H
+ {%- endfor %}
+
+ {% if do_ens_blending %}
+
+ {% else %}
+
+ {% endif %}
+
+ {%- for h in range(0,lbcs_search_hrs) %}
+
+ {%- endfor %}
+
+{%- if do_retro %}
+ {%- if not do_ensemble %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/forecast_spinup/INPUT/gfs_ctrl.nc
+ {%- endif %}
+{%- else %}
+ @Y@m@d@H@M00
+{%- endif %}
+
+
+
+ {%- for h in cycl_hrs_spinstart %}
+ {{ h }}@H
+ {%- endfor %}
+{%- if do_retro %}
+{%- else %}
+ @Y@m@d@H@M00
+{%- endif %}
+ {%- if do_ensemble %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/m#mem#/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+
+
+
+
+{%- endif %}
+{% if do_ensinit -%}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PREP_CYC_TN;" "&HOMErrfs;/jobs/JRRFS_PREP_CYC"
+
+ &RESOURCES_PREP_CYC;
+ &NATIVE_ALL;
+ &WALLTIME_PREP_CYC;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&PREP_CYC_SPINUP_TN;_ensinit{{ uscore_ensmem_name }}
+ &LOGDIR;/&PREP_CYC_SPINUP_TN;_ensinit_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_ensinit{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ HH@H
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ FG_ROOT&FG_ROOT;
+ LBCS_ROOT&FG_ROOT;
+ CYCLE_TYPEspinup
+ {%- if do_ensinit %}
+ CYCLE_SUBTYPEensinit
+ {%- endif %}
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ WGF&WGF;
+ envir&envir;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+ {%- for h in cycl_hrs_spinstart %}
+ {{ h }}@H
+ {%- endfor %}
+
+ {% if do_ens_blending %}
+
+ {% else %}
+
+ {% endif %}
+
+ {%- for h in range(0,lbcs_search_hrs) %}
+
+ {%- endfor %}
+
+{%- if do_retro %}
+ {%- if not do_ensemble %}
+ &FG_ROOT;/&RUN;.@Y@m@d/@H/forecast_spinup/INPUT/gfs_ctrl.nc
+ {%- endif %}
+{%- else %}
+ @Y@m@d@H@M00
+{%- endif %}
+
+
+
+ {%- for h in cycl_hrs_spinstart %}
+ {{ h }}@H
+ {%- endfor %}
+{%- if do_retro %}
+ {%- if do_ensemble %}
+ &FG_ROOT;/&RUN;.@Y@m@d/@H/m#mem#/forecast_spinup/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &FG_ROOT;/&RUN;.@Y@m@d/@H/forecast_spinup/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+{%- else %}
+ @Y@m@d@H@M00
+ {%- if do_ensemble %}
+ &FG_ROOT;/&RUN;.@Y@m@d/@H/m#mem#/forecast_spinup/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &FG_ROOT;/&RUN;.@Y@m@d/@H/forecast_spinup/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+{%- endif %}
+
+
+
+
+
+
+
+
+
+ &RSRV_FORECAST;
+ &WALL_LIMIT_FORECAST;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&FORECAST_TN;" "&HOMErrfs;/jobs/JRRFS_FORECAST"
+ &RESOURCES_FORECAST_SPINUP;
+ &WALLTIME_FORECAST_SPINUP;
+ &NATIVE_ALL;
+ &NATIVE_FORECAST_SPINUP;
+ &NODESIZE_ALL;
+ &TAG;_&FORECAST_TN;_ensinit{{ uscore_ensmem_name }}
+ &LOGDIR;/&FORECAST_TN;_ensinit_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_ensinit{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HH@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ CYCLE_TYPEspinup
+ CYCLE_SUBTYPEensinit
+ GESROOT&GESROOT;
+ RESTART_HRS0
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+ {%- for h in cycl_hrs_spinstart %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+
+
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_SAVE_RESTART;
+ &LOAD_MODULES_RUN_TASK_FP; "&SAVE_RESTART_TN;" "&HOMErrfs;/jobs/JRRFS_SAVE_RESTART"
+ &RESOURCES_SAVE_RESTART;
+ &NATIVE_ALL;
+ &WALLTIME_SAVE_RESTART;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&SAVE_RESTART_TN;_ensinit{{ uscore_ensmem_name }}
+ &LOGDIR;/&SAVE_RESTART_TN;_ensinit_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_ensinit{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR0
+ CYCLE_TYPEspinup
+ CYCLE_SUBTYPEensinit
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+
+ &DATAROOT;/&NET;_forecast_spinup_@H_&VERSION;/&WGF;/m#mem#/RESTART/@Y@m@d.@H@M@S.coupler.res
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/m#mem#/run_blending
+
+
+
+
+
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PREP_CYC_TN;" "&HOMErrfs;/jobs/JRRFS_PREP_CYC"
+ &RESOURCES_PREP_CYC;
+ &NATIVE_ALL;
+ &WALLTIME_PREP_CYC;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&PREP_CYC_SPINUP_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&PREP_CYC_SPINUP_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HH@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ FG_ROOT&FG_ROOT;
+ LBCS_ROOT&FG_ROOT;
+ CYCLE_TYPEspinup
+ CYCLE_SUBTYPEspinup
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ ENSCTRL_DATAROOT&ENSCTRL_DATAROOT;
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+ {% if do_ens_blending %}
+
+ {% else %}
+
+ {% endif %}
+
+ &ENSCTRL_COMOUT;/@H_spinup/analysis/analysis_nonvarcld_complete.txt
+
+
+
+
+{%- endif %}
+{%- if do_ens_blending or do_ensinit %}
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_RECENTER;
+ &LOAD_MODULES_RUN_TASK_FP; "&RECENTER_TN;" &HOMErrfs;/jobs/JRRFS_RECENTER
+ &RESOURCES_RECENTER;
+ &NATIVE_ALL;
+ &WALLTIME_RECENTER;
+ &NODESIZE_ALL;
+ &TAG;_&RECENTER_TN;_spinup
+ &LOGDIR;/&RECENTER_TN;_spinup_&TAG;@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&RECENTER_TN;_spinup_&envir;_@H
+ nens{{ num_ens_members }}
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ ENSCTRL_DATAROOT&ENSCTRL_DATAROOT;
+ ENSCTRL_GESROOT&ENSCTRL_GESROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEspinup
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ {%- for m in range(1, num_ens_members+1) %}
+ {%- if do_ensinit %}
+
+ {%- endif %}
+ {%- endfor %}
+ &ENSCTRL_COMOUT;/@H_spinup/analysis/analysis_nonvarcld_complete.txt
+
+
+
+
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_RECENTER;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&RECENTER_TN;" "&HOMErrfs;/jobs/JRRFS_CALC_ENSMEAN"
+ &RESOURCES_RECENTER;
+ &NATIVE_ALL;
+ &WALLTIME_RECENTER;
+ &NODESIZE_ALL;
+ &TAG;_&CALC_ENSMEAN_TN;_spinup
+ &LOGDIR;/&CALC_ENSMEAN_TN;_spinup_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&CALC_ENSMEAN_TN;_spinup_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ CYCLE_TYPEspinup
+ nens{{ num_ens_members }}
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+ &COMROOT;/&RUN;.@Y@m@d/@H/m#mem#/run_blending
+
+
+
+
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&OBSERVER_GSI_TN;_spinup_ensmean
+ &LOGDIR;/&OBSERVER_GSI_TN;_spinup_ensmean_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&OBSERVER_GSI_TN;_spinup_ensmean_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ GSI_TYPEOBSERVER
+ MEM_TYPEMEAN
+ CYCLE_TYPEspinup
+ SATBIAS_DIR&GESROOT;/satbias
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_enkf_radar_ref %}
+
+ {%- endif %}
+
+ &OBSPATH;/@Y@m@d@H.rap.t@Hz.prepbufr.tm00
+ &OBSPATH;/rap.@Y@m@d/rap.t@Hz.prepbufr.tm00
+
+
+
+
+
+
+
+
+ {%- for m in range(1, num_ens_members+1) -%}
+ {%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}
+ {{- fmtstr%m -}}
+ {%- endfor %}
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&OBSERVER_GSI_TN;_spinup{{ uscore_ensmem_name }}
+ &LOGDIR;/&OBSERVER_GSI_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&OBSERVER_GSI_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GSI_TYPEOBSERVER
+ MEM_TYPEMEMBER
+ CYCLE_TYPEspinup
+ SATBIAS_DIR&GESROOT;/satbias
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+
+
+
+
+{%- endif %}
+
+{%- if do_enkfupdate %}
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_ANALYSIS;
+ &LOAD_MODULES_RUN_TASK_FP; "&ENKFUPDT_TN;" &HOMErrfs;/jobs/JRRFS_ANALYSIS_ENKF
+
+ &RESOURCES_ANALYSIS_ENKF;
+ &WALLTIME_ANALYSIS_ENKF;
+ &NODESIZE_ALL;
+ &TAG;_&ENKFUPDT_TN;_spinup
+ &LOGDIR;/&ENKFUPDT_TN;_spinup_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ENKFUPDT_TN;_conv_spinup_&envir;_@H
+ nens{{ num_ens_members }}
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEspinup
+ OB_TYPEconv
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+{%- endif %}
+
+{%- if do_enkf_radar_ref %}
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_ANALYSIS;
+ &LOAD_MODULES_RUN_TASK_FP; "&ENKF_RADAR_REF_TN;" &HOMErrfs;/jobs/JRRFS_ANALYSIS_ENKF
+
+ &RESOURCES_ANALYSIS_ENKF;
+ &WALLTIME_ANALYSIS_ENKF;
+ &NODESIZE_ALL;
+ &TAG;_&ENKF_RADAR_REF_TN;_spinup
+ &LOGDIR;/&ENKF_RADAR_REF_TN;_spinup_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ENKFUPDT_TN;_radardbz_spinup_&envir;_@H
+ nens{{ num_ens_members }}
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEspinup
+ OB_TYPEradardbz
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_retro %}
+
+ {%- for m in range(1, num_ens_members+1) %}
+
+ &GESROOT;/&RUN;.@Y@m@d/@H/m{{ "%03d" % m }}/observer_gsi_spinup/diag_conv_dbz_ges.@Y@m@d@H.nc4.gz
+ {%- endfor %}
+
+ {%- endif %}
+
+
+
+
+{%- endif %}
+
+{% if do_ensemble and do_analysis_nonvarcld %}
+
+
+ {%- for m in range(1, num_ens_members+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_NONVARCLD"
+
+ &RESOURCES_ANALYSIS_NONVARCLD;
+ &WALLTIME_ANALYSIS_NONVARCLD;
+ &NATIVE_ALL;
+ &NODESIZE_ALL;
+
+ &TAG;_&ANALYSIS_NONVARCLD_TN;_spinup{{ uscore_ensmem_name }}
+ &LOGDIR;/&ANALYSIS_NONVARCLD_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_NONVARCLD_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEspinup
+ MEM_TYPEMEMBER
+ cyc@H
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_enkfupdate %}
+
+ {%- if do_enkf_radar_ref %}
+
+ {%- else %}
+
+ {%- endif %}
+
+ {%- elif do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+ {%- else %}
+
+ {%- endif %}
+
+
+
+
+
+{%- endif %}
+
+{%- if not do_ensemble %}
+{%- if do_dacycle %}
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&ANALYSIS_GSI_TN;_spinup{{ uscore_ensmem_name }}
+ &LOGDIR;/&ANALYSIS_GSI_TN;{{ uscore_ensmem_name }}_spinup_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_conv_dbz_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ RRFSE_FG_ROOT&RRFSE_FG_ROOT;
+ CYCLE_TYPEspinup
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ nens{{ num_ens_members }}
+ {%- if do_envar_radar_ref and do_envar_radar_ref_once %}
+ OB_TYPEconv_dbz
+ {%- endif %}
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+
+ {%- if use_rrfse_ens %}
+ {%- if do_retro %}
+
+ {%- if do_envar_radar_ref and do_envar_radar_ref_once %}
+
+ {%- endif %}
+
+
+
+ {%- for h in cycl_hrs_prodstart_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+ {% for h in range(1, num_ens_members+1) %}
+ &RRFSE_FG_ROOT;/&RUNE;.@Y@m@d/@H/m{{ "%03d" % h }}/forecast_spinup/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endfor %}
+
+
+ {%- for h in cycl_hrs_prodstart_ens %}
+ {{ h }}@H
+ {%- endfor %}
+ {% for h in range(1, num_ens_members+1) %}
+ &RRFSE_FG_ROOT;/&RUNE;.@Y@m@d/@H/m{{ "%03d" % h }}/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endfor %}
+
+
+
+ {%- endif %}
+ {%- endif %}
+
+
+
+
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_POST;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&POST_TN;" "&HOMErrfs;/jobs/JRRFS_UPDATE_LBC_SOIL"
+ &RESOURCES_UPDATE_LBC_SOIL;
+ &NATIVE_ALL;
+ &WALLTIME_UPDATE_LBC_SOIL;
+ &NODESIZE_ALL;
+ &TAG;_&UPDATE_LBC_SOIL_TN;_spinup{{ uscore_ensmem_name }}
+ &LOGDIR;/&UPDATE_LBC_SOIL_TN;{{ uscore_ensmem_name }}_spinup_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_conv_dbz_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ RRFSE_FG_ROOT&RRFSE_FG_ROOT;
+ CYCLE_TYPEspinup
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ nens{{ num_ens_members }}
+ {%- if do_envar_radar_ref and do_envar_radar_ref_once %}
+ OB_TYPEconv_dbz
+ {%- endif %}
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+
+{%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&HYBRID_RADAR_REF_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&HYBRID_RADAR_REF_TN;_spinup
+ &LOGDIR;/&HYBRID_RADAR_REF_TN;spinup_&TAG;@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_radardbz_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ RRFSE_FG_ROOT&RRFSE_FG_ROOT;
+ CYCLE_TYPEspinup
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ nens30
+ OB_TYPEradardbz
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+
+
+{% endif -%}
+
+{%- if do_gsidiag_offline %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSIDIAG"
+ &RESOURCES_ANALYSIS_GSIDIAG;
+ &NATIVE_ALL;
+ &WALLTIME_ANALYSIS_GSIDIAG;
+ &NODESIZE_ALL;
+ &TAG;_&ANALYSIS_GSIDIAG_TN;_spinup
+ &LOGDIR;/&ANALYSIS_GSIDIAG_TN;_spinup_&TAG;@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_conv_dbz_spinup_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEspinup
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ SATBIAS_DIR&GESROOT;/satbias
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+{%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+{%- endif %}
+
+
+
+
+
+{%- endif %}
+
+{%- endif %}
+
+{%- if do_analysis_nonvarcld %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_NONVARCLD"
+
+ &RESOURCES_ANALYSIS_NONVARCLD;
+ &WALLTIME_ANALYSIS_NONVARCLD;
+ &NATIVE_ALL;
+ &NODESIZE_ALL;
+
+ &TAG;_&ANALYSIS_NONVARCLD_TN;_spinup{{ uscore_ensmem_name }}
+ &LOGDIR;/&ANALYSIS_NONVARCLD_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_NONVARCLD_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEspinup
+ MEM_TYPEMEMBER
+ cyc@H
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_enkfupdate %}
+
+ {%- if do_enkf_radar_ref %}
+
+ {%- else %}
+
+ {%- endif %}
+
+ {%- elif do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+ {%- else %}
+
+ {%- endif %}
+
+
+
+
+
+{%- endif %}
+{%- endif %}
+
+
+
+ &RSRV_FORECAST;
+ &WALL_LIMIT_FORECAST;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&FORECAST_TN;" "&HOMErrfs;/jobs/JRRFS_FORECAST"
+ &RESOURCES_FORECAST_SPINUP;
+ &WALLTIME_FORECAST_SPINUP;
+ &NATIVE_ALL;
+ &NATIVE_FORECAST_SPINUP;
+ &NODESIZE_ALL;
+ &TAG;_&FORECAST_TN;_spinup{{ uscore_ensmem_name }}
+ &LOGDIR;/&FORECAST_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HH@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ CYCLE_TYPEspinup
+ GESROOT&GESROOT;
+ RESTART_HRS1
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+ {%- if do_dacycle and do_analysis_nonvarcld%}
+
+ {%- elif do_dacycle %}
+ {%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+ {%- else %}
+
+ {%- endif %}
+ {%- elif do_enkfupdate or do_enkf_radar_ref %}
+
+
+ {%- for h in cycl_hrs_spinstart %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+ {%- if do_ensinit or do_ens_blending %}
+
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/m#mem#/run_ensinit
+
+
+
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/m#mem#/run_blending
+
+
+ {%- else %}
+
+ {%- endif %}
+
+
+ {%- else %}
+
+ {%- endif %}
+
+
+
+
+
+
+ {% for h in range(da_cycle_interval_hrs, fcst_len_hrs_spinup+da_cycle_interval_hrs, da_cycle_interval_hrs) %}{{ " %03d" % h }}{% endfor %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_SAVE_RESTART;
+ &LOAD_MODULES_RUN_TASK_FP; "&SAVE_RESTART_TN;" "&HOMErrfs;/jobs/JRRFS_SAVE_RESTART"
+ &RESOURCES_SAVE_RESTART;
+ &NATIVE_ALL;
+ &WALLTIME_SAVE_RESTART;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&SAVE_RESTART_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&SAVE_RESTART_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ GESROOT&GESROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ CYCLE_TYPEspinup
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+ {%- if do_ensemble %}
+ &DATAROOT;/&NET;_forecast_spinup_@H_&VERSION;/&WGF;/m#mem#/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &DATAROOT;/&RUN;_forecast_spinup_@H_&VERSION;/&WGF;/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+
+
+
+
+
+{% if do_post_spinup %}
+
+
+
+ {% for h in range(0, fcst_len_hrs_spinup+1) %}{{ " %03d" % h }}{% endfor %}
+
+
+
+ &RSRV_POST;
+ &WALL_LIMIT_POST;
+ &LOAD_MODULES_RUN_TASK_FP; "&POST_TN;" "&HOMErrfs;/jobs/JRRFS_POST"
+ &RESOURCES_POST;
+ &NATIVE_ALL;
+ &WALLTIME_POST;
+ &NODESIZE_ALL;
+ &TAG;_&POST_TN;_spinup{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&POST_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&POST_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H_f#fhr#
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ CYCLE_TYPEspinup
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+ {%- if do_ensemble %}
+ &DATAROOT;/&RUN;_forecast_spinup_m#mem#_&envir;_@H/log.atm.f#fhr#
+ {%- else %}
+ &DATAROOT;/&RUN;_forecast_spinup_&envir;_@H/log.atm.f#fhr#
+ {%- endif %}
+
+
+
+
+
+
+ &RSRV_PRDGEN;
+ &WALL_LIMIT_POST;
+ &LOAD_MODULES_RUN_TASK_FP; "&PRDGEN_TN;" "&HOMErrfs;/jobs/JRRFS_PRDGEN"
+ &RESOURCES_PRDGEN;
+ &NATIVE_ALL;
+ &WALLTIME_PRDGEN;
+ &MEMO_PRDGEN;
+ &NODESIZE_ALL;
+ &TAG;_&PRDGEN_TN;_spinup{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&PRDGEN_TN;_spinup_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&POST_TN;_spinup{{ uscore_ensmem_name }}_&envir;_@H_f#fhr#
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ CYCLE_TYPEspinup
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+
+
+{%- endif %}
+
+
+{%- endif %}
+
+{%- if do_ensemble %}
+
+{%- endif %}
+
+{%- endif %}
+
+
+{%- if do_ensemble %}
+
+
+ {%- for m in range(1, num_ens_members+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+{%- endif %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PREP_CYC_TN;" "&HOMErrfs;/jobs/JRRFS_PREP_CYC"
+ &RESOURCES_PREP_CYC;
+ &NATIVE_ALL;
+ &WALLTIME_PREP_CYC;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&PREP_CYC_PROD_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&PREP_CYC_PROD_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HH@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ FG_ROOT&FG_ROOT;
+ LBCS_ROOT&FG_ROOT;
+ CYCLE_TYPEprod
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+ {%- if do_ensfcst %}
+
+ &COMROOT;/&NET;/&VERSION;/&RUNE;.@Y@m@d/@H/m#mem#/forecast/DA_OUTPUT/coupler.res
+
+
+ {%- else %}
+
+
+
+
+ {%- for h in cycl_hrs_prodstart %}
+ {{ h }}@H
+ {%- endfor %}
+
+{%- if do_spinup %}
+{%- if do_retro %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+{% else %}
+
+
+ @Y@m@d@H@M00
+ {%- if do_ensemble %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/m#mem#/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+{%- endif %}
+{% else %}
+{%- if do_retro %}
+
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/ics/gfs_data.tile7.halo0.nc
+
+ {%- for h in range(0, extrn_mdl_ics_offset_hrs+1) %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/lbcs/gfs_bndy.tile7.{{ "%03d" % boundary_len_hrs }}.nc
+ {%- endfor %}
+
+
+{% else %}
+
+ @Y@m@d@H@M00
+ {% if do_ens_blending %}
+
+ {% else %}
+
+ {% endif %}
+ {%- if not is_rtma %}
+
+
+
+
+ {%- endif %}
+
+{%- endif %}
+{%- endif %}
+
+
+
+ {%- for h in cycl_hrs_prodstart %}
+ {{ h }}@H
+ {%- endfor %}
+{%- if do_retro %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+{% else %}
+
+
+ @Y@m@d@H@M00
+ {%- if do_ensemble %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/m#mem#/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+{%- endif %}
+
+
+{%- endif %}
+
+
+
+
+{%- if do_ensemble %}
+
+
+{%- if not do_ensfcst %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_PRE;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&PREP_CYC_TN;" "&HOMErrfs;/jobs/JRRFS_PREP_CYC"
+ &RESOURCES_PREP_CYC;
+ &NATIVE_ALL;
+ &WALLTIME_PREP_CYC;
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&PREP_CYC_PROD_TN;_ensmean
+ &LOGDIR;/&PREP_CYC_PROD_TN;_&TAG;_ensmean_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;_ensmean_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HH@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ FG_ROOT&FG_ROOT;
+ LBCS_ROOT&FG_ROOT;
+ CYCLE_TYPEprod
+ MEMBER_NAMEensmean
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+ {%- for h in cycl_hrs_prodstart %}
+ {{ h }}@H
+ {%- endfor %}
+
+{%- if do_spinup %}
+
+
+ @Y@m@d@H@M00
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H_spinup/m001/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+
+
+{% else %}
+{%- if do_retro %}
+
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/ics/gfs_data.tile7.halo0.nc
+
+ {%- for h in range(0, extrn_mdl_ics_offset_hrs+1) %}
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/lbcs/gfs_bndy.tile7.{{ "%03d" % boundary_len_hrs }}.nc
+ {%- endfor %}
+
+
+{% else %}
+
+ @Y@m@d@H@M00
+ {% if do_ens_blending %}
+
+ {% else %}
+
+ {% endif %}
+ {%- if not is_rtma %}
+
+
+
+
+ {%- endif %}
+
+{%- endif %}
+{%- endif %}
+
+
+
+ {%- for h in cycl_hrs_prodstart %}
+ {{ h }}@H
+ {%- endfor %}
+ @Y@m@d@H@M00
+ &COMROOT;/&NET;/&VERSION;/&RUN;.@Y@m@d/@H/m001/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+
+
+
+
+
+
+{%- endif %}
+{%- endif %}
+
+{%- if not do_ensfcst %}
+{%- if do_gsiobserver %}
+
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_RECENTER;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&RECENTER_TN;" "&HOMErrfs;/jobs/JRRFS_CALC_ENSMEAN"
+ &RESOURCES_RECENTER;
+ &NATIVE_ALL;
+ &WALLTIME_RECENTER;
+ &NODESIZE_ALL;
+ &TAG;_&CALC_ENSMEAN_TN;
+ &LOGDIR;/&CALC_ENSMEAN_TN;_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&CALC_ENSMEAN_TN;_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ CYCLE_TYPEprod
+ nens{{ num_ens_members }}
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ {%- for m in range(1, num_ens_members+1) %}
+
+ {%- endfor %}
+
+
+
+
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&OBSERVER_GSI_TN;_ensmean
+ &LOGDIR;/&OBSERVER_GSI_TN;_ensmean_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&OBSERVER_GSI_TN;_ensmean_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ GSI_TYPEOBSERVER
+ MEM_TYPEMEAN
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_enkf_radar_ref %}
+
+ {%- endif %}
+
+ &OBSPATH;/@Y@m@d@H.{{obstype_source}}.t@Hz.prepbufr.tm00
+ &OBSPATH;/{{obstype_source}}.@Y@m@d/{{obstype_source}}.t@Hz.prepbufr.tm00
+
+
+
+
+
+
+ {%- if do_ensemble %}
+
+
+ {%- for m in range(1, num_ens_members+1) -%}
+ {%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}
+ {{- fmtstr%m -}}
+ {%- endfor %}
+ {%- endif %}
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&OBSERVER_GSI_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&OBSERVER_GSI_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&OBSERVER_GSI_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ GSI_TYPEOBSERVER
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+
+
+
+{%- if do_ensemble %}
+
+{%- endif %}
+{%- endif %}
+
+{%- if do_enkfupdate %}
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_ANALYSIS;
+ &LOAD_MODULES_RUN_TASK_FP; "&ENKFUPDT_TN;" &HOMErrfs;/jobs/JRRFS_ANALYSIS_ENKF
+
+ &RESOURCES_ANALYSIS_ENKF;
+ &WALLTIME_ANALYSIS_ENKF;
+ &NODESIZE_ALL;
+ &TAG;_&ENKFUPDT_TN;
+ &LOGDIR;/&ENKFUPDT_TN;_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ENKFUPDT_TN;_conv_&envir;_@H
+ nens{{ num_ens_members }}
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ OB_TYPEconv
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+{%- endif %}
+
+{%- if do_enkf_radar_ref %}
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_ANALYSIS;
+ &LOAD_MODULES_RUN_TASK_FP; "&ENKF_RADAR_REF_TN;" &HOMErrfs;/jobs/JRRFS_ANALYSIS_ENKF
+
+ &RESOURCES_ANALYSIS_ENKF;
+ &WALLTIME_ANALYSIS_ENKF;
+ &NODESIZE_ALL;
+ &TAG;_&ENKF_RADAR_REF_TN;
+ &LOGDIR;/&ENKF_RADAR_REF_TN;_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ENKFUPDT_TN;_radardbz_&envir;_@H
+ nens{{ num_ens_members }}
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ OB_TYPEradardbz
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_retro %}
+
+ {%- for m in range(1, num_ens_members+1) %}
+ &GESROOT;/&RUN;.@Y@m@d/@H/m{{ "%03d" % m }}/observer_gsi/diag_conv_dbz_ges.@Y@m@d@H.nc4.gz
+ {%- endfor %}
+
+ {%- endif %}
+
+
+
+
+{%- endif %}
+
+{% if do_ensemble %}
+
+
+ {%- for m in range(1, num_ens_members+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+{%- endif %}
+
+{%- if do_dacycle %}
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&ANALYSIS_GSI_TN;_prod{{ uscore_ensmem_name }}
+ &LOGDIR;/&ANALYSIS_GSI_TN;_&TAG;{{ uscore_ensmem_name }}_prod_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_conv_dbz{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ RRFSE_FG_ROOT&RRFSE_FG_ROOT;
+ CYCLE_TYPEprod
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ nens{{ num_ens_members }}
+ {%- if do_envar_radar_ref and do_envar_radar_ref_once %}
+ OB_TYPEconv_dbz
+ {%- endif %}
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+
+ &OBSPATH;/@Y@m@d@H.{{obstype_source}}.t@Hz.prepbufr.tm00
+ &OBSPATH;/{{obstype_source}}.@Y@m@d/{{obstype_source}}.t@Hz.prepbufr.tm00
+
+
+ {%- if use_rrfse_ens %}
+ {%- if do_envar_radar_ref and do_envar_radar_ref_once %}
+
+ {%- endif %}
+
+ {%- if do_spinup %}
+
+
+ {%- for h in cycl_hrs_prodstart_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+ {% for h in range(1, num_ens_members+1) %}
+ &RRFSE_FG_ROOT;/&NET;/&VERSION;/&RUNE;.@Y@m@d/@H_spinup/m{{ "%03d" % h }}/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endfor %}
+
+
+ {%- for h in cycl_hrs_prodstart_ens %}
+ {{ h }}@H
+ {%- endfor %}
+ {% for h in range(1, num_ens_members+1) %}
+ &RRFSE_FG_ROOT;/&NET;/&VERSION;/&RUNE;.@Y@m@d/@H/m{{ "%03d" % h }}/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endfor %}
+
+ {%- else %}
+
+ {% for h in range(1, num_ens_members+1) %}
+ &RRFSE_FG_ROOT;/&NET;/&VERSION;/&RUNE;.@Y@m@d/@H/m{{ "%03d" % h }}/forecast/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endfor %}
+
+ {%- endif %}
+
+ {%- endif %}
+
+
+
+
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_POST;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&POST_TN;" "&HOMErrfs;/jobs/JRRFS_UPDATE_LBC_SOIL"
+ &RESOURCES_UPDATE_LBC_SOIL;
+ &NATIVE_ALL;
+ &WALLTIME_UPDATE_LBC_SOIL;
+ &NODESIZE_ALL;
+ &TAG;_&UPDATE_LBC_SOIL_TN;_prod{{ uscore_ensmem_name }}
+ &LOGDIR;/&UPDATE_LBC_SOIL_TN;{{ uscore_ensmem_name }}_prod_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_conv_dbz{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ RRFSE_FG_ROOT&RRFSE_FG_ROOT;
+ CYCLE_TYPEprod
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ nens{{ num_ens_members }}
+ {%- if do_envar_radar_ref and do_envar_radar_ref_once %}
+ OB_TYPEconv_dbz
+ {%- endif %}
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+
+{%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+
+
+ &RSRV_ANALYSIS;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&HYBRID_RADAR_REF_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSI"
+ &RESOURCES_ANALYSIS_GSI;
+ &NATIVE_ANALYSIS_GSI;
+ &WALLTIME_ANALYSIS_GSI;
+ &NODESIZE_ALL;
+ &TAG;_&HYBRID_RADAR_REF_TN;_prod
+ &LOGDIR;/&HYBRID_RADAR_REF_TN;_prod_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_radardbz{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ RRFSE_FG_ROOT&RRFSE_FG_ROOT;
+ CYCLE_TYPEprod
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ SATBIAS_DIR&GESROOT;/satbias
+ nens30
+ OB_TYPEradardbz
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+
+
+{% endif -%}
+
+{%- if do_gsidiag_offline %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_GSIDIAG"
+ &RESOURCES_ANALYSIS_GSIDIAG;
+ &NATIVE_ALL;
+ &WALLTIME_ANALYSIS_GSIDIAG;
+ &NODESIZE_ALL;
+ &TAG;_&ANALYSIS_GSIDIAG_TN;_prod
+ &LOGDIR;/&ANALYSIS_GSIDIAG_TN;prod_&TAG;@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_GSI_TN;_conv_dbz_&envir;_@H
+ PDY@Y@m@d
+ cyc@H
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEprod
+ GSI_TYPEANALYSIS
+ MEM_TYPEMEMBER
+ SATBIAS_DIR&GESROOT;/satbias
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+{%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+{%- endif %}
+
+
+
+
+
+{%- endif %}
+
+{% endif -%}
+
+{%- if do_analysis_nonvarcld %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_ANALYSIS;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&ANALYSIS_GSI_TN;" "&HOMErrfs;/jobs/JRRFS_ANALYSIS_NONVARCLD"
+
+ &RESOURCES_ANALYSIS_NONVARCLD;
+ &WALLTIME_ANALYSIS_NONVARCLD;
+ {%- if is_rtma %}
+ {%- if machine in ["WCOSS2"] %}
+ &NATIVE_ANALYSIS_NONVARCLD;
+ {%- else %}
+ &NATIVE_ALL;
+ {%- endif %}
+ {%- else %}
+ &NATIVE_ALL;
+ {%- endif %}
+ &NODESIZE_ALL;
+
+ &TAG;_&ANALYSIS_NONVARCLD_TN;_prod{{ uscore_ensmem_name }}
+ &LOGDIR;/&ANALYSIS_NONVARCLD_TN;_prod_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&ANALYSIS_NONVARCLD_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ CYCLE_TYPEprod
+ MEM_TYPEMEMBER
+ cyc@H
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+ {%- if do_enkfupdate %}
+
+ {%- if do_enkf_radar_ref %}
+
+ {%- else %}
+
+ {%- endif %}
+
+ {%- elif do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+ {%- for h in cycl_hrs_hyb_fv3lam_ens %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+ {%- else %}
+
+ {%- endif %}
+
+
+
+
+
+{%- endif %}
+
+{%- if do_ensemble %}
+
+{%- endif %}
+{%- endif %}
+
+{%- if do_recenter %}
+
+
+ &RSRV_ENKF;
+ &WALL_LIMIT_RECENTER;
+ &LOAD_MODULES_RUN_TASK_FP; "&RECENTER_TN;" &HOMErrfs;/jobs/JRRFS_RECENTER
+ &RESOURCES_RECENTER;
+ &NATIVE_ALL;
+ &WALLTIME_RECENTER;
+ &NODESIZE_ALL;
+ &TAG;_&RECENTER_TN;
+ &LOGDIR;/&RECENTER_TN;_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&RECENTER_TN;_&envir;_@H
+ nens{{ num_ens_members }}
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ ENSCTRL_DATAROOT&ENSCTRL_DATAROOT;
+ ENSCTRL_GESROOT&ENSCTRL_GESROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ cyc@H
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+ {%- if do_ensfcst %}
+
+ {%- for m in range(1, num_ens_members+1) %}
+
+ {%- endfor %}
+ &ENSCTRL_COMOUT;/@H/forecast/INPUT/coupler.res
+
+ {%- else %}
+
+ {%- if do_analysis_nonvarcld %}
+
+ {%- for m in range(1, num_ens_members+1) %}
+
+ {%- endfor %}
+
+ {%- elif do_enkf_radar_ref %}
+
+ {%- elif do_enkfupdate %}
+
+ {%- endif %}
+
+ &ENSCTRL_COMOUT;/@H/analysis_nonvarcld_complete.txt
+ &ENSCTRL_COMOUT;/@H_spinup/analysis_nonvarcld_complete.txt
+
+
+ {% endif %}
+
+
+
+{%- endif %}
+
+{%- if do_save_da_output and do_ensemble %}
+
+
+
+ {%- for m in range(1, num_ens_members_fcst+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_SAVE_RESTART;
+ &LOAD_MODULES_RUN_TASK_FP; "&SAVE_RESTART_TN;" "&HOMErrfs;/jobs/JRRFS_SAVE_DA_OUTPUT"
+ {{ nnodes_save_restart }}:ppn={{ ppn_save_restart }}
+ {{ wtime_save_restart }}
+ &NODESIZE_ALL;
+ {{ memo_save_da_output }}
+ &TAG;_&SAVE_DA_OUTPUT_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&SAVE_DA_OUTPUT_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ {%- if do_ensfcst %}
+ CYCLE_TYPEenfcst
+ {%- else %}
+ CYCLE_TYPEprod
+ {%- endif %}
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+ {%- if do_ensfcst %}
+
+ {%- else %}
+ {%- if do_recenter %}
+
+
+
+ {%- for h in cycl_hrs_recenter %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+ {%- for h in cycl_hrs_recenter %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+ {%- elif do_analysis_nonvarcld%}
+
+ {%- elif do_enkf_radar_ref %}
+
+ {%- elif do_enkfupdate %}
+
+ {%- endif %}
+ {%- endif %}
+
+
+
+
+{%- endif %}
+
+{% if do_ensemble %}
+
+
+ {%- for m in range(1, num_ens_members+1) -%}{%- set fmtstr=" %0"~ndigits_ensmem_names~"d" -%}{{- fmtstr%m -}}{%- endfor %}
+{%- endif %}
+
+
+ &RSRV_FORECAST;
+ &WALL_LIMIT_FORECAST;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&FORECAST_TN;" "&HOMErrfs;/jobs/JRRFS_FORECAST"
+
+ &RESOURCES_FORECAST_PROD;
+ &WALLTIME_FORECAST_PROD;
+ &NATIVE_ALL;
+ &NATIVE_FORECAST_PROD;
+ &NODESIZE_ALL;
+ &TAG;_&FORECAST_TN;_prod{{ uscore_ensmem_name }}
+ &LOGDIR;/&FORECAST_TN;_prod_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HH@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ CYCLE_TYPEprod
+ GESROOT&GESROOT;
+ RESTART_HRS{{ restart_hrs_prod }}
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+ {%- if do_ensfcst %}
+ {%- if do_recenter %}
+
+ {%- else %}
+
+ {%- endif %}
+ {%- else %}
+ {%- if do_dacycle and do_analysis_nonvarcld%}
+
+ {%- elif do_dacycle %}
+ {%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+ {%- else %}
+
+ {%- endif %}
+ {%- elif do_enkfupdate or do_enkf_radar_ref %}
+ {%- if do_recenter %}
+
+
+
+ {%- for h in cycl_hrs_recenter %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+ {%- for h in cycl_hrs_recenter %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+ {%- elif do_analysis_nonvarcld%}
+
+ {%- elif do_enkf_radar_ref %}
+
+ {%- else %}
+
+ {%- endif %}
+ {%- else %}
+
+ {%- endif %}
+ {%- endif %}
+
+
+
+
+{%- if not do_ensfcst %}
+
+
+
+ &RSRV_FORECAST;
+ &WALL_LIMIT_FORECAST;
+
+ &LOAD_MODULES_RUN_TASK_FP; "&FORECAST_TN;" "&HOMErrfs;/jobs/JRRFS_FORECAST"
+
+ &RESOURCES_FORECAST_PROD;
+ &WALLTIME_FORECAST_PROD_LONG;
+ &NATIVE_ALL;
+ &NATIVE_FORECAST_PROD;
+ &NODESIZE_ALL;
+ &TAG;_&FORECAST_TN;_prod{{ uscore_ensmem_name }}
+ &LOGDIR;/&FORECAST_TN;_prod_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HH@H
+ cyc@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ CYCLE_TYPEprod
+ GESROOT&GESROOT;
+ RESTART_HRS{{ restart_hrs_prod_long }}
+ envir&envir;
+ WGF&WGF;
+ PREDEF_GRID_NAME&GRID_NAME;
+ KEEPDATAYES
+
+
+ {%- if do_dacycle and do_analysis_nonvarcld%}
+
+ {%- elif do_dacycle %}
+ {%- if do_envar_radar_ref and not do_envar_radar_ref_once %}
+
+ {%- else %}
+
+ {%- endif %}
+ {%- elif do_enkfupdate or do_enkf_radar_ref %}
+ {%- if do_recenter %}
+
+
+
+ {%- for h in cycl_hrs_recenter %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+
+ {%- for h in cycl_hrs_recenter %}
+ {{ h }}@H
+ {%- endfor %}
+
+
+
+ {%- elif do_analysis_nonvarcld%}
+
+ {%- elif do_enkf_radar_ref %}
+
+ {%- else %}
+
+ {%- endif %}
+ {%- else %}
+
+ {%- endif %}
+
+
+
+{%- endif %}
+
+{%- if not do_ensfcst %}
+{%- if not is_rtma %}
+
+
+
+ {{ restart_hrs_prod }}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_SAVE_RESTART;
+ &LOAD_MODULES_RUN_TASK_FP; "&SAVE_RESTART_TN;" "&HOMErrfs;/jobs/JRRFS_SAVE_RESTART"
+ {{ nnodes_save_restart }}:ppn={{ ppn_save_restart }}
+ {{ wtime_save_restart }}
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&SAVE_RESTART_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&SAVE_RESTART_TN;_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ GESROOT&GESROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ CYCLE_TYPEprod
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+ {%- if do_ensemble %}
+ &DATAROOT;/&NET;_forecast_@H_&VERSION;/&WGF;/m#mem#/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &DATAROOT;/&RUN;_forecast_@H_&VERSION;/&WGF;/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+
+
+
+
+
+
+ {{ restart_hrs_prod_long }}
+
+
+
+ &RSRV_DEFAULT;
+ &WALL_LIMIT_SAVE_RESTART;
+ &LOAD_MODULES_RUN_TASK_FP; "&SAVE_RESTART_TN;" "&HOMErrfs;/jobs/JRRFS_SAVE_RESTART"
+ {{ nnodes_save_restart }}:ppn={{ ppn_save_restart }}
+ {{ wtime_save_restart }}
+ &NODESIZE_ALL;
+ &MEMO_PREP_CYC;
+ &TAG;_&SAVE_RESTART_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&SAVE_RESTART_TN;_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&FORECAST_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ GESROOT&GESROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ CYCLE_TYPEprod
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+ @Y@m@d@H@M00
+ {%- if do_ensemble %}
+ &DATAROOT;/&NET;_forecast_@H_&VERSION;/&WGF;/m#mem#/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- else %}
+ &DATAROOT;/&RUN;_forecast_@H_&VERSION;/&WGF;/RESTART/@Y@m@d.@H0000.coupler.res
+ {%- endif %}
+
+
+
+
+
+
+{%- endif %}
+{%- endif %}
+
+{%- if do_post_prod %}
+
+
+
+{%- if postproc_nsout_min > 0 %}
+ {%- if postproc_nfhmax_hrs < postproc_len_hrs %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(postproc_nsout_min, postproc_nfhmax_hrs*60, postproc_nsout_min) %}{{ " %03d-%02d-00 " % ( h//60,h-(h//60)*60 ) }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d-00-00 " % h }}{% endfor %}
+ {%- else %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(postproc_nsout_min, postproc_len_hrs*60+1, postproc_nsout_min) %}{{ " %03d-%02d-00 " % ( h//60,h-(h//60)*60 ) }}{% endfor %}
+ {%- endif %}
+{%- else %}
+ {%- if postproc_nfhmax_hrs < postproc_len_hrs %}
+ {% for h in range(0, postproc_nfhmax_hrs,postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d " % h }}{% endfor %}
+ {%- else %}
+ {% for h in range(0, postproc_len_hrs+1, postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- endif %}
+{%- endif %}
+
+
+
+ &RSRV_POST;
+ &WALL_LIMIT_POST;
+ &LOAD_MODULES_RUN_TASK_FP; "&POST_TN;" "&HOMErrfs;/jobs/JRRFS_POST"
+ &RESOURCES_POST;
+ &NATIVE_ALL;
+ &WALLTIME_POST;
+ &NODESIZE_ALL;
+ &TAG;_&POST_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&POST_TN;_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&POST_TN;{{ uscore_ensmem_name }}_&envir;_@H_f#fhr#
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+ {%- if do_ensemble %}
+ &DATAROOT;/&NET;_forecast_@H_&VERSION;/&WGF;/m#mem#/output/log.atm.f#fhr#
+ {%- else %}
+ &DATAROOT;/&RUN;_forecast_@H_&VERSION;/&WGF;/output/log.atm.f#fhr#
+ {%- endif %}
+
+
+
+
+
+{%- if not do_ensfcst %}
+
+
+{%- if postproc_nsout_min > 0 %}
+ {%- if postproc_nfhmax_hrs < postproc_long_len_hrs %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(postproc_nsout_min, postproc_nfhmax_hrs*60, postproc_nsout_min) %}{{ " %03d-%02d-00 " % ( h//60,h-(h//60)*60 ) }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_long_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d-00-00 " % h }}{% endfor %}
+ {%- else %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(postproc_nsout_min, postproc_long_len_hrs*60+1, postproc_nsout_min) %}{{ " %03d-%02d-00 " % ( h//60,h-(h//60)*60 ) }}{% endfor %}
+ {%- endif %}
+{%- else %}
+ {%- if postproc_nfhmax_hrs < postproc_long_len_hrs %}
+ {% for h in range(0, postproc_nfhmax_hrs,postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_long_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d " % h }}{% endfor %}
+ {%- else %}
+ {% for h in range(0, postproc_long_len_hrs+1, postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- endif %}
+{%- endif %}
+
+
+
+ &RSRV_POST;
+ &WALL_LIMIT_POST;
+ &LOAD_MODULES_RUN_TASK_FP; "&POST_TN;" "&HOMErrfs;/jobs/JRRFS_POST"
+ &RESOURCES_POST;
+ &NATIVE_ALL;
+ &WALLTIME_POST;
+ &NODESIZE_ALL;
+ &TAG;_&POST_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&POST_TN;_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&POST_TN;{{ uscore_ensmem_name }}_&envir;_@H_f#fhr#_long
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+ &DATAROOT;/&RUN;_forecast_@H_&VERSION;/&WGF;/output/log.atm.f#fhr#
+
+
+
+
+{%- endif %}
+
+
+
+{%- if postproc_nsout_min > 0 %}
+ {%- if postproc_nfhmax_hrs < postproc_len_hrs %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(1, postproc_nfhmax_hrs, postproc_nfhout_hrs) %}{{ " %03d-%02d-00 " % ( h,0 ) }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d-00-00 " % h }}{% endfor %}
+ {%- else %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(1, postproc_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d-%02d-00 " % ( h,0 ) }}{% endfor %}
+ {%- endif %}
+{%- else %}
+ {%- if postproc_nfhmax_hrs < postproc_len_hrs %}
+ {% for h in range(0, postproc_nfhmax_hrs,postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d " % h }}{% endfor %}
+ {%- else %}
+ {% for h in range(0, postproc_len_hrs+1,postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- endif %}
+{%- endif %}
+
+
+
+ &RSRV_PRDGEN;
+ &WALL_LIMIT_POST;
+ &LOAD_MODULES_RUN_TASK_FP; "&PRDGEN_TN;" "&HOMErrfs;/jobs/JRRFS_PRDGEN"
+ &RESOURCES_PRDGEN;
+ &NATIVE_ALL;
+ &WALLTIME_PRDGEN;
+ &NODESIZE_ALL;
+ &MEMO_PRDGEN;
+ &TAG;_&PRDGEN_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&PRDGEN_TN;_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&POST_TN;{{ uscore_ensmem_name }}_&envir;_@H_f#fhr#
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+
+
+{%- if not do_ensfcst %}
+
+
+{%- if postproc_nsout_min > 0 %}
+ {%- if postproc_nfhmax_hrs < postproc_long_len_hrs %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(1, postproc_nfhmax_hrs, postproc_nfhout_hrs) %}{{ " %03d-%02d-00 " % ( h,0 ) }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_long_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d-00-00 " % h }}{% endfor %}
+ {%- else %}
+ {{ "000-%02d-%02d" % ( dt_atmos//60,dt_atmos%60 ) }} {% for h in range(1, postproc_long_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d-%02d-00 " % ( h,0 ) }}{% endfor %}
+ {%- endif %}
+{%- else %}
+ {%- if postproc_nfhmax_hrs < postproc_long_len_hrs %}
+ {% for h in range(0, postproc_nfhmax_hrs,postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- for h in range(postproc_nfhmax_hrs, postproc_long_len_hrs+1, postproc_nfhout_hrs) %}{{ " %03d " % h }}{% endfor %}
+ {%- else %}
+ {% for h in range(0, postproc_long_len_hrs+1, postproc_nfhout_hf_hrs) %}{{ " %03d" % h }}{% endfor %}
+ {%- endif %}
+{%- endif %}
+
+
+
+ &RSRV_PRDGEN;
+ &WALL_LIMIT_POST;
+ &LOAD_MODULES_RUN_TASK_FP; "&PRDGEN_TN;" "&HOMErrfs;/jobs/JRRFS_PRDGEN"
+ &RESOURCES_PRDGEN;
+ &NATIVE_ALL;
+ &WALLTIME_PRDGEN;
+ &NODESIZE_ALL;
+ &MEMO_PRDGEN;
+ &TAG;_&PRDGEN_TN;{{ uscore_ensmem_name }}_f#fhr#
+ &LOGDIR;/&PRDGEN_TN;_&TAG;{{ uscore_ensmem_name }}_f#fhr#_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&POST_TN;{{ uscore_ensmem_name }}_&envir;_@H_f#fhr#_long
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ FHR#fhr#
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+
+
+
+
+{%- endif %}
+{%- endif %}
+
+{% if do_bufrsnd %}
+
+{%- if not do_ensfcst %}
+
+
+ &RSRV_POST;
+ &WALL_LIMIT_BUFRSND;
+ &LOAD_MODULES_RUN_TASK_FP; "&BUFRSND_TN;" "&HOMErrfs;/jobs/JRRFS_BUFRSND"
+ &RESOURCES_BUFRSND;
+ {{ wtime_bufrsnd }}
+ &NODESIZE_ALL;
+ &TAG;_&BUFRSND_TN;
+ &LOGDIR;/&BUFRSND_TN;_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&BUFRSND_TN;_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ tmmarktm00
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+
+{%- if postproc_nsout_min > 0 %}
+ &DATAROOT;/&RUN;_forecast_&envir;_@H/log.atm.f000-00-36
+{%- else %}
+ &DATAROOT;/&RUN;_forecast_&envir;_@H/log.atm.f000
+{%- endif %}
+
+
+
+
+{%- endif %}
+
+ {%- if do_ensfcst %}
+
+
+ &RSRV_POST;
+ &WALL_LIMIT_BUFRSND;
+ &LOAD_MODULES_RUN_TASK_FP; "&BUFRSND_TN;" "&HOMErrfs;/jobs/JRRFS_BUFRSND"
+ &RESOURCES_BUFRSND;
+ {{ wtime_bufrsnd }}
+ &NODESIZE_ALL;
+ &TAG;_&BUFRSND_TN;{{ uscore_ensmem_name }}
+ &LOGDIR;/&BUFRSND_TN;_&TAG;{{ uscore_ensmem_name }}_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ taskid&RUN;_&BUFRSND_TN;{{ uscore_ensmem_name }}_&envir;_@H
+ PDY@Y@m@d
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ DATAROOT&DATAROOT;
+ GESROOT&GESROOT;
+ COMROOT&COMROOT;
+ MEMBER_NAME#{{ ensmem_indx_name }}#
+ cyc@H
+ tmmarktm00
+ envir&envir;
+ WGF&WGF;
+ KEEPDATAYES
+
+
+ &DATAROOT;/&RUN;_forecast_m#mem#_&envir;_@H/log.atm.f000
+
+
+
+ {%- endif %}
+
+{%- endif %}
+
+{%- if do_ensemble %}
+
+{%- endif %}
+
+{%- if not do_ensfcst %}
+
+
+
+ &RSRV_POST;
+
+ &HOMErrfs;/scripts/exrrfs_clean.ksh
+ 1:ppn=1
+ 00:15:00
+ &TAG;_&CLEAN_TN;
+ &LOGDIR;/&CLEAN_TN;_&TAG;_@Y@m@d@H.log
+
+ GLOBAL_VAR_DEFNS_FP&GLOBAL_VAR_DEFNS_FP;
+ LOGDIR&LOGDIR;
+ CDATE@Y@m@d@H
+ HOMErrfs&HOMErrfs;
+ GESROOT&GESROOT;
+{%- if do_ensemble %}
+ nens{{ num_ens_members }}
+{%- else %}
+ nens0
+{%- endif %}
+
+
+{%- endif %}
+
+
diff --git a/scripts/exrrfs_analysis_enkf.sh b/scripts/exrrfs_analysis_enkf.sh
index 5cdc3876e..f4e78f225 100755
--- a/scripts/exrrfs_analysis_enkf.sh
+++ b/scripts/exrrfs_analysis_enkf.sh
@@ -56,9 +56,7 @@ case $MACHINE in
export OMP_PROC_BIND=close
export OMP_PLACES=threads
export MPICH_RANK_REORDER_METHOD=0
- ncores=160
- PPN_ANALYSIS_ENKF=8
-
+ ncores=$(( PPN_ANALYSIS_ENKF*NNODES_ANALYSIS_ENKF ))
APRUN="mpiexec -n ${ncores} -ppn ${PPN_ANALYSIS_ENKF} --label --line-buffer --cpu-bind core --depth ${OMP_NUM_THREADS}"
;;
#
diff --git a/ush/config_defaults.sh b/ush/config_defaults.sh
index 9adb5b207..c0b2ce554 100644
--- a/ush/config_defaults.sh
+++ b/ush/config_defaults.sh
@@ -334,6 +334,7 @@ RUN="experiment_name"
RUN_ensctrl="experiment_name"
TAG="dev_grid"
WGF="det"
+DCOM_ROOT="/path/of/observation"
PTMP="/base/path/of/directory/containing/postprocessed/output/files"
ENSCTRL_PTMP="/base/path/of/directory/containing/postprocessed/output/files"
GESROOT="/base/path/of/directory/containing/model/output/files"
diff --git a/ush/generate_FV3LAM_wflow_nco.sh b/ush/generate_FV3LAM_wflow_nco.sh
new file mode 100755
index 000000000..89fdc6a3f
--- /dev/null
+++ b/ush/generate_FV3LAM_wflow_nco.sh
@@ -0,0 +1,776 @@
+#!/bin/bash
+#
+#-----------------------------------------------------------------------
+#
+# This file defines and then calls a function that sets up a forecast
+# experiment and creates a workflow (according to the parameters speci-
+# fied in the configuration file; see instructions).
+#
+#-----------------------------------------------------------------------
+#
+function generate_FV3LAM_wflow() {
+#
+#-----------------------------------------------------------------------
+#
+# Get the full path to the file in which this script/function is located
+# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in
+# which the file is located (scrfunc_dir).
+#
+#-----------------------------------------------------------------------
+#
+local scrfunc_fp=$( readlink -f "${BASH_SOURCE[0]}" )
+local scrfunc_fn=$( basename "${scrfunc_fp}" )
+local scrfunc_dir=$( dirname "${scrfunc_fp}" )
+#
+#-----------------------------------------------------------------------
+#
+# Get the name of this function.
+#
+#-----------------------------------------------------------------------
+#
+local func_name="${FUNCNAME[0]}"
+#
+#-----------------------------------------------------------------------
+#
+# Set directories.
+#
+#-----------------------------------------------------------------------
+#
+USHrrfs="${scrfunc_dir}"
+#
+#-----------------------------------------------------------------------
+#
+# Source bash utility functions and other necessary files.
+#
+#-----------------------------------------------------------------------
+#
+. $USHrrfs/source_util_funcs.sh
+. $USHrrfs/set_FV3nml_sfc_climo_filenames.sh
+#
+#-----------------------------------------------------------------------
+#
+# Run python checks
+#
+#-----------------------------------------------------------------------
+#
+
+# This line will return two numbers: the python major and minor versions
+pyversion=($(/usr/bin/env python3 -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor)'))
+
+#Now, set an error check variable so that we can print all python errors rather than just the first
+pyerrors=0
+
+# Check that the call to python3 returned no errors, then check if the
+# python3 minor version is 6 or higher
+if [[ -z "$pyversion" ]];then
+ print_info_msg "\
+
+ Error: python3 not found"
+ pyerrors=$((pyerrors+1))
+else
+ if [[ ${#pyversion[@]} -lt 2 ]]; then
+ print_info_msg "\
+
+ Error retrieving python3 version"
+ pyerrors=$((pyerrors+1))
+ elif [[ ${pyversion[1]} -lt 6 ]]; then
+ print_info_msg "\
+
+ Error: python version must be 3.6 or higher
+ python version: ${pyversion[*]}"
+ pyerrors=$((pyerrors+1))
+ fi
+fi
+
+#Next, check for the non-standard python packages: jinja2, yaml, and f90nml
+pkgs=(jinja2 yaml f90nml)
+for pkg in ${pkgs[@]} ; do
+ if ! /usr/bin/env python3 -c "import ${pkg}" &> /dev/null; then
+ print_info_msg "\
+
+ Error: python module ${pkg} not available"
+ pyerrors=$((pyerrors+1))
+ fi
+done
+
+#Finally, check if the number of errors is >0, and if so exit with helpful message
+if [ $pyerrors -gt 0 ];then
+ print_err_msg_exit "Errors found: check your python environment"
+fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Save current shell options (in a global array). Then set new options
+# for this script/function.
+#
+#-----------------------------------------------------------------------
+#
+{ save_shell_opts; set -u -x; } > /dev/null 2>&1
+#
+#-----------------------------------------------------------------------
+# check whether the .agent link is initialized
+# if not, run Init.sh (otherwise, the workflow generation will fail)
+#-----------------------------------------------------------------------
+#
+#if [[ ! -L ${USHrrfs}/../fix/.agent || ! -e ${USHrrfs}/../fix/.agent ]] \
+# && [ -e ${USHrrfs}/Init.sh ]; then
+# ${USHrrfs}/Init.sh
+#fi
+#
+#-----------------------------------------------------------------------
+#
+# Source the file that defines and then calls the setup function. The
+# setup function in turn first sources the default configuration file
+# (which contains default values for the experiment/workflow parameters)
+# and then sources the user-specified configuration file (which contains
+# user-specified values for a subset of the experiment/workflow parame-
+# ters that override their default values).
+#
+#-----------------------------------------------------------------------
+#
+. $USHrrfs/setup_nco.sh
+#
+#-----------------------------------------------------------------------
+#
+# Set the full path to the experiment's rocoto workflow xml file. This
+# file will be placed at the top level of the experiment directory and
+# then used by rocoto to run the workflow.
+#
+#-----------------------------------------------------------------------
+#
+WFLOW_XML_FP="$EXPTDIR/${WFLOW_XML_FN}"
+#
+#-----------------------------------------------------------------------
+#
+# Create a multiline variable that consists of a yaml-compliant string
+# specifying the values that the jinja variables in the template rocoto
+# XML should be set to. These values are set either in the user-specified
+# workflow configuration file (EXPT_CONFIG_FN) or in the setup.sh script
+# sourced above. Then call the python script that generates the XML.
+#
+#-----------------------------------------------------------------------
+#
+ensmem_indx_name="\"\""
+uscore_ensmem_name="\"\""
+if [ "${DO_ENSEMBLE}" = "TRUE" ]; then
+ ensmem_indx_name="mem"
+ uscore_ensmem_name="_m#${ensmem_indx_name}#"
+fi
+
+settings="\
+#
+# Parameters needed by the job scheduler.
+#
+ 'account': $ACCOUNT
+ 'service_account': ${SERVICE_ACCOUNT:-$ACCOUNT}
+ 'hpss_account': ${HPSS_ACCOUNT:-$SERVICE_ACCOUNT}
+ 'reservation': $RESERVATION
+ 'reservation_post': $RESERVATION_POST
+ 'sched': $SCHED
+ 'partition_default': ${PARTITION_DEFAULT}
+ 'queue_default': ${QUEUE_DEFAULT}
+ 'partition_hpss': ${PARTITION_HPSS}
+ 'queue_hpss': ${QUEUE_HPSS}
+ 'partition_sfc_climo': ${PARTITION_SFC_CLIMO}
+ 'partition_forecast': ${PARTITION_FORECAST}
+ 'queue_forecast': ${QUEUE_FORECAST}
+ 'machine': ${MACHINE}
+ 'partition_analysis': ${PARTITION_ANALYSIS}
+ 'queue_analysis': ${QUEUE_ANALYSIS}
+ 'partition_prdgen': ${PARTITION_PRDGEN}
+ 'queue_prdgen': ${QUEUE_PRDGEN}
+ 'partition_post': ${PARTITION_POST}
+ 'queue_post': ${QUEUE_POST}
+#
+# Workflow task names.
+#
+ 'make_grid_tn': ${MAKE_GRID_TN}
+ 'make_orog_tn': ${MAKE_OROG_TN}
+ 'make_sfc_climo_tn': ${MAKE_SFC_CLIMO_TN}
+ 'make_ics_tn': ${MAKE_ICS_TN}
+ 'blend_ics_tn': ${BLEND_ICS_TN}
+ 'make_lbcs_tn': ${MAKE_LBCS_TN}
+ 'forecast_tn': ${FORECAST_TN}
+ 'post_tn': ${POST_TN}
+ 'prdgen_tn': ${PRDGEN_TN}
+ 'analysis_gsi': ${ANALYSIS_GSI_TN}
+ 'analysis_gsidiag': ${ANALYSIS_GSIDIAG_TN}
+ 'update_lbc_soil': ${UPDATE_LBC_SOIL_TN}
+ 'observer_gsi_ensmean': ${OBSERVER_GSI_ENSMEAN_TN}
+ 'observer_gsi': ${OBSERVER_GSI_TN}
+ 'prep_cyc_spinup': ${PREP_CYC_SPINUP_TN}
+ 'prep_cyc_prod': ${PREP_CYC_PROD_TN}
+ 'prep_cyc': ${PREP_CYC_TN}
+ 'calc_ensmean': ${CALC_ENSMEAN_TN}
+ 'process_radar': ${PROCESS_RADAR_TN}
+ 'process_lightning': ${PROCESS_LIGHTNING_TN}
+ 'process_bufr': ${PROCESS_BUFR_TN}
+ 'process_smoke': ${PROCESS_SMOKE_TN}
+ 'analysis_nonvarcld': ${ANALYSIS_NONVARCLD_TN}
+ 'bufrsnd_tn': ${BUFRSND_TN}
+ 'save_restart': ${SAVE_RESTART_TN}
+ 'save_da_output': ${SAVE_DA_OUTPUT_TN}
+ 'tag': ${TAG}
+ 'net': ${NET}
+ 'run': ${RUN}
+ 'envir': ${envir}
+ 'wgf': ${WGF}
+ 'grid_name': ${PREDEF_GRID_NAME}
+#
+# Number of nodes to use for each task.
+#
+ 'nnodes_make_grid': ${NNODES_MAKE_GRID}
+ 'nnodes_make_orog': ${NNODES_MAKE_OROG}
+ 'nnodes_make_sfc_climo': ${NNODES_MAKE_SFC_CLIMO}
+ 'nnodes_make_ics': ${NNODES_MAKE_ICS}
+ 'nnodes_blend_ics': ${NNODES_BLEND_ICS}
+ 'nnodes_make_lbcs': ${NNODES_MAKE_LBCS}
+ 'nnodes_prep_cyc': ${NNODES_PREP_CYC}
+ 'nnodes_forecast': ${NNODES_FORECAST}
+ 'nnodes_analysis_gsi': ${NNODES_ANALYSIS_GSI}
+ 'nnodes_analysis_gsidiag': ${NNODES_ANALYSIS_GSIDIAG}
+ 'nnodes_update_lbc_soil': ${NNODES_UPDATE_LBC_SOIL}
+ 'nnodes_analysis_enkf': ${NNODES_ANALYSIS_ENKF}
+ 'nnodes_recenter': ${NNODES_RECENTER}
+ 'nnodes_post': ${NNODES_POST}
+ 'nnodes_prdgen': ${NNODES_PRDGEN}
+ 'nnodes_process_radar': ${NNODES_PROCESS_RADAR}
+ 'nnodes_process_lightning': ${NNODES_PROCESS_LIGHTNING}
+ 'nnodes_process_bufr': ${NNODES_PROCESS_BUFR}
+ 'nnodes_process_smoke': ${NNODES_PROCESS_SMOKE}
+ 'nnodes_analysis_nonvarcld': ${NNODES_ANALYSIS_NONVARCLD}
+ 'nnodes_bufrsnd': ${NNODES_BUFRSND}
+ 'nnodes_save_restart': ${NNODES_SAVE_RESTART}
+#
+# Number of cores used for a task
+#
+ 'ncores_forecast': ${PE_MEMBER01}
+ 'native_forecast': ${NATIVE_FORECAST}
+ 'ncores_analysis_gsi': ${NCORES_ANALYSIS_GSI}
+ 'ncores_run_observer': ${NCORES_RUN_OBSERVER}
+ 'native_analysis_gsi': ${NATIVE_ANALYSIS_GSI}
+ 'ncores_analysis_enkf': ${NCORES_ANALYSIS_ENKF}
+ 'native_analysis_enkf': ${NATIVE_ANALYSIS_ENKF}
+#
+# Number of logical processes per node for each task. If running without
+# threading, this is equal to the number of MPI processes per node.
+#
+ 'ppn_make_grid': ${PPN_MAKE_GRID}
+ 'ppn_make_orog': ${PPN_MAKE_OROG}
+ 'ppn_make_sfc_climo': ${PPN_MAKE_SFC_CLIMO}
+ 'ppn_make_ics': ${PPN_MAKE_ICS}
+ 'ppn_blend_ics': ${PPN_BLEND_ICS}
+ 'ppn_make_lbcs': ${PPN_MAKE_LBCS}
+ 'ppn_prep_cyc': ${PPN_PREP_CYC}
+ 'ppn_forecast': ${PPN_FORECAST}
+ 'ppn_analysis_gsi': ${PPN_ANALYSIS_GSI}
+ 'ppn_analysis_gsidiag': ${PPN_ANALYSIS_GSIDIAG}
+ 'ppn_update_lbc_soil': ${PPN_UPDATE_LBC_SOIL}
+ 'ppn_analysis_enkf': ${PPN_ANALYSIS_ENKF}
+ 'ppn_recenter': ${PPN_RECENTER}
+ 'ppn_post': ${PPN_POST}
+ 'ppn_prdgen': ${PPN_PRDGEN}
+ 'ppn_process_radar': ${PPN_PROCESS_RADAR}
+ 'ppn_process_lightning': ${PPN_PROCESS_LIGHTNING}
+ 'ppn_process_bufr': ${PPN_PROCESS_BUFR}
+ 'ppn_process_smoke': ${PPN_PROCESS_SMOKE}
+ 'ppn_analysis_nonvarcld': ${PPN_ANALYSIS_NONVARCLD}
+ 'ppn_bufrsnd': ${PPN_BUFRSND}
+ 'ppn_save_restart': ${PPN_SAVE_RESTART}
+#
+ 'tpp_make_ics': ${TPP_MAKE_ICS}
+ 'tpp_make_lbcs': ${TPP_MAKE_LBCS}
+ 'tpp_analysis_gsi': ${TPP_ANALYSIS_GSI}
+ 'tpp_analysis_enkf': ${TPP_ANALYSIS_ENKF}
+ 'tpp_forecast': ${TPP_FORECAST}
+ 'tpp_post': ${TPP_POST}
+ 'tpp_bufrsnd': ${TPP_BUFRSND}
+#
+# Maximum wallclock time for each task.
+#
+ 'wtime_make_grid': ${WTIME_MAKE_GRID}
+ 'wtime_make_orog': ${WTIME_MAKE_OROG}
+ 'wtime_make_sfc_climo': ${WTIME_MAKE_SFC_CLIMO}
+ 'wtime_make_ics': ${WTIME_MAKE_ICS}
+ 'wtime_blend_ics': ${WTIME_BLEND_ICS}
+ 'wtime_make_lbcs': ${WTIME_MAKE_LBCS}
+ 'wtime_prep_cyc': ${WTIME_PREP_CYC}
+ 'wtime_forecast': ${WTIME_FORECAST}
+ 'wtime_forecast_long': ${WTIME_FORECAST_LONG}
+ 'wtime_forecast_spinup': ${WTIME_FORECAST_SPINUP}
+ 'wtime_analysis_gsi': ${WTIME_ANALYSIS_GSI}
+ 'wtime_analysis_gsidiag': ${WTIME_ANALYSIS_GSIDIAG}
+ 'wtime_update_lbc_soil': ${WTIME_UPDATE_LBC_SOIL}
+ 'wtime_analysis_enkf': ${WTIME_ANALYSIS_ENKF}
+ 'wtime_recenter': ${WTIME_RECENTER}
+ 'wtime_post': ${WTIME_POST}
+ 'wtime_prdgen': ${WTIME_PRDGEN}
+ 'wtime_process_radar': ${WTIME_PROCESS_RADAR}
+ 'wtime_process_lightning': ${WTIME_PROCESS_LIGHTNING}
+ 'wtime_process_bufr': ${WTIME_PROCESS_BUFR}
+ 'wtime_process_smoke': ${WTIME_PROCESS_SMOKE}
+ 'wtime_analysis_nonvarcld': ${WTIME_ANALYSIS_NONVARCLD}
+ 'wtime_bufrsnd': ${WTIME_BUFRSND}
+ 'wtime_save_restart': ${WTIME_SAVE_RESTART}
+#
+# start time for each task.
+#
+ 'start_time_spinup': ${START_TIME_SPINUP}
+ 'start_time_prod': ${START_TIME_PROD}
+ 'start_time_conventional_spinup': ${START_TIME_CONVENTIONAL_SPINUP}
+ 'start_time_blending': ${START_TIME_BLENDING}
+ 'start_time_late_analysis': ${START_TIME_LATE_ANALYSIS}
+ 'start_time_conventional': ${START_TIME_CONVENTIONAL}
+ 'start_time_nsslmosiac': ${START_TIME_NSSLMOSIAC}
+ 'start_time_process_lightning': ${START_TIME_PROCESS_LIGHTNING}
+ 'start_time_process_smoke': ${START_TIME_PROCESS_SMOKE}
+#
+# Maximum memory for each task.
+#
+ 'memo_process_bufr': ${MEMO_PROCESS_BUFR}
+ 'memo_analysis_nonvarcld': ${MEMO_ANALYSIS_NONVARCLD}
+ 'memo_prdgen': ${MEMO_PRDGEN}
+ 'memo_prep_cyc': ${MEMO_PREP_CYC}
+ 'memo_save_restart': ${MEMO_SAVE_RESTART}
+ 'memo_save_input': ${MEMO_SAVE_INPUT}
+ 'memo_process_smoke': ${MEMO_PROCESS_SMOKE}
+ 'memo_process_lightning': ${MEMO_PROCESS_LIGHTNING}
+ 'memo_save_da_output': ${MEMO_SAVE_DA_OUTPUT}
+#
+# Maximum number of tries for each task.
+#
+ 'maxtries_make_grid': ${MAXTRIES_MAKE_GRID}
+ 'maxtries_make_orog': ${MAXTRIES_MAKE_OROG}
+ 'maxtries_make_sfc_climo': ${MAXTRIES_MAKE_SFC_CLIMO}
+ 'maxtries_make_ics': ${MAXTRIES_MAKE_ICS}
+ 'maxtries_blend_ics': ${MAXTRIES_BLEND_ICS}
+ 'maxtries_make_lbcs': ${MAXTRIES_MAKE_LBCS}
+ 'maxtries_prep_cyc': ${MAXTRIES_PREP_CYC}
+ 'maxtries_forecast': ${MAXTRIES_FORECAST}
+ 'maxtries_analysis_gsi': ${MAXTRIES_ANALYSIS_GSI}
+ 'maxtries_update_lbc_soil': ${MAXTRIES_UPDATE_LBC_SOIL}
+ 'maxtries_analysis_enkf': ${MAXTRIES_ANALYSIS_ENKF}
+ 'maxtries_recenter': ${MAXTRIES_RECENTER}
+ 'maxtries_post': ${MAXTRIES_POST}
+ 'maxtries_prdgen': ${MAXTRIES_PRDGEN}
+ 'maxtries_process_radar': ${MAXTRIES_PROCESS_RADAR}
+ 'maxtries_process_lightning': ${MAXTRIES_PROCESS_LIGHTNING}
+ 'maxtries_process_bufr': ${MAXTRIES_PROCESS_BUFR}
+ 'maxtries_process_smoke': ${MAXTRIES_PROCESS_SMOKE}
+ 'maxtries_analysis_nonvarcld': ${MAXTRIES_ANALYSIS_NONVARCLD}
+ 'maxtries_save_restart': ${MAXTRIES_SAVE_RESTART}
+ 'maxtries_save_da_output': ${MAXTRIES_SAVE_DA_OUTPUT}
+#
+# Flags that determine whether to run the specific tasks.
+#
+ 'run_task_make_grid': ${RUN_TASK_MAKE_GRID}
+ 'run_task_make_orog': ${RUN_TASK_MAKE_OROG}
+ 'run_task_make_sfc_climo': ${RUN_TASK_MAKE_SFC_CLIMO}
+ 'run_task_prdgen': ${RUN_TASK_PRDGEN}
+#
+ 'is_rtma': ${IS_RTMA}
+ 'fg_rootdir': ${FG_ROOTDIR}
+#
+# Number of physical cores per node for the current machine.
+#
+ 'ncores_per_node': ${NCORES_PER_NODE}
+#
+# Directories and files.
+#
+ 'homerrfs': $HOMErrfs
+ 'log_basedir': ${LOG_BASEDIR:-}
+ 'dataroot': ${DATAROOT:-}
+ 'ensctrl_dataroot': ${ENSCTRL_DATAROOT:-}
+ 'gesroot': ${GESROOT:-}
+ 'ensctrl_gesroot': ${ENSCTRL_GESROOT:-}
+ 'comroot': ${COMROOT:-}
+ 'dcomroot': ${DCOMROOT:-}
+ 'ensctrl_comout': ${ENSCTRL_COMOUT:-}
+ 'rrfse_gesroot': ${RRFSE_GESROOT:-}
+ 'obstype_source': ${OBSTYPE_SOURCE}
+ 'obspath': ${OBSPATH}
+ 'obspath_pm': ${OBSPATH_PM}
+ 'global_var_defns_fp': ${GLOBAL_VAR_DEFNS_FP}
+ 'load_modules_run_task_fp': ${LOAD_MODULES_RUN_TASK_FP}
+#
+# External model information for generating ICs and LBCs.
+#
+ 'extrn_mdl_name_ics': ${EXTRN_MDL_NAME_ICS}
+ 'extrn_mdl_name_lbcs': ${EXTRN_MDL_NAME_LBCS}
+ 'extrn_mdl_sysbasedir_ics': ${EXTRN_MDL_SYSBASEDIR_ICS}
+ 'extrn_mdl_sysbasedir_lbcs': ${EXTRN_MDL_SYSBASEDIR_LBCS}
+ 'extrn_mdl_ics_offset_hrs': ${EXTRN_MDL_ICS_OFFSET_HRS}
+ 'extrn_mdl_lbcs_offset_hrs': ${EXTRN_MDL_LBCS_OFFSET_HRS}
+ 'extrn_mdl_lbcs_search_offset_hrs': ${EXTRN_MDL_LBCS_SEARCH_OFFSET_HRS}
+ 'lbcs_search_hrs': ${LBCS_SEARCH_HRS}
+ 'bc_update_interval': ${LBC_SPEC_INTVL_HRS}
+ 'gfs_file_fmt_ics': ${GFS_FILE_FMT_ICS}
+ 'gfs_file_fmt_lbcs': ${GFS_FILE_FMT_LBCS}
+#
+# Parameters that determine the set of cycles to run.
+#
+ 'date_first_cycl': ${DATE_FIRST_CYCL}
+ 'date_last_cycl': ${DATE_LAST_CYCL}
+ 'cdate_first_cycl': !datetime ${DATE_FIRST_CYCL}${CYCL_HRS[0]}
+ 'cdate_last_cycl': !datetime ${DATE_LAST_CYCL}${CYCL_HRS[0]}
+ 'cdate_first_arch': !datetime ${DATE_FIRST_CYCL}07
+ 'cdate_last_arch': !datetime ${DATE_LAST_CYCL}07
+ 'cycl_hrs': [ $( printf "\'%s\', " "${CYCL_HRS[@]}" ) ]
+ 'cycl_hrs_spinstart': [ $( printf "\'%s\', " "${CYCL_HRS_SPINSTART[@]}" ) ]
+ 'cycl_hrs_prodstart': [ $( printf "\'%s\', " "${CYCL_HRS_PRODSTART[@]}" ) ]
+ 'cycl_hrs_prodstart_ens': [ $( printf "\'%s\', " "${CYCL_HRS_PRODSTART_ENS[@]}" ) ]
+ 'cycl_hrs_recenter': [ $( printf "\'%s\', " "${CYCL_HRS_RECENTER[@]}" ) ]
+ 'cycl_hrs_stoch': [ $( printf "\'%s\', " "${CYCL_HRS_STOCH[@]}" ) ]
+ 'cycl_hrs_hyb_fv3lam_ens': [ $( printf "\'%s\', " "${CYCL_HRS_HYB_FV3LAM_ENS[@]}" ) ]
+ 'restart_hrs_prod': ${RESTART_INTERVAL}
+ 'restart_hrs_prod_long': ${RESTART_INTERVAL_LONG}
+ 'cycl_freq': !!str 12:00:00
+ 'at_start_cycledef': ${AT_START_CYCLEDEF}
+ 'initial_cycledef': ${INITIAL_CYCLEDEF}
+ 'boundary_cycledef': ${BOUNDARY_CYCLEDEF}
+ 'boundary_long_cycledef': ${BOUNDARY_LONG_CYCLEDEF}
+ 'spinup_cycledef': ${SPINUP_CYCLEDEF}
+ 'prod_cycledef': ${PROD_CYCLEDEF}
+ 'prodlong_cycledef': ${PRODLONG_CYCLEDEF}
+ 'saveda_cycledef': ${SAVEDA_CYCLEDEF}
+ 'recenter_cycledef': ${RECENTER_CYCLEDEF}
+ 'dt_atmos': ${DT_ATMOS}
+#
+# boundary, forecast, and post process length.
+#
+ 'fcst_len_hrs': ${FCST_LEN_HRS}
+ 'fcst_len_hrs_spinup': ${FCST_LEN_HRS_SPINUP}
+ 'boundary_len_hrs': ${BOUNDARY_LEN_HRS}
+ 'boundary_long_len_hrs': ${BOUNDARY_LONG_LEN_HRS}
+ 'postproc_len_hrs': ${POSTPROC_LEN_HRS}
+ 'postproc_long_len_hrs': ${POSTPROC_LONG_LEN_HRS}
+ 'postproc_subh_len_hrs': ${POSTPROC_SUBH_LEN_HRS}
+ 'postproc_nsout_min': ${NSOUT_MIN}
+ 'postproc_nfhmax_hrs': ${NFHMAX_HF}
+ 'postproc_nfhout_hrs': ${NFHOUT}
+ 'postproc_nfhout_hf_hrs': ${NFHOUT_HF}
+ 'boundary_proc_group_num': ${BOUNDARY_PROC_GROUP_NUM}
+#
+# Ensemble-related parameters.
+#
+ 'do_ensemble': ${DO_ENSEMBLE}
+ 'do_ensfcst': ${DO_ENSFCST}
+ 'do_ensfcst_mulphy': ${DO_ENSFCST_MULPHY}
+ 'num_ens_members': ${NUM_ENS_MEMBERS}
+ 'num_ens_members_fcst': ${NUM_ENS_MEMBERS_FCST}
+ 'ndigits_ensmem_names': !!str ${NDIGITS_ENSMEM_NAMES}
+ 'ensmem_indx_name': ${ensmem_indx_name}
+ 'uscore_ensmem_name': ${uscore_ensmem_name}
+ 'do_enscontrol': ${DO_ENSCONTROL}
+ 'do_gsiobserver': ${DO_GSIOBSERVER}
+ 'do_enkfupdate': ${DO_ENKFUPDATE}
+ 'do_enkf_radar_ref': ${DO_ENKF_RADAR_REF}
+ 'do_envar_radar_ref': ${DO_ENVAR_RADAR_REF}
+ 'do_envar_radar_ref_once': ${DO_ENVAR_RADAR_REF_ONCE}
+ 'do_recenter': ${DO_RECENTER}
+ 'do_bufrsnd': ${DO_BUFRSND}
+ 'do_ensinit': ${DO_ENSINIT}
+ 'do_save_da_output': ${DO_SAVE_DA_OUTPUT}
+ 'do_gsidiag_offline': ${DO_GSIDIAG_OFFLINE}
+ 'do_save_input': ${DO_SAVE_INPUT}
+#
+# data assimilation related parameters.
+#
+ 'do_dacycle': ${DO_DACYCLE}
+ 'do_surface_cycle': ${DO_SURFACE_CYCLE}
+ 'da_cycle_interval_hrs': ${DA_CYCLE_INTERV}
+ 'do_analysis_nonvarcld': ${DO_ANALYSIS_NONVARCLD}
+ 'do_spinup': ${DO_SPINUP}
+ 'do_post_spinup': ${DO_POST_SPINUP}
+ 'do_post_prod': ${DO_POST_PROD}
+ 'do_glmfed_da': ${DO_GLM_FED_DA}
+ 'prep_model_for_fed': ${PREP_MODEL_FOR_FED}
+ 'regional_ensemble_option': ${regional_ensemble_option}
+ 'radar_ref_thinning': ${RADAR_REF_THINNING}
+ 'ensctrl_stmp': ${ENSCTRL_STMP}
+ 'use_rrfse_ens': ${USE_RRFSE_ENS}
+#
+# cycle start and end date
+#
+ 'startyear': ${STARTYEAR}
+ 'startmonth': ${STARTMONTH}
+ 'startday': ${STARTDAY}
+ 'starthour': ${STARTHOUR}
+ 'endyear': ${ENDYEAR}
+ 'endmonth': ${ENDMONTH}
+ 'endday': ${ENDDAY}
+ 'endhour': ${ENDHOUR}
+#
+# smoke and dust related parameters.
+#
+ 'do_smoke_dust': ${DO_SMOKE_DUST}
+ 'ebb_dcycle' : ${EBB_DCYCLE}
+#
+# retrospective experiments
+#
+ 'do_retro': ${DO_RETRO}
+#
+# large-scale blending EnKF initialization
+#
+ 'do_ens_blending': ${DO_ENS_BLENDING}
+" # End of "settings" variable.
+
+print_info_msg $VERBOSE "
+The variable \"settings\" specifying values of the rococo XML variables
+has been set as follows:
+#-----------------------------------------------------------------------
+settings =
+$settings"
+
+#
+# Set the full path to the template rocoto XML file. Then call a python
+# script to generate the experiment's actual XML file from this template
+# file.
+#
+template_xml_fp="${PARMrrfs}/${WFLOW_XML_TMPL_FN}"
+$USHrrfs/fill_jinja_template.py -q \
+ -u "${settings}" \
+ -t ${template_xml_fp} \
+ -o ${WFLOW_XML_FP} || \
+ print_err_msg_exit "\
+Call to python script fill_jinja_template.py to create a rocoto workflow
+XML file from a template file failed. Parameters passed to this script
+are:
+ Full path to template rocoto XML file:
+ template_xml_fp = \"${template_xml_fp}\"
+ Full path to output rocoto XML file:
+ WFLOW_XML_FP = \"${WFLOW_XML_FP}\"
+ Namelist settings specified on command line:
+ settings =
+$settings"
+
+#
+#-----------------------------------------------------------------------
+#
+# Create a symlink in the experiment directory that points to the workflow
+# (re)launch script.
+#
+#-----------------------------------------------------------------------
+#
+print_info_msg "
+Creating symlink in the experiment directory (EXPTDIR) that points to the
+workflow launch script (WFLOW_LAUNCH_SCRIPT_FP):
+ EXPTDIR = \"${EXPTDIR}\"
+ WFLOW_LAUNCH_SCRIPT_FP = \"${WFLOW_LAUNCH_SCRIPT_FP}\""
+ln -fs "${WFLOW_LAUNCH_SCRIPT_FP}" "$EXPTDIR"
+
+print_info_msg "Generating an alternate simple launch script
+${EXPTDIR}/run_rocoto.sh"
+
+echo "#!/bin/bash" > ${EXPTDIR}/run_rocoto.sh
+if [[ "${MACHINE,,}" == "wcoss2" ]] ; then
+ export rocoto_ver=1.3.5
+ echo "module use /apps/ops/test/nco/modulefiles" >> ${EXPTDIR}/run_rocoto.sh
+ echo "module load core/rocoto/${rocoto_ver}" >> ${EXPTDIR}/run_rocoto.sh
+else
+ echo "source /etc/profile" >> ${EXPTDIR}/run_rocoto.sh
+ echo "module load rocoto" >> ${EXPTDIR}/run_rocoto.sh
+fi
+echo "rocotorun -w ${WFLOW_XML_FN} -d ${WFLOW_XML_FN%.*}.db" >> ${EXPTDIR}/run_rocoto.sh
+chmod +x ${EXPTDIR}/run_rocoto.sh
+#
+#-----------------------------------------------------------------------
+#
+cp $USHrrfs/${EXPT_CONFIG_FN} $EXPTDIR
+#
+#-----------------------------------------------------------------------
+#
+# For convenience, print out the commands that need to be issued on the
+# command line in order to launch the workflow and to check its status.
+# Also, print out the command that should be placed in the user's cron-
+# tab in order for the workflow to be continually resubmitted.
+#
+#-----------------------------------------------------------------------
+#
+wflow_db_fn="${WFLOW_XML_FN%.xml}.db"
+rocotorun_cmd="rocotorun -w ${WFLOW_XML_FN} -d ${wflow_db_fn} -v 10"
+rocotostat_cmd="rocotostat -w ${WFLOW_XML_FN} -d ${wflow_db_fn} -v 10"
+
+print_info_msg "
+========================================================================
+========================================================================
+
+Workflow generation completed.
+
+========================================================================
+========================================================================
+
+The experiment directory is:
+
+ > EXPTDIR=\"$EXPTDIR\"
+
+"
+
+print_info_msg "\
+To launch the workflow, first ensure that you have a compatible version
+of rocoto loaded. For example, to load version 1.3.1 of rocoto, use
+
+ > module load rocoto/1.3.1
+
+"
+
+print_info_msg "
+To launch the workflow, change location to the experiment directory
+(EXPTDIR) and issue the rocotrun command, as follows:
+
+ > cd $EXPTDIR
+ > ${rocotorun_cmd}
+
+To check on the status of the workflow, issue the rocotostat command
+(also from the experiment directory):
+
+ > ${rocotostat_cmd}
+
+Note that:
+
+1) The rocotorun command must be issued after the completion of each
+ task in the workflow in order for the workflow to submit the next
+ task(s) to the queue.
+
+2) In order for the output of the rocotostat command to be up-to-date,
+ the rocotorun command must be issued immediately before the rocoto-
+ stat command.
+
+For automatic resubmission of the workflow (say every 3 minutes), the
+following line can be added to the user's crontab (use \"crontab -e\" to
+edit the cron table):
+
+*/3 * * * * cd $EXPTDIR && ./run_rocoto.sh
+or
+*/3 * * * * cd $EXPTDIR && ./launch_FV3LAM_wflow.sh
+
+NOTE: '-l' was removed from the first line of launch_FV3LAM_wflow.sh
+It is suggested to add the following line to the top of crontab
+
+SHELL=/bin/bash -l
+
+
+Done.
+"
+#
+#echo -e "../fix/.agent points to " $(readlink -f ${HOMErrfs}/fix/.agent) "\n"
+
+#
+# If necessary, run the NOMADS script to source external model data.
+#
+#if [ "${NOMADS}" = "TRUE" ]; then
+# echo "Getting NOMADS online data"
+# echo "NOMADS_file_type=" $NOMADS_file_type
+# cd $EXPTDIR
+# $USHrrfs/NOMADS_get_extrn_mdl_files.sh $DATE_FIRST_CYCL $CYCL_HRS $NOMADS_file_type $FCST_LEN_HRS $LBC_SPEC_INTVL_HRS
+#fi
+#echo "here 1 "
+#
+#-----------------------------------------------------------------------
+#
+# Restore the shell options saved at the beginning of this script/func-
+# tion.
+#
+#-----------------------------------------------------------------------
+#
+{ restore_shell_opts; } > /dev/null 2>&1
+echo "finished ..."
+
+}
+#
+#-----------------------------------------------------------------------
+#
+# Start of the script that will call the experiment/workflow generation
+# function defined above.
+#
+#-----------------------------------------------------------------------
+#
+set -u
+[[ ! -f config.sh ]] && echo "config.sh not found!" && exit 1
+#
+#-----------------------------------------------------------------------
+#
+# Get the full path to the file in which this script/function is located
+# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in
+# which the file is located (scrfunc_dir).
+#
+#-----------------------------------------------------------------------
+#
+scrfunc_fp=$( readlink -f "${BASH_SOURCE[0]}" )
+scrfunc_fn=$( basename "${scrfunc_fp}" )
+scrfunc_dir=$( dirname "${scrfunc_fp}" )
+#
+#-----------------------------------------------------------------------
+#
+# Set directories.
+#
+#-----------------------------------------------------------------------
+#
+USHrrfs="${scrfunc_dir}"
+#
+# Set the name of and full path to the temporary file in which we will
+# save some experiment/workflow variables. The need for this temporary
+# file is explained below.
+#
+tmp_fn="tmp"
+tmp_fp="$USHrrfs/${tmp_fn}"
+rm -f "${tmp_fp}"
+#
+# Set the name of and full path to the log file in which the output from
+# the experiment/workflow generation function will be saved.
+#
+log_fn="log.generate_FV3LAM_wflow"
+log_fp="$USHrrfs/${log_fn}"
+rm -f "${log_fp}"
+#
+# Call the generate_FV3LAM_wflow function defined above to generate the
+# experiment/workflow. Note that we pipe the output of the function
+# (and possibly other commands) to the "tee" command in order to be able
+# to both save it to a file and print it out to the screen (stdout).
+# The piping causes the call to the function (and the other commands
+# grouped with it using the curly braces, { ... }) to be executed in a
+# subshell. As a result, the experiment/workflow variables that the
+# function sets are not available outside of the grouping, i.e. they are
+# not available at and after the call to "tee". Since some of these va-
+# riables are needed after the call to "tee" below, we save them in a
+# temporary file and read them in outside the subshell later below.
+#
+{
+generate_FV3LAM_wflow 2>&1 # If this exits with an error, the whole {...} group quits, so things don't work...
+retval=$?
+echo "$EXPTDIR" >> "${tmp_fp}"
+echo "$retval" >> "${tmp_fp}"
+} | tee "${log_fp}"
+#
+# Read in experiment/workflow variables needed later below from the tem-
+# porary file created in the subshell above containing the call to the
+# generate_FV3LAM_wflow function. These variables are not directly
+# available here because the call to generate_FV3LAM_wflow above takes
+# place in a subshell (due to the fact that we are then piping its out-
+# put to the "tee" command). Then remove the temporary file.
+#
+exptdir=$( sed "1q;d" "${tmp_fp}" )
+retval=$( sed "2q;d" "${tmp_fp}" )
+rm "${tmp_fp}"
+#
+# If the call to the generate_FV3LAM_wflow function above was success-
+# ful, move the log file in which the "tee" command saved the output of
+# the function to the experiment directory.
+#
+if [ $retval -eq 0 ]; then
+ mv "${log_fp}" "$exptdir"
+#
+# If the call to the generate_FV3LAM_wflow function above was not suc-
+# cessful, print out an error message and exit with a nonzero return
+# code.
+#
+else
+ printf "
+Experiment/workflow generation failed. Check the log file from the ex-
+periment/workflow generation script in the file specified by log_fp:
+ log_fp = \"${log_fp}\"
+Stopping.
+"
+ exit 1
+fi
diff --git a/ush/load_modules_run_task.sh b/ush/load_modules_run_task.sh
new file mode 100755
index 000000000..dfa64fe03
--- /dev/null
+++ b/ush/load_modules_run_task.sh
@@ -0,0 +1,234 @@
+#!/bin/bash
+
+#
+#-----------------------------------------------------------------------
+#
+# Source necessary files.
+#
+#-----------------------------------------------------------------------
+#
+HOMErrfs=${HOMErrfs:-/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0}
+USHrrfs=${HOMErrfs}/ush
+WORKFLOW_MANAGER="rocoto"
+MACHINE="WCOSS2"
+VERBOSE='TRUE'
+
+#### . ${GLOBAL_VAR_DEFNS_FP}
+. $USHrrfs/source_util_funcs.sh
+#
+#-----------------------------------------------------------------------
+#
+# Save current shell options (in a global array). Then set new options
+# for this script/function.
+#
+#-----------------------------------------------------------------------
+#
+{ save_shell_opts; set -u -x; } > /dev/null 2>&1
+#
+#-----------------------------------------------------------------------
+#
+# Get the full path to the file in which this script/function is located
+# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in
+# which the file is located (scrfunc_dir).
+#
+#-----------------------------------------------------------------------
+#
+scrfunc_fp=$( readlink -f "${BASH_SOURCE[0]}" )
+scrfunc_fn=$( basename "${scrfunc_fp}" )
+scrfunc_dir=$( dirname "${scrfunc_fp}" )
+#
+#-----------------------------------------------------------------------
+#
+# Check arguments.
+#
+#-----------------------------------------------------------------------
+#
+if [ "$#" -ne 2 ]; then
+
+ print_err_msg_exit "
+Incorrect number of arguments specified:
+
+ Number of arguments specified: $#
+
+Usage:
+
+ ${scrfunc_fn} task_name jjob_fp
+
+where the arguments are defined as follows:
+
+ task_name:
+ The name of the rocoto task for which this script will load modules
+ and launch the J-job.
+
+ jjob_fp
+ The full path to the J-job script corresponding to task_name. This
+ script will launch this J-job using the \"exec\" command (which will
+ first terminate this script and then launch the j-job; see man page of
+ the \"exec\" command).
+"
+
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Get the task name and the name of the J-job script.
+#
+#-----------------------------------------------------------------------
+#
+task_name="$1"
+jjob_fp="$2"
+#
+#-----------------------------------------------------------------------
+#
+# For NCO mode we need to define job and jobid
+#
+#-----------------------------------------------------------------------
+#
+set +u
+if [ ! -z ${SLURM_JOB_ID} ]; then
+ export job=${SLURM_JOB_NAME}
+ export pid=${pid:-${SLURM_JOB_ID}}
+elif [ ! -z ${PBS_JOBID} ]; then
+ export job=${PBS_JOBNAME}
+ export pid=${pid:-${PBS_JOBID}}
+else
+ export job=${task_name}
+ export pid=${pid:-$$}
+fi
+export jobid=${job}.${pid}
+set -u
+#
+#-----------------------------------------------------------------------
+#
+# Loading ufs-srweather-app build module files
+#
+#-----------------------------------------------------------------------
+#
+default_modules_dir="$HOMErrfs/modulefiles"
+machine=$(echo_lowercase $MACHINE)
+if [ "${WORKFLOW_MANAGER}" != "ecflow" ]; then
+ source "${USHrrfs}/etc/lmod-setup.sh" ${machine}
+fi
+module use "${default_modules_dir}"
+
+if [ "${machine}" != "wcoss2" ]; then
+ BUILD_MOD_FN="build_${machine}_intel"
+ module load "${BUILD_MOD_FN}" || print_err_msg_exit "\
+ Loading of platform- and compiler-specific module file (BUILD_MOD_FN)
+for the workflow task specified by task_name failed:
+ task_name = \"${task_name}\"
+ BUILD_MOD_FN = \"${BUILD_MOD_FN}\""
+fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Set the directory (modules_dir) in which the module files for the va-
+# rious workflow tasks are located. Also, set the name of the module
+# file for the specified task.
+#
+# A module file is a file whose first line is the "magic cookie" string
+# '#%Module'. It is interpreted by the "module load ..." command. It
+# sets environment variables (including prepending/appending to paths)
+# and loads modules.
+#
+# The rrfs-workflow repository contains module files for the workflow
+# tasks in the template rocoto XML file for the FV3-LAM workflow that
+# need modules not loaded in the BUILD_MOD_FN above.
+#
+# The full path to a module file for a given task is
+#
+# $HOMEdir/modulefiles/$machine/${task_name}.local
+#
+# where HOMEdir is the base directory of the workflow, machine is the
+# name of the machine that we're running on (in lowercase), and task_-
+# name is the name of the current task (an input to this script).
+#
+#-----------------------------------------------------------------------
+#
+modules_dir="$default_modules_dir/tasks/$machine"
+modulefile_name="${task_name}"
+#
+#-----------------------------------------------------------------------
+#
+# Load the module file for the specified task on the current machine.
+#
+#-----------------------------------------------------------------------
+#
+print_info_msg "$VERBOSE" "
+Loading modules for task \"${task_name}\" ..."
+
+module use "${modules_dir}" || print_err_msg_exit "\
+Call to \"module use\" command failed."
+
+# source version file (run) only if it is specified in versions directory
+if [ "${machine}" = "wcoss2" ]; then
+ RUN_VER_FN="run.ver"
+ VERSION_FILE="${HOMErrfs}/versions/${RUN_VER_FN}"
+ if [ -f ${VERSION_FILE} ]; then
+ . ${VERSION_FILE}
+ fi
+ module load prod_util/${prod_util_ver}
+ module load prod_envir/${prod_envir_ver}
+fi
+#
+# Load the .local module file if available for the given task
+#
+modulefile_local="${task_name}.local"
+if [ -f ${modules_dir}/${modulefile_local}.lua ]; then
+ module load "${modulefile_local}" || print_err_msg_exit "\
+Loading .local module file (in directory specified by modules_dir) for the
+specified task (task_name) failed:
+ task_name = \"${task_name}\"
+ modulefile_local = \"${modulefile_local}\"
+ modules_dir = \"${modules_dir}\""
+elif [ -f ${modules_dir}/python_srw.lua ] ; then
+ module load python_srw || print_err_msg_exit "\
+ Loading common python module failed. Expected python_srw.lua
+ in the modules directory here:
+ modules_dir = \"${modules_dir}\""
+fi
+
+module list
+
+# Modules that use conda and need an environment activated will set the
+# SRW_ENV variable to the name of the environment to be activated. That
+# must be done within the script, and not inside the module. Do that now.
+
+if [ -n "${SRW_ENV:-}" ] ; then
+ set +u
+ conda activate ${SRW_ENV}
+ set -u
+ conda list
+fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Use the exec command to terminate the current script and launch the
+# J-job for the specified task.
+#
+#-----------------------------------------------------------------------
+#
+print_info_msg "$VERBOSE" "
+Launching J-job (jjob_fp) for task \"${task_name}\" ...
+ jjob_fp = \"${jjob_fp}\"
+"
+
+if [ "${WORKFLOW_MANAGER}" = "ecflow" ]; then
+ /bin/bash "${jjob_fp}"
+ export err=$?
+ [ $err -ne 0 ]&& exit $err
+else
+ exec "${jjob_fp}"
+fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Restore the shell options saved at the beginning of this script/function.
+#
+#-----------------------------------------------------------------------
+#
+{ restore_shell_opts; } > /dev/null 2>&1
+
diff --git a/ush/sample_configs/RRFS_A/config.sh.rrfs_a_c3 b/ush/sample_configs/RRFS_A/config.sh.rrfs_a_c3
index fb65d0ff9..a9b0e6831 100644
--- a/ush/sample_configs/RRFS_A/config.sh.rrfs_a_c3
+++ b/ush/sample_configs/RRFS_A/config.sh.rrfs_a_c3
@@ -1,11 +1,14 @@
MACHINE="wcoss2"
-version="v0.5.2"
+MACHINETYPE="person"
+version="v1.1.3"
ACCOUNT="RRFS_DEV"
#RESERVATION="rrfsdet"
-EXPT_BASEDIR="/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/$version/"
-EXPT_SUBDIR="rrfs_conus"
+EXPT_BASEDIR="/lfs/h2/emc/lam/noscrub/Ming.Hu/rrfs/${version}"
+EXPT_SUBDIR="rrfs_c3"
+WFLOW_XML_TMPL_FN="FV3LAM_wflow_nco.xml"
-PREDEF_GRID_NAME=RRFS_CONUS_3km
+PREDEF_GRID_NAME="RRFS_CONUS_3km"
+#PREDEF_GRID_NAME="RRFS_NA_3km"
. set_rrfs_config_general.sh
. set_rrfs_config_SDL_VDL_MixEn.sh
@@ -22,32 +25,37 @@ DO_RETRO="FALSE"
DO_ANALYSIS_NONVARCLD="TRUE"
DO_ENVAR_RADAR_REF="TRUE"
DO_SMOKE_DUST="TRUE"
+EBB_DCYCLE="2"
RADARREFL_TIMELEVEL=(0)
FH_DFI_RADAR="0.0,0.25,0.5"
DO_SOIL_ADJUST="TRUE"
DO_RADDA="TRUE"
DO_BUFRSND="TRUE"
USE_FVCOM="TRUE"
-PREP_FVCOM="TRUE"
-DO_PARALLEL_PRDGEN="FALSE"
+PREP_FVCOM="FALSE"
+USE_CLM="TRUE"
+DO_PARALLEL_PRDGEN="TRUE"
DO_GSIDIAG_OFFLINE="TRUE"
-USE_CLM="FALSE"
+DO_UPDATE_BC="TRUE"
+DO_GLM_FED_DA="TRUE"
+GLMFED_DATA_MODE="PROD"
EXTRN_MDL_ICS_OFFSET_HRS="3"
LBC_SPEC_INTVL_HRS="1"
EXTRN_MDL_LBCS_OFFSET_HRS="6"
-BOUNDARY_LEN_HRS="72"
-BOUNDARY_PROC_GROUP_NUM="72"
+BOUNDARY_LEN_HRS="24"
+BOUNDARY_PROC_GROUP_NUM="24"
# avaialble retro period:
# 20210511-20210531; 20210718-20210801
-DATE_FIRST_CYCL="20230501"
-DATE_LAST_CYCL="20230531"
+DATE_FIRST_CYCL="20251216"
+DATE_LAST_CYCL="20251216"
CYCL_HRS=( "00" "12" )
CYCL_HRS_SPINSTART=("03" "15")
CYCL_HRS_PRODSTART=("09" "21")
-CYCLEMONTH="05"
-CYCLEDAY="*"
+CYCLEMONTH="12"
+CYCLEDAY="16-16"
+SOIL_SURGERY_time=2023100916
STARTYEAR=${DATE_FIRST_CYCL:0:4}
STARTMONTH=${DATE_FIRST_CYCL:4:2}
@@ -67,54 +75,71 @@ if [[ $DO_SPINUP == "TRUE" ]] ; then
SPINUP_CYCLEDEF="00 03-08,15-20 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
fi
-FCST_LEN_HRS="18"
+FCST_LEN_HRS="03"
FCST_LEN_HRS_SPINUP="1"
#FCST_LEN_HRS_CYCLES=(48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18)
-for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=18; done
-for i in {0..23..6}; do FCST_LEN_HRS_CYCLES[$i]=60; done
+for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=03; done
+for i in {0..23..6}; do FCST_LEN_HRS_CYCLES[$i]=12; done
DA_CYCLE_INTERV="1"
-RESTART_INTERVAL="1 2"
-RESTART_INTERVAL_LONG="1 2"
+RESTART_INTERVAL="1"
+RESTART_INTERVAL_LONG="1 12"
## set up post
-POSTPROC_LEN_HRS="18"
-POSTPROC_LONG_LEN_HRS="60"
-NFHOUT_HF="1"
-# 15 min output upto 18 hours
-#NFHMAX_HF="18"
-#NFHOUT="1"
-#NSOUT="15"
-#NSOUT_MIN="15"
-
-USE_RRFSE_ENS="TRUE"
+POSTPROC_LEN_HRS="03"
+POSTPROC_LONG_LEN_HRS="12"
+POSTPROC_SUBH_LEN_HRS="03"
+
+# default
+OUTPUT_FH="1 -1"
+#set UPP/prodgen for 15 min output
+NFHMAX_HF="03"
+NFHOUT="1"
+NSOUT_MIN="15"
+
+USE_RRFSE_ENS="FALSE"
CYCL_HRS_HYB_FV3LAM_ENS=("00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23")
SST_update_hour=01
GVF_update_hour=04
-SNOWICE_update_hour=00
+SNOWICE_update_hour=01
netcdf_diag=.true.
binary_diag=.false.
+WRTCMP_output_file="netcdf_parallel"
+WRTCMP_ideflate="1"
+WRTCMP_quantize_nsd="18"
-regional_ensemble_option=5
+#LAYOUT_X="43"
+#LAYOUT_Y="64"
+#NNODES_FORECAST="52"
+#WRTCMP_write_groups="3"
+#WRTCMP_write_tasks_per_group="192"
+
+
+regional_ensemble_option=1
+if [[ ${USE_RRFSE_ENS} == "TRUE" ]]; then
+ regional_ensemble_option=5 # 5 for RRFS ensemble
+fi
EXTRN_MDL_NAME_ICS="GFS"
EXTRN_MDL_NAME_LBCS="GFS"
envir="para"
-NET="rrfs_a"
-TAG="c3v52"
+NET="rrfs"
+TAG="c3v112"
-MODEL="rrfs_a"
+MODEL="rrfs"
RUN="rrfs"
+WGF="det"
. set_rrfs_config.sh
-STMP="/lfs/h2/emc/stmp/emc.lam/rrfs/${version}" # Path to directory STMP that mostly contains input files.
-PTMP="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}" # Path to directory STMP that mostly contains input files.
-GESROOT="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
+DCOM_ROOT="/lfs/h1/ops/prod/dcom"
+STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
if [[ ${regional_ensemble_option} == "5" ]]; then
- RRFSE_GESROOT="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}/nwges" # Path to RRFSE directory GESROOT that mostly contains ensemble restart files for GSI hybrid.
+ RRFSE_GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/com" # Path to RRFSE directory GESROOT that mostly contains ensemble restart files for GSI hybrid.
NUM_ENS_MEMBERS=30 # FV3LAM ensemble size for GSI hybrid analysis
- CYCL_HRS_PRODSTART_ENS=( "07" "19" )
+ CYCL_HRS_PRODSTART_ENS=( "08" "20" )
DO_ENVAR_RADAR_REF="TRUE"
fi
diff --git a/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_c3 b/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_c3
index e3299ec8d..145f012eb 100644
--- a/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_c3
+++ b/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_c3
@@ -1,12 +1,13 @@
MACHINE="wcoss2"
-version="v0.5.2"
+MACHINETYPE="person"
+version="v1.1.3"
ACCOUNT="RRFS_DEV"
-#RESERVATION="rrfsens"
-#RESERVATION_POST="rrfsdet"
-EXPT_BASEDIR="/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/${version}/"
-EXPT_SUBDIR="rrfs_conus_enkf"
+#RESERVATION="rrfsdet"
+EXPT_BASEDIR="/lfs/h2/emc/lam/noscrub/Ming.Hu/rrfs/${version}"
+EXPT_SUBDIR="rrfs_c3_enkf"
+WFLOW_XML_TMPL_FN="FV3LAM_wflow_nco.xml"
-PREDEF_GRID_NAME=RRFS_CONUS_3km
+PREDEF_GRID_NAME="RRFS_CONUS_3km"
. set_rrfs_config_general.sh
@@ -29,35 +30,52 @@ DO_SMOKE_DUST="FALSE"
#DO_BUFRSND="TRUE"
#USE_FVCOM="TRUE"
#PREP_FVCOM="TRUE"
+DO_GLM_FED_DA="TRUE"
+GLMFED_DATA_MODE="PROD"
+PREP_MODEL_FOR_FED="TRUE"
+USE_CLM="TRUE"
+DO_PARALLEL_PRDGEN="TRUE"
+DO_GSIDIAG_OFFLINE="FALSE"
+
+# Options for blending or cold2warm start conversion.
+DO_ENS_BLENDING="TRUE"
+if [[ ${DO_ENS_BLENDING} == "TRUE" ]] ; then
+ ENS_BLENDING_LENGTHSCALE=960
+ BLEND="TRUE" # TRUE: Blend RRFS and GDAS EnKF
+ # FALSE: Don't blend, activate cold2warm start only, and use either GDAS or RRFS
+ USE_HOST_ENKF="TRUE" # TRUE: Final EnKF (u,v,t,delp,sphum) will be GDAS (no blending)
+ # FALSE: Final EnKF (u,v,t,delp,sphum) will be RRFS (no blending)
+fi
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
- EXPT_SUBDIR="rrfs_conus_enfcst"
+ EXPT_SUBDIR="rrfs_na_enfcst"
DO_SPINUP="FALSE"
- DO_SAVE_DA_OUTPUT="FALSE"
+ DO_SAVE_DA_OUTPUT="TRUE"
DO_ANALYSIS_NONVARCLD="FALSE"
DO_POST_PROD="TRUE"
+ DO_BUFRSND="TRUE"
fi
-EXTRN_MDL_ICS_OFFSET_HRS="30"
+EXTRN_MDL_ICS_OFFSET_HRS="7"
LBC_SPEC_INTVL_HRS="1"
EXTRN_MDL_LBCS_OFFSET_HRS="6"
BOUNDARY_LEN_HRS="12"
-BOUNDARY_PROC_GROUP_NUM="4"
+BOUNDARY_PROC_GROUP_NUM="12"
# avaialble retro period:
# 20210511-20210531; 20210718-20210801
-DATE_FIRST_CYCL="20230401"
-DATE_LAST_CYCL="20230531"
+DATE_FIRST_CYCL="20251216"
+DATE_LAST_CYCL="20251216"
CYCL_HRS=( "00" "12" )
CYCL_HRS=( "18" )
-CYCL_HRS_SPINSTART=("06" "18")
-CYCL_HRS_PRODSTART=("07" "19")
+CYCL_HRS_SPINSTART=("07" "19")
+CYCL_HRS_PRODSTART=("08" "20")
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
CYCL_HRS_STOCH=("00" "06" "12" "18")
fi
#CYCL_HRS_RECENTER=("19")
-CYCLEMONTH="04,05"
-CYCLEDAY="*"
+CYCLEMONTH="12"
+CYCLEDAY="16-16"
STARTYEAR=${DATE_FIRST_CYCL:0:4}
STARTMONTH=${DATE_FIRST_CYCL:4:2}
@@ -69,26 +87,26 @@ ENDDAY=${DATE_LAST_CYCL:6:2}
ENDHOUR="23"
PREEXISTING_DIR_METHOD="upgrade" # "rename"
-INITIAL_CYCLEDEF="${DATE_FIRST_CYCL}1800 ${DATE_LAST_CYCL}2300 12:00:00"
-BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}1800 ${DATE_LAST_CYCL}2300 06:00:00"
-PROD_CYCLEDEF="00 01-05,07-11,13-17,19-23 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
+INITIAL_CYCLEDEF="${DATE_FIRST_CYCL}0700 ${DATE_LAST_CYCL}2300 12:00:00"
+BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+PROD_CYCLEDEF="00 01-05,08-11,13-17,20-23 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
PRODLONG_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
#RECENTER_CYCLEDEF="00 19 * 10 2022 *"
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
BOUNDARY_LEN_HRS="60"
- LBC_SPEC_INTVL_HRS="1"
+ LBC_SPEC_INTVL_HRS="3"
DO_SPINUP="FALSE"
INITIAL_CYCLEDEF="00 01 01 01 2100 *"
- BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}1200 ${DATE_LAST_CYCL}2300 06:00:00"
- PROD_CYCLEDEF="${DATE_FIRST_CYCL}1200 ${DATE_LAST_CYCL}2300 06:00:00"
+ BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+ PROD_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
PRODLONG_CYCLEDEF="00 01 01 01 2100 *"
- RECENTER_CYCLEDEF="${DATE_FIRST_CYCL}1200 ${DATE_LAST_CYCL}2300 06:00:00"
+ RECENTER_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
fi
if [[ $DO_SPINUP == "TRUE" ]] ; then
- SPINUP_CYCLEDEF="${DATE_FIRST_CYCL}1800 ${DATE_LAST_CYCL}2300 12:00:00"
+ SPINUP_CYCLEDEF="${DATE_FIRST_CYCL}0700 ${DATE_LAST_CYCL}2300 12:00:00"
fi
if [[ $DO_SAVE_DA_OUTPUT == "TRUE" ]] ; then
- SAVEDA_CYCLEDEF="${DATE_FIRST_CYCL}1200 ${DATE_LAST_CYCL}2300 06:00:00"
+ SAVEDA_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
fi
FCST_LEN_HRS="1"
@@ -96,11 +114,11 @@ FCST_LEN_HRS_SPINUP="1"
POSTPROC_LEN_HRS="1"
#FCST_LEN_HRS_CYCLES=(48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18)
for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=1; done
-for i in {0..23..6}; do FCST_LEN_HRS_CYCLES[$i]=1; done
+for i in {0..23..6}; do FCST_LEN_HRS_CYCLES[$i]=1; done
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
- for i in {0..23..06}; do FCST_LEN_HRS_CYCLES[$i]=60; done
- FCST_LEN_HRS="60"
- POSTPROC_LEN_HRS="60"
+ for i in {0..23..06}; do FCST_LEN_HRS_CYCLES[$i]=24; done
+ FCST_LEN_HRS="24"
+ POSTPROC_LEN_HRS="24"
BOUNDARY_PROC_GROUP_NUM="10"
fi
DA_CYCLE_INTERV="1"
@@ -108,30 +126,28 @@ RESTART_INTERVAL="1"
RESTART_INTERVAL_LONG="1"
netcdf_diag=.true.
binary_diag=.false.
+WRTCMP_output_file="netcdf_parallel"
+WRTCMP_ideflate="1"
+WRTCMP_quantize_nsd="18"
## set up post
-#NFHOUT_HF="1"
-#NFHMAX_HF="18"
-#NFHOUT="3"
+OUTPUT_FH="1 -1"
WTIME_FORECAST="00:30:00"
WTIME_FORECAST_LONG="03:45:00"
+#PPN_ANALYSIS_GSI="16"
NNODES_ANALYSIS_GSI="1"
+#TPP_ANALYSIS_GSI="8"
-EXTRN_MDL_NAME_ICS="GEFS"
+EXTRN_MDL_NAME_ICS="GDASENKF"
EXTRN_MDL_NAME_LBCS="GEFS"
-EXTRN_MDL_SOURCE_BASEDIR_ICS="/mnt/lfs4/BMC/wrfruc/RRFSE/data/gens"
-EXTRN_MDL_SOURCE_BASEDIR_LBCS="/mnt/lfs4/BMC/wrfruc/RRFSE/data/gens"
-
-GFS_FILE_FMT_ICS="grib2"
+GFS_FILE_FMT_ICS="netcdf"
GFS_FILE_FMT_LBCS="grib2"
envir="para"
-NET="rrfs_a"
-MODEL="rrfs_b"
+NET="rrfs"
+MODEL="RRFS"
-SPPINT=36
-LNDPINT=180
if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then
NUM_ENS_MEMBERS=30
# DO_ENSCONTROL="TRUE"
@@ -151,9 +167,13 @@ if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then
START_TIME_SPINUP="00:30:00"
LAYOUT_X="11"
LAYOUT_Y="32"
- NNODES_FORECAST="6"
+ NNODES_FORECAST="3"
+ PPN_FORECAST="128"
+ TPP_FORECAST="1"
+ WRTCMP_write_groups="1"
+ WRTCMP_write_tasks_per_group="32"
- NUM_ENS_MEMBERS_FCST=9
+ NUM_ENS_MEMBERS_FCST=5
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
NUM_ENS_MEMBERS=${NUM_ENS_MEMBERS_FCST}
WTIME_FORECAST="04:45:00"
@@ -162,36 +182,49 @@ if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then
LAYOUT_X="31"
LAYOUT_Y="32"
NNODES_FORECAST="16"
+# WRTCMP_write_groups="1"
+# WRTCMP_write_tasks_per_group="128"
+ DO_ENSFCST_MULPHY="TRUE"
DO_SPP="TRUE"
- DO_SPPT="TRUE"
+ DO_SPPT="FALSE"
DO_SKEB="FALSE"
- SPPT_MAG="0.7"
+ SPPT_MAG="0.5"
DO_LSM_SPP="TRUE"
DO_RECENTER="TRUE"
fi
- PPN_RECENTER="$(( ${NUM_ENS_MEMBERS} + 1 ))"
- NNODES_RECENTER="3"
+ PPN_RECENTER="128"
+ NNODES_RECENTER="5"
fi
+SPPINT=36
+LNDPINT=180
+
RUN_ensctrl="rrfs"
RUN="enkfrrfs"
-TAG="c3enkf52"
+TAG="c3enkf112"
+WGF="enkf"
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
RUN="refs"
- TAG="c3enfcst52"
+ TAG="c3enfcst112"
+ WGF="ensf"
fi
. set_rrfs_config.sh
-STMP="/lfs/h2/emc/stmp/emc.lam/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+EXTRN_MDL_SOURCE_BASEDIR_ICS=/lfs/h1/ops/prod/com/gefs/v12.3
+EXTRN_MDL_SOURCE_BASEDIR_LBCS=/lfs/h1/ops/prod/com/gefs/v12.3
+
+DCOM_ROOT="/lfs/h1/ops/prod/dcom"
+STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
- STMP="/lfs/h2/emc/stmp/emc.lam/rrfs/${version}/enfcst" # Path to directory STMP that mostly contains input files.
+ STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+ PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+ GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
fi
-PTMP="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}" # Path to directory STMP that mostly contains input files.
-GESROOT="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
-ENSCTRL_STMP="/lfs/h2/emc/stmp/emc.lam/rrfs/${version}" # Path to directory STMP that mostly contains control input files for ensemble recentering.
-ENSCTRL_PTMP="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}" # Path to directory STMP that mostly contains control input files for ensemble recentering.
-ENSCTRL_GESROOT="/lfs/h2/emc/ptmp/emc.lam/rrfs/${version}/nwges" # Path to directory STMP that mostly contains control input files for ensemble recentering.
-
+ENSCTRL_STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains control input files for ensemble recentering.
+ENSCTRL_PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains control input files for ensemble recentering.
+ENSCTRL_GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory STMP that mostly contains control input files for ensemble recentering.
diff --git a/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_n3_nco b/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_n3_nco
new file mode 100644
index 000000000..e1cde812a
--- /dev/null
+++ b/ush/sample_configs/RRFS_A/config.sh_rrfs_a_enkf_n3_nco
@@ -0,0 +1,228 @@
+MACHINE="wcoss2"
+MACHINETYPE="person"
+version="v1.1.3"
+ACCOUNT="RRFS_DEV"
+#RESERVATION="rrfsdet"
+EXPT_BASEDIR="/lfs/h2/emc/lam/noscrub/Ming.Hu/rrfs/${version}"
+EXPT_SUBDIR="rrfs_na_enkf"
+WFLOW_XML_TMPL_FN="FV3LAM_wflow_nco.xml"
+
+PREDEF_GRID_NAME="RRFS_NA_3km"
+
+. set_rrfs_config_general.sh
+
+DO_ENSEMBLE="TRUE"
+#DO_ENSFCST="TRUE"
+#DO_DACYCLE="TRUE"
+#DO_SURFACE_CYCLE="TRUE"
+DO_SPINUP="TRUE"
+DO_SAVE_DA_OUTPUT="TRUE"
+DO_POST_SPINUP="FALSE"
+DO_POST_PROD="FALSE"
+#DO_RETRO="TRUE"
+DO_ANALYSIS_NONVARCLD="TRUE"
+#DO_ENVAR_RADAR_REF="TRUE"
+DO_SMOKE_DUST="FALSE"
+#RADARREFL_TIMELEVEL=(0)
+#FH_DFI_RADAR="0.0,0.25,0.5"
+#DO_SOIL_ADJUST="TRUE"
+#DO_RADDA="FALSE"
+#DO_BUFRSND="TRUE"
+#USE_FVCOM="TRUE"
+#PREP_FVCOM="TRUE"
+DO_GLM_FED_DA="TRUE"
+GLMFED_DATA_MODE="PROD"
+PREP_MODEL_FOR_FED="TRUE"
+USE_CLM="TRUE"
+DO_PARALLEL_PRDGEN="TRUE"
+DO_GSIDIAG_OFFLINE="FALSE"
+
+# Options for blending or cold2warm start conversion.
+DO_ENS_BLENDING="TRUE"
+if [[ ${DO_ENS_BLENDING} == "TRUE" ]] ; then
+ ENS_BLENDING_LENGTHSCALE=960
+ BLEND="TRUE" # TRUE: Blend RRFS and GDAS EnKF
+ # FALSE: Don't blend, activate cold2warm start only, and use either GDAS or RRFS
+ USE_HOST_ENKF="TRUE" # TRUE: Final EnKF (u,v,t,delp,sphum) will be GDAS (no blending)
+ # FALSE: Final EnKF (u,v,t,delp,sphum) will be RRFS (no blending)
+fi
+
+if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ EXPT_SUBDIR="rrfs_na_enfcst"
+ DO_SPINUP="FALSE"
+ DO_SAVE_DA_OUTPUT="TRUE"
+ DO_ANALYSIS_NONVARCLD="FALSE"
+ DO_POST_PROD="TRUE"
+ DO_BUFRSND="TRUE"
+fi
+
+EXTRN_MDL_ICS_OFFSET_HRS="7"
+LBC_SPEC_INTVL_HRS="1"
+EXTRN_MDL_LBCS_OFFSET_HRS="6"
+BOUNDARY_LEN_HRS="12"
+BOUNDARY_PROC_GROUP_NUM="12"
+
+# avaialble retro period:
+# 20210511-20210531; 20210718-20210801
+DATE_FIRST_CYCL="20251210"
+DATE_LAST_CYCL="20251211"
+CYCL_HRS=( "00" "12" )
+CYCL_HRS=( "18" )
+CYCL_HRS_SPINSTART=("07" "19")
+CYCL_HRS_PRODSTART=("08" "20")
+if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ CYCL_HRS_STOCH=("00" "06" "12" "18")
+fi
+#CYCL_HRS_RECENTER=("19")
+CYCLEMONTH="12"
+CYCLEDAY="10-11"
+
+STARTYEAR=${DATE_FIRST_CYCL:0:4}
+STARTMONTH=${DATE_FIRST_CYCL:4:2}
+STARTDAY=${DATE_FIRST_CYCL:6:2}
+STARTHOUR="00"
+ENDYEAR=${DATE_LAST_CYCL:0:4}
+ENDMONTH=${DATE_LAST_CYCL:4:2}
+ENDDAY=${DATE_LAST_CYCL:6:2}
+ENDHOUR="23"
+
+PREEXISTING_DIR_METHOD="upgrade" # "rename"
+INITIAL_CYCLEDEF="${DATE_FIRST_CYCL}0700 ${DATE_LAST_CYCL}2300 12:00:00"
+BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+PROD_CYCLEDEF="00 01-05,08-11,13-17,20-23 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
+PRODLONG_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+#RECENTER_CYCLEDEF="00 19 * 10 2022 *"
+if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ BOUNDARY_LEN_HRS="60"
+ LBC_SPEC_INTVL_HRS="3"
+ DO_SPINUP="FALSE"
+ INITIAL_CYCLEDEF="00 01 01 01 2100 *"
+ BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+ PROD_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+ PRODLONG_CYCLEDEF="00 01 01 01 2100 *"
+ RECENTER_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+fi
+if [[ $DO_SPINUP == "TRUE" ]] ; then
+ SPINUP_CYCLEDEF="${DATE_FIRST_CYCL}0700 ${DATE_LAST_CYCL}2300 12:00:00"
+fi
+if [[ $DO_SAVE_DA_OUTPUT == "TRUE" ]] ; then
+ SAVEDA_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+fi
+
+FCST_LEN_HRS="1"
+FCST_LEN_HRS_SPINUP="1"
+POSTPROC_LEN_HRS="1"
+#FCST_LEN_HRS_CYCLES=(48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18)
+for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=1; done
+for i in {0..23..6}; do FCST_LEN_HRS_CYCLES[$i]=1; done
+if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ for i in {0..23..06}; do FCST_LEN_HRS_CYCLES[$i]=24; done
+ FCST_LEN_HRS="24"
+ POSTPROC_LEN_HRS="24"
+ BOUNDARY_PROC_GROUP_NUM="10"
+fi
+DA_CYCLE_INTERV="1"
+RESTART_INTERVAL="1"
+RESTART_INTERVAL_LONG="1"
+netcdf_diag=.true.
+binary_diag=.false.
+WRTCMP_output_file="netcdf_parallel"
+WRTCMP_ideflate="1"
+WRTCMP_quantize_nsd="18"
+
+## set up post
+OUTPUT_FH="1 -1"
+
+WTIME_FORECAST="00:30:00"
+WTIME_FORECAST_LONG="04:45:00"
+PPN_ANALYSIS_GSI="16"
+NNODES_ANALYSIS_GSI="1"
+TPP_ANALYSIS_GSI="8"
+
+EXTRN_MDL_NAME_ICS="GDASENKF"
+EXTRN_MDL_NAME_LBCS="GEFS"
+GFS_FILE_FMT_ICS="netcdf"
+GFS_FILE_FMT_LBCS="grib2"
+
+envir="para"
+NET="rrfs"
+MODEL="RRFS"
+
+if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then
+ NUM_ENS_MEMBERS=30
+# DO_ENSCONTROL="TRUE"
+ DO_GSIOBSERVER="TRUE"
+ DO_ENKFUPDATE="TRUE"
+# DO_RECENTER="TRUE"
+ DO_ENKF_RADAR_REF="TRUE"
+ DO_ENSINIT="TRUE"
+
+ RADAR_REF_THINNING="2"
+ CLEAN_OLDFCST_HRS="12"
+ CLEAN_OLDSTMPPOST_HRS="12"
+ cld_bld_hgt=0.0
+ l_precip_clear_only=.true.
+ write_diag_2=.true.
+
+ START_TIME_SPINUP="00:30:00"
+ LAYOUT_X="16"
+ LAYOUT_Y="48"
+ NNODES_FORECAST="12"
+ WRTCMP_write_groups="1"
+ WRTCMP_write_tasks_per_group="64"
+
+ NUM_ENS_MEMBERS_FCST=5
+ if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ NUM_ENS_MEMBERS=${NUM_ENS_MEMBERS_FCST}
+ WTIME_FORECAST="04:45:00"
+ WTIME_MAKE_LBCS="01:30:00"
+
+ LAYOUT_X="50"
+ LAYOUT_Y="64"
+ NNODES_FORECAST="52"
+ WRTCMP_write_groups="1"
+ WRTCMP_write_tasks_per_group="128"
+
+ DO_ENSFCST_MULPHY="TRUE"
+ DO_SPP="TRUE"
+ DO_SPPT="FALSE"
+ DO_SKEB="FALSE"
+ SPPT_MAG="0.5"
+ DO_LSM_SPP="TRUE"
+ DO_RECENTER="TRUE"
+
+ fi
+ PPN_RECENTER="128"
+ NNODES_RECENTER="10"
+fi
+
+SPPINT=36
+LNDPINT=180
+
+RUN_ensctrl="rrfs"
+RUN="enkfrrfs"
+TAG="n3enkf113"
+WGF="enkf"
+if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ RUN="refs"
+ TAG="n3enfcst113"
+ WGF="ensf"
+fi
+
+. set_rrfs_config.sh
+
+EXTRN_MDL_SOURCE_BASEDIR_ICS=/lfs/h1/ops/prod/com/gefs/v12.3
+EXTRN_MDL_SOURCE_BASEDIR_LBCS=/lfs/h1/ops/prod/com/gefs/v12.3
+
+DCOM_ROOT="/lfs/h1/ops/prod/dcom"
+STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
+if [[ ${DO_ENSFCST} == "TRUE" ]] ; then
+ STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+ PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+ GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
+fi
+ENSCTRL_STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains control input files for ensemble recentering.
+ENSCTRL_PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains control input files for ensemble recentering.
+ENSCTRL_GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory STMP that mostly contains control input files for ensemble recentering.
diff --git a/ush/sample_configs/RRFS_A/config.sh_rrfs_a_n3_nco b/ush/sample_configs/RRFS_A/config.sh_rrfs_a_n3_nco
new file mode 100644
index 000000000..4e261b09a
--- /dev/null
+++ b/ush/sample_configs/RRFS_A/config.sh_rrfs_a_n3_nco
@@ -0,0 +1,144 @@
+MACHINE="wcoss2"
+MACHINETYPE="person"
+version="v1.1.3"
+ACCOUNT="RRFS_DEV"
+#RESERVATION="rrfsdet"
+EXPT_BASEDIR="/lfs/h2/emc/lam/noscrub/Ming.Hu/rrfs/${version}"
+EXPT_SUBDIR="rrfs_na"
+WFLOW_XML_TMPL_FN="FV3LAM_wflow_nco.xml"
+
+PREDEF_GRID_NAME="RRFS_NA_3km"
+
+. set_rrfs_config_general.sh
+. set_rrfs_config_SDL_VDL_MixEn.sh
+
+#DO_ENSEMBLE="TRUE"
+#DO_ENSFCST="TRUE"
+DO_DACYCLE="TRUE"
+DO_SURFACE_CYCLE="TRUE"
+DO_SPINUP="TRUE"
+DO_SAVE_INPUT="TRUE"
+DO_POST_SPINUP="FALSE"
+DO_POST_PROD="TRUE"
+DO_RETRO="FALSE"
+DO_ANALYSIS_NONVARCLD="TRUE"
+DO_ENVAR_RADAR_REF="TRUE"
+DO_SMOKE_DUST="TRUE"
+EBB_DCYCLE="2"
+RADARREFL_TIMELEVEL=(0)
+FH_DFI_RADAR="0.0,0.25,0.5"
+DO_SOIL_ADJUST="TRUE"
+DO_RADDA="TRUE"
+DO_BUFRSND="TRUE"
+USE_FVCOM="TRUE"
+PREP_FVCOM="FALSE"
+USE_CLM="TRUE"
+DO_PARALLEL_PRDGEN="TRUE"
+DO_GSIDIAG_OFFLINE="TRUE"
+DO_UPDATE_BC="TRUE"
+DO_GLM_FED_DA="TRUE"
+GLMFED_DATA_MODE="PROD"
+
+EXTRN_MDL_ICS_OFFSET_HRS="3"
+LBC_SPEC_INTVL_HRS="1"
+EXTRN_MDL_LBCS_OFFSET_HRS="6"
+BOUNDARY_LEN_HRS="24"
+BOUNDARY_PROC_GROUP_NUM="24"
+
+# avaialble retro period:
+# 20210511-20210531; 20210718-20210801
+DATE_FIRST_CYCL="20251210"
+DATE_LAST_CYCL="20251211"
+CYCL_HRS=( "00" "12" )
+CYCL_HRS_SPINSTART=("03" "15")
+CYCL_HRS_PRODSTART=("09" "21")
+CYCLEMONTH="12"
+CYCLEDAY="10-11"
+SOIL_SURGERY_time=2023100916
+
+STARTYEAR=${DATE_FIRST_CYCL:0:4}
+STARTMONTH=${DATE_FIRST_CYCL:4:2}
+STARTDAY=${DATE_FIRST_CYCL:6:2}
+STARTHOUR="00"
+ENDYEAR=${DATE_LAST_CYCL:0:4}
+ENDMONTH=${DATE_LAST_CYCL:4:2}
+ENDDAY=${DATE_LAST_CYCL:6:2}
+ENDHOUR="23"
+
+PREEXISTING_DIR_METHOD="upgrade"
+INITIAL_CYCLEDEF="${DATE_FIRST_CYCL}0300 ${DATE_LAST_CYCL}2300 12:00:00"
+BOUNDARY_CYCLEDEF="${DATE_FIRST_CYCL}0000 ${DATE_LAST_CYCL}2300 06:00:00"
+PROD_CYCLEDEF="00 01-05,07-11,13-17,19-23 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
+PRODLONG_CYCLEDEF="00 00,06,12,18 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
+if [[ $DO_SPINUP == "TRUE" ]] ; then
+ SPINUP_CYCLEDEF="00 03-08,15-20 ${CYCLEDAY} ${CYCLEMONTH} ${STARTYEAR} *"
+fi
+
+FCST_LEN_HRS="03"
+FCST_LEN_HRS_SPINUP="1"
+#FCST_LEN_HRS_CYCLES=(48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18 48 18 18 18 18 18)
+for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=03; done
+for i in {0..23..6}; do FCST_LEN_HRS_CYCLES[$i]=12; done
+DA_CYCLE_INTERV="1"
+RESTART_INTERVAL="1"
+RESTART_INTERVAL_LONG="1 12"
+## set up post
+POSTPROC_LEN_HRS="03"
+POSTPROC_LONG_LEN_HRS="12"
+POSTPROC_SUBH_LEN_HRS="03"
+
+# default
+OUTPUT_FH="1 -1"
+#set UPP/prodgen for 15 min output
+NFHMAX_HF="03"
+NFHOUT="1"
+NSOUT_MIN="15"
+
+USE_RRFSE_ENS="FALSE"
+CYCL_HRS_HYB_FV3LAM_ENS=("00" "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23")
+
+SST_update_hour=01
+GVF_update_hour=04
+SNOWICE_update_hour=01
+netcdf_diag=.true.
+binary_diag=.false.
+WRTCMP_output_file="netcdf_parallel"
+WRTCMP_ideflate="1"
+WRTCMP_quantize_nsd="18"
+
+LAYOUT_X="43"
+LAYOUT_Y="64"
+NNODES_FORECAST="52"
+WRTCMP_write_groups="3"
+WRTCMP_write_tasks_per_group="192"
+
+
+regional_ensemble_option=1
+if [[ ${USE_RRFSE_ENS} == "TRUE" ]]; then
+ regional_ensemble_option=5 # 5 for RRFS ensemble
+fi
+
+EXTRN_MDL_NAME_ICS="GFS"
+EXTRN_MDL_NAME_LBCS="GFS"
+
+envir="para"
+
+NET="rrfs"
+TAG="n3v113"
+
+MODEL="rrfs"
+RUN="rrfs"
+WGF="det"
+
+. set_rrfs_config.sh
+
+DCOM_ROOT="/lfs/h1/ops/prod/dcom"
+STMP="/lfs/h2/emc/stmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+PTMP="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}" # Path to directory STMP that mostly contains input files.
+GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/nwges" # Path to directory GESROOT that save boundary, cold initial, restart files
+if [[ ${regional_ensemble_option} == "5" ]]; then
+ RRFSE_GESROOT="/lfs/h2/emc/ptmp/Ming.Hu/rrfs/${version}/com" # Path to RRFSE directory GESROOT that mostly contains ensemble restart files for GSI hybrid.
+ NUM_ENS_MEMBERS=30 # FV3LAM ensemble size for GSI hybrid analysis
+ CYCL_HRS_PRODSTART_ENS=( "08" "20" )
+ DO_ENVAR_RADAR_REF="TRUE"
+fi
diff --git a/ush/sample_configs/config_c3/det/data_table b/ush/sample_configs/config_c3/det/data_table
new file mode 100644
index 000000000..e69de29bb
diff --git a/ush/sample_configs/config_c3/det/fd_ufs.yaml b/ush/sample_configs/config_c3/det/fd_ufs.yaml
new file mode 100644
index 000000000..a91ff96d6
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/fd_ufs.yaml
@@ -0,0 +1,1232 @@
+ field_dictionary:
+ version_number: 0.0.0
+ institution: National ESPC, CSC & MCL Working Groups
+ source: automatically generated by the NUOPC Layer
+ description: Community-based dictionary for shared coupling fields
+ entries:
+ #
+ #-----------------------------------
+ # section: mediator calculation for atm/ocn flux calculation
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: mean_laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: mean_up_lw_flx_ocn
+ canonical_units: W m-2
+ description: mediator calculation - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Foxx_lwnet
+ alias: mean_net_lw_flx
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn net longwave flux
+ #
+ - standard_name: Foxx_sen
+ canonical_units: W m-2
+ alias: mean_sensi_heat_flx
+ description: mediator calculation - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Foxx_evap
+ canonical_units: kg m-2 s-1
+ alias: mean_evap_rate
+ description: mediator calculation - atm/ocn specific humidity flux
+ #
+ - standard_name: Faox_evap
+ canonical_units: kg m-2 s-1
+ description: mediator calculation - atm/ocn specific humidity flux
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_bcph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_ocph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstdry
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstwet
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_swdn
+ alias: inst_down_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward SW heat flux
+ #
+ - standard_name: Faxa_lwdn
+ alias: inst_down_lw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward LW heat flux
+ #
+ - standard_name: Faxa_rain
+ alias: inst_prec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainc
+ alias: inst_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainl
+ alias: inst_prec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snow
+ alias: inst_fprec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowc
+ alias: inst_fprec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowl
+ alias: inst_fprec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swnet
+ alias: inst_net_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swndf
+ alias: inst_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir diffuse flux
+ #
+ - standard_name: Faxa_swndr
+ alias: inst_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir direct flux
+ #
+ - standard_name: Faxa_swvdf
+ alias: inst_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+vis diffuse flux
+ #
+ - standard_name: Faxa_swvdr
+ alias: inst_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+visvdirect flux
+ #
+ - standard_name: Sa_dens
+ alias: air_density_height_lowest
+ canonical_units: kg m-3
+ description: atmosphere export- density at the lowest model layer
+ #
+ - standard_name: Sa_pbot
+ alias: inst_pres_height_lowest
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_prsl
+ alias: inst_pres_height_lowest_from_phys
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_pslv
+ alias: inst_pres_height_surface
+ canonical_units: Pa
+ description: atmosphere export - instantaneous pressure land and sea surface
+ #
+ - standard_name: Sa_ptem
+ canonical_units: K
+ description: atmosphere export - bottom layer potential temperature
+ #
+ - standard_name: Sa_shum
+ alias: inst_spec_humid_height_lowest
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_qa
+ alias: inst_spec_humid_height_lowest_from_phys
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_tbot
+ alias: inst_temp_height_lowest
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_tskn
+ alias: inst_temp_height_surface
+ - standard_name: Sa_tskn
+ alias: inst_temp_skin_temperature
+ canonical_units: K
+ description: atmosphere export - sea surface skin temperature
+ #
+ - standard_name: Sa_ta
+ alias: inst_temp_height_lowest_from_phys
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_u
+ alias: inst_zonal_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer zonal wind
+ #
+ - standard_name: Sa_v
+ alias: inst_merid_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer meridional wind
+ #
+ - standard_name: Sa_wspd
+ alias: inst_wind_speed_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer wind speed
+ #
+ - standard_name: Sa_z
+ alias: inst_height_lowest
+ canonical_units: m
+ description: atmosphere export - bottom layer height
+ #
+ - standard_name: Sa_topo
+ alias: inst_surface_height
+ canonical_units: m
+ description: atmosphere export - topographic height
+ #
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export- zonal component of momentum flux
+ #
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export - meridional component of momentum flux
+ #
+ - standard_name: Faxa_lwnet
+ canonical_units: W m-2
+ alias: inst_net_lw_flx
+ description: atmosphere export - mean net longwave flux from atm
+ #
+ - standard_name: Faxa_sen
+ canonical_units: W m-2
+ alias: inst_sensi_heat_flx
+ description: atmosphere export - sensible heat flux
+ #
+ - standard_name : Faxa_evap
+ canonical_units: kg m-2 s-1
+ alias: inst_evap_rate
+ description: atmosphere export - latent heat flux conversion
+ #
+ - standard_name: Faxx_evap
+ canonical_units: kg m-2 s-1
+ description: atmosphere import
+ #
+ - standard_name: Faxa_lat
+ alias: inst_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere export - latent heat flux
+ #
+ - standard_name: Faxx_lat
+ alias: mean_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_lwup
+ alias: mean_up_lw_flx
+ canonical_units: W m-2
+ description: atmosphere import - merged ocn/ice flux
+ #
+ - standard_name: Faxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - zonal component of momentum flux
+ #
+ - standard_name: Faxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - meridional component of momentum flux
+ #
+ - standard_name: Sa_ofrac
+ alias: openwater_frac_in_atm
+ canonical_units: 1
+ description: atm export to mediator - open water ocean fraction (varies with time)
+ #
+ - standard_name: Sa_u10m
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - zonal wind height 10m
+ - standard_name: Sa_u10m
+ alias: eastward_wind_at_10m_height
+ #
+ - standard_name: Sa_v10m
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - meridional wind height 10m
+ - standard_name: Sa_v10m
+ alias: northward_wind_at_10m_height
+ #
+ - standard_name: Sa_wspd10m
+ alias: inst_wind_speed_height10m
+ canonical_units: m s-1
+ description: atmosphere export - wind speed height 10m
+ #
+ - standard_name: Sa_t2m
+ alias: inst_temp_height2m
+ canonical_units: K
+ description: atmosphere export - temperature height 2m
+ #
+ - standard_name: Sa_q2m
+ alias: inst_spec_humid_height2m
+ canonical_units: kg kg -1
+ description: atmosphere export - specifc humidity height 2m
+ #
+ - standard_name: canopy_moisture_storage
+ canonical_units: m
+ description: canopy moisture content
+ #
+ - standard_name: inst_aerodynamic_conductance
+ canonical_units: m
+ description: aerodynamic conductance
+ #
+ - standard_name: inst_canopy_resistance
+ canonical_units: s m-1
+ description: canopy aerodynamic resistance
+ #
+ - standard_name: leaf_area_index
+ canonical_units: 1
+ description: leaf area index
+ #
+ - standard_name: temperature_of_soil_layer
+ canonical_units: K
+ description: temperature in soil layer
+ #
+ - standard_name: height
+ canonical_units: m
+ description: orography
+ #
+ - standard_name: Sa_exner
+ alias: inst_exner_function_height_lowest
+ canonical_units: 1
+ description: dimensionless exner function at surface adjacent layer
+ #
+ - standard_name: Sa_ustar
+ alias: surface_friction_velocity
+ canonical_units: m s-1
+ description: surface friction velocity
+ #
+ #-----------------------------------
+ # section: sea-ice export
+ #-----------------------------------
+ #
+ - standard_name: Faii_evap
+ alias: evap_rate_atm_into_ice
+ canonical_units: kg m-2 s-1
+ description: sea-ice export
+ #
+ - standard_name: Faii_lat
+ alias: laten_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice latent heat flux
+ #
+ - standard_name: Faii_sen
+ alias: sensi_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice sensible heat flux
+ #
+ - standard_name: Faii_lwup
+ alias: lwup_flx_ice
+ canonical_units: W m-2
+ description: sea-ice export - outgoing logwave radiation
+ #
+ - standard_name: Faii_swnet
+ canonical_units: W m-2
+ description: sea-ice export to atm
+ #
+ - standard_name: Faii_taux
+ alias: stress_on_air_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to atm - air ice zonal stress
+ #
+ - standard_name: Faii_tauy
+ alias: stress_on_air_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export - air ice meridional stress
+ #
+ - standard_name: Fioi_bcphi
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophilic black carbon flux to ocean
+ #
+ - standard_name: Fioi_bcpho
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophobic black carbon flux to ocean
+ #
+ - standard_name: Fioi_flxdst
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - dust aerosol flux to ocean
+ #
+ - standard_name: Fioi_melth
+ alias: net_heat_flx_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - net heat flux to ocean
+ #
+ - standard_name: Fioi_meltw
+ alias: mean_fresh_water_to_ocean_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting)
+ #
+ - standard_name: Fioi_meltw_wiso
+ alias: mean_fresh_water_to_ocean_rate_wiso
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) for 16O, 18O, HDO
+ #
+ - standard_name: Fioi_salt
+ alias: mean_salt_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - salt to ocean (salt flux from melting)
+ #
+ - standard_name: Fioi_swpen
+ alias: mean_sw_pen_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdr
+ alias: mean_sw_pen_to_ocn_vis_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vis dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdf
+ alias: mean_sw_pen_to_ocn_vis_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vif dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idr
+ alias: mean_sw_pen_to_ocn_ir_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idf
+ alias: mean_sw_pen_to_ocn_ir_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dif shortwave through ice to ocean
+ #
+ - standard_name: Fioi_taux
+ alias: stress_on_ocn_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean zonal stress
+ #
+ - standard_name: Fioi_tauy
+ alias: stress_on_ocn_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean meridional stress
+ #
+ - standard_name: Si_anidf
+ alias: inst_ice_ir_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_anidr
+ alias: inst_ice_ir_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdf
+ alias: inst_ice_vis_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdr
+ alias: inst_ice_vis_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_ifrac
+ alias: ice_fraction
+ canonical_units: 1
+ description: sea-ice export to atm - ice fraction (varies with time)
+ #
+ - standard_name: Si_imask
+ alias: ice_mask
+ canonical_units: 1
+ description: sea-ice export - ice mask
+ #
+ - standard_name: Si_qref
+ canonical_units: kg kg-1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_t
+ alias: sea_ice_surface_temperature
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_tref
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_u10
+ canonical_units: m/s
+ description: sea-ice export
+ #
+ - standard_name: Si_vice
+ alias: sea_ice_volume
+ canonical_units: m
+ description: sea-ice export - volume of ice per unit area
+ #
+ - standard_name: Si_snowh
+ canonical_units: m
+ description: sea-ice export - surface_snow_water_equivalent
+ #
+ - standard_name: Si_vsno
+ alias: snow_volume_on_sea_ice
+ canonical_units: m
+ description: sea-ice export - volume of snow per unit area
+ #
+ - standard_name: Si_thick
+ canonical_units: m
+ description: sea-ice export - ice thickness
+ #
+ - standard_name: Si_floediam
+ canonical_units: m
+ description: sea-ice export - ice floe diameter
+ #
+ #-----------------------------------
+ # section: ocean export to mediator
+ #-----------------------------------
+ #
+ - standard_name: Fioo_q
+ alias: freezing_melting_potential
+ canonical_units: W m-2
+ description: ocean export
+ #
+ - standard_name: So_bldepth
+ alias: mixed_layer_depth
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_h
+ alias: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ocean export
+ - standard_name: So_h
+ alias: seahgt
+ #
+ - standard_name: So_dhdx
+ alias: sea_surface_slope_zonal
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_dhdy
+ alias: sea_surface_slope_merid
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_duu10n
+ canonical_units: m2 s-2
+ description: ocean export
+ #
+ - standard_name: So_fswpen
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_ofrac
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_omask
+ alias: ocean_mask
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_qref
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_re
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_s
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ocean export
+ #
+ - standard_name: So_ssq
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_t
+ alias: sea_surface_temperature
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_tref
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_u
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_u10
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_ustar
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_v
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ocean export
+ #
+ #-----------------------------------
+ # section: ocean import
+ #-----------------------------------
+ #
+ - standard_name: Foxx_hrain
+ canonical_units: W m-2
+ description: to ocn heat content of rain
+ #
+ - standard_name: Foxx_hsnow
+ canonical_units: W m-2
+ description: to ocn heat content of snow
+ #
+ - standard_name: Foxx_hevap
+ canonical_units: W m-2
+ description: to ocn heat content of evaporation
+ #
+ - standard_name: Foxx_hcond
+ canonical_units: W m-2
+ description: to ocn heat content of condensation
+ #
+ - standard_name: Foxx_hrofl
+ canonical_units: W m-2
+ description: to ocn heat content of liquid runoff
+ #
+ - standard_name: Foxx_hrofi
+ canonical_units: W m-2
+ description: to ocn heat content of ice runoff
+ #
+ - standard_name: Foxx_rofi
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (frozen)
+ #
+ - standard_name: Foxx_rofl
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (liquid)
+ #
+ - standard_name: Foxx_swnet
+ alias: mean_net_sw_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdr
+ alias: mean_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdf
+ alias: mean_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible diffuse radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idr
+ alias: mean_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idf
+ alias: mean_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir diffuse radiation to ocean
+ #
+ - standard_name: Foxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: ocean import - sensible heat flux into ocean
+ #
+ - standard_name: Foxx_lat
+ canonical_units: W m-2
+ description: ocean import - latent heat flux into ocean
+ #
+ - standard_name: Foxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: ocean import - zonal surface stress to ocean
+ #
+ - standard_name: Foxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: ocean import - meridional surface stress to ocean
+ #
+ #-----------------------------------
+ # mediator fields
+ #-----------------------------------
+ #
+ - standard_name: cpl_scalars
+ canonical_units: unitless
+ #
+ - standard_name: frac
+ canonical_units: 1
+ #
+ - standard_name: mask
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # fields to use fluxes from mediator
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_sen
+ alias: sensi_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: lwup_flx_ocn
+ canonical_units: W m-2
+ description: mediator export - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator export
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator export
+ #
+ #-----------------------------------
+ # section: atmosphere fields that need to be defined but are not used
+ #-----------------------------------
+ #
+ - standard_name: mean_prec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_fprec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_down_lw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_lw_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_flx
+ canonical_units: W m-2
+ - standard_name: mean_net_sw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_surface_height
+ canonical_units: m
+ - standard_name: mean_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: mean_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_laten_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_evap_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_tracer_up_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_down_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_clmn_mass_dens
+ canonical_units: g m-2
+ - standard_name: inst_tracer_anth_biom_flx
+ canonical_units: ug m-2 s-1
+ description: atmosphere export
+ - standard_name: inst_pres_interface
+ canonical_units: Pa
+ - standard_name: inst_pres_levels
+ canonical_units: Pa
+ - standard_name: inst_geop_interface
+ canonical_units: tbd
+ - standard_name: inst_geop_levels
+ canonical_units: tbd
+ - standard_name: inst_temp_interface
+ canonical_units: K
+ - standard_name: inst_temp_levels
+ canonical_units: K
+ - standard_name: inst_zonal_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_merid_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_omega_levels
+ canonical_units: tbd
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_soil_moisture_content
+ canonical_units: tbd
+ - standard_name: soil_type
+ canonical_units: tbd
+ - standard_name: inst_pbl_height
+ canonical_units: tbd
+ - standard_name: surface_cell_area
+ canonical_units: tbd
+ - standard_name: inst_convective_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_spec_humid_conv_tendency_levels
+ canonical_units: tbd
+ - standard_name: inst_exchange_coefficient_heat_levels
+ canonical_units: tbd
+ - standard_name: inst_friction_velocity
+ canonical_units: tbd
+ - standard_name: inst_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_land_sea_mask
+ canonical_units: tbd
+ - standard_name: inst_temp_height_surface
+ canonical_units: tbd
+ - standard_name: inst_up_sensi_heat_flx
+ canonical_units: tbd
+ - standard_name: inst_lwe_snow_thickness
+ canonical_units: tbd
+ - standard_name: vegetation_type
+ canonical_units: tbd
+ - standard_name: inst_vegetation_area_frac
+ canonical_units: tbd
+ - standard_name: inst_surface_roughness
+ canonical_units: tbd
+ - standard_name: inst_laten_heat_flx
+ canonical_units: W m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: W m-2
+ - standard_name: land_mask
+ canonical_units: 1
+ - standard_name: inst_cloud_frac_levels
+ canonical_units: 1
+ - standard_name: inst_ice_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_liq_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_surface_soil_wetness
+ canonical_units: 1
+ - standard_name: lake_fraction
+ canonical_units: 1
+ - standard_name: ice_fraction_in_atm
+ alias: sea_ice_area_fraction
+ canonical_units: 1
+ - standard_name: ocean_fraction
+ canonical_units: 1
+ - standard_name: surface_snow_area_fraction
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # WW3 import
+ #-----------------------------------
+ #
+ - standard_name: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ww3 import
+ #
+ - standard_name: sea_surface_salinity
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ww3 import
+ #
+ - standard_name: surface_eastward_sea_water_velocity
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: surface_northward_sea_water_velocity
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: eastward_wind_at_10m_height
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: northward_wind_at_10m_height
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: sea_ice_concentration
+ alias: ice_fraction
+ canonical_units: 1
+ description: ww3 import
+ #
+ #-----------------------------------
+ # WW3 export
+ #-----------------------------------
+ #
+ - standard_name: Sw_z0
+ alias: wave_z0_roughness_length
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_z0
+ alias: z0rlen
+ #
+ - standard_name: Sw_pstokes_x
+ alias: eastward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_pstokes_y
+ alias: northward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_elevation_spectrum
+ alias: wave_elevation_spectrum
+ canonical_units: m2/s
+ description: wave elevation spectrum
+ #
+ # remaining fields are unused but required to be present
+ #
+ - standard_name: Sw_ch
+ alias: wave_induced_charnock_parameter
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_ch
+ alias: charno
+ #
+ - standard_name: eastward_stokes_drift_current
+ alias: uscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: northward_stokes_drift_current
+ alias: vscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: Sw_ustokes
+ alias: eastward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export surface drift components
+ - standard_name: Sw_ustokes
+ alias: ussx
+ #
+ - standard_name: Sw_vstokes
+ alias: northward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export using surface drift components
+ - standard_name: Sw_vstokes
+ alias: ussy
+ #
+ - standard_name: Sw_wbcuru
+ alias: eastward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcuru
+ alias: wbcuru
+ #
+ - standard_name: Sw_wbcurv
+ alias: northward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcurv
+ alias: wbcurv
+ #
+ - standard_name: Sw_wbcurp
+ alias: wave_bottom_current_period
+ canonical_units: s
+ description: ww3 export
+ - standard_name: Sw_wbcurp
+ alias: wbcurp
+ #
+ - standard_name: Sw_wavsuu
+ alias: eastward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuu
+ alias: wavsuu
+ #
+ - standard_name: Sw_wavsuv
+ alias: eastward_northward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuv
+ alias: wavsuv
+ #
+ - standard_name: Sw_wavsvv
+ alias: northward_wave_radiation_stress
+ canonical_units: Pa
+ description: ww3 export
+ - standard_name: Sw_wavsvv
+ alias: wavsvv
+ #
+ - standard_name: Sw_ustokes1
+ alias: eastward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes1
+ alias: x1pstk
+ #
+ - standard_name: Sw_ustokes2
+ alias: eastward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes2
+ alias: x2pstk
+ #
+ - standard_name: Sw_ustokes3
+ alias: eastward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes3
+ alias: x3pstk
+ #
+ - standard_name: Sw_vstokes1
+ alias: northward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes1
+ alias: y1pstk
+ #
+ - standard_name: Sw_vstokes2
+ alias: northward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes2
+ alias: y2pstk
+ #
+ - standard_name: Sw_vstokes3
+ alias: northward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes3
+ alias: y3pstk
+ #
+ #-----------------------------------
+ # section: FV3 atm export/import to/from JEDI
+ #-----------------------------------
+ #
+ - standard_name: u
+ canonical_units: m s-1
+ #
+ - standard_name: v
+ canonical_units: m s-1
+ #
+ - standard_name: ua
+ canonical_units: m s-1
+ #
+ - standard_name: va
+ canonical_units: m s-1
+ #
+ - standard_name: t
+ canonical_units: K
+ #
+ - standard_name: delp
+ canonical_units: Pa
+ #
+ - standard_name: sphum
+ canonical_units: kg kg-1
+ #
+ - standard_name: ice_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: liq_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: o3mr
+ canonical_units: kg kg-1
+ #
+ - standard_name: phis
+ canonical_units: m2 s-2
+ #
+ - standard_name: u_srf
+ canonical_units: m s-1
+ #
+ - standard_name: v_srf
+ canonical_units: m s-1
+ #
+ #
+ - standard_name: slmsk
+ canonical_units: flag
+ description: landmask sea/land/ice=0/1/2
+ #
+ - standard_name: weasd
+ canonical_units: mm
+ description: water equiv of acc snow depth over land and sea ice
+ #
+ - standard_name: tsea
+ canonical_units: K
+ description: surface skin temperature
+ #
+ - standard_name: vtype
+ canonical_units: index
+ description: vegetation type
+ #
+ - standard_name: stype
+ canonical_units: index
+ description: soil type
+ #
+ - standard_name: Sa_vfrac
+ canonical_units: frac
+ description: areal fractional cover of green vegetation
+ - standard_name: Sa_vfrac
+ alias: vfrac
+ #
+ - standard_name: stc
+ canonical_units: K
+ description: soil temperature content
+ #
+ - standard_name: smc
+ canonical_units: m3 m-3
+ description: soil moisture content
+ #
+ - standard_name: snwdph
+ canonical_units: mm
+ description: snow depth in mm
+ #
+ - standard_name: f10m
+ canonical_units: ratio
+ description: fm at 10m - Ratio of sigma level 1 wind and 10m wind
+ #
+ - standard_name: Sa_zorl
+ canonical_units: cm
+ description: composite surface roughness in cm
+ - standard_name: Sa_zorl
+ alias: zorl
+ #
+ - standard_name: t2m
+ canonical_units: K
+ description: two meter temperature
+ #
+ #-----------------------------------
+ # section: land export
+ #-----------------------------------
+ #
+ - standard_name: Sl_lfrac
+ alias: land_fraction
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_lfrin
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_t
+ canonical_units: K
+ description: land export
+ #
+ - standard_name: inst_tracer_diag_aod
+ canonical_units: 1
+ description: AOD
+ #
+ - standard_name: Sl_sfrac
+ alias: inst_snow_area_fraction_lnd
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_tref
+ alias: inst_temp_height2m_lnd
+ canonical_units: K
+ description: mediator export to glc - no levation classes
+ #
+ - standard_name: Sl_qref
+ alias: inst_spec_humid_height2m_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Sl_q
+ alias: inst_spec_humid_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Fall_lat
+ alias: inst_laten_heat_flx_lnd
+ canonical_units: kg kg-1 m s-1
+ description: land export to atm - atm/lnd latent heat flux
+ #
+ - standard_name: Fall_sen
+ alias: inst_sensi_heat_flx_lnd
+ canonical_units: K m s-1
+ description: land export to atm - atm/lnd sensible heat flux
+ #
+ - standard_name: Fall_evap
+ alias: inst_potential_laten_heat_flx_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_gflx
+ alias: inst_upward_heat_flux_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_roff
+ alias: inst_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Fall_soff
+ alias: inst_subsurface_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_cmm
+ alias: inst_drag_wind_speed_for_momentum
+ canonical_units: m s-1
+ description: land export
+ #
+ - standard_name: Sl_chh
+ alias: inst_drag_mass_flux_for_heat_and_moisture
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_zvfun
+ alias: inst_func_of_roughness_length_and_vfrac
+ canonical_units: 1
+ description: land export
diff --git a/ush/sample_configs/config_c3/det/field_table b/ush/sample_configs/config_c3/det/field_table
new file mode 100644
index 000000000..691a27f54
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/field_table
@@ -0,0 +1,85 @@
+# added by FRE: sphum must be present in atmos
+# specific humidity for moist runs
+ "TRACER", "atmos_mod", "sphum"
+ "longname", "specific humidity"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e-6" /
+# prognostic cloud water mixing ratio
+ "TRACER", "atmos_mod", "liq_wat"
+ "longname", "cloud water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic ice water mixing ratio
+ "TRACER", "atmos_mod", "ice_wat"
+ "longname", "cloud ice mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic rain water mixing ratio
+ "TRACER", "atmos_mod", "rainwat"
+ "longname", "rain water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic snow water mixing ratio
+ "TRACER", "atmos_mod", "snowwat"
+ "longname", "snow water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic graupel mixing ratio
+ "TRACER", "atmos_mod", "graupel"
+ "longname", "graupel mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic cloud water number concentration
+ "TRACER", "atmos_mod", "water_nc"
+ "longname", "cloud liquid water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic cloud ice number concentration
+ "TRACER", "atmos_mod", "ice_nc"
+ "longname", "cloud ice water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic rain number concentration
+ "TRACER", "atmos_mod", "rain_nc"
+ "longname", "rain number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic ozone mixing ratio tracer
+ "TRACER", "atmos_mod", "o3mr"
+ "longname", "ozone mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# water- and ice-friendly aerosols (Thompson)
+ "TRACER", "atmos_mod", "liq_aero"
+ "longname", "water-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+ "TRACER", "atmos_mod", "ice_aero"
+ "longname", "ice-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic subgrid scale turbulent kinetic energy
+ "TRACER", "atmos_mod", "sgs_tke"
+ "longname", "subgrid scale turbulent kinetic energy"
+ "units", "m2/s2"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic sigmab tracer
+ "TRACER", "atmos_mod", "sigmab"
+ "longname", "sigma fraction"
+ "units", "fraction"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic smoke mixing ratio tracer
+ "TRACER", "atmos_mod", "smoke"
+ "longname", "smoke mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic dust mixing ratio tracer
+ "TRACER", "atmos_mod", "dust"
+ "longname", "dust mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic coarsepm mixing ratio tracer
+ "TRACER", "atmos_mod", "coarsepm"
+ "longname", "coarsepm mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
diff --git a/ush/sample_configs/config_c3/det/input.nml b/ush/sample_configs/config_c3/det/input.nml
new file mode 100644
index 000000000..0d0c13020
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/input.nml
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 15, 32
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .true.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/det/input.nml_restart b/ush/sample_configs/config_c3/det/input.nml_restart
new file mode 100644
index 000000000..1dcc6c24e
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/input.nml_restart
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 15, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .true.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/det/input.nml_restart_18h b/ush/sample_configs/config_c3/det/input.nml_restart_18h
new file mode 100644
index 000000000..1dcc6c24e
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/input.nml_restart_18h
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 15, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .true.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/det/input.nml_restart_long b/ush/sample_configs/config_c3/det/input.nml_restart_long
new file mode 100644
index 000000000..1dcc6c24e
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/input.nml_restart_long
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 15, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .true.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/det/input.nml_restart_spinupcyc b/ush/sample_configs/config_c3/det/input.nml_restart_spinupcyc
new file mode 100644
index 000000000..1dcc6c24e
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/input.nml_restart_spinupcyc
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 15, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .true.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/det/input.nml_spinupcyc b/ush/sample_configs/config_c3/det/input.nml_spinupcyc
new file mode 100644
index 000000000..0d0c13020
--- /dev/null
+++ b/ush/sample_configs/config_c3/det/input.nml_spinupcyc
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 15, 32
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .true.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/enkf/data_table b/ush/sample_configs/config_c3/enkf/data_table
new file mode 100644
index 000000000..e69de29bb
diff --git a/ush/sample_configs/config_c3/enkf/fd_ufs.yaml b/ush/sample_configs/config_c3/enkf/fd_ufs.yaml
new file mode 100644
index 000000000..a91ff96d6
--- /dev/null
+++ b/ush/sample_configs/config_c3/enkf/fd_ufs.yaml
@@ -0,0 +1,1232 @@
+ field_dictionary:
+ version_number: 0.0.0
+ institution: National ESPC, CSC & MCL Working Groups
+ source: automatically generated by the NUOPC Layer
+ description: Community-based dictionary for shared coupling fields
+ entries:
+ #
+ #-----------------------------------
+ # section: mediator calculation for atm/ocn flux calculation
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: mean_laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: mean_up_lw_flx_ocn
+ canonical_units: W m-2
+ description: mediator calculation - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Foxx_lwnet
+ alias: mean_net_lw_flx
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn net longwave flux
+ #
+ - standard_name: Foxx_sen
+ canonical_units: W m-2
+ alias: mean_sensi_heat_flx
+ description: mediator calculation - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Foxx_evap
+ canonical_units: kg m-2 s-1
+ alias: mean_evap_rate
+ description: mediator calculation - atm/ocn specific humidity flux
+ #
+ - standard_name: Faox_evap
+ canonical_units: kg m-2 s-1
+ description: mediator calculation - atm/ocn specific humidity flux
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_bcph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_ocph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstdry
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstwet
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_swdn
+ alias: inst_down_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward SW heat flux
+ #
+ - standard_name: Faxa_lwdn
+ alias: inst_down_lw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward LW heat flux
+ #
+ - standard_name: Faxa_rain
+ alias: inst_prec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainc
+ alias: inst_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainl
+ alias: inst_prec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snow
+ alias: inst_fprec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowc
+ alias: inst_fprec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowl
+ alias: inst_fprec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swnet
+ alias: inst_net_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swndf
+ alias: inst_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir diffuse flux
+ #
+ - standard_name: Faxa_swndr
+ alias: inst_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir direct flux
+ #
+ - standard_name: Faxa_swvdf
+ alias: inst_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+vis diffuse flux
+ #
+ - standard_name: Faxa_swvdr
+ alias: inst_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+visvdirect flux
+ #
+ - standard_name: Sa_dens
+ alias: air_density_height_lowest
+ canonical_units: kg m-3
+ description: atmosphere export- density at the lowest model layer
+ #
+ - standard_name: Sa_pbot
+ alias: inst_pres_height_lowest
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_prsl
+ alias: inst_pres_height_lowest_from_phys
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_pslv
+ alias: inst_pres_height_surface
+ canonical_units: Pa
+ description: atmosphere export - instantaneous pressure land and sea surface
+ #
+ - standard_name: Sa_ptem
+ canonical_units: K
+ description: atmosphere export - bottom layer potential temperature
+ #
+ - standard_name: Sa_shum
+ alias: inst_spec_humid_height_lowest
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_qa
+ alias: inst_spec_humid_height_lowest_from_phys
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_tbot
+ alias: inst_temp_height_lowest
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_tskn
+ alias: inst_temp_height_surface
+ - standard_name: Sa_tskn
+ alias: inst_temp_skin_temperature
+ canonical_units: K
+ description: atmosphere export - sea surface skin temperature
+ #
+ - standard_name: Sa_ta
+ alias: inst_temp_height_lowest_from_phys
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_u
+ alias: inst_zonal_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer zonal wind
+ #
+ - standard_name: Sa_v
+ alias: inst_merid_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer meridional wind
+ #
+ - standard_name: Sa_wspd
+ alias: inst_wind_speed_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer wind speed
+ #
+ - standard_name: Sa_z
+ alias: inst_height_lowest
+ canonical_units: m
+ description: atmosphere export - bottom layer height
+ #
+ - standard_name: Sa_topo
+ alias: inst_surface_height
+ canonical_units: m
+ description: atmosphere export - topographic height
+ #
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export- zonal component of momentum flux
+ #
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export - meridional component of momentum flux
+ #
+ - standard_name: Faxa_lwnet
+ canonical_units: W m-2
+ alias: inst_net_lw_flx
+ description: atmosphere export - mean net longwave flux from atm
+ #
+ - standard_name: Faxa_sen
+ canonical_units: W m-2
+ alias: inst_sensi_heat_flx
+ description: atmosphere export - sensible heat flux
+ #
+ - standard_name : Faxa_evap
+ canonical_units: kg m-2 s-1
+ alias: inst_evap_rate
+ description: atmosphere export - latent heat flux conversion
+ #
+ - standard_name: Faxx_evap
+ canonical_units: kg m-2 s-1
+ description: atmosphere import
+ #
+ - standard_name: Faxa_lat
+ alias: inst_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere export - latent heat flux
+ #
+ - standard_name: Faxx_lat
+ alias: mean_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_lwup
+ alias: mean_up_lw_flx
+ canonical_units: W m-2
+ description: atmosphere import - merged ocn/ice flux
+ #
+ - standard_name: Faxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - zonal component of momentum flux
+ #
+ - standard_name: Faxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - meridional component of momentum flux
+ #
+ - standard_name: Sa_ofrac
+ alias: openwater_frac_in_atm
+ canonical_units: 1
+ description: atm export to mediator - open water ocean fraction (varies with time)
+ #
+ - standard_name: Sa_u10m
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - zonal wind height 10m
+ - standard_name: Sa_u10m
+ alias: eastward_wind_at_10m_height
+ #
+ - standard_name: Sa_v10m
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - meridional wind height 10m
+ - standard_name: Sa_v10m
+ alias: northward_wind_at_10m_height
+ #
+ - standard_name: Sa_wspd10m
+ alias: inst_wind_speed_height10m
+ canonical_units: m s-1
+ description: atmosphere export - wind speed height 10m
+ #
+ - standard_name: Sa_t2m
+ alias: inst_temp_height2m
+ canonical_units: K
+ description: atmosphere export - temperature height 2m
+ #
+ - standard_name: Sa_q2m
+ alias: inst_spec_humid_height2m
+ canonical_units: kg kg -1
+ description: atmosphere export - specifc humidity height 2m
+ #
+ - standard_name: canopy_moisture_storage
+ canonical_units: m
+ description: canopy moisture content
+ #
+ - standard_name: inst_aerodynamic_conductance
+ canonical_units: m
+ description: aerodynamic conductance
+ #
+ - standard_name: inst_canopy_resistance
+ canonical_units: s m-1
+ description: canopy aerodynamic resistance
+ #
+ - standard_name: leaf_area_index
+ canonical_units: 1
+ description: leaf area index
+ #
+ - standard_name: temperature_of_soil_layer
+ canonical_units: K
+ description: temperature in soil layer
+ #
+ - standard_name: height
+ canonical_units: m
+ description: orography
+ #
+ - standard_name: Sa_exner
+ alias: inst_exner_function_height_lowest
+ canonical_units: 1
+ description: dimensionless exner function at surface adjacent layer
+ #
+ - standard_name: Sa_ustar
+ alias: surface_friction_velocity
+ canonical_units: m s-1
+ description: surface friction velocity
+ #
+ #-----------------------------------
+ # section: sea-ice export
+ #-----------------------------------
+ #
+ - standard_name: Faii_evap
+ alias: evap_rate_atm_into_ice
+ canonical_units: kg m-2 s-1
+ description: sea-ice export
+ #
+ - standard_name: Faii_lat
+ alias: laten_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice latent heat flux
+ #
+ - standard_name: Faii_sen
+ alias: sensi_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice sensible heat flux
+ #
+ - standard_name: Faii_lwup
+ alias: lwup_flx_ice
+ canonical_units: W m-2
+ description: sea-ice export - outgoing logwave radiation
+ #
+ - standard_name: Faii_swnet
+ canonical_units: W m-2
+ description: sea-ice export to atm
+ #
+ - standard_name: Faii_taux
+ alias: stress_on_air_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to atm - air ice zonal stress
+ #
+ - standard_name: Faii_tauy
+ alias: stress_on_air_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export - air ice meridional stress
+ #
+ - standard_name: Fioi_bcphi
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophilic black carbon flux to ocean
+ #
+ - standard_name: Fioi_bcpho
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophobic black carbon flux to ocean
+ #
+ - standard_name: Fioi_flxdst
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - dust aerosol flux to ocean
+ #
+ - standard_name: Fioi_melth
+ alias: net_heat_flx_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - net heat flux to ocean
+ #
+ - standard_name: Fioi_meltw
+ alias: mean_fresh_water_to_ocean_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting)
+ #
+ - standard_name: Fioi_meltw_wiso
+ alias: mean_fresh_water_to_ocean_rate_wiso
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) for 16O, 18O, HDO
+ #
+ - standard_name: Fioi_salt
+ alias: mean_salt_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - salt to ocean (salt flux from melting)
+ #
+ - standard_name: Fioi_swpen
+ alias: mean_sw_pen_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdr
+ alias: mean_sw_pen_to_ocn_vis_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vis dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdf
+ alias: mean_sw_pen_to_ocn_vis_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vif dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idr
+ alias: mean_sw_pen_to_ocn_ir_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idf
+ alias: mean_sw_pen_to_ocn_ir_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dif shortwave through ice to ocean
+ #
+ - standard_name: Fioi_taux
+ alias: stress_on_ocn_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean zonal stress
+ #
+ - standard_name: Fioi_tauy
+ alias: stress_on_ocn_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean meridional stress
+ #
+ - standard_name: Si_anidf
+ alias: inst_ice_ir_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_anidr
+ alias: inst_ice_ir_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdf
+ alias: inst_ice_vis_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdr
+ alias: inst_ice_vis_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_ifrac
+ alias: ice_fraction
+ canonical_units: 1
+ description: sea-ice export to atm - ice fraction (varies with time)
+ #
+ - standard_name: Si_imask
+ alias: ice_mask
+ canonical_units: 1
+ description: sea-ice export - ice mask
+ #
+ - standard_name: Si_qref
+ canonical_units: kg kg-1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_t
+ alias: sea_ice_surface_temperature
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_tref
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_u10
+ canonical_units: m/s
+ description: sea-ice export
+ #
+ - standard_name: Si_vice
+ alias: sea_ice_volume
+ canonical_units: m
+ description: sea-ice export - volume of ice per unit area
+ #
+ - standard_name: Si_snowh
+ canonical_units: m
+ description: sea-ice export - surface_snow_water_equivalent
+ #
+ - standard_name: Si_vsno
+ alias: snow_volume_on_sea_ice
+ canonical_units: m
+ description: sea-ice export - volume of snow per unit area
+ #
+ - standard_name: Si_thick
+ canonical_units: m
+ description: sea-ice export - ice thickness
+ #
+ - standard_name: Si_floediam
+ canonical_units: m
+ description: sea-ice export - ice floe diameter
+ #
+ #-----------------------------------
+ # section: ocean export to mediator
+ #-----------------------------------
+ #
+ - standard_name: Fioo_q
+ alias: freezing_melting_potential
+ canonical_units: W m-2
+ description: ocean export
+ #
+ - standard_name: So_bldepth
+ alias: mixed_layer_depth
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_h
+ alias: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ocean export
+ - standard_name: So_h
+ alias: seahgt
+ #
+ - standard_name: So_dhdx
+ alias: sea_surface_slope_zonal
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_dhdy
+ alias: sea_surface_slope_merid
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_duu10n
+ canonical_units: m2 s-2
+ description: ocean export
+ #
+ - standard_name: So_fswpen
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_ofrac
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_omask
+ alias: ocean_mask
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_qref
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_re
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_s
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ocean export
+ #
+ - standard_name: So_ssq
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_t
+ alias: sea_surface_temperature
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_tref
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_u
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_u10
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_ustar
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_v
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ocean export
+ #
+ #-----------------------------------
+ # section: ocean import
+ #-----------------------------------
+ #
+ - standard_name: Foxx_hrain
+ canonical_units: W m-2
+ description: to ocn heat content of rain
+ #
+ - standard_name: Foxx_hsnow
+ canonical_units: W m-2
+ description: to ocn heat content of snow
+ #
+ - standard_name: Foxx_hevap
+ canonical_units: W m-2
+ description: to ocn heat content of evaporation
+ #
+ - standard_name: Foxx_hcond
+ canonical_units: W m-2
+ description: to ocn heat content of condensation
+ #
+ - standard_name: Foxx_hrofl
+ canonical_units: W m-2
+ description: to ocn heat content of liquid runoff
+ #
+ - standard_name: Foxx_hrofi
+ canonical_units: W m-2
+ description: to ocn heat content of ice runoff
+ #
+ - standard_name: Foxx_rofi
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (frozen)
+ #
+ - standard_name: Foxx_rofl
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (liquid)
+ #
+ - standard_name: Foxx_swnet
+ alias: mean_net_sw_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdr
+ alias: mean_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdf
+ alias: mean_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible diffuse radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idr
+ alias: mean_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idf
+ alias: mean_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir diffuse radiation to ocean
+ #
+ - standard_name: Foxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: ocean import - sensible heat flux into ocean
+ #
+ - standard_name: Foxx_lat
+ canonical_units: W m-2
+ description: ocean import - latent heat flux into ocean
+ #
+ - standard_name: Foxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: ocean import - zonal surface stress to ocean
+ #
+ - standard_name: Foxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: ocean import - meridional surface stress to ocean
+ #
+ #-----------------------------------
+ # mediator fields
+ #-----------------------------------
+ #
+ - standard_name: cpl_scalars
+ canonical_units: unitless
+ #
+ - standard_name: frac
+ canonical_units: 1
+ #
+ - standard_name: mask
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # fields to use fluxes from mediator
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_sen
+ alias: sensi_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: lwup_flx_ocn
+ canonical_units: W m-2
+ description: mediator export - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator export
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator export
+ #
+ #-----------------------------------
+ # section: atmosphere fields that need to be defined but are not used
+ #-----------------------------------
+ #
+ - standard_name: mean_prec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_fprec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_down_lw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_lw_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_flx
+ canonical_units: W m-2
+ - standard_name: mean_net_sw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_surface_height
+ canonical_units: m
+ - standard_name: mean_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: mean_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_laten_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_evap_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_tracer_up_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_down_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_clmn_mass_dens
+ canonical_units: g m-2
+ - standard_name: inst_tracer_anth_biom_flx
+ canonical_units: ug m-2 s-1
+ description: atmosphere export
+ - standard_name: inst_pres_interface
+ canonical_units: Pa
+ - standard_name: inst_pres_levels
+ canonical_units: Pa
+ - standard_name: inst_geop_interface
+ canonical_units: tbd
+ - standard_name: inst_geop_levels
+ canonical_units: tbd
+ - standard_name: inst_temp_interface
+ canonical_units: K
+ - standard_name: inst_temp_levels
+ canonical_units: K
+ - standard_name: inst_zonal_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_merid_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_omega_levels
+ canonical_units: tbd
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_soil_moisture_content
+ canonical_units: tbd
+ - standard_name: soil_type
+ canonical_units: tbd
+ - standard_name: inst_pbl_height
+ canonical_units: tbd
+ - standard_name: surface_cell_area
+ canonical_units: tbd
+ - standard_name: inst_convective_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_spec_humid_conv_tendency_levels
+ canonical_units: tbd
+ - standard_name: inst_exchange_coefficient_heat_levels
+ canonical_units: tbd
+ - standard_name: inst_friction_velocity
+ canonical_units: tbd
+ - standard_name: inst_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_land_sea_mask
+ canonical_units: tbd
+ - standard_name: inst_temp_height_surface
+ canonical_units: tbd
+ - standard_name: inst_up_sensi_heat_flx
+ canonical_units: tbd
+ - standard_name: inst_lwe_snow_thickness
+ canonical_units: tbd
+ - standard_name: vegetation_type
+ canonical_units: tbd
+ - standard_name: inst_vegetation_area_frac
+ canonical_units: tbd
+ - standard_name: inst_surface_roughness
+ canonical_units: tbd
+ - standard_name: inst_laten_heat_flx
+ canonical_units: W m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: W m-2
+ - standard_name: land_mask
+ canonical_units: 1
+ - standard_name: inst_cloud_frac_levels
+ canonical_units: 1
+ - standard_name: inst_ice_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_liq_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_surface_soil_wetness
+ canonical_units: 1
+ - standard_name: lake_fraction
+ canonical_units: 1
+ - standard_name: ice_fraction_in_atm
+ alias: sea_ice_area_fraction
+ canonical_units: 1
+ - standard_name: ocean_fraction
+ canonical_units: 1
+ - standard_name: surface_snow_area_fraction
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # WW3 import
+ #-----------------------------------
+ #
+ - standard_name: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ww3 import
+ #
+ - standard_name: sea_surface_salinity
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ww3 import
+ #
+ - standard_name: surface_eastward_sea_water_velocity
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: surface_northward_sea_water_velocity
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: eastward_wind_at_10m_height
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: northward_wind_at_10m_height
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: sea_ice_concentration
+ alias: ice_fraction
+ canonical_units: 1
+ description: ww3 import
+ #
+ #-----------------------------------
+ # WW3 export
+ #-----------------------------------
+ #
+ - standard_name: Sw_z0
+ alias: wave_z0_roughness_length
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_z0
+ alias: z0rlen
+ #
+ - standard_name: Sw_pstokes_x
+ alias: eastward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_pstokes_y
+ alias: northward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_elevation_spectrum
+ alias: wave_elevation_spectrum
+ canonical_units: m2/s
+ description: wave elevation spectrum
+ #
+ # remaining fields are unused but required to be present
+ #
+ - standard_name: Sw_ch
+ alias: wave_induced_charnock_parameter
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_ch
+ alias: charno
+ #
+ - standard_name: eastward_stokes_drift_current
+ alias: uscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: northward_stokes_drift_current
+ alias: vscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: Sw_ustokes
+ alias: eastward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export surface drift components
+ - standard_name: Sw_ustokes
+ alias: ussx
+ #
+ - standard_name: Sw_vstokes
+ alias: northward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export using surface drift components
+ - standard_name: Sw_vstokes
+ alias: ussy
+ #
+ - standard_name: Sw_wbcuru
+ alias: eastward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcuru
+ alias: wbcuru
+ #
+ - standard_name: Sw_wbcurv
+ alias: northward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcurv
+ alias: wbcurv
+ #
+ - standard_name: Sw_wbcurp
+ alias: wave_bottom_current_period
+ canonical_units: s
+ description: ww3 export
+ - standard_name: Sw_wbcurp
+ alias: wbcurp
+ #
+ - standard_name: Sw_wavsuu
+ alias: eastward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuu
+ alias: wavsuu
+ #
+ - standard_name: Sw_wavsuv
+ alias: eastward_northward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuv
+ alias: wavsuv
+ #
+ - standard_name: Sw_wavsvv
+ alias: northward_wave_radiation_stress
+ canonical_units: Pa
+ description: ww3 export
+ - standard_name: Sw_wavsvv
+ alias: wavsvv
+ #
+ - standard_name: Sw_ustokes1
+ alias: eastward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes1
+ alias: x1pstk
+ #
+ - standard_name: Sw_ustokes2
+ alias: eastward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes2
+ alias: x2pstk
+ #
+ - standard_name: Sw_ustokes3
+ alias: eastward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes3
+ alias: x3pstk
+ #
+ - standard_name: Sw_vstokes1
+ alias: northward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes1
+ alias: y1pstk
+ #
+ - standard_name: Sw_vstokes2
+ alias: northward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes2
+ alias: y2pstk
+ #
+ - standard_name: Sw_vstokes3
+ alias: northward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes3
+ alias: y3pstk
+ #
+ #-----------------------------------
+ # section: FV3 atm export/import to/from JEDI
+ #-----------------------------------
+ #
+ - standard_name: u
+ canonical_units: m s-1
+ #
+ - standard_name: v
+ canonical_units: m s-1
+ #
+ - standard_name: ua
+ canonical_units: m s-1
+ #
+ - standard_name: va
+ canonical_units: m s-1
+ #
+ - standard_name: t
+ canonical_units: K
+ #
+ - standard_name: delp
+ canonical_units: Pa
+ #
+ - standard_name: sphum
+ canonical_units: kg kg-1
+ #
+ - standard_name: ice_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: liq_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: o3mr
+ canonical_units: kg kg-1
+ #
+ - standard_name: phis
+ canonical_units: m2 s-2
+ #
+ - standard_name: u_srf
+ canonical_units: m s-1
+ #
+ - standard_name: v_srf
+ canonical_units: m s-1
+ #
+ #
+ - standard_name: slmsk
+ canonical_units: flag
+ description: landmask sea/land/ice=0/1/2
+ #
+ - standard_name: weasd
+ canonical_units: mm
+ description: water equiv of acc snow depth over land and sea ice
+ #
+ - standard_name: tsea
+ canonical_units: K
+ description: surface skin temperature
+ #
+ - standard_name: vtype
+ canonical_units: index
+ description: vegetation type
+ #
+ - standard_name: stype
+ canonical_units: index
+ description: soil type
+ #
+ - standard_name: Sa_vfrac
+ canonical_units: frac
+ description: areal fractional cover of green vegetation
+ - standard_name: Sa_vfrac
+ alias: vfrac
+ #
+ - standard_name: stc
+ canonical_units: K
+ description: soil temperature content
+ #
+ - standard_name: smc
+ canonical_units: m3 m-3
+ description: soil moisture content
+ #
+ - standard_name: snwdph
+ canonical_units: mm
+ description: snow depth in mm
+ #
+ - standard_name: f10m
+ canonical_units: ratio
+ description: fm at 10m - Ratio of sigma level 1 wind and 10m wind
+ #
+ - standard_name: Sa_zorl
+ canonical_units: cm
+ description: composite surface roughness in cm
+ - standard_name: Sa_zorl
+ alias: zorl
+ #
+ - standard_name: t2m
+ canonical_units: K
+ description: two meter temperature
+ #
+ #-----------------------------------
+ # section: land export
+ #-----------------------------------
+ #
+ - standard_name: Sl_lfrac
+ alias: land_fraction
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_lfrin
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_t
+ canonical_units: K
+ description: land export
+ #
+ - standard_name: inst_tracer_diag_aod
+ canonical_units: 1
+ description: AOD
+ #
+ - standard_name: Sl_sfrac
+ alias: inst_snow_area_fraction_lnd
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_tref
+ alias: inst_temp_height2m_lnd
+ canonical_units: K
+ description: mediator export to glc - no levation classes
+ #
+ - standard_name: Sl_qref
+ alias: inst_spec_humid_height2m_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Sl_q
+ alias: inst_spec_humid_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Fall_lat
+ alias: inst_laten_heat_flx_lnd
+ canonical_units: kg kg-1 m s-1
+ description: land export to atm - atm/lnd latent heat flux
+ #
+ - standard_name: Fall_sen
+ alias: inst_sensi_heat_flx_lnd
+ canonical_units: K m s-1
+ description: land export to atm - atm/lnd sensible heat flux
+ #
+ - standard_name: Fall_evap
+ alias: inst_potential_laten_heat_flx_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_gflx
+ alias: inst_upward_heat_flux_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_roff
+ alias: inst_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Fall_soff
+ alias: inst_subsurface_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_cmm
+ alias: inst_drag_wind_speed_for_momentum
+ canonical_units: m s-1
+ description: land export
+ #
+ - standard_name: Sl_chh
+ alias: inst_drag_mass_flux_for_heat_and_moisture
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_zvfun
+ alias: inst_func_of_roughness_length_and_vfrac
+ canonical_units: 1
+ description: land export
diff --git a/ush/sample_configs/config_c3/enkf/field_table b/ush/sample_configs/config_c3/enkf/field_table
new file mode 100644
index 000000000..691a27f54
--- /dev/null
+++ b/ush/sample_configs/config_c3/enkf/field_table
@@ -0,0 +1,85 @@
+# added by FRE: sphum must be present in atmos
+# specific humidity for moist runs
+ "TRACER", "atmos_mod", "sphum"
+ "longname", "specific humidity"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e-6" /
+# prognostic cloud water mixing ratio
+ "TRACER", "atmos_mod", "liq_wat"
+ "longname", "cloud water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic ice water mixing ratio
+ "TRACER", "atmos_mod", "ice_wat"
+ "longname", "cloud ice mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic rain water mixing ratio
+ "TRACER", "atmos_mod", "rainwat"
+ "longname", "rain water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic snow water mixing ratio
+ "TRACER", "atmos_mod", "snowwat"
+ "longname", "snow water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic graupel mixing ratio
+ "TRACER", "atmos_mod", "graupel"
+ "longname", "graupel mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic cloud water number concentration
+ "TRACER", "atmos_mod", "water_nc"
+ "longname", "cloud liquid water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic cloud ice number concentration
+ "TRACER", "atmos_mod", "ice_nc"
+ "longname", "cloud ice water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic rain number concentration
+ "TRACER", "atmos_mod", "rain_nc"
+ "longname", "rain number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic ozone mixing ratio tracer
+ "TRACER", "atmos_mod", "o3mr"
+ "longname", "ozone mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# water- and ice-friendly aerosols (Thompson)
+ "TRACER", "atmos_mod", "liq_aero"
+ "longname", "water-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+ "TRACER", "atmos_mod", "ice_aero"
+ "longname", "ice-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic subgrid scale turbulent kinetic energy
+ "TRACER", "atmos_mod", "sgs_tke"
+ "longname", "subgrid scale turbulent kinetic energy"
+ "units", "m2/s2"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic sigmab tracer
+ "TRACER", "atmos_mod", "sigmab"
+ "longname", "sigma fraction"
+ "units", "fraction"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic smoke mixing ratio tracer
+ "TRACER", "atmos_mod", "smoke"
+ "longname", "smoke mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic dust mixing ratio tracer
+ "TRACER", "atmos_mod", "dust"
+ "longname", "dust mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic coarsepm mixing ratio tracer
+ "TRACER", "atmos_mod", "coarsepm"
+ "longname", "coarsepm mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
diff --git a/ush/sample_configs/config_c3/enkf/input.nml b/ush/sample_configs/config_c3/enkf/input.nml
new file mode 100644
index 000000000..f69682a81
--- /dev/null
+++ b/ush/sample_configs/config_c3/enkf/input.nml
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 11, 32
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .false.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ sigmab_coldstart = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/enkf/input.nml_restart b/ush/sample_configs/config_c3/enkf/input.nml_restart
new file mode 100644
index 000000000..016887a25
--- /dev/null
+++ b/ush/sample_configs/config_c3/enkf/input.nml_restart
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 11, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .false.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ sigmab_coldstart = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/enkf/input.nml_restart_spinupcyc b/ush/sample_configs/config_c3/enkf/input.nml_restart_spinupcyc
new file mode 100644
index 000000000..016887a25
--- /dev/null
+++ b/ush/sample_configs/config_c3/enkf/input.nml_restart_spinupcyc
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 11, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .false.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ sigmab_coldstart = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/enkf/input.nml_spinupcyc b/ush/sample_configs/config_c3/enkf/input.nml_spinupcyc
new file mode 100644
index 000000000..f69682a81
--- /dev/null
+++ b/ush/sample_configs/config_c3/enkf/input.nml_spinupcyc
@@ -0,0 +1,351 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 11, 32
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_smoke_transport = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0.0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 4
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .false.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ sigmab_coldstart = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/ensf/data_table b/ush/sample_configs/config_c3/ensf/data_table
new file mode 100644
index 000000000..e69de29bb
diff --git a/ush/sample_configs/config_c3/ensf/fd_ufs.yaml b/ush/sample_configs/config_c3/ensf/fd_ufs.yaml
new file mode 100644
index 000000000..a91ff96d6
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/fd_ufs.yaml
@@ -0,0 +1,1232 @@
+ field_dictionary:
+ version_number: 0.0.0
+ institution: National ESPC, CSC & MCL Working Groups
+ source: automatically generated by the NUOPC Layer
+ description: Community-based dictionary for shared coupling fields
+ entries:
+ #
+ #-----------------------------------
+ # section: mediator calculation for atm/ocn flux calculation
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: mean_laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: mean_up_lw_flx_ocn
+ canonical_units: W m-2
+ description: mediator calculation - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Foxx_lwnet
+ alias: mean_net_lw_flx
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn net longwave flux
+ #
+ - standard_name: Foxx_sen
+ canonical_units: W m-2
+ alias: mean_sensi_heat_flx
+ description: mediator calculation - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Foxx_evap
+ canonical_units: kg m-2 s-1
+ alias: mean_evap_rate
+ description: mediator calculation - atm/ocn specific humidity flux
+ #
+ - standard_name: Faox_evap
+ canonical_units: kg m-2 s-1
+ description: mediator calculation - atm/ocn specific humidity flux
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_bcph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_ocph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstdry
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstwet
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_swdn
+ alias: inst_down_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward SW heat flux
+ #
+ - standard_name: Faxa_lwdn
+ alias: inst_down_lw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward LW heat flux
+ #
+ - standard_name: Faxa_rain
+ alias: inst_prec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainc
+ alias: inst_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainl
+ alias: inst_prec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snow
+ alias: inst_fprec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowc
+ alias: inst_fprec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowl
+ alias: inst_fprec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swnet
+ alias: inst_net_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swndf
+ alias: inst_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir diffuse flux
+ #
+ - standard_name: Faxa_swndr
+ alias: inst_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir direct flux
+ #
+ - standard_name: Faxa_swvdf
+ alias: inst_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+vis diffuse flux
+ #
+ - standard_name: Faxa_swvdr
+ alias: inst_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+visvdirect flux
+ #
+ - standard_name: Sa_dens
+ alias: air_density_height_lowest
+ canonical_units: kg m-3
+ description: atmosphere export- density at the lowest model layer
+ #
+ - standard_name: Sa_pbot
+ alias: inst_pres_height_lowest
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_prsl
+ alias: inst_pres_height_lowest_from_phys
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_pslv
+ alias: inst_pres_height_surface
+ canonical_units: Pa
+ description: atmosphere export - instantaneous pressure land and sea surface
+ #
+ - standard_name: Sa_ptem
+ canonical_units: K
+ description: atmosphere export - bottom layer potential temperature
+ #
+ - standard_name: Sa_shum
+ alias: inst_spec_humid_height_lowest
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_qa
+ alias: inst_spec_humid_height_lowest_from_phys
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_tbot
+ alias: inst_temp_height_lowest
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_tskn
+ alias: inst_temp_height_surface
+ - standard_name: Sa_tskn
+ alias: inst_temp_skin_temperature
+ canonical_units: K
+ description: atmosphere export - sea surface skin temperature
+ #
+ - standard_name: Sa_ta
+ alias: inst_temp_height_lowest_from_phys
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_u
+ alias: inst_zonal_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer zonal wind
+ #
+ - standard_name: Sa_v
+ alias: inst_merid_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer meridional wind
+ #
+ - standard_name: Sa_wspd
+ alias: inst_wind_speed_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer wind speed
+ #
+ - standard_name: Sa_z
+ alias: inst_height_lowest
+ canonical_units: m
+ description: atmosphere export - bottom layer height
+ #
+ - standard_name: Sa_topo
+ alias: inst_surface_height
+ canonical_units: m
+ description: atmosphere export - topographic height
+ #
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export- zonal component of momentum flux
+ #
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export - meridional component of momentum flux
+ #
+ - standard_name: Faxa_lwnet
+ canonical_units: W m-2
+ alias: inst_net_lw_flx
+ description: atmosphere export - mean net longwave flux from atm
+ #
+ - standard_name: Faxa_sen
+ canonical_units: W m-2
+ alias: inst_sensi_heat_flx
+ description: atmosphere export - sensible heat flux
+ #
+ - standard_name : Faxa_evap
+ canonical_units: kg m-2 s-1
+ alias: inst_evap_rate
+ description: atmosphere export - latent heat flux conversion
+ #
+ - standard_name: Faxx_evap
+ canonical_units: kg m-2 s-1
+ description: atmosphere import
+ #
+ - standard_name: Faxa_lat
+ alias: inst_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere export - latent heat flux
+ #
+ - standard_name: Faxx_lat
+ alias: mean_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_lwup
+ alias: mean_up_lw_flx
+ canonical_units: W m-2
+ description: atmosphere import - merged ocn/ice flux
+ #
+ - standard_name: Faxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - zonal component of momentum flux
+ #
+ - standard_name: Faxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - meridional component of momentum flux
+ #
+ - standard_name: Sa_ofrac
+ alias: openwater_frac_in_atm
+ canonical_units: 1
+ description: atm export to mediator - open water ocean fraction (varies with time)
+ #
+ - standard_name: Sa_u10m
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - zonal wind height 10m
+ - standard_name: Sa_u10m
+ alias: eastward_wind_at_10m_height
+ #
+ - standard_name: Sa_v10m
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - meridional wind height 10m
+ - standard_name: Sa_v10m
+ alias: northward_wind_at_10m_height
+ #
+ - standard_name: Sa_wspd10m
+ alias: inst_wind_speed_height10m
+ canonical_units: m s-1
+ description: atmosphere export - wind speed height 10m
+ #
+ - standard_name: Sa_t2m
+ alias: inst_temp_height2m
+ canonical_units: K
+ description: atmosphere export - temperature height 2m
+ #
+ - standard_name: Sa_q2m
+ alias: inst_spec_humid_height2m
+ canonical_units: kg kg -1
+ description: atmosphere export - specifc humidity height 2m
+ #
+ - standard_name: canopy_moisture_storage
+ canonical_units: m
+ description: canopy moisture content
+ #
+ - standard_name: inst_aerodynamic_conductance
+ canonical_units: m
+ description: aerodynamic conductance
+ #
+ - standard_name: inst_canopy_resistance
+ canonical_units: s m-1
+ description: canopy aerodynamic resistance
+ #
+ - standard_name: leaf_area_index
+ canonical_units: 1
+ description: leaf area index
+ #
+ - standard_name: temperature_of_soil_layer
+ canonical_units: K
+ description: temperature in soil layer
+ #
+ - standard_name: height
+ canonical_units: m
+ description: orography
+ #
+ - standard_name: Sa_exner
+ alias: inst_exner_function_height_lowest
+ canonical_units: 1
+ description: dimensionless exner function at surface adjacent layer
+ #
+ - standard_name: Sa_ustar
+ alias: surface_friction_velocity
+ canonical_units: m s-1
+ description: surface friction velocity
+ #
+ #-----------------------------------
+ # section: sea-ice export
+ #-----------------------------------
+ #
+ - standard_name: Faii_evap
+ alias: evap_rate_atm_into_ice
+ canonical_units: kg m-2 s-1
+ description: sea-ice export
+ #
+ - standard_name: Faii_lat
+ alias: laten_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice latent heat flux
+ #
+ - standard_name: Faii_sen
+ alias: sensi_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice sensible heat flux
+ #
+ - standard_name: Faii_lwup
+ alias: lwup_flx_ice
+ canonical_units: W m-2
+ description: sea-ice export - outgoing logwave radiation
+ #
+ - standard_name: Faii_swnet
+ canonical_units: W m-2
+ description: sea-ice export to atm
+ #
+ - standard_name: Faii_taux
+ alias: stress_on_air_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to atm - air ice zonal stress
+ #
+ - standard_name: Faii_tauy
+ alias: stress_on_air_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export - air ice meridional stress
+ #
+ - standard_name: Fioi_bcphi
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophilic black carbon flux to ocean
+ #
+ - standard_name: Fioi_bcpho
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophobic black carbon flux to ocean
+ #
+ - standard_name: Fioi_flxdst
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - dust aerosol flux to ocean
+ #
+ - standard_name: Fioi_melth
+ alias: net_heat_flx_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - net heat flux to ocean
+ #
+ - standard_name: Fioi_meltw
+ alias: mean_fresh_water_to_ocean_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting)
+ #
+ - standard_name: Fioi_meltw_wiso
+ alias: mean_fresh_water_to_ocean_rate_wiso
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) for 16O, 18O, HDO
+ #
+ - standard_name: Fioi_salt
+ alias: mean_salt_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - salt to ocean (salt flux from melting)
+ #
+ - standard_name: Fioi_swpen
+ alias: mean_sw_pen_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdr
+ alias: mean_sw_pen_to_ocn_vis_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vis dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdf
+ alias: mean_sw_pen_to_ocn_vis_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vif dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idr
+ alias: mean_sw_pen_to_ocn_ir_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idf
+ alias: mean_sw_pen_to_ocn_ir_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dif shortwave through ice to ocean
+ #
+ - standard_name: Fioi_taux
+ alias: stress_on_ocn_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean zonal stress
+ #
+ - standard_name: Fioi_tauy
+ alias: stress_on_ocn_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean meridional stress
+ #
+ - standard_name: Si_anidf
+ alias: inst_ice_ir_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_anidr
+ alias: inst_ice_ir_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdf
+ alias: inst_ice_vis_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdr
+ alias: inst_ice_vis_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_ifrac
+ alias: ice_fraction
+ canonical_units: 1
+ description: sea-ice export to atm - ice fraction (varies with time)
+ #
+ - standard_name: Si_imask
+ alias: ice_mask
+ canonical_units: 1
+ description: sea-ice export - ice mask
+ #
+ - standard_name: Si_qref
+ canonical_units: kg kg-1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_t
+ alias: sea_ice_surface_temperature
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_tref
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_u10
+ canonical_units: m/s
+ description: sea-ice export
+ #
+ - standard_name: Si_vice
+ alias: sea_ice_volume
+ canonical_units: m
+ description: sea-ice export - volume of ice per unit area
+ #
+ - standard_name: Si_snowh
+ canonical_units: m
+ description: sea-ice export - surface_snow_water_equivalent
+ #
+ - standard_name: Si_vsno
+ alias: snow_volume_on_sea_ice
+ canonical_units: m
+ description: sea-ice export - volume of snow per unit area
+ #
+ - standard_name: Si_thick
+ canonical_units: m
+ description: sea-ice export - ice thickness
+ #
+ - standard_name: Si_floediam
+ canonical_units: m
+ description: sea-ice export - ice floe diameter
+ #
+ #-----------------------------------
+ # section: ocean export to mediator
+ #-----------------------------------
+ #
+ - standard_name: Fioo_q
+ alias: freezing_melting_potential
+ canonical_units: W m-2
+ description: ocean export
+ #
+ - standard_name: So_bldepth
+ alias: mixed_layer_depth
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_h
+ alias: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ocean export
+ - standard_name: So_h
+ alias: seahgt
+ #
+ - standard_name: So_dhdx
+ alias: sea_surface_slope_zonal
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_dhdy
+ alias: sea_surface_slope_merid
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_duu10n
+ canonical_units: m2 s-2
+ description: ocean export
+ #
+ - standard_name: So_fswpen
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_ofrac
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_omask
+ alias: ocean_mask
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_qref
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_re
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_s
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ocean export
+ #
+ - standard_name: So_ssq
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_t
+ alias: sea_surface_temperature
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_tref
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_u
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_u10
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_ustar
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_v
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ocean export
+ #
+ #-----------------------------------
+ # section: ocean import
+ #-----------------------------------
+ #
+ - standard_name: Foxx_hrain
+ canonical_units: W m-2
+ description: to ocn heat content of rain
+ #
+ - standard_name: Foxx_hsnow
+ canonical_units: W m-2
+ description: to ocn heat content of snow
+ #
+ - standard_name: Foxx_hevap
+ canonical_units: W m-2
+ description: to ocn heat content of evaporation
+ #
+ - standard_name: Foxx_hcond
+ canonical_units: W m-2
+ description: to ocn heat content of condensation
+ #
+ - standard_name: Foxx_hrofl
+ canonical_units: W m-2
+ description: to ocn heat content of liquid runoff
+ #
+ - standard_name: Foxx_hrofi
+ canonical_units: W m-2
+ description: to ocn heat content of ice runoff
+ #
+ - standard_name: Foxx_rofi
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (frozen)
+ #
+ - standard_name: Foxx_rofl
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (liquid)
+ #
+ - standard_name: Foxx_swnet
+ alias: mean_net_sw_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdr
+ alias: mean_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdf
+ alias: mean_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible diffuse radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idr
+ alias: mean_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idf
+ alias: mean_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir diffuse radiation to ocean
+ #
+ - standard_name: Foxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: ocean import - sensible heat flux into ocean
+ #
+ - standard_name: Foxx_lat
+ canonical_units: W m-2
+ description: ocean import - latent heat flux into ocean
+ #
+ - standard_name: Foxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: ocean import - zonal surface stress to ocean
+ #
+ - standard_name: Foxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: ocean import - meridional surface stress to ocean
+ #
+ #-----------------------------------
+ # mediator fields
+ #-----------------------------------
+ #
+ - standard_name: cpl_scalars
+ canonical_units: unitless
+ #
+ - standard_name: frac
+ canonical_units: 1
+ #
+ - standard_name: mask
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # fields to use fluxes from mediator
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_sen
+ alias: sensi_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: lwup_flx_ocn
+ canonical_units: W m-2
+ description: mediator export - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator export
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator export
+ #
+ #-----------------------------------
+ # section: atmosphere fields that need to be defined but are not used
+ #-----------------------------------
+ #
+ - standard_name: mean_prec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_fprec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_down_lw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_lw_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_flx
+ canonical_units: W m-2
+ - standard_name: mean_net_sw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_surface_height
+ canonical_units: m
+ - standard_name: mean_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: mean_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_laten_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_evap_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_tracer_up_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_down_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_clmn_mass_dens
+ canonical_units: g m-2
+ - standard_name: inst_tracer_anth_biom_flx
+ canonical_units: ug m-2 s-1
+ description: atmosphere export
+ - standard_name: inst_pres_interface
+ canonical_units: Pa
+ - standard_name: inst_pres_levels
+ canonical_units: Pa
+ - standard_name: inst_geop_interface
+ canonical_units: tbd
+ - standard_name: inst_geop_levels
+ canonical_units: tbd
+ - standard_name: inst_temp_interface
+ canonical_units: K
+ - standard_name: inst_temp_levels
+ canonical_units: K
+ - standard_name: inst_zonal_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_merid_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_omega_levels
+ canonical_units: tbd
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_soil_moisture_content
+ canonical_units: tbd
+ - standard_name: soil_type
+ canonical_units: tbd
+ - standard_name: inst_pbl_height
+ canonical_units: tbd
+ - standard_name: surface_cell_area
+ canonical_units: tbd
+ - standard_name: inst_convective_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_spec_humid_conv_tendency_levels
+ canonical_units: tbd
+ - standard_name: inst_exchange_coefficient_heat_levels
+ canonical_units: tbd
+ - standard_name: inst_friction_velocity
+ canonical_units: tbd
+ - standard_name: inst_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_land_sea_mask
+ canonical_units: tbd
+ - standard_name: inst_temp_height_surface
+ canonical_units: tbd
+ - standard_name: inst_up_sensi_heat_flx
+ canonical_units: tbd
+ - standard_name: inst_lwe_snow_thickness
+ canonical_units: tbd
+ - standard_name: vegetation_type
+ canonical_units: tbd
+ - standard_name: inst_vegetation_area_frac
+ canonical_units: tbd
+ - standard_name: inst_surface_roughness
+ canonical_units: tbd
+ - standard_name: inst_laten_heat_flx
+ canonical_units: W m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: W m-2
+ - standard_name: land_mask
+ canonical_units: 1
+ - standard_name: inst_cloud_frac_levels
+ canonical_units: 1
+ - standard_name: inst_ice_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_liq_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_surface_soil_wetness
+ canonical_units: 1
+ - standard_name: lake_fraction
+ canonical_units: 1
+ - standard_name: ice_fraction_in_atm
+ alias: sea_ice_area_fraction
+ canonical_units: 1
+ - standard_name: ocean_fraction
+ canonical_units: 1
+ - standard_name: surface_snow_area_fraction
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # WW3 import
+ #-----------------------------------
+ #
+ - standard_name: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ww3 import
+ #
+ - standard_name: sea_surface_salinity
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ww3 import
+ #
+ - standard_name: surface_eastward_sea_water_velocity
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: surface_northward_sea_water_velocity
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: eastward_wind_at_10m_height
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: northward_wind_at_10m_height
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: sea_ice_concentration
+ alias: ice_fraction
+ canonical_units: 1
+ description: ww3 import
+ #
+ #-----------------------------------
+ # WW3 export
+ #-----------------------------------
+ #
+ - standard_name: Sw_z0
+ alias: wave_z0_roughness_length
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_z0
+ alias: z0rlen
+ #
+ - standard_name: Sw_pstokes_x
+ alias: eastward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_pstokes_y
+ alias: northward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_elevation_spectrum
+ alias: wave_elevation_spectrum
+ canonical_units: m2/s
+ description: wave elevation spectrum
+ #
+ # remaining fields are unused but required to be present
+ #
+ - standard_name: Sw_ch
+ alias: wave_induced_charnock_parameter
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_ch
+ alias: charno
+ #
+ - standard_name: eastward_stokes_drift_current
+ alias: uscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: northward_stokes_drift_current
+ alias: vscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: Sw_ustokes
+ alias: eastward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export surface drift components
+ - standard_name: Sw_ustokes
+ alias: ussx
+ #
+ - standard_name: Sw_vstokes
+ alias: northward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export using surface drift components
+ - standard_name: Sw_vstokes
+ alias: ussy
+ #
+ - standard_name: Sw_wbcuru
+ alias: eastward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcuru
+ alias: wbcuru
+ #
+ - standard_name: Sw_wbcurv
+ alias: northward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcurv
+ alias: wbcurv
+ #
+ - standard_name: Sw_wbcurp
+ alias: wave_bottom_current_period
+ canonical_units: s
+ description: ww3 export
+ - standard_name: Sw_wbcurp
+ alias: wbcurp
+ #
+ - standard_name: Sw_wavsuu
+ alias: eastward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuu
+ alias: wavsuu
+ #
+ - standard_name: Sw_wavsuv
+ alias: eastward_northward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuv
+ alias: wavsuv
+ #
+ - standard_name: Sw_wavsvv
+ alias: northward_wave_radiation_stress
+ canonical_units: Pa
+ description: ww3 export
+ - standard_name: Sw_wavsvv
+ alias: wavsvv
+ #
+ - standard_name: Sw_ustokes1
+ alias: eastward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes1
+ alias: x1pstk
+ #
+ - standard_name: Sw_ustokes2
+ alias: eastward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes2
+ alias: x2pstk
+ #
+ - standard_name: Sw_ustokes3
+ alias: eastward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes3
+ alias: x3pstk
+ #
+ - standard_name: Sw_vstokes1
+ alias: northward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes1
+ alias: y1pstk
+ #
+ - standard_name: Sw_vstokes2
+ alias: northward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes2
+ alias: y2pstk
+ #
+ - standard_name: Sw_vstokes3
+ alias: northward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes3
+ alias: y3pstk
+ #
+ #-----------------------------------
+ # section: FV3 atm export/import to/from JEDI
+ #-----------------------------------
+ #
+ - standard_name: u
+ canonical_units: m s-1
+ #
+ - standard_name: v
+ canonical_units: m s-1
+ #
+ - standard_name: ua
+ canonical_units: m s-1
+ #
+ - standard_name: va
+ canonical_units: m s-1
+ #
+ - standard_name: t
+ canonical_units: K
+ #
+ - standard_name: delp
+ canonical_units: Pa
+ #
+ - standard_name: sphum
+ canonical_units: kg kg-1
+ #
+ - standard_name: ice_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: liq_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: o3mr
+ canonical_units: kg kg-1
+ #
+ - standard_name: phis
+ canonical_units: m2 s-2
+ #
+ - standard_name: u_srf
+ canonical_units: m s-1
+ #
+ - standard_name: v_srf
+ canonical_units: m s-1
+ #
+ #
+ - standard_name: slmsk
+ canonical_units: flag
+ description: landmask sea/land/ice=0/1/2
+ #
+ - standard_name: weasd
+ canonical_units: mm
+ description: water equiv of acc snow depth over land and sea ice
+ #
+ - standard_name: tsea
+ canonical_units: K
+ description: surface skin temperature
+ #
+ - standard_name: vtype
+ canonical_units: index
+ description: vegetation type
+ #
+ - standard_name: stype
+ canonical_units: index
+ description: soil type
+ #
+ - standard_name: Sa_vfrac
+ canonical_units: frac
+ description: areal fractional cover of green vegetation
+ - standard_name: Sa_vfrac
+ alias: vfrac
+ #
+ - standard_name: stc
+ canonical_units: K
+ description: soil temperature content
+ #
+ - standard_name: smc
+ canonical_units: m3 m-3
+ description: soil moisture content
+ #
+ - standard_name: snwdph
+ canonical_units: mm
+ description: snow depth in mm
+ #
+ - standard_name: f10m
+ canonical_units: ratio
+ description: fm at 10m - Ratio of sigma level 1 wind and 10m wind
+ #
+ - standard_name: Sa_zorl
+ canonical_units: cm
+ description: composite surface roughness in cm
+ - standard_name: Sa_zorl
+ alias: zorl
+ #
+ - standard_name: t2m
+ canonical_units: K
+ description: two meter temperature
+ #
+ #-----------------------------------
+ # section: land export
+ #-----------------------------------
+ #
+ - standard_name: Sl_lfrac
+ alias: land_fraction
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_lfrin
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_t
+ canonical_units: K
+ description: land export
+ #
+ - standard_name: inst_tracer_diag_aod
+ canonical_units: 1
+ description: AOD
+ #
+ - standard_name: Sl_sfrac
+ alias: inst_snow_area_fraction_lnd
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_tref
+ alias: inst_temp_height2m_lnd
+ canonical_units: K
+ description: mediator export to glc - no levation classes
+ #
+ - standard_name: Sl_qref
+ alias: inst_spec_humid_height2m_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Sl_q
+ alias: inst_spec_humid_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Fall_lat
+ alias: inst_laten_heat_flx_lnd
+ canonical_units: kg kg-1 m s-1
+ description: land export to atm - atm/lnd latent heat flux
+ #
+ - standard_name: Fall_sen
+ alias: inst_sensi_heat_flx_lnd
+ canonical_units: K m s-1
+ description: land export to atm - atm/lnd sensible heat flux
+ #
+ - standard_name: Fall_evap
+ alias: inst_potential_laten_heat_flx_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_gflx
+ alias: inst_upward_heat_flux_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_roff
+ alias: inst_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Fall_soff
+ alias: inst_subsurface_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_cmm
+ alias: inst_drag_wind_speed_for_momentum
+ canonical_units: m s-1
+ description: land export
+ #
+ - standard_name: Sl_chh
+ alias: inst_drag_mass_flux_for_heat_and_moisture
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_zvfun
+ alias: inst_func_of_roughness_length_and_vfrac
+ canonical_units: 1
+ description: land export
diff --git a/ush/sample_configs/config_c3/ensf/field_table b/ush/sample_configs/config_c3/ensf/field_table
new file mode 100644
index 000000000..691a27f54
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/field_table
@@ -0,0 +1,85 @@
+# added by FRE: sphum must be present in atmos
+# specific humidity for moist runs
+ "TRACER", "atmos_mod", "sphum"
+ "longname", "specific humidity"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e-6" /
+# prognostic cloud water mixing ratio
+ "TRACER", "atmos_mod", "liq_wat"
+ "longname", "cloud water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic ice water mixing ratio
+ "TRACER", "atmos_mod", "ice_wat"
+ "longname", "cloud ice mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic rain water mixing ratio
+ "TRACER", "atmos_mod", "rainwat"
+ "longname", "rain water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic snow water mixing ratio
+ "TRACER", "atmos_mod", "snowwat"
+ "longname", "snow water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic graupel mixing ratio
+ "TRACER", "atmos_mod", "graupel"
+ "longname", "graupel mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic cloud water number concentration
+ "TRACER", "atmos_mod", "water_nc"
+ "longname", "cloud liquid water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic cloud ice number concentration
+ "TRACER", "atmos_mod", "ice_nc"
+ "longname", "cloud ice water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic rain number concentration
+ "TRACER", "atmos_mod", "rain_nc"
+ "longname", "rain number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic ozone mixing ratio tracer
+ "TRACER", "atmos_mod", "o3mr"
+ "longname", "ozone mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# water- and ice-friendly aerosols (Thompson)
+ "TRACER", "atmos_mod", "liq_aero"
+ "longname", "water-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+ "TRACER", "atmos_mod", "ice_aero"
+ "longname", "ice-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic subgrid scale turbulent kinetic energy
+ "TRACER", "atmos_mod", "sgs_tke"
+ "longname", "subgrid scale turbulent kinetic energy"
+ "units", "m2/s2"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic sigmab tracer
+ "TRACER", "atmos_mod", "sigmab"
+ "longname", "sigma fraction"
+ "units", "fraction"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic smoke mixing ratio tracer
+ "TRACER", "atmos_mod", "smoke"
+ "longname", "smoke mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic dust mixing ratio tracer
+ "TRACER", "atmos_mod", "dust"
+ "longname", "dust mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic coarsepm mixing ratio tracer
+ "TRACER", "atmos_mod", "coarsepm"
+ "longname", "coarsepm mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
diff --git a/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch
new file mode 100644
index 000000000..699cdd8f9
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch
@@ -0,0 +1,379 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 28
+ ccpp_suite = 'RRFS_sas'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 3
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 31, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ addsmoke_flag = 1
+ aero_dir_fdb = .true.
+ aero_ind_fdb = .false.
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ conv_cf_opt = 1
+ coarsepm_settling = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_plumerise = .true.
+ do_shum = .false.
+ do_skeb = .false.
+ do_smoke_transport = .true.
+ do_spp = .true.
+ do_sppt = .false.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ drydep_opt = 1
+ dspheat = .true.
+ dt_inner = 36
+ dust_alpha = 10.0
+ dust_drylimit_factor = 0.5
+ dust_gamma = 1.3
+ dust_moist_correction = 2.0
+ dust_opt = 1
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gf_coldstart = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 3
+ imfshalcnv = 3
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isatmedmf = 1
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lndp_each_step = .true.
+ lndp_type = 2
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mix_chem = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ n_var_lndp = 7
+ n_var_spp = 5
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ plumerisefire_frq = 30
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .false.
+ rrfs_smoke_debug = .false.
+ satmedmf = .false.
+ sc_factor = 1.0
+ seas_opt = 0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+ wetdep_ls_opt = 1
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+ iseed_lndp = 9
+ lndp_lscale = 150000, 150000, 150000, 150000, 150000
+ lndp_model_type = 2
+ lndp_prt_list = 0.2, 0.001, 0.001, 0.001, 0.001, 0.001, 0.2
+ lndp_tau = 21600, 21600, 21600, 21600, 21600
+ lndp_type = 2
+ lndp_var_list = 'smc', 'vgf', 'alb', 'sal', 'emi', 'zol', 'stc'
+ lndpint = 180
+/
+
+&nam_sppperts
+ iseed_spp = 4, 5, 6, 7, 8
+ spp_lscale = 150000.0, 150000.0, 150000.0, 150000.0, 150000.0
+ spp_prt_list = 0.2, 0.2, 0.75, 0.2, 0.2
+ spp_sigtop1 = 0.1, 0.1, 0.1, 0.1, 0.1
+ spp_sigtop2 = 0.025, 0.025, 0.025, 0.025, 0.025
+ spp_stddev_cutoff = 1.5, 1.5, 2.5, 1.5, 1.5
+ spp_tau = 21600.0, 21600.0, 21600.0, 21600.0, 21600.0
+ spp_var_list = 'pbl', 'sfc', 'mp', 'rad', 'gwd'
+ sppint = 36
+/
+
+&nam_stochy
+ new_lscale = .true.
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy1 b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy1
new file mode 100644
index 000000000..dd82646c8
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy1
@@ -0,0 +1,358 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 28
+ ccpp_suite = 'RRFSens_phy1'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 3
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 31, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ conv_cf_opt = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .false.
+ do_mynnsfclay = .false.
+ do_shum = .false.
+ do_skeb = .false.
+ do_smoke_transport = .true.
+ do_spp = .true.
+ do_sppt = .false.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ dspheat = .true.
+ dt_inner = 36
+ dust_drylimit_factor = 0.5
+ dust_moist_correction = 2.0
+ ebb_dcycle = 2
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gf_coldstart = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 3
+ imfshalcnv = 3
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isatmedmf = 1
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lndp_each_step = .true.
+ lndp_type = 2
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mosaic_lu = 1
+ mosaic_soil = 1
+ n_var_lndp = 7
+ n_var_spp = 4
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .true.
+ sc_factor = 1.0
+ sfclay_compute_flux = .true.
+ shal_cnv = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+ iseed_lndp = 9
+ lndp_lscale = 150000, 150000, 150000, 150000, 150000
+ lndp_model_type = 2
+ lndp_prt_list = 0.2, 0.001, 0.001, 0.001, 0.001, 0.001, 0.2
+ lndp_tau = 21600, 21600, 21600, 21600, 21600
+ lndp_type = 2
+ lndp_var_list = 'smc', 'vgf', 'alb', 'sal', 'emi', 'zol', 'stc'
+ lndpint = 180
+/
+
+&nam_sppperts
+ iseed_spp = 4, 5, 6, 7
+ spp_lscale = 150000.0, 150000.0, 150000.0, 150000.0
+ spp_prt_list = 0.75, 0.2, 0.2, 0.3
+ spp_sigtop1 = 0.1, 0.1, 0.1, 0.1
+ spp_sigtop2 = 0.025, 0.025, 0.025, 0.025
+ spp_stddev_cutoff = 2.5, 1.5, 1.5, 3.0
+ spp_tau = 21600.0, 21600.0, 21600.0, 21600.0
+ spp_var_list = 'mp', 'rad', 'gwd', 'cu_deep'
+ sppint = 36
+/
+
+&nam_stochy
+ new_lscale = .true.
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy2 b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy2
new file mode 100644
index 000000000..3c42a53fb
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy2
@@ -0,0 +1,360 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFSens_phy2'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 3
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 31, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_shum = .false.
+ do_skeb = .false.
+ do_smoke_transport = .true.
+ do_spp = .true.
+ do_sppt = .false.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ dspheat = .true.
+ dt_inner = 36
+ dust_drylimit_factor = 0.5
+ dust_moist_correction = 2.0
+ ebb_dcycle = 2
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lndp_each_step = .true.
+ lndp_type = 2
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mosaic_lu = 1
+ mosaic_soil = 1
+ n_var_lndp = 7
+ n_var_spp = 5
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sc_factor = 1.0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+ iseed_lndp = 9
+ lndp_lscale = 150000, 150000, 150000, 150000, 150000
+ lndp_model_type = 2
+ lndp_prt_list = 0.2, 0.001, 0.001, 0.001, 0.001, 0.001, 0.2
+ lndp_tau = 21600, 21600, 21600, 21600, 21600
+ lndp_type = 2
+ lndp_var_list = 'smc', 'vgf', 'alb', 'sal', 'emi', 'zol', 'stc'
+ lndpint = 180
+/
+
+&nam_sppperts
+ iseed_spp = 4, 5, 6, 7, 8
+ spp_lscale = 150000.0, 150000.0, 150000.0, 150000.0, 150000.0
+ spp_prt_list = 0.2, 0.2, 0.75, 0.2, 0.2
+ spp_sigtop1 = 0.1, 0.1, 0.1, 0.1, 0.1
+ spp_sigtop2 = 0.025, 0.025, 0.025, 0.025, 0.025
+ spp_stddev_cutoff = 1.5, 1.5, 2.5, 1.5, 1.5
+ spp_tau = 21600.0, 21600.0, 21600.0, 21600.0, 21600.0
+ spp_var_list = 'pbl', 'sfc', 'mp', 'rad', 'gwd'
+ sppint = 36
+/
+
+&nam_stochy
+ new_lscale = .true.
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy3 b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy3
new file mode 100644
index 000000000..2efaf688f
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy3
@@ -0,0 +1,367 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFSens_phy3'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 3
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 31, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 7
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_shum = .false.
+ do_skeb = .false.
+ do_smoke_transport = .true.
+ do_spp = .true.
+ do_sppt = .false.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ dspheat = .true.
+ dt_inner = 36
+ dust_drylimit_factor = 0.5
+ dust_moist_correction = 2.0
+ ebb_dcycle = 2
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gf_coldstart = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 3
+ imfshalcnv = -1
+ imp_physics = 17
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lndp_each_step = .true.
+ lndp_type = 2
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mosaic_lu = 1
+ mosaic_soil = 1
+ n_var_lndp = 6
+ n_var_spp = 4
+ nsfullradar_diag = 3600
+ nssl_alphah = 2.32
+ nssl_alphar = 0.83
+ nssl_cccn = 550000000.0
+ nssl_ccn_on = .true.
+ nssl_ehlw0 = 0.82
+ nssl_ehw0 = 0.79
+ nssl_hail_on = .true.
+ nssl_invertccn = .true.
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sc_factor = 1.0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+ iseed_lndp = 9
+ lndp_lscale = 150000, 150000, 150000, 150000, 150000
+ lndp_model_type = 2
+ lndp_prt_list = 0.2, 0.001, 0.001, 0.001, 0.001, 0.2
+ lndp_tau = 21600, 21600, 21600, 21600, 21600
+ lndp_type = 2
+ lndp_var_list = 'smc', 'vgf', 'alb', 'sal', 'emi', 'stc'
+ lndpint = 180
+/
+
+&nam_sppperts
+ iseed_spp = 4, 5, 6, 7
+ spp_lscale = 150000.0, 150000.0, 150000.0, 150000.0
+ spp_prt_list = 0.2, 0.2, 0.2, 0.2
+ spp_sigtop1 = 0.1, 0.1, 0.1, 0.1
+ spp_sigtop2 = 0.025, 0.025, 0.025, 0.025
+ spp_stddev_cutoff = 1.5, 1.5, 1.5, 1.5
+ spp_tau = 21600.0, 21600.0, 21600.0, 21600.0
+ spp_var_list = 'pbl', 'sfc', 'rad', 'gwd'
+ sppint = 36
+/
+
+&nam_stochy
+ new_lscale = .true.
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy4 b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy4
new file mode 100644
index 000000000..deb3ec4b2
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy4
@@ -0,0 +1,366 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFSens_phy4'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 3
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 31, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 7
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ conv_cf_opt = 1
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .false.
+ do_mynnsfclay = .false.
+ do_shum = .false.
+ do_skeb = .false.
+ do_smoke_transport = .true.
+ do_spp = .true.
+ do_sppt = .false.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ dspheat = .true.
+ dt_inner = 36
+ dust_drylimit_factor = 0.5
+ dust_moist_correction = 2.0
+ ebb_dcycle = 2
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gf_coldstart = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 3
+ imfshalcnv = 3
+ imp_physics = 17
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isatmedmf = 1
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lndp_each_step = .true.
+ lndp_type = 2
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mosaic_lu = 1
+ mosaic_soil = 1
+ n_var_lndp = 7
+ n_var_spp = 3
+ nsfullradar_diag = 3600
+ nssl_alphah = 0.95
+ nssl_alphar = 1.38
+ nssl_cccn = 880000000.0
+ nssl_ccn_on = .true.
+ nssl_ehlw0 = 0.87
+ nssl_ehw0 = 0.62
+ nssl_hail_on = .true.
+ nssl_invertccn = .true.
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .true.
+ sc_factor = 1.0
+ sfclay_compute_flux = .true.
+ shal_cnv = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+ iseed_lndp = 9
+ lndp_lscale = 150000, 150000, 150000, 150000, 150000
+ lndp_model_type = 2
+ lndp_prt_list = 0.2, 0.001, 0.001, 0.001, 0.001, 0.001, 0.2
+ lndp_tau = 21600, 21600, 21600, 21600, 21600
+ lndp_type = 2
+ lndp_var_list = 'smc', 'vgf', 'alb', 'sal', 'emi', 'zol', 'stc'
+ lndpint = 180
+/
+
+&nam_sppperts
+ iseed_spp = 4, 5, 6
+ spp_lscale = 150000.0, 150000.0, 150000.0
+ spp_prt_list = 0.2, 0.2, 0.3
+ spp_sigtop1 = 0.1, 0.1, 0.1
+ spp_sigtop2 = 0.025, 0.025, 0.025
+ spp_stddev_cutoff = 1.5, 1.5, 3.0
+ spp_tau = 21600.0, 21600.0, 21600.0
+ spp_var_list = 'rad', 'gwd', 'cu_deep'
+ sppint = 36
+/
+
+&nam_stochy
+ new_lscale = .true.
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy5 b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy5
new file mode 100644
index 000000000..6d1ebe323
--- /dev/null
+++ b/ush/sample_configs/config_c3/ensf/input.nml_restart_stoch_ensphy5
@@ -0,0 +1,369 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFSens_phy5'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 10000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ agrid_vel_rst = .true.
+ bc_update_interval = 3
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .false.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 300
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 31, 32
+ make_nh = .false.
+ mountain = .true.
+ n_split = 5
+ n_sponge = -1
+ n_zs_filter = 0
+ na_init = 0
+ ncep_ic = .false.
+ nggps_ic = .false.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 1821
+ npy = 1093
+ npz = 65
+ nrows_blend = 20
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 7
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .false.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = 40000.0
+ stretch_fac = 0.999
+ target_lat = 38.5
+ target_lon = -97.5
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .true.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_diagnostics_nml
+ do_hailcast = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ clm_debug_print = .false.
+ clm_lake_debug = .false.
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .true.
+ do_gsl_drag_ss = .true.
+ do_gsl_drag_tofd = .true.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_shum = .false.
+ do_skeb = .false.
+ do_smoke_transport = .true.
+ do_spp = .true.
+ do_sppt = .false.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ dspheat = .true.
+ dt_inner = 36
+ dust_drylimit_factor = 0.5
+ dust_moist_correction = 2.0
+ ebb_dcycle = 2
+ effr_in = .true.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ frac_ice = .true.
+ gwd_opt = 3
+ h2o_phys = .true.
+ hwp_method = 1
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 17
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_lake = 2
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lkm = 1
+ lndp_each_step = .true.
+ lndp_type = 2
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ min_lakeice = 0.15
+ min_seaice = 0.15
+ mosaic_lu = 1
+ mosaic_soil = 1
+ n_var_lndp = 7
+ n_var_spp = 4
+ nsfullradar_diag = 3600
+ nssl_alphah = 1.39
+ nssl_alphar = 2.03
+ nssl_cccn = 990000000.0
+ nssl_ccn_on = .true.
+ nssl_ehlw0 = 0.8
+ nssl_ehw0 = 0.68
+ nssl_hail_on = .true.
+ nssl_invertccn = .true.
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ plume_wind_eff = 1
+ pre_rad = .false.
+ print_diff_pgr = .true.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ satmedmf = .false.
+ sc_factor = 1.0
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ sigmab_coldstart = .true.
+ smoke_conv_wet_coef = 0.5, 0.5, 0.5
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+ wetdep_ls_alpha = 0.5
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+ iseed_lndp = 9
+ lndp_lscale = 150000, 150000, 150000, 150000, 150000
+ lndp_model_type = 2
+ lndp_prt_list = 0.2, 0.001, 0.001, 0.001, 0.001, 0.001, 0.2
+ lndp_tau = 21600, 21600, 21600, 21600, 21600
+ lndp_type = 2
+ lndp_var_list = 'smc', 'vgf', 'alb', 'sal', 'emi', 'zol', 'stc'
+ lndpint = 180
+/
+
+&nam_sppperts
+ iseed_spp = 4, 5, 6, 7
+ spp_lscale = 150000.0, 150000.0, 150000.0, 150000.0
+ spp_prt_list = 0.2, 0.2, 0.2, 0.2
+ spp_sigtop1 = 0.1, 0.1, 0.1, 0.1
+ spp_sigtop2 = 0.025, 0.025, 0.025, 0.025
+ spp_stddev_cutoff = 1.5, 1.5, 1.5, 1.5
+ spp_tau = 21600.0, 21600.0, 21600.0, 21600.0
+ spp_var_list = 'pbl', 'sfc', 'rad', 'gwd'
+ sppint = 36
+/
+
+&nam_stochy
+ new_lscale = .true.
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = ''
+ fnacna = ''
+ fnaisc = ''
+ fnalbc = ''
+ fnalbc2 = ''
+ fnglac = ''
+ fnmskh = ''
+ fnmxic = ''
+ fnslpc = ''
+ fnsmcc = ''
+ fnsnoa = ''
+ fnsnoc = ''
+ fnsotc = ''
+ fntg3c = ''
+ fntsfa = ''
+ fntsfc = ''
+ fnvegc = ''
+ fnvetc = ''
+ fnvmnc = ''
+ fnvmxc = ''
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/sample_configs/config_c3/firewx/data_table b/ush/sample_configs/config_c3/firewx/data_table
new file mode 100644
index 000000000..e69de29bb
diff --git a/ush/sample_configs/config_c3/firewx/fd_ufs.yaml b/ush/sample_configs/config_c3/firewx/fd_ufs.yaml
new file mode 100644
index 000000000..a91ff96d6
--- /dev/null
+++ b/ush/sample_configs/config_c3/firewx/fd_ufs.yaml
@@ -0,0 +1,1232 @@
+ field_dictionary:
+ version_number: 0.0.0
+ institution: National ESPC, CSC & MCL Working Groups
+ source: automatically generated by the NUOPC Layer
+ description: Community-based dictionary for shared coupling fields
+ entries:
+ #
+ #-----------------------------------
+ # section: mediator calculation for atm/ocn flux calculation
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: mean_laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: mean_up_lw_flx_ocn
+ canonical_units: W m-2
+ description: mediator calculation - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator calculation
+ #
+ - standard_name: Foxx_lwnet
+ alias: mean_net_lw_flx
+ canonical_units: W m-2
+ description: mediator calculation - atm/ocn net longwave flux
+ #
+ - standard_name: Foxx_sen
+ canonical_units: W m-2
+ alias: mean_sensi_heat_flx
+ description: mediator calculation - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Foxx_evap
+ canonical_units: kg m-2 s-1
+ alias: mean_evap_rate
+ description: mediator calculation - atm/ocn specific humidity flux
+ #
+ - standard_name: Faox_evap
+ canonical_units: kg m-2 s-1
+ description: mediator calculation - atm/ocn specific humidity flux
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_bcph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_ocph
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstdry
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_dstwet
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ #-----------------------------------
+ # section: atmosphere export
+ #-----------------------------------
+ #
+ - standard_name: Faxa_swdn
+ alias: inst_down_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward SW heat flux
+ #
+ - standard_name: Faxa_lwdn
+ alias: inst_down_lw_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean downward LW heat flux
+ #
+ - standard_name: Faxa_rain
+ alias: inst_prec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainc
+ alias: inst_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_rainl
+ alias: inst_prec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snow
+ alias: inst_fprec_rate
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowc
+ alias: inst_fprec_rate_conv
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_snowl
+ alias: inst_fprec_rate_large
+ canonical_units: kg m-2 s-1
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swnet
+ alias: inst_net_sw_flx
+ canonical_units: W m-2
+ description: atmosphere export
+ #
+ - standard_name: Faxa_swndf
+ alias: inst_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir diffuse flux
+ #
+ - standard_name: Faxa_swndr
+ alias: inst_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward nir direct flux
+ #
+ - standard_name: Faxa_swvdf
+ alias: inst_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+vis diffuse flux
+ #
+ - standard_name: Faxa_swvdr
+ alias: inst_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: atmosphere export - mean surface downward uv+visvdirect flux
+ #
+ - standard_name: Sa_dens
+ alias: air_density_height_lowest
+ canonical_units: kg m-3
+ description: atmosphere export- density at the lowest model layer
+ #
+ - standard_name: Sa_pbot
+ alias: inst_pres_height_lowest
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_prsl
+ alias: inst_pres_height_lowest_from_phys
+ canonical_units: Pa
+ description: atmosphere export - pressure at lowest model layer
+ #
+ - standard_name: Sa_pslv
+ alias: inst_pres_height_surface
+ canonical_units: Pa
+ description: atmosphere export - instantaneous pressure land and sea surface
+ #
+ - standard_name: Sa_ptem
+ canonical_units: K
+ description: atmosphere export - bottom layer potential temperature
+ #
+ - standard_name: Sa_shum
+ alias: inst_spec_humid_height_lowest
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_qa
+ alias: inst_spec_humid_height_lowest_from_phys
+ canonical_units: kg kg-1
+ description: atmosphere export - bottom layer specific humidity
+ #
+ - standard_name: Sa_tbot
+ alias: inst_temp_height_lowest
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_tskn
+ alias: inst_temp_height_surface
+ - standard_name: Sa_tskn
+ alias: inst_temp_skin_temperature
+ canonical_units: K
+ description: atmosphere export - sea surface skin temperature
+ #
+ - standard_name: Sa_ta
+ alias: inst_temp_height_lowest_from_phys
+ canonical_units: K
+ description: atmosphere export - bottom layer temperature
+ #
+ - standard_name: Sa_u
+ alias: inst_zonal_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer zonal wind
+ #
+ - standard_name: Sa_v
+ alias: inst_merid_wind_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer meridional wind
+ #
+ - standard_name: Sa_wspd
+ alias: inst_wind_speed_height_lowest
+ canonical_units: m s-1
+ description: atmosphere export - bottom layer wind speed
+ #
+ - standard_name: Sa_z
+ alias: inst_height_lowest
+ canonical_units: m
+ description: atmosphere export - bottom layer height
+ #
+ - standard_name: Sa_topo
+ alias: inst_surface_height
+ canonical_units: m
+ description: atmosphere export - topographic height
+ #
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx
+ - standard_name: Faxa_taux
+ alias: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export- zonal component of momentum flux
+ #
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx
+ - standard_name: Faxa_tauy
+ alias: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ description: atmosphere export - meridional component of momentum flux
+ #
+ - standard_name: Faxa_lwnet
+ canonical_units: W m-2
+ alias: inst_net_lw_flx
+ description: atmosphere export - mean net longwave flux from atm
+ #
+ - standard_name: Faxa_sen
+ canonical_units: W m-2
+ alias: inst_sensi_heat_flx
+ description: atmosphere export - sensible heat flux
+ #
+ - standard_name : Faxa_evap
+ canonical_units: kg m-2 s-1
+ alias: inst_evap_rate
+ description: atmosphere export - latent heat flux conversion
+ #
+ - standard_name: Faxx_evap
+ canonical_units: kg m-2 s-1
+ description: atmosphere import
+ #
+ - standard_name: Faxa_lat
+ alias: inst_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere export - latent heat flux
+ #
+ - standard_name: Faxx_lat
+ alias: mean_laten_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_lwup
+ alias: mean_up_lw_flx
+ canonical_units: W m-2
+ description: atmosphere import - merged ocn/ice flux
+ #
+ - standard_name: Faxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: atmosphere import
+ #
+ - standard_name: Faxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - zonal component of momentum flux
+ #
+ - standard_name: Faxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: atmosphere import - meridional component of momentum flux
+ #
+ - standard_name: Sa_ofrac
+ alias: openwater_frac_in_atm
+ canonical_units: 1
+ description: atm export to mediator - open water ocean fraction (varies with time)
+ #
+ - standard_name: Sa_u10m
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - zonal wind height 10m
+ - standard_name: Sa_u10m
+ alias: eastward_wind_at_10m_height
+ #
+ - standard_name: Sa_v10m
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: atmosphere export - meridional wind height 10m
+ - standard_name: Sa_v10m
+ alias: northward_wind_at_10m_height
+ #
+ - standard_name: Sa_wspd10m
+ alias: inst_wind_speed_height10m
+ canonical_units: m s-1
+ description: atmosphere export - wind speed height 10m
+ #
+ - standard_name: Sa_t2m
+ alias: inst_temp_height2m
+ canonical_units: K
+ description: atmosphere export - temperature height 2m
+ #
+ - standard_name: Sa_q2m
+ alias: inst_spec_humid_height2m
+ canonical_units: kg kg -1
+ description: atmosphere export - specifc humidity height 2m
+ #
+ - standard_name: canopy_moisture_storage
+ canonical_units: m
+ description: canopy moisture content
+ #
+ - standard_name: inst_aerodynamic_conductance
+ canonical_units: m
+ description: aerodynamic conductance
+ #
+ - standard_name: inst_canopy_resistance
+ canonical_units: s m-1
+ description: canopy aerodynamic resistance
+ #
+ - standard_name: leaf_area_index
+ canonical_units: 1
+ description: leaf area index
+ #
+ - standard_name: temperature_of_soil_layer
+ canonical_units: K
+ description: temperature in soil layer
+ #
+ - standard_name: height
+ canonical_units: m
+ description: orography
+ #
+ - standard_name: Sa_exner
+ alias: inst_exner_function_height_lowest
+ canonical_units: 1
+ description: dimensionless exner function at surface adjacent layer
+ #
+ - standard_name: Sa_ustar
+ alias: surface_friction_velocity
+ canonical_units: m s-1
+ description: surface friction velocity
+ #
+ #-----------------------------------
+ # section: sea-ice export
+ #-----------------------------------
+ #
+ - standard_name: Faii_evap
+ alias: evap_rate_atm_into_ice
+ canonical_units: kg m-2 s-1
+ description: sea-ice export
+ #
+ - standard_name: Faii_lat
+ alias: laten_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice latent heat flux
+ #
+ - standard_name: Faii_sen
+ alias: sensi_heat_flx_atm_into_ice
+ canonical_units: W m-2
+ description: sea-ice export to atm - atm/ice sensible heat flux
+ #
+ - standard_name: Faii_lwup
+ alias: lwup_flx_ice
+ canonical_units: W m-2
+ description: sea-ice export - outgoing logwave radiation
+ #
+ - standard_name: Faii_swnet
+ canonical_units: W m-2
+ description: sea-ice export to atm
+ #
+ - standard_name: Faii_taux
+ alias: stress_on_air_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to atm - air ice zonal stress
+ #
+ - standard_name: Faii_tauy
+ alias: stress_on_air_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export - air ice meridional stress
+ #
+ - standard_name: Fioi_bcphi
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophilic black carbon flux to ocean
+ #
+ - standard_name: Fioi_bcpho
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - hydrophobic black carbon flux to ocean
+ #
+ - standard_name: Fioi_flxdst
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - dust aerosol flux to ocean
+ #
+ - standard_name: Fioi_melth
+ alias: net_heat_flx_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - net heat flux to ocean
+ #
+ - standard_name: Fioi_meltw
+ alias: mean_fresh_water_to_ocean_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting)
+ #
+ - standard_name: Fioi_meltw_wiso
+ alias: mean_fresh_water_to_ocean_rate_wiso
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) for 16O, 18O, HDO
+ #
+ - standard_name: Fioi_salt
+ alias: mean_salt_rate
+ canonical_units: kg m-2 s-1
+ description: sea-ice export to ocean - salt to ocean (salt flux from melting)
+ #
+ - standard_name: Fioi_swpen
+ alias: mean_sw_pen_to_ocn
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdr
+ alias: mean_sw_pen_to_ocn_vis_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vis dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_vdf
+ alias: mean_sw_pen_to_ocn_vis_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of vif dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idr
+ alias: mean_sw_pen_to_ocn_ir_dir_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dir shortwave through ice to ocean
+ #
+ - standard_name: Fioi_swpen_idf
+ alias: mean_sw_pen_to_ocn_ir_dif_flx
+ canonical_units: W m-2
+ description: sea-ice export to ocean - flux of ir dif shortwave through ice to ocean
+ #
+ - standard_name: Fioi_taux
+ alias: stress_on_ocn_ice_zonal
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean zonal stress
+ #
+ - standard_name: Fioi_tauy
+ alias: stress_on_ocn_ice_merid
+ canonical_units: N m-2
+ description: sea-ice export to ocean - ice ocean meridional stress
+ #
+ - standard_name: Si_anidf
+ alias: inst_ice_ir_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_anidr
+ alias: inst_ice_ir_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdf
+ alias: inst_ice_vis_dif_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_avsdr
+ alias: inst_ice_vis_dir_albedo
+ canonical_units: 1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_ifrac
+ alias: ice_fraction
+ canonical_units: 1
+ description: sea-ice export to atm - ice fraction (varies with time)
+ #
+ - standard_name: Si_imask
+ alias: ice_mask
+ canonical_units: 1
+ description: sea-ice export - ice mask
+ #
+ - standard_name: Si_qref
+ canonical_units: kg kg-1
+ description: sea-ice export to atm
+ #
+ - standard_name: Si_t
+ alias: sea_ice_surface_temperature
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_tref
+ canonical_units: K
+ description: sea-ice export
+ #
+ - standard_name: Si_u10
+ canonical_units: m/s
+ description: sea-ice export
+ #
+ - standard_name: Si_vice
+ alias: sea_ice_volume
+ canonical_units: m
+ description: sea-ice export - volume of ice per unit area
+ #
+ - standard_name: Si_snowh
+ canonical_units: m
+ description: sea-ice export - surface_snow_water_equivalent
+ #
+ - standard_name: Si_vsno
+ alias: snow_volume_on_sea_ice
+ canonical_units: m
+ description: sea-ice export - volume of snow per unit area
+ #
+ - standard_name: Si_thick
+ canonical_units: m
+ description: sea-ice export - ice thickness
+ #
+ - standard_name: Si_floediam
+ canonical_units: m
+ description: sea-ice export - ice floe diameter
+ #
+ #-----------------------------------
+ # section: ocean export to mediator
+ #-----------------------------------
+ #
+ - standard_name: Fioo_q
+ alias: freezing_melting_potential
+ canonical_units: W m-2
+ description: ocean export
+ #
+ - standard_name: So_bldepth
+ alias: mixed_layer_depth
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_h
+ alias: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ocean export
+ - standard_name: So_h
+ alias: seahgt
+ #
+ - standard_name: So_dhdx
+ alias: sea_surface_slope_zonal
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_dhdy
+ alias: sea_surface_slope_merid
+ canonical_units: m m-1
+ description: ocean export
+ #
+ - standard_name: So_duu10n
+ canonical_units: m2 s-2
+ description: ocean export
+ #
+ - standard_name: So_fswpen
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_ofrac
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_omask
+ alias: ocean_mask
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_qref
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_re
+ canonical_units: 1
+ description: ocean export
+ #
+ - standard_name: So_s
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ocean export
+ #
+ - standard_name: So_ssq
+ canonical_units: kg kg-1
+ description: ocean export
+ #
+ - standard_name: So_t
+ alias: sea_surface_temperature
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_tref
+ canonical_units: K
+ description: ocean export
+ #
+ - standard_name: So_u
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_u10
+ canonical_units: m
+ description: ocean export
+ #
+ - standard_name: So_ustar
+ canonical_units: m s-1
+ description: ocean export
+ #
+ - standard_name: So_v
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ocean export
+ #
+ #-----------------------------------
+ # section: ocean import
+ #-----------------------------------
+ #
+ - standard_name: Foxx_hrain
+ canonical_units: W m-2
+ description: to ocn heat content of rain
+ #
+ - standard_name: Foxx_hsnow
+ canonical_units: W m-2
+ description: to ocn heat content of snow
+ #
+ - standard_name: Foxx_hevap
+ canonical_units: W m-2
+ description: to ocn heat content of evaporation
+ #
+ - standard_name: Foxx_hcond
+ canonical_units: W m-2
+ description: to ocn heat content of condensation
+ #
+ - standard_name: Foxx_hrofl
+ canonical_units: W m-2
+ description: to ocn heat content of liquid runoff
+ #
+ - standard_name: Foxx_hrofi
+ canonical_units: W m-2
+ description: to ocn heat content of ice runoff
+ #
+ - standard_name: Foxx_rofi
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (frozen)
+ #
+ - standard_name: Foxx_rofl
+ canonical_units: kg m-2 s-1
+ description: ocean import - water flux due to runoff (liquid)
+ #
+ - standard_name: Foxx_swnet
+ alias: mean_net_sw_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdr
+ alias: mean_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_vdf
+ alias: mean_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave visible diffuse radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idr
+ alias: mean_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir direct radiation to ocean
+ #
+ - standard_name: Foxx_swnet_idf
+ alias: mean_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ description: ocean import - net shortwave ir diffuse radiation to ocean
+ #
+ - standard_name: Foxx_sen
+ alias: mean_sensi_heat_flx
+ canonical_units: W m-2
+ description: ocean import - sensible heat flux into ocean
+ #
+ - standard_name: Foxx_lat
+ canonical_units: W m-2
+ description: ocean import - latent heat flux into ocean
+ #
+ - standard_name: Foxx_taux
+ alias: mean_zonal_moment_flx
+ canonical_units: N m-2
+ description: ocean import - zonal surface stress to ocean
+ #
+ - standard_name: Foxx_tauy
+ alias: mean_merid_moment_flx
+ canonical_units: N m-2
+ description: ocean import - meridional surface stress to ocean
+ #
+ #-----------------------------------
+ # mediator fields
+ #-----------------------------------
+ #
+ - standard_name: cpl_scalars
+ canonical_units: unitless
+ #
+ - standard_name: frac
+ canonical_units: 1
+ #
+ - standard_name: mask
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # fields to use fluxes from mediator
+ #-----------------------------------
+ #
+ - standard_name: Faox_lat
+ alias: laten_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface latent heat flux
+ #
+ - standard_name: Faox_sen
+ alias: sensi_heat_flx_atm_into_ocn
+ canonical_units: W m-2
+ description: mediator export - atm/ocn surface sensible heat flux
+ #
+ - standard_name: Faox_lwup
+ alias: lwup_flx_ocn
+ canonical_units: W m-2
+ description: mediator export - long wave radiation flux over the ocean
+ #
+ - standard_name: Faox_taux
+ alias: stress_on_air_ocn_zonal
+ canonical_units: N m-2
+ description: mediator export
+ #
+ - standard_name: Faox_tauy
+ alias: stress_on_air_ocn_merid
+ canonical_units: N m-2
+ description: mediator export
+ #
+ #-----------------------------------
+ # section: atmosphere fields that need to be defined but are not used
+ #-----------------------------------
+ #
+ - standard_name: mean_prec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_fprec_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_prec_rate_conv
+ canonical_units: kg m-2 s-1
+ - standard_name: mean_down_lw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_lw_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_flx
+ canonical_units: W m-2
+ - standard_name: mean_net_sw_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_net_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_ir_dir_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dif_flx
+ canonical_units: W m-2
+ - standard_name: mean_down_sw_vis_dir_flx
+ canonical_units: W m-2
+ - standard_name: inst_surface_height
+ canonical_units: m
+ - standard_name: mean_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: mean_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_zonal_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_merid_moment_flx_atm
+ canonical_units: N m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_laten_heat_flx
+ canonical_units: N m-2
+ - standard_name: inst_evap_rate
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_tracer_up_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_down_surface_flx
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_tracer_clmn_mass_dens
+ canonical_units: g m-2
+ - standard_name: inst_tracer_anth_biom_flx
+ canonical_units: ug m-2 s-1
+ description: atmosphere export
+ - standard_name: inst_pres_interface
+ canonical_units: Pa
+ - standard_name: inst_pres_levels
+ canonical_units: Pa
+ - standard_name: inst_geop_interface
+ canonical_units: tbd
+ - standard_name: inst_geop_levels
+ canonical_units: tbd
+ - standard_name: inst_temp_interface
+ canonical_units: K
+ - standard_name: inst_temp_levels
+ canonical_units: K
+ - standard_name: inst_zonal_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_merid_wind_levels
+ canonical_units: m s-1
+ - standard_name: inst_omega_levels
+ canonical_units: tbd
+ - standard_name: inst_tracer_mass_frac
+ canonical_units: 1
+ - standard_name: inst_soil_moisture_content
+ canonical_units: tbd
+ - standard_name: soil_type
+ canonical_units: tbd
+ - standard_name: inst_pbl_height
+ canonical_units: tbd
+ - standard_name: surface_cell_area
+ canonical_units: tbd
+ - standard_name: inst_convective_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_spec_humid_conv_tendency_levels
+ canonical_units: tbd
+ - standard_name: inst_exchange_coefficient_heat_levels
+ canonical_units: tbd
+ - standard_name: inst_friction_velocity
+ canonical_units: tbd
+ - standard_name: inst_rainfall_amount
+ canonical_units: tbd
+ - standard_name: inst_land_sea_mask
+ canonical_units: tbd
+ - standard_name: inst_temp_height_surface
+ canonical_units: tbd
+ - standard_name: inst_up_sensi_heat_flx
+ canonical_units: tbd
+ - standard_name: inst_lwe_snow_thickness
+ canonical_units: tbd
+ - standard_name: vegetation_type
+ canonical_units: tbd
+ - standard_name: inst_vegetation_area_frac
+ canonical_units: tbd
+ - standard_name: inst_surface_roughness
+ canonical_units: tbd
+ - standard_name: inst_laten_heat_flx
+ canonical_units: W m-2
+ - standard_name: inst_sensi_heat_flx
+ canonical_units: W m-2
+ - standard_name: land_mask
+ canonical_units: 1
+ - standard_name: inst_cloud_frac_levels
+ canonical_units: 1
+ - standard_name: inst_ice_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_liq_nonconv_tendency_levels
+ canonical_units: kg m-2 s-1
+ - standard_name: inst_surface_soil_wetness
+ canonical_units: 1
+ - standard_name: lake_fraction
+ canonical_units: 1
+ - standard_name: ice_fraction_in_atm
+ alias: sea_ice_area_fraction
+ canonical_units: 1
+ - standard_name: ocean_fraction
+ canonical_units: 1
+ - standard_name: surface_snow_area_fraction
+ canonical_units: 1
+ #
+ #-----------------------------------
+ # WW3 import
+ #-----------------------------------
+ #
+ - standard_name: sea_surface_height_above_sea_level
+ canonical_units: m
+ description: ww3 import
+ #
+ - standard_name: sea_surface_salinity
+ alias: s_surf
+ canonical_units: g kg-1
+ description: ww3 import
+ #
+ - standard_name: surface_eastward_sea_water_velocity
+ alias: ocn_current_zonal
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: surface_northward_sea_water_velocity
+ alias: ocn_current_merid
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: eastward_wind_at_10m_height
+ alias: inst_zonal_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: northward_wind_at_10m_height
+ alias: inst_merid_wind_height10m
+ canonical_units: m s-1
+ description: ww3 import
+ #
+ - standard_name: sea_ice_concentration
+ alias: ice_fraction
+ canonical_units: 1
+ description: ww3 import
+ #
+ #-----------------------------------
+ # WW3 export
+ #-----------------------------------
+ #
+ - standard_name: Sw_z0
+ alias: wave_z0_roughness_length
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_z0
+ alias: z0rlen
+ #
+ - standard_name: Sw_pstokes_x
+ alias: eastward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_pstokes_y
+ alias: northward_partitioned_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export partitioned drift components using ungridded dimension
+ #
+ - standard_name: Sw_elevation_spectrum
+ alias: wave_elevation_spectrum
+ canonical_units: m2/s
+ description: wave elevation spectrum
+ #
+ # remaining fields are unused but required to be present
+ #
+ - standard_name: Sw_ch
+ alias: wave_induced_charnock_parameter
+ canonical_units: 1
+ description: ww3 export
+ - standard_name: Sw_ch
+ alias: charno
+ #
+ - standard_name: eastward_stokes_drift_current
+ alias: uscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: northward_stokes_drift_current
+ alias: vscurr
+ canonical_units: m s-1
+ description: ww3 export spectrum of drift components
+ #
+ - standard_name: Sw_ustokes
+ alias: eastward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export surface drift components
+ - standard_name: Sw_ustokes
+ alias: ussx
+ #
+ - standard_name: Sw_vstokes
+ alias: northward_surface_stokes_drift_current
+ canonical_units: m s-1
+ description: ww3 export using surface drift components
+ - standard_name: Sw_vstokes
+ alias: ussy
+ #
+ - standard_name: Sw_wbcuru
+ alias: eastward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcuru
+ alias: wbcuru
+ #
+ - standard_name: Sw_wbcurv
+ alias: northward_wave_bottom_current
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_wbcurv
+ alias: wbcurv
+ #
+ - standard_name: Sw_wbcurp
+ alias: wave_bottom_current_period
+ canonical_units: s
+ description: ww3 export
+ - standard_name: Sw_wbcurp
+ alias: wbcurp
+ #
+ - standard_name: Sw_wavsuu
+ alias: eastward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuu
+ alias: wavsuu
+ #
+ - standard_name: Sw_wavsuv
+ alias: eastward_northward_wave_radiation_stress
+ canonical_units: N m-1
+ description: ww3 export
+ - standard_name: Sw_wavsuv
+ alias: wavsuv
+ #
+ - standard_name: Sw_wavsvv
+ alias: northward_wave_radiation_stress
+ canonical_units: Pa
+ description: ww3 export
+ - standard_name: Sw_wavsvv
+ alias: wavsvv
+ #
+ - standard_name: Sw_ustokes1
+ alias: eastward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes1
+ alias: x1pstk
+ #
+ - standard_name: Sw_ustokes2
+ alias: eastward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes2
+ alias: x2pstk
+ #
+ - standard_name: Sw_ustokes3
+ alias: eastward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_ustokes3
+ alias: x3pstk
+ #
+ - standard_name: Sw_vstokes1
+ alias: northward_partitioned_stokes_drift_1
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes1
+ alias: y1pstk
+ #
+ - standard_name: Sw_vstokes2
+ alias: northward_partitioned_stokes_drift_2
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes2
+ alias: y2pstk
+ #
+ - standard_name: Sw_vstokes3
+ alias: northward_partitioned_stokes_drift_3
+ canonical_units: m s-1
+ description: ww3 export
+ - standard_name: Sw_vstokes3
+ alias: y3pstk
+ #
+ #-----------------------------------
+ # section: FV3 atm export/import to/from JEDI
+ #-----------------------------------
+ #
+ - standard_name: u
+ canonical_units: m s-1
+ #
+ - standard_name: v
+ canonical_units: m s-1
+ #
+ - standard_name: ua
+ canonical_units: m s-1
+ #
+ - standard_name: va
+ canonical_units: m s-1
+ #
+ - standard_name: t
+ canonical_units: K
+ #
+ - standard_name: delp
+ canonical_units: Pa
+ #
+ - standard_name: sphum
+ canonical_units: kg kg-1
+ #
+ - standard_name: ice_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: liq_wat
+ canonical_units: kg kg-1
+ #
+ - standard_name: o3mr
+ canonical_units: kg kg-1
+ #
+ - standard_name: phis
+ canonical_units: m2 s-2
+ #
+ - standard_name: u_srf
+ canonical_units: m s-1
+ #
+ - standard_name: v_srf
+ canonical_units: m s-1
+ #
+ #
+ - standard_name: slmsk
+ canonical_units: flag
+ description: landmask sea/land/ice=0/1/2
+ #
+ - standard_name: weasd
+ canonical_units: mm
+ description: water equiv of acc snow depth over land and sea ice
+ #
+ - standard_name: tsea
+ canonical_units: K
+ description: surface skin temperature
+ #
+ - standard_name: vtype
+ canonical_units: index
+ description: vegetation type
+ #
+ - standard_name: stype
+ canonical_units: index
+ description: soil type
+ #
+ - standard_name: Sa_vfrac
+ canonical_units: frac
+ description: areal fractional cover of green vegetation
+ - standard_name: Sa_vfrac
+ alias: vfrac
+ #
+ - standard_name: stc
+ canonical_units: K
+ description: soil temperature content
+ #
+ - standard_name: smc
+ canonical_units: m3 m-3
+ description: soil moisture content
+ #
+ - standard_name: snwdph
+ canonical_units: mm
+ description: snow depth in mm
+ #
+ - standard_name: f10m
+ canonical_units: ratio
+ description: fm at 10m - Ratio of sigma level 1 wind and 10m wind
+ #
+ - standard_name: Sa_zorl
+ canonical_units: cm
+ description: composite surface roughness in cm
+ - standard_name: Sa_zorl
+ alias: zorl
+ #
+ - standard_name: t2m
+ canonical_units: K
+ description: two meter temperature
+ #
+ #-----------------------------------
+ # section: land export
+ #-----------------------------------
+ #
+ - standard_name: Sl_lfrac
+ alias: land_fraction
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_lfrin
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_t
+ canonical_units: K
+ description: land export
+ #
+ - standard_name: inst_tracer_diag_aod
+ canonical_units: 1
+ description: AOD
+ #
+ - standard_name: Sl_sfrac
+ alias: inst_snow_area_fraction_lnd
+ canonical_units: 1
+ description: land export
+ #
+ - standard_name: Sl_tref
+ alias: inst_temp_height2m_lnd
+ canonical_units: K
+ description: mediator export to glc - no levation classes
+ #
+ - standard_name: Sl_qref
+ alias: inst_spec_humid_height2m_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Sl_q
+ alias: inst_spec_humid_lnd
+ canonical_units: kg kg-1
+ description: land export
+ #
+ - standard_name: Fall_lat
+ alias: inst_laten_heat_flx_lnd
+ canonical_units: kg kg-1 m s-1
+ description: land export to atm - atm/lnd latent heat flux
+ #
+ - standard_name: Fall_sen
+ alias: inst_sensi_heat_flx_lnd
+ canonical_units: K m s-1
+ description: land export to atm - atm/lnd sensible heat flux
+ #
+ - standard_name: Fall_evap
+ alias: inst_potential_laten_heat_flx_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_gflx
+ alias: inst_upward_heat_flux_lnd
+ canonical_units: W m-2
+ description: land export
+ #
+ - standard_name: Fall_roff
+ alias: inst_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Fall_soff
+ alias: inst_subsurface_runoff_rate_lnd
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_cmm
+ alias: inst_drag_wind_speed_for_momentum
+ canonical_units: m s-1
+ description: land export
+ #
+ - standard_name: Sl_chh
+ alias: inst_drag_mass_flux_for_heat_and_moisture
+ canonical_units: kg m-2 s-1
+ description: land export
+ #
+ - standard_name: Sl_zvfun
+ alias: inst_func_of_roughness_length_and_vfrac
+ canonical_units: 1
+ description: land export
diff --git a/ush/sample_configs/config_c3/firewx/field_table b/ush/sample_configs/config_c3/firewx/field_table
new file mode 100644
index 000000000..691a27f54
--- /dev/null
+++ b/ush/sample_configs/config_c3/firewx/field_table
@@ -0,0 +1,85 @@
+# added by FRE: sphum must be present in atmos
+# specific humidity for moist runs
+ "TRACER", "atmos_mod", "sphum"
+ "longname", "specific humidity"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e-6" /
+# prognostic cloud water mixing ratio
+ "TRACER", "atmos_mod", "liq_wat"
+ "longname", "cloud water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic ice water mixing ratio
+ "TRACER", "atmos_mod", "ice_wat"
+ "longname", "cloud ice mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic rain water mixing ratio
+ "TRACER", "atmos_mod", "rainwat"
+ "longname", "rain water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic snow water mixing ratio
+ "TRACER", "atmos_mod", "snowwat"
+ "longname", "snow water mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic graupel mixing ratio
+ "TRACER", "atmos_mod", "graupel"
+ "longname", "graupel mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# prognostic cloud water number concentration
+ "TRACER", "atmos_mod", "water_nc"
+ "longname", "cloud liquid water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic cloud ice number concentration
+ "TRACER", "atmos_mod", "ice_nc"
+ "longname", "cloud ice water number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic rain number concentration
+ "TRACER", "atmos_mod", "rain_nc"
+ "longname", "rain number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic ozone mixing ratio tracer
+ "TRACER", "atmos_mod", "o3mr"
+ "longname", "ozone mixing ratio"
+ "units", "kg/kg"
+ "profile_type", "fixed", "surface_value=1.e30" /
+# water- and ice-friendly aerosols (Thompson)
+ "TRACER", "atmos_mod", "liq_aero"
+ "longname", "water-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+ "TRACER", "atmos_mod", "ice_aero"
+ "longname", "ice-friendly aerosol number concentration"
+ "units", "/kg"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic subgrid scale turbulent kinetic energy
+ "TRACER", "atmos_mod", "sgs_tke"
+ "longname", "subgrid scale turbulent kinetic energy"
+ "units", "m2/s2"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic sigmab tracer
+ "TRACER", "atmos_mod", "sigmab"
+ "longname", "sigma fraction"
+ "units", "fraction"
+ "profile_type", "fixed", "surface_value=0.0" /
+# prognostic smoke mixing ratio tracer
+ "TRACER", "atmos_mod", "smoke"
+ "longname", "smoke mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic dust mixing ratio tracer
+ "TRACER", "atmos_mod", "dust"
+ "longname", "dust mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
+# prognostic coarsepm mixing ratio tracer
+ "TRACER", "atmos_mod", "coarsepm"
+ "longname", "coarsepm mixing ratio"
+ "units", "ug/kg"
+ "profile_type", "fixed", "surface_value=1.e-12" /
diff --git a/ush/sample_configs/config_c3/firewx/input.nml b/ush/sample_configs/config_c3/firewx/input.nml
new file mode 100644
index 000000000..c066bbeba
--- /dev/null
+++ b/ush/sample_configs/config_c3/firewx/input.nml
@@ -0,0 +1,316 @@
+&amip_interp_nml
+ data_set = 'reynolds_oi'
+ date_out_of_range = 'climo'
+ interp_oi_sst = .true.
+ no_anom_sst = .false.
+ use_ncep_ice = .false.
+ use_ncep_sst = .true.
+/
+
+&atmos_model_nml
+ avg_max_length = 3600.0
+ blocksize = 32
+ ccpp_suite = 'RRFS_sas_nogwd'
+ chksum_debug = .false.
+ dycore_only = .false.
+ ignore_rst_cksum = .true.
+/
+
+&cires_ugwp_nml
+ knob_ugwp_azdir = 2, 4, 4, 4
+ knob_ugwp_doaxyz = 1
+ knob_ugwp_doheat = 1
+ knob_ugwp_dokdis = 1
+ knob_ugwp_effac = 1, 1, 1, 1
+ knob_ugwp_ndx4lh = 1
+ knob_ugwp_solver = 2
+ knob_ugwp_source = 1, 1, 0, 0
+ knob_ugwp_stoch = 0, 0, 0, 0
+ knob_ugwp_version = 0
+ knob_ugwp_wvspec = 1, 25, 25, 25
+ launch_level = 25
+/
+
+&diag_manager_nml
+ max_output_fields = 500
+ prepend_date = .false.
+/
+
+&external_ic_nml
+ checker_tr = .false.
+ filtered_terrain = .true.
+ gfs_dwinds = .true.
+ levp = 66
+ nt_checker = 0
+/
+
+&fms2_io_nml
+ netcdf_default_format = 'netcdf4'
+/
+
+&fms_io_nml
+ checksum_required = .false.
+ max_files_r = 100
+ max_files_w = 100
+/
+
+&fms_nml
+ clock_grain = 'ROUTINE'
+ domains_stack_size = 3000000
+ print_memory_usage = .false.
+/
+
+&fv_core_nml
+ a_imp = 1.0
+ adjust_dry_mass = .false.
+ bc_update_interval = 1
+ beta = 0.0
+ consv_am = .false.
+ consv_te = 0.0
+ d2_bg = 0.0
+ d2_bg_k1 = 0.2
+ d2_bg_k2 = 0.04
+ d4_bg = 0.12
+ d_con = 0.5
+ d_ext = 0.0
+ dddmp = 0.1
+ delt_max = 0.008
+ dnats = 0
+ do_sat_adj = .false.
+ do_schmidt = .true.
+ do_vort_damp = .true.
+ dwind_2d = .false.
+ dz_min = 2.0
+ external_eta = .true.
+ external_ic = .true.
+ fill = .true.
+ full_zs_filter = .false.
+ fv_debug = .false.
+ fv_sg_adj = 7200
+ gfs_phil = .false.
+ hord_dp = 6
+ hord_mt = 6
+ hord_tm = 6
+ hord_tr = 8
+ hord_vt = 6
+ hydrostatic = .false.
+ io_layout = 1, 1
+ k_split = 2
+ ke_bg = 0.0
+ kord_mt = 9
+ kord_tm = -9
+ kord_tr = 9
+ kord_wz = 9
+ layout = 14, 14
+ make_nh = .true.
+ mountain = .false.
+ n_split = 5
+ n_sponge = 65
+ n_zs_filter = 0
+ na_init = 1
+ ncep_ic = .false.
+ nggps_ic = .true.
+ no_dycore = .false.
+ nord = 3
+ nord_tr = 0
+ npx = 351
+ npy = 351
+ npz = 65
+ nrows_blend = 10
+ ntiles = 1
+ nudge_qv = .false.
+ nwat = 6
+ p_fac = 0.1
+ phys_hydrostatic = .false.
+ print_freq = 6
+ psm_bc = 1
+ range_warn = .true.
+ read_increment = .false.
+ regional = .true.
+ regional_bcs_from_gsi = .false.
+ res_latlon_dynamics = 'fv3_increment.nc'
+ reset_eta = .false.
+ rf_cutoff = 2000.0
+ sg_cutoff = -1
+ stretch_fac = 0.999
+ target_lat = 49.3
+ target_lon = -123.0
+ tau = 5.0
+ use_hydro_pressure = .false.
+ vtdm4 = 0.02
+ warm_start = .false.
+ write_restart_with_bcs = .false.
+ z_tracer = .true.
+/
+
+&fv_grid_nml
+ grid_file = 'INPUT/grid_spec.nc'
+/
+
+&gfs_physics_nml
+ betadcu = 1.0
+ bl_mynn_edmf = 1
+ bl_mynn_edmf_mom = 1
+ bl_mynn_tkeadvect = .true.
+ cal_pre = .false.
+ cdmbgwd = 3.5, 1.0
+ cnvcld = .false.
+ cnvgwd = .false.
+ cplflx = .false.
+ debug = .false.
+ diag_log = .true.
+ do_deep = .true.
+ do_gsl_drag_ls_bl = .false.
+ do_gsl_drag_ss = .false.
+ do_gsl_drag_tofd = .false.
+ do_mynnedmf = .true.
+ do_mynnsfclay = .true.
+ do_tofd = .false.
+ do_ugwp = .false.
+ do_ugwp_v0 = .false.
+ do_ugwp_v0_nst_only = .false.
+ do_ugwp_v0_orog_only = .false.
+ dspheat = .true.
+ dt_inner = 20
+ ebb_dcycle = 2
+ effr_in = .true.
+ enh_mix = .false.
+ fhcyc = 0
+ fhlwr = 900.0
+ fhswr = 900.0
+ fhzero = 1.0
+ gwd_opt = 0
+ h2o_phys = .true.
+ hybedmf = .false.
+ iaer = 1011
+ ialb = 2
+ iau_delthrs = 6
+ iau_inc_files = ''
+ iaufhrs = 30
+ iccn = 2
+ icliq_sw = 2
+ icloud_bl = 1
+ ico2 = 2
+ iems = 2
+ imfdeepcnv = 2
+ imfshalcnv = -1
+ imp_physics = 8
+ iopt_alb = 2
+ iopt_btr = 1
+ iopt_crs = 1
+ iopt_dveg = 2
+ iopt_frz = 1
+ iopt_inf = 1
+ iopt_rad = 1
+ iopt_run = 1
+ iopt_sfc = 1
+ iopt_snf = 4
+ iopt_stc = 1
+ iopt_tbot = 2
+ iovr = 3
+ isncond_opt = 2
+ isncovr_opt = 3
+ isol = 2
+ isot = 1
+ isubc_lw = 2
+ isubc_sw = 2
+ ivegsrc = 1
+ kice = 9
+ ldiag3d = .false.
+ ldiag_ugwp = .false.
+ lgfdlmprad = .false.
+ lheatstrg = .false.
+ lightning_threat = .true.
+ lradar = .true.
+ lrefres = .true.
+ lsm = 3
+ lsoil = 9
+ lsoil_lsm = 9
+ ltaerosol = .true.
+ lwhtr = .true.
+ mosaic_lu = 1
+ mosaic_soil = 1
+ nsfullradar_diag = 3600
+ oz_phys = .false.
+ oz_phys_2015 = .true.
+ pdfcld = .false.
+ pre_rad = .false.
+ print_diff_pgr = .false.
+ progsigma = .true.
+ prslrd0 = 0.0
+ random_clds = .false.
+ redrag = .true.
+ rrfs_sd = .false.
+ satmedmf = .false.
+ sfclay_compute_flux = .true.
+ shal_cnv = .false.
+ swhtr = .true.
+ thsfc_loc = .false.
+ trans_trac = .true.
+ ttendlim = -999
+ use_ufo = .true.
+/
+
+&interpolator_nml
+ interp_method = 'conserve_great_circle'
+/
+
+&nam_sfcperts
+/
+
+&nam_sppperts
+/
+
+&nam_stochy
+/
+
+&namsfc
+ fabsl = 99999
+ faisl = 99999
+ faiss = 99999
+ fnabsc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.maximum_snow_albedo.tileX.nc'
+ fnacna = ''
+ fnaisc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/CFSR.SEAICE.1982.2012.monthly.clim.grb'
+ fnalbc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.snowfree_albedo.tileX.nc'
+ fnalbc2 = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.facsf.tileX.nc'
+ fnglac = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/global_glacier.2x2.grb'
+ fnmskh = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/seaice_newland.grb'
+ fnmxic = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/global_maxice.2x2.grb'
+ fnslpc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.slope_type.tileX.nc'
+ fnsmcc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/global_soilmgldas.t1534.3072.1536.grb'
+ fnsnoa = ''
+ fnsnoc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/global_snoclim.1.875.grb'
+ fnsotc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.soil_type.tileX.nc'
+ fntg3c = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.substrate_temperature.tileX.nc'
+ fntsfa = ''
+ fntsfc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/v0.9.1/rrfs_firewx/fix_am/RTGSST.1982.2012.monthly.clim.grb'
+ fnvegc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.vegetation_greenness.tileX.nc'
+ fnvetc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.vegetation_type.tileX.nc'
+ fnvmnc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.vegetation_greenness.tileX.nc'
+ fnvmxc = '/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/rrfs.v1.0.0/parm/config/firewx/fix_lam/C6667.vegetation_greenness.tileX.nc'
+ fnzorc = 'igbp'
+ fsicl = 99999
+ fsics = 99999
+ fslpl = 99999
+ fsmcl = 99999, 99999, 99999
+ fsnol = 99999
+ fsnos = 99999
+ fsotl = 99999
+ ftsfl = 99999
+ ftsfs = 90
+ fvetl = 99999
+ fvmnl = 99999
+ fvmxl = 99999
+ ldebug = .true.
+/
+
+&surf_map_nml
+ cd2 = -1
+ cd4 = 0.12
+ max_slope = 0.4
+ n_del2_strong = 0
+ n_del2_weak = 2
+ n_del4 = 1
+ peak_fac = 1.0
+ zero_ocean = .false.
+/
diff --git a/ush/set_FV3nml_sfc_climo_filenames.sh b/ush/set_FV3nml_sfc_climo_filenames.sh
index 32a7ff30a..6a7d5f796 100644
--- a/ush/set_FV3nml_sfc_climo_filenames.sh
+++ b/ush/set_FV3nml_sfc_climo_filenames.sh
@@ -185,6 +185,7 @@ $settings"
#-----------------------------------------------------------------------
#
fv3_nml_base_fp="${FV3_NML_FN}.base"
+DATA="${EXPTDIR}"
mv "${DATA}/${FV3_NML_FN}" "${DATA}/${fv3_nml_base_fp}"
$USHrrfs/set_namelist.py -q \
diff --git a/ush/set_rrfs_config_general.sh b/ush/set_rrfs_config_general.sh
index f5cd5d6ce..30199cef3 100644
--- a/ush/set_rrfs_config_general.sh
+++ b/ush/set_rrfs_config_general.sh
@@ -132,7 +132,7 @@ MAXTRIES_PRDGEN="2"
WTIME_FORECAST="00:45:00"
WTIME_FORECAST_LONG="03:45:00"
-WTIME_MAKE_LBCS="02:00:00"
+WTIME_MAKE_LBCS="00:30:00"
WTIME_ANALYSIS_GSI="00:50:00"
WTIME_PREP_CYC="00:20:00"
@@ -140,7 +140,7 @@ START_TIME_SPINUP="01:30:00"
START_TIME_PROD="01:40:00"
START_TIME_LATE_ANALYSIS="01:40:00"
START_TIME_CONVENTIONAL_SPINUP="00:40:00"
-START_TIME_BLENDING="04:00:00"
+START_TIME_BLENDING="02:00:00"
START_TIME_CONVENTIONAL="00:50:00"
START_TIME_NSSLMOSIAC="00:55:00"
START_TIME_PROCESS_SMOKE="00:50:00"
@@ -223,12 +223,12 @@ if [[ ${PREDEF_GRID_NAME} == "RRFS_CONUS_3km" ]] ; then
NNODES_MAKE_ICS="2"
NNODES_BLEND_ICS="1"
NNODES_MAKE_LBCS="1"
- PPN_ANALYSIS_GSI="32"
- TPP_ANALYSIS_GSI="4"
- NNODES_ANALYSIS_GSI="10"
+ PPN_ANALYSIS_GSI="64"
+ TPP_ANALYSIS_GSI="2"
+ NNODES_ANALYSIS_GSI="5"
PPN_FORECAST="64"
TPP_FORECAST="2"
- NNODES_FORECAST="16"
+ NNODES_FORECAST="8"
PPN_POST="128"
NNODES_POST="1"
TPP_POST="1"
@@ -236,13 +236,13 @@ if [[ ${PREDEF_GRID_NAME} == "RRFS_CONUS_3km" ]] ; then
NNODES_PROCESS_RADAR="1"
PPN_ANALYSIS_ENKF="32"
TPP_ANALYSIS_ENKF="4"
- NNODES_ANALYSIS_ENKF="24"
+ NNODES_ANALYSIS_ENKF="5"
MEMO_PRDGEN="80G"
MEMO_PROCESS_BUFR="80G"
PPN_ANALYSIS_NONVARCLD="128"
- NNODES_ANALYSIS_NONVARCLD="2"
+ NNODES_ANALYSIS_NONVARCLD="1"
PPN_ANALYSIS_GSIDIAG=128
- NNODES_RECENTER="10"
+ NNODES_RECENTER="5"
PPN_RECENTER="128"
MAXTRIES_GET_EXTRN_ICS="1"
@@ -268,7 +268,7 @@ if [[ ${PREDEF_GRID_NAME} == "RRFS_CONUS_3km" ]] ; then
WTIME_FORECAST_SPINUP="00:25:00"
WTIME_MAKE_ICS="00:20:00"
WTIME_BLEND_ICS="00:20:00"
- WTIME_MAKE_LBCS="02:00:00"
+ WTIME_MAKE_LBCS="00:30:00"
WTIME_ANALYSIS_GSI="00:50:00"
WTIME_PREP_CYC="00:20:00"
@@ -476,7 +476,7 @@ elif [[ ${PREDEF_GRID_NAME} == "RRFS_NA_3km" ]] ; then
PPN_PROCESS_RADAR="64"
NNODES_PROCESS_RADAR="1"
PPN_ANALYSIS_ENKF="8"
- NNODES_ANALYSIS_ENKF="10"
+ NNODES_ANALYSIS_ENKF="20"
TPP_ANALYSIS_ENKF="16"
PPN_ANALYSIS_NONVARCLD="128"
NNODES_ANALYSIS_NONVARCLD="1"
diff --git a/ush/setup_nco.sh b/ush/setup_nco.sh
new file mode 100755
index 000000000..f62e3e9f8
--- /dev/null
+++ b/ush/setup_nco.sh
@@ -0,0 +1,2786 @@
+#!/bin/bash
+#
+#-----------------------------------------------------------------------
+#
+# This file defines and then calls a function that sets a secondary set
+# of parameters needed by the various scripts that are called by the
+# FV3-LAM rocoto community workflow. This secondary set of parameters is
+# calculated using the primary set of user-defined parameters in the de-
+# fault and custom experiment/workflow configuration scripts (whose file
+# names are defined below). This script then saves both sets of parame-
+# ters in a global variable definitions file (really a bash script) in
+# the experiment directory. This file then gets sourced by the various
+# scripts called by the tasks in the workflow.
+#
+#-----------------------------------------------------------------------
+#
+function setup() {
+#
+#-----------------------------------------------------------------------
+#
+# Get the full path to the file in which this script/function is located
+# (scrfunc_fp), the name of that file (scrfunc_fn), and the directory in
+# which the file is located (scrfunc_dir).
+#
+#-----------------------------------------------------------------------
+#
+local scrfunc_fp=$( readlink -f "${BASH_SOURCE[0]}" )
+local scrfunc_fn=$( basename "${scrfunc_fp}" )
+local scrfunc_dir=$( dirname "${scrfunc_fp}" )
+#
+#-----------------------------------------------------------------------
+#
+# Get the name of this function.
+#
+#-----------------------------------------------------------------------
+#
+local func_name="${FUNCNAME[0]}"
+#
+#-----------------------------------------------------------------------
+#
+#
+#
+#-----------------------------------------------------------------------
+#
+USHrrfs="${scrfunc_dir}"
+#
+#-----------------------------------------------------------------------
+#
+# Source bash utility functions.
+#
+#-----------------------------------------------------------------------
+#
+. $USHrrfs/source_util_funcs.sh
+#
+#-----------------------------------------------------------------------
+#
+# Source other necessary files.
+#
+#-----------------------------------------------------------------------
+#
+. $USHrrfs/set_cycle_dates.sh
+. $USHrrfs/set_gridparams_GFDLgrid.sh
+. $USHrrfs/set_gridparams_ESGgrid.sh
+. $USHrrfs/link_fix.sh
+. $USHrrfs/set_ozone_param.sh
+. $USHrrfs/set_thompson_mp_fix_files.sh
+. $USHrrfs/check_ruc_lsm.sh
+#
+#-----------------------------------------------------------------------
+#
+# Save current shell options (in a global array). Then set new options
+# for this script/function.
+#
+#-----------------------------------------------------------------------
+#
+{ save_shell_opts; set -u +x; } > /dev/null 2>&1
+#
+#-----------------------------------------------------------------------
+#
+# Set the name of the configuration file containing default values for
+# the experiment/workflow variables. Then source the file.
+#
+#-----------------------------------------------------------------------
+#
+EXPT_DEFAULT_CONFIG_FN="config_defaults.sh"
+. $USHrrfs/${EXPT_DEFAULT_CONFIG_FN}
+#
+#-----------------------------------------------------------------------
+#
+# If a user-specified configuration file exists, source it. This file
+# contains user-specified values for a subset of the experiment/workflow
+# variables that override their default values. Note that the user-
+# specified configuration file is not tracked by the repository, whereas
+# the default configuration file is tracked.
+#
+#-----------------------------------------------------------------------
+#
+if [ -f "${EXPT_CONFIG_FN}" ]; then
+#
+# We require that the variables being set in the user-specified configu-
+# ration file have counterparts in the default configuration file. This
+# is so that we do not introduce new variables in the user-specified
+# configuration file without also officially introducing them in the de-
+# fault configuration file. Thus, before sourcing the user-specified
+# configuration file, we check that all variables in the user-specified
+# configuration file are also assigned default values in the default
+# configuration file.
+#
+ . $USHrrfs/compare_config_scripts.sh
+#
+# Now source the user-specified configuration file.
+#
+ . $USHrrfs/${EXPT_CONFIG_FN}
+#
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Source the script defining the valid values of experiment variables.
+#
+#-----------------------------------------------------------------------
+#
+. $USHrrfs/valid_param_vals.sh
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that VERBOSE is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "VERBOSE" "valid_vals_VERBOSE"
+#
+# Set VERBOSE to either "TRUE" or "FALSE" so we don't have to consider
+# other valid values later on.
+#
+VERBOSE=${VERBOSE^^}
+if [ "$VERBOSE" = "TRUE" ] || \
+ [ "$VERBOSE" = "YES" ]; then
+ VERBOSE="TRUE"
+elif [ "$VERBOSE" = "FALSE" ] || \
+ [ "$VERBOSE" = "NO" ]; then
+ VERBOSE="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that USE_CRON_TO_RELAUNCH is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "USE_CRON_TO_RELAUNCH" "valid_vals_USE_CRON_TO_RELAUNCH"
+#
+# Set USE_CRON_TO_RELAUNCH to either "TRUE" or "FALSE" so we don't have to consider
+# other valid values later on.
+#
+USE_CRON_TO_RELAUNCH=${USE_CRON_TO_RELAUNCH^^}
+if [ "${USE_CRON_TO_RELAUNCH}" = "TRUE" ] || \
+ [ "${USE_CRON_TO_RELAUNCH}" = "YES" ]; then
+ USE_CRON_TO_RELAUNCH="TRUE"
+elif [ "${USE_CRON_TO_RELAUNCH}" = "FALSE" ] || \
+ [ "${USE_CRON_TO_RELAUNCH}" = "NO" ]; then
+ USE_CRON_TO_RELAUNCH="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that RUN_TASK_MAKE_GRID is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "RUN_TASK_MAKE_GRID" "valid_vals_RUN_TASK_MAKE_GRID"
+#
+# Set RUN_TASK_MAKE_GRID to either "TRUE" or "FALSE" so we don't have to
+# consider other valid values later on.
+#
+RUN_TASK_MAKE_GRID=${RUN_TASK_MAKE_GRID^^}
+if [ "${RUN_TASK_MAKE_GRID}" = "TRUE" ] || \
+ [ "${RUN_TASK_MAKE_GRID}" = "YES" ]; then
+ RUN_TASK_MAKE_GRID="TRUE"
+elif [ "${RUN_TASK_MAKE_GRID}" = "FALSE" ] || \
+ [ "${RUN_TASK_MAKE_GRID}" = "NO" ]; then
+ RUN_TASK_MAKE_GRID="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that RUN_TASK_MAKE_OROG is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "RUN_TASK_MAKE_OROG" "valid_vals_RUN_TASK_MAKE_OROG"
+#
+# Set RUN_TASK_MAKE_OROG to either "TRUE" or "FALSE" so we don't have to
+# consider other valid values later on.
+#
+RUN_TASK_MAKE_OROG=${RUN_TASK_MAKE_OROG^^}
+if [ "${RUN_TASK_MAKE_OROG}" = "TRUE" ] || \
+ [ "${RUN_TASK_MAKE_OROG}" = "YES" ]; then
+ RUN_TASK_MAKE_OROG="TRUE"
+elif [ "${RUN_TASK_MAKE_OROG}" = "FALSE" ] || \
+ [ "${RUN_TASK_MAKE_OROG}" = "NO" ]; then
+ RUN_TASK_MAKE_OROG="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that RUN_TASK_MAKE_SFC_CLIMO is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value \
+ "RUN_TASK_MAKE_SFC_CLIMO" "valid_vals_RUN_TASK_MAKE_SFC_CLIMO"
+#
+# Set RUN_TASK_MAKE_SFC_CLIMO to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+RUN_TASK_MAKE_SFC_CLIMO=${RUN_TASK_MAKE_SFC_CLIMO^^}
+if [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "TRUE" ] || \
+ [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "YES" ]; then
+ RUN_TASK_MAKE_SFC_CLIMO="TRUE"
+elif [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "FALSE" ] || \
+ [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "NO" ]; then
+ RUN_TASK_MAKE_SFC_CLIMO="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that RUN_TASK_PRDGEN is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value \
+ "RUN_TASK_PRDGEN" "valid_vals_RUN_TASK_PRDGEN"
+#
+# Set RUN_TASK_PRDGEN to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+RUN_TASK_PRDGEN=${RUN_TASK_PRDGEN^^}
+if [ "${RUN_TASK_PRDGEN}" = "TRUE" ] || \
+ [ "${RUN_TASK_PRDGEN}" = "YES" ]; then
+ RUN_TASK_PRDGEN="TRUE"
+elif [ "${RUN_TASK_PRDGEN}" = "FALSE" ] || \
+ [ "${RUN_TASK_PRDGEN}" = "NO" ]; then
+ RUN_TASK_PRDGEN="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that DO_SHUM is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "DO_SHUM" "valid_vals_DO_SHUM"
+#
+# Set DO_SHUM to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+DO_SHUM=${DO_SHUM^^}
+if [ "${DO_SHUM}" = "TRUE" ] || \
+ [ "${DO_SHUM}" = "YES" ]; then
+ DO_SHUM="TRUE"
+elif [ "${DO_SHUM}" = "FALSE" ] || \
+ [ "${DO_SHUM}" = "NO" ]; then
+ DO_SHUM="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that DO_SPPT is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "DO_SPPT" "valid_vals_DO_SPPT"
+#
+# Set DO_SPPT to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+DO_SPPT=${DO_SPPT^^}
+if [ "${DO_SPPT}" = "TRUE" ] || \
+ [ "${DO_SPPT}" = "YES" ]; then
+ DO_SPPT="TRUE"
+elif [ "${DO_SPPT}" = "FALSE" ] || \
+ [ "${DO_SPPT}" = "NO" ]; then
+ DO_SPPT="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that DO_SPP is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "DO_SPP" "valid_vals_DO_SPP"
+#
+# Set DO_SPP to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+DO_SPP=${DO_SPP^^}
+if [ "${DO_SPP}" = "TRUE" ] || \
+ [ "${DO_SPP}" = "YES" ]; then
+ DO_SPP="TRUE"
+elif [ "${DO_SPP}" = "FALSE" ] || \
+ [ "${DO_SPP}" = "NO" ]; then
+ DO_SPP="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that DO_LSM_SPP is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "DO_LSM_SPP" "valid_vals_DO_LSM_SPP"
+#
+# Set DO_LSM_SPP to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+DO_LSM_SPP=${DO_LSM_SPP^^}
+if [ "${DO_LSM_SPP}" = "TRUE" ] || \
+ [ "${DO_LSM_SPP}" = "YES" ]; then
+ DO_LSM_SPP="TRUE"
+elif [ "${DO_LSM_SPP}" = "FALSE" ] || \
+ [ "${DO_LSM_SPP}" = "NO" ]; then
+ DO_LSM_SPP="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that DO_SKEB is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "DO_SKEB" "valid_vals_DO_SKEB"
+#
+# Set DO_SKEB to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+DO_SKEB=${DO_SKEB^^}
+if [ "${DO_SKEB}" = "TRUE" ] || \
+ [ "${DO_SKEB}" = "YES" ]; then
+ DO_SKEB="TRUE"
+elif [ "${DO_SKEB}" = "FALSE" ] || \
+ [ "${DO_SKEB}" = "NO" ]; then
+ DO_SKEB="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set magnitude of stochastic ad-hoc schemes to -999.0 if they are not
+# being used. This is required at the moment, since "do_shum/sppt/skeb"
+# does not override the use of the scheme unless the magnitude is also
+# specifically set to -999.0. If all "do_shum/sppt/skeb" are set to
+# "false," then none will run, regardless of the magnitude values.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${DO_SHUM}" = "FALSE" ]; then
+ SHUM_MAG=-999.0
+fi
+if [ "${DO_SKEB}" = "FALSE" ]; then
+ SKEB_MAG=-999.0
+fi
+if [ "${DO_SPPT}" = "FALSE" ]; then
+ SPPT_MAG=-999.0
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If running with SPP in MYNN PBL, MYNN SFC, GSL GWD, Thompson MP, or
+# RRTMG, count the number of entries in SPP_VAR_LIST to correctly set
+# N_VAR_SPP, otherwise set it to zero.
+#
+#-----------------------------------------------------------------------
+#
+N_VAR_SPP=0
+if [ "${DO_SPP}" = "TRUE" ]; then
+ N_VAR_SPP=${#SPP_VAR_LIST[@]}
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If running with Noah or RUC-LSM SPP, count the number of entries in
+# LSM_SPP_VAR_LIST to correctly set N_VAR_LNDP, otherwise set it to zero.
+# Also set LNDP_TYPE to 2 for LSM SPP, otherwise set it to zero. Finally,
+# initialize an "FHCYC_LSM_SPP" variable to 0 and set it to 999 if LSM SPP
+# is turned on. This requirement is necessary since LSM SPP cannot run with
+# FHCYC=0 at the moment, but FHCYC cannot be set to anything less than the
+# length of the forecast either. A bug fix will be submitted to
+# ufs-weather-model soon, at which point, this requirement can be removed
+# from regional_workflow.
+#
+#-----------------------------------------------------------------------
+#
+N_VAR_LNDP=0
+LNDP_TYPE=0
+FHCYC_LSM_SPP_OR_NOT=0
+if [ "${DO_LSM_SPP}" = "TRUE" ]; then
+ N_VAR_LNDP=${#LSM_SPP_VAR_LIST[@]}
+ LNDP_TYPE=2
+ FHCYC_LSM_SPP_OR_NOT=0
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If running with SPP, confirm that each SPP-related namelist value
+# contains the same number of entries as N_VAR_SPP (set above to be equal
+# to the number of entries in SPP_VAR_LIST).
+#
+#-----------------------------------------------------------------------
+#
+if [ "${DO_SPP}" = "TRUE" ]; then
+ if [ "${#SPP_MAG_LIST[@]}" != "${N_VAR_SPP}" ] || \
+ [ "${#SPP_LSCALE[@]}" != "${N_VAR_SPP}" ] || \
+ [ "${#SPP_TSCALE[@]}" != "${N_VAR_SPP}" ] || \
+ [ "${#SPP_SIGTOP1[@]}" != "${N_VAR_SPP}" ] || \
+ [ "${#SPP_SIGTOP2[@]}" != "${N_VAR_SPP}" ] || \
+ [ "${#SPP_STDDEV_CUTOFF[@]}" != "${N_VAR_SPP}" ] || \
+ [ "${#ISEED_SPP[@]}" != "${N_VAR_SPP}" ]; then
+ print_err_msg_exit "\
+All MYNN PBL, MYNN SFC, GSL GWD, Thompson MP, or RRTMG SPP-related namelist
+variables set in ${CONFIG_FN} must be equal in number of entries to what is
+found in SPP_VAR_LIST:
+ Number of entries in SPP_VAR_LIST = \"${#SPP_VAR_LIST[@]}\""
+ fi
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If running with LSM SPP, confirm that each LSM SPP-related namelist
+# value contains the same number of entries as N_VAR_LNDP (set above to
+# be equal to the number of entries in LSM_SPP_VAR_LIST).
+#
+#-----------------------------------------------------------------------
+#
+if [ "${DO_LSM_SPP}" = "TRUE" ]; then
+ if [ "${#LSM_SPP_MAG_LIST[@]}" != "${N_VAR_LNDP}" ]; then
+ print_err_msg_exit "\
+All Noah or RUC-LSM SPP-related namelist variables (except ISEED_LSM_SPP)
+set in ${CONFIG_FN} must be equal in number of entries to what is found in
+SPP_VAR_LIST:
+ Number of entries in SPP_VAR_LIST = \"${#LSM_SPP_VAR_LIST[@]}\""
+ fi
+fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that USE_FVCOM is set to a valid value and assign directory
+# and file names.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "USE_FVCOM" "valid_vals_USE_FVCOM"
+#
+# Set USE_FVCOM to either "TRUE" or "FALSE" so we don't have to consider
+# other valid values later on.
+#
+USE_FVCOM=${USE_FVCOM^^}
+if [ "$USE_FVCOM" = "TRUE" ] || \
+ [ "$USE_FVCOM" = "YES" ]; then
+ USE_FVCOM="TRUE"
+elif [ "$USE_FVCOM" = "FALSE" ] || \
+ [ "$USE_FVCOM" = "NO" ]; then
+ USE_FVCOM="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that DOT_OR_USCORE is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "DOT_OR_USCORE" "valid_vals_DOT_OR_USCORE"
+
+#
+#-----------------------------------------------------------------------
+#
+# Make sure the following options are set to a valid value.
+# Convert YES/yes/true to TRUE and NO/no/false to FALSE
+#
+#-----------------------------------------------------------------------
+#
+optionList[0]=DO_DACYCLE
+optionList[1]=DO_SURFACE_CYCLE
+optionList[2]=DO_RETRO
+optionList[3]=LBCS_ICS_ONLY
+optionList[4]=DO_ANALYSIS_NONVARCLD
+optionList[5]=SAVE_CYCLE_LOG
+optionList[6]=DO_SOIL_ADJUST
+optionList[7]=DO_UPDATE_BC
+optionList[8]=DO_RADDA
+optionList[9]=DO_RECENTER
+optionList[10]=DO_BUFRSND
+optionList[11]=USE_RRFSE_ENS
+optionList[12]=DO_SMOKE_DUST
+optionList[13]=DO_POST_PROD
+optionList[14]=DO_POST_SPINUP
+optionList[15]=DO_PARALLEL_PRDGEN
+optionList[16]=DO_ENSEMBLE
+optionList[17]=DO_ENSINIT
+optionList[18]=DO_ENSFCST
+optionList[19]=DO_SAVE_INPUT
+optionList[20]=DO_SAVE_DA_OUTPUT
+optionList[21]=DO_ENS_RADDA
+optionList[22]=DO_GSIDIAG_OFFLINE
+optionList[23]=USE_CLM
+optionList[24]=DO_ENSFCST_MULPHY
+optionList[25]=DO_GLM_FED_DA
+optionList[26]=GLMFED_DATA_MODE
+optionList[27]=EBB_DCYCLE
+optionList[28]=PREP_MODEL_FOR_FED
+
+obs_number=${#optionList[@]}
+for (( i=0; i<${obs_number}; i++ ));
+do
+ value2check=${optionList[$i]}
+ check_var_valid_value "$value2check" "valid_vals_$value2check"
+ eval value2change=\$$value2check
+ value2change=${value2change^^}
+ if [ "${value2change}" = "TRUE" ] ||
+ [ "${value2change}" = "YES" ]; then
+ value2change="TRUE"
+ elif [ "${value2change}" = "FALSE" ] ||
+ [ "${value2change}" = "NO" ]; then
+ value2change="FALSE"
+ fi
+ eval ${value2check}=${value2change}
+done
+
+#
+#-----------------------------------------------------------------------
+#
+# Convert machine name to upper case if necessary. Then make sure that
+# MACHINE is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+MACHINE=$( printf "%s" "$MACHINE" | sed -e 's/\(.*\)/\U\1/' )
+check_var_valid_value "MACHINE" "valid_vals_MACHINE"
+#
+#-----------------------------------------------------------------------
+#
+# Set the number of cores per node, the job scheduler, and the names of
+# several queues. These queues are defined in the default and local
+# workflow/experiment configuration script.
+#
+#-----------------------------------------------------------------------
+#
+case $MACHINE in
+
+ "WCOSS2")
+ NCORES_PER_NODE=128
+ SCHED="pbspro"
+ QUEUE_DEFAULT=${QUEUE_DEFAULT:-"dev"}
+ QUEUE_HPSS=${QUEUE_HPSS:-"dev_transfer"}
+ QUEUE_FORECAST=${QUEUE_FORECAST:-"dev"}
+ QUEUE_ANALYSIS=${QUEUE_ANALYSIS:-"dev"}
+ QUEUE_PRDGEN=${QUEUE_PRDGEN:-"dev"}
+ QUEUE_POST=${QUEUE_POST:-"dev"}
+ ;;
+
+ "HERA")
+ NCORES_PER_NODE=40
+ SCHED="${SCHED:-slurm}"
+ PARTITION_DEFAULT=${PARTITION_DEFAULT:-"hera"}
+ QUEUE_DEFAULT=${QUEUE_DEFAULT:-"batch"}
+ PARTITION_HPSS=${PARTITION_HPSS:-"service"}
+ QUEUE_HPSS=${QUEUE_HPSS:-"batch"}
+ PARTITION_FORECAST=${PARTITION_FORECAST:-"hera"}
+ QUEUE_FORECAST=${QUEUE_FORECAST:-"batch"}
+ QUEUE_PRDGEN=${QUEUE_PRDGEN:-"batch"}
+ QUEUE_POST=${QUEUE_POST:-"batch"}
+ ;;
+
+ "ORION")
+ NCORES_PER_NODE=40
+ SCHED="${SCHED:-slurm}"
+ PARTITION_DEFAULT=${PARTITION_DEFAULT:-"orion"}
+ QUEUE_DEFAULT=${QUEUE_DEFAULT:-"batch"}
+ PARTITION_HPSS=${PARTITION_HPSS:-"service"}
+ QUEUE_HPSS=${QUEUE_HPSS:-"batch"}
+ PARTITION_FORECAST=${PARTITION_FORECAST:-"orion"}
+ QUEUE_FORECAST=${QUEUE_FORECAST:-"batch"}
+ ;;
+
+ "HERCULES")
+ NCORES_PER_NODE=40
+ SCHED="${SCHED:-slurm}"
+ PARTITION_DEFAULT=${PARTITION_DEFAULT:-"hercules"}
+ QUEUE_DEFAULT=${QUEUE_DEFAULT:-"batch"}
+ PARTITION_HPSS=${PARTITION_HPSS:-"service"}
+ QUEUE_HPSS=${QUEUE_HPSS:-"batch"}
+ PARTITION_FORECAST=${PARTITION_FORECAST:-"hercules"}
+ QUEUE_FORECAST=${QUEUE_FORECAST:-"batch"}
+ ;;
+
+ "JET")
+ NCORES_PER_NODE=${NCORES_PER_NODE}
+ SCHED="${SCHED:-slurm}"
+ PARTITION_DEFAULT=${PARTITION_DEFAULT:-"sjet,vjet,kjet,xjet"}
+ QUEUE_DEFAULT=${QUEUE_DEFAULT:-"batch"}
+ PARTITION_HPSS=${PARTITION_HPSS:-"service"}
+ QUEUE_HPSS=${QUEUE_HPSS:-"batch"}
+ PARTITION_FORECAST=${PARTITION_FORECAST:-"sjet,vjet,kjet,xjet"}
+ QUEUE_FORECAST=${QUEUE_FORECAST:-"batch"}
+ PARTITION_ANALYSIS=${PARTITION_ANALYSIS:-"vjet,kjet,xjet"}
+ QUEUE_ANALYSIS=${QUEUE_ANALYSIS:-"batch"}
+ PARTITION_PRDGEN=${PARTITION_PRDGEN:-"sjet,vjet,kjet,xjet"}
+ QUEUE_PRDGEN=${QUEUE_PRDGEN:-"batch"}
+ PARTITION_POST=${PARTITION_POST:-"sjet,vjet,kjet,xjet"}
+ QUEUE_POST=${QUEUE_POST:-"batch"}
+ ;;
+
+esac
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that the job scheduler set above is valid.
+#
+#-----------------------------------------------------------------------
+#
+SCHED="${SCHED,,}"
+check_var_valid_value "SCHED" "valid_vals_SCHED"
+#
+#-----------------------------------------------------------------------
+#
+# Verify that the ACCOUNT variable is not empty. If it is, print out an
+# error message and exit.
+#
+#-----------------------------------------------------------------------
+#
+if [ -z "$ACCOUNT" ]; then
+ print_err_msg_exit "\
+The variable ACCOUNT cannot be empty:
+ ACCOUNT = \"$ACCOUNT\""
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set the grid type (GTYPE). In general, in the FV3 code, this can take
+# on one of the following values: "global", "stretch", "nest", and "re-
+# gional". The first three values are for various configurations of a
+# global grid, while the last one is for a regional grid. Since here we
+# are only interested in a regional grid, GTYPE must be set to "region-
+# al".
+#
+#-----------------------------------------------------------------------
+#
+GTYPE="regional"
+TILE_RGNL="7"
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that GTYPE is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "GTYPE" "valid_vals_GTYPE"
+#
+#-----------------------------------------------------------------------
+#
+# Make sure PREDEF_GRID_NAME is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+if [ ! -z ${PREDEF_GRID_NAME} ]; then
+ err_msg="\
+The predefined regional grid specified in PREDEF_GRID_NAME is not sup-
+ported:
+ PREDEF_GRID_NAME = \"${PREDEF_GRID_NAME}\""
+ check_var_valid_value \
+ "PREDEF_GRID_NAME" "valid_vals_PREDEF_GRID_NAME" "${err_msg}"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that PREEXISTING_DIR_METHOD is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value \
+ "PREEXISTING_DIR_METHOD" "valid_vals_PREEXISTING_DIR_METHOD"
+#
+#-----------------------------------------------------------------------
+#
+# Make sure CCPP_PHYS_SUITE is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+err_msg="\
+The CCPP physics suite specified in CCPP_PHYS_SUITE is not supported:
+ CCPP_PHYS_SUITE = \"${CCPP_PHYS_SUITE}\""
+check_var_valid_value \
+ "CCPP_PHYS_SUITE" "valid_vals_CCPP_PHYS_SUITE" "${err_msg}"
+#
+#-----------------------------------------------------------------------
+#
+# Check that DATE_FIRST_CYCL and DATE_LAST_CYCL are strings consisting
+# of exactly 8 digits.
+#
+#-----------------------------------------------------------------------
+#
+DATE_OR_NULL=$( printf "%s" "${DATE_FIRST_CYCL}" | \
+ sed -n -r -e "s/^([0-9]{8})$/\1/p" )
+if [ -z "${DATE_OR_NULL}" ]; then
+ print_err_msg_exit "\
+DATE_FIRST_CYCL must be a string consisting of exactly 8 digits of the
+form \"YYYYMMDD\", where YYYY is the 4-digit year, MM is the 2-digit
+month, and DD is the 2-digit day-of-month.
+ DATE_FIRST_CYCL = \"${DATE_FIRST_CYCL}\""
+fi
+
+DATE_OR_NULL=$( printf "%s" "${DATE_LAST_CYCL}" | \
+ sed -n -r -e "s/^([0-9]{8})$/\1/p" )
+if [ -z "${DATE_OR_NULL}" ]; then
+ print_err_msg_exit "\
+DATE_LAST_CYCL must be a string consisting of exactly 8 digits of the
+form \"YYYYMMDD\", where YYYY is the 4-digit year, MM is the 2-digit
+month, and DD is the 2-digit day-of-month.
+ DATE_LAST_CYCL = \"${DATE_LAST_CYCL}\""
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Check that all elements of CYCL_HRS are strings consisting of exactly
+# 2 digits that are between "00" and "23", inclusive.
+#
+#-----------------------------------------------------------------------
+#
+CYCL_HRS_str=$(printf "\"%s\" " "${CYCL_HRS[@]}")
+CYCL_HRS_str="( $CYCL_HRS_str)"
+
+i=0
+for CYCL in "${CYCL_HRS[@]}"; do
+
+ CYCL_OR_NULL=$( printf "%s" "$CYCL" | sed -n -r -e "s/^([0-9]{2})$/\1/p" )
+
+ if [ -z "${CYCL_OR_NULL}" ]; then
+ print_err_msg_exit "\
+Each element of CYCL_HRS must be a string consisting of exactly 2 digits
+(including a leading \"0\", if necessary) specifying an hour-of-day. Ele-
+ment #$i of CYCL_HRS (where the index of the first element is 0) does not
+have this form:
+ CYCL_HRS = $CYCL_HRS_str
+ CYCL_HRS[$i] = \"${CYCL_HRS[$i]}\""
+ fi
+
+ if [ "${CYCL_OR_NULL}" -lt "0" ] || \
+ [ "${CYCL_OR_NULL}" -gt "23" ]; then
+ print_err_msg_exit "\
+Each element of CYCL_HRS must be an integer between \"00\" and \"23\", in-
+clusive (including a leading \"0\", if necessary), specifying an hour-of-
+day. Element #$i of CYCL_HRS (where the index of the first element is 0)
+does not have this form:
+ CYCL_HRS = $CYCL_HRS_str
+ CYCL_HRS[$i] = \"${CYCL_HRS[$i]}\""
+ fi
+
+ i=$(( $i+1 ))
+
+done
+#
+#-----------------------------------------------------------------------
+#
+# Call a function to generate the array ALL_CDATES containing the cycle
+# dates/hours for which to run forecasts. The elements of this array
+# will have the form YYYYMMDDHH. They are the starting dates/times of
+# the forecasts that will be run in the experiment. Then set NUM_CYCLES
+# to the number of elements in this array.
+#
+#-----------------------------------------------------------------------
+#
+set_cycle_dates \
+ date_start="${DATE_FIRST_CYCL}" \
+ date_end="${DATE_LAST_CYCL}" \
+ cycle_hrs="${CYCL_HRS_str}" \
+ output_varname_all_cdates="ALL_CDATES"
+
+NUM_CYCLES="${#ALL_CDATES[@]}"
+#
+#-----------------------------------------------------------------------
+#
+# Set various directories.
+#
+# HOMErrfs:
+# Top directory of the clone of the RRFS workflow git repository.
+#
+# USHrrfs:
+# Directory containing the shell scripts called by the workflow.
+#
+# SORCrrfs:
+# Directory containing various source codes.
+#
+# PARMrrfs:
+# Directory containing parameter files, template files, etc.
+#
+# LIB64dir:
+# Directory containing various library files.
+#
+# UFS_WTHR_MDL_DIR:
+# Directory in which the UFS Weather Model application is located.
+#
+#-----------------------------------------------------------------------
+#
+HOMErrfs=${scrfunc_dir%/*}
+FIXrrfs="$HOMErrfs/fix"
+USHrrfs="$HOMErrfs/ush"
+SORCrrfs="$HOMErrfs/sorc"
+PARMrrfs="$HOMErrfs/parm"
+MODULES_DIR="$HOMErrfs/modulefiles"
+LIB64dir="$HOMErrfs/sorc/build/lib64"
+
+FIXgsm=${FIXgsm:-"$HOMErrfs/fix/am"}
+FIXLAM_NCO_BASEDIR=${FIXLAM_NCO_BASEDIR:-"$HOMErrfs/fix/lam"}
+AIRCRAFT_REJECT=${AIRCRAFT_REJECT:-"${FIXrrfs/gsi}"}
+SFCOBS_USELIST=${SFCOBS_USELIST:-"${FIXrrfs/gsi}"}
+
+case $MACHINE in
+
+ "WCOSS2")
+ FIXgsm=${FIXgsm:-"/lfs/h2/emc/lam/noscrub/RRFS_input/fix/fix_am"}
+ TOPO_DIR=${TOPO_DIR:-"/lfs/h2/emc/lam/noscrub/RRFS_input/fix/fix_orog"}
+ SFC_CLIMO_INPUT_DIR=${SFC_CLIMO_INPUT_DIR:-"/lfs/h2/emc/lam/noscrub/RRFS_input/fix/fix_sfc_climo"}
+ FIXLAM_NCO_BASEDIR=${FIXLAM_NCO_BASEDIR:-"/lfs/h2/emc/lam/noscrub/RRFS_input/FV3LAM_pregen"}
+ ;;
+
+ "HERA")
+ FIXgsm=${FIXgsm:-"/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_am"}
+ TOPO_DIR=${TOPO_DIR:-"/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_orog"}
+ SFC_CLIMO_INPUT_DIR=${SFC_CLIMO_INPUT_DIR:-"/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/fix/fix_sfc_climo"}
+ FIXLAM_NCO_BASEDIR=${FIXLAM_NCO_BASEDIR:-"/scratch1/NCEPDEV/nems/role.epic/UFS_SRW_data/develop/FV3LAM_pregen"}
+ ;;
+
+ "ORION"|"HERCULES")
+ FIXgsm=${FIXgsm:-"/work/noaa/epic/role-epic/contrib/UFS_SRW_data/develop/fix/fix_am"}
+ TOPO_DIR=${TOPO_DIR:-"/work/noaa/epic/role-epic/contrib/UFS_SRW_data/develop/fix/fix_orog"}
+ SFC_CLIMO_INPUT_DIR=${SFC_CLIMO_INPUT_DIR:-"/work/noaa/epic/role-epic/contrib/UFS_SRW_data/develop/fix/fix_sfc_climo"}
+ FIXLAM_NCO_BASEDIR=${FIXLAM_NCO_BASEDIR:-"/work/noaa/epic/role-epic/contrib/UFS_SRW_data/develop/FV3LAM_pregen"}
+ ;;
+
+ "JET")
+ FIXgsm=${FIXgsm:-"/mnt/lfs4/HFIP/hfv3gfs/role.epic/UFS_SRW_data/develop/fix/fix_am"}
+ TOPO_DIR=${TOPO_DIR:-"/mnt/lfs4/HFIP/hfv3gfs/role.epic/UFS_SRW_data/develop/fix/fix_orog"}
+ SFC_CLIMO_INPUT_DIR=${SFC_CLIMO_INPUT_DIR:-"/mnt/lfs4/HFIP/hfv3gfs/role.epic/UFS_SRW_data/develop/fix/fix_sfc_climo"}
+ FIXLAM_NCO_BASEDIR=${FIXLAM_NCO_BASEDIR:-"/mnt/lfs4/HFIP/hfv3gfs/role.epic/UFS_SRW_data/develop/FV3LAM_pregen"}
+ ;;
+
+ *)
+ print_err_msg_exit "\
+One or more fix file directories have not been specified for this machine:
+ MACHINE = \"$MACHINE\"
+ FIXgsm = \"${FIXgsm:-\"\"}
+ TOPO_DIR = \"${TOPO_DIR:-\"\"}
+ SFC_CLIMO_INPUT_DIR = \"${SFC_CLIMO_INPUT_DIR:-\"\"}
+ FIXLAM_NCO_BASEDIR = \"${FIXLAM_NCO_BASEDIR:-\"\"}
+You can specify the missing location(s) in config.sh"
+ ;;
+
+esac
+#
+#
+#
+FIX_ROOT="/lfs/h2/emc/lam/noscrub/emc.lam/rrfs/para/packages/fix_rrfs_20250623"
+mkdir -p "${HOMErrfs}/fix"
+ln -fsn ${FIX_ROOT}/acsnow $HOMErrfs/fix/acsnow
+ln -fsn ${FIX_ROOT}/am $HOMErrfs/fix/am
+
+mkdir -p ${HOMErrfs}/fix/bufrsnd
+ln -fsn ${FIX_ROOT}/bufrsnd/regional_bufr.tbl $HOMErrfs/fix/bufrsnd/.
+ln -fsn ${FIX_ROOT}/bufrsnd/regional_sndp.parm.mono $HOMErrfs/fix/bufrsnd/regional_sndp.parm.mono
+ln -fsn ${FIX_ROOT}/bufrsnd/${PREDEF_GRID_NAME} $HOMErrfs/fix/bufrsnd/.
+
+mkdir -p ${HOMErrfs}/fix/crtm
+ln -fsn ${FIX_ROOT}/crtm/CRTM_v2.4.0 $HOMErrfs/fix/crtm/CRTM_v2.4.0
+ln -fsn ${FIX_ROOT}/fix_orog $HOMErrfs/fix/fix_orog
+ln -fsn ${FIX_ROOT}/fix_sfc_climo $HOMErrfs/fix/fix_sfc_climo
+ln -fsn ${FIX_ROOT}/gempak $HOMErrfs/fix/gempak
+
+mkdir -p ${HOMErrfs}/fix/gsi
+cp -f ${FIX_ROOT}/gsi/* $HOMErrfs/fix/gsi/.
+ln -fsn ${FIX_ROOT}/gsi/${PREDEF_GRID_NAME} $HOMErrfs/fix/gsi/.
+
+mkdir -p ${HOMErrfs}/fix/lam
+ln -fsn ${FIX_ROOT}/lam/${PREDEF_GRID_NAME} $HOMErrfs/fix/lam/.
+
+ln -fsn ${FIX_ROOT}/prdgen $HOMErrfs/fix/prdgen
+
+mkdir -p ${HOMErrfs}/fix/smoke_dust
+ln -fsn ${FIX_ROOT}/smoke_dust/${PREDEF_GRID_NAME} $HOMErrfs/fix/smoke_dust/${PREDEF_GRID_NAME}
+
+mkdir -p ${HOMErrfs}/fix/upp
+cp -f ${FIX_ROOT}/upp/* $HOMErrfs/fix/upp/.
+ln -fsn ${FIX_ROOT}/upp/${PREDEF_GRID_NAME} $HOMErrfs/fix/upp/.
+
+mkdir -p $HOMErrfs/fix/workflow/det
+mkdir -p $HOMErrfs/fix/workflow/enkf
+mkdir -p $HOMErrfs/fix/workflow/ensf
+if [[ ${PREDEF_GRID_NAME} == "RRFS_CONUS_3km" ]] ; then
+ ln -fsn ${FIX_ROOT}/workflow/det/workflow.conf_c3 $HOMErrfs/fix/workflow/det/workflow.conf
+ ln -fsn ${FIX_ROOT}/workflow/enkf/workflow.conf_c3 $HOMErrfs/fix/workflow/enkf/workflow.conf
+ ln -fsn ${FIX_ROOT}/workflow/ensf/workflow.conf_c3 $HOMErrfs/fix/workflow/ensf/workflow.conf
+else
+ ln -fsn ${FIX_ROOT}/workflow/det/workflow.conf $HOMErrfs/fix/workflow/det/workflow.conf
+ ln -fsn ${FIX_ROOT}/workflow/enkf/workflow.conf $HOMErrfs/fix/workflow/enkf/workflow.conf
+ ln -fsn ${FIX_ROOT}/workflow/ensf/workflow.conf $HOMErrfs/fix/workflow/ensf/workflow.conf
+fi
+
+ln -fsn ${FIX_ROOT}/workflow/firewx $HOMErrfs/fix/workflow/firewx
+
+
+#
+if [[ ${PREDEF_GRID_NAME} == "RRFS_CONUS_3km" ]] ; then
+ if [ ! -d $HOMErrfs/parm/config_n3 ] ;then
+ mv $HOMErrfs/parm/config $HOMErrfs/parm/config_n3
+ cp -r $HOMErrfs/ush/sample_configs/config_c3 $HOMErrfs/parm/config
+ fi
+fi
+if [[ ${PREDEF_GRID_NAME} == "RRFS_NA_3km" ]] ; then
+ if [ -d $HOMErrfs/parm/config_n3 ] ;then
+ mv $HOMErrfs/parm/config $HOMErrfs/parm/config_c3
+ mv $HOMErrfs/parm/config_n3 $HOMErrfs/parm/config
+ fi
+fi
+
+
+#
+#-----------------------------------------------------------------------
+#
+# Set the base directories in which codes obtained from external reposi-
+# tories (using the manage_externals tool) are placed. Obtain the rela-
+# tive paths to these directories by reading them in from the manage_ex-
+# ternals configuration file. (Note that these are relative to the lo-
+# cation of the configuration file.) Then form the full paths to these
+# directories. Finally, make sure that each of these directories actu-
+# ally exists.
+#
+#-----------------------------------------------------------------------
+#
+mng_extrns_cfg_fn=$( readlink -f "${HOMErrfs}/Externals.cfg" )
+property_name="local_path"
+#
+# Get the base directory of the FV3 forecast model code.
+#
+UFS_WTHR_MDL_DIR="${SORCrrfs}/ufs-weather-model"
+#if [ ! -d "${UFS_WTHR_MDL_DIR}" ]; then
+# print_err_msg_exit "\
+#The base directory in which the FV3 source code should be located
+#(UFS_WTHR_MDL_DIR) does not exist:
+# UFS_WTHR_MDL_DIR = \"${UFS_WTHR_MDL_DIR}\"
+#Please clone the external repository containing the code in this directory,
+#build the executable, and then rerun the workflow."
+#fi
+#
+# Get the base directory of the UFS_UTILS codes.
+#
+#UFS_UTILS_DIR="${SORCrrfs}/UFS_UTILS"
+#if [ ! -d "${UFS_UTILS_DIR}" ]; then
+# print_err_msg_exit "\
+#The base directory in which the UFS utilities source codes should be lo-
+#cated (UFS_UTILS_DIR) does not exist:
+# UFS_UTILS_DIR = \"${UFS_UTILS_DIR}\"
+#Please clone the external repository containing the code in this direct-
+#ory, build the executables, and then rerun the workflow."
+#fi
+#
+# Get the base directory of the UPP code.
+#
+#UPP_DIR="${SORCrrfs}/UPP"
+#if [ ! -d "${UPP_DIR}" ]; then
+# print_err_msg_exit "\
+#The base directory in which the UPP source code should be located
+#(UPP_DIR) does not exist:
+# UPP_DIR = \"${UPP_DIR}\"
+#Please clone the external repository containing the code in this directory,
+#build the executable, and then rerun the workflow."
+#fi
+#
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that USE_CUSTOM_POST_CONFIG_FILE is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+#check_var_valid_value \
+# "USE_CUSTOM_POST_CONFIG_FILE" "valid_vals_USE_CUSTOM_POST_CONFIG_FILE"
+#
+# Set USE_CUSTOM_POST_CONFIG_FILE to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+USE_CUSTOM_POST_CONFIG_FILE=${USE_CUSTOM_POST_CONFIG_FILE^^}
+if [ "$USE_CUSTOM_POST_CONFIG_FILE" = "TRUE" ] || \
+ [ "$USE_CUSTOM_POST_CONFIG_FILE" = "YES" ]; then
+ USE_CUSTOM_POST_CONFIG_FILE="TRUE"
+elif [ "$USE_CUSTOM_POST_CONFIG_FILE" = "FALSE" ] || \
+ [ "$USE_CUSTOM_POST_CONFIG_FILE" = "NO" ]; then
+ USE_CUSTOM_POST_CONFIG_FILE="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Add graphics for the additional post-processed domains
+#
+#-----------------------------------------------------------------------
+#
+if [ ${#ADDNL_OUTPUT_GRIDS[@]} -ne 0 ]; then
+ for grid in ${ADDNL_OUTPUT_GRIDS[@]} ; do
+ TILE_SETS="${TILE_SETS} ${grid}"
+ TILE_LABELS="${TILE_LABELS} ${grid}"
+ done
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If using a custom post configuration file, make sure that it exists.
+#
+#-----------------------------------------------------------------------
+#
+#if [ ${USE_CUSTOM_POST_CONFIG_FILE} = "TRUE" ]; then
+# if [ ! -f "${CUSTOM_POST_CONFIG_FP}" ]; then
+# print_err_msg_exit "
+#The custom post configuration specified by CUSTOM_POST_CONFIG_FP does not
+#exist:
+# CUSTOM_POST_CONFIG_FP = \"${CUSTOM_POST_CONFIG_FP}\""
+# fi
+#fi
+#
+#-----------------------------------------------------------------------
+#
+# The forecast length (in integer hours) cannot contain more than 3 cha-
+# racters. Thus, its maximum value is 999. Check whether the specified
+# forecast length exceeds this maximum value. If so, print out a warn-
+# ing and exit this script.
+#
+#-----------------------------------------------------------------------
+#
+fcst_len_hrs_max="999"
+if [ "${FCST_LEN_HRS}" -gt "${fcst_len_hrs_max}" ]; then
+ print_err_msg_exit "\
+Forecast length is greater than maximum allowed length:
+ FCST_LEN_HRS = ${FCST_LEN_HRS}
+ fcst_len_hrs_max = ${fcst_len_hrs_max}"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Check whether the forecast length (FCST_LEN_HRS) is evenly divisible
+# by the BC update interval (LBC_SPEC_INTVL_HRS). If not, print out a
+# warning and exit this script. If so, generate an array of forecast
+# hours at which the boundary values will be updated.
+#
+#-----------------------------------------------------------------------
+#
+rem=$(( ${FCST_LEN_HRS}%${LBC_SPEC_INTVL_HRS} ))
+
+if [ "$rem" -ne "0" ]; then
+ print_err_msg_exit "\
+The forecast length (FCST_LEN_HRS) is not evenly divisible by the lateral
+boundary conditions update interval (LBC_SPEC_INTVL_HRS):
+ FCST_LEN_HRS = ${FCST_LEN_HRS}
+ LBC_SPEC_INTVL_HRS = ${LBC_SPEC_INTVL_HRS}
+ rem = FCST_LEN_HRS%%LBC_SPEC_INTVL_HRS = $rem"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set the array containing the forecast hours at which the lateral
+# boundary conditions (LBCs) need to be updated. Note that this array
+# does not include the 0-th hour (initial time).
+# Need to include 0-th hour for data assimilation cycling.
+#
+#-----------------------------------------------------------------------
+#
+LBC_SPEC_FCST_HRS=($( seq 0 ${LBC_SPEC_INTVL_HRS} \
+ ${BOUNDARY_LEN_HRS} ))
+LBC_SPEC_FCST_LONG_HRS=($( seq 0 ${LBC_SPEC_INTVL_HRS} \
+ ${BOUNDARY_LONG_LEN_HRS} ))
+#
+#-----------------------------------------------------------------------
+#
+# If PREDEF_GRID_NAME is set to a non-empty string, set or reset parameters
+# according to the predefined domain specified.
+#
+#-----------------------------------------------------------------------
+#
+if [ ! -z "${PREDEF_GRID_NAME}" ]; then
+ . $USHrrfs/set_predef_grid_params.sh
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure GRID_GEN_METHOD is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+err_msg="\
+The horizontal grid generation method specified in GRID_GEN_METHOD is
+not supported:
+ GRID_GEN_METHOD = \"${GRID_GEN_METHOD}\""
+check_var_valid_value \
+ "GRID_GEN_METHOD" "valid_vals_GRID_GEN_METHOD" "${err_msg}"
+#
+#-----------------------------------------------------------------------
+#
+# For a "GFDLgrid" type of grid, make sure GFDLgrid_RES is set to a valid
+# value.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${GRID_GEN_METHOD}" = "GFDLgrid" ]; then
+ err_msg="\
+The number of grid cells per tile in each horizontal direction specified
+in GFDLgrid_RES is not supported:
+ GFDLgrid_RES = \"${GFDLgrid_RES}\""
+ check_var_valid_value "GFDLgrid_RES" "valid_vals_GFDLgrid_RES" "${err_msg}"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Check to make sure that various computational parameters needed by the
+# forecast model are set to non-empty values. At this point in the
+# experiment generation, all of these should be set to valid (non-empty)
+# values.
+#
+#-----------------------------------------------------------------------
+#
+if [ -z "${DT_ATMOS}" ]; then
+ print_err_msg_exit "\
+The forecast model main time step (DT_ATMOS) is set to a null string:
+ DT_ATMOS = ${DT_ATMOS}
+Please set this to a valid numerical value in the user-specified experiment
+configuration file (EXPT_CONFIG_FP) and rerun:
+ EXPT_CONFIG_FP = \"${EXPT_CONFIG_FP}\""
+fi
+
+if [ -z "${LAYOUT_X}" ]; then
+ print_err_msg_exit "\
+The number of MPI processes to be used in the x direction (LAYOUT_X) by
+the forecast job is set to a null string:
+ LAYOUT_X = ${LAYOUT_X}
+Please set this to a valid numerical value in the user-specified experiment
+configuration file (EXPT_CONFIG_FP) and rerun:
+ EXPT_CONFIG_FP = \"${EXPT_CONFIG_FP}\""
+fi
+
+if [ -z "${LAYOUT_Y}" ]; then
+ print_err_msg_exit "\
+The number of MPI processes to be used in the y direction (LAYOUT_Y) by
+the forecast job is set to a null string:
+ LAYOUT_Y = ${LAYOUT_Y}
+Please set this to a valid numerical value in the user-specified experiment
+configuration file (EXPT_CONFIG_FP) and rerun:
+ EXPT_CONFIG_FP = \"${EXPT_CONFIG_FP}\""
+fi
+
+if [ -z "${BLOCKSIZE}" ]; then
+ print_err_msg_exit "\
+The cache size to use for each MPI task of the forecast (BLOCKSIZE) is
+set to a null string:
+ BLOCKSIZE = ${BLOCKSIZE}
+Please set this to a valid numerical value in the user-specified experiment
+configuration file (EXPT_CONFIG_FP) and rerun:
+ EXPT_CONFIG_FP = \"${EXPT_CONFIG_FP}\""
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If using the FV3_HRRR or FV3_RAP physics suites, make sure that the directory
+# from which certain fixed orography files will be copied to the experiment
+# directory actually exists. Note that this is temporary code. It should
+# be removed once there is a script or code available that will create
+# these orography files for any grid.
+#
+#-----------------------------------------------------------------------
+#
+GWD_HRRRsuite_DIR=""
+if [ "${CCPP_PHYS_SUITE}" = "FV3_HRRR" ] || \
+ [ "${CCPP_PHYS_SUITE}" = "FV3_HRRR_gf" ] || \
+ [ "${CCPP_PHYS_SUITE}" = "RRFS_sas" ] || \
+ [ "${CCPP_PHYS_SUITE}" = "FV3_RAP" ] || \
+ [ "${CCPP_PHYS_SUITE}" = "FV3_GFS_v15_thompson_mynn_lam3km" ]; then
+ #
+ # Make sure that GWD_HRRRsuite_BASEDIR is set equal to FIXLAM_NCO_BASEDIR
+ #
+ if [ "${GWD_HRRRsuite_BASEDIR}" != "${FIXLAM_NCO_BASEDIR}" ]; then
+ gwd_hrrrsuite_basedir_orig="${GWD_HRRRsuite_BASEDIR}"
+ GWD_HRRRsuite_BASEDIR="${FIXLAM_NCO_BASEDIR}"
+ fi
+#
+# Check that GWD_HRRRsuite_BASEDIR exists and is a directory.
+#
+# if [ ! -d "${GWD_HRRRsuite_BASEDIR}" ]; then
+# print_err_msg_exit "\
+#The base directory (GWD_HRRRsuite_BASEDIR) under which the grid-specific
+#subdirectories containing the gravity wave drag-related orography files
+#for the FV3_HRRR/FV3_RAP suites should be located does not exist (or is
+#not a directory):
+# GWD_HRRRsuite_BASEDIR = \"${GWD_HRRRsuite_BASEDIR}\""
+# fi
+ GWD_HRRRsuite_DIR="${GWD_HRRRsuite_BASEDIR}/${PREDEF_GRID_NAME}"
+#
+# Ensure that PREDEF_GRID_NAME is not set to a null string. Currently,
+# only predefined grids can be used with the FV3_HRRR/FV3_RAP suites because
+# orography statistics files required by this suite are available only
+# for (some of) the predefined grids.
+#
+# if [ -z "${PREDEF_GRID_NAME}" ]; then
+# print_err_msg_exit "\
+#A predefined grid name (PREDEF_GRID_NAME) must be specified when using
+#the FV3_HRRR/FV3_RAP physics suites:
+# CCPP_PHYS_SUITE = \"${CCPP_PHYS_SUITE}\"
+# PREDEF_GRID_NAME = \"${PREDEF_GRID_NAME}\""
+# else
+#
+# Ensure that the directory GWD_HRRRsuite_DIR in which the orography
+# statistics files required by the FV3_HRRR/FV3_RAP suites are located
+# actually exists.
+#
+# if [ ! -d "${GWD_HRRRsuite_DIR}" ]; then
+# print_err_msg_exit "\
+#The directory (GWD_HRRRsuite_DIR) that should contain the gravity wave
+#drag-related orography files for the FV3_HRRR/FV3_RAP suites does not exist:
+# GWD_HRRRsuite_DIR = \"${GWD_HRRRsuite_DIR}\""
+# elif [ ! "$( ls -A ${GWD_HRRRsuite_DIR} )" ]; then
+# print_err_msg_exit "\
+#The directory (GWD_HRRRsuite_DIR) that should contain the gravity wave
+#drag related orography files for the FV3_HRRR/FV3_RAP suites is empty:
+# GWD_HRRRsuite_DIR = \"${GWD_HRRRsuite_DIR}\""
+# fi
+# fi
+#
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If the base directory (EXPT_BASEDIR) in which the experiment subdirectory
+# (EXPT_SUBDIR) will be located does not start with a "/", then it is
+# either set to a null string or contains a relative directory. In both
+# cases, prepend to it the absolute path of the default directory under
+# which the experiment directories are placed. If EXPT_BASEDIR was set
+# to a null string, it will get reset to this default experiment directory,
+# and if it was set to a relative directory, it will get reset to an
+# absolute directory that points to the relative directory under the
+# default experiment directory. Then create EXPT_BASEDIR if it doesn't
+# already exist.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${EXPT_BASEDIR:0:1}" != "/" ]; then
+ EXPT_BASEDIR="${HOMErrfs}/../expt_dirs/${EXPT_BASEDIR}"
+fi
+EXPT_BASEDIR="$( readlink -m ${EXPT_BASEDIR} )"
+mkdir -p "${EXPT_BASEDIR}"
+#
+#-----------------------------------------------------------------------
+#
+# If the experiment subdirectory name (EXPT_SUBDIR) is set to an empty
+# string, print out an error message and exit.
+#
+#-----------------------------------------------------------------------
+#
+if [ -z "${EXPT_SUBDIR}" ]; then
+ print_err_msg_exit "\
+The name of the experiment subdirectory (EXPT_SUBDIR) cannot be empty:
+ EXPT_SUBDIR = \"${EXPT_SUBDIR}\""
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set the full path to the experiment directory. Then check if it already
+# exists and if so, deal with it as specified by PREEXISTING_DIR_METHOD.
+#
+#-----------------------------------------------------------------------
+#
+EXPTDIR="${EXPT_BASEDIR}/${EXPT_SUBDIR}"
+check_for_preexist_dir_file "$EXPTDIR" "${PREEXISTING_DIR_METHOD}"
+#
+#-----------------------------------------------------------------------
+#
+# Set other directories, Definitions:
+#
+# LOG_BASEDIR:
+# Base directory in which the log files from the workflow tasks will be placed.
+#
+# FIXam:
+# This is the directory that will contain the fixed files or symlinks to
+# the fixed files containing various fields on global grids (which are
+# usually much coarser than the native FV3-LAM grid).
+#
+# FIXLAM:
+# This is the directory that will contain the fixed files or symlinks to
+# the fixed files containing the grid, orography, and surface climatology
+# on the native FV3-LAM grid.
+#
+# FIXgsi:
+# This is the directory that will contain the fixed files for GSI run
+#
+# FIXcrtm:
+# This is the directory that will contain the coefficient files for CRTM
+#
+# DATAROOT:
+# The directory containing the working directories.
+#
+# ENSCTRL_DATAROOT:
+# The base directory of the control member for EnKF recentering.
+#
+# COMROOT:
+# This is the full path to the "com" directory under which
+# output from the POST_TN task will be placed. Note that this output
+# is not placed directly under COMROOT but several directories further
+# down. More specifically, for a cycle starting at yyyymmddhh, it is at
+#
+# $COMROOT/$NET/$envir/$RUN.$yyyymmdd/$hh
+#
+# Below, we set COMROOT in terms of PTMP as COMROOT="$PTMP/com".
+#
+# GESROOT:
+# The beginning portion of the directory that will contain the output
+# files from the forecast for a given cycle. For a cycle
+# that starts on the date specified by yyyymmdd and hour specified by hh
+# (where yyyymmdd and hh are as described above), the directory in which
+# the forecast output files will be placed will be:
+# $GESROOT/$RUN.$yyyymmdd/$hh
+#
+# Below, we set GESROOT in terms of PTMP as GESROOT="$PTMP/nwges".
+#
+#-----------------------------------------------------------------------
+#
+
+FIXam="${EXPTDIR}/fix_am"
+FIXLAM="${EXPTDIR}/fix_lam"
+FIXgsi="${EXPTDIR}/fix_gsi"
+FIXcrtm="${EXPTDIR}/fix_crtm"
+FIXuppcrtm="${EXPTDIR}/fix_upp_crtm"
+FIXsmokedust="${EXPTDIR}/fix_smoke_dust"
+FIXbufrsnd="${EXPTDIR}/fix_bufrsnd"
+SST_ROOT="${SST_ROOT}"
+
+DATAROOT="$STMP"
+check_for_preexist_dir_file "${DATAROOT}" "${PREEXISTING_DIR_METHOD}"
+ENSCTRL_DATAROOT="${ENSCTRL_STMP}"
+COMROOT="${PTMP}/com"
+DCOMROOT="${DCOM_ROOT}"
+ENSCTRL_COMROOT="${ENSCTRL_PTMP}/com"
+ENSCTRL_COMOUT="${ENSCTRL_COMROOT}/${NET}/${rrfs_ver}/${RUN_ensctrl}.@Y@m@d"
+GESROOT="${GESROOT:-${PTMP}/nwges}"
+LOG_BASEDIR="${PTMP}/logs"
+#
+#-----------------------------------------------------------------------
+#
+# The RRFS model needs the following input files in the run directory
+# to start a forecast:
+#
+# (1) The data table file
+# (2) The diagnostics table file
+# (3) The field table file
+# (4) The FV3 namelist file
+# (5) The model configuration file
+# (6) The UFS configuration file
+#
+# If using CCPP, it also needs:
+#
+# (7) The CCPP physics suite definition file
+#
+# The workflow contains templates for the first six of these files.
+# Template files are versions of these files that contain placeholder
+# (i.e. dummy) values for various parameters. The experiment/workflow
+# generation scripts copy these templates to appropriate locations in
+# the experiment directory (either the top of the experiment directory
+# or one of the cycle subdirectories) and replace the placeholders in
+# these copies by actual values specified in the experiment/workflow
+# configuration file (or derived from such values). The scripts then
+# use the resulting "actual" files as inputs to the forecast model.
+#
+# Note that the CCPP physics suite defintion file does not have a cor-
+# responding template file because it does not contain any values that
+# need to be replaced according to the experiment/workflow configura-
+# tion. If using CCPP, this file simply needs to be copied over from
+# its location in the forecast model's directory structure to the ex-
+# periment directory.
+#
+# Below, we first set the names of the templates for the first six files
+# listed above. We then set the full paths to these template files.
+# Note that some of these file names depend on the physics suite while
+# others do not.
+#
+#-----------------------------------------------------------------------
+#
+dot_ccpp_phys_suite_or_null=".${CCPP_PHYS_SUITE}"
+
+DATA_TABLE_TMPL_FN="${DATA_TABLE_FN}"
+if [ "${USE_CLM}" = "TRUE" ]; then
+DIAG_TABLE_TMPL_FN="${DIAG_TABLE_FN}${dot_ccpp_phys_suite_or_null}_clm"
+else
+DIAG_TABLE_TMPL_FN="${DIAG_TABLE_FN}${dot_ccpp_phys_suite_or_null}"
+fi
+FIELD_TABLE_TMPL_FN="${FIELD_TABLE_FN}${dot_ccpp_phys_suite_or_null}"
+MODEL_CONFIG_TMPL_FN="${MODEL_CONFIG_FN}"
+UFS_CONFIG_TMPL_FN="${UFS_CONFIG_FN}"
+
+DATA_TABLE_TMPL_FP="${PARMrrfs}/${DATA_TABLE_TMPL_FN}"
+DIAG_TABLE_TMPL_FP="${PARMrrfs}/${DIAG_TABLE_TMPL_FN}"
+FIELD_TABLE_TMPL_FP="${PARMrrfs}/${FIELD_TABLE_TMPL_FN}"
+FV3_NML_BASE_SUITE_FP="${PARMrrfs}/${FV3_NML_BASE_SUITE_FN}"
+FV3_NML_YAML_CONFIG_FP="${PARMrrfs}/${FV3_NML_YAML_CONFIG_FN}"
+FV3_NML_BASE_ENS_FP="${EXPTDIR}/${FV3_NML_BASE_ENS_FN}"
+MODEL_CONFIG_TMPL_FP="${PARMrrfs}/${MODEL_CONFIG_TMPL_FN}"
+UFS_CONFIG_TMPL_FP="${PARMrrfs}/${UFS_CONFIG_TMPL_FN}"
+#
+#-----------------------------------------------------------------------
+#
+# Set:
+#
+# 1) the variable CCPP_PHYS_SUITE_FN to the name of the CCPP physics
+# suite definition file.
+# 2) the variable CCPP_PHYS_SUITE_IN_CCPP_FP to the full path of this
+# file in the forecast model's directory structure.
+# 3) the variable CCPP_PHYS_SUITE_FP to the full path of this file in
+# the experiment directory.
+#
+# Note that the experiment/workflow generation scripts will copy this
+# file from CCPP_PHYS_SUITE_IN_CCPP_FP to CCPP_PHYS_SUITE_FP. Then, for
+# each cycle, the forecast launch script will create a link in the cycle
+# run directory to the copy of this file at CCPP_PHYS_SUITE_FP.
+#
+#-----------------------------------------------------------------------
+#
+CCPP_PHYS_SUITE_FN="suite_${CCPP_PHYS_SUITE}.xml"
+CCPP_PHYS_SUITE_IN_CCPP_FP="${UFS_WTHR_MDL_DIR}/FV3/ccpp/suites/${CCPP_PHYS_SUITE_FN}"
+CCPP_PHYS_SUITE_FP="${EXPTDIR}/${CCPP_PHYS_SUITE_FN}"
+#if [ ! -f "${CCPP_PHYS_SUITE_IN_CCPP_FP}" ]; then
+# print_err_msg_exit "\
+#The CCPP suite definition file (CCPP_PHYS_SUITE_IN_CCPP_FP) does not exist
+#in the local clone of the ufs-weather-model:
+# CCPP_PHYS_SUITE_IN_CCPP_FP = \"${CCPP_PHYS_SUITE_IN_CCPP_FP}\""
+#fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Set:
+#
+# 1) the variable UFS_YAML_FN to the name of the fd_ufs.yaml
+# 2) the variable UFS_YAML_IN_PARM_FP to the full path of this
+# file in the forecast model's directory structure.
+# 3) the variable UFS_YAML_FP to the full path of this file in
+# the experiment directory.
+#
+#-----------------------------------------------------------------------
+#
+UFS_YAML_FN="fd_ufs.yaml"
+UFS_YAML_IN_PARM_FP="${UFS_WTHR_MDL_DIR}/tests/parm/${UFS_YAML_FN}"
+UFS_YAML_FP="${EXPTDIR}/${UFS_YAML_FN}"
+#if [ ! -f "${UFS_YAML_IN_PARM_FP}" ]; then
+# print_err_msg_exit "\
+#The (UFS_YAML_IN_PARM_FP) does not exist
+#in the local clone of the ufs-weather-model:
+# UFS_YAML_IN_PARM_FP= \"${UFS_YAML_IN_PARM_FP}\""
+#fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Call the function that sets the ozone parameterization being used and
+# modifies associated parameters accordingly.
+#
+#-----------------------------------------------------------------------
+#
+set_ozone_param \
+ ccpp_phys_suite_fp="${CCPP_PHYS_SUITE_IN_CCPP_FP}" \
+ output_varname_ozone_param="OZONE_PARAM"
+#
+#-----------------------------------------------------------------------
+#
+# Set the full paths to those forecast model input files that are cycle-
+# independent, i.e. they don't include information about the cycle's
+# starting day/time. These are:
+#
+# * The data table file [(1) in the list above)]
+# * The field table file [(3) in the list above)]
+# * The FV3 namelist file [(4) in the list above)]
+# * The UFS configuration file [(6) in the list above)]
+#
+# Since they are cycle-independent, the experiment/workflow generation
+# scripts will place them in the main experiment directory (EXPTDIR).
+# The script that runs each cycle will then create links to these files
+# in the run directories of the individual cycles (which are subdirecto-
+# ries under EXPTDIR).
+#
+# The remaining two input files to the forecast model, i.e.
+#
+# * The diagnostics table file [(2) in the list above)]
+# * The model configuration file [(5) in the list above)]
+#
+# contain parameters that depend on the cycle start date. Thus, custom
+# versions of these two files must be generated for each cycle and then
+# placed directly in the run directories of the cycles (not EXPTDIR).
+# For this reason, the full paths to their locations vary by cycle and
+# cannot be set here (i.e. they can only be set in the loop over the
+# cycles in the rocoto workflow XML file).
+#
+#-----------------------------------------------------------------------
+#
+DATA_TABLE_FP="${EXPTDIR}/${DATA_TABLE_FN}"
+FIELD_TABLE_FP="${EXPTDIR}/${FIELD_TABLE_FN}"
+FV3_NML_FN="${FV3_NML_BASE_SUITE_FN%.*}"
+FV3_NML_FP="${EXPTDIR}/${FV3_NML_FN}"
+FV3_NML_CYCSFC_FP="${EXPTDIR}/${FV3_NML_FN}_cycsfc"
+FV3_NML_RESTART_FP="${EXPTDIR}/${FV3_NML_FN}_restart"
+FV3_NML_RESTART_18H_FP="${EXPTDIR}/${FV3_NML_FN}_restart_18h"
+FV3_NML_RESTART_LONG_FP="${EXPTDIR}/${FV3_NML_FN}_restart_long"
+FV3_NML_RESTART_SPINUPCYC_FP="${EXPTDIR}/${FV3_NML_FN}_restart_spinupcyc"
+FV3_NML_18H_FP="${EXPTDIR}/${FV3_NML_FN}_18h"
+FV3_NML_LONG_FP="${EXPTDIR}/${FV3_NML_FN}_long"
+FV3_NML_SPINUPCYC_FP="${EXPTDIR}/${FV3_NML_FN}_spinupcyc"
+FV3_NML_STOCH_FP="${EXPTDIR}/${FV3_NML_FN}_stoch"
+FV3_NML_RESTART_STOCH_FP="${EXPTDIR}/${FV3_NML_FN}_restart_stoch"
+UFS_CONFIG_FP="${EXPTDIR}/${UFS_CONFIG_FN}"
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that USE_USER_STAGED_EXTRN_FILES is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "USE_USER_STAGED_EXTRN_FILES" "valid_vals_USE_USER_STAGED_EXTRN_FILES"
+#
+# Set USE_USER_STAGED_EXTRN_FILES to either "TRUE" or "FALSE" so we don't
+# have to consider other valid values later on.
+#
+USE_USER_STAGED_EXTRN_FILES=${USE_USER_STAGED_EXTRN_FILES^^}
+if [ "${USE_USER_STAGED_EXTRN_FILES}" = "YES" ]; then
+ USE_USER_STAGED_EXTRN_FILES="TRUE"
+elif [ "${USE_USER_STAGED_EXTRN_FILES}" = "NO" ]; then
+ USE_USER_STAGED_EXTRN_FILES="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# If USE_USER_STAGED_EXTRN_FILES is set to TRUE, make sure that the user-
+# specified directories under which the external model files should be
+# located actually exist.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${USE_USER_STAGED_EXTRN_FILES}" = "TRUE" ]; then
+
+ if [ ! -d "${EXTRN_MDL_SOURCE_BASEDIR_ICS}" ]; then
+ print_err_msg_exit "\
+The directory (EXTRN_MDL_SOURCE_BASEDIR_ICS) in which the user-staged
+external model files for generating ICs should be located does not exist:
+ EXTRN_MDL_SOURCE_BASEDIR_ICS = \"${EXTRN_MDL_SOURCE_BASEDIR_ICS}\""
+ fi
+
+ if [ ! -d "${EXTRN_MDL_SOURCE_BASEDIR_LBCS}" ]; then
+ print_err_msg_exit "\
+The directory (EXTRN_MDL_SOURCE_BASEDIR_LBCS) in which the user-staged
+external model files for generating LBCs should be located does not exist:
+ EXTRN_MDL_SOURCE_BASEDIR_LBCS = \"${EXTRN_MDL_SOURCE_BASEDIR_LBCS}\""
+ fi
+
+fi
+
+NDIGITS_ENSMEM_NAMES="0"
+ENSMEM_NAMES=("")
+FV3_NML_ENSMEM_FPS=("")
+if [ "${DO_ENSEMBLE}" = "TRUE" ]; then
+# NDIGITS_ENSMEM_NAMES="${#NUM_ENS_MEMBERS}"
+ NDIGITS_ENSMEM_NAMES="3"
+# Strip away all leading zeros in NUM_ENS_MEMBERS by converting it to a
+# decimal (leading zeros will cause bash to interpret the number as an
+# octal). Note that the variable definitions file will therefore contain
+# the version of NUM_ENS_MEMBERS with any leading zeros stripped away.
+ NUM_ENS_MEMBERS="$((10#${NUM_ENS_MEMBERS}))"
+ fmt="%0${NDIGITS_ENSMEM_NAMES}d"
+ for (( i=0; i<${NUM_ENS_MEMBERS}; i++ )); do
+ ip1=$( printf "$fmt" $((i+1)) )
+ ENSMEM_NAMES[$i]="mem${ip1}"
+ FV3_NML_ENSMEM_FPS[$i]="$EXPTDIR/${FV3_NML_FN}_${ENSMEM_NAMES[$i]}"
+ done
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set the full path to the forecast model executable.
+#
+#-----------------------------------------------------------------------
+#
+FV3_EXEC_FP="${HOMErrfs}/exec/${FV3_EXEC_FN}"
+#
+#-----------------------------------------------------------------------
+#
+# Set the full path to the script that can be used to (re)launch the
+# workflow. Also, if USE_CRON_TO_RELAUNCH is set to TRUE, set the line
+# to add to the cron table to automatically relaunch the workflow every
+# CRON_RELAUNCH_INTVL_MNTS minutes. Otherwise, set the variable con-
+# taining this line to a null string.
+#
+#-----------------------------------------------------------------------
+#
+WFLOW_LAUNCH_SCRIPT_FP="$USHrrfs/${WFLOW_LAUNCH_SCRIPT_FN}"
+WFLOW_LAUNCH_LOG_FP="$EXPTDIR/${WFLOW_LAUNCH_LOG_FN}"
+if [ "${USE_CRON_TO_RELAUNCH}" = "TRUE" ]; then
+ CRONTAB_LINE="*/${CRON_RELAUNCH_INTVL_MNTS} * * * * cd $EXPTDIR && \
+./${WFLOW_LAUNCH_SCRIPT_FN} >> ./${WFLOW_LAUNCH_LOG_FN} 2>&1"
+else
+ CRONTAB_LINE=""
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set the full path to the script that, for a given task, loads the
+# necessary module files and runs the tasks.
+#
+#-----------------------------------------------------------------------
+#
+LOAD_MODULES_RUN_TASK_FP="$USHrrfs/load_modules_run_task.sh"
+#
+#-----------------------------------------------------------------------
+#
+# Define the various work subdirectories under the main work directory.
+# Each of these corresponds to a different step/substep/task in the pre-
+# processing, as follows:
+#
+# GRID_DIR:
+# Directory in which the grid files will be placed (if RUN_TASK_MAKE_GRID
+# is set to "TRUE") or searched for (if RUN_TASK_MAKE_GRID is set to
+# "FALSE").
+#
+# OROG_DIR:
+# Directory in which the orography files will be placed (if RUN_TASK_MAKE_OROG
+# is set to "TRUE") or searched for (if RUN_TASK_MAKE_OROG is set to
+# "FALSE").
+#
+# SFC_CLIMO_DIR:
+# Directory in which the surface climatology files will be placed (if
+# RUN_TASK_MAKE_SFC_CLIMO is set to "TRUE") or searched for (if
+# RUN_TASK_MAKE_SFC_CLIMO is set to "FALSE").
+#
+#----------------------------------------------------------------------
+#
+nco_fix_dir="${FIXLAM_NCO_BASEDIR}/${PREDEF_GRID_NAME}"
+#
+# The grid, orography, and surface climatology files are not pregenerated
+# for the fire weather grid. Do not produce an error when using this grid.
+#
+if [ "${PREDEF_GRID_NAME}" != "RRFS_FIREWX_1.5km" ]; then
+ if [ ! -d "${nco_fix_dir}" ]; then
+ print_err_msg_exit "\
+ The directory (nco_fix_dir) that should contain the pregenerated grid,
+ orography, and surface climatology files does not exist:
+ nco_fix_dir = \"${nco_fix_dir}\""
+ fi
+fi
+
+#
+# If RUN_TASK_MAKE_GRID is set to "FALSE", the workflow will look for
+# the pregenerated grid files in GRID_DIR.
+#
+if [ "${RUN_TASK_MAKE_GRID}" = "FALSE" ]; then
+ # Set nco_fix_dir by default
+ GRID_DIR="${GRID_DIR:-${nco_fix_dir}}"
+ if [ ! -d "${GRID_DIR}" ]; then
+ print_err_msg_exit "\
+The directory (GRID_DIR) that should contain the pregenerated grid files
+does not exist:
+ GRID_DIR = \"${GRID_DIR}\""
+ fi
+else
+ GRID_DIR="$EXPTDIR/grid"
+fi
+#
+# If RUN_TASK_MAKE_OROG is set to "FALSE", the workflow will look for
+# the pregenerated orography files in OROG_DIR.
+#
+if [ "${RUN_TASK_MAKE_OROG}" = "FALSE" ]; then
+ # Set nco_fix_dir by default
+ OROG_DIR="${OROG_DIR:-${nco_fix_dir}}"
+ if [ ! -d "${OROG_DIR}" ]; then
+ print_err_msg_exit "\
+The directory (OROG_DIR) that should contain the pregenerated orography
+files does not exist:
+ OROG_DIR = \"${OROG_DIR}\""
+ fi
+else
+ OROG_DIR="$EXPTDIR/orog"
+fi
+#
+# If RUN_TASK_MAKE_SFC_CLIMO is set to "FALSE", the workflow will look
+# for the pregenerated surface climatology files in SFC_CLIMO_DIR.
+#
+if [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "FALSE" ]; then
+ # Set nco_fix_dir by default
+ SFC_CLIMO_DIR="${SFC_CLIMO_DIR:-${nco_fix_dir}}"
+ if [ ! -d "${SFC_CLIMO_DIR}" ]; then
+ print_err_msg_exit "\
+The directory (SFC_CLIMO_DIR) that should contain the pregenerated surface
+climatology files does not exist:
+ SFC_CLIMO_DIR = \"${SFC_CLIMO_DIR}\""
+ fi
+else
+ SFC_CLIMO_DIR="$EXPTDIR/sfc_climo"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure EXTRN_MDL_NAME_ICS is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+err_msg="\
+The external model specified in EXTRN_MDL_NAME_ICS that provides initial
+conditions (ICs) and surface fields to the FV3-LAM is not supported:
+ EXTRN_MDL_NAME_ICS = \"${EXTRN_MDL_NAME_ICS}\""
+check_var_valid_value \
+ "EXTRN_MDL_NAME_ICS" "valid_vals_EXTRN_MDL_NAME_ICS" "${err_msg}"
+#
+#-----------------------------------------------------------------------
+#
+# Make sure EXTRN_MDL_NAME_LBCS is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+err_msg="\
+The external model specified in EXTRN_MDL_NAME_ICS that provides lateral
+boundary conditions (LBCs) to the FV3-LAM is not supported:
+ EXTRN_MDL_NAME_LBCS = \"${EXTRN_MDL_NAME_LBCS}\""
+check_var_valid_value \
+ "EXTRN_MDL_NAME_LBCS" "valid_vals_EXTRN_MDL_NAME_LBCS" "${err_msg}"
+#
+#-----------------------------------------------------------------------
+#
+# Make sure GFS_FILE_FMT_ICS is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${EXTRN_MDL_NAME_ICS}" = "GFS" ]; then
+ err_msg="\
+The file format for GFS external model files specified in GFS_-
+FILE_FMT_ICS is not supported:
+ GFS_FILE_FMT_ICS = \"${GFS_FILE_FMT_ICS}\""
+ check_var_valid_value \
+ "GFS_FILE_FMT_ICS" "valid_vals_GFS_FILE_FMT_ICS" "${err_msg}"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure GFS_FILE_FMT_LBCS is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${EXTRN_MDL_NAME_LBCS}" = "GFS" ]; then
+ err_msg="\
+The file format for GFS external model files specified in GFS_-
+FILE_FMT_LBCS is not supported:
+ GFS_FILE_FMT_LBCS = \"${GFS_FILE_FMT_LBCS}\""
+ check_var_valid_value \
+ "GFS_FILE_FMT_LBCS" "valid_vals_GFS_FILE_FMT_LBCS" "${err_msg}"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Set cycle-independent parameters associated with the external models
+# from which we will obtain the ICs and LBCs.
+#
+#-----------------------------------------------------------------------
+#
+. $USHrrfs/set_extrn_mdl_params.sh
+
+#
+#-----------------------------------------------------------------------
+#
+# Any regional model must be supplied lateral boundary conditions (in
+# addition to initial conditions) to be able to perform a forecast. In
+# the FV3-LAM model, these boundary conditions (BCs) are supplied using a
+# "halo" of grid cells around the regional domain that extend beyond the
+# boundary of the domain. The model is formulated such that along with
+# files containing these BCs, it needs as input the following files (in
+# NetCDF format):
+#
+# 1) A grid file that includes a halo of 3 cells beyond the boundary of
+# the domain.
+# 2) A grid file that includes a halo of 4 cells beyond the boundary of
+# the domain.
+# 3) A (filtered) orography file without a halo, i.e. a halo of width
+# 0 cells.
+# 4) A (filtered) orography file that includes a halo of 4 cells beyond
+# the boundary of the domain.
+#
+# Note that the regional grid is referred to as "tile 7" in the code.
+# We will let:
+#
+# * NH0 denote the width (in units of number of cells on tile 7) of
+# the 0-cell-wide halo, i.e. NH0 = 0;
+#
+# * NH3 denote the width (in units of number of cells on tile 7) of
+# the 3-cell-wide halo, i.e. NH3 = 3; and
+#
+# * NH4 denote the width (in units of number of cells on tile 7) of
+# the 4-cell-wide halo, i.e. NH4 = 4.
+#
+# We define these variables next.
+#
+#-----------------------------------------------------------------------
+#
+NH0=0
+NH3=3
+NH4=4
+#
+#-----------------------------------------------------------------------
+#
+# Set parameters according to the type of horizontal grid generation
+# method specified. First consider GFDL's global-parent-grid based
+# method.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${GRID_GEN_METHOD}" = "GFDLgrid" ]; then
+
+ set_gridparams_GFDLgrid \
+ lon_of_t6_ctr="${GFDLgrid_LON_T6_CTR}" \
+ lat_of_t6_ctr="${GFDLgrid_LAT_T6_CTR}" \
+ res_of_t6g="${GFDLgrid_RES}" \
+ stretch_factor="${GFDLgrid_STRETCH_FAC}" \
+ refine_ratio_t6g_to_t7g="${GFDLgrid_REFINE_RATIO}" \
+ istart_of_t7_on_t6g="${GFDLgrid_ISTART_OF_RGNL_DOM_ON_T6G}" \
+ iend_of_t7_on_t6g="${GFDLgrid_IEND_OF_RGNL_DOM_ON_T6G}" \
+ jstart_of_t7_on_t6g="${GFDLgrid_JSTART_OF_RGNL_DOM_ON_T6G}" \
+ jend_of_t7_on_t6g="${GFDLgrid_JEND_OF_RGNL_DOM_ON_T6G}" \
+ output_varname_lon_of_t7_ctr="LON_CTR" \
+ output_varname_lat_of_t7_ctr="LAT_CTR" \
+ output_varname_nx_of_t7_on_t7g="NX" \
+ output_varname_ny_of_t7_on_t7g="NY" \
+ output_varname_halo_width_on_t7g="NHW" \
+ output_varname_stretch_factor="STRETCH_FAC" \
+ output_varname_istart_of_t7_with_halo_on_t6sg="ISTART_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG" \
+ output_varname_iend_of_t7_with_halo_on_t6sg="IEND_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG" \
+ output_varname_jstart_of_t7_with_halo_on_t6sg="JSTART_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG" \
+ output_varname_jend_of_t7_with_halo_on_t6sg="JEND_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG"
+#
+#-----------------------------------------------------------------------
+#
+# Now consider Jim Purser's map projection/grid generation method.
+#
+#-----------------------------------------------------------------------
+#
+elif [ "${GRID_GEN_METHOD}" = "ESGgrid" ]; then
+
+ set_gridparams_ESGgrid \
+ lon_ctr="${ESGgrid_LON_CTR}" \
+ lat_ctr="${ESGgrid_LAT_CTR}" \
+ nx="${ESGgrid_NX}" \
+ ny="${ESGgrid_NY}" \
+ halo_width="${ESGgrid_WIDE_HALO_WIDTH}" \
+ delx="${ESGgrid_DELX}" \
+ dely="${ESGgrid_DELY}" \
+ pazi="${ESGgrid_PAZI}" \
+ output_varname_lon_ctr="LON_CTR" \
+ output_varname_lat_ctr="LAT_CTR" \
+ output_varname_nx="NX" \
+ output_varname_ny="NY" \
+ output_varname_pazi="PAZI"\
+ output_varname_halo_width="NHW" \
+ output_varname_stretch_factor="STRETCH_FAC" \
+ output_varname_del_angle_x_sg="DEL_ANGLE_X_SG" \
+ output_varname_del_angle_y_sg="DEL_ANGLE_Y_SG" \
+ output_varname_neg_nx_of_dom_with_wide_halo="NEG_NX_OF_DOM_WITH_WIDE_HALO" \
+ output_varname_neg_ny_of_dom_with_wide_halo="NEG_NY_OF_DOM_WITH_WIDE_HALO"
+
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Create a new experiment directory. Note that at this point we are
+# guaranteed that there is no preexisting experiment directory.
+#
+#-----------------------------------------------------------------------
+#
+mkdir -p "$EXPTDIR"
+
+
+#
+#-----------------------------------------------------------------------
+#
+# If not running the MAKE_GRID_TN, MAKE_OROG_TN, and/or MAKE_SFC_CLIMO
+# tasks, create symlinks under the FIXLAM directory to pregenerated grid,
+# orography, and surface climatology files. In the process, also set
+# RES_IN_FIXLAM_FILENAMES, which is the resolution of the grid (in units
+# of number of grid points on an equivalent global uniform cubed-sphere
+# grid) used in the names of the fixed files in the FIXLAM directory.
+#
+#-----------------------------------------------------------------------
+#
+#mkdir -p "$FIXLAM"
+RES_IN_FIXLAM_FILENAMES=""
+#
+#-----------------------------------------------------------------------
+#
+# If the grid file generation task in the workflow is going to be skipped
+# (because pregenerated files are available), create links in the FIXLAM
+# directory to the pregenerated grid files.
+#
+#-----------------------------------------------------------------------
+#
+#res_in_grid_fns=""
+#if [ "${RUN_TASK_MAKE_GRID}" = "FALSE" ]; then
+#
+# link_fix \
+# verbose="$VERBOSE" \
+# file_group="grid" \
+# output_varname_res_in_filenames="res_in_grid_fns" || \
+# print_err_msg_exit "\
+#Call to function to create links to grid files failed."
+#
+# RES_IN_FIXLAM_FILENAMES="${res_in_grid_fns}"
+#
+#fi
+#
+#-----------------------------------------------------------------------
+#
+# If the orography file generation task in the workflow is going to be
+# skipped (because pregenerated files are available), create links in
+# the FIXLAM directory to the pregenerated orography files.
+#
+#-----------------------------------------------------------------------
+#
+#res_in_orog_fns=""
+#if [ "${RUN_TASK_MAKE_OROG}" = "FALSE" ]; then
+#
+# link_fix \
+# verbose="$VERBOSE" \
+# file_group="orog" \
+# output_varname_res_in_filenames="res_in_orog_fns" || \
+# print_err_msg_exit "\
+#Call to function to create links to orography files failed."
+#
+# if [ ! -z "${RES_IN_FIXLAM_FILENAMES}" ] && \
+# [ "${res_in_orog_fns}" -ne "${RES_IN_FIXLAM_FILENAMES}" ]; then
+# print_err_msg_exit "\
+#The resolution extracted from the orography file names (res_in_orog_fns)
+#does not match the resolution in other groups of files already consi-
+#dered (RES_IN_FIXLAM_FILENAMES):
+# res_in_orog_fns = ${res_in_orog_fns}
+# RES_IN_FIXLAM_FILENAMES = ${RES_IN_FIXLAM_FILENAMES}"
+# else
+# RES_IN_FIXLAM_FILENAMES="${res_in_orog_fns}"
+# fi
+#
+#fi
+#
+#-----------------------------------------------------------------------
+#
+# If the surface climatology file generation task in the workflow is
+# going to be skipped (because pregenerated files are available), create
+# links in the FIXLAM directory to the pregenerated surface climatology
+# files.
+#
+#-----------------------------------------------------------------------
+#
+#res_in_sfc_climo_fns=""
+#if [ "${RUN_TASK_MAKE_SFC_CLIMO}" = "FALSE" ]; then
+#
+# link_fix \
+# verbose="$VERBOSE" \
+# file_group="sfc_climo" \
+# output_varname_res_in_filenames="res_in_sfc_climo_fns" || \
+# print_err_msg_exit "\
+#Call to function to create links to surface climatology files failed."
+#
+# if [ ! -z "${RES_IN_FIXLAM_FILENAMES}" ] && \
+# [ "${res_in_sfc_climo_fns}" -ne "${RES_IN_FIXLAM_FILENAMES}" ]; then
+# print_err_msg_exit "\
+#The resolution extracted from the surface climatology file names (res_-
+#in_sfc_climo_fns) does not match the resolution in other groups of files
+#already considered (RES_IN_FIXLAM_FILENAMES):
+# res_in_sfc_climo_fns = ${res_in_sfc_climo_fns}
+# RES_IN_FIXLAM_FILENAMES = ${RES_IN_FIXLAM_FILENAMES}"
+# else
+# RES_IN_FIXLAM_FILENAMES="${res_in_sfc_climo_fns}"
+# fi
+#
+#fi
+#
+#-----------------------------------------------------------------------
+#
+# The variable CRES is needed in constructing various file names. If
+# not running the make_grid task, we can set it here. Otherwise, it
+# will get set to a valid value by that task.
+#
+#-----------------------------------------------------------------------
+#
+CRES=""
+if [ "${RUN_TASK_MAKE_GRID}" = "FALSE" ]; then
+ CRES="C${RES_IN_FIXLAM_FILENAMES}"
+fi
+
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that QUILTING is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "QUILTING" "valid_vals_QUILTING"
+#
+# Set QUILTING to either "TRUE" or "FALSE" so we don't have to consider
+# other valid values later on.
+#
+QUILTING=${QUILTING^^}
+if [ "$QUILTING" = "TRUE" ] || \
+ [ "$QUILTING" = "YES" ]; then
+ QUILTING="TRUE"
+elif [ "$QUILTING" = "FALSE" ] || \
+ [ "$QUILTING" = "NO" ]; then
+ QUILTING="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Make sure that PRINT_ESMF is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+check_var_valid_value "PRINT_ESMF" "valid_vals_PRINT_ESMF"
+#
+# Set PRINT_ESMF to either "TRUE" or "FALSE" so we don't have to consider
+# other valid values later on.
+#
+PRINT_ESMF=${PRINT_ESMF^^}
+if [ "${PRINT_ESMF}" = "TRUE" ] || \
+ [ "${PRINT_ESMF}" = "YES" ]; then
+ PRINT_ESMF="TRUE"
+elif [ "${PRINT_ESMF}" = "FALSE" ] || \
+ [ "${PRINT_ESMF}" = "NO" ]; then
+ PRINT_ESMF="FALSE"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Calculate PE_MEMBER01. This is the number of MPI tasks used for the
+# forecast, including those for the write component if QUILTING is set
+# to "TRUE".
+#
+#-----------------------------------------------------------------------
+#
+PE_MEMBER01=$(( LAYOUT_X*LAYOUT_Y ))
+if [ "$QUILTING" = "TRUE" ]; then
+ PE_MEMBER01=$(( ${PE_MEMBER01} + ${WRTCMP_write_groups}*${WRTCMP_write_tasks_per_group} ))
+fi
+
+print_info_msg "$VERBOSE" "
+The number of MPI tasks for the forecast (including those for the write
+component if it is being used) are:
+ PE_MEMBER01 = ${PE_MEMBER01}"
+#
+#-----------------------------------------------------------------------
+#
+# If the write-component is going to be used to write output files to
+# disk (i.e. if QUILTING is set to "TRUE"), make sure that the grid type
+# used by the write-component (WRTCMP_output_grid) is set to a valid value.
+#
+#-----------------------------------------------------------------------
+#
+if [ "$QUILTING" = "TRUE" ]; then
+ err_msg="\
+The coordinate system used by the write-component output grid specified
+in WRTCMP_output_grid is not supported:
+ WRTCMP_output_grid = \"${WRTCMP_output_grid}\""
+ check_var_valid_value \
+ "WRTCMP_output_grid" "valid_vals_WRTCMP_output_grid" "${err_msg}"
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Calculate the number of nodes (NNODES_FORECAST) to request from the job
+# scheduler for the forecast task (FORECAST_TN). This is just PE_MEMBER01
+# dividied by the number of processes per node we want to request for this
+# task (PPN_FORECAST), then rounded up to the nearest integer, i.e.
+#
+# NNODES_FORECAST = ceil(PE_MEMBER01/PPN_FORECAST)
+#
+# where ceil(...) is the ceiling function, i.e. it rounds its floating
+# point argument up to the next larger integer. Since in bash, division
+# of two integers returns a truncated integer, and since bash has no
+# built-in ceil(...) function, we perform the rounding-up operation by
+# adding the denominator (of the argument of ceil(...) above) minus 1 to
+# the original numerator, i.e. by redefining NNODES_FORECAST to be
+#
+# NNODES_FORECAST = (PE_MEMBER01 + PPN_FORECAST - 1)/PPN_FORECAST
+#
+#-----------------------------------------------------------------------
+#
+NNODES_FORECAST=${NNODES_FORECAST}
+#NNODES_FORECAST=$(( (PE_MEMBER01 + PPN_FORECAST - 1)/PPN_FORECAST ))
+
+#
+#-----------------------------------------------------------------------
+#
+# Call the function that checks whether the RUC land surface model (LSM)
+# is being called by the physics suite and sets the workflow variable
+# SDF_USES_RUC_LSM to "TRUE" or "FALSE" accordingly.
+#
+#-----------------------------------------------------------------------
+#
+check_ruc_lsm \
+ ccpp_phys_suite_fp="${CCPP_PHYS_SUITE_IN_CCPP_FP}" \
+ output_varname_sdf_uses_ruc_lsm="SDF_USES_RUC_LSM"
+#
+#-----------------------------------------------------------------------
+#
+# Set the name of the file containing aerosol climatology data that, if
+# necessary, can be used to generate approximate versions of the aerosol
+# fields needed by Thompson microphysics. This file will be used to
+# generate such approximate aerosol fields in the ICs and LBCs if Thompson
+# MP is included in the physics suite and if the exteranl model for ICs
+# or LBCs does not already provide these fields. Also, set the full path
+# to this file.
+#
+#-----------------------------------------------------------------------
+#
+THOMPSON_MP_CLIMO_FN="Thompson_MP_MONTHLY_CLIMO.nc"
+THOMPSON_MP_CLIMO_FP="$FIXam/${THOMPSON_MP_CLIMO_FN}"
+#
+#-----------------------------------------------------------------------
+#
+# Call the function that, if the Thompson microphysics parameterization
+# is being called by the physics suite, modifies certain workflow arrays
+# to ensure that fixed files needed by this parameterization are copied
+# to the FIXam directory and appropriate symlinks to them are created in
+# the run directories. This function also sets the workflow variable
+# SDF_USES_THOMPSON_MP that indicates whether Thompson MP is called by
+# the physics suite.
+#
+#-----------------------------------------------------------------------
+#
+set_thompson_mp_fix_files \
+ ccpp_phys_suite_fp="${CCPP_PHYS_SUITE_IN_CCPP_FP}" \
+ thompson_mp_climo_fn="${THOMPSON_MP_CLIMO_FN}" \
+ output_varname_sdf_uses_thompson_mp="SDF_USES_THOMPSON_MP"
+#
+#-----------------------------------------------------------------------
+#
+# Generate the shell script that will appear in the experiment directory
+# (EXPTDIR) and will contain definitions of variables needed by the va-
+# rious scripts in the workflow. We refer to this as the experiment/
+# workflow global variable definitions file. We will create this file
+# by:
+#
+# 1) Copying the default workflow/experiment configuration file (speci-
+# fied by EXPT_DEFAULT_CONFIG_FN and located in the shell script di-
+# rectory specified by USHrrfs) to the experiment directory and rena-
+# ming it to the name specified by GLOBAL_VAR_DEFNS_FN.
+#
+# 2) Resetting the default variable values in this file to their current
+# values. This is necessary because these variables may have been
+# reset by the user-specified configuration file (if one exists in
+# USHrrfs) and/or by this setup script, e.g. because predef_domain is
+# set to a valid non-empty value.
+#
+# 3) Appending to the variable definitions file any new variables intro-
+# duced in this setup script that may be needed by the scripts that
+# perform the various tasks in the workflow (and which source the va-
+# riable defintions file).
+#
+# First, set the full path to the variable definitions file and copy the
+# default configuration script into it.
+#
+#-----------------------------------------------------------------------
+#
+GLOBAL_VAR_DEFNS_FP="$EXPTDIR/$GLOBAL_VAR_DEFNS_FN"
+
+return
+
+cp $USHrrfs/${EXPT_DEFAULT_CONFIG_FN} ${GLOBAL_VAR_DEFNS_FP}
+#
+#-----------------------------------------------------------------------
+#
+#
+#
+#-----------------------------------------------------------------------
+#
+
+# Read all lines of GLOBAL_VAR_DEFNS file into the variable line_list.
+line_list=$( sed -r -e "s/(.*)/\1/g" ${GLOBAL_VAR_DEFNS_FP} )
+#
+# Loop through the lines in line_list and concatenate lines ending with
+# the line bash continuation character "\".
+#
+rm ${GLOBAL_VAR_DEFNS_FP}
+while read crnt_line; do
+ printf "%s\n" "${crnt_line}" >> ${GLOBAL_VAR_DEFNS_FP}
+done <<< "${line_list}"
+#
+#-----------------------------------------------------------------------
+#
+# The following comment block needs to be updated because now line_list
+# may contain lines that are not assignment statements (e.g. it may con-
+# tain if-statements). Such lines are ignored in the while-loop below.
+#
+# Reset each of the variables in the variable definitions file to its
+# value in the current environment. To accomplish this, we:
+#
+# 1) Create a list of variable settings by stripping out comments, blank
+# lines, extraneous leading whitespace, etc from the variable defini-
+# tions file (which is currently identical to the default workflow/
+# experiment configuration script) and saving the result in the vari-
+# able line_list. Each line of line_list will have the form
+#
+# VAR=...
+#
+# where the VAR is a variable name and ... is the value from the de-
+# fault configuration script (which does not necessarily correspond
+# to the current value of the variable).
+#
+# 2) Loop through each line of line_list. For each line, we extract the
+# variable name (and save it in the variable var_name), get its value
+# from the current environment (using bash indirection, i.e.
+# ${!var_name}), and use the set_file_param() function to replace the
+# value of the variable in the variable definitions script (denoted
+# above by ...) with its current value.
+#
+#-----------------------------------------------------------------------
+#
+# Also should remove trailing whitespace...
+line_list=$( sed -r \
+ -e "s/^([ ]*)([^ ]+.*)/\2/g" \
+ -e "/^#.*/d" \
+ -e "/^$/d" \
+ ${GLOBAL_VAR_DEFNS_FP} )
+
+print_info_msg "$VERBOSE" "
+The variable \"line_list\" contains:
+
+${line_list}
+"
+
+#
+#-----------------------------------------------------------------------
+#
+# Add a comment at the beginning of the variable definitions file that
+# indicates that the first section of that file is (mostly) the same as
+# the configuration file.
+#
+#-----------------------------------------------------------------------
+#
+#read -r -d '' str_to_insert << EOM
+read -r str_to_insert << EOM
+#
+#-----------------------------------------------------------------------
+#-----------------------------------------------------------------------
+# Section 1:
+# This section is a copy of the default workflow/experiment configuration
+# file config_defaults.sh in the shell scripts directory USHrrfs except
+# that variable values have been updated to those set by the setup
+# script (setup.sh).
+#-----------------------------------------------------------------------
+#-----------------------------------------------------------------------
+#
+EOM
+#
+# Replace all occurrences of actual newlines in the variable str_to_insert
+# with escaped backslash-n. This is needed for the sed command below to
+# work properly (i.e. to avoid it failing with an "unterminated `s' command"
+# message).
+#
+str_to_insert=${str_to_insert//$'\n'/\\n}
+#
+# Insert str_to_insert into GLOBAL_VAR_DEFNS_FP right after the line
+# containing the name of the interpreter (i.e. the line that starts with
+# the string "#!", e.g. "#!/bin/bash").
+#
+regexp="(^#!.*)"
+sed -i -r -e "s|$regexp|\1\n\n${str_to_insert}\n|g" ${GLOBAL_VAR_DEFNS_FP}
+
+#
+# Loop through the lines in line_list.
+#
+while read crnt_line; do
+#
+# Try to obtain the name of the variable being set on the current line.
+# This will be successful only if the line consists of one or more char-
+# acters representing the name of a variable (recall that in generating
+# the variable line_list, all leading spaces in the lines in the file
+# have been stripped out), followed by an equal sign, followed by zero
+# or more characters representing the value that the variable is being
+# set to.
+#
+ var_name=$( printf "%s" "${crnt_line}" | sed -n -r -e "s/^([^ ]*)=.*/\1/p" )
+#echo
+#echo "============================"
+#printf "%s\n" "var_name = \"${var_name}\""
+#
+# If var_name is not empty, then a variable name was found in the cur-
+# rent line in line_list.
+#
+ if [ ! -z $var_name ]; then
+
+ print_info_msg "$VERBOSE" "
+var_name = \"${var_name}\""
+#
+# If the variable specified in var_name is set in the current environ-
+# ment (to either an empty or non-empty string), get its value and in-
+# sert it in the variable definitions file on the line where that varia-
+# ble is defined. Note that
+#
+# ${!var_name+x}
+#
+# will retrun the string "x" if the variable specified in var_name is
+# set (to either an empty or non-empty string), and it will return an
+# empty string if the variable specified in var_name is unset (i.e. un-
+# defined).
+#
+ if [ ! -z ${!var_name+x} ]; then
+#
+# The variable may be a scalar or an array. Thus, we first treat it as
+# an array and obtain the number of elements that it contains.
+#
+ array_name_at="${var_name}[@]"
+ array=("${!array_name_at}")
+ num_elems="${#array[@]}"
+#
+# We will now set the variable var_value to the string that needs to be
+# placed on the right-hand side of the assignment operator (=) on the
+# appropriate line in variable definitions file. How this is done de-
+# pends on whether the variable is a scalar or an array.
+#
+# If the variable contains only one element, then it is a scalar. (It
+# could be a 1-element array, but it is simpler to treat it as a sca-
+# lar.) In this case, we enclose its value in double quotes and save
+# the result in var_value.
+#
+ if [ "$num_elems" -eq 1 ]; then
+ var_value="${!var_name}"
+ var_value="\"${var_value}\""
+#
+# If the variable contains more than one element, then it is an array.
+# In this case, we build var_value in two steps as follows:
+#
+# 1) Generate a string containing each element of the array in double
+# quotes and followed by a space.
+#
+# 2) Place parentheses around the double-quoted list of array elements
+# generated in the first step. Note that there is no need to put a
+# space before the closing parenthesis because in step 1, we have al-
+# ready placed a space after the last element.
+#
+ else
+
+ arrays_on_one_line="TRUE"
+ arrays_on_one_line="FALSE"
+
+ if [ "${arrays_on_one_line}" = "TRUE" ]; then
+ var_value=$(printf "\"%s\" " "${!array_name_at}")
+# var_value=$(printf "\"%s\" \\\\\\ \\\n" "${!array_name_at}")
+ else
+# var_value=$(printf "%s" "\\\\\\n")
+ var_value="\\\\\n"
+ for (( i=0; i<${num_elems}; i++ )); do
+# var_value=$(printf "%s\"%s\" %s" "${var_value}" "${array[$i]}" "\\\\\\n")
+ var_value="${var_value}\"${array[$i]}\" \\\\\n"
+# var_value="${var_value}\"${array[$i]}\" "
+ done
+ fi
+ var_value="( $var_value)"
+
+ fi
+#
+# If the variable specified in var_name is not set in the current envi-
+# ronment (to either an empty or non-empty string), get its value and
+# insert it in the variable definitions file on the line where that va-
+# riable is defined.
+#
+ else
+
+ print_info_msg "
+The variable specified by \"var_name\" is not set in the current envi-
+ronment:
+ var_name = \"${var_name}\"
+Setting its value in the variable definitions file to an empty string."
+
+ var_value="\"\""
+
+ fi
+#
+# Now place var_value on the right-hand side of the assignment statement
+# on the appropriate line in variable definitions file.
+#
+ set_file_param "${GLOBAL_VAR_DEFNS_FP}" "${var_name}" "${var_value}"
+#
+# If var_name is empty, then a variable name was not found in the cur-
+# rent line in line_list. In this case, print out a warning and move on
+# to the next line.
+#
+ else
+
+ print_info_msg "
+Could not extract a variable name from the current line in \"line_list\"
+(probably because it does not contain an equal sign with no spaces on
+either side):
+ crnt_line = \"${crnt_line}\"
+ var_name = \"${var_name}\"
+Continuing to next line in \"line_list\"."
+
+ fi
+
+done <<< "${line_list}"
+#
+#-----------------------------------------------------------------------
+#
+# Append additional variable definitions (and comments) to the variable
+# definitions file. These variables have been set above using the vari-
+# ables in the default and local configuration scripts. These variables
+# are needed by various tasks/scripts in the workflow.
+#
+#-----------------------------------------------------------------------
+#
+{ cat << EOM >> ${GLOBAL_VAR_DEFNS_FP}
+
+#
+#-----------------------------------------------------------------------
+#-----------------------------------------------------------------------
+# Section 2:
+# This section defines variables that have been derived from the ones
+# above by the setup script (setup.sh) and which are needed by one or
+# more of the scripts that perform the workflow tasks (those scripts
+# source this variable definitions file).
+#-----------------------------------------------------------------------
+#-----------------------------------------------------------------------
+#
+
+#
+#-----------------------------------------------------------------------
+#
+# Full path to workflow launcher script, its log file, and the line that
+# gets added to the cron table to launch this script if USE_CRON_TO_RELAUNCH
+# is set to TRUE.
+#
+#-----------------------------------------------------------------------
+#
+WFLOW_LAUNCH_SCRIPT_FP="${WFLOW_LAUNCH_SCRIPT_FP}"
+WFLOW_LAUNCH_LOG_FP="${WFLOW_LAUNCH_LOG_FP}"
+CRONTAB_LINE="${CRONTAB_LINE}"
+#
+#-----------------------------------------------------------------------
+#
+# Directories.
+#
+#-----------------------------------------------------------------------
+#
+HOMErrfs="$HOMErrfs"
+USHrrfs="$USHrrfs"
+SORCrrfs="$SORCrrfs"
+PARMrrfs="$PARMrrfs"
+MODULES_DIR="${MODULES_DIR}"
+LIB64dir="$LIB64dir"
+FIXam="$FIXam"
+FIXLAM="$FIXLAM"
+FIXgsm="$FIXgsm"
+COMROOT="$COMROOT"
+DCOMROOT="$DCOMROOT"
+GESROOT="${GESROOT}"
+UFS_WTHR_MDL_DIR="${UFS_WTHR_MDL_DIR}"
+UFS_UTILS_DIR="${UFS_UTILS_DIR}"
+SFC_CLIMO_INPUT_DIR="${SFC_CLIMO_INPUT_DIR}"
+TOPO_DIR="${TOPO_DIR}"
+UPP_DIR="${UPP_DIR}"
+
+MODEL="${MODEL}"
+
+EXPTDIR="$EXPTDIR"
+LOG_BASEDIR="${LOG_BASEDIR}"
+DATAROOT="${DATAROOT}"
+GRID_DIR="${GRID_DIR}"
+OROG_DIR="${OROG_DIR}"
+SFC_CLIMO_DIR="${SFC_CLIMO_DIR}"
+GWD_HRRRsuite_DIR="${GWD_HRRRsuite_DIR}"
+
+NDIGITS_ENSMEM_NAMES="${NDIGITS_ENSMEM_NAMES}"
+ENSMEM_NAMES=( $( printf "\"%s\" " "${ENSMEM_NAMES[@]}" ))
+FV3_NML_ENSMEM_FPS=( $( printf "\"%s\" " "${FV3_NML_ENSMEM_FPS[@]}" ))
+
+# for data assimilation
+OBSPATH="${OBSPATH}"
+OBSPATH_PM="${OBSPATH_PM}"
+OBSPATH_NSSLMOSIAC="${OBSPATH_NSSLMOSIAC}"
+LIGHTNING_ROOT="${LIGHTNING_ROOT}"
+GLMFED_EAST_ROOT="${GLMFED_EAST_ROOT}"
+GLMFED_WEST_ROOT="${GLMFED_WEST_ROOT}"
+ENKF_FCST="${ENKF_FCST}"
+
+AIRCRAFT_REJECT="${AIRCRAFT_REJECT}"
+SFCOBS_USELIST="${SFCOBS_USELIST}"
+
+RADARREFL_MINS=( $(printf "\"%s\" " "${RADARREFL_MINS[@]}" ))
+RADARREFL_TIMELEVEL=( $(printf "\"%s\" " "${RADARREFL_TIMELEVEL[@]}" ))
+ADDNL_OUTPUT_GRIDS=( $(printf "\"%s\" " "${ADDNL_OUTPUT_GRIDS[@]}" ))
+#
+#-----------------------------------------------------------------------
+#
+# Files.
+#
+#-----------------------------------------------------------------------
+#
+GLOBAL_VAR_DEFNS_FP="${GLOBAL_VAR_DEFNS_FP}"
+# Try this at some point instead of hard-coding it as above; it's a more
+# flexible approach (if it works).
+#GLOBAL_VAR_DEFNS_FP=$( readlink -f "${BASH_SOURCE[0]}" )
+
+DATA_TABLE_TMPL_FN="${DATA_TABLE_TMPL_FN}"
+DIAG_TABLE_TMPL_FN="${DIAG_TABLE_TMPL_FN}"
+FIELD_TABLE_TMPL_FN="${FIELD_TABLE_TMPL_FN}"
+MODEL_CONFIG_TMPL_FN="${MODEL_CONFIG_TMPL_FN}"
+UFS_CONFIG_TMPL_FN="${UFS_CONFIG_TMPL_FN}"
+
+DATA_TABLE_TMPL_FP="${DATA_TABLE_TMPL_FP}"
+DIAG_TABLE_TMPL_FP="${DIAG_TABLE_TMPL_FP}"
+FIELD_TABLE_TMPL_FP="${FIELD_TABLE_TMPL_FP}"
+FV3_NML_BASE_SUITE_FP="${FV3_NML_BASE_SUITE_FP}"
+FV3_NML_YAML_CONFIG_FP="${FV3_NML_YAML_CONFIG_FP}"
+FV3_NML_BASE_ENS_FP="${FV3_NML_BASE_ENS_FP}"
+MODEL_CONFIG_TMPL_FP="${MODEL_CONFIG_TMPL_FP}"
+UFS_CONFIG_TMPL_FP="${UFS_CONFIG_TMPL_FP}"
+
+CCPP_PHYS_SUITE_FN="${CCPP_PHYS_SUITE_FN}"
+CCPP_PHYS_SUITE_IN_CCPP_FP="${CCPP_PHYS_SUITE_IN_CCPP_FP}"
+CCPP_PHYS_SUITE_FP="${CCPP_PHYS_SUITE_FP}"
+
+DATA_TABLE_FP="${DATA_TABLE_FP}"
+FIELD_TABLE_FP="${FIELD_TABLE_FP}"
+FV3_NML_FN="${FV3_NML_FN}" # This may not be necessary...
+FV3_NML_FP="${FV3_NML_FP}"
+FV3_NML_CYCSFC_FP="${FV3_NML_CYCSFC_FP}"
+FV3_NML_RESTART_FP="${FV3_NML_RESTART_FP}"
+FV3_NML_STOCH_FP="${FV3_NML_STOCH_FP}"
+FV3_NML_RESTART_STOCH_FP="${FV3_NML_RESTART_STOCH_FP}"
+UFS_CONFIG_FP="${UFS_CONFIG_FP}"
+UFS_YAML_FP="${UFS_YAML_FP}"
+
+FV3_EXEC_FP="${FV3_EXEC_FP}"
+
+LOAD_MODULES_RUN_TASK_FP="${LOAD_MODULES_RUN_TASK_FP}"
+
+THOMPSON_MP_CLIMO_FN="${THOMPSON_MP_CLIMO_FN}"
+THOMPSON_MP_CLIMO_FP="${THOMPSON_MP_CLIMO_FP}"
+#
+#-----------------------------------------------------------------------
+#
+# Parameters that indicate whether or not various parameterizations are
+# included in and called by the phsics suite.
+#
+#-----------------------------------------------------------------------
+#
+SDF_USES_RUC_LSM="${SDF_USES_RUC_LSM}"
+SDF_USES_THOMPSON_MP="${SDF_USES_THOMPSON_MP}"
+#
+#-----------------------------------------------------------------------
+#
+# Grid configuration parameters needed regardless of grid generation me-
+# thod used.
+#
+#-----------------------------------------------------------------------
+#
+GTYPE="$GTYPE"
+TILE_RGNL="${TILE_RGNL}"
+NH0="${NH0}"
+NH3="${NH3}"
+NH4="${NH4}"
+
+LON_CTR="${LON_CTR}"
+LAT_CTR="${LAT_CTR}"
+NX="${NX}"
+NY="${NY}"
+PAZI="${PAZI}"
+NHW="${NHW}"
+STRETCH_FAC="${STRETCH_FAC}"
+
+RES_IN_FIXLAM_FILENAMES="${RES_IN_FIXLAM_FILENAMES}"
+#
+# If running the make_grid task, CRES will be set to a null string du-
+# the grid generation step. It will later be set to an actual value af-
+# ter the make_grid task is complete.
+#
+CRES="$CRES"
+EOM
+} || print_err_msg_exit "\
+Heredoc (cat) command to append new variable definitions to variable
+definitions file returned with a nonzero status."
+#
+#-----------------------------------------------------------------------
+#
+# Append to the variable definitions file the defintions of grid parame-
+# ters that are specific to the grid generation method used.
+#
+#-----------------------------------------------------------------------
+#
+if [ "${GRID_GEN_METHOD}" = "GFDLgrid" ]; then
+
+ { cat << EOM >> ${GLOBAL_VAR_DEFNS_FP}
+#
+#-----------------------------------------------------------------------
+#
+# Grid configuration parameters for a regional grid generated from a
+# global parent cubed-sphere grid. This is the method originally sug-
+# gested by GFDL since it allows GFDL's nested grid generator to be used
+# to generate a regional grid. However, for large regional domains, it
+# results in grids that have an unacceptably large range of cell sizes
+# (i.e. ratio of maximum to minimum cell size is not sufficiently close
+# to 1).
+#
+#-----------------------------------------------------------------------
+#
+ISTART_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG="${ISTART_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG}"
+IEND_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG="${IEND_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG}"
+JSTART_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG="${JSTART_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG}"
+JEND_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG="${JEND_OF_RGNL_DOM_WITH_WIDE_HALO_ON_T6SG}"
+EOM
+} || print_err_msg_exit "\
+Heredoc (cat) command to append grid parameters to variable definitions
+file returned with a nonzero status."
+
+elif [ "${GRID_GEN_METHOD}" = "ESGgrid" ]; then
+
+ { cat << EOM >> ${GLOBAL_VAR_DEFNS_FP}
+#
+#-----------------------------------------------------------------------
+#
+# Grid configuration parameters for a regional grid generated indepen-
+# dently of a global parent grid. This method was developed by Jim Pur-
+# ser of EMC and results in very uniform grids (i.e. ratio of maximum to
+# minimum cell size is very close to 1).
+#
+#-----------------------------------------------------------------------
+#
+DEL_ANGLE_X_SG="${DEL_ANGLE_X_SG}"
+DEL_ANGLE_Y_SG="${DEL_ANGLE_Y_SG}"
+NEG_NX_OF_DOM_WITH_WIDE_HALO="${NEG_NX_OF_DOM_WITH_WIDE_HALO}"
+NEG_NY_OF_DOM_WITH_WIDE_HALO="${NEG_NY_OF_DOM_WITH_WIDE_HALO}"
+EOM
+} || print_err_msg_exit "\
+Heredoc (cat) command to append grid parameters to variable definitions
+file returned with a nonzero status."
+
+fi
+#
+#-----------------------------------------------------------------------
+#
+# Continue appending variable defintions to the variable definitions
+# file.
+#
+#-----------------------------------------------------------------------
+#
+{ cat << EOM >> ${GLOBAL_VAR_DEFNS_FP}
+#
+#-----------------------------------------------------------------------
+#
+# Name of the ozone parameterization. The value this gets set to depends
+# on the CCPP physics suite being used.
+#
+#-----------------------------------------------------------------------
+#
+OZONE_PARAM="${OZONE_PARAM}"
+#
+#-----------------------------------------------------------------------
+#
+# If USE_USER_STAGED_EXTRN_FILES is set to "FALSE", this is the system
+# directory in which the workflow scripts will look for the files generated
+# by the external model specified in EXTRN_MDL_NAME_ICS. These files will
+# be used to generate the input initial condition and surface files for
+# the FV3-LAM.
+#
+#-----------------------------------------------------------------------
+#
+EXTRN_MDL_SYSBASEDIR_ICS="${EXTRN_MDL_SYSBASEDIR_ICS}"
+#
+#-----------------------------------------------------------------------
+#
+# Shift back in time (in units of hours) of the starting time of the ex-
+# ternal model specified in EXTRN_MDL_NAME_LBCS.
+#
+#-----------------------------------------------------------------------
+#
+EXTRN_MDL_ICS_OFFSET_HRS="${EXTRN_MDL_ICS_OFFSET_HRS}"
+#
+#-----------------------------------------------------------------------
+#
+# If USE_USER_STAGED_EXTRN_FILES is set to "FALSE", this is the system
+# directory in which the workflow scripts will look for the files generated
+# by the external model specified in EXTRN_MDL_NAME_LBCS. These files
+# will be used to generate the input lateral boundary condition files for
+# the FV3-LAM.
+#
+#-----------------------------------------------------------------------
+#
+EXTRN_MDL_SYSBASEDIR_LBCS="${EXTRN_MDL_SYSBASEDIR_LBCS}"
+#
+#-----------------------------------------------------------------------
+#
+# Shift back in time (in units of hours) of the starting time of the ex-
+# ternal model specified in EXTRN_MDL_NAME_LBCS.
+#
+#-----------------------------------------------------------------------
+#
+EXTRN_MDL_LBCS_OFFSET_HRS="${EXTRN_MDL_LBCS_OFFSET_HRS}"
+EXTRN_MDL_LBCS_SEARCH_OFFSET_HRS="${EXTRN_MDL_LBCS_SEARCH_OFFSET_HRS}"
+LBCS_SEARCH_HRS="${LBCS_SEARCH_HRS}"
+#
+#-----------------------------------------------------------------------
+#
+# Boundary condition update times (in units of forecast hours). Note that
+# LBC_SPEC_FCST_HRS is an array, even if it has only one element.
+#
+#-----------------------------------------------------------------------
+#
+LBC_SPEC_FCST_HRS=(${LBC_SPEC_FCST_HRS[@]})
+LBC_SPEC_FCST_LONG_HRS=(${LBC_SPEC_FCST_LONG_HRS[@]})
+#
+#-----------------------------------------------------------------------
+#
+# If USE_FVCOM is set to TRUE, then FVCOM data (located in FVCOM_DIR
+# in FVCOM_FILE) will be used to update lower boundary conditions during
+# make_ics.
+#
+#-----------------------------------------------------------------------
+#
+USE_FVCOM="${USE_FVCOM}"
+FVCOM_DIR="${FVCOM_DIR}"
+FVCOM_FILE="${FVCOM_FILE}"
+#
+#-----------------------------------------------------------------------
+#
+# Computational parameters.
+#
+#-----------------------------------------------------------------------
+#
+NCORES_PER_NODE="${NCORES_PER_NODE}"
+PE_MEMBER01="${PE_MEMBER01}"
+#
+#-----------------------------------------------------------------------
+#
+# IF DO_SPP is set to "TRUE", N_VAR_SPP specifies the number of physics
+# parameterizations that are perturbed with SPP. If DO_LSM_SPP is set to
+# "TRUE", N_VAR_LNDP specifies the number of LSM parameters that are
+# perturbed. LNDP_TYPE determines the way LSM perturbations are employed
+# and FHCYC_LSM_SPP_OR_NOT sets FHCYC based on whether LSM perturbations
+# are turned on or not.
+#
+#-----------------------------------------------------------------------
+#
+N_VAR_SPP='${N_VAR_SPP}'
+N_VAR_LNDP='${N_VAR_LNDP}'
+LNDP_TYPE='${LNDP_TYPE}'
+FHCYC_LSM_SPP_OR_NOT='${FHCYC_LSM_SPP_OR_NOT}'
+EOM
+} || print_err_msg_exit "\
+Heredoc (cat) command to append new variable definitions to variable
+definitions file returned with a nonzero status."
+#
+#-----------------------------------------------------------------------
+#
+# Print message indicating successful completion of script.
+#
+#-----------------------------------------------------------------------
+#
+print_info_msg "
+========================================================================
+Setup script completed successfully!!!
+========================================================================"
+#
+#-----------------------------------------------------------------------
+#
+# Restore the shell options saved at the start of this script/function.
+#
+#-----------------------------------------------------------------------
+#
+{ restore_shell_opts; } > /dev/null 2>&1
+
+}
+#
+#-----------------------------------------------------------------------
+#
+# Call the function defined above.
+#
+#-----------------------------------------------------------------------
+#
+setup
+