diff --git a/dev/ci/cases/sfs/C192mx025_S2S_CPC_ICS.yaml b/dev/ci/cases/sfs/C192mx025_S2S_CPC_ICS.yaml new file mode 100644 index 00000000000..46ef548531d --- /dev/null +++ b/dev/ci/cases/sfs/C192mx025_S2S_CPC_ICS.yaml @@ -0,0 +1,24 @@ +experiment: + net: sfs + mode: forecast-only + idate: 1994050100 + edate: 1994050100 + pslot: {{ 'pslot' | getenv }} + app: S2S + resdetatmos: 192 + resensatmos: 192 + resdetocean: 0.25 + start: 'cold' + nens: 10 + comroot: {{ 'RUNTESTS' | getenv }}/COMROOT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: {{ 'TOPICDIR' | getenv }}/CPC/C192mx025 + yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/sfs_full_C192mx025_CPC_ICS.yaml + +workflow: + engine: rocoto + rocoto: + maxtries: 2 + cyclethrottle: 3 + taskthrottle: 25 + verbosity: 2 diff --git a/dev/ci/cases/sfs/C192mx025_S2S_REPLAY_ICS.yaml b/dev/ci/cases/sfs/C192mx025_S2S_REPLAY_ICS.yaml new file mode 100644 index 00000000000..24da3233d57 --- /dev/null +++ b/dev/ci/cases/sfs/C192mx025_S2S_REPLAY_ICS.yaml @@ -0,0 +1,24 @@ +experiment: + net: sfs + mode: forecast-only + idate: 1994050100 + edate: 1994050100 + pslot: {{ 'pslot' | getenv }} + app: S2S + resdetatmos: 192 + resensatmos: 192 + resdetocean: 0.25 + start: 'cold' + nens: 10 + comroot: {{ 'RUNTESTS' | getenv }}/COMROOT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: {{ 'TOPICDIR' | getenv }}/REPLAY/C192mx025 + yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/sfs_full_C192mx025_REPLAY_ICS.yaml + +workflow: + engine: rocoto + rocoto: + maxtries: 2 + cyclethrottle: 3 + taskthrottle: 25 + verbosity: 2 diff --git a/dev/ci/cases/sfs/C96mx100_S2S.yaml b/dev/ci/cases/sfs/C96mx100_S2S_CPC_ICS.yaml similarity index 77% rename from dev/ci/cases/sfs/C96mx100_S2S.yaml rename to dev/ci/cases/sfs/C96mx100_S2S_CPC_ICS.yaml index 85cec125b55..7f338b51d0a 100644 --- a/dev/ci/cases/sfs/C96mx100_S2S.yaml +++ b/dev/ci/cases/sfs/C96mx100_S2S_CPC_ICS.yaml @@ -12,8 +12,8 @@ experiment: nens: 10 comroot: {{ 'RUNTESTS' | getenv }}/COMROOT expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR - icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C96mx100/20240610 - yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/sfs_full.yaml + icsdir: {{ 'TOPICDIR' | getenv }}/CPC/C96mx100 + yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/sfs_full_C96mx100_CPC_ICS.yaml workflow: engine: rocoto diff --git a/dev/ci/cases/sfs/C96mx100_S2S_REPLAY_ICS.yaml b/dev/ci/cases/sfs/C96mx100_S2S_REPLAY_ICS.yaml new file mode 100644 index 00000000000..64d7ac05c30 --- /dev/null +++ b/dev/ci/cases/sfs/C96mx100_S2S_REPLAY_ICS.yaml @@ -0,0 +1,24 @@ +experiment: + net: sfs + mode: forecast-only + idate: 1994050100 + edate: 1994050100 + pslot: {{ 'pslot' | getenv }} + app: S2S + resdetatmos: 96 + resensatmos: 96 + resdetocean: 1 + start: 'cold' + nens: 10 + comroot: {{ 'RUNTESTS' | getenv }}/COMROOT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: {{ 'TOPICDIR' | getenv }}/REPLAY/C96mx100 + yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/sfs_full_C96mx100_REPLAY_ICS.yaml + +workflow: + engine: rocoto + rocoto: + maxtries: 2 + cyclethrottle: 3 + taskthrottle: 25 + verbosity: 2 diff --git a/dev/ci/cases/yamls/sfs_full.yaml b/dev/ci/cases/yamls/sfs_full.yaml deleted file mode 100644 index a74b94ecd87..00000000000 --- a/dev/ci/cases/yamls/sfs_full.yaml +++ /dev/null @@ -1,10 +0,0 @@ -defaults: - !INC {{ HOMEgfs }}/dev/parm/config/sfs/yaml/defaults.yaml -base: - FHMAX_GFS: 2976 - FCST_BREAKPOINTS: "" - REPLAY_ICS: "NO" - USE_OCN_ENS_PERTURB_FILES: "YES" - USE_ATM_ENS_PERTURB_FILES: "YES" -ocn: - MOM6_INTERP_ICS: "YES" diff --git a/dev/ci/cases/yamls/sfs_full_C192mx025_CPC_ICS.yaml b/dev/ci/cases/yamls/sfs_full_C192mx025_CPC_ICS.yaml new file mode 100644 index 00000000000..518d17f1888 --- /dev/null +++ b/dev/ci/cases/yamls/sfs_full_C192mx025_CPC_ICS.yaml @@ -0,0 +1,10 @@ +defaults: + !INC {{ HOMEgfs }}/dev/parm/config/sfs/yaml/defaults.yaml +base: + FHMAX_GFS: 8784 + FCST_BREAKPOINTS: "2400, 4800, 7200" +ocn: + MOM6_INTERP_ICS: "YES" +nsst: + NST_SPINUP: 1 + diff --git a/dev/ci/cases/yamls/sfs_full_C192mx025_REPLAY_ICS.yaml b/dev/ci/cases/yamls/sfs_full_C192mx025_REPLAY_ICS.yaml new file mode 100644 index 00000000000..1fb5a5d41d5 --- /dev/null +++ b/dev/ci/cases/yamls/sfs_full_C192mx025_REPLAY_ICS.yaml @@ -0,0 +1,7 @@ +defaults: + !INC {{ HOMEgfs }}/dev/parm/config/sfs/yaml/defaults.yaml +base: + FHMAX_GFS: 8784 + FCST_BREAKPOINTS: "2400, 4800, 7200" +ocn: + MOM6_INTERP_ICS: "NO" diff --git a/dev/ci/cases/yamls/sfs_full_C96mx100_CPC_ICS.yaml b/dev/ci/cases/yamls/sfs_full_C96mx100_CPC_ICS.yaml new file mode 100644 index 00000000000..adf5bec1b4c --- /dev/null +++ b/dev/ci/cases/yamls/sfs_full_C96mx100_CPC_ICS.yaml @@ -0,0 +1,9 @@ +defaults: + !INC {{ HOMEgfs }}/dev/parm/config/sfs/yaml/defaults.yaml +base: + FHMAX_GFS: 8784 + FCST_BREAKPOINTS: "2400, 4800, 7200" +ocn: + MOM6_INTERP_ICS: "NO" +nsst: + NST_SPINUP: 1 diff --git a/dev/ci/cases/yamls/sfs_full_C96mx100_REPLAY_ICS.yaml b/dev/ci/cases/yamls/sfs_full_C96mx100_REPLAY_ICS.yaml new file mode 100644 index 00000000000..76d0b552dee --- /dev/null +++ b/dev/ci/cases/yamls/sfs_full_C96mx100_REPLAY_ICS.yaml @@ -0,0 +1,7 @@ +defaults: + !INC {{ HOMEgfs }}/dev/parm/config/sfs/yaml/defaults.yaml +base: + FHMAX_GFS: 8784 + FCST_BREAKPOINTS: "2400, 4800, 7200" +ocn: + MOM6_INTERP_ICS: "YES" diff --git a/dev/parm/config/gefs/config.ufs b/dev/parm/config/gefs/config.ufs index 04924ab1283..b079a25fccd 100644 --- a/dev/parm/config/gefs/config.ufs +++ b/dev/parm/config/gefs/config.ufs @@ -94,8 +94,8 @@ case "${fv3_res}" in ;; "C96") export DELTIM=600 - export layout_x=2 - export layout_y=2 + export layout_x=6 + export layout_y=8 export nthreads_fv3=1 export nthreads_ufs=1 export xr_cnvcld=".true." # Pass conv. clouds to Xu-Randall cloud fraction @@ -113,8 +113,8 @@ case "${fv3_res}" in ;; "C192") export DELTIM=600 - export layout_x=4 - export layout_y=6 + export layout_x=8 + export layout_y=8 export nthreads_fv3=1 export nthreads_ufs=1 export cdmbgwd="0.23,1.5,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling @@ -364,7 +364,7 @@ if [[ "${skip_mom6}" == "false" ]]; then FRUNOFF="runoff.daitren.clim.${NX_GLB}x${NY_GLB}.v20180328.nc" CHLCLIM="seawifs-clim-1997-2010.${NX_GLB}x${NY_GLB}.v20180328.nc" MOM6_RIVER_RUNOFF='True' - MOM6_RESTART_SETTING="r" + MOM6_RESTART_SETTING=${MOM6_RESTART_SETTING:-'r'} eps_imesh="1.0e-1" case ${RUN} in gfs|gefs|sfs) @@ -430,7 +430,11 @@ if [[ "${skip_cice6}" == "false" ]]; then cice6_processor_shape="slenderX2" ;; "025") - ntasks_cice6=120 + if [[ "${fv3_res}" == "C192" ]]; then + ntasks_cice6=90 + else + ntasks_cice6=120 + fi cice6_processor_shape="slenderX2" ;; *) diff --git a/dev/parm/config/gfs/config.globus b/dev/parm/config/gfs/config.globus index 22510ddcd87..b98cf241413 100644 --- a/dev/parm/config/gfs/config.globus +++ b/dev/parm/config/gfs/config.globus @@ -17,7 +17,7 @@ export STAGE_DIR="${DATAROOT}/archive_rotdir/${PSLOT}" export SERVER_NAME="mercury" # Username on the server -export SERVER_USERNAME="" +export SERVER_USERNAME="Neil.Barton" # General delivery location on Mercury (staging area for data on server) export SERVER_HOME="/collab2/data/${SERVER_USERNAME}/${PSLOT}" diff --git a/dev/parm/config/gfs/config.ocn.j2 b/dev/parm/config/gfs/config.ocn.j2 index b9669be2c8a..30730854dd3 100644 --- a/dev/parm/config/gfs/config.ocn.j2 +++ b/dev/parm/config/gfs/config.ocn.j2 @@ -24,7 +24,7 @@ else export ODA_INCUPD_NHOURS="3.0" fi -MOM6_INTERP_ICS="{{ MOM6_INTERP_ICS }}" +export MOM6_INTERP_ICS="{{ MOM6_INTERP_ICS }}" if [[ "${MOM6_INTERP_ICS}" == "YES" ]]; then export MOM6_RESTART_SETTING='n' export MOM6_WARMSTART_FILE="MOM.res.nc" diff --git a/dev/parm/config/sfs/config.base.j2 b/dev/parm/config/sfs/config.base.j2 index ced1c4d29ee..dc92f42b376 100644 --- a/dev/parm/config/sfs/config.base.j2 +++ b/dev/parm/config/sfs/config.base.j2 @@ -157,10 +157,10 @@ case "${CASE}" in "C48") export waveGRD='glo_500' ;; - "C96" | "C192") + "C96") export waveGRD='glo_100' ;; - "C384") + "C192" | "C384") export waveGRD='glo_025' ;; "C768" | "C1152") @@ -328,7 +328,8 @@ export DO_FIT2OBS="NO" # Run fit to observations package # Archiving options export HPSSARCH="{{ HPSSARCH }}" # save data to HPSS archive -export LOCALARCH="{{ LOCALARCH }}" # save data to local archive +export LOCALARCH="{{ LOCALARCH }}" # save data to local archive +export ARCHCOM_TO="{{ ARCHCOM_TO }}" # where to save data if [[ ${HPSSARCH} = "YES" ]] && [[ ${LOCALARCH} = "YES" ]]; then echo "Both HPSS and local archiving selected. Please choose one or the other." exit 3 diff --git a/dev/parm/config/sfs/config.efcs b/dev/parm/config/sfs/config.efcs index 2f8662dac9e..c10f863cab2 100644 --- a/dev/parm/config/sfs/config.efcs +++ b/dev/parm/config/sfs/config.efcs @@ -27,7 +27,7 @@ source "${EXPDIR}/config.ufs" ${string} source "${EXPDIR}/config.resources" efcs # Stochastic physics parameters (only for ensemble forecasts) -if [[ "${CASE}" == "C96" ]] ; then +if [[ "${TYPE}" == "hydro" ]] ; then export DO_SKEB="NO" # SKEB turned off for C96 export SKEB=-999. else diff --git a/dev/parm/config/sfs/config.fcst.j2 b/dev/parm/config/sfs/config.fcst.j2 index f0d72bc72a0..2386f2fb9a2 100644 --- a/dev/parm/config/sfs/config.fcst.j2 +++ b/dev/parm/config/sfs/config.fcst.j2 @@ -254,6 +254,8 @@ export FSICS="0" # Write more variables to output if [[ "${REPLAY_ICS:-NO}" == "YES" ]]; then export DIAG_TABLE="${PARMgfs}/ufs/fv3/diag_table_replay" +elif [[ "${RUN}" == "sfs" ]]; then + export DIAG_TABLE="${PARMgfs}/ufs/fv3/diag_table_sfs" else export DIAG_TABLE="${PARMgfs}/ufs/fv3/diag_table" fi diff --git a/dev/parm/config/sfs/config.nsst b/dev/parm/config/sfs/config.nsst deleted file mode 120000 index 3a015c1d65f..00000000000 --- a/dev/parm/config/sfs/config.nsst +++ /dev/null @@ -1 +0,0 @@ -../gefs/config.nsst \ No newline at end of file diff --git a/dev/parm/config/sfs/config.nsst.j2 b/dev/parm/config/sfs/config.nsst.j2 new file mode 100644 index 00000000000..8b4f2387d78 --- /dev/null +++ b/dev/parm/config/sfs/config.nsst.j2 @@ -0,0 +1,32 @@ +#! /usr/bin/env bash + +########## config.nsst ########## +# NSST specific + +echo "BEGIN: config.nsst" + +# NSST parameters contained within nstf_name + +# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled +export NST_MODEL=2 + +# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, +export NST_SPINUP="{{ NST_SPINUP }}" + +# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON +export NST_RESV=0 + +# nstf_name(4,5) : ZSEA1, ZSEA2 the two depths to apply vertical average (bias correction) +export ZSEA1=0 +export ZSEA2=0 + +export NST_GSI=3 # default 0: No NST info at all; + # 1: Input NST info but not used in GSI; + # 2: Input NST info, used in CRTM simulation, no Tr analysis + # 3: Input NST info, used in both CRTM simulation and Tr analysis +export NSTINFO=0 # number of elements added in obs. data array (default = 0) +if [[ ${NST_GSI} -gt 0 ]]; then + export NSTINFO=4 +fi + +echo "END: config.nsst" diff --git a/dev/parm/config/sfs/config.resources b/dev/parm/config/sfs/config.resources index 803e6282711..8230a0335d1 100644 --- a/dev/parm/config/sfs/config.resources +++ b/dev/parm/config/sfs/config.resources @@ -316,6 +316,15 @@ case ${step} in export memory="4096M" ;; + "globus") + export walltime="08:00:00" + export ntasks=1 + export tasks_per_node=1 + export threads_per_task=1 + export memory="4096M" + ;; + + "cleanup") export walltime="00:30:00" export ntasks=1 diff --git a/dev/parm/config/sfs/yaml/defaults.yaml b/dev/parm/config/sfs/yaml/defaults.yaml index c81416e8c6e..f56ecf9b993 100644 --- a/dev/parm/config/sfs/yaml/defaults.yaml +++ b/dev/parm/config/sfs/yaml/defaults.yaml @@ -19,8 +19,8 @@ base: FHOUT_ICE_GFS: 24 HPSSARCH: "NO" LOCALARCH: "NO" - USE_OCN_ENS_PERTURB_FILES: "NO" - USE_ATM_ENS_PERTURB_FILES: "NO" + USE_OCN_ENS_PERTURB_FILES: "YES" + USE_ATM_ENS_PERTURB_FILES: "YES" DO_TEST_MODE: "NO" fcst: CHECK_LAND_RESTART_OROG: "YES" @@ -30,6 +30,9 @@ fcst: MONO: "mono" ocn: MOM6_INTERP_ICS: "NO" +nsst: + NST_SPINUP: 0 + # config.aero has just a system-specific path to add. # This is handled by the setup_expt.py, but it has to be told to write to it. aero: {} diff --git a/dev/workflow/applications/sfs.py b/dev/workflow/applications/sfs.py index d08e028fdcc..316f74335d8 100644 --- a/dev/workflow/applications/sfs.py +++ b/dev/workflow/applications/sfs.py @@ -93,6 +93,8 @@ def _get_app_configs(self, run): if options['do_archcom']: configs += ['arch_tars'] + if options['do_globusarch']: + configs += ['globus'] configs += ['arch_vrfy', 'cleanup'] @@ -164,7 +166,11 @@ def get_task_names(self): if options['do_extractvars']: tasks += ['extractvars'] - # TODO: Add archive + if options['do_archcom']: + tasks += ['arch_tars'] + if options['do_globusarch']: + tasks += ['globus'] + tasks += ['cleanup'] return {f"{self.run}": tasks} diff --git a/dev/workflow/hosts/hercules.yaml b/dev/workflow/hosts/hercules.yaml index ce971749e4d..d673a26973c 100644 --- a/dev/workflow/hosts/hercules.yaml +++ b/dev/workflow/hosts/hercules.yaml @@ -5,7 +5,7 @@ BASE_DATA: '/work2/noaa/global/role-global/data' BASE_IC: '/work2/noaa/global/role-global/data/ICSDIR' AERO_INPUTS_DIR: '/work2/noaa/global/role-global/data/GEFS_ExtData/20250310' PACKAGEROOT: '/work2/noaa/global/role-global/nwpara' -HOMEDIR: '/work2/noaa/global/${USER}' +HOMEDIR: '/work2/noaa/stmp/${USER}' STMP: '/work2/noaa/stmp/${USER}/${machine^^}' PTMP: '/work2/noaa/stmp/${USER}/${machine^^}' NOSCRUB: '${HOMEDIR}' diff --git a/dev/workflow/rocoto/sfs_tasks.py b/dev/workflow/rocoto/sfs_tasks.py index d7f53346da4..46e5c6f1513 100644 --- a/dev/workflow/rocoto/sfs_tasks.py +++ b/dev/workflow/rocoto/sfs_tasks.py @@ -626,6 +626,30 @@ def arch_tars(self): task = rocoto.create_task(task_dict) return task + + # Globus transfer for HPSS archiving + def globus(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.run}_arch_tars'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('globus') + task_name = f'{self.run}_globus_arch' + task_dict = {'task_name': task_name, + 'resources': resources, + 'dependency': dependencies, + 'envars': self.envars, + 'cycledef': self.run, + 'command': f'{self.HOMEgfs}/dev/jobs/globus_arch.sh', + 'job_name': f'{self.pslot}_{task_name}_@H', + 'log': f'{self.rotdir}/logs/@Y@m@d@H/{task_name}.log', + 'maxtries': '&MAXTRIES;' + } + + task = rocoto.create_task(task_dict) + + return task def cleanup(self): deps = [] @@ -652,6 +676,13 @@ def cleanup(self): if self.options['do_extractvars']: dep_dict = {'type': 'metatask', 'name': f'{self.run}_extractvars'} deps.append(rocoto.add_dependency(dep_dict)) + if self.options['do_archcom']: + if self.options['do_globusarch']: + dep_dict = {'type': 'task', 'name': f'{self.run}_globus_arch'} + else: + dep_dict = {'type': 'task', 'name': f'{self.run}_arch_tars'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') resources = self.get_resource('cleanup') task_name = f'{self.run}_cleanup' diff --git a/jobs/JGLOBAL_STAGE_IC b/jobs/JGLOBAL_STAGE_IC index 6a2f9571166..42fb67bc0db 100755 --- a/jobs/JGLOBAL_STAGE_IC +++ b/jobs/JGLOBAL_STAGE_IC @@ -1,6 +1,6 @@ #! /usr/bin/env bash -source "${HOMEgfs}/ush/jjob_header.sh" -e "stage_ic" -c "base stage_ic" +source "${HOMEgfs}/ush/jjob_header.sh" -e "stage_ic" -c "base stage_ic ocn" # Execute staging "${SCRgfs}/exglobal_stage_ic.py" diff --git a/parm/archive/atmos_master_grib_mem.yaml.j2 b/parm/archive/atmos_master_grib_mem.yaml.j2 new file mode 100644 index 00000000000..c2033416c11 --- /dev/null +++ b/parm/archive/atmos_master_grib_mem.yaml.j2 @@ -0,0 +1,17 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".t" ~ cycle_HH ~ "z.master." %} +atmos_master_grib: + name: "ATMOS_MASTER_grib" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/atmos_master_grib.tar" + required: + - "{{ COMIN_ATMOS_MASTER | relpath(ROTDIR) }}/{{ head }}*" + {% for mem in range(1, NMEM_ENS + 1) %} + {% set mem_char = 'mem%03d' | format(mem) %} + {% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} + {% set COMIN_ATMOS_MASTER = COM_ATMOS_MASTER_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_ATMOS_MASTER | relpath(ROTDIR) }}/{{ head }}*" + {% endfor %} diff --git a/parm/archive/ice_history_mem.yaml.j2 b/parm/archive/ice_history_mem.yaml.j2 new file mode 100644 index 00000000000..1f9e038392f --- /dev/null +++ b/parm/archive/ice_history_mem.yaml.j2 @@ -0,0 +1,17 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".ice.t" ~ cycle_HH ~ "z." %} +{% for mem in range(0, NMEM_ENS + 1) %} +{% set mem_char = 'mem%03d' | format(mem) %} +{% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} +ice_history_{{ mem_char }}: + name: "ICE_HISTORY_{{ mem_char }}" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/ice_history_{{ mem_char }}.tar" + required: + {% set COMIN_ICE_HISTORY = COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_ICE_HISTORY | relpath(ROTDIR) }}/{{ head }}*.nc" +{% endfor %} + diff --git a/parm/archive/ice_history_mem_daily.yaml.j2 b/parm/archive/ice_history_mem_daily.yaml.j2 new file mode 100644 index 00000000000..c0493092001 --- /dev/null +++ b/parm/archive/ice_history_mem_daily.yaml.j2 @@ -0,0 +1,16 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".ice.t" ~ cycle_HH ~ "z.24hr_avg.f???" %} +{% for mem in range(0, NMEM_ENS + 1) %} +{% set mem_char = 'mem%03d' | format(mem) %} +{% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} +ice_history_daily_{{ mem_char }}: + name: "ICE_HISTORY_DAILY_{{ mem_char }}" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/ice_history_daily_{{ mem_char }}.tar" + required: + {% set COMIN_ICE_HISTORY = COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_ICE_HISTORY | relpath(ROTDIR) }}/{{ head }}.nc" +{% endfor %} diff --git a/parm/archive/ice_history_mem_monthly.yaml.j2 b/parm/archive/ice_history_mem_monthly.yaml.j2 new file mode 100644 index 00000000000..a3138811719 --- /dev/null +++ b/parm/archive/ice_history_mem_monthly.yaml.j2 @@ -0,0 +1,17 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".ice.t??????????.monthly_avg." %} +{% for mem in range(0, NMEM_ENS + 1) %} +{% set mem_char = 'mem%03d' | format(mem) %} +{% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} +ice_history_monthly_{{ mem_char }}: + name: "ICE_HISTORY_MONTHLY{{ mem_char }}" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/ice_history_monthly_{{ mem_char }}.tar" + required: + {% set COMIN_ICE_HISTORY = COM_ICE_HISTORY_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_ICE_HISTORY | relpath(ROTDIR) }}/{{ head }}*.nc" +{% endfor %} + diff --git a/parm/archive/master_sfs.yaml.j2 b/parm/archive/master_sfs.yaml.j2 new file mode 100644 index 00000000000..17ab312e12f --- /dev/null +++ b/parm/archive/master_sfs.yaml.j2 @@ -0,0 +1,38 @@ +# Set variables/lists needed to parse the gefs templates +{% set cycle_HH = current_cycle | strftime("%H") %} +{% set cycle_YMD = current_cycle | to_YMD %} +{% set cycle_YMDH = current_cycle | to_YMDH %} + +datasets: +# Archive the EXPDIR if requested +{% if archive_expdir %} +{% filter indent(width=4) %} +{% include "expdir.yaml.j2" %} +{% endfilter %} +{% endif %} + +{% filter indent(width=4) %} +{% include "atmos_master_grib_mem.yaml.j2" %} +{% endfilter %} + +{% filter indent(width=4) %} +{% include "ocean_history_mem_monthly.yaml.j2" %} +{% endfilter %} + +# Archive the first 41 days daily ocean history files +{% filter indent(width=4) %} +{% include "ocean_history_mem_daily.yaml.j2" %} +{% endfilter %} + +{% filter indent(width=4) %} +{% include "ice_history_mem_monthly.yaml.j2" %} +{% endfilter %} + +# Archive the first 41 days daily ice history files +{% filter indent(width=4) %} +{% include "ice_history_mem_daily.yaml.j2" %} +{% endfilter %} + +{% filter indent(width=4) %} +{% include "namelists.yaml.j2" %} +{% endfilter %} diff --git a/parm/archive/namelists.yaml.j2 b/parm/archive/namelists.yaml.j2 new file mode 100644 index 00000000000..220fd50570d --- /dev/null +++ b/parm/archive/namelists.yaml.j2 @@ -0,0 +1,18 @@ +namelists: + name: "NAMELISTS" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/namelists.tar" + required: + - '{{ COMIN_CONF | relpath(ROTDIR) }}/ufs.*' + + {% for mem in range(1, NMEM_ENS + 1) %} + {% set mem_char = 'mem%03d' | format(mem) %} + {% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} + {% set COMIN_CONF = COM_CONF_TMPL | replace_tmpl(tmpl_dict) %} + - '{{ COMIN_CONF | relpath(ROTDIR) }}/ufs.*' + {% endfor %} + + diff --git a/parm/archive/ocean_history_mem.yaml.j2 b/parm/archive/ocean_history_mem.yaml.j2 new file mode 100644 index 00000000000..92f9b2cf514 --- /dev/null +++ b/parm/archive/ocean_history_mem.yaml.j2 @@ -0,0 +1,17 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".ocean.t" ~ cycle_HH ~ "z." %} +{% for mem in range(0, NMEM_ENS + 1) %} +{% set mem_char = 'mem%03d' | format(mem) %} +{% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} +ocean_history_{{ mem_char }}: + name: "OCEAN_HISTORY_{{ mem_char }}" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/ocean_history_{{ mem_char }}.tar" + required: + {% set COMIN_OCEAN_HISTORY = COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_OCEAN_HISTORY | relpath(ROTDIR) }}/{{ head }}*.nc" +{% endfor %} + diff --git a/parm/archive/ocean_history_mem_daily.yaml.j2 b/parm/archive/ocean_history_mem_daily.yaml.j2 new file mode 100644 index 00000000000..a0a1852567b --- /dev/null +++ b/parm/archive/ocean_history_mem_daily.yaml.j2 @@ -0,0 +1,17 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".ocean.t" ~ cycle_HH ~ "z.24hr_avg.f???" %} +{% for mem in range(0, NMEM_ENS + 1) %} +{% set mem_char = 'mem%03d' | format(mem) %} +{% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} +ocean_history_daily_{{ mem_char }}: + name: "OCEAN_HISTORY_DAILY_{{ mem_char }}" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/ocean_history_daily_{{ mem_char }}.tar" + required: + {% set COMIN_OCEAN_HISTORY = COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_OCEAN_HISTORY | relpath(ROTDIR) }}/{{ head }}.nc" +{% endfor %} + diff --git a/parm/archive/ocean_history_mem_monthly.yaml.j2 b/parm/archive/ocean_history_mem_monthly.yaml.j2 new file mode 100644 index 00000000000..af85545de4a --- /dev/null +++ b/parm/archive/ocean_history_mem_monthly.yaml.j2 @@ -0,0 +1,17 @@ +{% set cycle_YMDH = current_cycle | to_YMDH %} +{% set head = RUN ~ ".ocean.t??????????.monthly_avg." %} +{% for mem in range(0, NMEM_ENS + 1) %} +{% set mem_char = 'mem%03d' | format(mem) %} +{% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': mem_char }) %} +ocean_history_monthly_{{ mem_char }}: + name: "OCEAN_HISTORY_MONTHLY_{{ mem_char }}" + target: "{{ ATARDIR }}/{{ cycle_YMDH }}/ocean_history_monthly_{{ mem_char }}.tar" + required: + {% set COMIN_OCEAN_HISTORY = COM_OCEAN_HISTORY_TMPL | replace_tmpl(tmpl_dict) %} + - "{{ COMIN_OCEAN_HISTORY | relpath(ROTDIR) }}/{{ head }}*.nc" +{% endfor %} + diff --git a/parm/stage/master_sfs.yaml.j2 b/parm/stage/master_sfs.yaml.j2 new file mode 100644 index 00000000000..487cf8fb1cd --- /dev/null +++ b/parm/stage/master_sfs.yaml.j2 @@ -0,0 +1,158 @@ +################################################################### +# This is the master yaml for the GEFS +# +# Cycle, member, and RUN settings are set before including each +# component yaml based on DO switches +# +# The included yamls are intended to be of the following structure: +# key1: +# mkdir: +# - "COM directory to create" +# copy: +# - ["source_file", "destination_file"] +# link_req: +# - ["target", "link_name"] +# key2: +# mkdir: +# - "COM directory to create" +# copy: +# - ["source_file", "destination_file"] +# link_req: +# - ["target", "link_name"] +# +# Any number of keys with nested mkdir, copy, and link are permitted +# Jinja is permitted in this yaml, as long as the keys are: +# - COMOUT_ +# - DO_ATM, DO_OCN, DO_ICE, etc. +# For a full list see scripts/exglobal_stage_ic.py +################################################################### + +# Set cycle variables +# ------------------------ +{% set half_window = assim_freq // 2 %} +{% set half_window_begin = (-half_window | string + "H") | to_timedelta %} +{% set half_window_end = (half_window | string + "H") | to_timedelta %} +{% if DOIAU and MODE == "cycled" %} + {% set model_start_date_current_cycle = current_cycle | add_to_datetime(half_window_begin) %} +{% else %} + {% if REPLAY_ICS %} + {% set model_start_date_current_cycle = current_cycle | add_to_datetime(half_window_end) %} + {% else %} + {% set model_start_date_current_cycle = current_cycle %} + {% endif %} +{% endif %} + +{% set current_cycle_YMD = current_cycle | to_YMD %} +{% set current_cycle_HH = current_cycle | strftime("%H") %} +{% set previous_cycle_YMD = previous_cycle | to_YMD %} +{% set previous_cycle_HH = previous_cycle | strftime("%H") %} +{% set p_prefix = previous_cycle | strftime("%Y%m%d.%H0000") %} +{% set m_prefix = model_start_date_current_cycle | strftime("%Y%m%d.%H0000") %} + +# Set first/last mem for loop +# --------------------------- +{% set first_mem = 0 %} +{% set last_mem = NMEM_ENS %} + +# Declare to-be-filled lists of member COM directories +# ---------------------------------------------------- +{% set COMOUT_ATMOS_INPUT_MEM_list = [] %} +{% set COMOUT_ATMOS_RESTART_PREV_MEM_list = [] %} +{% set COMOUT_ATMOS_ANALYSIS_MEM_list = [] %} +{% set COMOUT_ICE_ANALYSIS_MEM_list = [] %} +{% set COMOUT_ICE_RESTART_PREV_MEM_list = [] %} +{% set COMOUT_OCEAN_RESTART_PREV_MEM_list = [] %} +{% set COMOUT_OCEAN_ANALYSIS_MEM_list = [] %} +{% set COMOUT_MED_RESTART_PREV_MEM_list = [] %} +{% set COMOUT_WAVE_RESTART_PREV_MEM_list = [] %} + +# Construct member COM directory lists +# ------------------------------------ +{% for mem in range(first_mem, last_mem + 1) %} + + {% set current_cycle_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':current_cycle_YMD, + '${HH}':current_cycle_HH, + '${MEMDIR}': 'mem%03d' | format(mem) }) %} + {% set previous_cycle_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':previous_cycle_YMD, + '${HH}':previous_cycle_HH, + '${MEMDIR}': 'mem%03d' | format(mem) }) %} + + {% set COMOUT_ATMOS_INPUT_MEM = COM_ATMOS_INPUT_TMPL | replace_tmpl(current_cycle_dict) %} + {% set COMOUT_ATMOS_RESTART_PREV_MEM = COM_ATMOS_RESTART_TMPL | replace_tmpl(previous_cycle_dict) %} + {% set COMOUT_ATMOS_ANALYSIS_MEM = COM_ATMOS_ANALYSIS_TMPL | replace_tmpl(current_cycle_dict) %} + {% set COMOUT_ICE_ANALYSIS_MEM = COM_ICE_ANALYSIS_TMPL | replace_tmpl(current_cycle_dict) %} + {% set COMOUT_ICE_RESTART_PREV_MEM = COM_ICE_RESTART_TMPL | replace_tmpl(previous_cycle_dict) %} + {% set COMOUT_OCEAN_RESTART_PREV_MEM = COM_OCEAN_RESTART_TMPL | replace_tmpl(previous_cycle_dict) %} + {% set COMOUT_OCEAN_ANALYSIS_MEM = COM_OCEAN_ANALYSIS_TMPL | replace_tmpl(current_cycle_dict) %} + {% set COMOUT_MED_RESTART_PREV_MEM = COM_MED_RESTART_TMPL | replace_tmpl(previous_cycle_dict) %} + {% set COMOUT_WAVE_RESTART_PREV_MEM = COM_WAVE_RESTART_TMPL | replace_tmpl(previous_cycle_dict) %} + + # Append the member COM directories + {% do COMOUT_ATMOS_INPUT_MEM_list.append(COMOUT_ATMOS_INPUT_MEM)%} + {% do COMOUT_ATMOS_RESTART_PREV_MEM_list.append(COMOUT_ATMOS_RESTART_PREV_MEM)%} + {% do COMOUT_ATMOS_ANALYSIS_MEM_list.append(COMOUT_ATMOS_ANALYSIS_MEM)%} + {% do COMOUT_ICE_ANALYSIS_MEM_list.append(COMOUT_ICE_ANALYSIS_MEM)%} + {% do COMOUT_ICE_RESTART_PREV_MEM_list.append(COMOUT_ICE_RESTART_PREV_MEM)%} + {% do COMOUT_OCEAN_RESTART_PREV_MEM_list.append(COMOUT_OCEAN_RESTART_PREV_MEM)%} + {% do COMOUT_OCEAN_ANALYSIS_MEM_list.append(COMOUT_OCEAN_ANALYSIS_MEM)%} + {% do COMOUT_MED_RESTART_PREV_MEM_list.append(COMOUT_MED_RESTART_PREV_MEM)%} + {% do COMOUT_WAVE_RESTART_PREV_MEM_list.append(COMOUT_WAVE_RESTART_PREV_MEM)%} + +{% endfor %} + +################################################################### +# Initial condition to stage - include components based on switches +################################################################### + +{% if EXP_WARM_START %} +{% filter indent(width=4) %} +{% include "atmosphere_warm.yaml.j2" %} +{% endfilter %} +{% else %} # cold start +{% filter indent(width=4) %} +{% include "atmosphere_cold.yaml.j2" %} +{% endfilter %} +{% endif %} + +{% if USE_ATM_ENS_PERTURB_FILES %} +{% filter indent(width=4) %} +{% include "atmosphere_ens_perturbations.yaml.j2" %} +{% endfilter %} +{% endif %} + +{% if DO_ICE %} +{% filter indent(width=4) %} +{% include "ice.yaml.j2" %} +{% endfilter %} +{% endif %} + +{% if DO_OCN %} +{% filter indent(width=4) %} +{% include "ocean.yaml.j2" %} +{% endfilter %} +{% if DO_JEDIOCNVAR %} +{% filter indent(width=4) %} +{% include "ocean_rerun.yaml.j2" %} +{% endfilter %} +{% endif %} +{% if USE_OCN_ENS_PERTURB_FILES %} +{% filter indent(width=4) %} +{% include "ocean_ens_perturbations.yaml.j2" %} +{% endfilter %} +{% endif %} +{% if EXP_WARM_START %} +{% filter indent(width=4) %} +{% include "ocean_mediator.yaml.j2" %} +{% endfilter %} +{% endif %} +{% endif %} # DO_OCN + +{% if DO_WAVE %} +{% filter indent(width=4) %} +{% include "wave.yaml.j2" %} +{% endfilter %} +{% endif %} diff --git a/parm/stage/ocean.yaml.j2 b/parm/stage/ocean.yaml.j2 index 135d5056bc4..30695241ec9 100644 --- a/parm/stage/ocean.yaml.j2 +++ b/parm/stage/ocean.yaml.j2 @@ -10,7 +10,7 @@ ocean: {% set imem = mem - first_mem %} {% set COMOUT_OCEAN_RESTART_PREV_MEM = COMOUT_OCEAN_RESTART_PREV_MEM_list[imem] %} - ["{{ ICSDIR }}/{{ COMOUT_OCEAN_RESTART_PREV_MEM | relpath(ROTDIR) }}/{{ m_prefix }}.MOM.res.nc", "{{ COMOUT_OCEAN_RESTART_PREV_MEM }}"] - {% if OCNRES == "025" %} + {% if OCNRES == "025" and not MOM6_INTERP_ICS %} {% for nn in range(1, 4) %} - ["{{ ICSDIR }}/{{ COMOUT_OCEAN_RESTART_PREV_MEM | relpath(ROTDIR) }}/{{ m_prefix }}.MOM.res_{{ nn }}.nc", "{{ COMOUT_OCEAN_RESTART_PREV_MEM }}"] {% endfor %} diff --git a/parm/ufs/fv3/diag_table_sfs b/parm/ufs/fv3/diag_table_sfs new file mode 100644 index 00000000000..ca81a6bff33 --- /dev/null +++ b/parm/ufs/fv3/diag_table_sfs @@ -0,0 +1,307 @@ +"fv3_history", 0, "hours", 1, "hours", "time" +"fv3_history2d", 0, "hours", 1, "hours", "time" +"@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", @[FHOUT_OCN], "hours", 1, "hours", "time", @[FHOUT_OCN], "hours", "@[SYEAR] @[SMONTH] @[SDAY] @[CHOUR] 0 0" +"@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", @[FHOUT_OCN], "hours", 1, "hours", "time", 1, "days", "@[SYEAR] @[SMONTH] @[SDAY] @[CHOUR] 0 0" + +############## +# Ocean fields +############## +# static fields +"ocean_model", "geolon", "geolon", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat", "geolat", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolon_c", "geolon_c", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat_c", "geolat_c", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolon_u", "geolon_u", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat_u", "geolat_u", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolon_v", "geolon_v", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat_v", "geolat_v", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +#"ocean_model", "depth_ocean", "depth_ocean", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +#"ocean_model", "wet", "wet", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "wet_c", "wet_c", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "wet_u", "wet_u", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "wet_v", "wet_v", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "sin_rot", "sin_rot", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "cos_rot", "cos_rot", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + +# ocean output TSUV and others +"ocean_model", "SSH", "SSH", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SST", "SST", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SSS", "SSS", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "speed", "speed", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SSU", "SSU", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SSV", "SSV", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +#"ocean_model", "frazil", "frazil", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +#"ocean_model", "ePBL_h_ML", "ePBL", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "MLD_003", "MLD_003", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "MLD_0125", "MLD_0125", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "tob", "tob", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 + +# Z-Space Fields Provided for CMIP6 (CMOR Names): +"ocean_model_z", "uo", "uo", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model_z", "vo", "vo", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model_z", "so", "so", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model_z", "temp", "temp", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 + +# forcing +"ocean_model", "taux", "taux", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "tauy", "tauy", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "latent", "latent", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "sensible", "sensible", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "SW", "SW", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "LW", "LW", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "evap", "evap", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "lprec", "lprec", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "lrunoff", "lrunoff", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "frunoff", "frunoff", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "fprec", "fprec", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "LwLatSens", "LwLatSens", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "Heat_PmE", "Heat_PmE", "@[MOM6_OUTPUT_DIR]/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + +# scalar fields +"ocean_model", "masso", "masso", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean masscello +"ocean_model", "thetaoga", "thetaoga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean theta +"ocean_model", "soga", "soga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean salinity +"ocean_model", "tosga", "tosga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # area mean SST +"ocean_model", "sosga", "sosga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # area mean SSS +"ocean_model", "volo", "volo", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # ocean volume +"ocean_model", "ssh_ga", "ssh_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean ssh +"ocean_model", "prcme_ga", "prcme_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean prcme +"ocean_model", "precip_ga", "precip_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean precip +"ocean_model", "evap_ga", "evap_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean evaporation +"ocean_model", "net_heat_coupler_ga", "net_heat_coupler_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean net heat coupler +"ocean_model", "net_heat_surface_ga", "net_heat_surface_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean net heat surface +"ocean_model", "sens_ga", "sens_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean sensible heat +"ocean_model", "LwLatSens_ga", "LwLatSens_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean LW + latent + sensible +"ocean_model", "sw_ga", "sw_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean SW +"ocean_model", "lw_ga", "lw_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean LW +"ocean_model", "lat_ga", "lat_ga", "@[MOM6_OUTPUT_DIR]/ocn_scalar%4yr%2mo%2dy%2hr", "all", .true., "none",2 # global mean latent + + +################### +# Atmosphere fields +################### +"gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "sphum", "spfh", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "temp", "tmp", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "liq_wat", "clwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_wat", "icmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "snowwat", "snmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rainwat", "rwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "graupel", "grle", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_nc", "nccice", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rain_nc", "nconrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "cld_amt", "cld_amt", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delp", "dpres", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delz", "delz", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "pfhy", "preshy", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "pfnh", "presnh", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "w", "dzdt", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "omga", "omga", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ps", "pressfc", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "hs", "hgtsfc", "fv3_history", "all", .false., "none", 2 +"gfs_phys", "refl_10cm", "refl_10cm", "fv3_history", "all", .false., "none", 2 + +"gfs_phys", "cldfra", "cldfra", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frzr", "frzr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frzrb", "frzrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozr", "frozr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozrb", "frozrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowp", "tsnowp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowpb", "tsnowpb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "rhonewsn", "rhonewsn", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ALBDO_ave", "albdo_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcp_ave", "cprat_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcpb_ave", "cpratb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcp_ave", "prate_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcpb_ave", "prateb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRF", "dlwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRFI", "dlwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRF", "ulwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFI", "ulwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRF", "dswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFI", "dswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRF", "uswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFI", "uswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFtoa", "dswrf_avetoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFtoa", "uswrf_avetoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFtoa", "ulwrf_avetoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gflux_ave", "gflux_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hpbl", "hpbl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl_ave", "lhtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl_ave", "shtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pwat", "pwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "soilm", "soilm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_aveclm", "tcdc_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avebndcl", "tcdc_avebndcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avelcl", "tcdc_avelcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avemcl", "tcdc_avemcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avehcl", "tcdc_avehcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDCcnvcl", "tcdccnvcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelct", "pres_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelcb", "pres_avelcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemct", "pres_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemcb", "pres_avemcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehct", "pres_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehcb", "pres_avehcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclt", "prescnvclt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclb", "prescnvclb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avehct", "tmp_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avemct", "tmp_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avelct", "tmp_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u-gwd_ave", "u-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v-gwd_ave", "v-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dusfc", "uflx_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dvsfc", "vflx_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "acond", "acond", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cduvb_ave", "cduvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cpofp", "cpofp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "duvb_ave", "duvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdlf_ave", "csdlf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_ave", "csusf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_avetoa", "csusftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdsf_ave", "csdsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_ave", "csulf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_avetoa", "csulftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cwork_ave", "cwork_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evbs_ave", "evbs_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evcw_ave", "evcw_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "fldcp", "fldcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hgt_hyblev1", "hgt_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfh_hyblev1", "spfh_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ugrd_hyblev1", "ugrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vgrd_hyblev1", "vgrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmp_hyblev1", "tmp_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gfluxi", "gflux", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl", "lhtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl", "shtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr", "pevpr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr_ave", "pevpr_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sbsno_ave", "sbsno_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sfexc", "sfexc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snohf", "snohf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snowc_ave", "snowc_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmax2m", "spfhmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmin2m", "spfhmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmax2m", "tmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmin2m", "tmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ssrun_acc", "ssrun_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sunsd_acc", "sunsd_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "watr_acc", "watr_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "wilt", "wilt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vbdsf_ave", "vbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vddsf_ave", "vddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nbdsf_ave", "nbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nddsf_ave", "nddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "trans_ave", "trans_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "psurf", "pressfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u10m", "ugrd10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v10m", "vgrd10m", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "wind10mmax", "wind10m_max", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u10mmax", "u10m_max", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v10mmax", "v10m_max", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pahi", "pahi", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pah_ave", "pah_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ecan_acc", "ecan_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "etran_acc", "etran_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "edir_acc", "edir_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "wa_acc", "wa_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "lfrac", "lfrac", "fv3_history2d", "all", .false., "none", 2 + +"gfs_sfc", "crain", "crain", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tprcp", "tprcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "rainc", "cnvprcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hgtsfc", "orog", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "weasd", "weasd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "f10m", "f10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "q2m", "spfh2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "t2m", "tmp2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tsfc", "tmpsfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vtype", "vtype", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "stype", "sotyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slmsksfc", "land", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vfracsfc", "veg", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "zorlsfc", "sfcr", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "uustar", "fricv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt1", "soilt1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt2", "soilt2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt3", "soilt3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt4", "soilt4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw1", "soilw1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw2", "soilw2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw3", "soilw3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw4", "soilw4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_1", "soill1", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_2", "soill2", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_3", "soill3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_4", "soill4", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slope", "sltyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnsf", "alnsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnwf", "alnwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvsf", "alvsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvwf", "alvwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "canopy", "cnwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facsf", "facsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facwf", "facwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffhh", "ffhh", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffmm", "ffmm", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "fice", "icec", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hice", "icetk", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snoalb", "snoalb", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmax", "shdmax", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmin", "shdmin", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snowd", "snod", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tg3", "tg3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tisfc", "tisfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tref", "tref", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "z_c", "zc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_0", "c0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_d", "cd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_0", "w0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_d", "wd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xt", "xt", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xz", "xz", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "dt_cool", "dtcool", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xs", "xs", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xu", "xu", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xv", "xv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xtts", "xtts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xzts", "xzts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "d_conv", "dconv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "qrain", "qrain", "fv3_history2d", "all", .false., "none", 2 + +#============================================================================================= +# +#====> This file can be used with diag_manager/v2.0a (or higher) <==== +# +# +# FORMATS FOR FILE ENTRIES (not all input values are used) +# ------------------------ +# +#"file_name", output_freq, "output_units", format, "time_units", "long_name", +# +# +#output_freq: > 0 output frequency in "output_units" +# = 0 output frequency every time step +# =-1 output frequency at end of run +# +#output_units = units used for output frequency +# (years, months, days, minutes, hours, seconds) +# +#time_units = units used to label the time axis +# (days, minutes, hours, seconds) +# +# +# FORMAT FOR FIELD ENTRIES (not all input values are used) +# ------------------------ +# +#"module_name", "field_name", "output_name", "file_name" "time_sampling", time_avg, "other_opts", packing +# +#time_avg = .true. or .false. +# +#packing = 1 double precision +# = 2 float +# = 4 packed 16-bit integers +# = 8 packed 1-byte (not tested?) diff --git a/scripts/exglobal_cleanup.sh b/scripts/exglobal_cleanup.sh index c460cc8282c..c007e46c76a 100755 --- a/scripts/exglobal_cleanup.sh +++ b/scripts/exglobal_cleanup.sh @@ -5,10 +5,12 @@ echo "Begin Cleanup ${DATAROOT}!" # Remove DATAoutput from the forecast model run # TODO: Handle this better -DATAfcst="${DATAROOT}/${RUN}fcst.${PDY:-}${cyc}" -if [[ -d "${DATAfcst}" ]]; then rm -rf "${DATAfcst}"; fi -#DATAefcs="${DATAROOT}/${RUN}efcs???${PDY:-}${cyc}" -rm -rf "${DATAROOT}/${RUN}efcs"*"${PDY:-}${cyc}" +if [[ "${KEEPDATA}" != "YES" ]]; then + DATAfcst="${DATAROOT}/${RUN}fcst.${PDY:-}${cyc}" + if [[ -d "${DATAfcst}" ]]; then rm -rf "${DATAfcst}"; fi + #DATAefcs="${DATAROOT}/${RUN}efcs???${PDY:-}${cyc}" + rm -rf "${DATAROOT}/${RUN}efcs"*"${PDY:-}${cyc}" +fi ############################################################### if [[ "${CLEANUP_COM:-YES}" == NO ]] ; then diff --git a/scripts/exglobal_stage_ic.py b/scripts/exglobal_stage_ic.py index 3aaafaa96fd..7aa4edb193e 100755 --- a/scripts/exglobal_stage_ic.py +++ b/scripts/exglobal_stage_ic.py @@ -24,7 +24,8 @@ def main(): 'OCNRES', 'waveGRD', 'ntiles', 'DOIAU', 'DO_JEDIOCNVAR', 'DO_STARTMEM_FROM_JEDIICE', 'REPLAY_ICS', 'DO_WAVE', 'DO_OCN', 'DO_ICE', 'DO_NEST', 'DO_CA', 'DO_AERO_ANL', - 'USE_ATM_ENS_PERTURB_FILES', 'USE_OCN_ENS_PERTURB_FILES', 'DO_GSISOILDA', 'DO_LAND_IAU'] + 'USE_ATM_ENS_PERTURB_FILES', 'USE_OCN_ENS_PERTURB_FILES', 'MOM6_INTERP_ICS', + 'DO_GSISOILDA', 'DO_LAND_IAU'] stage_dict = AttrDict() for key in keys: diff --git a/ush/forecast_det.sh b/ush/forecast_det.sh index 6fa1d127e6f..b1ade576e8f 100755 --- a/ush/forecast_det.sh +++ b/ush/forecast_det.sh @@ -120,6 +120,8 @@ UFS_det(){ exit 1 fi + NST_SPINUP=0 + nstf_name="${NST_MODEL},${NST_SPINUP},${NST_RESV},${ZSEA1},${ZSEA2}" warm_start=".true." echo "All restarts found for '${RERUN_DATE}', RERUN='${RERUN}', warm_start='${warm_start}'" break diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 8f3bd9a1307..1023c642e27 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -739,6 +739,20 @@ MOM6_out() { exit 25 ;; esac + + # Do Monthly Average ocean output and move to output ocean history directory (valid up to 12 month forecasts only) + if [[ "${RUN}" == sfs ]]; then + local last_fh_output files f_name + last_fh_output=$(ls -f "${COMOUT_OCEAN_HISTORY}/${RUN}.ocean.t${cyc}z.${FHOUT_OCN}hr_avg.f${FHMAX_GFS}.nc" ) + if [[ -f ${last_fh_output} ]]; then + files=$(ls -f "${DATAoutput}/MOM6_OUTPUT/ocn_????_??_28_12.nc" ) + for f in ${files}; do + f_name=$( basename "${f}" ) + cdo mergetime "${DATAoutput}/MOM6_OUTPUT/ocn_${f_name:4:4}_${f_name:9:2}_??_12.nc" "${DATAoutput}/MOM6_OUTPUT/ocn_${f_name:4:4}_${f_name:9:2}_dailymean.nc" + cdo monavg "${DATAoutput}/MOM6_OUTPUT/ocn_${f_name:4:4}_${f_name:9:2}_dailymean.nc" "${COMOUT_OCEAN_HISTORY}/${RUN}.ocean.t${current_cycle}.monthly_avg.${f_name:4:4}-${f_name:9:2}.nc" + done + fi + fi } CICE_postdet() { @@ -854,6 +868,18 @@ CICE_out() { exit 25 ;; esac + # Copy the Monthly Average output from SFS + if [[ "${RUN}" == sfs ]]; then + local last_fh_output files f_name + last_fh_output=$( ls -f "${COMOUT_ICE_HISTORY}/${RUN}.ice.t${cyc}z.${FHOUT_ICE}hr_avg.f${FHMAX_GFS}.nc" ) + if [[ -f ${last_fh_output} ]]; then + files=$(ls -f "${DATAoutput}/CICE_OUTPUT/iceh_24h.????_??_28_12.nc" ) + for f in ${files}; do + f_name=$( basename "${f}" ) + ncra "${DATAoutput}/CICE_OUTPUT/iceh_24h.${f_name:9:4}_${f_name:14:2}_??_12.nc" "${COMOUT_ICE_HISTORY}/${RUN}.ice.t${current_cycle}.monthly_avg.${f_name:9:4}-${f_name:14:2}.nc" + done + fi + fi } GOCART_rc() { diff --git a/ush/parsing_namelists_CICE.sh b/ush/parsing_namelists_CICE.sh index b2b0a97aca3..2b657a853b6 100755 --- a/ush/parsing_namelists_CICE.sh +++ b/ush/parsing_namelists_CICE.sh @@ -124,7 +124,7 @@ local CICE_NPROC=${ntasks_cice6} local CICE_BLCKX=${block_size_x} local CICE_BLCKY=${block_size_y} local CICE_DECOMP=${processor_shape} -# ice_prescribed_nml section +# ice_prescribed_nml section local CICE_PRESCRIBED="false" local MESH_DICE="none" local stream_files_dice="none"