Skip to content
Closed
Show file tree
Hide file tree
Changes from 47 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
ab64d56
changes to support SFS REPLAY and CPC ICs at C192mx025 and C96mx100
NeilBarton-NOAA May 28, 2025
e7411e2
add ocean scalar data
NeilBarton-NOAA May 29, 2025
fe6f07f
fix diag_table bug
NeilBarton-NOAA May 30, 2025
5553a19
pointint to wrong yaml file
NeilBarton-NOAA May 30, 2025
3a2b914
bug in stage ocn ICs
NeilBarton-NOAA May 30, 2025
a1e4a12
changing of PEs for forecasts
NeilBarton-NOAA Jun 3, 2025
e5a15b3
updates for testing
NeilBarton-NOAA Jun 11, 2025
5186214
add arch_tars task
NeilBarton-NOAA Jun 18, 2025
67d7e42
add arch_tar task for sfs application
NeilBarton-NOAA Jun 18, 2025
ac2a111
add master_sfs yaml file for archiving
NeilBarton-NOAA Jun 18, 2025
e93f328
Merge remote-tracking branch 'origin/develop' into sfs_ICS
NeilBarton-NOAA Jun 23, 2025
7ad6aba
add archive of namelist files
NeilBarton-NOAA Jun 23, 2025
7d7034c
update yaml files for year runs
NeilBarton-NOAA Jun 24, 2025
ee3a487
change to NST to not need to spin up on restart
NeilBarton-NOAA Jun 26, 2025
1046d0d
updated location out of MOM if block
NeilBarton-NOAA Jun 26, 2025
ce116e4
Merge branch 'NOAA-EMC:develop' into sfs_ICS
NeilBarton-NOAA Jun 26, 2025
22d9ea0
IC dir
NeilBarton-NOAA Jun 26, 2025
565f91a
Merge branch 'sfs_ICS' of https://github.com/NeilBarton-NOAA/global-w…
NeilBarton-NOAA Jun 26, 2025
3e1c632
changes not needed for merge to dev
NeilBarton-NOAA Jun 26, 2025
753a435
fix shell script error
NeilBarton-NOAA Jun 26, 2025
cdb98b8
diag_table_sfs added
NeilBarton-NOAA Jun 27, 2025
7e852fd
updates to archive yaml files to archive per member
NeilBarton-NOAA Jul 22, 2025
0b9492c
change name of file
NeilBarton-NOAA Jul 31, 2025
42c5adb
updates for globus-hpss
NeilBarton-NOAA Aug 5, 2025
544d2f4
updates for net
NeilBarton-NOAA Aug 6, 2025
68ef6ac
Merge branch 'sfs_ICS' of https://github.com/NeilBarton-NOAA/global-w…
NeilBarton-NOAA Aug 6, 2025
d324b17
Merge branch 'develop' into sfs_ICS
NeilBarton-NOAA Aug 6, 2025
c278265
fix pycodestyle errors
NeilBarton-NOAA Aug 6, 2025
887ea92
for PR
NeilBarton-NOAA Aug 6, 2025
381bd2a
correct FHMAX
NeilBarton-NOAA Aug 6, 2025
1fbe8fe
remove NPB debuging flags
NeilBarton-NOAA Aug 6, 2025
6894d8c
Update dev/parm/config/gfs/config.ocn.j2
NeilBarton-NOAA Aug 18, 2025
3ce6221
Update dev/parm/config/sfs/config.nsst.j2
NeilBarton-NOAA Aug 18, 2025
d3cc321
add CICE monthly history output
NeilBarton-NOAA Aug 20, 2025
366107f
Merge branch 'sfs_ICS' of https://github.com/NeilBarton-NOAA/global-w…
NeilBarton-NOAA Aug 20, 2025
6c2f520
Merge branch 'develop' of https://github.com/NeilBarton-NOAA/global-w…
NeilBarton-NOAA Sep 5, 2025
3443cd4
Merge branch 'NOAA-EMC:develop' into sfs_ICS
NeilBarton-NOAA Sep 11, 2025
4aa33da
fixes bash and stage_ic
NeilBarton-NOAA Sep 11, 2025
73fb832
bash fixes
NeilBarton-NOAA Sep 11, 2025
79bc39a
bash edits
NeilBarton-NOAA Sep 11, 2025
9ee4c55
edits for monthly MOM6 output
NeilBarton-NOAA Sep 24, 2025
c61bd77
Merge remote-tracking branch 'origin/develop' into sfs_ICS
NeilBarton-NOAA Sep 24, 2025
4631e2e
Merge branch 'NOAA-EMC:develop' into sfs_ICS
NeilBarton-NOAA Oct 7, 2025
df400cc
updates for monthly ocean and ice history
NeilBarton-NOAA Oct 8, 2025
c0162ba
Merge branch 'develop' into sfs_ICS
NeilBarton-NOAA Oct 8, 2025
6336cc5
shell check
NeilBarton-NOAA Oct 8, 2025
9c5e6ef
Merge branch 'sfs_ICS' of github.com:NeilBarton-NOAA/global-workflow …
NeilBarton-NOAA Oct 8, 2025
95c3caf
shell check fixes
NeilBarton-NOAA Oct 8, 2025
5e65b87
fix bash check
NeilBarton-NOAA Oct 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions dev/ci/cases/sfs/C192mx025_S2S_CPC_ICS.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
experiment:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Neil, These new case files look strong (along with their overwriting defaults). Do you have these sfs cases tested in automated scripts yet?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TerrenceMcGuinness-NOAA we've been using these edits for testing SFS and will be automated for the reforecasting effort.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What framework will you be using for automation? global-workflow is currently developing framework in VLab's GitLab that uses these case files.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TerrenceMcGuinness-NOAA I'm not sure if this answers your question, but to run the full set of SFS runs, which is currently November 1st and May 1st start dates, we add

${YEAR}${MONTH}010000 ${YEAR}${MONTH}010000 24:00:00

to the rocoto .xml file before the rocoto run as rocoto does not support (to my knowledge) starting once a month on the first.

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
24 changes: 24 additions & 0 deletions dev/ci/cases/sfs/C192mx025_S2S_REPLAY_ICS.yaml
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 24 additions & 0 deletions dev/ci/cases/sfs/C96mx100_S2S_REPLAY_ICS.yaml
Original file line number Diff line number Diff line change
@@ -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
10 changes: 0 additions & 10 deletions dev/ci/cases/yamls/sfs_full.yaml

This file was deleted.

10 changes: 10 additions & 0 deletions dev/ci/cases/yamls/sfs_full_C192mx025_CPC_ICS.yaml
Original file line number Diff line number Diff line change
@@ -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

7 changes: 7 additions & 0 deletions dev/ci/cases/yamls/sfs_full_C192mx025_REPLAY_ICS.yaml
Original file line number Diff line number Diff line change
@@ -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"
9 changes: 9 additions & 0 deletions dev/ci/cases/yamls/sfs_full_C96mx100_CPC_ICS.yaml
Original file line number Diff line number Diff line change
@@ -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
7 changes: 7 additions & 0 deletions dev/ci/cases/yamls/sfs_full_C96mx100_REPLAY_ICS.yaml
Original file line number Diff line number Diff line change
@@ -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"
16 changes: 10 additions & 6 deletions dev/parm/config/gefs/config.ufs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -430,7 +430,11 @@ if [[ "${skip_cice6}" == "false" ]]; then
cice6_processor_shape="slenderX2"
;;
"025")
ntasks_cice6=120
if [[ "${fv3_res}" == "C192" ]]; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this dependent on fv3_res or CASE?

ntasks_cice6=90
else
ntasks_cice6=120
fi
cice6_processor_shape="slenderX2"
;;
*)
Expand Down
2 changes: 1 addition & 1 deletion dev/parm/config/gfs/config.globus
Original file line number Diff line number Diff line change
Expand Up @@ -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}"

Expand Down
2 changes: 1 addition & 1 deletion dev/parm/config/gfs/config.ocn.j2
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}"
Comment thread
NeilBarton-NOAA marked this conversation as resolved.
if [[ "${MOM6_INTERP_ICS}" == "YES" ]]; then
export MOM6_RESTART_SETTING='n'
export MOM6_WARMSTART_FILE="MOM.res.nc"
Expand Down
7 changes: 4 additions & 3 deletions dev/parm/config/sfs/config.base.j2
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion dev/parm/config/sfs/config.efcs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 2 additions & 0 deletions dev/parm/config/sfs/config.fcst.j2
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion dev/parm/config/sfs/config.nsst

This file was deleted.

32 changes: 32 additions & 0 deletions dev/parm/config/sfs/config.nsst.j2
Original file line number Diff line number Diff line change
@@ -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"
9 changes: 9 additions & 0 deletions dev/parm/config/sfs/config.resources
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 5 additions & 2 deletions dev/parm/config/sfs/yaml/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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: {}
8 changes: 7 additions & 1 deletion dev/workflow/applications/sfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -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']

Expand Down Expand Up @@ -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}
2 changes: 1 addition & 1 deletion dev/workflow/hosts/hercules.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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}'
Expand Down
31 changes: 31 additions & 0 deletions dev/workflow/rocoto/sfs_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 = []
Expand All @@ -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'
Expand Down
2 changes: 1 addition & 1 deletion jobs/JGLOBAL_STAGE_IC
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Loading
Loading