jgfs_wave_postsbs_master ecf (v17) Analysis - TerrenceMcGuinness-NOAA/global-workflow GitHub Wiki

jgfs_wave_postsbs_master.ecf (GFS v17)

Branch / tenant: dev/gfs.v17 (gw_v17) Path: ecf/scripts/gfs/product/wave/gridded/jgfs_wave_post_gridded_master.ecf Note: Renamed from jgfs_wave_postsbs_master.ecf in v17. The Rocoto breadcrumb still references wavepostsbs.sh. Analysis date: 2026-06-11 Method: AWS Bedrock AgentCore agentcore-mcp-rag MCP cross-checked against the on-disk v17 worktree.


Summary

jgfs_wave_postsbs_master.ecf (renamed to jgfs_wave_post_gridded_master.ecf in v17) is the NCO production ecFlow task template that performs wave model post-processing — converting WaveWatch III native output into standard gridded GRIB2 products for each forecast hour. It is a _master template deployed per forecast hour. At runtime it calls JGLOBAL_WAVE_POST_GRIDDED, which drives exglobal_wave_post_gridded.sh.


1. The script itself

#PBS -S /bin/bash
#PBS -N gfs_wave_post_gridded_%CYC%_f%FHR%
#PBS -j oe
#PBS -q %QUEUE%
#PBS -A %PROJ%-%PROJENVIR%
#PBS -l walltime=01:30:00
#PBS -l select=1:mpiprocs=128:ompthreads=1:ncpus=128:mem=20GB
#PBS -l place=vscatter:shared
#PBS -l debug=true

model=gfs
export cyc="%CYC%"
%include <head.h>
%include <envir-p1.h>

############################################################
# Load modules
############################################################
source ${HOMEgfs}/dev/ush/load_modules.sh ufswm

module list
export WGF="%WGF%"
export FHR="%FHR%"
export FHR_LIST="%FHR_LIST%"
export FORECAST_HOUR="${FHR_LIST}"
############################################################
# CALL executable job script here
############################################################
export CDATE=${PDY}${cyc}
export HOMEglobal=${HOMEgfs}

#### ${HOMEgfs}/dev/job_cards/rocoto/wavepostsbs.sh
${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_GRIDDED
if [ $? -ne 0 ]; then
   ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***"
   ecflow_client --abort
   exit
fi

%include <tail.h>
%manual

%end

What each part does

Section Role
#PBS directives PBS Pro: 1 node, 128 mpiprocs/cpus, 20 GB, 1.5-hour wall. Heavy compute for WW3 output regridding/interpolation.
load_modules.sh ufswm Loads the UFS Weather Model modules (needed for wave post tools that link against WW3 libraries).
WGF, FHR, FHR_LIST, FORECAST_HOUR ecFlow placeholders.
${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_GRIDDED The J-Job.

2. Why "_master" — the template mechanism

Single .ecf backs per-forecast-hour tasks (jgfs_wave_post_gridded_f000.ecf, jgfs_wave_post_gridded_f003.ecf, etc.).


3. Execution chain

ecf/defs/gfs_prod.def : task jgfs_wave_post_gridded_fNNN
  +-- jgfs_wave_post_gridded_master.ecf           (PBS submit; deployed as *_fNNN.ecf)
       +-- ${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_GRIDDED   (J-Job, shared GFS/GDAS/EnKF)
            +-- wave_domain_grid.sh                (sourced: grid config)
            +-- ${SCRglobal}/exglobal_wave_post_gridded.sh   (ex-script)
                 +-- ww3_ounf / ww3_grib (WW3 post tools)

4. What the J-Job actually produces

Converts WW3 native binary output from the forecast into standard gridded GRIB2 files:

Input Output Location
WW3 history files (COMIN_WAVE_HISTORY) Gridded GRIB2 per wave grid ${COMOUT_WAVE_GRID_${REGION}_${RES}}/

The J-Job iterates over wavepostGRD and waveinterpGRD grid lists, creating per-grid output directories and processing each grid via the ex-script.

Error handling

Uses the EE2-correct pattern: && true + err_exit.


5. Key environment variables

Variable Origin Meaning
WGF suite edit Wave component.
FHR / FORECAST_HOUR per-task edit Forecast hour.
wavepostGRD config.wavepostgridded Grid IDs for direct post-processing.
waveinterpGRD config.wavepostgridded Grid IDs requiring interpolation.
COMIN_WAVE_INIT J-Job (declare -rx) Wave initialization files (mod_def).
COMIN_WAVE_HISTORY J-Job (declare -rx) Wave model history output.
COMOUT_WAVE_GRID J-Job (declare -rx) Base output directory.
COMOUT_WAVE_GRID_* J-Job (dynamic) Per-grid output directories.
ENSMEM env (optional) Ensemble member number (supports EnKF wave post).

Configuration

The J-Job sources jjob_header.sh -e "wavepostgridded" -c "base wave wavepostgridded", loading:

  • config.base — fundamental paths.
  • config.wave — wave model settings.
  • config.wavepostgridded — post grid lists and settings.

6. v17-specific notes

  • Renamed: postsbs -> post_gridded in v17 (the Rocoto breadcrumb retains the old wavepostsbs.sh name).
  • UFS modules: loads ufswm (not just run) because WW3 post tools link against the model libraries.
  • Shared J-Job: supports GFS, GDAS, and EnKF members via ENSMEM conditional.
  • Dynamic grid processing: uses wave_domain_grid.sh for grid resolution.
  • Heavy resources: 128 cpus, 20 GB for WW3 output processing.
  • _master template with per-hour deployment.
  • Centralized module loading via load_modules.sh ufswm.

7. Change-impact snapshot (from MCP, gw_v17)

Symbol Change type Risk Direct dependents
JGLOBAL_WAVE_POST_GRIDDED behavior LOW (0.10) 0 (per graph)
exglobal_wave_post_gridded.sh signature MEDIUM Shared across GFS/GDAS/EnKF
wave_domain_grid.sh behavior MEDIUM Shared across all wave jobs

Note: although the graph shows 0 dependents, the wave gridded output feeds into JGLOBAL_WAVE_GEMPAK and JGLOBAL_WAVE_PRDGEN_GRIDDED (AWIPS) downstream.


Sources

  • On-disk v17 worktree: ecf/scripts/gfs/product/wave/gridded/jgfs_wave_post_gridded_master.ecf, dev/jobs/JGLOBAL_WAVE_POST_GRIDDED.
  • agentcore-mcp-rag MCP (tenant gw_v17): get_change_impact.
⚠️ **GitHub.com Fallback** ⚠️