Skip to content

Commit c5fc2b7

Browse files
Add Early Cycle EnKF workflow (#1022)
Updates workflow to allow early cycle EnKF. Refs: #1021
1 parent 52100d2 commit c5fc2b7

File tree

8 files changed

+28
-43
lines changed

8 files changed

+28
-43
lines changed

jobs/JGDAS_ENKF_ECEN

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ fi
8080
export OPREFIX="${CDUMP}.t${cyc}z."
8181
export APREFIX="${CDUMP}.t${cyc}z."
8282
export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z."
83-
export GPREFIX="${CDUMP}.t${gcyc}z."
83+
export GPREFIX="${GDUMP}.t${gcyc}z."
8484
export GSUFFIX=${GSUFFIX:-$SUFFIX}
8585
export ASUFFIX=${ASUFFIX:-$SUFFIX}
8686

@@ -96,7 +96,7 @@ fi
9696
export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT"
9797
export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc/$COMPONENT"
9898
export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT"
99-
export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT"
99+
export COMIN_GES_ENS="$ROTDIR/enkf$GDUMP.$gPDY/$gcyc/$COMPONENT"
100100

101101

102102
###############################################################

jobs/JGDAS_ENKF_FCST

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export pgmerr=errfile
5656
export CDATE=${CDATE:-${PDY}${cyc}}
5757
export CDUMP=${CDUMP:-${RUN:-"gdas"}}
5858
export COMPONENT=${COMPONENT:-atmos}
59-
59+
export rCDUMP="gdas"
6060

6161
##############################################
6262
# Begin JOB SPECIFIC work

jobs/JGDAS_ENKF_SFC

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ fi
8080
export OPREFIX="${CDUMP}.t${cyc}z."
8181
export APREFIX="${CDUMP}.t${cyc}z."
8282
export APREFIX_ENKF="${CDUMP_ENKF}.t${cyc}z."
83-
export GPREFIX="${CDUMP}.t${gcyc}z."
83+
export GPREFIX="${GDUMP}.t${gcyc}z."
8484
export GSUFFIX=${GSUFFIX:-$SUFFIX}
8585
export ASUFFIX=${ASUFFIX:-$SUFFIX}
8686

@@ -94,10 +94,10 @@ fi
9494

9595
# COMIN, COMIN_ENS and COMIN_GES_ENS are used in script
9696
export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT"
97-
export COMIN_GES="$ROTDIR/$CDUMP.$gPDY/$gcyc/$COMPONENT"
97+
export COMIN_GES="$ROTDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT"
9898
export COMIN_ENS="$ROTDIR/enkf$CDUMP_ENKF.$PDY/$cyc/$COMPONENT"
9999
export COMOUT_ENS="$ROTDIR/enkf$CDUMP.$PDY/$cyc/$COMPONENT"
100-
export COMIN_GES_ENS="$ROTDIR/enkf$CDUMP.$gPDY/$gcyc/$COMPONENT"
100+
export COMIN_GES_ENS="$ROTDIR/enkf$GDUMP.$gPDY/$gcyc/$COMPONENT"
101101

102102

103103
###############################################################

parm/config/config.anal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if [[ "$CDUMP" = "gfs" ]] ; then
2020
export USE_RADSTAT="NO" # This can be only used when bias correction is not-zero.
2121
export GENDIAG="NO"
2222
export SETUP='diag_rad=.false.,diag_pcp=.false.,diag_conv=.false.,diag_ozone=.false.,write_diag(3)=.false.,niter(2)=100,'
23-
export DIAG_TARBALL="NO"
23+
export DIAG_TARBALL="YES"
2424
fi
2525

2626
export npe_gsi=$npe_anal

ush/calcanl_gfs.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,6 @@ def calcanl_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, ASuffix,
2121
print('calcanl_gfs beginning at: ',datetime.datetime.utcnow())
2222

2323
IAUHH = IAUHrs
24-
if Cdump == "gfs":
25-
IAUHH = list(map(int,'6'))
26-
else:
27-
IAUHH = IAUHrs
2824

2925
######## copy and link files
3026
if DoIAU and l4DEnsVar and Write4Danl:
@@ -40,7 +36,7 @@ def calcanl_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, ASuffix,
4036
gsi_utils.link_file(RunDir+'/siganl', CalcAnlDir+'/anl.06')
4137
gsi_utils.copy_file(ExecChgresInc, CalcAnlDir+'/chgres_inc.x')
4238
# for ensemble res analysis
43-
if Cdump == "gdas":
39+
if Cdump in ["gdas", "gfs"]:
4440
CalcAnlDir = RunDir+'/calcanl_ensres_'+format(fh, '02')
4541
if not os.path.exists(CalcAnlDir):
4642
gsi_utils.make_dir(CalcAnlDir)
@@ -304,7 +300,7 @@ def calcanl_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, ASuffix,
304300

305301

306302
######## compute determinstic analysis on ensemble resolution
307-
if Cdump == "gdas":
303+
if Cdump in ["gdas", "gfs"]:
308304
chgres_jobs = []
309305
for fh in IAUHH:
310306
# first check to see if guess file exists

ush/forecast_predet.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ FV3_GFS_predet(){
208208
print_freq=${print_freq:-6}
209209

210210
#-------------------------------------------------------
211-
if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 ]; then
211+
if [ $CDUMP = "gfs" ] && [ $rst_invt1 -gt 0 ] && [ $MEMBER -lt 0 ]; then
212212
RSTDIR_ATM=${RSTDIR:-$ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos/RERUN_RESTART
213213
if [ ! -d $RSTDIR_ATM ]; then mkdir -p $RSTDIR_ATM ; fi
214214
$NLN $RSTDIR_ATM RESTART
@@ -300,5 +300,5 @@ MOM6_predet(){
300300
if [ ! -d $DATA/OUTPUT ]; then mkdir -p $DATA/OUTPUT; fi
301301
if [ ! -d $DATA/MOM6_OUTPUT ]; then mkdir -p $DATA/MOM6_OUTPUT; fi
302302
if [ ! -d $DATA/MOM6_RESTART ]; then mkdir -p $DATA/MOM6_RESTART; fi
303-
cd $DATA || exit 8
303+
cd "${DATA}" || exit 8
304304
}

workflow/applications.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -359,15 +359,15 @@ def _get_cycled_task_names(self):
359359
wave_bndpnt_tasks = ['wavepostbndpnt', 'wavepostbndpntbll']
360360
wave_post_tasks = ['wavepostsbs', 'wavepostpnt']
361361

362-
hybrid_gdas_or_gfs_tasks = []
363-
hybrid_gdas_tasks = []
362+
hybrid_tasks = []
363+
hybrid_after_eupd_tasks = []
364364
if self.do_hybvar:
365365
if self.do_jediens:
366-
hybrid_gdas_or_gfs_tasks += ['atmensanalprep', 'atmensanalrun', 'atmensanalpost', 'echgres']
366+
hybrid_tasks += ['atmensanalprep', 'atmensanalrun', 'atmensanalpost', 'echgres']
367367
else:
368-
hybrid_gdas_or_gfs_tasks += ['eobs', 'eupd', 'echgres']
369-
hybrid_gdas_or_gfs_tasks += ['ediag'] if self.lobsdiag_forenkf else ['eomg']
370-
hybrid_gdas_tasks += ['ecen', 'esfc', 'efcs', 'epos', 'earc']
368+
hybrid_tasks += ['eobs', 'eupd', 'echgres']
369+
hybrid_tasks += ['ediag'] if self.lobsdiag_forenkf else ['eomg']
370+
hybrid_after_eupd_tasks += ['ecen', 'esfc', 'efcs', 'epos', 'earc']
371371

372372
# Collect all "gdas" cycle tasks
373373
gdas_tasks = gdas_gfs_common_tasks_before_fcst.copy()
@@ -386,8 +386,8 @@ def _get_cycled_task_names(self):
386386

387387
if self.do_hybvar:
388388
if 'gdas' in self.eupd_cdumps:
389-
gdas_tasks += hybrid_gdas_or_gfs_tasks
390-
gdas_tasks += hybrid_gdas_tasks
389+
gdas_tasks += hybrid_tasks
390+
gdas_tasks += hybrid_after_eupd_tasks
391391

392392
if self.do_wave and 'gdas' in self.wave_cdumps:
393393
if self.do_wave_bnd:
@@ -408,9 +408,10 @@ def _get_cycled_task_names(self):
408408

409409
if self.do_metp:
410410
gfs_tasks += ['metp']
411-
412411
if self.do_hybvar and 'gfs' in self.eupd_cdumps:
413-
gfs_tasks += hybrid_gdas_or_gfs_tasks
412+
gfs_tasks += hybrid_tasks
413+
gfs_tasks += hybrid_after_eupd_tasks
414+
gfs_tasks.remove("echgres")
414415

415416
if self.do_wave and 'gfs' in self.wave_cdumps:
416417
if self.do_wave_bnd:

workflow/rocoto/workflow_tasks.py

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,8 +1079,6 @@ def atmensanalpost(self):
10791079

10801080
def ecen(self):
10811081

1082-
self._is_this_a_gdas_task(self.cdump, 'ecen')
1083-
10841082
def _get_ecengroups():
10851083

10861084
if self._base.get('DOIAU_ENKF', False):
@@ -1104,15 +1102,13 @@ def _get_ecengroups():
11041102

11051103
return grp, dep, lst
11061104

1107-
eupd_cdump = 'gdas' if 'gdas' in self.app_config.eupd_cdumps else 'gfs'
1108-
11091105
deps = []
11101106
dep_dict = {'type': 'task', 'name': f'{self.cdump}analcalc'}
11111107
deps.append(rocoto.add_dependency(dep_dict))
11121108
if self.app_config.do_jediens:
1113-
dep_dict = {'type': 'task', 'name': f'{eupd_cdump}atmensanalrun'}
1109+
dep_dict = {'type': 'task', 'name': f'{self.cdump}atmensanalrun'}
11141110
else:
1115-
dep_dict = {'type': 'task', 'name': f'{eupd_cdump}eupd'}
1111+
dep_dict = {'type': 'task', 'name': f'{self.cdump}eupd'}
11161112
deps.append(rocoto.add_dependency(dep_dict))
11171113
dependencies = rocoto.create_dependency(dep_condition='and', dep=deps)
11181114

@@ -1133,29 +1129,25 @@ def _get_ecengroups():
11331129

11341130
def esfc(self):
11351131

1136-
self._is_this_a_gdas_task(self.cdump, 'esfc')
1137-
1138-
eupd_cdump = 'gdas' if 'gdas' in self.app_config.eupd_cdumps else 'gfs'
1132+
#eupd_cdump = 'gdas' if 'gdas' in self.app_config.eupd_cdumps else 'gfs'
11391133

11401134
deps = []
11411135
dep_dict = {'type': 'task', 'name': f'{self.cdump}analcalc'}
11421136
deps.append(rocoto.add_dependency(dep_dict))
11431137
if self.app_config.do_jediens:
1144-
dep_dict = {'type': 'task', 'name': f'{eupd_cdump}atmensanalrun'}
1138+
dep_dict = {'type': 'task', 'name': f'{self.cdump}atmensanalrun'}
11451139
else:
1146-
dep_dict = {'type': 'task', 'name': f'{eupd_cdump}eupd'}
1140+
dep_dict = {'type': 'task', 'name': f'{self.cdump}eupd'}
11471141
deps.append(rocoto.add_dependency(dep_dict))
11481142
dependencies = rocoto.create_dependency(dep_condition='and', dep=deps)
11491143

11501144
resources = self.get_resource('esfc')
1151-
task = create_wf_task('esfc', resources, cdump='gdas', envar=self.envars, dependency=dependencies)
1145+
task = create_wf_task('esfc', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies)
11521146

11531147
return task
11541148

11551149
def efcs(self):
11561150

1157-
self._is_this_a_gdas_task(self.cdump, 'efcs')
1158-
11591151
deps = []
11601152
dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ecmn'}
11611153
deps.append(rocoto.add_dependency(dep_dict))
@@ -1199,8 +1191,6 @@ def echgres(self):
11991191

12001192
def epos(self):
12011193

1202-
self._is_this_a_gdas_task(self.cdump, 'epos')
1203-
12041194
def _get_eposgroups(epos):
12051195
fhmin = epos['FHMIN_ENKF']
12061196
fhmax = epos['FHMAX_ENKF']
@@ -1245,8 +1235,6 @@ def _get_eposgroups(epos):
12451235

12461236
def earc(self):
12471237

1248-
self._is_this_a_gdas_task(self.cdump, 'earc')
1249-
12501238
deps = []
12511239
dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmn'}
12521240
deps.append(rocoto.add_dependency(dep_dict))

0 commit comments

Comments
 (0)