-
Notifications
You must be signed in to change notification settings - Fork 6
Add vertical advection #328
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
base: develop
Are you sure you want to change the base?
Add vertical advection #328
Conversation
|
When running |
| Coef3rdOrder: 0.25 | ||
| FluxThicknessType: Center | ||
| FluxTracerType: Center | ||
| VerticalTracerFluxLimiterEnabled: true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| VerticalTracerFluxLimiterEnabled: true | |
| VerticalTracerFluxLimiterEnable: true |
I think this is more consistent with other config options
|
|
||
| for (int KVec = 0; KVec < KLen; ++KVec) { | ||
| const I4 K = KStart + KVec; | ||
| const Real WAvg = 0.5_Real * (LocTotVertVelocity(Cell1, K) + |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to use
| InterpCellToEdge(const HorzMesh *Mesh); |
so that we can easily switch from anisotropic to isotropic interpolation for all variables (here and elsewhere)?
| // | ||
| //===----------------------------------------------------------------------===// | ||
|
|
||
| #include "AuxiliaryState.h" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this may cause a circular include issue in the headers when initializing with AuxiliaryState. I’d suggest removing this line unless it introduces any other issues.
| #include "AuxiliaryState.h" |
| const Array2DReal &LayerThickness, //< [in] layer thickness | ||
| const TimeInterval TimeStep //< [in] (optional) time step | ||
| ) { | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| // Return if vertical advection tracer tendency not enabled | |
| if (!TracerVertAdvEnabled) | |
| return; |
Add the
VertAdvmodule to Omega, providing data structures and methods for vertical advection. This module includes:Additional changes in this PR:
parallelForOuterwith an optional argument to enable the use of scratch arrays in hierarchical parallelism.ProvThickness, which represents thickness after horizontal thickness flux. Further work required to fully implement provisional thickness.BottomDepthfromHorzMesh, this field was previously added toVertCoord.This PR builds and passes the unit tests successfully on Chrysalis, pm-cpu, pm-gpu, and Frontier (CPU & GPU).
Checklist
Testingwith the following:have been run on and indicate that are all passing.
has passed, using the Polaris
e3sm_submodules/Omegabaseline-pfor both the baseline (Polarise3sm_submodules/Omega) and the PR build