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

jgfs_atmos_npoess_pgrb2_0p5.ecf (GFS v17)

Branch / tenant: dev/gfs.v17 (gw_v17) Path: ecf/scripts/gfs/product/atmos/gempak/jgfs_atmos_npoess_pgrb2_0p5.ecf Analysis date: 2026-06-11 Method: AWS Bedrock AgentCore agentcore-mcp-rag MCP (graph traversal, GraphRAG, code-context) cross-checked against the on-disk v17 worktree.


Summary

jgfs_atmos_npoess_pgrb2_0p5.ecf is the NCO production ecFlow task that produces two product families from GFS output: (1) NPOESS 0.5-degree GRIB2 subsets for f000-f024, and (2) simulated GOES satellite imagery regridded to 0.25-degree and CONUS Lambert grids for f000-f180. Unlike the _master templates, this is a single-instance task (one per cycle, not per forecast hour) — it loops internally over all hours. It calls JGFS_ATMOS_PGRB2_SPEC_NPOESS, which drives exgfs_atmos_grib2_special_npoess.sh.


1. The script itself

#PBS -S /bin/bash
#PBS -N gfs_atmos_npoess_pgrb2_0p5_%CYC%
#PBS -j oe
#PBS -q %QUEUE%
#PBS -A %PROJ%-%PROJENVIR%
#PBS -l walltime=03:30:00
#PBS -l select=1:mpiprocs=1:ompthreads=1:ncpus=1:mem=3GB
#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 run

module list
############################################################
# CALL executable job script here
############################################################
export HOMEglobal=${HOMEgfs}
export CDATE=${PDY}${cyc}

#### ${HOMEgfs}/dev/job_cards/rocoto/npoess.sh
${HOMEgfs}/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS
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, 1 cpu, 3 GB, 3.5-hour wall — long-running because it loops over all forecast hours internally and waits for upstream products.
%include <head.h> / <envir-p1.h> NCO boilerplate.
load_modules.sh run v17 centralized module loading (general run set).
No WGF/FHR3/FHR_LIST exports This is not a _master template — it is a single task per cycle.
${HOMEgfs}/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS The J-Job. Non-zero exit triggers ecflow_client --abort.

2. Single-instance vs _master pattern

Unlike jgfs_atmos_gempak_master.ecf (one task per forecast hour), this script is a single ecFlow task per cycle (gfs_atmos_npoess_pgrb2_0p5_%CYC%). The internal forecast-hour loop runs from f000 to f024 (NPOESS) and f000 to f180 (GOES simulated), waiting for upstream GRIB products via wait_for_file.

The TODO comment in the J-Job notes: "This job is not part of the rocoto suite" — confirming it exists only in the NCO ecFlow path.


3. Execution chain

ecf/defs/gfs_prod.def : task jgfs_atmos_npoess_pgrb2_0p5
  +-- jgfs_atmos_npoess_pgrb2_0p5.ecf              (PBS submit)
       +-- ${HOMEgfs}/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS   (J-Job)
            +-- ${SCRglobal}/exgfs_atmos_grib2_special_npoess.sh
                 +-- wgrib2 (filter + regrid)
                 +-- wait_for_file (polling for upstream products)

Confirmed via MCP graph (tenant gw_v17): JGFS_ATMOS_PGRB2_SPEC_NPOESS is a suite leaf with 0 direct dependents.


4. What the J-Job actually produces

The ex-script generates two product families:

Part 1: NPOESS 0.5-degree subset (f000-f024, 3-hourly)

Product Source Method Output
${RUN}.${cycle}.pgrb2f${fhr3}.npoess 0p50 GRIB2 (pres_a + pres_b) wgrib2 parameter filtering via global_npoess_paramlist_g2 ${COMOUT_ATMOS_GOES}/

DBN alert: GFS_PGBNPOESS

Part 2: Simulated GOES imagery (f000-f180, cadence per FHOUT_GOES)

Product Source Method Output
goessimpgrb2.0p25.f${fhr3} GOES master GRIB2 wgrib2 regrid to 0.25-degree global ${COMOUT_ATMOS_GOES}/
goessimpgrb2.0p25.f${fhr3}.idx (index) wgrib2 -s ${COMOUT_ATMOS_GOES}/
goessimpgrb2f${fhr3}.grd221 GOES master GRIB2 wgrib2 regrid to Lambert CONUS (grid 221) ${COMOUT_ATMOS_GOES}/

DBN alerts: GFS_GOESSIMPGB2_0P25, GFS_GOESSIMPGB2_0P25_WIDX, GFS_GOESSIMGRD221_PGB2

Regridding options

The script uses bilinear interpolation by default, with neighbor for categorical fields (CSNOW/CRAIN/CFRZR/CICEP/ICSEV), budget for precipitation fields (APCP/ACPCP/PRATE/CPRAT), and 16/25-bit precision caps.


5. Key environment variables

Variable Origin Meaning
COMIN_ATMOS_MASTER J-Job (declare -rx) Input: UPP GOES master GRIB2 files.
COMIN_ATMOS_GRIB_0p50 J-Job (declare -rx) Input: 0.50-degree standard GRIB2 (pres_a/pres_b).
COMOUT_ATMOS_GOES J-Job (declare -rx) Output: all NPOESS and GOES-sim products.
FHMAX_GFS config.base Max forecast hour; caps NPOESS range.
FHMAX_GOES config.npoess Max forecast hour for GOES simulation (default 180).
FHOUT_GOES config.npoess Hour increment for GOES loop.
FHMIN_GFS config.base Starting forecast hour.
WGRIB2 module env Path to wgrib2 executable.
SENDDBN env / config Controls DBNet alert distribution.
PARMglobal jjob_header.sh Parameter file directory (contains global_npoess_paramlist_g2).

Configuration

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

  • config.base — fundamental paths and settings.
  • config.npoess — NPOESS/GOES-specific forecast hour ranges.

6. v17-specific notes

  • Single-instance with internal loop: unlike most v17 _master templates that generate one task per hour, this task polls for upstream products and processes all hours in a single PBS job. The 3.5-hour walltime accommodates the wait.
  • Not in Rocoto suite: the TODO comment confirms this is NCO ecFlow-only.
  • Dual-purpose job: combines both the NPOESS 0.5-degree subsetting and the GOES simulation regridding — two logically separate operations in one script.
  • Centralized module loading via load_modules.sh run.
  • HOMEglobal shim bridges v17 naming to NCO.
  • Input dependency chain: depends on both jgfs_atmos_product (for 0p50 GRIB2) and jgfs_atmos_goesupp (for GOES master files from UPP).

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

Symbol Change type Risk Direct dependents
JGFS_ATMOS_PGRB2_SPEC_NPOESS behavior LOW (0.10) 0 (suite leaf)
exgfs_atmos_grib2_special_npoess.sh signature LOW Single caller

This is an isolated suite leaf. Changes to the NPOESS param list (global_npoess_paramlist_g2) affect only this job. Changes to wait_for_file behavior (shared ush utility) have wider impact.


Sources

  • On-disk v17 worktree: ecf/scripts/gfs/product/atmos/gempak/jgfs_atmos_npoess_pgrb2_0p5.ecf, dev/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS, dev/scripts/exgfs_atmos_grib2_special_npoess.sh.
  • agentcore-mcp-rag MCP (tenant gw_v17): get_change_impact.
⚠️ **GitHub.com Fallback** ⚠️