Replace gfs_cyc with an interval#2928
Conversation
|
More manual testing to come, but ready enough to get eyes on it. |
a532f64 to
f6141f8
Compare
61d05ae to
1e92c40
Compare
To facilitate longer and more flexible GFS cadences, the `gfs_cyc` variable is replaced with a specified interval. Up front, this is reflected in a change in the arguments for setup_exp to: ``` --interval <n_hours> ``` Where `n_hours` is the interval (in hours) between gfs forecasts. `n_hours` must be a multiple of 6. If 0, no gfs will be run (only gdas; only valid for cycled mode). The default value is 6 (every cycle). In cycled mode, there is an additional argument to control which cycle will be the first gfs cycle: ``` ---sdate_gfs <YYYYMMDDHH> ``` The default if not provided is `--idate` + 6h (first full cycle). As part of this change, some of the validation of the dates has been added. `--edate` has also been made optional and defaults to `--idate` if not provided. During `config.base` template-filling, `INTERVAL_GFS` (renamed from `STEP_GFS`) is defined as `--interval` and `SDATE_GFS as `--sdate_gfs`. Some changes were necessary to the gfs verification (metp) job, as `gfs_cyc` was being used downstream by verif-global. That has been removed, and instead workflow will be responsible for only running metp on the correct cycles. This also removes "do nothing" metp tasks that exit immediately, because only the last GFS cycle in a day would actually process verification. Now, metp has its own cycledef and always runs at 18z, regardless of whether gfs is running at 18z or not. This is simplier than trying to determine the last gfs cycle of a day when it could change from day to day. To facilitate this change, support for the undocumented rocoto dependency tag `taskvalid` is added, as the metp task needs to know whether the cycle has a gfsarch task or not. metp will trigger on gfsarch completing (as before), or gdasarch completing if there is no gfsarch. metp tasks are no longer generated for forecast-only, as the pgbanl files (copied of the 1p00 pgbanl files) are not generated for f-o anyway. If metp is needed for f-o, additional work will be needed. Additionally, a couple EE2 issues with the metp job are resolved (even though it is not run in ops): - verif-global update replaced `$CDUMP` with `$RUN` - `$DATAROOT` is no longer redefined in the metp job Depends on NOAA-EMC/EMC_verif-global#137 Resolves NOAA-EMC#260 Refs NOAA-EMC#1299
To avoid running metp on days where there is no gfs, the cycledefs are adjusted somewhat. First, if the interval is >= 24h, the metp cycledef will be identical to gfs. If the interval is < 24h, it remains 18z every day (except the last). Second, a last_gfs is added so metp will run on for the last gfs cycle even if it there is no gdas cycle for 18z that day. This required computing the real gfs end date to use as the last cycle.
18f9752 to
bfc2907
Compare
|
Ready for review. Also encourage third-party testing in excess of what CI will cover due to the nature of the change. I ran some different multi-day experiments myself, but outside validation would be appreciated. |
|
Automated global-workflow Testing Results: |
DavidHuber-NOAA
left a comment
There was a problem hiding this comment.
Looks good. Approve pending successful WCOSS2 testing.
|
Starting over from scratch with Walter's |
|
|
Automated global-workflow Testing Results: |
|
Experiment C96C48_hybatmaerosnowDA_d54bc650 FAIL on Wcoss2 at 10/16/24 09:14:32 PM Error logs: Follow link here to view the contents of the above file(s): (link) |
|
Sync'd missing snow observation data to cactus. |
The UFS model executable is not built for the structured wave grid used by GEFS on WCOSS, so GEFS tests should not run on WCOSS.
|
|
Automated global-workflow Testing Results: |
|
Experiment C96C48_hybatmaerosnowDA_2b6c45de FAIL on Wcoss2 at 10/17/24 06:56:28 PM Error logs: Follow link here to view the contents of the above file(s): (link) |
|
|
Automated global-workflow Testing Results: |
|
Experiment C96_atm3DVar_extended_2b6c45de FAIL on Wcoss2 at 10/18/24 08:35:52 PM Error logs: Follow link here to view the contents of the above file(s): (link) |
|
Failed because restarts from previous attempt weren't wiped, so forecast picked up in the middle. |
|
|
Automated global-workflow Testing Results: |
|
All manual CI tests passed on WCOSS: |
DavidHuber-NOAA
left a comment
There was a problem hiding this comment.
Thanks for all the work on this @WalterKolczynski-NOAA!
KateFriedman-NOAA
left a comment
There was a problem hiding this comment.
Looks good, thanks @WalterKolczynski-NOAA !
|
|
||
| date2 = sdate_gfs + interval_gfs | ||
| if date2 <= edate_gfs: | ||
| date2_gfs_str = date2_gfs.strftime("%Y%m%d%H%M") |
There was a problem hiding this comment.
Just noticed that date2_gfs should be date2. I'll fix this in #2943.
There was a problem hiding this comment.
I'm surprised PEP8 didn't complain about this.
Description
To facilitate longer and more flexible GFS cadences, the
gfs_cycvariable is replaced with a specified interval. Up front, this isreflected in a change in the arguments for setup_exp to:
Where
n_hoursis the interval (in hours) between gfs forecasts.n_hoursmust be a multiple of 6. If 0, no gfs will be run (onlygdas; only valid for cycled mode). The default value is 6 (every cycle). (This is a change from current behavior of 24.)
In cycled mode, there is an additional argument to control which cycle will be the first gfs cycle:
The default if not provided is
--idate+ 6h (first full cycle). This is the same as current behavior whengfs_cycis 6, but may vary from current behavior for other cadences.As part of this change, some of the validation of the dates has been added.
--edatehas also been made optional and defaults to--idateif not provided.During
config.basetemplate-filling,INTERVAL_GFS(renamed fromSTEP_GFS) is defined as--intervalandSDATE_GFS as--sdate_gfs`.Some changes were necessary to the gfs verification (metp) job, as
gfs_cycwas being used downstream by verif-global. That has been removed, and instead workflow will be responsible for only running metp on the correct cycles. This also removes "do nothing" metp tasks that exit immediately, because only the last GFS cycle in a day would actually process verification.Now, metp has its own cycledef and will (a) always runs at 18z, regardless of whether gfs is running at 18z or not, if the interval is less than 24h; (b) use the same cycledef as gfs if the interval is 24h or greater. This is simpler than trying to determine the last gfs cycle of a day when it could change from day to day. To facilitate this change, support for the
undocumented rocoto dependency tag
taskvalidis added, as the metp task needs to know whether the cycle has a gfsarch task or not. metp will trigger on gfsarch completing (as before), or look backwards for the last gfsarch to exist.Additionally, a couple EE2 issues with the metp job are resolved (even though it is not run in ops):
$CDUMPwith$RUN$DATAROOTis no longer redefined in the metp jobDepends on NOAA-EMC/EMC_verif-global#137
Resolves #260
Refs #1299
Type of change
Change characteristics
How has this been tested?
Checklist