Repository navigation
Start vertical FCT from the tracer after horizontal advection - #632
Conversation
Testing on chrysalisTested the merge of #632 (
chrysalis, intel, openmpiPolaris
|
Temporary. Testers build the parent of this commit.
Testing on chrysalisTested the merge of #632 (
chrysalis, intel, openmpiPolaris
|
Testing on pm-cpu and pm-gpuTested the merge of #632 (
pm-cpu, gnu, mpichPolaris
|
Testing on auroraTested the merge of #632 (
aurora, intel, mpichPolaris
|
Testing on frontierTested the merge of #632 (
frontier, craygnu, mpichPolaris
|
db8ebbb to
5b01d4e
Compare
mwarusz
left a comment
There was a problem hiding this comment.
It looks like horizontal FCT already computes provisional tracers after horizontal advection.
Omega/components/omega/src/ocn/TendencyTerms.h
Lines 966 to 971 in 695f548
Having said that, it might require a bit of refactoring to be able to reuse that computation. A tracer dimension would need to be added to TracerCur and the standard non-FCT horizontal advection would also need to compute it. Hence, I am approving this PR as is, but we should create an issue to clean-up handling of provisional tracers and provisional thickness (TracerHorzAdvOnCell.HProv and PseudoThicknessAux.ProvPseudoThickness also appear to be the same) in tracer advection.
brian-oneill
left a comment
There was a problem hiding this comment.
Sorry, this looks like it was an oversight when I wrote the vertical advection. Thanks for catching it, @xylar! I agree it's best to merge these changes now and then handle the duplicate calculations. Consolidating the provisional thicknesses and tracers for both the horizontal FCT on and off cases needs a little more thought and is better left for a follow-up. Approved.
computeTracerTendenciesOnly added the horizontal and vertical FCT tendencies, but the vertical limiter took its bounds, its fluxes and its starting tracer mass (Tracers * ProvPseudoThickness) from the tracer before horizontal advection. Each limiter bounded only its own update, so where both pushed a cell toward the same extreme, the sum went past it (E3SM-Project#630). As MPAS-Ocean does, compute the tracers after horizontal advection alone, (T * h + Dt * H) / ProvPseudoThickness, while TracerTend still holds only the horizontal advection tendency H, and pass them to the vertical FCT. The array is allocated and filled only with FCT vertical advection, so the standard algorithm is unchanged. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
5b01d4e to
65fd64f
Compare
|
Thanks @brian-oneill and @mwarusz. Agreed, I opened #649 about cleaning up and consolidating these calls. Please edit. |
|
@sbrus89, this is now also ready to merge. Thank you so much! |


Vertical FCT now starts from the tracer after horizontal advection, as in MPAS-Ocean. Before, each limiter bounded only its own update, so where both pushed a cell toward the same extreme, the sum went past it. One-day overflow runs with FCT now stay within their initial 10–20 °C range, except for up to 3e-5 °C with split-explicit RK2, whose final stage applies midpoint tendencies to time level n, as MPAS-Ocean's does.
This changes answers, at least at round-off, in runs where vertical FCT has vertical motion to act on. The overflow
_nofcttasks, with vertical but not horizontal FCT, change most. Their unlimited horizontal advection takes them outside 10–20 °C within the first hour, with or without this PR. Vertical FCT now starts from those overshoots instead of the in-range old tracer, and at Polaris' 90 s step, where the vertical Courant number is about 1.5, the overshoots grow: the one-day minimum of linear z-star goes from −19.9 to −34.2 °C. At 15 s, the minima stay within about 1 °C of before.Checklist
Linting
Building
Testing
aurora, intel, mpich
aurora, intelgpu, mpich
chrysalis, intel, openmpi
frontier, craygnu, mpich
frontier, craygnu-mphipcc, mpich
pm-cpu, gnu, mpich
pm-gpu, gnugpu, mpich
Provide relevant details in a comment to the PR titled
TestingFixes #630
Posted by Claude Code on @xylar's behalf. The testing, analysis and wording above are AI-authored; please check them accordingly.
🤖 Generated with Claude Code