From 825387410ee5c19590bb6f2dcf477620819076c7 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Tue, 28 Oct 2025 18:57:56 +0000 Subject: [PATCH 01/13] Initial commit --- dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml | 1 - dev/parm/config/gfs/config.efcs | 7 +------ parm/stage/analysis.yaml.j2 | 14 +++++++++++--- sorc/gdas.cd | 2 +- ush/forecast_postdet.sh | 16 ++++++---------- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml b/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml index 459edd25ed0..52015a9d3ba 100644 --- a/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml +++ b/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml @@ -22,7 +22,6 @@ skip_ci_on_hosts: - orion - hercules - awsepicglobalworkflow - - hera - ursa - wcoss2 diff --git a/dev/parm/config/gfs/config.efcs b/dev/parm/config/gfs/config.efcs index f6753061584..422b38d64cf 100644 --- a/dev/parm/config/gfs/config.efcs +++ b/dev/parm/config/gfs/config.efcs @@ -91,12 +91,7 @@ export FHZERO=6 # Set PREFIX_ATMINC to r when recentering on if [[ ${RECENTER_ENKF:-"YES"} == "YES" ]]; then - # TODO: Change this to 'recentered' for both JEDI and GSI recentered increments when JEDI has been brought into EE2 - if [[ "${DO_JEDIATMENS}" == "YES" ]]; then - export PREFIX_ATMINC="r" - else - export PREFIX_ATMINC="recentered_" - fi + export PREFIX_ATMINC="recentered_" fi # Set restart interval to enable restarting forecasts after failures diff --git a/parm/stage/analysis.yaml.j2 b/parm/stage/analysis.yaml.j2 index 326f7a525cd..4853cc55d25 100644 --- a/parm/stage/analysis.yaml.j2 +++ b/parm/stage/analysis.yaml.j2 @@ -14,9 +14,17 @@ analysis: {% if DO_JEDIATMVAR %} {% for itile in range(6) %} - {% for ftype in ["atminc", "atmi009", "atmi003", "ratminc", "ratmi009", "ratmi003"] %} - {% if path_exists(ICSDIR ~ "/" ~ COMOUT_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) ~ "/" ~ RUN ~ ".t" ~ current_cycle_HH ~ "z.cubed_sphere_grid_" ~ ftype ~ ".tile" ~ (itile+1) ~ ".nc") %} - - ["{{ ICSDIR }}/{{ COMOUT_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ RUN }}.t{{ current_cycle_HH }}z.cubed_sphere_grid_{{ ftype }}.tile{{ itile+1 }}.nc", "{{ COMOUT_ATMOS_ANALYSIS_MEM }}"] + {% for source_ftype, dest_ftype in + [ + ('atminc', 'jedi_increment.atm.i006'), + ('atmi009', 'jedi_increment.atm.i009'), + ('atmi003', 'jedi_increment.atm.i003'), + ('ratminc', 'recentered_jedi_increment.atm.i006'), + ('ratmi009', 'recentered_jedi_increment.atm.i009'), + ('ratmi003', 'recentered_jedi_increment.atm.i003') + ] %} + {% if path_exists(ICSDIR ~ "/" ~ COMOUT_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) ~ "/" ~ RUN ~ ".t" ~ current_cycle_HH ~ "z.cubed_sphere_grid_" ~ source_ftype ~ ".tile" ~ (itile+1) ~ ".nc") %} + - ["{{ ICSDIR }}/{{ COMOUT_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ RUN }}.t{{ current_cycle_HH }}z.cubed_sphere_grid_{{ source_ftype }}.tile{{ itile+1 }}.nc", "{{ COMOUT_ATMOS_ANALYSIS_MEM }}/{{ RUN }}.t{{ current_cycle_HH }}z.{{ dest_ftype }}.tile{{ itile+1 }}.nc"] {% endif %} {% endfor %} {% endfor %} diff --git a/sorc/gdas.cd b/sorc/gdas.cd index a4893c1453a..432c7c9b988 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit a4893c1453ac8d587e8e5b5a452a1c035b22812a +Subproject commit 432c7c9b9880d0e237bb4bba597fa4b320952b80 diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 60da57c26f1..c75b6122426 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -183,11 +183,7 @@ EOF for iaufhr in "${iaufhrs[@]}"; do if [[ "${DO_JEDIATMVAR:-NO}" == "YES" ]]; then for tile in {1..6}; do - if (( iaufhr == 6 )); then - inc_file="atminc.tile${tile}.nc" - else - inc_file="atmi$(printf %03i "${iaufhr}").tile${tile}.nc" - fi + inc_file="jedi_increment.atm.i$(printf %03i '${iaufhr}').tile${tile}.nc" inc_files+=("${inc_file}") IAU_INC_FILES="${IAU_INC_FILES}${delimiter}'${inc_file}'" done @@ -203,9 +199,9 @@ EOF read_increment=".true." if [[ "${DO_JEDIATMVAR:-NO}" == "YES" ]]; then - inc_files=("atminc.tile1.nc" "atminc.tile2.nc" "atminc.tile3.nc" "atminc.tile4.nc" "atminc.tile5.nc" "atminc.tile6.nc") + inc_files=("jedi_increment.atm.i006.tile1.nc" "jedi_increment.atm.i006.tile2.nc" "jedi_increment.atm.i006.tile3.nc" "jedi_increment.atm.i006.tile4.nc" "jedi_increment.atm.i006.tile5.nc" "jedi_increment.atm.i006.tile6.nc") increment_file_on_native_grid=".true." - res_latlon_dynamics="atminc" + res_latlon_dynamics="jedi_increment.atm.i006" else inc_files=("increment.atm.i006.nc") res_latlon_dynamics="increment.atm.i006.nc" @@ -227,7 +223,7 @@ EOF local increment_file for inc_file in "${inc_files[@]}"; do if [[ "${DO_JEDIATMVAR:-NO}" == "YES" ]]; then - increment_file="${COMIN_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.cubed_sphere_grid_${PREFIX_ATMINC}${inc_file}" + increment_file="${COMIN_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${PREFIX_ATMINC}${inc_file}" else if [[ "${RUN}" == "gcafs" ]]; then increment_file="${COMIN_ATMOS_ANALYSIS}/gcdas.t${cyc}z.${PREFIX_ATMINC}${inc_file}" @@ -310,8 +306,8 @@ EOF ${NLN} "${COMOUT_ATMOS_HISTORY}/${RUN}.t${cyc}z.sfc.f${FH3}.nc" "${DATAoutput}/FV3ATM_OUTPUT/sfcf${FH3}.nc" ${NLN} "${COMOUT_ATMOS_HISTORY}/${RUN}.t${cyc}z.log.f${FH3}.txt" "${DATAoutput}/FV3ATM_OUTPUT/log.atm.f${FH3}" if [[ "${DO_JEDIATMVAR:-}" == "YES" ]]; then - ${NLN} "${COMOUT_ATMOS_HISTORY}/${RUN}.t${cyc}z.cubed_sphere_grid_atmf${FH3}.nc" "${DATAoutput}/FV3ATM_OUTPUT/cubed_sphere_grid_atmf${FH3}.nc" - ${NLN} "${COMOUT_ATMOS_HISTORY}/${RUN}.t${cyc}z.cubed_sphere_grid_sfcf${FH3}.nc" "${DATAoutput}/FV3ATM_OUTPUT/cubed_sphere_grid_sfcf${FH3}.nc" + ${NLN} "${COMOUT_ATMOS_HISTORY}/${RUN}.t${cyc}z.csg_atm.f${FH3}.nc" "${DATAoutput}/FV3ATM_OUTPUT/cubed_sphere_grid_atmf${FH3}.nc" + ${NLN} "${COMOUT_ATMOS_HISTORY}/${RUN}.t${cyc}z.csg_sfc.f${FH3}.nc" "${DATAoutput}/FV3ATM_OUTPUT/cubed_sphere_grid_sfcf${FH3}.nc" fi fi if [[ "${WRITE_DOPOST}" == ".true." ]]; then From b8189b5b146ccf667dfafd8fb02dc51b50f1c987 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Tue, 28 Oct 2025 21:12:47 +0000 Subject: [PATCH 02/13] Debug --- dev/workflow/rocoto/gfs_tasks.py | 15 ++++++++++--- parm/archive/enkf.yaml.j2 | 2 +- parm/archive/enkf_grp.yaml.j2 | 6 ++++-- parm/archive/enkf_restarta_grp.yaml.j2 | 25 +++++++++++----------- parm/archive/gdas_restarta.yaml.j2 | 13 ++++++----- parm/archive/gfs_netcdfa.yaml.j2 | 2 +- sorc/gdas.cd | 2 +- ush/python/pygfs/task/fv3_analysis_calc.py | 7 +++--- 8 files changed, 44 insertions(+), 28 deletions(-) diff --git a/dev/workflow/rocoto/gfs_tasks.py b/dev/workflow/rocoto/gfs_tasks.py index 4575353bdd1..b48ea81a7e9 100644 --- a/dev/workflow/rocoto/gfs_tasks.py +++ b/dev/workflow/rocoto/gfs_tasks.py @@ -881,7 +881,10 @@ def marineanlchkpt(self): dep_dict = {'type': 'task', 'name': f'enkf{self.run}_marineanlecen'} deps.append(rocoto.add_dependency(dep_dict)) if self.options['do_mergensst']: - data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.analysis.sfc.a006.nc' + if do_jediatmvar + data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' + else: + data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.analysis.sfc.a006.nc' dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) @@ -1092,10 +1095,16 @@ def atmanlupp(self): atm_anl_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_ANALYSIS_TMPL"]) deps = [] - data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' + if do_jediatmvar: + data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' + else: + data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) - data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' + if do_jediatmvar: + data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' + else: + data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) data = f'{atm_anl_path}/{self.run}.t@Hz.done.txt' diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index ad69d0d284c..18305adf948 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -120,7 +120,7 @@ enkf: - "{{ COMIN_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}ensmean_increment.atm.i{{ '%03d' % fhr }}.nc" {% endif %} {% else %} - - "{{ COMIN_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}cubed_sphere_grid_atma{{ '%03d' % fhr }}.ensmean.nc" + - "{{ COMIN_ATMOS_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}csg_ensmean_jedi_analysis.atm.a{{ '%03d' % fhr }}.nc" {% endif %} # soil DA increments diff --git a/parm/archive/enkf_grp.yaml.j2 b/parm/archive/enkf_grp.yaml.j2 index 30ac0dcd2c7..fda546f23c2 100644 --- a/parm/archive/enkf_grp.yaml.j2 +++ b/parm/archive/enkf_grp.yaml.j2 @@ -22,8 +22,10 @@ enkf_grp: - "{{ COMIN_ATMOS_RESTART_MEM | relpath(ROTDIR) }}/{{ head }}gsistat.txt" {% endif %} {% if DO_JEDIATMENS %} - {% for itile in range(6) %} - - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}cubed_sphere_grid_ratminc.tile{{ itile+1 }}.nc" + {% for iaufhr in IAUFHRS %} + {% for itile in range(6) %} + - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}recentered_jedi_increment.atm.i{{ '%03d' % iaufhr }}.tile{{ itile+1 }}.nc" + {% endfor %} {% endfor %} {% else %} {% if do_calc_increment %} diff --git a/parm/archive/enkf_restarta_grp.yaml.j2 b/parm/archive/enkf_restarta_grp.yaml.j2 index 59697d624d1..f40ee11a723 100644 --- a/parm/archive/enkf_restarta_grp.yaml.j2 +++ b/parm/archive/enkf_restarta_grp.yaml.j2 @@ -31,22 +31,23 @@ enkf_restarta_grp: - "{{ COMIN_ATMOS_RESTART_MEM | relpath(ROTDIR) }}/{{ anl_time | to_YMD }}.{{ anl_time | strftime("%H") }}0000.sfcanl_data.tile{{ itile }}.nc" {% endfor %} - # Member atmospheric analysis data + # Member atmospheric increments or analysis data {% if DO_JEDIATMENS %} - {% for itile in range(6) %} - - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}cubed_sphere_grid_ratminc.tile{{ itile+1 }}.nc" + {% for iaufhr in IAUFHRS %} + {% for itile in range(6) %} + - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}recentered_jedi_increment.atm.i{{ '%03d' % iaufhr }}.tile{{ itile+1 }}.nc" + {% endfor %} {% endfor %} - {% endif %} - - # Member increments - {% for iaufhr in IAUFHRS %} - {% set iaufhr = iaufhr %} - {% if do_calc_increment %} + {% else %} + {% for iaufhr in IAUFHRS %} + {% set iaufhr = iaufhr %} + {% if do_calc_increment %} - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}analysis.atm.a{{ '%03d' % iaufhr }}.nc" - {% else %} + {% else %} - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}recentered_increment.atm.i{{ '%03d' % iaufhr }}.nc" - {% endif %} - {% endfor %} # iaufhr in IAUFHRS + {% endif %} + {% endfor %} # iaufhr in IAUFHRS + {% endif %} # soil DA increments {% if DO_GSISOILDA %} diff --git a/parm/archive/gdas_restarta.yaml.j2 b/parm/archive/gdas_restarta.yaml.j2 index c496e81b840..c80e7164ed8 100644 --- a/parm/archive/gdas_restarta.yaml.j2 +++ b/parm/archive/gdas_restarta.yaml.j2 @@ -5,14 +5,17 @@ gdas_restarta: required: # Deterministic analysis increments {% if DO_JEDIATMVAR %} - {% for itile in range(6) %} - - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}cubed_sphere_grid_atminc.tile{{ itile+1 }}.nc" + {% for iaufhr in IAUFHRS %} + {% for itile in range(6) %} + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_increment.atm.i{{ "%03d" % iaufhr }}.tile{{ itile+1 }}.nc" + {% endfor %} {% endfor %} - {% endif %} + {% else %} # IAU increments - {% for iaufhr in IAUFHRS %} + {% for iaufhr in IAUFHRS %} - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}increment.atm.i{{ "%03d" % iaufhr }}.nc" - {% endfor %} + {% endfor %} + {% endif %} # Soil DA increments {% if DO_GSISOILDA %} diff --git a/parm/archive/gfs_netcdfa.yaml.j2 b/parm/archive/gfs_netcdfa.yaml.j2 index ee5ad28c282..96641265df4 100644 --- a/parm/archive/gfs_netcdfa.yaml.j2 +++ b/parm/archive/gfs_netcdfa.yaml.j2 @@ -8,7 +8,7 @@ gfs_netcdfa: {% for iauhr in IAUFHRS %} {% if DO_JEDIATMVAR %} {% for itile in range(6) %} - - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}cubed_sphere_grid_atminc.tile{{ itile+1 }}.nc" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_increment.atm.i{{ "%03d" % iauhr }}.tile{{ itile+1 }}.nc" {% endfor %} {% else %} - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}increment.atm.i{{ "%03d" % iauhr }}.nc" diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 432c7c9b988..1432e1cdfbe 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 432c7c9b9880d0e237bb4bba597fa4b320952b80 +Subproject commit 1432e1cdfbe66c148536d75d00c9eca2e57b9a2f diff --git a/ush/python/pygfs/task/fv3_analysis_calc.py b/ush/python/pygfs/task/fv3_analysis_calc.py index 9c3350d7a1b..0a96cf10c1b 100644 --- a/ush/python/pygfs/task/fv3_analysis_calc.py +++ b/ush/python/pygfs/task/fv3_analysis_calc.py @@ -126,21 +126,21 @@ def execute(self) -> None: logger.info(f"Inserting analysis variables into atmospheric analysis file") insert_analysis_variables(self.task_config.current_cycle, f"atmanl.{auxgrid_time_str}.nc4", - f"{self.task_config.GPREFIX}atm.f006.nc") + f"{self.task_config.GPREFIX}atmf006.nc") # Aerosols if self.task_config.DO_AERO_ANL: logger.info(f"Inserting analysis variables into aerosol analysis file") insert_analysis_variables(self.task_config.current_cycle, f"aeroanl.{auxgrid_time_str}.nc4", - f"{self.task_config.GPREFIX}atm.f006.nc") + f"{self.task_config.GPREFIX}atmf006.nc") # Snow if self.task_config.DO_JEDISNOWDA: logger.info(f"Inserting analysis variables into snow analysis file") insert_analysis_variables(self.task_config.current_cycle, f"snowanl.{auxgrid_time_str}.nc4", - f"{self.task_config.GPREFIX}sfc.f006.nc") + f"{self.task_config.GPREFIX}sfcf006.nc") @logit(logger) def finalize(self) -> None: @@ -196,6 +196,7 @@ def insert_analysis_variables(valid_time, fn_anl: str, fn_bkg: str) -> None: """ try: + logger.info(f"foo: {fn_bkg}") with nc.Dataset(fn_anl, 'r') as nc_anl, nc.Dataset(fn_bkg, 'r+') as nc_bkg: # Change the units of the time coordinate since the units from the UFS history # file will break UPP From 9f157a818e0cfa2b080bd3da70285ee499afc3ae Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Tue, 28 Oct 2025 21:14:30 +0000 Subject: [PATCH 03/13] Debug --- dev/workflow/rocoto/gfs_tasks.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/workflow/rocoto/gfs_tasks.py b/dev/workflow/rocoto/gfs_tasks.py index b48ea81a7e9..1ed3ad5da54 100644 --- a/dev/workflow/rocoto/gfs_tasks.py +++ b/dev/workflow/rocoto/gfs_tasks.py @@ -881,7 +881,7 @@ def marineanlchkpt(self): dep_dict = {'type': 'task', 'name': f'enkf{self.run}_marineanlecen'} deps.append(rocoto.add_dependency(dep_dict)) if self.options['do_mergensst']: - if do_jediatmvar + if self.options['do_jediatmvar']: data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' else: data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.analysis.sfc.a006.nc' @@ -1095,13 +1095,13 @@ def atmanlupp(self): atm_anl_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_ANALYSIS_TMPL"]) deps = [] - if do_jediatmvar: + if self.options['do_jediatmvar']: data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' else: data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) - if do_jediatmvar: + if self.options['do_jediatmvar']: data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' else: data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' From fbabe806acacde169757c0b3c1afcb262a067f99 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 13:29:07 +0000 Subject: [PATCH 04/13] Debug --- dev/workflow/rocoto/gfs_tasks.py | 15 +++------------ parm/archive/enkf.yaml.j2 | 2 +- parm/archive/gdas.yaml.j2 | 7 ++++++- parm/post/upp.yaml | 6 ++++++ sorc/gdas.cd | 2 +- ush/python/pygfs/task/atm_analysis.py | 2 +- ush/python/pygfs/task/atmens_analysis.py | 2 +- 7 files changed, 19 insertions(+), 17 deletions(-) diff --git a/dev/workflow/rocoto/gfs_tasks.py b/dev/workflow/rocoto/gfs_tasks.py index 1ed3ad5da54..4575353bdd1 100644 --- a/dev/workflow/rocoto/gfs_tasks.py +++ b/dev/workflow/rocoto/gfs_tasks.py @@ -881,10 +881,7 @@ def marineanlchkpt(self): dep_dict = {'type': 'task', 'name': f'enkf{self.run}_marineanlecen'} deps.append(rocoto.add_dependency(dep_dict)) if self.options['do_mergensst']: - if self.options['do_jediatmvar']: - data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' - else: - data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.analysis.sfc.a006.nc' + data = f'&ROTDIR;/{self.run}.@Y@m@d/@H/atmos/{self.run}.t@Hz.analysis.sfc.a006.nc' dep_dict = {'type': 'data', 'data': data} deps.append(rocoto.add_dependency(dep_dict)) dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) @@ -1095,16 +1092,10 @@ def atmanlupp(self): atm_anl_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_ANALYSIS_TMPL"]) deps = [] - if self.options['do_jediatmvar']: - data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' - else: - data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' + data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) - if self.options['do_jediatmvar']: - data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' - else: - data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' + data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) data = f'{atm_anl_path}/{self.run}.t@Hz.done.txt' diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index 18305adf948..c2df8aaad06 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -81,7 +81,7 @@ enkf: "correction_increment.yaml", "ensemble_recenter.yaml"] %} {% else %} - {% set da_stat_files = ["atmensstat"]%} + {% set da_stat_files = ["ensstat.atm.tar"]%} {% set da_conf_files = ["atmensanlletkf.yaml", "atmensanlfv3inc.yaml", "correction_increment.yaml", diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index 7163237c9b6..e461139c067 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -48,8 +48,13 @@ gdas: - "{{ COMIN_ATMOS_GRIB_1p00 | relpath(ROTDIR) }}/{{ head }}pres_a.1p00.analysis.grib2.idx" # Analysis netCDF (raw) data + {% if DO_JEDIATMVAR %} + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_analysis.atm.a006.nc" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_analysis.sfc.a006.nc" + {% else %} - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}analysis.atm.a006.nc" - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}analysis.sfc.a006.nc" + {% endif %} {% if DOHYBVAR %} # Ensemble-resolution analysis @@ -68,7 +73,7 @@ gdas: {% if DO_JEDIATMVAR %} - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}anlvar.atm.yaml" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}anlvar.fv3.atm.yaml" - - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}atmstat" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}stat.atm.tar" {% else %} - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}gsistat.txt" - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}cnvstat.tar" diff --git a/parm/post/upp.yaml b/parm/post/upp.yaml index 2193b11d48c..c4935104ae4 100644 --- a/parm/post/upp.yaml +++ b/parm/post/upp.yaml @@ -19,8 +19,14 @@ analysis: data_in: copy: - ["{{ PARMgfs }}/post/gfs/postxconfig-NT-gfs-anl.txt", "{{ DATA }}/postxconfig-NT.txt"] +{% if DO_JEDIATMVAR %} + - ["{{ COMIN_ATMOS_ANALYSIS }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.jedi_analysis.atm.a006.nc", "{{ DATA }}/{{ atmos_filename }}"] + - ["{{ COMIN_ATMOS_ANALYSIS }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.jedi_analysis.sfc.a006.nc", "{{ DATA }}/{{ flux_filename }}"] +{% else %} - ["{{ COMIN_ATMOS_ANALYSIS }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.analysis.atm.a006.nc", "{{ DATA }}/{{ atmos_filename }}"] - ["{{ COMIN_ATMOS_ANALYSIS }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.analysis.sfc.a006.nc", "{{ DATA }}/{{ flux_filename }}"] +{% endif %} + data_out: copy: - ["{{ DATA }}/GFSPRS.GrbF00", "{{ COMOUT_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.master.analysis.grib2"] diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 1432e1cdfbe..cf908b8031e 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 1432e1cdfbe66c148536d75d00c9eca2e57b9a2f +Subproject commit cf908b8031e55eb25f88cdc1a5017f2e859b8bfe diff --git a/ush/python/pygfs/task/atm_analysis.py b/ush/python/pygfs/task/atm_analysis.py index 0ea0724ef03..75abf124e34 100644 --- a/ush/python/pygfs/task/atm_analysis.py +++ b/ush/python/pygfs/task/atm_analysis.py @@ -132,7 +132,7 @@ def finalize(self) -> None: # Compress and tar diag files in COM directory self.tar_diag_files(self.task_config.COMOUT_ATMOS_ANALYSIS, - f"{self.task_config.APREFIX}atmstat") + f"{self.task_config.APREFIX}stat.atm.tar") # Tar radiative bias correction files into COM directory self.tar_radiative_bias_corrections(self.task_config.COMOUT_ATMOS_ANALYSIS, diff --git a/ush/python/pygfs/task/atmens_analysis.py b/ush/python/pygfs/task/atmens_analysis.py index 778cfaea8a3..59aaf4120dc 100644 --- a/ush/python/pygfs/task/atmens_analysis.py +++ b/ush/python/pygfs/task/atmens_analysis.py @@ -140,7 +140,7 @@ def finalize(self) -> None: # Compress and tar diag files in COM directory self.tar_diag_files(self.task_config.COMOUT_ATMOS_ANALYSIS_ENS, - f"{self.task_config.APREFIX_ENS}atmensstat") + f"{self.task_config.APREFIX_ENS}ensstat.atm.tar") # Save files from COM logger.info(f"Saving files to COM") From dfc1da7a9f8692d6ca9d71c27ebc3c7014ad0c15 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 14:35:10 +0000 Subject: [PATCH 05/13] shellnorms --- dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml | 2 +- ush/forecast_postdet.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml b/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml index 52015a9d3ba..f0f07171524 100644 --- a/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml +++ b/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml @@ -15,13 +15,13 @@ experiment: start: warm yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/ufs_hybatmDA_defaults.ci.yaml -# TODO: Reenable these when the GDASApp is updated to handle the new EE2-compliant changes skip_ci_on_hosts: - gaeac5 - gaeac6 - orion - hercules - awsepicglobalworkflow + - hera - ursa - wcoss2 diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index c75b6122426..dd96a27e764 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -183,7 +183,7 @@ EOF for iaufhr in "${iaufhrs[@]}"; do if [[ "${DO_JEDIATMVAR:-NO}" == "YES" ]]; then for tile in {1..6}; do - inc_file="jedi_increment.atm.i$(printf %03i '${iaufhr}').tile${tile}.nc" + inc_file="jedi_increment.atm.i$(printf %03i "${iaufhr}").tile${tile}.nc" inc_files+=("${inc_file}") IAU_INC_FILES="${IAU_INC_FILES}${delimiter}'${inc_file}'" done From eae64ba8c87af4ae15d742a0f012e86ecb4f361a Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 14:40:06 +0000 Subject: [PATCH 06/13] mistake --- dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml b/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml index f0f07171524..eaafc4b3853 100644 --- a/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml +++ b/dev/ci/cases/pr/C96C48_ufs_hybatmDA.yaml @@ -21,9 +21,6 @@ skip_ci_on_hosts: - orion - hercules - awsepicglobalworkflow - - hera - - ursa - - wcoss2 workflow: engine: rocoto From 87c681a16a65c899845cb3b903b84041e6bfcaa9 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 20:57:24 +0000 Subject: [PATCH 07/13] Debug --- dev/workflow/rocoto/gfs_tasks.py | 10 ++++++++-- parm/archive/enkf.yaml.j2 | 2 +- parm/archive/gfs_arcdir.yaml.j2 | 4 ++-- parm/archive/gfs_netcdfa.yaml.j2 | 5 +++++ parm/archive/gfsa.yaml.j2 | 6 +++--- ush/python/pygfs/task/atmens_analysis.py | 2 +- 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/dev/workflow/rocoto/gfs_tasks.py b/dev/workflow/rocoto/gfs_tasks.py index 4575353bdd1..432b36585a1 100644 --- a/dev/workflow/rocoto/gfs_tasks.py +++ b/dev/workflow/rocoto/gfs_tasks.py @@ -1092,10 +1092,16 @@ def atmanlupp(self): atm_anl_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_ANALYSIS_TMPL"]) deps = [] - data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' + if self.options['do_jediatmvar']: + data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' + else: + data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) - data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' + if self.options['do_jediatmvar']: + data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' + else: + data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) data = f'{atm_anl_path}/{self.run}.t@Hz.done.txt' diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index c2df8aaad06..c13bf32a58a 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -81,7 +81,7 @@ enkf: "correction_increment.yaml", "ensemble_recenter.yaml"] %} {% else %} - {% set da_stat_files = ["ensstat.atm.tar"]%} + {% set da_stat_files = ["stat.atm.tar"]%} {% set da_conf_files = ["atmensanlletkf.yaml", "atmensanlfv3inc.yaml", "correction_increment.yaml", diff --git a/parm/archive/gfs_arcdir.yaml.j2 b/parm/archive/gfs_arcdir.yaml.j2 index 7eb29c712cb..e80eb47e03b 100644 --- a/parm/archive/gfs_arcdir.yaml.j2 +++ b/parm/archive/gfs_arcdir.yaml.j2 @@ -38,7 +38,7 @@ ARCDIR ~ "/pgbanl." ~ RUN ~ "." ~ cycle_YMDH ~ ".grib2"]) %} {% if DO_JEDIATMVAR == True %} - {% do det_anl_files.append([COMIN_ATMOS_ANALYSIS ~ "/" ~ head ~ "atmstat", + {% do det_anl_files.append([COMIN_ATMOS_ANALYSIS ~ "/" ~ head ~ "stat.atm.tar", ARCDIR ~ "/atmstat." ~ RUN ~ "." ~ cycle_YMDH ]) %} {% else %} {% do det_anl_files.append([COMIN_ATMOS_ANALYSIS ~ "/" ~ head ~ "gsistat.txt", @@ -125,7 +125,7 @@ # Ensemble analysis files {% set enkf_files = [] %} {% if DO_JEDIATMENS == True %} - {% do enkf_files.append([COMIN_ATMOS_ANALYSIS_ENSSTAT ~ "/" ~ head ~ "atmensstat", + {% do enkf_files.append([COMIN_ATMOS_ANALYSIS_ENSSTAT ~ "/" ~ head ~ "stat.atm.tar", ARCDIR ~ "/atmensstat." ~ RUN ~ "." ~ cycle_YMDH ]) %} {% else %} {% do enkf_files.append([COMIN_ATMOS_ANALYSIS_ENSSTAT ~ "/" ~ head ~ "enkfstat.txt", diff --git a/parm/archive/gfs_netcdfa.yaml.j2 b/parm/archive/gfs_netcdfa.yaml.j2 index 96641265df4..965a6a3d226 100644 --- a/parm/archive/gfs_netcdfa.yaml.j2 +++ b/parm/archive/gfs_netcdfa.yaml.j2 @@ -3,8 +3,13 @@ gfs_netcdfa: name: "GFS_NETCDFA" target: "{{ ATARDIR }}/{{ cycle_YMDH }}/gfs_netcdfa.tar" required: + {% if DO_JEDIATMVAR %} + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_analysis.atm.a006.nc" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_analysis.sfc.a006.nc" + {% else %} - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}analysis.atm.a006.nc" - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}analysis.sfc.a006.nc" + {% endif %} {% for iauhr in IAUFHRS %} {% if DO_JEDIATMVAR %} {% for itile in range(6) %} diff --git a/parm/archive/gfsa.yaml.j2 b/parm/archive/gfsa.yaml.j2 index 1f41488f4b8..bb7febbdc7f 100644 --- a/parm/archive/gfsa.yaml.j2 +++ b/parm/archive/gfsa.yaml.j2 @@ -35,9 +35,9 @@ gfsa: # State data {% if DO_JEDIATMVAR %} - - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}atmanlvar.yaml" - - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}atmanlfv3inc.yaml" - - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}atmstat" + - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}anlvar.atm.yaml" + - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}anlvar.fv3.atm.yaml" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}stat.atm.tar" {% else %} - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}gsistat.txt" {% endif %} diff --git a/ush/python/pygfs/task/atmens_analysis.py b/ush/python/pygfs/task/atmens_analysis.py index 59aaf4120dc..99cc210408c 100644 --- a/ush/python/pygfs/task/atmens_analysis.py +++ b/ush/python/pygfs/task/atmens_analysis.py @@ -140,7 +140,7 @@ def finalize(self) -> None: # Compress and tar diag files in COM directory self.tar_diag_files(self.task_config.COMOUT_ATMOS_ANALYSIS_ENS, - f"{self.task_config.APREFIX_ENS}ensstat.atm.tar") + f"{self.task_config.APREFIX_ENS}stat.atm.tar") # Save files from COM logger.info(f"Saving files to COM") From 60344da26aad8be9b6c0481fa8c0ddc20656feae Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 21:44:02 +0000 Subject: [PATCH 08/13] Update gdas hash --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index cf908b8031e..931ec2aeb69 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit cf908b8031e55eb25f88cdc1a5017f2e859b8bfe +Subproject commit 931ec2aeb693c4c70ba9edcd21364a2a3b7b9ce5 From 9bd286c4d01e991c937891b8c2cec9824d774be5 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 30 Oct 2025 12:35:55 +0000 Subject: [PATCH 09/13] Debug --- dev/workflow/rocoto/gfs_tasks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/workflow/rocoto/gfs_tasks.py b/dev/workflow/rocoto/gfs_tasks.py index 432b36585a1..a1680911c3b 100644 --- a/dev/workflow/rocoto/gfs_tasks.py +++ b/dev/workflow/rocoto/gfs_tasks.py @@ -1095,13 +1095,13 @@ def atmanlupp(self): if self.options['do_jediatmvar']: data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' else: - data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.atm.a006.nc' + data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.atm.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) if self.options['do_jediatmvar']: data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' else: - data = f'{atm_anl_path}/{self.run}.t@Hz.jedi_analysis.sfc.a006.nc' + data = f'{atm_anl_path}/{self.run}.t@Hz.analysis.sfc.a006.nc' dep_dict = {'type': 'data', 'data': data, 'age': 120} deps.append(rocoto.add_dependency(dep_dict)) data = f'{atm_anl_path}/{self.run}.t@Hz.done.txt' From 35908fa5aacffc37efe002ddabc83c27dc7ebd59 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 30 Oct 2025 13:41:22 +0000 Subject: [PATCH 10/13] Removing debugging print --- ush/python/pygfs/task/fv3_analysis_calc.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ush/python/pygfs/task/fv3_analysis_calc.py b/ush/python/pygfs/task/fv3_analysis_calc.py index 0a96cf10c1b..e583f3f142a 100644 --- a/ush/python/pygfs/task/fv3_analysis_calc.py +++ b/ush/python/pygfs/task/fv3_analysis_calc.py @@ -196,7 +196,6 @@ def insert_analysis_variables(valid_time, fn_anl: str, fn_bkg: str) -> None: """ try: - logger.info(f"foo: {fn_bkg}") with nc.Dataset(fn_anl, 'r') as nc_anl, nc.Dataset(fn_bkg, 'r+') as nc_bkg: # Change the units of the time coordinate since the units from the UFS history # file will break UPP From 7b8602ebb9327abd2eedc778718bdc8f4a59cda7 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 30 Oct 2025 15:57:58 +0000 Subject: [PATCH 11/13] Address reviewer commends and update GDAS hash --- parm/archive/enkf_restarta_grp.yaml.j2 | 1 - sorc/gdas.cd | 2 +- ush/forecast_postdet.sh | 12 +++++++++--- ush/forecast_predet.sh | 3 --- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/parm/archive/enkf_restarta_grp.yaml.j2 b/parm/archive/enkf_restarta_grp.yaml.j2 index f40ee11a723..a82bf67505a 100644 --- a/parm/archive/enkf_restarta_grp.yaml.j2 +++ b/parm/archive/enkf_restarta_grp.yaml.j2 @@ -40,7 +40,6 @@ enkf_restarta_grp: {% endfor %} {% else %} {% for iaufhr in IAUFHRS %} - {% set iaufhr = iaufhr %} {% if do_calc_increment %} - "{{ COMIN_ATMOS_ANALYSIS_MEM | relpath(ROTDIR) }}/{{ head }}analysis.atm.a{{ '%03d' % iaufhr }}.nc" {% else %} diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 931ec2aeb69..e2b780da168 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 931ec2aeb693c4c70ba9edcd21364a2a3b7b9ce5 +Subproject commit e2b780da168c1b9a45fb6487fa71ff148e42754d diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 76562f20525..128a9dac156 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -214,15 +214,21 @@ EOF fi fi + if [ "${RUN}" = "enkfgfs" ] || [ "${RUN}" = "enkfgdas" ]; then + prefix_atminc="recentered_" + else + prefix_atminc="" + fi + local increment_file for inc_file in "${inc_files[@]}"; do if [[ "${DO_JEDIATMVAR:-NO}" == "YES" ]]; then - increment_file="${COMIN_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${PREFIX_ATMINC}${inc_file}" + increment_file="${COMIN_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${prefix_atminc}${inc_file}" else if [[ "${RUN}" == "gcafs" ]]; then - increment_file="${COMIN_ATMOS_ANALYSIS}/gcdas.t${cyc}z.${PREFIX_ATMINC}${inc_file}" + increment_file="${COMIN_ATMOS_ANALYSIS}/gcdas.t${cyc}z.${prefix_atminc}${inc_file}" else - increment_file="${COMIN_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${PREFIX_ATMINC}${inc_file}" + increment_file="${COMIN_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${prefix_atminc}${inc_file}" fi fi cpreq "${increment_file}" "${DATA}/INPUT/${inc_file}" diff --git a/ush/forecast_predet.sh b/ush/forecast_predet.sh index 2dd6802323f..905ae85b351 100755 --- a/ush/forecast_predet.sh +++ b/ush/forecast_predet.sh @@ -176,9 +176,6 @@ FV3_predet(){ FV3_OUTPUT_FH_NML="${FV3_OUTPUT_FH}" fi - # Other options - PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment - # IAU options IAUFHRS=${IAUFHRS:-0} IAU_DELTHRS=${IAU_DELTHRS:-0} From c68fe86f467d286f5f15198886c27442b95b2556 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 30 Oct 2025 16:33:32 +0000 Subject: [PATCH 12/13] Address reviewer comments and shellnorms --- dev/parm/config/gfs/config.efcs | 5 ----- ush/forecast_postdet.sh | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/dev/parm/config/gfs/config.efcs b/dev/parm/config/gfs/config.efcs index 422b38d64cf..013188a074e 100644 --- a/dev/parm/config/gfs/config.efcs +++ b/dev/parm/config/gfs/config.efcs @@ -89,11 +89,6 @@ export dspheat=".true." export shal_cnv=".true." export FHZERO=6 -# Set PREFIX_ATMINC to r when recentering on -if [[ ${RECENTER_ENKF:-"YES"} == "YES" ]]; then - export PREFIX_ATMINC="recentered_" -fi - # Set restart interval to enable restarting forecasts after failures export restart_interval=${restart_interval_enkfgdas:-6} if [[ ${RUN} == "enkfgfs" ]]; then diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh index 128a9dac156..1f770bdfd73 100755 --- a/ush/forecast_postdet.sh +++ b/ush/forecast_postdet.sh @@ -214,7 +214,7 @@ EOF fi fi - if [ "${RUN}" = "enkfgfs" ] || [ "${RUN}" = "enkfgdas" ]; then + if [[ "${RUN}" = "enkfgfs" ]] || [[ "${RUN}" = "enkfgdas" ]]; then prefix_atminc="recentered_" else prefix_atminc="" From 149295c5013279f02dde65fc042e70a1bb5273d7 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 30 Oct 2025 20:21:33 +0000 Subject: [PATCH 13/13] Reviewr comment --- parm/archive/gfs_netcdfa.yaml.j2 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/parm/archive/gfs_netcdfa.yaml.j2 b/parm/archive/gfs_netcdfa.yaml.j2 index 965a6a3d226..84196a67d9b 100644 --- a/parm/archive/gfs_netcdfa.yaml.j2 +++ b/parm/archive/gfs_netcdfa.yaml.j2 @@ -10,13 +10,13 @@ gfs_netcdfa: - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}analysis.atm.a006.nc" - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}analysis.sfc.a006.nc" {% endif %} - {% for iauhr in IAUFHRS %} + {% for iaufhr in IAUFHRS %} {% if DO_JEDIATMVAR %} {% for itile in range(6) %} - - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_increment.atm.i{{ "%03d" % iauhr }}.tile{{ itile+1 }}.nc" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}jedi_increment.atm.i{{ "%03d" % iaufhr }}.tile{{ itile+1 }}.nc" {% endfor %} {% else %} - - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}increment.atm.i{{ "%03d" % iauhr }}.nc" + - "{{ COMIN_ATMOS_ANALYSIS | relpath(ROTDIR) }}/{{ head }}increment.atm.i{{ "%03d" % iaufhr }}.nc" {% endif %} {% endfor %} optional: