From 6b015d1a155cceab7f6025e85d5936db60bb205a Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 8 Feb 2024 19:10:37 +0000 Subject: [PATCH 1/8] stub and ctest for recentering --- scripts/exgdas_global_marine_analysis_ecen.sh | 42 +++++++++++++++++++ test/soca/gw/CMakeLists.txt | 1 + 2 files changed, 43 insertions(+) create mode 100755 scripts/exgdas_global_marine_analysis_ecen.sh diff --git a/scripts/exgdas_global_marine_analysis_ecen.sh b/scripts/exgdas_global_marine_analysis_ecen.sh new file mode 100755 index 000000000..b27f9ab53 --- /dev/null +++ b/scripts/exgdas_global_marine_analysis_ecen.sh @@ -0,0 +1,42 @@ +#!/bin/bash +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_global_marine_analysis_ecen.sh +# Script description: Recenters the ensemble +# +# Author: Andrew Eichmann Org: NCEP/EMC Date: 2024-02-08 +# +# Abstract: This script recenters the SOCA ocean-sea ice ensemble +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# Machine: Orion +# +################################################################################ + +# Set environment. +export VERBOSE=${VERBOSE:-"YES"} +if [ $VERBOSE = "YES" ]; then + echo $(date) EXECUTING $0 $* >&2 + set -x +fi + +# Directories +pwd=$(pwd) + +# Utilities +export NLN=${NLN:-"/bin/ln -sf"} + +# don't just spin there, do something + +################################################################################ +set +x +if [ $VERBOSE = "YES" ]; then + echo $(date) EXITING $0 with return code $err >&2 +fi +exit $err + +################################################################################ diff --git a/test/soca/gw/CMakeLists.txt b/test/soca/gw/CMakeLists.txt index 25d290571..5220c7e40 100644 --- a/test/soca/gw/CMakeLists.txt +++ b/test/soca/gw/CMakeLists.txt @@ -45,6 +45,7 @@ set(jjob_list "JGLOBAL_PREP_OCEAN_OBS" "JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP" "JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT" "JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN" + "JGDAS_GLOBAL_OCEAN_ANALYSIS_ECEN" "JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT" "JGDAS_GLOBAL_OCEAN_ANALYSIS_POST" "JGDAS_GLOBAL_OCEAN_ANALYSIS_VRFY") From 257cef4b175c7492e6a9676f093a0cd340e90d3b Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Feb 2024 16:48:48 +0000 Subject: [PATCH 2/8] initial OO-correctish stubs --- scripts/exgdas_global_marine_analysis_ecen.py | 24 ++++++++++++++++ ush/soca/marine_recenter.py | 28 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100755 scripts/exgdas_global_marine_analysis_ecen.py create mode 100644 ush/soca/marine_recenter.py diff --git a/scripts/exgdas_global_marine_analysis_ecen.py b/scripts/exgdas_global_marine_analysis_ecen.py new file mode 100755 index 000000000..5533cfbdd --- /dev/null +++ b/scripts/exgdas_global_marine_analysis_ecen.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exgdas_global_marine_analysis_ecen.py +# This script creates an MarineRecenter class +# and runs the initialize, run, and finalize methods +# which currently are stubs +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from soca.marine_recenter import MarineRecenter + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the aerosol analysis task + MarineRecen = MarineRecenter(config) + MarineRecen.initialize() + MarineRecen.execute() + MarineRecen.finalize() diff --git a/ush/soca/marine_recenter.py b/ush/soca/marine_recenter.py new file mode 100644 index 000000000..18b9879de --- /dev/null +++ b/ush/soca/marine_recenter.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +import os +from logging import getLogger +from typing import Dict, List, Any +from wxflow import logit + +logger = getLogger(__name__.split('.')[-1]) + +class MarineRecenter(): + + def __init__(self, config): + logger.info("init") + + @logit(logger) + def initialize(self): + logger.info("initialize") + + @logit(logger) + def execute(self): + logger.info("execute") + + @logit(logger) + def finalize(self): + logger.info("finalize") + + + From 5678cc1466bf7759aacc830a89bc8072619718fc Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Feb 2024 16:50:57 +0000 Subject: [PATCH 3/8] points for style --- ush/soca/marine_recenter.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/ush/soca/marine_recenter.py b/ush/soca/marine_recenter.py index 18b9879de..e772fa5f0 100644 --- a/ush/soca/marine_recenter.py +++ b/ush/soca/marine_recenter.py @@ -7,22 +7,23 @@ logger = getLogger(__name__.split('.')[-1]) + class MarineRecenter(): - def __init__(self, config): - logger.info("init") + def __init__(self, config): + logger.info("init") - @logit(logger) - def initialize(self): - logger.info("initialize") + @logit(logger) + def initialize(self): + logger.info("initialize") - @logit(logger) - def execute(self): - logger.info("execute") + @logit(logger) + def execute(self): + logger.info("execute") - @logit(logger) - def finalize(self): - logger.info("finalize") + @logit(logger) + def finalize(self): + logger.info("finalize") From 3886b78a9e9f5a9cc9218d791df77786f8950d5e Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Feb 2024 16:54:58 +0000 Subject: [PATCH 4/8] points for style --- ush/soca/marine_recenter.py | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/ush/soca/marine_recenter.py b/ush/soca/marine_recenter.py index e772fa5f0..f86218a25 100644 --- a/ush/soca/marine_recenter.py +++ b/ush/soca/marine_recenter.py @@ -10,20 +10,17 @@ class MarineRecenter(): - def __init__(self, config): - logger.info("init") - - @logit(logger) - def initialize(self): - logger.info("initialize") - - @logit(logger) - def execute(self): - logger.info("execute") - - @logit(logger) - def finalize(self): - logger.info("finalize") + def __init__(self, config): + logger.info("init") + @logit(logger) + def initialize(self): + logger.info("initialize") + @logit(logger) + def execute(self): + logger.info("execute") + @logit(logger) + def finalize(self): + logger.info("finalize") From e12b247fe5f03926c395c6620b68df5caf3db78a Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Feb 2024 17:06:59 +0000 Subject: [PATCH 5/8] execute to run --- scripts/exgdas_global_marine_analysis_ecen.py | 2 +- ush/soca/marine_recenter.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/exgdas_global_marine_analysis_ecen.py b/scripts/exgdas_global_marine_analysis_ecen.py index 5533cfbdd..8f5ab1e88 100755 --- a/scripts/exgdas_global_marine_analysis_ecen.py +++ b/scripts/exgdas_global_marine_analysis_ecen.py @@ -20,5 +20,5 @@ # Instantiate the aerosol analysis task MarineRecen = MarineRecenter(config) MarineRecen.initialize() - MarineRecen.execute() + MarineRecen.run() MarineRecen.finalize() diff --git a/ush/soca/marine_recenter.py b/ush/soca/marine_recenter.py index f86218a25..014f970cf 100644 --- a/ush/soca/marine_recenter.py +++ b/ush/soca/marine_recenter.py @@ -18,8 +18,8 @@ def initialize(self): logger.info("initialize") @logit(logger) - def execute(self): - logger.info("execute") + def run(self): + logger.info("run") @logit(logger) def finalize(self): From 595069b34f23b037f3d82f732b06e5f44462155f Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Feb 2024 17:50:26 +0000 Subject: [PATCH 6/8] sh to py --- scripts/exgdas_global_marine_analysis_ecen.sh | 42 ------------------- 1 file changed, 42 deletions(-) delete mode 100755 scripts/exgdas_global_marine_analysis_ecen.sh diff --git a/scripts/exgdas_global_marine_analysis_ecen.sh b/scripts/exgdas_global_marine_analysis_ecen.sh deleted file mode 100755 index b27f9ab53..000000000 --- a/scripts/exgdas_global_marine_analysis_ecen.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash -################################################################################ -#### UNIX Script Documentation Block -# . . -# Script name: exgdas_global_marine_analysis_ecen.sh -# Script description: Recenters the ensemble -# -# Author: Andrew Eichmann Org: NCEP/EMC Date: 2024-02-08 -# -# Abstract: This script recenters the SOCA ocean-sea ice ensemble -# -# $Id$ -# -# Attributes: -# Language: POSIX shell -# Machine: Orion -# -################################################################################ - -# Set environment. -export VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ]; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -# Directories -pwd=$(pwd) - -# Utilities -export NLN=${NLN:-"/bin/ln -sf"} - -# don't just spin there, do something - -################################################################################ -set +x -if [ $VERBOSE = "YES" ]; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err - -################################################################################ From f167b9018025ae2bd1ee5e3499c2a83b0c5146d0 Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Thu, 15 Feb 2024 21:31:55 +0000 Subject: [PATCH 7/8] filling out stubs --- ush/soca/marine_recenter.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/ush/soca/marine_recenter.py b/ush/soca/marine_recenter.py index 014f970cf..240ae92d1 100644 --- a/ush/soca/marine_recenter.py +++ b/ush/soca/marine_recenter.py @@ -3,20 +3,47 @@ import os from logging import getLogger from typing import Dict, List, Any -from wxflow import logit +from wxflow import AttrDict, FileHandler, logit, Task logger = getLogger(__name__.split('.')[-1]) -class MarineRecenter(): +class MarineRecenter(Task): + @logit(logger, name="MarineRecenter") def __init__(self, config): logger.info("init") + super().__init__(config) + + # Create a local dictionary that is repeatedly used across this class + local_dict = AttrDict( + { + "diags": os.path.join(self.runtime_config['DATA'], 'diags'), # output dir for soca DA obs space + "obs_in": os.path.join(self.runtime_config['DATA'], 'obs') , # input " " + "bkg_dir": os.path.join(self.runtime_config['DATA'], 'bkg'), # ice and ocean backgrounds + "anl_out": os.path.join(self.runtime_config['DATA'], 'Data'), # output dir for soca DA + "static_ens": os.path.join(self.runtime_config['DATA'], 'static_ens') # clim. ens. + } + ) + + # task_config is everything that this task should need + self.task_config = AttrDict(**self.config, **self.runtime_config, **local_dict) + + #_soca_ensb_yaml_temp + print(self.task_config) @logit(logger) def initialize(self): logger.info("initialize") + FileHandler({'mkdir': [self.task_config.diags, + self.task_config.obs_in, + self.task_config.bkg_dir, + self.task_config.anl_out, + self.task_config.static_ens]}).sync() + + + @logit(logger) def run(self): logger.info("run") From 856a689083f648313b86dd828d3411b20902e8cb Mon Sep 17 00:00:00 2001 From: AndrewEichmann-NOAA Date: Fri, 16 Feb 2024 20:24:44 +0000 Subject: [PATCH 8/8] some review suggestions, etc --- scripts/exgdas_global_marine_analysis_ecen.py | 1 + test/soca/gw/run_jjobs.yaml.test | 1 + ush/soca/marine_recenter.py | 7 ------- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/scripts/exgdas_global_marine_analysis_ecen.py b/scripts/exgdas_global_marine_analysis_ecen.py index 8f5ab1e88..f023f018b 100755 --- a/scripts/exgdas_global_marine_analysis_ecen.py +++ b/scripts/exgdas_global_marine_analysis_ecen.py @@ -6,6 +6,7 @@ import os from wxflow import Logger, cast_strdict_as_dtypedict +# TODO (AFE): change to from pygfs.task.marine_recenter import MarineRecenter from soca.marine_recenter import MarineRecenter # Initialize root logger diff --git a/test/soca/gw/run_jjobs.yaml.test b/test/soca/gw/run_jjobs.yaml.test index dbd2fcd2f..c05f9e255 100644 --- a/test/soca/gw/run_jjobs.yaml.test +++ b/test/soca/gw/run_jjobs.yaml.test @@ -35,6 +35,7 @@ gw environement: run scripts: GDASPREPOCNOBSPY: @HOMEgfs@/sorc/gdas.cd/scripts/exglobal_prep_ocean_obs.py + GDASOCNCENPY: @HOMEgfs@/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_ecen.py setup_expt config: base: diff --git a/ush/soca/marine_recenter.py b/ush/soca/marine_recenter.py index 240ae92d1..3daa0c231 100644 --- a/ush/soca/marine_recenter.py +++ b/ush/soca/marine_recenter.py @@ -36,13 +36,6 @@ def __init__(self, config): def initialize(self): logger.info("initialize") - FileHandler({'mkdir': [self.task_config.diags, - self.task_config.obs_in, - self.task_config.bkg_dir, - self.task_config.anl_out, - self.task_config.static_ens]}).sync() - - @logit(logger) def run(self):