Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Corrections to GLS and MY25 Vertical closures #51

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

hga007
Copy link
Collaborator

@hga007 hga007 commented Feb 1, 2025

Description

We have revised the modules for the predictor and corrector steps of the GLS and MY25 second-moment closure schemes. These revisions address a long-standing inconsistency in the default CPP selection of predictor and corrector advection schemes, an issue that dates back at least two decades to version 2.0.

Summary of the Issue

Currently, under the default turbulence advection mode (i.e., without defining K_C4ADVECTION for fourth-order centered advection or K_C2ADVECTION for second-order centered advection), the following incongruities exist:

  • Corrector Steps: Both GLS and MY25 use third-order upwind advection.
  • Predictor Steps: GLS and MY25 default to fourth-order centered advection.

This mismatch causes turbulent length scales to become highly noisy under strong tidal or coastal current advection, leading to instability. The result is a persistent lock on the high default setting gls_kmin=7.6E-6 (m2/s2), producing spuriously high diffusivity in low-stratification regions. M. Scully has noted this problem of spuriously high diffusivity in low stratification and by J. Pringle.

However, the problem of instabilities arising on lowered gls_kmin was not discussed.

Code Changes

  1. Harmonizing Advection Steps: We extended the CPP conditional statement in the predictor steps to make K_C4ADVECTION an explicit directive, setting third-order upwind advection as the default (consistent with the corrector modules).
  2. Length Scale Constraint: In the GLS corrector module, the turbulence length scale is now constrained to be less than 0.4 times the total water depth by imposing a floor on dissipation. This limit was critical to identifying the inconsistency between predictor and corrector steps. Still, it is recommended to retain it, as it controls instabilities at boundaries or rivers where upstream tke and gls (or q2 and q2l for MY25) are not well defined.
  3. Correction to the Gh limiter: A potentially noisy error in the Gh limiter, first identified 6 years ago here, has also been fixed.

Impact and Observations

  • These changes stabilize tidally driven ROMS in the LiveOcean model (Parker MacCready & team, University of Washington Oceanography) while maintaining realistic turbulence length scales. We were able to lower the floor on the tke level to gls_kmin=1.6e-10 (m2/s2) to get better model-data comparisons over the outer continental shelf without generating sudden instabilities in the tidally driven channel flow that would crash the model at the lower tke floor before straightening out the default advective scheme for tke and gls variables. (We also used gls_Pmin=1.e-12 (m2/s3).
  • Some noise in the GLS length scale persists near domain boundaries and river inflow points, though it does not cause model crashes. Retaining the limit of von Karman times water depth (i.e., turbulent overturns cannot be larger or even as large as the water depth) is left in place to help stabilize the GLS closure long enough to approach equilibrium.

Notes on MY25

The same corrections to the advective scheme were still needed and were applied to the MY25 scheme. Although MY25 already constrains the length scale through an ad-hoc wall function in the dissipation term of the q2l equation so that L=q2l/q2 never gets remotely close to $\kappa$*WaterDepth, the inconsistency in advection schemes likely affects its performance with spurious noise, however muffled. Harmonizing these steps ensures a more robust and accurate closure scheme.

Alternative Solution

Users can define K_C4ADVECTION or K_C2ADVECTION in the current code to manually select the advection scheme. However, this might cause turbulence advection to differ materially from the default third-order upstream advection for density and scalars.

Contact Ramsey R Harcourt at [email protected] OR
Ravi Prakash, at [email protected] if you have any questions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants