Skip to content

Commit 113085c

Browse files
committed
minimal intervention to create a data-atmosphere xml
1 parent 1ed89c7 commit 113085c

File tree

5 files changed

+63
-26
lines changed

5 files changed

+63
-26
lines changed

parm/config/config.base.emc.dyn

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn}
152152
export APP=@APP@
153153

154154
# Defaults:
155+
export DO_ATM="YES"
155156
export DO_COUPLED="NO"
156157
export DO_WAVE="NO"
157158
export DO_OCN="NO"
@@ -164,7 +165,6 @@ export cplwav2atm=".false."
164165

165166
case "${APP}" in
166167
ATM)
167-
echo "APP=ATM; will use defaults"
168168
export confignamevarfornems="atm"
169169
;;
170170
ATMA)
@@ -177,6 +177,11 @@ case "${APP}" in
177177
export WAVE_CDUMP="both"
178178
export confignamevarfornems="leapfrog_atm_wav"
179179
;;
180+
NG-GODAS)
181+
export DO_ATM="NO"
182+
export DO_OCN="YES"
183+
export DO_ICE="YES"
184+
;;
180185
S2S*)
181186
export DO_COUPLED="YES"
182187
export DO_OCN="YES"

parm/config/config.coupled_ic

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@ export CPL_ATMIC=GEFS-NoahMP-aerosols-p8c
1717
export CPL_ICEIC=CPC
1818
export CPL_OCNIC=CPC3Dvar
1919
export CPL_WAVIC=GEFSwave20210528v2
20+
export CPL_DATM=CDEPS_DATM
2021

2122
echo "END: config.coupled_ic"

workflow/applications.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def __init__(self, configuration: Configuration) -> None:
9393

9494
self.model_app = _base.get('APP', 'ATM')
9595
self.do_hybvar = _base.get('DOHYBVAR', False)
96+
self.do_atm = _base.get('DO_ATM', True)
9697
self.do_wave = _base.get('DO_WAVE', False)
9798
self.do_wave_bnd = _base.get('DOBNDPNT_WAVE', False)
9899
self.do_ocean = _base.get('DO_OCN', False)
@@ -181,12 +182,12 @@ def _cycled_configs(self):
181182

182183
configs += ['sfcanl', 'analcalc', 'fcst', 'post', 'vrfy', 'arch']
183184

184-
185+
185186
if self.do_gldas:
186187
configs += ['gldas']
187188

188189
if self.do_hybvar:
189-
if self.do_jediens:
190+
if self.do_jediens:
190191
configs += ['atmensanalprep', 'atmensanalrun', 'atmensanalpost']
191192
else:
192193
configs += ['eobs', 'eomg', 'ediag', 'eupd']
@@ -224,9 +225,14 @@ def _forecast_only_configs(self):
224225
Returns the config_files that are involved in the forecast-only app
225226
"""
226227

227-
configs = ['fcst', 'post', 'vrfy', 'arch']
228+
configs = ['fcst']
229+
230+
if self.do_atm:
231+
configs += ['post', 'vrfy']
232+
233+
configs += ['arch']
228234

229-
if self.model_app in ['S2S', 'S2SW', 'S2SWA']:
235+
if self.model_app in ['S2S', 'S2SW', 'S2SWA', 'NG-GODAS']:
230236
configs += ['coupled_ic']
231237
else:
232238
configs += ['init']
@@ -239,7 +245,7 @@ def _forecast_only_configs(self):
239245
if self.do_ocean or self.do_ice:
240246
configs += ['ocnpost']
241247

242-
if self.do_metp:
248+
if self.do_atm and self.do_metp:
243249
configs += ['metp']
244250

245251
if self.do_gempak:
@@ -436,7 +442,7 @@ def _get_forecast_only_task_names(self):
436442

437443
tasks = []
438444

439-
if 'S2S' in self.model_app:
445+
if self.model_app in ['S2S', 'S2SW', 'S2SWA', 'NG-GODAS']:
440446
tasks += ['coupled_ic']
441447
else:
442448
if self.do_hpssarch:
@@ -452,12 +458,16 @@ def _get_forecast_only_task_names(self):
452458

453459
tasks += ['fcst']
454460

455-
tasks += ['post']
456-
if 'S2S' in self.model_app:
461+
if self.do_atm:
462+
tasks += ['post']
463+
464+
if self.model_app in ['S2S', 'S2SW', 'S2SWA', 'NG-GODAS']:
457465
tasks += ['ocnpost']
458466

459-
tasks += ['vrfy']
460-
if self.do_metp:
467+
if self.do_atm:
468+
tasks += ['vrfy']
469+
470+
if self.do_atm and self.do_metp:
461471
tasks += ['metp']
462472

463473
if self.do_wave:

workflow/rocoto/workflow_tasks.py

Lines changed: 35 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,20 @@ def coupled_ic(self):
140140
deps = []
141141

142142
# Atm ICs
143-
atm_res = self._base.get('CASE', 'C384')
144-
prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_ATMIC']}/@Y@m@d@H/{self.cdump}"
145-
for file in ['gfs_ctrl.nc'] + \
146-
[f'{datatype}_data.tile{tile}.nc'
147-
for datatype in ['gfs', 'sfc']
148-
for tile in range(1, self.n_tiles + 1)]:
149-
data = f"{prefix}/{atm_res}/INPUT/{file}"
143+
if self.app_config.do_atm:
144+
atm_res = self._base.get('CASE', 'C384')
145+
prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_ATMIC']}/@Y@m@d@H/{self.cdump}"
146+
for file in ['gfs_ctrl.nc'] + \
147+
[f'{datatype}_data.tile{tile}.nc'
148+
for datatype in ['gfs', 'sfc']
149+
for tile in range(1, self.n_tiles + 1)]:
150+
data = f"{prefix}/{atm_res}/INPUT/{file}"
151+
dep_dict = {'type': 'data', 'data': data}
152+
deps.append(rocoto.add_dependency(dep_dict))
153+
else: # data-atmosphere
154+
# TODO - need more information about how these forcings are stored
155+
prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_DATM']}/@Y@m@d@H"
156+
data = f"{prefix}/gefs.@Y@m.nc"
150157
dep_dict = {'type': 'data', 'data': data}
151158
deps.append(rocoto.add_dependency(dep_dict))
152159

@@ -474,14 +481,28 @@ def fcst(self):
474481
@property
475482
def _fcst_forecast_only(self):
476483
dependencies = []
484+
477485
deps = []
478-
data = f'&ROTDIR;/{self.cdump}.@Y@m@d/@H/atmos/INPUT/sfc_data.tile6.nc'
479-
dep_dict = {'type': 'data', 'data': data}
480-
deps.append(rocoto.add_dependency(dep_dict))
481-
data = f'&ROTDIR;/{self.cdump}.@Y@m@d/@H/atmos/RESTART/@Y@m@d.@H0000.sfcanl_data.tile6.nc'
482-
dep_dict = {'type': 'data', 'data': data}
483-
deps.append(rocoto.add_dependency(dep_dict))
484-
dependencies.append(rocoto.create_dependency(dep_condition='or', dep=deps))
486+
if self.app_config.do_atm:
487+
data = f'&ROTDIR;/{self.cdump}.@Y@m@d/@H/atmos/INPUT/sfc_data.tile6.nc'
488+
dep_dict = {'type': 'data', 'data': data}
489+
deps.append(rocoto.add_dependency(dep_dict))
490+
data = f'&ROTDIR;/{self.cdump}.@Y@m@d/@H/atmos/RESTART/@Y@m@d.@H0000.sfcanl_data.tile6.nc'
491+
dep_dict = {'type': 'data', 'data': data}
492+
deps.append(rocoto.add_dependency(dep_dict))
493+
dependencies.append(rocoto.create_dependency(dep_condition='or', dep=deps))
494+
495+
else: # data-atmosphere
496+
data = f'&ICSDIR;/@Y@m@d@H/datm/gefs.@Y@m.nc' # GEFS forcing
497+
dep_dict = {'type': 'data', 'data': data}
498+
deps.append(rocoto.add_dependency(dep_dict))
499+
data = '&ICSDIR;/@Y@m@d@H/ocn/MOM.res.nc' # TODO - replace with actual ocean IC
500+
dep_dict = {'type': 'data', 'data': data}
501+
deps.append(rocoto.add_dependency(dep_dict))
502+
data = '&ICSDIR;/@Y@m@d@H/ice/cice5_model.res.nc' # TODO - replace with actual ice IC
503+
dep_dict = {'type': 'data', 'data': data}
504+
deps.append(rocoto.add_dependency(dep_dict))
505+
dependencies.append(rocoto.create_dependency(dep_condition='and', dep=deps))
485506

486507
if self.app_config.do_wave and self.cdump in self.app_config.wave_cdumps:
487508
wave_job = 'waveprep' if self.app_config.model_app in ['ATMW'] else 'waveinit'

workflow/setup_expt.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def input_args():
232232

233233
# forecast only mode additional arguments
234234
forecasts.add_argument('--app', help='UFS application', type=str, choices=[
235-
'ATM', 'ATMA', 'ATMW', 'S2S', 'S2SW', 'S2SWA'], required=False, default='ATM')
235+
'ATM', 'ATMA', 'ATMW', 'S2S', 'S2SW', 'S2SWA', 'NG-GODAS'], required=False, default='ATM')
236236

237237
args = parser.parse_args()
238238

0 commit comments

Comments
 (0)