Skip to content

Commit e48fedd

Browse files
Merge branch 'develop' into ci_unit-tests
2 parents 08b7b9f + c92bf41 commit e48fedd

22 files changed

+448
-256
lines changed

jobs/JGFS_ATMOS_CYCLONE_GENESIS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
source "${HOMEgfs}/ush/preamble.sh"
44
source "${HOMEgfs}/ush/jjob_header.sh" -e "genesis" -c "base genesis"
55

6+
# Hack to temporary skip this as the tracker has not been build
7+
# on Hercules Rocky 9 yet
8+
# TODO: Remove this after tracker has been built for Rocky 9 #2639
9+
if [[ "${machine}" == 'HERCULES' ]]; then exit 0; fi
610

711
##############################################
812
# Set variables used in the exglobal script

jobs/JGFS_ATMOS_CYCLONE_TRACKER

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
source "${HOMEgfs}/ush/preamble.sh"
44
source "${HOMEgfs}/ush/jjob_header.sh" -e "tracker" -c "base tracker"
55

6+
# Hack to temporary skip this as the tracker has not been build
7+
# on Hercules Rocky 9 yet
8+
# TODO: Remove this after tracker has been built for Rocky 9 #2639
9+
if [[ "${machine}" == 'HERCULES' ]]; then exit 0; fi
610

711
export COMPONENT="atmos"
812

jobs/JGFS_ATMOS_FSU_GENESIS

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
source "${HOMEgfs}/ush/preamble.sh"
44
source "${HOMEgfs}/ush/jjob_header.sh" -e "genesis_fsu" -c "base genesis_fsu"
55

6+
# Hack to temporary skip this as the tracker has not been build
7+
# on Hercules Rocky 9 yet
8+
# TODO: Remove this after tracker has been built for Rocky 9 #2639
9+
if [[ "${machine}" == 'HERCULES' ]]; then exit 0; fi
10+
611
export COMPONENT="atmos"
712

813

parm/archive/arcdir.yaml.j2

Lines changed: 115 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -2,84 +2,118 @@
22
{% set cycle_YMDH = current_cycle | to_YMDH %}
33
{% set cycle_YMD = current_cycle | to_YMD %}
44
{% set head = RUN + ".t" + cycle_HH + "z." %}
5-
{% if RUN == "gdas" or RUN == "gfs" %}
6-
deterministic:
7-
mkdir:
8-
- "{{ ARCDIR }}"
9-
{% if RUN == "gfs" %}
10-
- "{{ ARCDIR }}/tracker.{{ cycle_YMDH }}/{{ RUN }}"
11-
{% endif %}
12-
{% if FITSARC %}
13-
{% set VFYARC = ROTDIR + "/vrfyarch" %}
14-
- "{{ VFYARC }}/{{ RUN }}.{{ cycle_YMD }}/{{ cycle_HH }}"
15-
{% endif %}
16-
copy:
17-
{% if current_cycle != SDATE and MODE == "cycled" %}
18-
{% if DO_JEDIATMVAR %}
19-
- ["{{ COM_ATMOS_ANALYSIS }}/{{ head }}atmstat", "{{ ARCDIR }}/atmstat.{{ RUN }}.{{ cycle_YMDH }}"]
20-
{% else %}
21-
- ["{{ COM_ATMOS_ANALYSIS }}/{{ head }}gsistat", "{{ ARCDIR }}/gsistat.{{ RUN }}.{{ cycle_YMDH }}"]
22-
{% endif %}
23-
{% if DO_JEDISNOWDA %}
24-
- ["{{ COM_SNOW_ANALYSIS }}/{{ head }}snowstat.tgz", "{{ ARCDIR }}/snowstat.{{ RUN }}.{{ cycle_YMDH }}.tgz"]
25-
{% endif %}
26-
{% if AERO_ANL_CDUMP == RUN or AERO_ANL_CDUMP == "both" %}
27-
- ["{{ COM_CHEM_ANALYSIS }}/{{ head }}aerostat", "{{ ARCDIR }}/aerostat.{{ RUN }}.{{ cycle_YMDH }}"]
28-
{% endif %}
29-
- ["{{ COM_ATMOS_GRIB_1p00 }}/{{ head }}pgrb2.1p00.anl", "{{ ARCDIR }}/pgbanl.{{ RUN }}.{{ cycle_YMDH }}.grib2"]
30-
{% endif %} # Full cycle
31-
{% if RUN == "gfs" %}
32-
{% set fhmax, fhout = FHMAX_GFS, FHOUT_GFS %}
33-
{% elif RUN == "gdas" %}
34-
{% set fhmax, fhout = FHMAX, FHOUT %}
35-
{% endif %}
36-
{% for fhr in range(0, fhmax + fhout, fhout) %}
37-
- ["{{ COM_ATMOS_GRIB_1p00 }}/{{ head }}pgrb2.1p00.f{{ '%03d' % fhr }}", "{{ ARCDIR }}/pgbf{{ '%02d' % fhr }}.{{ RUN }}.{{ cycle_YMDH }}.grib2"]
38-
{% endfor %}
39-
{% if RUN == "gfs" %}
40-
{% if FITSARC %}
41-
{% if FHMAX_FITS is defined %}
42-
{% set fhmax = FHMAX_FITS %}
43-
{% else %}
44-
{% set fhmax = FHMAX_GFS %}
45-
{% endif %}
46-
{% for fhr in range(0, fhmax + 6, 6) %}
47-
{% set sfcfile = "/" + head + "sfcf" + '%03d'|format(fhr) + ".nc" %}
48-
{% set sigfile = "/" + head + "atmf" + '%03d'|format(fhr) + ".nc" %}
49-
- ["{{COM_ATMOS_HISTORY}}/{{ sfcfile }}", "{{ VFYARC }}/{{ RUN }}.{{ cycle_YMD }}/{{ cycle_HH }}/{{ sfcfile }}"]
50-
- ["{{COM_ATMOS_HISTORY}}/{{ sigfile }}", "{{ VFYARC }}/{{ RUN }}.{{ cycle_YMD }}/{{ cycle_HH }}/{{ sigfile }}"]
51-
{% endfor %}
52-
{% endif %} ## FITSARC
53-
{% if path_exists(COM_ATMOS_GENESIS ~ "/storms.gfso.atcf_gen." ~ cycle_YMDH) %}
54-
- ["{{ COM_ATMOS_GENESIS }}/storms.gfso.atcf_gen.{{ cycle_YMDH }}", "{{ ARCDIR }}/storms.gfso.atcf_gen.{{ cycle_YMDH }}"]
55-
- ["{{ COM_ATMOS_GENESIS }}/storms.gfso.atcf_gen.altg.{{ cycle_YMDH }}", "{{ ARCDIR }}/storms.gfso.atcf_gen.altg.{{ cycle_YMDH }}"]
56-
{% endif %}
57-
{% if path_exists(COM_ATMOS_GENESIS ~ "/trak.gfso.atcfunix." ~ cycle_YMDH) %}
58-
- ["{{ COM_ATMOS_GENESIS }}/trak.gfso.atcfunix.{{ cycle_YMDH }}", "{{ ARCDIR }}/trak.gfso.atcfunix.{{ cycle_YMDH }}"]
59-
- ["{{ COM_ATMOS_GENESIS }}/trak.gfso.atcfunix.altg.{{ cycle_YMDH }}", "{{ ARCDIR }}/trak.gfso.atcfunix.altg.{{ cycle_YMDH }}"]
60-
{% endif %}
61-
## Only created if tracking is on and there were systems to track
62-
{% for basin in ["epac", "natl"] %}
63-
{% if path_exists(COM_ATMOS_TRACK + "/" + basin) %}
64-
- ["{{ COM_ATMOS_TRACK }}/{{ basin }}", "{{ ARCDIR }}/{{ basin }}"]
65-
{% endif %}
66-
{% endfor %}
67-
{% endif %} ## RUN == "gfs"
68-
{% if path_exists(COM_ATMOS_TRACK ~ "/atcfunix." ~ RUN ~ "." ~ cycle_YMDH) %}
69-
- ["{{ COM_ATMOS_TRACK }}/atcfunix.{{ RUN }}.{{ cycle_YMDH }}", "{{ ARCDIR }}/atcfunix.{{ RUN }}.{{ cycle_YMDH }}"]
70-
- ["{{ COM_ATMOS_TRACK }}/atcfunixp.{{ RUN }}.{{ cycle_YMDH }}", "{{ ARCDIR }}/atcfunixp.{{ RUN }}.{{ cycle_YMDH }}"]
71-
{% endif %}
72-
{% endif %} # gfs or gdas
73-
{% if current_cycle != SDATE and (RUN == "enkfgdas" or RUN == "enkfgfs") %}
74-
ensemble:
75-
mkdir:
76-
- "{{ ARCDIR }}"
77-
copy:
78-
{% if DO_JEDIATMENS %}
79-
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}atmensstat", "{{ ARCDIR }}/atmensstat.{{ RUN }}.{{ cycle_YMDH }}"]
80-
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}atminc.ensmean.nc", "{{ ARCDIR }}/atmensstat.{{ RUN }}.{{ cycle_YMDH }}.ensmean.nc"]
81-
{% else %}
82-
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}enkfstat", "{{ ARCDIR }}/enkfstat.{{ RUN }}.{{ cycle_YMDH }}"]
83-
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}gsistat.ensmean", "{{ ARCDIR }}/gsistat.{{ RUN }}.{{ cycle_YMDH }}.ensmean"]
84-
{% endif %}
85-
{% endif %} # enkfgdas or enkfgfs
5+
6+
# Select data to store in the ARCDIR and VFYARC from deterministic runs
7+
Base: &base # GDAS, GFS, ENKFGDAS, or ENKFGFS
8+
common:
9+
mkdir:
10+
- "{{ ARCDIR }}"
11+
12+
# Common files to be added to both the gfs and gdas keys below
13+
Deterministic: &deterministic
14+
cyclone:
15+
copy:
16+
# Cyclone forecasts, produced for both gdas and gfs cycles
17+
## Only created if tracking is on and there were systems to track
18+
{% if path_exists(COM_ATMOS_TRACK ~ "/atcfunix." ~ RUN ~ "." ~ cycle_YMDH) %}
19+
- ["{{ COM_ATMOS_TRACK }}/atcfunix.{{ RUN }}.{{ cycle_YMDH }}", "{{ ARCDIR }}/atcfunix.{{ RUN }}.{{ cycle_YMDH }}"]
20+
- ["{{ COM_ATMOS_TRACK }}/atcfunixp.{{ RUN }}.{{ cycle_YMDH }}", "{{ ARCDIR }}/atcfunixp.{{ RUN }}.{{ cycle_YMDH }}"]
21+
{% endif %}
22+
23+
# Cyclone tracking data
24+
{% for basin in ["epac", "natl"] %}
25+
{% if path_exists(COM_ATMOS_TRACK + "/" + basin) %}
26+
- ["{{ COM_ATMOS_TRACK }}/{{ basin }}", "{{ ARCDIR }}/{{ basin }}"]
27+
{% endif %}
28+
{% endfor %}
29+
30+
{% if MODE == "cycled" %}
31+
analysis:
32+
copy:
33+
# Analysis data (if we are running in cycled mode)
34+
- ["{{ COM_ATMOS_GRIB_1p00 }}/{{ head }}pgrb2.1p00.anl", "{{ ARCDIR }}/pgbanl.{{ RUN }}.{{ cycle_YMDH }}.grib2"]
35+
36+
{% if DO_JEDIATMVAR %}
37+
- ["{{ COM_ATMOS_ANALYSIS }}/{{ head }}atmstat", "{{ ARCDIR }}/atmstat.{{ RUN }}.{{ cycle_YMDH }}"]
38+
{% else %}
39+
- ["{{ COM_ATMOS_ANALYSIS }}/{{ head }}gsistat", "{{ ARCDIR }}/gsistat.{{ RUN }}.{{ cycle_YMDH }}"]
40+
{% endif %}
41+
42+
{% if DO_JEDISNOWDA %}
43+
- ["{{ COM_SNOW_ANALYSIS }}/{{ head }}snowstat.tgz", "{{ ARCDIR }}/snowstat.{{ RUN }}.{{ cycle_YMDH }}.tgz"]
44+
{% endif %}
45+
46+
{% if AERO_ANL_CDUMP == RUN or AERO_ANL_CDUMP == "both" %}
47+
- ["{{ COM_CHEM_ANALYSIS }}/{{ head }}aerostat", "{{ ARCDIR }}/aerostat.{{ RUN }}.{{ cycle_YMDH }}"]
48+
{% endif %}
49+
50+
{% endif %}
51+
52+
{% if RUN == "gfs" %}
53+
gfs: # GFS specific
54+
<<: *base
55+
<<: *deterministic
56+
57+
gfs:
58+
copy:
59+
{% for fhr in range(0, FHMAX_GFS + 1, FHOUT_GFS) %}
60+
- ["{{ COM_ATMOS_GRIB_1p00 }}/{{ head }}pgrb2.1p00.f{{ '%03d' % fhr }}", "{{ ARCDIR }}/pgbf{{ '%02d' % fhr }}.{{ RUN }}.{{ cycle_YMDH }}.grib2"]
61+
{% endfor %}
62+
63+
# Cyclone genesis data (only present if there are storms)
64+
{% if path_exists(COM_ATMOS_GENESIS ~ "/storms.gfso.atcf_gen." ~ cycle_YMDH) %}
65+
- ["{{ COM_ATMOS_GENESIS }}/storms.gfso.atcf_gen.{{ cycle_YMDH }}", "{{ ARCDIR }}/storms.gfso.atcf_gen.{{ cycle_YMDH }}"]
66+
- ["{{ COM_ATMOS_GENESIS }}/storms.gfso.atcf_gen.altg.{{ cycle_YMDH }}", "{{ ARCDIR }}/storms.gfso.atcf_gen.altg.{{ cycle_YMDH }}"]
67+
{% endif %}
68+
69+
{% if path_exists(COM_ATMOS_GENESIS ~ "/trak.gfso.atcfunix." ~ cycle_YMDH) %}
70+
- ["{{ COM_ATMOS_GENESIS }}/trak.gfso.atcfunix.{{ cycle_YMDH }}", "{{ ARCDIR }}/trak.gfso.atcfunix.{{ cycle_YMDH }}"]
71+
- ["{{ COM_ATMOS_GENESIS }}/trak.gfso.atcfunix.altg.{{ cycle_YMDH }}", "{{ ARCDIR }}/trak.gfso.atcfunix.altg.{{ cycle_YMDH }}"]
72+
{% endif %}
73+
74+
{% if DO_FIT2OBS %}
75+
fit2obs:
76+
77+
mkdir:
78+
{% set VFYARC = ROTDIR + "/vrfyarch" %}
79+
- "{{ VFYARC }}/{{ RUN }}.{{ cycle_YMD }}/{{ cycle_HH }}"
80+
81+
copy:
82+
{% for fhr in range(0, FHMAX_FITS + 1, 6) %}
83+
{% set sfcfile = "/" + head + "sfcf" + '%03d'|format(fhr) + ".nc" %}
84+
{% set sigfile = "/" + head + "atmf" + '%03d'|format(fhr) + ".nc" %}
85+
- ["{{COM_ATMOS_HISTORY}}/{{ sfcfile }}", "{{ VFYARC }}/{{ RUN }}.{{ cycle_YMD }}/{{ cycle_HH }}/{{ sfcfile }}"]
86+
- ["{{COM_ATMOS_HISTORY}}/{{ sigfile }}", "{{ VFYARC }}/{{ RUN }}.{{ cycle_YMD }}/{{ cycle_HH }}/{{ sigfile }}"]
87+
{% endfor %}
88+
89+
{% endif %}
90+
{% endif %}
91+
92+
{% if RUN == "gdas" %}
93+
gdas: # GDAS specific
94+
<<: *base
95+
<<: *deterministic
96+
gdas:
97+
copy:
98+
{% for fhr in range(0, FHMAX + 1, FHOUT) %}
99+
- ["{{ COM_ATMOS_GRIB_1p00 }}/{{ head }}pgrb2.1p00.f{{ '%03d' % fhr }}", "{{ ARCDIR }}/pgbf{{ '%02d' % fhr }}.{{ RUN }}.{{ cycle_YMDH }}.grib2"]
100+
{% endfor %}
101+
{% endif %}
102+
103+
Ensemble: &ensemble # ENKFGDAS or ENKFGFS
104+
analysis:
105+
copy:
106+
# Copy ensemble analyses
107+
{% if DO_JEDIATMENS %}
108+
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}atmensstat", "{{ ARCDIR }}/atmensstat.{{ RUN }}.{{ cycle_YMDH }}"]
109+
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}atminc.ensmean.nc", "{{ ARCDIR }}/atmensstat.{{ RUN }}.{{ cycle_YMDH }}.ensmean.nc"]
110+
{% else %}
111+
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}enkfstat", "{{ ARCDIR }}/enkfstat.{{ RUN }}.{{ cycle_YMDH }}"]
112+
- ["{{ COM_ATMOS_ANALYSIS_ENSSTAT }}/{{ head }}gsistat.ensmean", "{{ ARCDIR }}/gsistat.{{ RUN }}.{{ cycle_YMDH }}.ensmean"]
113+
{% endif %}
114+
115+
{% if "enkf" in RUN %}
116+
{{ RUN }}:
117+
<<: *base
118+
<<: *ensemble
119+
{% endif %}

parm/archive/enkf.yaml.j2

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,46 @@ enkf:
22
name: "ENKF"
33
target: "{{ ATARDIR }}/{{ cycle_YMDH }}/{{ RUN }}.tar"
44
required:
5+
# Logs
6+
{% for mem in range(1, nmem_ens + 1) %}
7+
- "logs/{{ cycle_YMDH }}/{{ RUN }}fcst_mem{{ '%03d' % mem }}.log"
8+
{% endfor %}
9+
{% for fhr in range(fhmin, fhmax + 1, fhout) %}
10+
- "logs/{{ cycle_YMDH }}/{{ RUN }}epos{{ '%03d' % (fhr - fhmin) }}.log"
11+
{% endfor %}
12+
- "logs/{{ cycle_YMDH }}/{{ RUN }}echgres.log"
13+
- "logs/{{ cycle_YMDH }}/{{ RUN }}esfc.log"
14+
{% for grp in range(iaufhrs | length) %}
15+
- "logs/{{ cycle_YMDH }}/{{ RUN }}ecen{{ '%03d' % grp }}.log"
16+
{% endfor %}
17+
18+
{% if DO_JEDIATMENS %}
19+
{% set steps = ["atmensanlinit", "atmensanlrun", "atmensanlfinal"] %}
20+
{% else %}
21+
{% set steps = ["eobs", "eupd"] %}
22+
{% if lobsdiag_forenkf %}
23+
{% do steps.append("ediag") %}
24+
{% else %}
25+
{% for mem in range(1, nmem_ens + 1) %}
26+
{% do steps.append("eomg_mem{{ '%03d' % mem }}") %}
27+
{% endfor %}
28+
{% endif %}
29+
{% endif %}
30+
31+
{% for step in steps %}
32+
- "logs/{{ cycle_YMDH }}/{{ RUN }}{{ step }}.log"
33+
{% endfor %}
34+
35+
# Ensemble mean and spread
536
{% for fhr in range(3, fhmax + 1, 3) %}
637
- "{{ COM_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmf{{ '%03d' % fhr }}.ensmean.nc"
738
- "{{ COM_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}sfcf{{ '%03d' % fhr }}.ensmean.nc"
839
{% if ENKF_SPREAD %}
940
- "{{ COM_ATMOS_HISTORY_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmf{{ '%03d' % fhr }}.ensspread.nc"
1041
{% endif %}
1142
{% endfor %}
12-
{% for mem in range(1, nmem_ens + 1) %}
13-
- "logs/{{ cycle_YMDH }}/{{ RUN }}fcst_mem{{ '%03d' % mem }}.log"
14-
{% endfor %}
15-
- "logs/{{ cycle_YMDH }}/{{ RUN }}epos*.log"
16-
- "logs/{{ cycle_YMDH }}/{{ RUN }}echgres.log"
17-
18-
{% if current_cycle != SDATE %}
19-
# TODO archive ecen logs based on actual groups. Will need to emulate numpy.array_split to do so.
20-
- "logs/{{ cycle_YMDH }}/{{ RUN }}ecen*.log"
21-
- "logs/{{ cycle_YMDH }}/{{ RUN }}esfc.log"
2243

44+
# Ensemble mean state
2345
{% if not DO_JEDIATMENS %}
2446
{% set da_files = ["enkfstat",
2547
"gsistat.ensmean",
@@ -34,41 +56,27 @@ enkf:
3456
{% for file in da_files %}
3557
- "{{ COM_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}{{ file }}"
3658
{% endfor %}
37-
{% if DOIAU %}
38-
{% for fhr in iaufhrs %}
39-
{% if fhr == IAU_OFFSET %}
59+
60+
# Ensemble mean analyses/increments
61+
# 6-hr analysis/increment
4062
{% if do_calc_increment %}
4163
- "{{ COM_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmanl.ensmean.nc"
42-
{% endif %} # calc increment
43-
{% else %} # fhr != IAU_OFFSET
44-
- "{{ COM_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmi{{ '%03d' % fhr }}.ensmean.nc"
45-
{% endif %} # fhr == IAU_OFFSET
46-
{% endfor %} # IAUFHRS
47-
{% endif %} # DOIAU
48-
49-
{% if DO_JEDIATMENS %}
50-
{% set steps = ["atmensanlinit", "atmensanlrun", "atmensanlfinal"] %}
51-
{% else %}
52-
{% set steps = ["eobs", "eupd"] %}
53-
{% if lobsdiag_forenkf %}
54-
{% do steps.append("ediag") %}
5564
{% else %}
56-
{% for mem in range(1, nmem_ens + 1) %}
57-
{% do steps.append("eomg_mem{{ '%03d' % mem }}") %}
58-
{% endfor %}
59-
{% endif %}
65+
- "{{ COM_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atminc.ensmean.nc"
6066
{% endif %}
6167

62-
{% for step in steps %}
63-
- "logs/{{ cycle_YMDH }}/{{ RUN }}{{ step }}.log"
64-
{% endfor %}
65-
{% endif %} # not the first cycle
66-
optional:
67-
{% if current_cycle != SDATE and DOIAU %}
68-
{% for fhr in iaufhrs %}
69-
{% if fhr != IAU_OFFSET %}
68+
{% if DOIAU %}
69+
# IAU increments/analyses
70+
71+
{% for fhr in iaufhrs if fhr != 6 %}
72+
{% if do_calc_increment %}
73+
# Store analyses instead of increments
7074
- "{{ COM_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atma{{ '%03d' % fhr }}.ensmean.nc"
75+
{% else %}
76+
# Store increments
7177
- "{{ COM_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}atmi{{ '%03d' % fhr }}.ensmean.nc"
72-
{% endif %} # fhr == IAU_OFFSET
73-
{% endfor %} # IAUFHRS
7478
{% endif %}
79+
{% endfor %}
80+
81+
{% endif %} # End IAU
82+
# End of analysis mean increments/analyses

parm/archive/enkf_grp.yaml.j2

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,20 @@ enkf_grp:
44
required:
55
{% for mem in range(first_group_mem, last_group_mem + 1) %}
66
{% set imem = mem - first_group_mem %}
7+
# Construct member COM directories
78
{% set COM_ATMOS_ANALYSIS_MEM = COM_ATMOS_ANALYSIS_MEM_list[imem] %}
89
{% set COM_ATMOS_HISTORY_MEM = COM_ATMOS_HISTORY_MEM_list[imem] %}
910
{% set COM_ATMOS_RESTART_MEM = COM_ATMOS_RESTART_MEM_list[imem] %}
1011

11-
{% for iaufhr in iaufhrs_enkf %}
12-
- "{{ COM_ATMOS_HISTORY_MEM | relpath(ROTDIR) }}/{{ head }}atmf{{ "%03d" % iaufhr }}.nc"
12+
# Forecast data
13+
{% for fhr in range(3, 10, 3) %}
14+
- "{{ COM_ATMOS_HISTORY_MEM | relpath(ROTDIR) }}/{{ head }}atmf{{ "%03d" % fhr }}.nc"
1315
{% endfor %}
1416

15-
{% if 6 in iaufhrs_enkf %}
17+
# Only store the 6-hour surface forecast
1618
- "{{ COM_ATMOS_HISTORY_MEM | relpath(ROTDIR) }}/{{ head }}sfcf006.nc"
17-
{% endif %}
1819

19-
{% if current_cycle != SDATE %}
20+
# Store the individual member analysis data
2021
{% if not lobsdiag_forenkf %}
2122
- "{{ COM_ATMOS_RESTART_MEM | relpath(ROTDIR) }}/{{ head }}gsistat"
2223
{% endif %}
@@ -25,5 +26,4 @@ enkf_grp:
2526
{% else %}
2627
- "{{ COM_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}ratminc.nc"
2728
{% endif %}
28-
{% endif %}
2929
{% endfor %} # first_group_mem to last_group_mem

0 commit comments

Comments
 (0)