Repository navigation
Conversation
FCTProvisionaLayerThicknesses summed the thickness flux through every edge of a cell at every layer of that cell, as MPAS-Ocean does. Omega computes FluxPseudoThickEdge and NormalTransportVelocity only on an edge's active layers, and the other entries keep the fill value (9.97e36) they get when their fields are attached. Wherever a cell has a layer that the cell across one of its edges lacks (every layer of a coastal cell, and the bottom layers of cells next to shallower ones), HProv picked up a fill-times-fill term of order 1e70 and HProvInv became of order 1e-71. The limiter's bounds test then reduced to the signs of the local extrema. A cell's own bound stopped limiting antidiffusive outflow once its stencil held a negative value, and never limited antidiffusive inflow of a positive tracer. Bottom cells next to water below 0 C were then cooled by the unlimited antidiffusive part of the centered flux, far below all of their neighbors (E3SM-Project#588). Skip edges outside [MinLayerEdgeBot, MaxLayerEdgeTop], as the pseudo-thickness flux divergence and ProvPseudoThickness already do. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Testing on chrysalisTested the merge of #628 (
chrysalis, intel, openmpiPolaris
|
Testing on frontierTested the merge of #628 (
frontier, craygnu, mpichPolaris
|
Testing on pm-cpu and pm-gpuTested the merge of #628 (
pm-cpu, gnu, mpichPolaris
|
Testing on auroraTested the merge of #628 (
aurora, intel, mpichPolaris
|
|
Because of the Aurora failures, I need to do a new Polaris deployment (E3SM-Project/polaris#897) before I rerun testing. |
|
It turns out E3SM-Project/polaris#897 is not a good fix. It would have required a new merge of E3SM/master into Omega/develop. Instead, I patched Polaris to keep working with Omega's current Aurora environment (E3SM-Project/polaris#899) and things worked, see above. |
|
I believe there is a deeper issue here, that I inadvertently introduced. Could you check if #638 has the same effect as this PR and also fixes #588 ? The idea behind this change seems good to me, but I would implement it by adjusting loop bounds, even if that requires adding a barrier. That's because adding an I also think that we should discuss if we want to skip inactive edges when computing divergence of fluxes that are proportional to velocity. Technically, if the velocity field satisfies the 3-zone masking, then it should not be necessary to skip inactive edges, since the flux value will be zero for them. |
|
Replaced by #638, which fixes the transport velocity's masking at its source. Its results are bit-for-bit identical to this PR's on Chrysalis (#638 (comment)). Posted by Claude Code on @xylar's behalf. The testing, analysis and wording above are AI-authored; please check them accordingly. |


Horizontal FCT summed the thickness flux through every edge of a cell, including edges with no water at that layer, where the flux terms hold fill values. At every layer of a coastal cell, and at the bottom layers of cells next to shallower ones, the provisional thickness came out near 1e70 m, and the limiter stopped keeping tracers within their local bounds. Since #447, this has let bottom cells in realistic global runs cool far below all their neighbors. The sum now skips those edges.
This changes answers wherever horizontal FCT is on and a cell has an inactive edge.
This skips the inactive edges inside the existing loop over layers rather than reusing
ProvPseudoThickness, which holds the same sum. That loop keeps each layer's sum in one thread, so it stays race-free on GPUs when a cell's edges start at different layers, as they will in the planned z-level configuration with a minimum top layer; summing edge by edge, asProvPseudoThicknessdoes, would then need a team barrier between edges. Keeping the loop also leaves runs without inactive edges bit-for-bit.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 #588
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