[develop] Add fire-weather test case, LBC forecast-cycle bridging, and a more robust container module-loading approach - #1385
Conversation
forecast cycle summary file *.sh name in each corresponding cycle directory
MichaelLueken
left a comment
There was a problem hiding this comment.
I have completed my initial review of the changes. The documentation changes look good. I will be testing the comprehensive WE2E tests on Ursa to ensure that there are no problems (as well as the new CalFire test). The only question I have is with modulefiles/wflow_container.lua. Line 11 has been commented out. If this line is still required for platforms that use Singularity, then the modification is fine. If it is no longer necessary at all, it would be best to remove the line entirely.
|
The new The coverage WE2E tests successfully passed on Gaea C6: |
|
While testing on Ursa, I realized that the latest HEAD of The new The coverage WE2E on Gaea C6 was run and all successfully passed: The UFS Fire WE2E tests have successfully passed on Gaea C6: The AQM WE2E test has successfully passed on Gaea C6: With this, testing is complete. I will now approve this PR. |
MichaelLueken
left a comment
There was a problem hiding this comment.
Thanks for letting me know about the intent of line 11 in modulefiles/wflow_container.lua! My tests have successfully completed, so I will now approve this PR.
|
Tested the new fire experiment on PW AWS and it passed: Also, tested the fundamental WE2E testing suite there as well: |
|
@MichaelLueken - could you please hold off on merging this PR? |
@natalie-perlin - Final testing still needs to be completed before this PR will be merged. Once Derecho returns from maintenance, I will launch the tests. You have time to fine-tune the container documentation. To be on the safe side, please let me know once you are complete. Thank you very much! |
|
A note regarding the following change in had to be changed back to The reason: |
* .cicd/scripts/wrapper_srw_ftest.sh - apply the update to Gaea C6 only * doc/conf.py - add ECP to link_ignore section due to 403 errors
Feature/lbcs fcst cycles - bring recent changes from ufs-community#1384 (ufs-community#1384)
DESCRIPTION OF CHANGES:
Adds tests/WE2E/test_configs/custom_grids/config.custom_ESGgrid_CalFire_1km.yaml — a 1 km custom ESGgrid case over the Ventura/Santa Barbara, CA area, initialized from the December 2017 Thomas Fire period (DATE_FIRST_CYCL/LAST_CYCL: 2017121400), using HRRR ICs/LBCs and the FV3_WoFS_v0 physics suite. It doubles as a real-world exercise of item 2: EXTRN_MDL_LBCS_MAX_FCST_HRS: 18 / EXTRN_MDL_LBCS_BRIDGE_INTVL_HRS: 6 forces LBC bridging to kick in for its 24 h forecast, since non-synoptic HRRR cycles only extend to 18 h.
This link shows a figure with the outer model domain (~3 deg x 3 deg) and the inner square indicating the output domain focused on the fire (100 x 100 points)
This link shows an unexpected shift in winds that happened around 9:30am local time and caused firefighter fatalities. SRW model predicts wind shift around that time (after 10am)
A link to the Thomas Fire 2017 incident reporting: https://www.fire.ca.gov/incidents/2017/12/4/thomas-fire
Adds two new task_get_extrn_lbcs options:
EXTRN_MDL_LBCS_MAX_FCST_HRS — the max forecast length a single external-model cycle actually provides (e.g. 48 h for HRRR). Leave unset when one cycle already covers the full run.
EXTRN_MDL_LBCS_BRIDGE_INTVL_HRS — how often (in hours) to check for a fresher on-schedule cycle of the same external model.
When EXTRN_MDL_LBCS_MAX_FCST_HRS < FCST_LEN_HRS, get_extrn_lbcs now retrieves LBCs in EXTRN_MDL_LBCS_BRIDGE_INTVL_HRS-sized chunks. Before each chunk it checks whether a fresher on-schedule cycle is available and switches to it if so (always preferring the freshest guidance); if the fresher cycle isn't ready yet (e.g. real-time operation), it falls back to extending whichever cycle is currently in use, up to that cycle's own EXTRN_MDL_LBCS_MAX_FCST_HRS. This check repeats every interval for the whole run — there's no permanent opt-out once a cycle is missed. Retrieved per-cycle data and its retrieve_data.py summary file live in fcst_cycle_ subdirectories under the LBC staging directory, and get relabeled/symlinked (bridge.f###...) and merged into the task's single downstream summary file, keeping exregional_make_lbcs.sh unaffected.
Previously, PLATFORM=container builds baked a fixed set of environment variables (PATH, LD_LIBRARY_PATH, ESMFMKFILE, CRTM_FIX, etc.) into a ufs-srw.env file and passed it to the container via singularity/apptainer exec --env-file. This is replaced with loading the same Lmod modules used to build the code (module load ${MODULE_FILE}, e.g. build_container_gnu) inside the container at run time, before handing off to the actual binary — a single source of truth for the build/run environment rather than a separately-maintained env file that can drift out of sync.
Documentation has been updated in support of these changes.
Type of change
TESTS CONDUCTED:
New run has been tested on several platforms:
DEPENDENCIES:
DOCUMENTATION:
ISSUE:
CHECKLIST
LABELS (optional):
A Code Manager needs to add the following labels to this PR:
CONTRIBUTORS (optional):
LOGS:
WE2E_summary_AWS_gnu_container_20260822003818.txt
WE2E_summary_ursa_20260824131233.txt
WE2E_summary_gaeac6_20260824094158.txt
WE2E_summary_hercules_20260824092758.txt
WE2E_summary_orion_20260824105903.txt