From 4dcc0b643fd77a5558251ff4c1829e9b1d77083b Mon Sep 17 00:00:00 2001 From: Anna Shlyaeva Date: Sun, 23 Mar 2025 15:52:52 +0000 Subject: [PATCH 1/3] Save marine LETKF yaml --- ush/python/pygfs/task/marine_letkf.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ush/python/pygfs/task/marine_letkf.py b/ush/python/pygfs/task/marine_letkf.py index 02f4e2a7a45..ff6641682bc 100644 --- a/ush/python/pygfs/task/marine_letkf.py +++ b/ush/python/pygfs/task/marine_letkf.py @@ -186,7 +186,7 @@ def finalize(self): keys = ['current_cycle', 'DATA', 'NMEM_ENS', 'WINDOW_BEGIN', 'GDUMP_ENS', 'PARMgfs', 'ROTDIR', 'COM_OCEAN_LETKF_TMPL', 'COM_ICE_LETKF_TMPL', 'COMOUT_OCEAN_LETKF', 'COMOUT_ICE_LETKF', 'WINDOW_MIDDLE', - 'MARINE_OBS_LIST_YAML'] + 'MARINE_OBS_LIST_YAML', 'letkf_yaml_file'] for key in keys: letkfsaveconf[key] = self.task_config[key] @@ -205,5 +205,9 @@ def finalize(self): # stage the desired diag files FileHandler({'mkdir': [os.path.join(letkfsaveconf.COMOUT_OCEAN_LETKF, 'diags')]}).sync() FileHandler({'copy': obs_files_to_copy}).sync() + # yaml configurations + yamls_to_copy = [] + yamls_to_copy.append([letkfsaveconf.letkf_yaml_file, os.path.join(letkfsaveconf.COMOUT_OCEAN_LETKF, 'letkf.yaml')]) + FileHandler({'copy': yamls_to_copy}).sync() letkf_save_list = parse_j2yaml(self.task_config.MARINE_LETKF_SAVE_YAML_TMPL, letkfsaveconf) FileHandler(letkf_save_list).sync() From ad2a5daac887484d3cb64c5412775d125afce2dc Mon Sep 17 00:00:00 2001 From: Anna Shlyaeva Date: Tue, 3 Jun 2025 21:43:51 +0000 Subject: [PATCH 2/3] Updates to save in COM_CONF and to archive --- jobs/JGLOBAL_MARINE_ANALYSIS_LETKF | 4 ++++ parm/archive/enkf_marine_grp.yaml.j2 | 2 +- parm/archive/master_enkf.yaml.j2 | 6 ++++++ ush/python/pygfs/task/marine_letkf.py | 5 +++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF b/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF index edd88d20277..5b121b8caae 100755 --- a/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF +++ b/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF @@ -30,6 +30,10 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \ COMOUT_OCEAN_LETKF:COM_OCEAN_LETKF_TMPL \ COMOUT_ICE_LETKF:COM_ICE_LETKF_TMPL +RUN=${GDUMP_ENS} YMD=${PDY} HH=${cyc} MEMDIR="ensstat" declare_from_tmpl -rx \ + COMOUT_CONF:COM_CONF_TMPL + +if [[ ! -d ${COMOUT_CONF} ]]; then mkdir -p "${COMOUT_CONF}"; fi ############################################## # Begin JOB SPECIFIC work ############################################## diff --git a/parm/archive/enkf_marine_grp.yaml.j2 b/parm/archive/enkf_marine_grp.yaml.j2 index 9f9d289fd0c..fcdfba2de11 100644 --- a/parm/archive/enkf_marine_grp.yaml.j2 +++ b/parm/archive/enkf_marine_grp.yaml.j2 @@ -12,7 +12,6 @@ enkf_marine_grp: {% set COMIN_ICE_LETKF_MEM = COMIN_ICE_LETKF_MEM_list[imem] %} {% set COMIN_ICE_HISTORY_MEM = COMIN_ICE_HISTORY_MEM_list[imem] %} - # Forecast data {% if is_gdas %} {% for fhr in range(3, 10, 3) %} @@ -36,5 +35,6 @@ enkf_marine_grp: {% if DOLETKF_OCN %} - "{{ COMIN_OCEAN_LETKF_MEM | relpath(ROTDIR) }}/{{ head_ocean }}analysis.nc" - "{{ COMIN_ICE_LETKF_MEM | relpath(ROTDIR) }}/{{ head_ice }}analysis.nc" + - "{{ COMIN_CONF | relpath(ROTDIR) }}/soca_letkf.yaml" {% endif %} {% endfor %} # first_group_mem to last_group_mem diff --git a/parm/archive/master_enkf.yaml.j2 b/parm/archive/master_enkf.yaml.j2 index 27706cad0b5..1d828baedf1 100644 --- a/parm/archive/master_enkf.yaml.j2 +++ b/parm/archive/master_enkf.yaml.j2 @@ -74,6 +74,12 @@ datasets: {% endfor %} + {% set tmpl_dict = ({ '${ROTDIR}':ROTDIR, + '${RUN}':RUN, + '${YMD}':cycle_YMD, + '${HH}':cycle_HH, + '${MEMDIR}': "ensstat"}) %} + {% set COMIN_CONF = COM_CONF_TMPL | replace_tmpl(tmpl_dict) %} # Archive member data {% filter indent(width=4) %} {% include "enkf_grp.yaml.j2" %} diff --git a/ush/python/pygfs/task/marine_letkf.py b/ush/python/pygfs/task/marine_letkf.py index 62b03661b3a..52094bffcf1 100644 --- a/ush/python/pygfs/task/marine_letkf.py +++ b/ush/python/pygfs/task/marine_letkf.py @@ -88,6 +88,7 @@ def initialize(self): 'COMIN_ICE_HISTORY_PREV', 'COMOUT_ICE_LETKF', 'COMOUT_OCEAN_LETKF', + 'COMOUT_CONF', 'DATA', 'DIST_HALO_SIZE', 'ENSPERT_RELPATH', @@ -205,7 +206,7 @@ def finalize(self): keys = ['current_cycle', 'DATA', 'NMEM_ENS', 'WINDOW_BEGIN', 'GDUMP_ENS', 'PARMgfs', 'ROTDIR', 'COM_OCEAN_LETKF_TMPL', 'COM_ICE_LETKF_TMPL', 'COMOUT_OCEAN_LETKF', 'COMOUT_ICE_LETKF', 'WINDOW_MIDDLE', - 'MARINE_OBS_LIST_YAML', 'letkf_yaml_file'] + 'MARINE_OBS_LIST_YAML', 'COMOUT_CONF', 'letkf_yaml_file'] for key in keys: letkfsaveconf[key] = self.task_config[key] @@ -225,7 +226,7 @@ def finalize(self): FileHandler({'copy': obs_files_to_copy}).sync() # yaml configurations yamls_to_copy = [] - yamls_to_copy.append([letkfsaveconf.letkf_yaml_file, os.path.join(letkfsaveconf.COMOUT_OCEAN_LETKF, 'letkf.yaml')]) + yamls_to_copy.append([letkfsaveconf.letkf_yaml_file, os.path.join(letkfsaveconf.COMOUT_CONF, 'soca_letkf.yaml')]) FileHandler({'copy': yamls_to_copy}).sync() letkf_save_list = parse_j2yaml(self.task_config.MARINE_LETKF_SAVE_YAML_TMPL, letkfsaveconf) FileHandler(letkf_save_list).sync() From f4a74d7bde8d8896276ef57efdc35de42b316764 Mon Sep 17 00:00:00 2001 From: Anna Shlyaeva Date: Thu, 5 Jun 2025 17:47:35 +0000 Subject: [PATCH 3/3] add TODO --- jobs/JGLOBAL_MARINE_ANALYSIS_LETKF | 1 + 1 file changed, 1 insertion(+) diff --git a/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF b/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF index 5b121b8caae..fefd69117e1 100755 --- a/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF +++ b/jobs/JGLOBAL_MARINE_ANALYSIS_LETKF @@ -30,6 +30,7 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \ COMOUT_OCEAN_LETKF:COM_OCEAN_LETKF_TMPL \ COMOUT_ICE_LETKF:COM_ICE_LETKF_TMPL +# TODO: remove explicit RUN specification once https://github.com/NOAA-EMC/global-workflow/issues/3767 is fixed RUN=${GDUMP_ENS} YMD=${PDY} HH=${cyc} MEMDIR="ensstat" declare_from_tmpl -rx \ COMOUT_CONF:COM_CONF_TMPL