Skip to content

Commit

Permalink
Remove early-cycle EnKF forecast (#3185)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
TravisElless-NOAA authored Dec 26, 2024
1 parent bdc0e29 commit 1c37f90
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 3 deletions.
4 changes: 4 additions & 0 deletions parm/archive/enkf.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ enkf:
target: "{{ ATARDIR }}/{{ cycle_YMDH }}/{{ RUN }}.tar"
required:
# Logs
{% if RUN == 'enkfgdas' %}
{% for mem in range(1, nmem_ens + 1) %}
- "logs/{{ cycle_YMDH }}/{{ RUN }}_fcst_mem{{ '%03d' % mem }}.log"
{% endfor %}
{% for fhr in range(fhmin, fhmax + 1, fhout) %}
- "logs/{{ cycle_YMDH }}/{{ RUN }}_epos{{ '%03d' % (fhr - fhmin) }}.log"
{% endfor %}
- "logs/{{ cycle_YMDH }}/{{ RUN }}_echgres.log"
{% endif %}
- "logs/{{ cycle_YMDH }}/{{ RUN }}_esfc.log"
{% for grp in range(IAUFHRS | length) %}
- "logs/{{ cycle_YMDH }}/{{ RUN }}_ecen{{ '%03d' % grp }}.log"
Expand Down Expand Up @@ -37,13 +39,15 @@ enkf:
{% endfor %}

# Ensemble mean and spread
{% if RUN == 'enkfgdas' %}
{% for fhr in range(3, fhmax + 1, 3) %}
- "{{ COMIN_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmf{{ '%03d' % fhr }}.ensmean.nc"
- "{{ COMIN_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}sfcf{{ '%03d' % fhr }}.ensmean.nc"
{% if ENKF_SPREAD %}
- "{{ COMIN_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmf{{ '%03d' % fhr }}.ensspread.nc"
{% endif %}
{% endfor %}
{% endif %}

# Ensemble mean state
{% if not DO_JEDIATMENS %}
Expand Down
2 changes: 2 additions & 0 deletions parm/archive/enkf_grp.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ enkf_grp:
{% set COMIN_ATMOS_RESTART_MEM = COMIN_ATMOS_RESTART_MEM_list[imem] %}

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

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

# Store the individual member analysis data
{% if not lobsdiag_forenkf %}
Expand Down
2 changes: 2 additions & 0 deletions parm/archive/enkf_restartb_grp.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ enkf_restartb_grp:
{% endfor %}

# Now get the restart files.
{% if RUN == 'enkfgdas' %}
{% for r_time in range(restart_interval, fhmax + 1, restart_interval) %}
{% set r_timedelta = (r_time | string + "H") | to_timedelta %}
{% set r_dt = current_cycle | add_to_datetime(r_timedelta) %}
Expand All @@ -38,3 +39,4 @@ enkf_restartb_grp:
- "{{ COMIN_ATMOS_RESTART_MEM | relpath(ROTDIR) }}/{{ r_prefix }}.fv_core.res.nc"
{% endfor %}
{% endfor %}
{% endif %}
2 changes: 1 addition & 1 deletion scripts/exgdas_enkf_earc.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def main():
'DOHYBVAR', 'DOIAU_ENKF', 'IAU_OFFSET', 'DOIAU', 'DO_CA',
'DO_CALC_INCREMENT', 'assim_freq', 'ARCH_CYC', 'DO_JEDISNOWDA',
'ARCH_WARMICFREQ', 'ARCH_FCSTICFREQ',
'IAUFHRS_ENKF', 'NET']
'IAUFHRS_ENKF', 'NET', 'NMEM_ENS_GFS']

archive_dict = AttrDict()
for key in keys:
Expand Down
4 changes: 3 additions & 1 deletion workflow/applications/gfs_cycled.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,9 @@ def get_task_names(self):
task_names[run].append('echgres') if 'gdas' in run else 0
task_names[run] += ['ediag'] if options['lobsdiag_forenkf'] else ['eomg']
task_names[run].append('esnowanl') if options['do_jedisnowda'] and 'gdas' in run else 0
task_names[run].append('efcs') if 'gdas' in run else 0
task_names[run].append('epos') if 'gdas' in run else 0

task_names[run] += ['stage_ic', 'ecen', 'esfc', 'efcs', 'epos', 'earc', 'cleanup']
task_names[run] += ['stage_ic', 'ecen', 'esfc', 'earc', 'cleanup']

return task_names
5 changes: 4 additions & 1 deletion workflow/rocoto/gfs_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -2896,7 +2896,10 @@ def _get_eposgroups(epos):
def earc(self):

deps = []
dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn'}
if 'enkfgdas' in self.run:
dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn'}
else:
dep_dict = {'type': 'task', 'name': f'{self.run}_esfc'}
deps.append(rocoto.add_dependency(dep_dict))
dependencies = rocoto.create_dependency(dep=deps)

Expand Down

0 comments on commit 1c37f90

Please sign in to comment.