diff --git a/jobs/rocoto/wavepostsbs.sh b/jobs/rocoto/wavepostsbs.sh index f4789210d8..793c233dd4 100755 --- a/jobs/rocoto/wavepostsbs.sh +++ b/jobs/rocoto/wavepostsbs.sh @@ -11,7 +11,7 @@ status=$? export job="wavepostsbs" export jobid="${job}.$$" - +export FORECAST_HOUR=$(( 10#${FHR3} )) ############################################################### # Execute the JJOB ${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_SBS diff --git a/scripts/exgfs_wave_post_gridded_sbs.sh b/scripts/exgfs_wave_post_gridded_sbs.sh index b0cca34bd1..352f11afc1 100755 --- a/scripts/exgfs_wave_post_gridded_sbs.sh +++ b/scripts/exgfs_wave_post_gridded_sbs.sh @@ -221,22 +221,21 @@ source "${USHgfs}/preamble.sh" # 1.a.2 Loop over forecast time to generate post files # When executed side-by-side, serial mode (cfp when run after the fcst step) # Contingency for RERUN=YES - if [ "${RERUN-NO}" = "YES" ]; then + if [ "${RERUN:-NO}" = "YES" ]; then fhr=$((FHRUN + FHMIN_WAV)) if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then FHINCG=$FHOUT_HF_WAV else FHINCG=$FHOUT_WAV fi - fhr=$((fhr + FHINCG)) + fhr=$((FORECAST_HOUR + FHINCG)) else - fhr=$FHMIN_WAV + fhr=$FORECAST_HOUR fi fhrg=$fhr sleep_interval=10 iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) - while [ $fhr -le $FHMAX_WAV ]; do - + if [ $fhr -le $FHMAX_WAV ]; then ymdh=$($NDATE $fhr ${PDY}${cyc}) YMD=$(echo $ymdh | cut -c1-8) HMS="$(echo $ymdh | cut -c9-10)0000" @@ -256,7 +255,7 @@ source "${USHgfs}/preamble.sh" export GRDIDATA=${DATA}/output_$YMDHMS # Gridded data (main part, need to be run side-by-side with forecast - + if [ $fhr = $fhrg ] then for wavGRD in ${waveGRD}; do @@ -269,7 +268,7 @@ source "${USHgfs}/preamble.sh" fi ${NLN} "${gfile}" "./out_grd.${wavGRD}" done - + if [ "$DOGRI_WAV" = 'YES' ] then nigrd=1 @@ -429,7 +428,7 @@ source "${USHgfs}/preamble.sh" fhr=$fhrg #loop with out_grd stride - done + fi # --------------------------------------------------------------------------- # # 7. Ending output diff --git a/workflow/rocoto/gefs_tasks.py b/workflow/rocoto/gefs_tasks.py index e9338c90df..7a49a53cc1 100644 --- a/workflow/rocoto/gefs_tasks.py +++ b/workflow/rocoto/gefs_tasks.py @@ -313,21 +313,21 @@ def atmos_ensstat(self): return task def wavepostsbs(self): + resources = self.get_resource('wavepostsbs') deps = [] dep_dict = {'type': 'metatask', 'name': f'gefs_fcst_mem#member#'} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep=deps) wave_post_envars = self.envars.copy() - postenvar_dict = {'ENSMEM': '#member#', + wave_post_dict = {'ENSMEM': '#member#', 'MEMDIR': 'mem#member#', + 'FHR3': '#fhr#', } - for key, value in postenvar_dict.items(): + for key, value in wave_post_dict.items(): wave_post_envars.append(rocoto.create_envar(name=key, value=str(value))) - resources = self.get_resource('wavepostsbs') - - task_name = f'gefs_wave_post_grid_mem#member#' + task_name = f'gefs_wave_post_grid_mem#member#_f#fhr#' task_dict = {'task_name': task_name, 'resources': resources, 'dependency': dependencies, @@ -339,11 +339,17 @@ def wavepostsbs(self): 'maxtries': '&MAXTRIES;' } - member_var_dict = {'member': ' '.join([str(mem).zfill(3) for mem in range(0, self.nmem + 1)])} - member_metatask_dict = {'task_name': 'gefs_wave_post_grid', - 'task_dict': task_dict, - 'var_dict': member_var_dict - } + fhrs = self._get_forecast_hours('gefs', self._configs['wavepostsbs']) + fhr_var_dict = {'fhr': ' '.join([f"{fhr:03d}" for fhr in fhrs])} + + fhr_metatask_dict = {'task_name': f'gefs_wave_post_grid_#member#', + 'task_dict': task_dict, + 'var_dict': fhr_var_dict} + + member_var_dict = {'member': ' '.join([f"{mem:03d}" for mem in range(0, self.nmem + 1)])} + member_metatask_dict = {'task_name': f'gefs_wave_post_grid', + 'task_dict': fhr_metatask_dict, + 'var_dict': member_var_dict} task = rocoto.create_task(member_metatask_dict) @@ -472,7 +478,7 @@ def wavepostpnt(self): def extractvars(self): deps = [] if self.app_config.do_wave: - dep_dict = {'type': 'task', 'name': 'gefs_wave_post_grid_mem#member#'} + dep_dict = {'type': 'metatask', 'name': 'gefs_wave_post_grid_#member#'} deps.append(rocoto.add_dependency(dep_dict)) if self.app_config.do_ocean: dep_dict = {'type': 'metatask', 'name': 'gefs_ocean_prod_#member#'}