Skip to content

Commit 1c37f90

Browse files
Remove early-cycle EnKF forecast (NOAA-EMC#3185)
Currently GFS experiments with the early-cycle EnKF call identical jobs to the late-cycle. However, since the forecast portion of the early-cycle is handled through the GEFS workflow, the forecast and post jobs are not needed in the GFS early-cycle EnKF. This PR removes calling the early-cycle EnFK forecast and post jobs in GFS experiments, and adds statements to the archive yamls to only search for forecast files during the late-cyle EnKF.
1 parent bdc0e29 commit 1c37f90

File tree

6 files changed

+16
-3
lines changed

6 files changed

+16
-3
lines changed

parm/archive/enkf.yaml.j2

+4
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ enkf:
33
target: "{{ ATARDIR }}/{{ cycle_YMDH }}/{{ RUN }}.tar"
44
required:
55
# Logs
6+
{% if RUN == 'enkfgdas' %}
67
{% for mem in range(1, nmem_ens + 1) %}
78
- "logs/{{ cycle_YMDH }}/{{ RUN }}_fcst_mem{{ '%03d' % mem }}.log"
89
{% endfor %}
910
{% for fhr in range(fhmin, fhmax + 1, fhout) %}
1011
- "logs/{{ cycle_YMDH }}/{{ RUN }}_epos{{ '%03d' % (fhr - fhmin) }}.log"
1112
{% endfor %}
1213
- "logs/{{ cycle_YMDH }}/{{ RUN }}_echgres.log"
14+
{% endif %}
1315
- "logs/{{ cycle_YMDH }}/{{ RUN }}_esfc.log"
1416
{% for grp in range(IAUFHRS | length) %}
1517
- "logs/{{ cycle_YMDH }}/{{ RUN }}_ecen{{ '%03d' % grp }}.log"
@@ -37,13 +39,15 @@ enkf:
3739
{% endfor %}
3840

3941
# Ensemble mean and spread
42+
{% if RUN == 'enkfgdas' %}
4043
{% for fhr in range(3, fhmax + 1, 3) %}
4144
- "{{ COMIN_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmf{{ '%03d' % fhr }}.ensmean.nc"
4245
- "{{ COMIN_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}sfcf{{ '%03d' % fhr }}.ensmean.nc"
4346
{% if ENKF_SPREAD %}
4447
- "{{ COMIN_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmf{{ '%03d' % fhr }}.ensspread.nc"
4548
{% endif %}
4649
{% endfor %}
50+
{% endif %}
4751

4852
# Ensemble mean state
4953
{% if not DO_JEDIATMENS %}

parm/archive/enkf_grp.yaml.j2

+2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ enkf_grp:
1010
{% set COMIN_ATMOS_RESTART_MEM = COMIN_ATMOS_RESTART_MEM_list[imem] %}
1111

1212
# Forecast data
13+
{% if RUN == 'enkfgdas' %}
1314
{% for fhr in range(3, 10, 3) %}
1415
- "{{ COMIN_ATMOS_HISTORY_MEM | relpath(ROTDIR) }}/{{ head }}atmf{{ "%03d" % fhr }}.nc"
1516
{% endfor %}
1617

1718
# Only store the 6-hour surface forecast
1819
- "{{ COMIN_ATMOS_HISTORY_MEM | relpath(ROTDIR) }}/{{ head }}sfcf006.nc"
20+
{% endif %}
1921

2022
# Store the individual member analysis data
2123
{% if not lobsdiag_forenkf %}

parm/archive/enkf_restartb_grp.yaml.j2

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ enkf_restartb_grp:
2222
{% endfor %}
2323

2424
# Now get the restart files.
25+
{% if RUN == 'enkfgdas' %}
2526
{% for r_time in range(restart_interval, fhmax + 1, restart_interval) %}
2627
{% set r_timedelta = (r_time | string + "H") | to_timedelta %}
2728
{% set r_dt = current_cycle | add_to_datetime(r_timedelta) %}
@@ -38,3 +39,4 @@ enkf_restartb_grp:
3839
- "{{ COMIN_ATMOS_RESTART_MEM | relpath(ROTDIR) }}/{{ r_prefix }}.fv_core.res.nc"
3940
{% endfor %}
4041
{% endfor %}
42+
{% endif %}

scripts/exgdas_enkf_earc.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def main():
2828
'DOHYBVAR', 'DOIAU_ENKF', 'IAU_OFFSET', 'DOIAU', 'DO_CA',
2929
'DO_CALC_INCREMENT', 'assim_freq', 'ARCH_CYC', 'DO_JEDISNOWDA',
3030
'ARCH_WARMICFREQ', 'ARCH_FCSTICFREQ',
31-
'IAUFHRS_ENKF', 'NET']
31+
'IAUFHRS_ENKF', 'NET', 'NMEM_ENS_GFS']
3232

3333
archive_dict = AttrDict()
3434
for key in keys:

workflow/applications/gfs_cycled.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,9 @@ def get_task_names(self):
317317
task_names[run].append('echgres') if 'gdas' in run else 0
318318
task_names[run] += ['ediag'] if options['lobsdiag_forenkf'] else ['eomg']
319319
task_names[run].append('esnowanl') if options['do_jedisnowda'] and 'gdas' in run else 0
320+
task_names[run].append('efcs') if 'gdas' in run else 0
321+
task_names[run].append('epos') if 'gdas' in run else 0
320322

321-
task_names[run] += ['stage_ic', 'ecen', 'esfc', 'efcs', 'epos', 'earc', 'cleanup']
323+
task_names[run] += ['stage_ic', 'ecen', 'esfc', 'earc', 'cleanup']
322324

323325
return task_names

workflow/rocoto/gfs_tasks.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -2896,7 +2896,10 @@ def _get_eposgroups(epos):
28962896
def earc(self):
28972897

28982898
deps = []
2899-
dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn'}
2899+
if 'enkfgdas' in self.run:
2900+
dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn'}
2901+
else:
2902+
dep_dict = {'type': 'task', 'name': f'{self.run}_esfc'}
29002903
deps.append(rocoto.add_dependency(dep_dict))
29012904
dependencies = rocoto.create_dependency(dep=deps)
29022905

0 commit comments

Comments
 (0)