From a3498bb805d3c7e9c982c9aeb5f347e8d02a6fc9 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Tue, 28 Oct 2025 15:30:48 +0000 Subject: [PATCH 01/35] Update archives for new EE2 standard stat filenames --- parm/archive/enkf.yaml.j2 | 2 +- parm/archive/gdas.yaml.j2 | 4 ++-- parm/archive/gfs_arcdir.yaml.j2 | 4 ++-- parm/archive/gfsa.yaml.j2 | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index ad69d0d284c..14e745b101d 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -96,7 +96,7 @@ enkf: {% endfor %} {% if DO_JEDISNOWDA %} - - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}snowstat.tgz" + - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}stat.tar.gz" {% for itile in range(1,7) %} # Snow analysis is 3dvar - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index 7163237c9b6..fcc43da99fa 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -96,9 +96,9 @@ gdas: {% for itile in range(1,7) %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" {% endfor %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snowstat.tgz" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}stat.tar.gz" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" - - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}snow_iodastat.tgz" + - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}iodastat.tar.gz" {% endif %} # Ozone verification diff --git a/parm/archive/gfs_arcdir.yaml.j2 b/parm/archive/gfs_arcdir.yaml.j2 index 7eb29c712cb..5160fbf2160 100644 --- a/parm/archive/gfs_arcdir.yaml.j2 +++ b/parm/archive/gfs_arcdir.yaml.j2 @@ -46,8 +46,8 @@ {% endif %} {% if DO_JEDISNOWDA == True %} - {% do det_anl_files.append([COMIN_SNOW_ANALYSIS ~ "/" ~ head ~ "snowstat.tgz", - ARCDIR ~ "/snowstat." ~ RUN ~ "." ~ cycle_YMDH ~ ".tgz"]) %} + {% do det_anl_files.append([COMIN_SNOW_ANALYSIS ~ "/" ~ head ~ "stat.tar.gz", + ARCDIR ~ "/snowstat." ~ RUN ~ "." ~ cycle_YMDH ~ ".tar.gz"]) %} {% endif %} {% if DO_AERO_ANL %} diff --git a/parm/archive/gfsa.yaml.j2 b/parm/archive/gfsa.yaml.j2 index 1f41488f4b8..8d2918dbe66 100644 --- a/parm/archive/gfsa.yaml.j2 +++ b/parm/archive/gfsa.yaml.j2 @@ -54,7 +54,7 @@ gfsa: {% for itile in range(1,7) %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" {% endfor %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snowstat.tgz" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}stat.tar.gz" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" {% endif %} From 825387410ee5c19590bb6f2dcf477620819076c7 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Tue, 28 Oct 2025 18:57:56 +0000 Subject: [PATCH 02/35] 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 03/35] 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 04/35] 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 05/35] 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 06/35] 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 07/35] 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 5b03103d11be2c157b5c46f1f632bbeaa1cd747f Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 15:18:15 +0000 Subject: [PATCH 08/35] Update stats file names --- parm/archive/enkf.yaml.j2 | 2 +- parm/archive/gdas.yaml.j2 | 4 ++-- parm/archive/gfs_arcdir.yaml.j2 | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index 14e745b101d..3394a4438e3 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -96,7 +96,7 @@ enkf: {% endfor %} {% if DO_JEDISNOWDA %} - - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}stat.tar.gz" + - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.ensmean.tgz" {% for itile in range(1,7) %} # Snow analysis is 3dvar - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index fcc43da99fa..2e954d50092 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -96,9 +96,9 @@ gdas: {% for itile in range(1,7) %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" {% endfor %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}stat.tar.gz" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tgz" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" - - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}iodastat.tar.gz" + - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}ioda_hofx_stats.tgz" {% endif %} # Ozone verification diff --git a/parm/archive/gfs_arcdir.yaml.j2 b/parm/archive/gfs_arcdir.yaml.j2 index 5160fbf2160..d25017b2861 100644 --- a/parm/archive/gfs_arcdir.yaml.j2 +++ b/parm/archive/gfs_arcdir.yaml.j2 @@ -46,7 +46,7 @@ {% endif %} {% if DO_JEDISNOWDA == True %} - {% do det_anl_files.append([COMIN_SNOW_ANALYSIS ~ "/" ~ head ~ "stat.tar.gz", + {% do det_anl_files.append([COMIN_SNOW_ANALYSIS ~ "/" ~ head ~ "snow_analysis.ioda_hofx.tgz", ARCDIR ~ "/snowstat." ~ RUN ~ "." ~ cycle_YMDH ~ ".tar.gz"]) %} {% endif %} From a6c18800b1aef809a966a90a89117b3ea46c4f68 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 15:30:00 +0000 Subject: [PATCH 09/35] Update snow analysis filenames --- parm/archive/enkf.yaml.j2 | 2 +- parm/archive/gdas.yaml.j2 | 2 +- parm/archive/gfsa.yaml.j2 | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index 3394a4438e3..7bfeb6ef069 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -99,7 +99,7 @@ enkf: - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.ensmean.tgz" {% for itile in range(1,7) %} # Snow analysis is 3dvar - - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" + - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} {% endif %} diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index 2e954d50092..fa20cc74ad2 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -94,7 +94,7 @@ gdas: # Snow analysis data {% if DO_JEDISNOWDA %} {% for itile in range(1,7) %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tgz" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" diff --git a/parm/archive/gfsa.yaml.j2 b/parm/archive/gfsa.yaml.j2 index 8d2918dbe66..7c6baeabbdd 100644 --- a/parm/archive/gfsa.yaml.j2 +++ b/parm/archive/gfsa.yaml.j2 @@ -52,9 +52,9 @@ gfsa: # Snow analysis data {% if DO_JEDISNOWDA %} {% for itile in range(1,7) %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/snowinc.{{ cycle_YMD }}.{{ cycle_HH }}0000.sfc_data.tile{{ itile }}.nc" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}stat.tar.gz" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tgz" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" {% endif %} From b022ff6ea6a0724069550d62182a10ff1007e49f Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 16:33:51 +0000 Subject: [PATCH 10/35] Update snow filenames in the GDASApp --- scripts/exgdas_enkf_sfc.sh | 8 ++++++-- scripts/exglobal_atmos_sfcanl.sh | 4 +++- sorc/gdas.cd | 2 +- ush/python/pygfs/task/snow_analysis.py | 6 +++--- ush/python/pygfs/task/snowens_analysis.py | 6 +++--- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/scripts/exgdas_enkf_sfc.sh b/scripts/exgdas_enkf_sfc.sh index 5dff02f56b8..1fb8c53a79c 100755 --- a/scripts/exgdas_enkf_sfc.sh +++ b/scripts/exgdas_enkf_sfc.sh @@ -186,8 +186,10 @@ if [[ "$DOIAU" == "YES" ]]; then COMIN_SNOW_ANALYSIS_MEM:COM_SNOW_ANALYSIS_TMPL # determine where the input snow restart files come from + snow_prefix="" if [[ "${DO_JEDISNOWDA:-}" == "YES" ]]; then sfcdata_dir="${COMIN_SNOW_ANALYSIS_MEM}" + snow_prefix="snow_analysis." else sfcdata_dir="${COMIN_ATMOS_RESTART_MEM_PREV}" fi @@ -195,7 +197,7 @@ if [[ "$DOIAU" == "YES" ]]; then if [[ ${TILE_NUM} -eq 1 ]]; then mkdir -p "${COMOUT_ATMOS_RESTART_MEM}" fi - cpreq "${sfcdata_dir}/${bPDY}.${bcyc}0000.sfc_data.tile${n}.nc" \ + cpreq "${sfcdata_dir}/${bPDY}.${bcyc}0000.${snow_prefix}sfc_data.tile${n}.nc" \ "${DATA}/fnbgsi.${cmem}" cpreq "${DATA}/fnbgsi.${cmem}" "${DATA}/fnbgso.${cmem}" cpreq "${FIXgfs}/orog/${CASE}/${CASE}_grid.tile${n}.nc" "${DATA}/fngrid.${cmem}" @@ -264,13 +266,15 @@ if [[ "${DOSFCANL_ENKF}" == "YES" ]]; then COMIN_ATMOS_ANALYSIS_MEM:COM_ATMOS_ANALYSIS_TMPL # determine where the input snow restart files come from + snow_prefix="" if [[ "${DO_JEDISNOWDA:-}" == "YES" ]]; then sfcdata_dir="${COMIN_SNOW_ANALYSIS_MEM}" + snow_prefix="snow_analysis." else sfcdata_dir="${COMIN_ATMOS_RESTART_MEM_PREV}" fi - cpreq "${sfcdata_dir}/${PDY}.${cyc}0000.sfc_data.tile${n}.nc" \ + cpreq "${sfcdata_dir}/${PDY}.${cyc}0000.${snow_prefix}sfc_data.tile${n}.nc" \ "${DATA}/fnbgsi.${cmem}" cpreq "${DATA}/fnbgsi.${cmem}" "${DATA}/fnbgso.${cmem}" cpreq "${FIXgfs}/orog/${CASE}/${CASE}_grid.tile${n}.nc" "${DATA}/fngrid.${cmem}" diff --git a/scripts/exglobal_atmos_sfcanl.sh b/scripts/exglobal_atmos_sfcanl.sh index bfe96eae87a..c24a044d75a 100755 --- a/scripts/exglobal_atmos_sfcanl.sh +++ b/scripts/exglobal_atmos_sfcanl.sh @@ -90,8 +90,10 @@ else fi # determine where the input snow restart files come from +snow_prefix="" if [[ "${DO_JEDISNOWDA:-}" == "YES" ]]; then sfcdata_dir="${COMIN_SNOW_ANALYSIS}" + snow_prefix="snow_analysis." else sfcdata_dir="${COMIN_ATMOS_RESTART_PREV}" fi @@ -165,7 +167,7 @@ for hr in "${!gcycle_dates[@]}"; do # Copy inputs from COMIN to DATA for (( nn=1; nn <= ntiles; nn++ )); do - cpreq "${sfcdata_dir}/${datestr}.sfc_data.tile${nn}.nc" "${DATA}/fnbgsi.00${nn}" + cpreq "${sfcdata_dir}/${datestr}.${snow_prefix}sfc_data.tile${nn}.nc" "${DATA}/fnbgsi.00${nn}" cpreq "${DATA}/fnbgsi.00${nn}" "${DATA}/fnbgso.00${nn}" done diff --git a/sorc/gdas.cd b/sorc/gdas.cd index a4893c1453a..ff5de1515d7 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit a4893c1453ac8d587e8e5b5a452a1c035b22812a +Subproject commit ff5de1515d7d27f9125c413ee7500be381b5f6a1 diff --git a/ush/python/pygfs/task/snow_analysis.py b/ush/python/pygfs/task/snow_analysis.py index 03fdd1312af..31c47b55dd9 100644 --- a/ush/python/pygfs/task/snow_analysis.py +++ b/ush/python/pygfs/task/snow_analysis.py @@ -148,7 +148,7 @@ def finalize(self) -> None: # Compress and tar diag files into COM directory self.tar_diag_files(self.task_config.COMOUT_SNOW_ANALYSIS, - f"{self.task_config.APREFIX}snowstat.tgz") + f"{self.task_config.APREFIX}snow_analysis.ioda_hofx.tgz") # Save files to COM logger.info(f"Saving files to COM") @@ -246,8 +246,8 @@ def add_increments(self) -> None: if self.task_config.DOIAU: logger.info("Copying increments to beginning of window") - template_in = f'snowinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' - template_out = f'snowinc.{to_fv3time(self.task_config.WINDOW_BEGIN)}.sfc_data.tile{{tilenum}}.nc' + template_in = f'{to_fv3time(self.task_config.current_cycle)}.snow_increment.sfc_data.tile{{tilenum}}.nc' + template_out = f'{to_fv3time(self.task_config.WINDOW_BEGIN)}.snow_increment.sfc_data.tile{{tilenum}}.nc' inclist = [] for itile in range(1, self.task_config.ntiles + 1): filename_in = template_in.format(tilenum=itile) diff --git a/ush/python/pygfs/task/snowens_analysis.py b/ush/python/pygfs/task/snowens_analysis.py index 78206324f12..e526a4841ec 100644 --- a/ush/python/pygfs/task/snowens_analysis.py +++ b/ush/python/pygfs/task/snowens_analysis.py @@ -152,7 +152,7 @@ def finalize(self) -> None: # Compress and tar diag files into COM directory self.tar_diag_files(self.task_config.COMOUT_SNOW_ANALYSIS, - f"{self.task_config.APREFIX_ENS}snowstat.tgz") + f"{self.task_config.APREFIX_ENS}snow_analysis.ioda_hofx.tgz") # Save files to COM logger.info(f"Saving files to COM") @@ -233,8 +233,8 @@ def add_increments(self) -> None: if self.task_config.DOIAU: logger.info("Copying increments to beginning of window") - template_in = f'snowinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' - template_out = f'snowinc.{to_fv3time(self.task_config.WINDOW_BEGIN)}.sfc_data.tile{{tilenum}}.nc' + template_in = f'{to_fv3time(self.task_config.current_cycle)}.snow_increment.sfc_data.tile{{tilenum}}.nc' + template_out = f'{to_fv3time(self.task_config.WINDOW_BEGIN)}.snow_increment.sfc_data.tile{{tilenum}}.nc' inclist = [] for itile in range(1, self.task_config.ntiles + 1): filename_in = template_in.format(tilenum=itile) From 88da2980ab55f8b58532263a9c144d7e0144ec61 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 16:36:38 +0000 Subject: [PATCH 11/35] Fix gempak cleanup issue --- dev/parm/config/gfs/config.cleanup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/parm/config/gfs/config.cleanup b/dev/parm/config/gfs/config.cleanup index 7b0b718f4dc..543d624caf2 100644 --- a/dev/parm/config/gfs/config.cleanup +++ b/dev/parm/config/gfs/config.cleanup @@ -12,7 +12,7 @@ export CLEANUP_COM="YES" # NO=retain ROTDIR. YES default in cleanup.sh export RMOLDSTD=144 export RMOLDEND=24 -if [[ "${DO_GEMPAK}" == "YES" ]]; then +if [[ "${DO_GEMPAK}" == "YES" && "${RUN}" == "gfs" ]]; then export RMOLDSTD=346 export RMOLDEND=222 fi From 98501e89af2dd5284a2ab1b11a48acfecc09d157 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 16:46:45 +0000 Subject: [PATCH 12/35] Actually update the GDASApp hash --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index ff5de1515d7..92523d3b5e6 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit ff5de1515d7d27f9125c413ee7500be381b5f6a1 +Subproject commit 92523d3b5e6375d4de9cd026c11c643db6291755 From bbe01ccbd4cd1582d309c64ec8c92c0c8e7ff459 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 20:35:28 +0000 Subject: [PATCH 13/35] Fix the input snowinc filenames --- ush/python/pygfs/task/snow_analysis.py | 2 +- ush/python/pygfs/task/snowens_analysis.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ush/python/pygfs/task/snow_analysis.py b/ush/python/pygfs/task/snow_analysis.py index 31c47b55dd9..5a6f3115375 100644 --- a/ush/python/pygfs/task/snow_analysis.py +++ b/ush/python/pygfs/task/snow_analysis.py @@ -246,7 +246,7 @@ def add_increments(self) -> None: if self.task_config.DOIAU: logger.info("Copying increments to beginning of window") - template_in = f'{to_fv3time(self.task_config.current_cycle)}.snow_increment.sfc_data.tile{{tilenum}}.nc' + template_in = f'snowinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' template_out = f'{to_fv3time(self.task_config.WINDOW_BEGIN)}.snow_increment.sfc_data.tile{{tilenum}}.nc' inclist = [] for itile in range(1, self.task_config.ntiles + 1): diff --git a/ush/python/pygfs/task/snowens_analysis.py b/ush/python/pygfs/task/snowens_analysis.py index e526a4841ec..f3bf782c131 100644 --- a/ush/python/pygfs/task/snowens_analysis.py +++ b/ush/python/pygfs/task/snowens_analysis.py @@ -233,7 +233,7 @@ def add_increments(self) -> None: if self.task_config.DOIAU: logger.info("Copying increments to beginning of window") - template_in = f'{to_fv3time(self.task_config.current_cycle)}.snow_increment.sfc_data.tile{{tilenum}}.nc' + template_in = f'snowinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' template_out = f'{to_fv3time(self.task_config.WINDOW_BEGIN)}.snow_increment.sfc_data.tile{{tilenum}}.nc' inclist = [] for itile in range(1, self.task_config.ntiles + 1): From 87c681a16a65c899845cb3b903b84041e6bfcaa9 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 20:57:24 +0000 Subject: [PATCH 14/35] 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 526a230634046692302f38a5ea6b30903afedc21 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 21:18:23 +0000 Subject: [PATCH 15/35] Fix snowinc output templates --- ush/python/pygfs/task/snow_analysis.py | 2 +- ush/python/pygfs/task/snowens_analysis.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ush/python/pygfs/task/snow_analysis.py b/ush/python/pygfs/task/snow_analysis.py index 5a6f3115375..26644f93778 100644 --- a/ush/python/pygfs/task/snow_analysis.py +++ b/ush/python/pygfs/task/snow_analysis.py @@ -247,7 +247,7 @@ def add_increments(self) -> None: if self.task_config.DOIAU: logger.info("Copying increments to beginning of window") template_in = f'snowinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' - template_out = f'{to_fv3time(self.task_config.WINDOW_BEGIN)}.snow_increment.sfc_data.tile{{tilenum}}.nc' + template_out = f'snowinc.{to_fv3time(self.task_config.WINDOW_BEGIN)}.sfc_data.tile{{tilenum}}.nc' inclist = [] for itile in range(1, self.task_config.ntiles + 1): filename_in = template_in.format(tilenum=itile) diff --git a/ush/python/pygfs/task/snowens_analysis.py b/ush/python/pygfs/task/snowens_analysis.py index f3bf782c131..ea176a99cba 100644 --- a/ush/python/pygfs/task/snowens_analysis.py +++ b/ush/python/pygfs/task/snowens_analysis.py @@ -234,7 +234,7 @@ def add_increments(self) -> None: if self.task_config.DOIAU: logger.info("Copying increments to beginning of window") template_in = f'snowinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' - template_out = f'{to_fv3time(self.task_config.WINDOW_BEGIN)}.snow_increment.sfc_data.tile{{tilenum}}.nc' + template_out = f'snowinc.{to_fv3time(self.task_config.WINDOW_BEGIN)}.sfc_data.tile{{tilenum}}.nc' inclist = [] for itile in range(1, self.task_config.ntiles + 1): filename_in = template_in.format(tilenum=itile) From 2a19083cbfe61f3c3b1b6ebf48ee41488a15ba02 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Wed, 29 Oct 2025 21:19:56 +0000 Subject: [PATCH 16/35] Incorporate GDASApp fixes for snow renaming --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 92523d3b5e6..e3b3034512c 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 92523d3b5e6375d4de9cd026c11c643db6291755 +Subproject commit e3b3034512c40ddd20e6971f9bf7010da2aa9fb7 From 60344da26aad8be9b6c0481fa8c0ddc20656feae Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Wed, 29 Oct 2025 21:44:02 +0000 Subject: [PATCH 17/35] 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 18/35] 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 b91fb22b4e71d80e2867ddfe177b1776d41b600f Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 30 Oct 2025 13:17:58 +0000 Subject: [PATCH 19/35] Fix anlstat tarball name --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index e3b3034512c..1425745ea0a 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit e3b3034512c40ddd20e6971f9bf7010da2aa9fb7 +Subproject commit 1425745ea0a13c616a32e38e6e3e7698687d13e5 From 4dc2857843d728b831ac639f75532891d5cedde3 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 30 Oct 2025 13:18:39 +0000 Subject: [PATCH 20/35] Add && true to ensure err_exit can actually be called --- jobs/JGLOBAL_ANALYSIS_STATS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jobs/JGLOBAL_ANALYSIS_STATS b/jobs/JGLOBAL_ANALYSIS_STATS index efb34c8ce82..488392112be 100755 --- a/jobs/JGLOBAL_ANALYSIS_STATS +++ b/jobs/JGLOBAL_ANALYSIS_STATS @@ -30,7 +30,7 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx COMIN_OBS:COM_OBS_TMPL \ # Run relevant script EXSCRIPT=${ANLSTATSPY:-${SCRgfs}/exglobal_analysis_stats.py} -${EXSCRIPT} +${EXSCRIPT} && true export err=$? if [[ ${err} -ne 0 ]]; then err_exit From 106a717168df68741a27b1af14c9a6dca26fcc74 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 30 Oct 2025 13:19:34 +0000 Subject: [PATCH 21/35] Correct tarball extensions --- parm/archive/enkf.yaml.j2 | 2 +- parm/archive/gdas.yaml.j2 | 4 ++-- parm/archive/gfs_arcdir.yaml.j2 | 4 ++-- parm/archive/gfsa.yaml.j2 | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/parm/archive/enkf.yaml.j2 b/parm/archive/enkf.yaml.j2 index 7bfeb6ef069..d94ec242ba1 100644 --- a/parm/archive/enkf.yaml.j2 +++ b/parm/archive/enkf.yaml.j2 @@ -96,7 +96,7 @@ enkf: {% endfor %} {% if DO_JEDISNOWDA %} - - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.ensmean.tgz" + - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.ensmean.tar" {% for itile in range(1,7) %} # Snow analysis is 3dvar - "{{ COMIN_SNOW_ANALYSIS_ENSSTAT | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index fa20cc74ad2..b2e411289b1 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -96,9 +96,9 @@ gdas: {% for itile in range(1,7) %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tgz" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tar" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" - - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}ioda_hofx_stats.tgz" + - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}ioda_hofx_stats.tar" {% endif %} # Ozone verification diff --git a/parm/archive/gfs_arcdir.yaml.j2 b/parm/archive/gfs_arcdir.yaml.j2 index d25017b2861..662ae63a6f4 100644 --- a/parm/archive/gfs_arcdir.yaml.j2 +++ b/parm/archive/gfs_arcdir.yaml.j2 @@ -46,8 +46,8 @@ {% endif %} {% if DO_JEDISNOWDA == True %} - {% do det_anl_files.append([COMIN_SNOW_ANALYSIS ~ "/" ~ head ~ "snow_analysis.ioda_hofx.tgz", - ARCDIR ~ "/snowstat." ~ RUN ~ "." ~ cycle_YMDH ~ ".tar.gz"]) %} + {% do det_anl_files.append([COMIN_SNOW_ANALYSIS ~ "/" ~ head ~ "snow_analysis.ioda_hofx.tar", + ARCDIR ~ "/snowstat." ~ RUN ~ "." ~ cycle_YMDH ~ ".tar"]) %} {% endif %} {% if DO_AERO_ANL %} diff --git a/parm/archive/gfsa.yaml.j2 b/parm/archive/gfsa.yaml.j2 index 7c6baeabbdd..e18fa817b7c 100644 --- a/parm/archive/gfsa.yaml.j2 +++ b/parm/archive/gfsa.yaml.j2 @@ -54,7 +54,7 @@ gfsa: {% for itile in range(1,7) %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tgz" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tar" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" {% endif %} From a2a839ccdd979aeddd42247abcf886fddad2aeaf Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 30 Oct 2025 13:20:09 +0000 Subject: [PATCH 22/35] More extensions --- ush/python/pygfs/task/snow_analysis.py | 2 +- ush/python/pygfs/task/snowens_analysis.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ush/python/pygfs/task/snow_analysis.py b/ush/python/pygfs/task/snow_analysis.py index 26644f93778..a854696bda6 100644 --- a/ush/python/pygfs/task/snow_analysis.py +++ b/ush/python/pygfs/task/snow_analysis.py @@ -148,7 +148,7 @@ def finalize(self) -> None: # Compress and tar diag files into COM directory self.tar_diag_files(self.task_config.COMOUT_SNOW_ANALYSIS, - f"{self.task_config.APREFIX}snow_analysis.ioda_hofx.tgz") + f"{self.task_config.APREFIX}snow_analysis.ioda_hofx.tar") # Save files to COM logger.info(f"Saving files to COM") diff --git a/ush/python/pygfs/task/snowens_analysis.py b/ush/python/pygfs/task/snowens_analysis.py index ea176a99cba..8016576779b 100644 --- a/ush/python/pygfs/task/snowens_analysis.py +++ b/ush/python/pygfs/task/snowens_analysis.py @@ -152,7 +152,7 @@ def finalize(self) -> None: # Compress and tar diag files into COM directory self.tar_diag_files(self.task_config.COMOUT_SNOW_ANALYSIS, - f"{self.task_config.APREFIX_ENS}snow_analysis.ioda_hofx.tgz") + f"{self.task_config.APREFIX_ENS}snow_analysis.ioda_hofx.ensmean.tar") # Save files to COM logger.info(f"Saving files to COM") From 35908fa5aacffc37efe002ddabc83c27dc7ebd59 Mon Sep 17 00:00:00 2001 From: DavidNew-NOAA Date: Thu, 30 Oct 2025 13:41:22 +0000 Subject: [PATCH 23/35] 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 24/35] 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 25/35] 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 26/35] 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: From d0949cc6671a9efe2b36bcba4372748566be6d5b Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 30 Oct 2025 20:34:59 +0000 Subject: [PATCH 27/35] Correct stats tgz filenames --- parm/archive/gdas.yaml.j2 | 2 +- ush/python/pygfs/task/analysis_stats.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index b2e411289b1..0ac767a9c3a 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -98,7 +98,7 @@ gdas: {% endfor %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tar" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" - - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}ioda_hofx_stats.tar" + - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx_stats.tgz" {% endif %} # Ozone verification diff --git a/ush/python/pygfs/task/analysis_stats.py b/ush/python/pygfs/task/analysis_stats.py index 5ae2411f4c6..d3ec3a3b721 100644 --- a/ush/python/pygfs/task/analysis_stats.py +++ b/ush/python/pygfs/task/analysis_stats.py @@ -189,7 +189,7 @@ def finalize(self, jedi_dict_key: str) -> None: FileHandler({'copy_opt': copy_list}).sync() # path of output tar statfile - iodastatzipfile = os.path.join(outdir, f"{self.task_config.APREFIX}{jedi_dict_key}_iodastat.tgz") + iodastatzipfile = os.path.join(outdir, f"{self.task_config.APREFIX}{jedi_dict_key}_analysis.ioda_hofx_stats.tgz") logger.info(f"Compressing ioda-stats generated files to {iodastatzipfile}") From eb431ba4e0601a03b7f39af0500029645be4df3e Mon Sep 17 00:00:00 2001 From: David Huber <69919478+DavidHuber-NOAA@users.noreply.github.com> Date: Thu, 30 Oct 2025 16:36:21 -0400 Subject: [PATCH 28/35] Apply suggestions from code review Co-authored-by: Rahul Mahajan --- parm/archive/gdas.yaml.j2 | 2 +- parm/archive/gfsa.yaml.j2 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index 0ac767a9c3a..0f9d0a233dc 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -94,7 +94,7 @@ gdas: # Snow analysis data {% if DO_JEDISNOWDA %} {% for itile in range(1,7) %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ current_cycle | to_fv3time }}.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tar" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" diff --git a/parm/archive/gfsa.yaml.j2 b/parm/archive/gfsa.yaml.j2 index e18fa817b7c..3e2263187f5 100644 --- a/parm/archive/gfsa.yaml.j2 +++ b/parm/archive/gfsa.yaml.j2 @@ -52,7 +52,7 @@ gfsa: # Snow analysis data {% if DO_JEDISNOWDA %} {% for itile in range(1,7) %} - - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ cycle_YMD }}.{{ cycle_HH }}0000.snow_increment.sfc_data.tile{{ itile }}.nc" + - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ current_cycle | to_fv3time }}.snow_increment.sfc_data.tile{{ itile }}.nc" {% endfor %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tar" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" From fc58dd9c7af744438ed0394c9e196110712dd125 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Thu, 30 Oct 2025 20:45:33 +0000 Subject: [PATCH 29/35] Update GDASApp hash --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 1425745ea0a..4c58c7a269d 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 1425745ea0a13c616a32e38e6e3e7698687d13e5 +Subproject commit 4c58c7a269df67dca1ce6013704bfaf7d183c282 From 35e4f82e036fd4884d106f83d5caca026a9eada1 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 31 Oct 2025 14:14:43 +0000 Subject: [PATCH 30/35] Ignore 'dirty' differences in the ufs submodule --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index ec186d8338d..e608c11ae23 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,7 @@ [submodule "sorc/ufs_model.fd"] path = sorc/ufs_model.fd url = https://github.com/ufs-community/ufs-weather-model + ignore = dirty [submodule "sorc/wxflow"] path = sorc/wxflow url = https://github.com/NOAA-EMC/wxflow From 831a615b794dfb594ce3787e2eecce78022dcc95 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 31 Oct 2025 16:24:00 +0000 Subject: [PATCH 31/35] Remove case for which there are no ICs --- dev/ci/cases/weekly/C384_S2SWA.yaml | 30 ----------------------------- 1 file changed, 30 deletions(-) delete mode 100644 dev/ci/cases/weekly/C384_S2SWA.yaml diff --git a/dev/ci/cases/weekly/C384_S2SWA.yaml b/dev/ci/cases/weekly/C384_S2SWA.yaml deleted file mode 100644 index be494acf8aa..00000000000 --- a/dev/ci/cases/weekly/C384_S2SWA.yaml +++ /dev/null @@ -1,30 +0,0 @@ -experiment: - net: gfs - mode: forecast-only - pslot: {{ 'pslot' | getenv }} - app: S2SWA - resdetatmos: 384 - resdetocean: 0.25 - comroot: {{ 'RUNTESTS' | getenv }}/COMROOT - expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR - idate: 2016070100 - edate: 2016070100 - yaml: {{ HOMEgfs }}/dev/ci/cases/yamls/gfs_defaults_ci.yaml - -workflow: - engine: rocoto - rocoto: - maxtries: 2 - cyclethrottle: 3 - taskthrottle: 25 - verbosity: 2 - -# ICs are not currently available for this test. -skip_ci_on_hosts: - - gaeac6 - - gaeac5 - - hercules - - wcoss2 - - hera - - orion - - awsepicglobalworkflow From c078c38b7143d6604d714e75487b68fb2d5a8c35 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 31 Oct 2025 16:56:40 +0000 Subject: [PATCH 32/35] Update production GFS version --- docs/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index ea6c2170bae..8c36c412dae 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -9,7 +9,7 @@ Status ====== * State of develop (HEAD) branch: GFSv17+ development -* State of operations (dev/gfs.v16 branch): GFS v16.3.24 `tag: [gfs.v16.3.24] `_ +* State of operations (dev/gfs.v16 branch): GFS v16.3.28 `tag: [gfs.v16.3.28] `_ ============= Code managers From cdf65d6e299439f95878cf4de7859106dbd1201e Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 31 Oct 2025 17:49:09 +0000 Subject: [PATCH 33/35] Rename tgz stats files to tar.gz --- parm/archive/gdas.yaml.j2 | 2 +- ush/python/pygfs/task/analysis_stats.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/parm/archive/gdas.yaml.j2 b/parm/archive/gdas.yaml.j2 index b34fbc86004..f9a1115d19f 100644 --- a/parm/archive/gdas.yaml.j2 +++ b/parm/archive/gdas.yaml.j2 @@ -107,7 +107,7 @@ gdas: {% endfor %} - "{{ COMIN_SNOW_ANALYSIS | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx.tar" - "{{ COMIN_CONF | relpath(ROTDIR) }}/{{ head }}snowanlvar.yaml" - - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx_stats.tgz" + - "{{ COMIN_SNOW_ANLMON | relpath(ROTDIR) }}/{{ head }}snow_analysis.ioda_hofx_stats.tar.gz" {% endif %} # Ozone verification diff --git a/ush/python/pygfs/task/analysis_stats.py b/ush/python/pygfs/task/analysis_stats.py index d3ec3a3b721..f13ad8a6af4 100644 --- a/ush/python/pygfs/task/analysis_stats.py +++ b/ush/python/pygfs/task/analysis_stats.py @@ -189,7 +189,7 @@ def finalize(self, jedi_dict_key: str) -> None: FileHandler({'copy_opt': copy_list}).sync() # path of output tar statfile - iodastatzipfile = os.path.join(outdir, f"{self.task_config.APREFIX}{jedi_dict_key}_analysis.ioda_hofx_stats.tgz") + iodastatzipfile = os.path.join(outdir, f"{self.task_config.APREFIX}{jedi_dict_key}_analysis.ioda_hofx_stats.tar.gz") logger.info(f"Compressing ioda-stats generated files to {iodastatzipfile}") @@ -301,7 +301,7 @@ def convert_gsi_diags(self) -> None: # Tar up the ioda files iodastatzipfile = os.path.join(self.task_config.DATA, 'atmos_gsi_ioda', - f"{self.task_config.APREFIX}atmos_gsi_ioda_diags.tgz") + f"{self.task_config.APREFIX}atmos_gsi_ioda_diags.tar.gz") logger.info(f"Compressing GSI IODA files to {iodastatzipfile}") # get list of iodastat files to put in tarball iodastatfiles = glob.glob(os.path.join(output_dir_path, '*nc4')) From 986985c927c72aa911acd8500af1b41109a82085 Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 31 Oct 2025 17:50:07 +0000 Subject: [PATCH 34/35] Update gdasapp hash for tgz->tar.gz rename --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 4c58c7a269d..6883a4ff637 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 4c58c7a269df67dca1ce6013704bfaf7d183c282 +Subproject commit 6883a4ff637e24c2cb517b6c47518e0a8f5b0ae7 From f5b525823a7b3ec2938064871cf6634b8064718f Mon Sep 17 00:00:00 2001 From: DavidHuber-NOAA Date: Fri, 31 Oct 2025 19:28:26 +0000 Subject: [PATCH 35/35] Update GDASApp hash to head of develop --- sorc/gdas.cd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/gdas.cd b/sorc/gdas.cd index 6883a4ff637..1859724c85e 160000 --- a/sorc/gdas.cd +++ b/sorc/gdas.cd @@ -1 +1 @@ -Subproject commit 6883a4ff637e24c2cb517b6c47518e0a8f5b0ae7 +Subproject commit 1859724c85e7f8382b1e3190bd5353381ea3a984