Skip to content

CTests C48_S2SW GFS Wave Expansion#4459

Merged
DavidHuber-NOAA merged 14 commits intoNOAA-EMC:developfrom
TerrenceMcGuinness-NOAA:s2sw_wave_expansion
Jan 27, 2026
Merged

CTests C48_S2SW GFS Wave Expansion#4459
DavidHuber-NOAA merged 14 commits intoNOAA-EMC:developfrom
TerrenceMcGuinness-NOAA:s2sw_wave_expansion

Conversation

@TerrenceMcGuinness-NOAA
Copy link
Collaborator

@TerrenceMcGuinness-NOAA TerrenceMcGuinness-NOAA commented Jan 20, 2026

CTest Framework Expansion
C48_S2SW Wave Component Tests

Claud Opus 4.5 was used to assist with developing this PR
This code requires review and validation by NWS staff

Summary

This PR adds comprehensive CTest coverage for wave component jobs in the C48_S2SW workflow configuration. Five new test cases validate critical wave post-processing tasks, expanding the automated testing framework for the S2SW (Subseasonal-to-Seasonal with Waves) system.

Resolves #4318

Changes

New Test Cases

Test Job Description
C48_S2SW-gfs_stage_ic gfs_stage_ic Stage initial conditions - stages atmosphere, ocean, ice, and wave restart files for coupled forecast
C48_S2SW-gfs_waveinit gfs_waveinit Wave initialization - generates mod_def files for 8 wave grids
C48_S2SW-gfs_wavepostpnt gfs_wavepostpnt Wave point post-processing - creates spectral and bulletin tar archives
C48_S2SW-gfs_wavepostsbs_f000-f002 gfs_wavepostsbs_f000-f002 Wave gridded post-processing - generates GRIB2 output for first forecast segment
C48_S2SW-gfs_wavepostbndpnt gfs_wavepostbndpnt Wave boundary point post-processing - creates interpolated boundary point spectra
C48_S2SW-gfs_wavepostbndpntbll gfs_wavepostbndpntbll Wave boundary point bulletin generation - creates WMO bulletins for boundary points

Files Added

  • dev/ctests/cases/C48_S2SW-gfs_stage_ic.yaml
  • dev/ctests/cases/C48_S2SW-gfs_waveinit.yaml
  • dev/ctests/cases/C48_S2SW-gfs_wavepostpnt.yaml
  • dev/ctests/cases/C48_S2SW-gfs_wavepostsbs_f000-f002.yaml
  • dev/ctests/cases/C48_S2SW-gfs_wavepostbndpnt.yaml
  • dev/ctests/cases/C48_S2SW-gfs_wavepostbndpntbll.yaml

Files Modified

  • dev/ctests/CMakeLists.txt - Added 6 new AddJJOBTest() entries

Test Details

gfs_waveinit

  • Purpose: Validates wave model initialization and mod_def file generation
  • Inputs: None (generation job)
  • Outputs: 8 mod_def binary files for wave grids:
    • uglo_100km (native unstructured global)
    • glo_30m (global 30-minute)
    • aoc_9km (Arctic Ocean 9km)
    • at_10m, ep_10m, wc_10m (regional 10-minute grids)
    • gnh_10m, gsh_15m (hemispheric grids)

gfs_wavepostpnt

  • Purpose: Validates wave point output post-processing
  • Inputs: 121 point files (f000-f120), 8 mod_def files
  • Outputs: spec.tar.gz (spectral data), bull.tar (bulletins)

gfs_wavepostsbs_f000-f002

  • Purpose: Validates wave gridded side-by-side post-processing (first segment of metatask)
  • Inputs: 3 uglo_100km history files (f000-f002), 8 mod_def files
  • Outputs: GRIB2 files for global.0p16 and global.0p50 grids

gfs_wavepostbndpnt

  • Purpose: Validates interpolated boundary point spectral output
  • Inputs: 121 point .nc and .log files (f000-f120), 8 mod_def files
  • Outputs: ibp.tar (interpolated boundary point spectra)

gfs_wavepostbndpntbll

  • Purpose: Validates WMO bulletin generation for boundary points
  • Inputs: 121 point .nc and .log files (f000-f120), 8 mod_def files
  • Outputs: ibpbull.tar (boundary point bulletins), ibpcbull.tar (combined bulletins)

Testing

All 60 CTests (15 tests × 4 phases) validated successfully on Hercules HPC:

Workflow Tests Test Names
C48_ATM-gfs 5 stage_ic, fcst_seg0, atmos_prod_f000-f002, tracker, genesis
C48_S2SW-gfs 9 stage_ic, fcst_seg0, ocean_prod_f006, ice_prod_f006, waveinit, wavepostpnt, wavepostsbs_f000-f002, wavepostbndpnt, wavepostbndpntbll
C48_S2SWA_gefs 1 fcst_mem001_seg0
Total 15 60 test phases (15 tests × 4 phases each)
100% tests passed, 0 tests failed out of 60

Label Time Summary:
C48_ATM-gfs_atmos_prod_f000-f002        = 187.73 sec*proc (4 tests)
C48_ATM-gfs_fcst_seg0                   = 1157.70 sec*proc (4 tests)
C48_ATM-gfs_genesis                     = 493.46 sec*proc (4 tests)
C48_ATM-gfs_stage_ic                    =  67.41 sec*proc (4 tests)
C48_ATM-gfs_tracker                     =  73.16 sec*proc (4 tests)
C48_S2SW-gfs_fcst_seg0                  = 1166.68 sec*proc (4 tests)
C48_S2SW-gfs_ice_prod_f006              =  67.42 sec*proc (4 tests)
C48_S2SW-gfs_ocean_prod_f006            =  67.41 sec*proc (4 tests)
C48_S2SW-gfs_stage_ic                   =  65.12 sec*proc (4 tests)
C48_S2SW-gfs_waveinit                   =  67.42 sec*proc (4 tests)
C48_S2SW-gfs_wavepostbndpnt             = 258.04 sec*proc (4 tests)
C48_S2SW-gfs_wavepostbndpntbll          =  77.78 sec*proc (4 tests)
C48_S2SW-gfs_wavepostpnt                = 137.94 sec*proc (4 tests)
C48_S2SW-gfs_wavepostsbs_f000-f002      =  67.58 sec*proc (4 tests)
C48_S2SWA_gefs-gefs_fcst_mem001_seg0    = 793.20 sec*proc (4 tests)

Total Test time (real) = 1166.69 sec

Technical Notes

  1. Wave History File Pattern: The uglo_100km history files follow a non-uniform pattern:

    • f000-f048: hourly (49 files)
    • f051-f120: every 3 hours (24 files)
    • Total: 73 files
  2. Wave Point File Pattern: Point output files exist for all 121 hours (f000-f120)

  3. Metatask Handling: The wavepostsbs task is a Rocoto metatask requiring specific subtask names (e.g., gfs_wavepostsbs_f000-f002) for rocotoboot

  4. Task Output Separation:

    • wavepostbndpnt produces only ibp.tar
    • wavepostbndpntbll (separate task) produces ibpbull.tar and ibpcbull.tar

Baseline Reference

  • Experiment: C48_S2SW_b40eab88-7222
  • Location: /scratch3/NCEPDEV/global/role.glopara/GFS_CI_CD/HERA/BUILDS/GITLAB/stable/RUNTESTS

Dependencies

  • Requires Rocoto dryrun build at GFS_CI_ROCOTO_PATH
  • Uses fv3-cpu allocation on Hera
  • Baseline data must be present at STAGED_CTESTS

Checklist

  • YAML test cases follow existing patterns
  • CMakeLists.txt entries use correct AddJJOBTest() format
  • All 4 test phases pass for each test case (6 tests total)
  • Input/output file paths match baseline structure
  • Jinja2 templating with wxflow filters works correctly

- Add gfs_waveinit test (mod_def file generation for 8 wave grids)
- Add gfs_wavepostpnt test (spectral/bulletin tar output)
- Add gfs_wavepostsbs_f000-f002 test (gridded GRIB2 output)
- Add gfs_wavepostbndpnt test (interpolated boundary point output)
- Update CMakeLists.txt with 4 new AddJJOBTest entries

All 16 test phases (4 tests x 4 phases) validated on Hera HPC.
…tem 8)

- Add C48_S2SW-gfs_wavepostbndpntbll.yaml for WMO bulletin generation
- Update CMakeLists.txt with AddJJOBTest entry
- Update PR_description.md with 5th test case details

Test validates boundary point bulletin output:
- ibpbull.tar (boundary point bulletins)
- ibpcbull.tar (combined bulletins)

All 4 phases passed (Job 21151218)
@TerrenceMcGuinness-NOAA TerrenceMcGuinness-NOAA added the CI/CD Issue related to CI/CD label Jan 20, 2026
@TerrenceMcGuinness-NOAA TerrenceMcGuinness-NOAA changed the title C48_S2SW GFS Wave Expansion CTests C48_S2SW GFS Wave Expansion Jan 20, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

- Add trailing hyphen convention to prevent regex partial matches
  (e.g., 'ctest -L C48_S2SW-' excludes C48_S2SWA_gefs tests)
- Update CMakeLists.txt with binomial nomenclature documentation
- Update testing.rst and README.md with correct label usage examples
- Unroll Jinja loops in wavepostsbs YAML for explicit file listing
set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${ARG_CASE}-${ARG_JOB}")
set_tests_properties(test_${TEST_NAME}_execute PROPERTIES DEPENDS test_${TEST_NAME}_stage LABELS "${TEST_NAME}")

# TODO - This is a stub for the validation step
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this still a TODO?

Copy link
Contributor

@DavidHuber-NOAA DavidHuber-NOAA left a comment

Choose a reason for hiding this comment

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

Looks good. Just one question.

@DavidHuber-NOAA DavidHuber-NOAA merged commit fd4bda5 into NOAA-EMC:develop Jan 27, 2026
6 checks passed
@TerrenceMcGuinness-NOAA TerrenceMcGuinness-NOAA deleted the s2sw_wave_expansion branch February 26, 2026 18:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CI/CD Issue related to CI/CD

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add 6 New CTest Cases for Atmosphere and C48 S2SW gfs Components

3 participants