Skip to content

Add Increment Quality Control Utilities#1223

Merged
shlyaeva merged 5 commits intodevelopfrom
feature/incr-qc
Mar 10, 2026
Merged

Add Increment Quality Control Utilities#1223
shlyaeva merged 5 commits intodevelopfrom
feature/incr-qc

Conversation

@guillaumevernieres
Copy link
Copy Markdown
Contributor

@guillaumevernieres guillaumevernieres commented Feb 18, 2026

Description

This PR adds increment quality control (QC) utilities to SOCA to enforce physical consistency of ocean analysis increments prior to output. The new functionality applies configurable bounds on temperature and salinity increments, checks and corrects water column stability to prevent density inversions, and constrains steric height contributions to limit unrealistic SSH increments. Density calculations use the UNESCO 1983 equation of state, and the QC can be applied iteratively with optional smoothing.

The QC is integrated into the ensemble analysis postprocessing workflow via a new qcIncrement() call in AnalysisPostproc, ensuring that all analysis increments satisfy physical constraints before being written out.

This PR adds new functionality; changes in analysis increments are expected when QC thresholds are active, particularly in regions or cycles with large or unbalanced increments.

Issue(s) addressed

Testing

  • Tested in the test_soca_ensanpproc ctest

Note

We'll need to reflect these changes in the soca fork and release branch here https://github.com/NOAA-EMC/soca/tree/cd6730a8c95c3d536c42f0e114ca54050ca172c8

@guillaumevernieres
Copy link
Copy Markdown
Contributor Author

FYI reviewers: I'll need to also issue a hotfix PR to the soca commit used for the GFSv17.

if (fullConfig.has("increment postprocessing")) {
const eckit::LocalConfiguration incPostprocConfig(fullConfig, "increment postprocessing");
postprocessIncrements(incs, incPostprocConfig);
postprocessIncrements(ens, incs, incPostprocConfig);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is ens passed here meant to be analyses or backgrounds?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

From the rest of my review, it's meant to be backgrounds, and that's what ens is, so no concerns here.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

background

Copy link
Copy Markdown
Collaborator

@shlyaeva shlyaeva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I skipped reviewing files in Utils/incrqc since they were ported from gdasapp where they were both reviewed and rigorously tested through gfsv17 retro tests (ensuring bounds on deterministic increments).

The rest of the code changes look good to me.

@guillaumevernieres
Copy link
Copy Markdown
Contributor Author

I skipped reviewing files in Utils/incrqc since they were ported from gdasapp where they were both reviewed and rigorously tested through gfsv17 retro tests (ensuring bounds on deterministic increments).

The rest of the code changes look good to me.

We're missing the "ssh" check to resolve the current issue in the v17 retro, sorry, I submitted the PR a bit too quickly.

guillaumevernieres added a commit to NOAA-EMC/GDASApp that referenced this pull request Mar 3, 2026
# Description
Copy/pasted from
[JCSDA-internal/soca/pull/1223](JCSDA-internal/soca#1223):
This PR adds increment quality control (QC) utilities to SOCA to enforce
physical consistency of ocean analysis increments prior to output. The
new functionality applies configurable bounds on temperature and
salinity increments, checks and corrects water column stability to
prevent density inversions, and constrains steric height contributions
to limit unrealistic SSH increments. Density calculations use the UNESCO
1983 equation of state, and the QC can be applied iteratively with
optional smoothing.

The QC is integrated into the ensemble analysis postprocessing workflow
via a new qcIncrement() call in AnalysisPostproc, ensuring that all
analysis increments satisfy physical constraints before being written
out.

This PR adds new functionality; changes in analysis increments are
expected when QC thresholds are active, particularly in regions or
cycles with large or unbalanced increments.

# Companion PRs
- NOAA-EMC/jcb-gdas#232
- NOAA-EMC/soca#3

# Issues
Resolves #

# Automated CI tests to run in Global Workflow
<!-- Which Global Workflow CI tests are required to adequately test this
PR? -->
- [ ] atm_jjob <!-- JEDI atm single cycle DA !-->
- [ ] C96C48_ufs_hybatmDA <!-- JEDI atm cycled DA !-->
- [ ] C96C48_hybatmsnowDA <!-- JEDI snow cycled DA !-->
- [ ] C96_gcafs_cycled <!-- JEDI aerosol cycled DA !-->
- [ ] C48mx500_3DVarAOWCDA <!-- JEDI low-res marine 3DVar cycled DA !-->
- [ ] C48mx500_hybAOWCDA <!-- JEDI marine hybrid envar cycled DA !-->
- [ ] C96C48_ufsgsi_hybatmDA <!-- JEDI atm Var with GSI EnKF cycled DA
!-->
- [ ] C48_ufsenkf_atmDA <!-- JEDI atm EnKF cycled DA !-->
- [ ] C96C48_hybatmDA <!-- GSI atm cycled DA !-->
@Dooruk Dooruk requested a review from DavidSRussell March 4, 2026 15:49
@Dooruk
Copy link
Copy Markdown
Collaborator

Dooruk commented Mar 4, 2026

Just adding @DavidSRussell primarily for future PRs. Still looking into this one.

Copy link
Copy Markdown
Collaborator

@Dooruk Dooruk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests pass for me. Thanks for adding this in SOCA.

Are these additions meant to be read only, because I suspect changes here would break your workflow, correct? Or only the capabilities in ensampproc.yml are used in EMC's workflow?

@guillaumevernieres
Copy link
Copy Markdown
Contributor Author

Tests pass for me. Thanks for adding this in SOCA.

Are these additions meant to be read only, because I suspect changes here would break your workflow, correct? Or only the capabilities in ensampproc.yml are used in EMC's workflow?

@Dooruk You are certainly more than welcome to propose changes (in subsequent PR's).

@shlyaeva shlyaeva merged commit 21cc2c9 into develop Mar 10, 2026
3 checks passed
@shlyaeva shlyaeva deleted the feature/incr-qc branch March 10, 2026 15:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Check analysis bounds in AnalysisPostproc.h

3 participants