From c6bcdce1f66b64c6708e6fa26531b3301ee87a3f Mon Sep 17 00:00:00 2001 From: "travis.j.elless" Date: Tue, 28 Jan 2025 20:28:54 +0000 Subject: [PATCH 1/5] update workflow directory files --- workflow/applications/gfs_cycled.py | 2 +- workflow/rocoto/gfs_tasks.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/workflow/applications/gfs_cycled.py b/workflow/applications/gfs_cycled.py index 7a2c812a0d8..2bf793eafa9 100644 --- a/workflow/applications/gfs_cycled.py +++ b/workflow/applications/gfs_cycled.py @@ -313,8 +313,8 @@ def get_task_names(self): task_names[run] += ['eobs', 'eupd'] 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('esnowanl') if options['do_jedisnowda'] 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', 'earc', 'cleanup'] diff --git a/workflow/rocoto/gfs_tasks.py b/workflow/rocoto/gfs_tasks.py index 2b2bd30b81f..c3a3bd96f42 100644 --- a/workflow/rocoto/gfs_tasks.py +++ b/workflow/rocoto/gfs_tasks.py @@ -619,7 +619,7 @@ def snowanl(self): def esnowanl(self): deps = [] - dep_dict = {'type': 'metatask', 'name': f'{self.run}_epmn', 'offset': f"-{timedelta_to_HMS(self._base['interval_gdas'])}"} + dep_dict = {'type': 'metatask', 'name': 'enkfgdas_epmn', 'offset': f"-{timedelta_to_HMS(self._base['interval_gdas'])}"} deps.append(rocoto.add_dependency(dep_dict)) dep_dict = {'type': 'task', 'name': f"{self.run.replace('enkf', '')}_prep"} deps.append(rocoto.add_dependency(dep_dict)) From ebfd55ad0cd7d5dff7f4130d7d356e61acb7247f Mon Sep 17 00:00:00 2001 From: "travis.j.elless" Date: Tue, 28 Jan 2025 20:57:53 +0000 Subject: [PATCH 2/5] first stab at rotating member --- jobs/JGLOBAL_SNOWENS_ANALYSIS | 10 ++++++++++ parm/gdas/snow_stage_ens_update.yaml.j2 | 8 ++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/jobs/JGLOBAL_SNOWENS_ANALYSIS b/jobs/JGLOBAL_SNOWENS_ANALYSIS index ca23347bcab..e3119b4a840 100755 --- a/jobs/JGLOBAL_SNOWENS_ANALYSIS +++ b/jobs/JGLOBAL_SNOWENS_ANALYSIS @@ -23,6 +23,16 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \ COMOUT_ATMOS_ANALYSIS:COM_ATMOS_ANALYSIS_TMPL \ COMOUT_CONF:COM_CONF_TMPL +NMEM_ENS_MAX=${NMEM_ENS:-80} +if [ "${RUN}" = "enkfgfs" ]; then + NMEM_ENS=${NMEM_ENS_GFS:-30} + ec_offset=${NMEM_ENS_GFS_OFFSET:-20} + mem_offset=$((ec_offset * cyc/6)) +else + NMEM_ENS=${NMEM_ENS:-80} + mem_offset=0 +fi + for imem in $(seq 1 "${NMEM_ENS}"); do memchar="mem$(printf %03i "${imem}")" MEMDIR=${memchar} YMD=${PDY} HH=${cyc} declare_from_tmpl \ diff --git a/parm/gdas/snow_stage_ens_update.yaml.j2 b/parm/gdas/snow_stage_ens_update.yaml.j2 index d8b1d42d001..3c19eac254b 100644 --- a/parm/gdas/snow_stage_ens_update.yaml.j2 +++ b/parm/gdas/snow_stage_ens_update.yaml.j2 @@ -22,13 +22,17 @@ copy: # copy ensemble background files ###################################### {% for mem in range(1, NMEM_ENS + 1) %} + #apply offset for rotating member if needed + smem=$((imem + mem_offset)) + if (( smem > NMEM_ENS_MAX )) + smem=$((smem - NMEM_ENS_MAX)) # define variables # Declare a dict of search and replace terms to run on each template {% set tmpl_dict = {'${ROTDIR}':ROTDIR, - '${RUN}':RUN, + '${RUN}':"enkfgdas", '${YMD}':previous_cycle | to_YMD, '${HH}':previous_cycle | strftime("%H"), - '${MEMDIR}':"mem" + '%03d' % mem} %} + '${MEMDIR}':"mem" + '%03d' % smem} %} # copy coupler file - ["{{ COM_ATMOS_RESTART_TMPL | replace_tmpl(tmpl_dict) }}/{{ current_cycle | to_fv3time }}.coupler.res", "{{ DATA }}/bkg/mem{{ '%03d' % mem }}/{{ current_cycle | to_fv3time }}.coupler.res"] From 7b63be4356b3c0168633db935a4e1a37d6e24f06 Mon Sep 17 00:00:00 2001 From: "travis.j.elless" Date: Wed, 29 Jan 2025 16:19:04 +0000 Subject: [PATCH 3/5] update to allow rotating member to work --- jobs/JGLOBAL_SNOWENS_ANALYSIS | 7 +++---- parm/gdas/snow_stage_ens_update.yaml.j2 | 10 +++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/jobs/JGLOBAL_SNOWENS_ANALYSIS b/jobs/JGLOBAL_SNOWENS_ANALYSIS index e3119b4a840..e832f8b0d4b 100755 --- a/jobs/JGLOBAL_SNOWENS_ANALYSIS +++ b/jobs/JGLOBAL_SNOWENS_ANALYSIS @@ -23,16 +23,15 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \ COMOUT_ATMOS_ANALYSIS:COM_ATMOS_ANALYSIS_TMPL \ COMOUT_CONF:COM_CONF_TMPL -NMEM_ENS_MAX=${NMEM_ENS:-80} +export NMEM_ENS_MAX=${NMEM_ENS:-80} if [ "${RUN}" = "enkfgfs" ]; then NMEM_ENS=${NMEM_ENS_GFS:-30} ec_offset=${NMEM_ENS_GFS_OFFSET:-20} - mem_offset=$((ec_offset * cyc/6)) + export mem_offset=$((ec_offset * cyc/6)) else NMEM_ENS=${NMEM_ENS:-80} - mem_offset=0 + export mem_offset=0 fi - for imem in $(seq 1 "${NMEM_ENS}"); do memchar="mem$(printf %03i "${imem}")" MEMDIR=${memchar} YMD=${PDY} HH=${cyc} declare_from_tmpl \ diff --git a/parm/gdas/snow_stage_ens_update.yaml.j2 b/parm/gdas/snow_stage_ens_update.yaml.j2 index 3c19eac254b..cae119ee744 100644 --- a/parm/gdas/snow_stage_ens_update.yaml.j2 +++ b/parm/gdas/snow_stage_ens_update.yaml.j2 @@ -22,17 +22,17 @@ copy: # copy ensemble background files ###################################### {% for mem in range(1, NMEM_ENS + 1) %} - #apply offset for rotating member if needed - smem=$((imem + mem_offset)) - if (( smem > NMEM_ENS_MAX )) - smem=$((smem - NMEM_ENS_MAX)) + {% set gmem = mem+mem_offset %} + {% if gmem > NMEM_ENS_MAX %} + {% set gmem = gmem-NMEM_ENS_MAX %} + {% endif %} # define variables # Declare a dict of search and replace terms to run on each template {% set tmpl_dict = {'${ROTDIR}':ROTDIR, '${RUN}':"enkfgdas", '${YMD}':previous_cycle | to_YMD, '${HH}':previous_cycle | strftime("%H"), - '${MEMDIR}':"mem" + '%03d' % smem} %} + '${MEMDIR}':"mem" + '%03d' % gmem} %} # copy coupler file - ["{{ COM_ATMOS_RESTART_TMPL | replace_tmpl(tmpl_dict) }}/{{ current_cycle | to_fv3time }}.coupler.res", "{{ DATA }}/bkg/mem{{ '%03d' % mem }}/{{ current_cycle | to_fv3time }}.coupler.res"] From 24925024c1428cd8132e0a5ce6b0eb679bb52a25 Mon Sep 17 00:00:00 2001 From: "travis.j.elless" Date: Wed, 29 Jan 2025 16:47:30 +0000 Subject: [PATCH 4/5] move job defining variable location --- jobs/JGLOBAL_SNOWENS_ANALYSIS | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/jobs/JGLOBAL_SNOWENS_ANALYSIS b/jobs/JGLOBAL_SNOWENS_ANALYSIS index e832f8b0d4b..9d4d5eef362 100755 --- a/jobs/JGLOBAL_SNOWENS_ANALYSIS +++ b/jobs/JGLOBAL_SNOWENS_ANALYSIS @@ -13,6 +13,15 @@ export GDUMP CDUMP=${RUN/enkf} export CDUMP +export NMEM_ENS_MAX=${NMEM_ENS:-80} +if [ "${RUN}" = "enkfgfs" ]; then + NMEM_ENS=${NMEM_ENS_GFS:-30} + ec_offset=${NMEM_ENS_GFS_OFFSET:-20} + export mem_offset=$((ec_offset * cyc/6)) +else + NMEM_ENS=${NMEM_ENS:-80} + export mem_offset=0 +fi ############################################## # Begin JOB SPECIFIC work ############################################## @@ -23,15 +32,6 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \ COMOUT_ATMOS_ANALYSIS:COM_ATMOS_ANALYSIS_TMPL \ COMOUT_CONF:COM_CONF_TMPL -export NMEM_ENS_MAX=${NMEM_ENS:-80} -if [ "${RUN}" = "enkfgfs" ]; then - NMEM_ENS=${NMEM_ENS_GFS:-30} - ec_offset=${NMEM_ENS_GFS_OFFSET:-20} - export mem_offset=$((ec_offset * cyc/6)) -else - NMEM_ENS=${NMEM_ENS:-80} - export mem_offset=0 -fi for imem in $(seq 1 "${NMEM_ENS}"); do memchar="mem$(printf %03i "${imem}")" MEMDIR=${memchar} YMD=${PDY} HH=${cyc} declare_from_tmpl \ From 9258e50b99bb2fc18d266717356a95dd2aa316c4 Mon Sep 17 00:00:00 2001 From: Travis Elless <113720457+TravisElless-NOAA@users.noreply.github.com> Date: Wed, 29 Jan 2025 22:07:39 +0000 Subject: [PATCH 5/5] clean up JGLOBAL_SNOWENS_ANALYSIS statements Co-authored-by: Rahul Mahajan --- jobs/JGLOBAL_SNOWENS_ANALYSIS | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/jobs/JGLOBAL_SNOWENS_ANALYSIS b/jobs/JGLOBAL_SNOWENS_ANALYSIS index 9d4d5eef362..9e532052a82 100755 --- a/jobs/JGLOBAL_SNOWENS_ANALYSIS +++ b/jobs/JGLOBAL_SNOWENS_ANALYSIS @@ -13,13 +13,11 @@ export GDUMP CDUMP=${RUN/enkf} export CDUMP -export NMEM_ENS_MAX=${NMEM_ENS:-80} -if [ "${RUN}" = "enkfgfs" ]; then - NMEM_ENS=${NMEM_ENS_GFS:-30} - ec_offset=${NMEM_ENS_GFS_OFFSET:-20} - export mem_offset=$((ec_offset * cyc/6)) +export NMEM_ENS_MAX=${NMEM_ENS} +if [[ "${RUN}" == "enkfgfs" ]]; then + NMEM_ENS=${NMEM_ENS_GFS} + export mem_offset=$((NMEM_ENS_GFS_OFFSET * cyc/6)) else - NMEM_ENS=${NMEM_ENS:-80} export mem_offset=0 fi ##############################################