From 369325183c1b108a7ee092af19915effb63d43b9 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Wed, 2 Apr 2025 14:59:58 +0000 Subject: [PATCH 1/7] case to test --- ci/cases/pr/C48mx500_hybAOWCDA.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ci/cases/pr/C48mx500_hybAOWCDA.yaml b/ci/cases/pr/C48mx500_hybAOWCDA.yaml index 3fc1e9e277d..73e94e85691 100644 --- a/ci/cases/pr/C48mx500_hybAOWCDA.yaml +++ b/ci/cases/pr/C48mx500_hybAOWCDA.yaml @@ -12,8 +12,9 @@ arguments: expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C48mx500/20241120 idate: 2021032418 - edate: 2021032500 - nens: 2 + #edate: 2021032500 + edate: 2021032700 + nens: 3 interval: 0 start: warm yaml: {{ HOMEgfs }}/ci/cases/yamls/soca_hyb_gfs_defaults_ci.yaml From ce9228af083a448730a0efdc9d66a5abac6958f5 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 3 Apr 2025 13:14:03 +0000 Subject: [PATCH 2/7] fix archiving to reflect current marineanlfinal --- parm/archive/gdasocean_analysis.yaml.j2 | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/parm/archive/gdasocean_analysis.yaml.j2 b/parm/archive/gdasocean_analysis.yaml.j2 index b7c057eacfb..3ea4faf3a91 100644 --- a/parm/archive/gdasocean_analysis.yaml.j2 +++ b/parm/archive/gdasocean_analysis.yaml.j2 @@ -18,9 +18,8 @@ gdasocean_analysis: {% if NMEM_ENS > 2 %} - '{{ COMIN_ICE_BMATRIX | relpath(ROTDIR) }}/{{ head }}ice.ens_weights.nc' - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.ens_weights.nc' - - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.recentering_error.nc' {% for diag_type in ["ssh_steric_stddev", "ssh_unbal_stddev", "ssh_total_stddev", "steric_explained_variance"] %} - - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.{{ diag_type }}.nc' + - '{{ COMIN_OCEAN_ANALYSIS | relpath(ROTDIR) }}/{{ head }}ocn.{{ diag_type }}.nc' {% endfor %} {% endif %} From 905169815cab8968565c8a1560ee2703a9651133 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 3 Apr 2025 13:22:08 +0000 Subject: [PATCH 3/7] reverting experiment settings to develop --- ci/cases/pr/C48mx500_hybAOWCDA.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/cases/pr/C48mx500_hybAOWCDA.yaml b/ci/cases/pr/C48mx500_hybAOWCDA.yaml index 73e94e85691..dc06aacf0c6 100644 --- a/ci/cases/pr/C48mx500_hybAOWCDA.yaml +++ b/ci/cases/pr/C48mx500_hybAOWCDA.yaml @@ -3,6 +3,7 @@ experiment: mode: cycled arguments: + account: {{ 'HPC_ACCOUNT' | getenv }} pslot: {{ 'pslot' | getenv }} app: S2S resdetatmos: 48 @@ -12,9 +13,8 @@ arguments: expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C48mx500/20241120 idate: 2021032418 - #edate: 2021032500 - edate: 2021032700 - nens: 3 + edate: 2021032500 + nens: 2 interval: 0 start: warm yaml: {{ HOMEgfs }}/ci/cases/yamls/soca_hyb_gfs_defaults_ci.yaml From 26089aa3f54f9bd1ab2af04aa29e0b26b577cd15 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 4 Apr 2025 14:29:40 +0000 Subject: [PATCH 4/7] cleanup, addition of bmat diags --- parm/archive/gdasocean_analysis.yaml.j2 | 3 ++- ush/python/pygfs/task/marine_bmat.py | 25 +++++++++++++++++++------ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/parm/archive/gdasocean_analysis.yaml.j2 b/parm/archive/gdasocean_analysis.yaml.j2 index 3ea4faf3a91..b7c057eacfb 100644 --- a/parm/archive/gdasocean_analysis.yaml.j2 +++ b/parm/archive/gdasocean_analysis.yaml.j2 @@ -18,8 +18,9 @@ gdasocean_analysis: {% if NMEM_ENS > 2 %} - '{{ COMIN_ICE_BMATRIX | relpath(ROTDIR) }}/{{ head }}ice.ens_weights.nc' - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.ens_weights.nc' + - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.recentering_error.nc' {% for diag_type in ["ssh_steric_stddev", "ssh_unbal_stddev", "ssh_total_stddev", "steric_explained_variance"] %} - - '{{ COMIN_OCEAN_ANALYSIS | relpath(ROTDIR) }}/{{ head }}ocn.{{ diag_type }}.nc' + - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.{{ diag_type }}.nc' {% endfor %} {% endif %} diff --git a/ush/python/pygfs/task/marine_bmat.py b/ush/python/pygfs/task/marine_bmat.py index e64c1527c30..c39ba030282 100644 --- a/ush/python/pygfs/task/marine_bmat.py +++ b/ush/python/pygfs/task/marine_bmat.py @@ -56,9 +56,11 @@ def __init__(self, config): # Create a local dictionary that is repeatedly used across this class local_dict = AttrDict( { + # 'cyc': os.getenv('cyc'), 'PARMsoca': os.path.join(self.task_config.PARMgfs, 'gdas', 'soca'), 'CALC_SCALE_EXEC': _calc_scale_exec, 'MARINE_WINDOW_BEGIN': _window_begin, + 'MARINE_WINDOW_BEGIN_ISO': _window_begin.strftime('%Y-%m-%dT%H:%M:%SZ'), 'MARINE_WINDOW_MIDDLE': self.task_config.current_cycle, 'MARINE_WINDOW_END': _window_end, 'MARINE_WINDOW_LENGTH': f"PT{self.task_config['assim_freq']}H", @@ -214,6 +216,11 @@ def finalize(self: Task) -> None: ---------- None """ + + RUN = self.task_config['RUN'] + cyc = self.task_config['cyc'] + APREFIX = self.task_config.APREFIX + # Copy the soca grid if it was created grid_file = os.path.join(self.task_config.DATA, 'soca_gridspec.nc') if os.path.exists(grid_file): @@ -227,7 +234,7 @@ def finalize(self: Task) -> None: for diff_type in ['hz', 'vt']: src = os.path.join(self.task_config.DATAstaticb, f"{diff_type}_ocean.nc") dest = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, - f"{self.task_config.APREFIX}{diff_type}_ocean.nc") + f"{APREFIX}{diff_type}_ocean.nc") diffusion_coeff_list.append([src, dest]) FileHandler({'copy': diffusion_coeff_list}).sync() @@ -242,7 +249,7 @@ def finalize(self: Task) -> None: os.path.join(self.task_config.DATAstaticb, f"ocn.bkgerr_stddev.nc")) src = os.path.join(self.task_config.DATAstaticb, f"ocn.bkgerr_stddev.nc") dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, - f"{self.task_config.APREFIX}ocean.bkgerr_stddev.nc") + f"{APREFIX}ocean.bkgerr_stddev.nc") diagb_list.append([src, dst]) # ice diag B @@ -250,7 +257,7 @@ def finalize(self: Task) -> None: os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.nc")) src = os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.nc") dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, - f"{self.task_config.APREFIX}ice.bkgerr_stddev.nc") + f"{APREFIX}ice.bkgerr_stddev.nc") diagb_list.append([src, dst]) FileHandler({'copy': diagb_list}).sync() @@ -258,18 +265,24 @@ def finalize(self: Task) -> None: # Copy the ensemble perturbation diagnostics to the ROTDIR if self.task_config.DOHYBVAR_OCN == "YES" or self.task_config.NMEM_ENS >= 2: window_middle_iso = self.task_config.MARINE_WINDOW_MIDDLE.strftime('%Y-%m-%dT%H:%M:%SZ') + window_begin_iso = self.task_config.MARINE_WINDOW_BEGIN.strftime('%Y-%m-%dT%H:%M:%SZ') weight_list = [] src = os.path.join(self.task_config.DATA, f"ocn.ens_weights.incr.{window_middle_iso}.nc") dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, - f"{self.task_config.APREFIX}ocean.ens_weights.nc") + f"{APREFIX}ocean.ens_weights.nc") weight_list.append([src, dst]) src = os.path.join(self.task_config.DATA, f"ice.ens_weights.incr.{window_middle_iso}.nc") dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, - f"{self.task_config.APREFIX}ice.ens_weights.nc") + f"{APREFIX}ice.ens_weights.nc") weight_list.append([src, dst]) # TODO(G): missing ssh_steric_stddev, ssh_unbal_stddev, ssh_total_stddev and steric_explained_variance + # Copy of the ssh diagnostics + for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance']: + weight_list.append([os.path.join(self.task_config.DATA, 'staticb', f'ocn.{string}.incr.{window_begin_iso}.nc'), + os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f'{APREFIX}ocean.{string}.nc')]) + FileHandler({'copy': weight_list}).sync() @@ -278,6 +291,6 @@ def finalize(self: Task) -> None: yaml_list = [] for yaml_file in yamls: dest = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, - f"{self.task_config.APREFIX}{os.path.basename(yaml_file)}") + f"{APREFIX}{os.path.basename(yaml_file)}") yaml_list.append([yaml_file, dest]) FileHandler({'copy': yaml_list}).sync() From cf99f5d36672bc21db558b1378eee71191b4705c Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 7 Apr 2025 13:58:09 +0000 Subject: [PATCH 5/7] fixed the fix --- parm/archive/gdasocean_analysis.yaml.j2 | 5 +++-- ush/python/pygfs/task/marine_bmat.py | 28 +++++++++++++------------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/parm/archive/gdasocean_analysis.yaml.j2 b/parm/archive/gdasocean_analysis.yaml.j2 index b7c057eacfb..7652d7bebdb 100644 --- a/parm/archive/gdasocean_analysis.yaml.j2 +++ b/parm/archive/gdasocean_analysis.yaml.j2 @@ -11,14 +11,15 @@ gdasocean_analysis: {% endfor %} # static background error - - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.bkgerr_stddev.nc' - - '{{ COMIN_ICE_BMATRIX | relpath(ROTDIR) }}/{{ head }}ice.bkgerr_stddev.nc' + - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.bkgerr_ens_stddev.nc' + - '{{ COMIN_ICE_BMATRIX | relpath(ROTDIR) }}/{{ head }}ice.bkgerr_ens_stddev.nc' # ensemble background error {% if NMEM_ENS > 2 %} - '{{ COMIN_ICE_BMATRIX | relpath(ROTDIR) }}/{{ head }}ice.ens_weights.nc' - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.ens_weights.nc' - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.recentering_error.nc' + - '{{ COMIN_ICE_BMATRIX | relpath(ROTDIR) }}/{{ head }}ice.recentering_error.nc' {% for diag_type in ["ssh_steric_stddev", "ssh_unbal_stddev", "ssh_total_stddev", "steric_explained_variance"] %} - '{{ COMIN_OCEAN_BMATRIX | relpath(ROTDIR) }}/{{ head }}ocean.{{ diag_type }}.nc' {% endfor %} diff --git a/ush/python/pygfs/task/marine_bmat.py b/ush/python/pygfs/task/marine_bmat.py index c39ba030282..fa6ce00437b 100644 --- a/ush/python/pygfs/task/marine_bmat.py +++ b/ush/python/pygfs/task/marine_bmat.py @@ -56,11 +56,9 @@ def __init__(self, config): # Create a local dictionary that is repeatedly used across this class local_dict = AttrDict( { - # 'cyc': os.getenv('cyc'), 'PARMsoca': os.path.join(self.task_config.PARMgfs, 'gdas', 'soca'), 'CALC_SCALE_EXEC': _calc_scale_exec, 'MARINE_WINDOW_BEGIN': _window_begin, - 'MARINE_WINDOW_BEGIN_ISO': _window_begin.strftime('%Y-%m-%dT%H:%M:%SZ'), 'MARINE_WINDOW_MIDDLE': self.task_config.current_cycle, 'MARINE_WINDOW_END': _window_end, 'MARINE_WINDOW_LENGTH': f"PT{self.task_config['assim_freq']}H", @@ -217,9 +215,10 @@ def finalize(self: Task) -> None: None """ - RUN = self.task_config['RUN'] - cyc = self.task_config['cyc'] APREFIX = self.task_config.APREFIX + window_begin_iso = self.task_config.MARINE_WINDOW_BEGIN.strftime('%Y-%m-%dT%H:%M:%SZ') + window_middle_iso = self.task_config.MARINE_WINDOW_MIDDLE.strftime('%Y-%m-%dT%H:%M:%SZ') + window_end_iso = self.task_config.MARINE_WINDOW_END.strftime('%Y-%m-%dT%H:%M:%SZ') # Copy the soca grid if it was created grid_file = os.path.join(self.task_config.DATA, 'soca_gridspec.nc') @@ -242,30 +241,34 @@ def finalize(self: Task) -> None: # Copy diag B files to ROTDIR logger.info(f"Copying diag B files to the ROTDIR") diagb_list = [] - window_end_iso = self.task_config.MARINE_WINDOW_END.strftime('%Y-%m-%dT%H:%M:%SZ') + # TODO(AFE) the two renames are to accomodate yaml settings in var task, which should changed # ocean diag B os.rename(os.path.join(self.task_config.DATAstaticb, f"ocn.bkgerr_stddev.incr.{window_end_iso}.nc"), os.path.join(self.task_config.DATAstaticb, f"ocn.bkgerr_stddev.nc")) src = os.path.join(self.task_config.DATAstaticb, f"ocn.bkgerr_stddev.nc") - dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, - f"{APREFIX}ocean.bkgerr_stddev.nc") + dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f"{APREFIX}ocean.bkgerr_ens_stddev.nc") + diagb_list.append([src, dst]) + + src = os.path.join(self.task_config.DATAstaticb, f"ocn.ssh_recentering_error.incr.{window_begin_iso}.nc") + dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX,f"{APREFIX}ocean.recentering_error.nc") diagb_list.append([src, dst]) # ice diag B os.rename(os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.incr.{window_end_iso}.nc"), os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.nc")) src = os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.nc") - dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, - f"{APREFIX}ice.bkgerr_stddev.nc") + dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, f"{APREFIX}ice.bkgerr_ens_stddev.nc") + diagb_list.append([src, dst]) + + src = os.path.join(self.task_config.DATAstaticb, f"ice.ssh_recentering_error.incr.{window_begin_iso}.nc") + dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX,f"{APREFIX}ice.recentering_error.nc") diagb_list.append([src, dst]) FileHandler({'copy': diagb_list}).sync() # Copy the ensemble perturbation diagnostics to the ROTDIR if self.task_config.DOHYBVAR_OCN == "YES" or self.task_config.NMEM_ENS >= 2: - window_middle_iso = self.task_config.MARINE_WINDOW_MIDDLE.strftime('%Y-%m-%dT%H:%M:%SZ') - window_begin_iso = self.task_config.MARINE_WINDOW_BEGIN.strftime('%Y-%m-%dT%H:%M:%SZ') weight_list = [] src = os.path.join(self.task_config.DATA, f"ocn.ens_weights.incr.{window_middle_iso}.nc") dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, @@ -277,8 +280,7 @@ def finalize(self: Task) -> None: f"{APREFIX}ice.ens_weights.nc") weight_list.append([src, dst]) - # TODO(G): missing ssh_steric_stddev, ssh_unbal_stddev, ssh_total_stddev and steric_explained_variance - # Copy of the ssh diagnostics + # Copy the ssh diagnostics for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance']: weight_list.append([os.path.join(self.task_config.DATA, 'staticb', f'ocn.{string}.incr.{window_begin_iso}.nc'), os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f'{APREFIX}ocean.{string}.nc')]) From a324f15fe2ab7e60097458d49dbf7c072c2c3239 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 7 Apr 2025 14:06:54 +0000 Subject: [PATCH 6/7] style points --- ush/python/pygfs/task/marine_bmat.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/ush/python/pygfs/task/marine_bmat.py b/ush/python/pygfs/task/marine_bmat.py index fa6ce00437b..a46942337e1 100644 --- a/ush/python/pygfs/task/marine_bmat.py +++ b/ush/python/pygfs/task/marine_bmat.py @@ -251,7 +251,7 @@ def finalize(self: Task) -> None: diagb_list.append([src, dst]) src = os.path.join(self.task_config.DATAstaticb, f"ocn.ssh_recentering_error.incr.{window_begin_iso}.nc") - dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX,f"{APREFIX}ocean.recentering_error.nc") + dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f"{APREFIX}ocean.recentering_error.nc") diagb_list.append([src, dst]) # ice diag B @@ -262,7 +262,7 @@ def finalize(self: Task) -> None: diagb_list.append([src, dst]) src = os.path.join(self.task_config.DATAstaticb, f"ice.ssh_recentering_error.incr.{window_begin_iso}.nc") - dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX,f"{APREFIX}ice.recentering_error.nc") + dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, f"{APREFIX}ice.recentering_error.nc") diagb_list.append([src, dst]) FileHandler({'copy': diagb_list}).sync() @@ -283,8 +283,7 @@ def finalize(self: Task) -> None: # Copy the ssh diagnostics for string in ['ssh_steric_stddev', 'ssh_unbal_stddev', 'ssh_total_stddev', 'steric_explained_variance']: weight_list.append([os.path.join(self.task_config.DATA, 'staticb', f'ocn.{string}.incr.{window_begin_iso}.nc'), - os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f'{APREFIX}ocean.{string}.nc')]) - + os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f'{APREFIX}ocean.{string}.nc')]) FileHandler({'copy': weight_list}).sync() From 6d0c994253af45e5e4d240c3642db7ba91095d0f Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Mon, 7 Apr 2025 16:31:54 +0000 Subject: [PATCH 7/7] moving recentering to if-ens block --- ush/python/pygfs/task/marine_bmat.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/ush/python/pygfs/task/marine_bmat.py b/ush/python/pygfs/task/marine_bmat.py index a46942337e1..11bc731723a 100644 --- a/ush/python/pygfs/task/marine_bmat.py +++ b/ush/python/pygfs/task/marine_bmat.py @@ -250,10 +250,6 @@ def finalize(self: Task) -> None: dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f"{APREFIX}ocean.bkgerr_ens_stddev.nc") diagb_list.append([src, dst]) - src = os.path.join(self.task_config.DATAstaticb, f"ocn.ssh_recentering_error.incr.{window_begin_iso}.nc") - dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f"{APREFIX}ocean.recentering_error.nc") - diagb_list.append([src, dst]) - # ice diag B os.rename(os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.incr.{window_end_iso}.nc"), os.path.join(self.task_config.DATAstaticb, f"ice.bkgerr_stddev.nc")) @@ -261,9 +257,14 @@ def finalize(self: Task) -> None: dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, f"{APREFIX}ice.bkgerr_ens_stddev.nc") diagb_list.append([src, dst]) - src = os.path.join(self.task_config.DATAstaticb, f"ice.ssh_recentering_error.incr.{window_begin_iso}.nc") - dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, f"{APREFIX}ice.recentering_error.nc") - diagb_list.append([src, dst]) + if self.task_config.DOHYBVAR_OCN == "YES" or self.task_config.NMEM_ENS >= 2: + src = os.path.join(self.task_config.DATAstaticb, f"ocn.ssh_recentering_error.incr.{window_begin_iso}.nc") + dst = os.path.join(self.task_config.COMOUT_OCEAN_BMATRIX, f"{APREFIX}ocean.recentering_error.nc") + diagb_list.append([src, dst]) + + src = os.path.join(self.task_config.DATAstaticb, f"ice.ssh_recentering_error.incr.{window_begin_iso}.nc") + dst = os.path.join(self.task_config.COMOUT_ICE_BMATRIX, f"{APREFIX}ice.recentering_error.nc") + diagb_list.append([src, dst]) FileHandler({'copy': diagb_list}).sync()