-
Notifications
You must be signed in to change notification settings - Fork 193
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
[WIP] Implement "MEKE" parameterization with prognostic mesoscale eddy kinetic energy #2431
Conversation
Hi @glwagner, thanks for starting this PR! Sorry for chiming in so late - I'm finally getting started with Oceananigans.jl (but am already loving it 🎉). I don't know the code well enough (yet!) to comment on your code-related questions above. But I can give some general input concerning the MEKE scheme.
|
@NoraLoose my turn to apologize for a very slow response --- thank you for those explanations, they are very helpful! I think this PR is going a bit stale so we may have to restart it, but when that happens I'll port your comments over to the new PR. Probably we need to wait for #2477, which among other things implements a more stable discretization for GM+Redi a la Griffies et al 1998. |
It's way stale! |
This PR implements the "MEKE" mesoscale parameterization proposed by Jansen et al (2015) (see also Kong and Jansen (2020)).
To implement this PR we add a property to
HydrostaticFreeSurfaceModel
calledauxiliary_prognostic_fields
which provides a container for closure-specific prognostic fields that need to be stepped forward alongside the rest of the model's prognostic state.Another change is that we introduce
AbstractSkewSymmetricDiffusivity
that provides an interface for implementing mesoscale closures with skew and symmetric diffusivities.The "MEKE" parameterization has a two-dimensional prognostic eddy kinetic energy variable that this feature supports.
It's WIP now, but a few notes are:
We need a slightly more descriptive name than MEKE or
MesoscaleEddyKineticEnergy
I think (though it does pronounce well "mee-key")... maybePrognosticMEKEDiffusivity
or something? We may want to distinguish from (or better, combine with?) a similar parameterization with 2D prognostic MEKE called "GEOMETRIC"There's probably a way to improve the
auxiliary_prognostic_fields
design... in particular, I'm wondering if we should use a more hierarchical structure for auxiliary fields that also encompassesdiffusivity_fields
, something likeThe downside is that eddy diffusivities for LES are then buried in
model.auxiliary_fields.diagnostic_closure_fields
. BUT we can also design an interface for extracting these likeeddy_diffusivity(model)
. Curious what people think about that (@tomchor you've had opinions). Basically it's easier to separate the user API (here, functions that extract properties) from the model struct design (which is motivated more by internal considerations). But it's tradeoffs all the way down so good to discuss.I also did a little clean up and changed the internal function
TurbulenceClosures.DiffusivityFields
toTurbulenceClosures.diffusivity_fields
. The code is inconsistent about the use of TitleCase (is it a constructor / struct? is it a function?) and there's a bit of clean up to do...Resolves #2422