From 76d96e1bf9c02e73855c554751359c1e6cb20d3e Mon Sep 17 00:00:00 2001 From: Hyun Kang Date: Mon, 20 Apr 2026 08:04:42 -0400 Subject: [PATCH 1/6] Add computeMomDiagAux to enable time stepping - Added computeMomDiagAux to AuxiliaryState.cpp to compute the diagnostic variables required for time stepping in Omega. - Removed some diagnostic variable computations before the PGF tendency to avoid duplicate work in computeDiagnosticAux. - Called computeMomDiag at the appropriate points during time stepping. - NOTE: SurfacePressure is currently handled temporarily in VertCoord. --- components/omega/src/ocn/AuxiliaryState.cpp | 51 +++++++++++++++++-- components/omega/src/ocn/AuxiliaryState.h | 11 ++-- components/omega/src/ocn/Tendencies.cpp | 28 +++------- components/omega/src/ocn/VertCoord.cpp | 4 ++ components/omega/src/ocn/VertCoord.h | 5 ++ .../omega/test/ocn/AuxiliaryStateTest.cpp | 11 ++-- 6 files changed, 77 insertions(+), 33 deletions(-) diff --git a/components/omega/src/ocn/AuxiliaryState.cpp b/components/omega/src/ocn/AuxiliaryState.cpp index 30efe9b5ffc5..a27419728b13 100644 --- a/components/omega/src/ocn/AuxiliaryState.cpp +++ b/components/omega/src/ocn/AuxiliaryState.cpp @@ -20,9 +20,8 @@ static std::string stripDefault(const std::string &Name) { // Constructor. Constructs the member auxiliary variables and registers their // fields with IOStreams AuxiliaryState::AuxiliaryState(const std::string &Name, const HorzMesh *Mesh, - Halo *MeshHalo, const VertCoord *VCoord, - VertAdv *VAdv, int NTracers, - TimeInterval TimeStep) + Halo *MeshHalo, VertCoord *VCoord, VertAdv *VAdv, + int NTracers, TimeInterval TimeStep) : Mesh(Mesh), MeshHalo(MeshHalo), VCoord(VCoord), VAdv(VAdv), Name(stripDefault(Name)), KineticAux(stripDefault(Name), Mesh, VCoord), LayerThicknessAux(stripDefault(Name), Mesh, VCoord), @@ -63,6 +62,47 @@ AuxiliaryState::~AuxiliaryState() { FieldGroup::destroy(GroupName); } +// Compute the diagnostic variables required for momentum equation +// time stepping +void AuxiliaryState::computeMomDiagAux(const OceanState *State, + const Array3DReal &TracerArray, + int ThickTimeLevel, + int VelTimeLevel) const { + + Pacer::start("AuxState:computeMomDiagAux", 1); + + Eos *EosInstance = Eos::getInstance(); + + // get layer thickness + Array2DReal LayerThickCell = State->getLayerThickness(ThickTimeLevel); + // get normal velocity + Array2DReal NormalVelEdge = State->getNormalVelocity(VelTimeLevel); + + // get temperature and salinity + I4 ConservTempIdx; + I4 AbsSalinityIdx; + Tracers::getIndex(ConservTempIdx, "Temperature"); + Tracers::getIndex(AbsSalinityIdx, "Salinity"); + + const auto ConservTemp = + Kokkos::subview(TracerArray, ConservTempIdx, Kokkos::ALL, Kokkos::ALL); + const auto AbsSalinity = + Kokkos::subview(TracerArray, AbsSalinityIdx, Kokkos::ALL, Kokkos::ALL); + + // compute pressure + const auto &SurfacePressure = VCoord->SurfacePressure; + VCoord->computePressure(LayerThickCell, SurfacePressure); + + // compute specific volume + const auto &PressureMid = VCoord->PressureMid; + EosInstance->computeSpecVol(ConservTemp, AbsSalinity, PressureMid); + + // compute geometric height + VCoord->computeZHeight(LayerThickCell, EosInstance->SpecVol); + + Pacer::stop("AuxState:computeMomDiagAux", 1); +} + // Compute the auxiliary variables needed for momentum equation void AuxiliaryState::computeMomAux(const OceanState *State, int ThickTimeLevel, int VelTimeLevel) const { @@ -241,6 +281,7 @@ void AuxiliaryState::computeAll(const OceanState *State, Pacer::start("AuxState:computeAll", 1); + computeMomDiagAux(State, TracerArray, ThickTimeLevel, VelTimeLevel); computeMomAux(State, ThickTimeLevel, VelTimeLevel); Pacer::start("AuxState:cellAuxState3", 2); @@ -290,7 +331,7 @@ void AuxiliaryState::computeAll(const OceanState *State, // Create a non-default auxiliary state AuxiliaryState *AuxiliaryState::create(const std::string &Name, const HorzMesh *Mesh, Halo *MeshHalo, - const VertCoord *VCoord, VertAdv *VAdv, + VertCoord *VCoord, VertAdv *VAdv, const int NTracers, TimeInterval TimeStep) { if (AllAuxStates.find(Name) != AllAuxStates.end()) { @@ -312,7 +353,7 @@ AuxiliaryState *AuxiliaryState::create(const std::string &Name, void AuxiliaryState::init() { const HorzMesh *DefMesh = HorzMesh::getDefault(); Halo *DefHalo = Halo::getDefault(); - const VertCoord *DefVCoord = VertCoord::getDefault(); + VertCoord *DefVCoord = VertCoord::getDefault(); VertAdv *DefVAdv = VertAdv::getDefault(); const TimeStepper *DefTimeStepper = TimeStepper::getDefault(); diff --git a/components/omega/src/ocn/AuxiliaryState.h b/components/omega/src/ocn/AuxiliaryState.h index 1228f06962d4..dd89effc44b7 100644 --- a/components/omega/src/ocn/AuxiliaryState.h +++ b/components/omega/src/ocn/AuxiliaryState.h @@ -54,7 +54,7 @@ class AuxiliaryState { // Create a non-default auxiliary state static AuxiliaryState *create(const std::string &Name, const HorzMesh *Mesh, - Halo *MeshHalo, const VertCoord *VCoord, + Halo *MeshHalo, VertCoord *VCoord, VertAdv *VAdv, int NTracers, TimeInterval TimeStep); @@ -76,6 +76,11 @@ class AuxiliaryState { /// Exchange halo I4 exchangeHalo(); + // Compute the diagnostic variables needed for time stepping + void computeMomDiagAux(const OceanState *State, + const Array3DReal &TracerArray, int ThickTimeLevel, + int VelTimeLevel) const; + // Compute all auxiliary variables needed for momentum equation void computeMomAux(const OceanState *State, int ThickTimeLevel, int VelTimeLevel) const; @@ -89,7 +94,7 @@ class AuxiliaryState { private: AuxiliaryState(const std::string &Name, const HorzMesh *Mesh, Halo *MeshHalo, - const VertCoord *VCoord, VertAdv *VAdv, int NTracers, + VertCoord *VCoord, VertAdv *VAdv, int NTracers, TimeInterval TimeStep); AuxiliaryState(const AuxiliaryState &) = delete; @@ -97,7 +102,7 @@ class AuxiliaryState { const HorzMesh *Mesh; Halo *MeshHalo; - const VertCoord *VCoord; + VertCoord *VCoord; VertAdv *VAdv; TimeInterval TimeStep; diff --git a/components/omega/src/ocn/Tendencies.cpp b/components/omega/src/ocn/Tendencies.cpp index 7788bda4363d..45284f53ced9 100644 --- a/components/omega/src/ocn/Tendencies.cpp +++ b/components/omega/src/ocn/Tendencies.cpp @@ -664,28 +664,12 @@ void Tendencies::computeVelocityTendenciesOnly( // Compute pressure gradient if (PGrad->Enabled) { - // Temporary handling of surface pressure - Array1DReal SurfacePressure("SurfacePressure", Mesh->NCellsSize); - deepCopy(SurfacePressure, 0.0_Real); - Pacer::start("Tend:pressureGradTerm", 2); - Array2DReal LayerThick = State->getLayerThickness(ThickTimeLevel); - VCoord->computePressure(LayerThick, SurfacePressure); - + Array2DReal LayerThick = State->getLayerThickness(ThickTimeLevel); const auto &PressureMid = VCoord->PressureMid; const auto &PressureInterface = VCoord->PressureInterface; - Array2DReal Temp = Kokkos::subview(TracerArray, Tracers::IndxTemp, - Kokkos::ALL, Kokkos::ALL); - Array2DReal Salinity = Kokkos::subview(TracerArray, Tracers::IndxSalt, - Kokkos::ALL, Kokkos::ALL); - EqState->computeSpecVol(Temp, Salinity, PressureMid); - - // Temporary: ensure vertical geometric/geopotential fields are updated - // for pressure-gradient tendency calculations. - const auto &SpecVol = EqState->SpecVol; - VCoord->computeZHeight(LayerThick, SpecVol); - - const auto &ZInterface = VCoord->ZInterface; + const auto &SpecVol = EqState->SpecVol; + const auto &ZInterface = VCoord->ZInterface; PGrad->computePressureGrad(LocNormalVelocityTend, PressureMid, PressureInterface, SpecVol, ZInterface, LayerThick); @@ -887,6 +871,8 @@ void Tendencies::computeVelocityTendencies( ) { Pacer::start("Tend:computeVelocityTendencies", 1); + AuxState->computeMomDiagAux(State, TracerArray, ThickTimeLevel, + VelTimeLevel); AuxState->computeMomAux(State, ThickTimeLevel, VelTimeLevel); computeVelocityTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, VelTimeLevel, TracerTimeLevel, Time); @@ -949,10 +935,10 @@ void Tendencies::computeAllTendencies( ) { AuxState->computeAll(State, TracerArray, ThickTimeLevel, VelTimeLevel); - computeThicknessTendenciesOnly(State, AuxState, ThickTimeLevel, VelTimeLevel, - Time); computeVelocityTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, VelTimeLevel, TracerTimeLevel, Time); + computeThicknessTendenciesOnly(State, AuxState, ThickTimeLevel, VelTimeLevel, + Time); computeTracerTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, VelTimeLevel, Time); } // end all tendency compute diff --git a/components/omega/src/ocn/VertCoord.cpp b/components/omega/src/ocn/VertCoord.cpp index b481439202b8..57284b6d6552 100644 --- a/components/omega/src/ocn/VertCoord.cpp +++ b/components/omega/src/ocn/VertCoord.cpp @@ -166,6 +166,10 @@ VertCoord::VertCoord(const std::string &Name_, //< [in] Name for new VertCoord RefLayerThickness = Array2DReal("RefLayerThickness", NCellsSize, NVertLayers); + // TODO: Temporary handling of SurfacePressure + SurfacePressure = Array1DReal("SurfacePressure", NCellsSize); + deepCopy(SurfacePressure, 0); + // Make host copies for device arrays not being read from file PressureInterfaceH = createHostMirrorCopy(PressureInterface); PressureMidH = createHostMirrorCopy(PressureMid); diff --git a/components/omega/src/ocn/VertCoord.h b/components/omega/src/ocn/VertCoord.h index 2e11ae50ae71..7818fa8c146e 100644 --- a/components/omega/src/ocn/VertCoord.h +++ b/components/omega/src/ocn/VertCoord.h @@ -166,6 +166,11 @@ class VertCoord { HostArray1DReal BottomDepthH; + // TODO: Temporary handling of SurfacePressure + Array1DReal SurfacePressure; + + HostArray1DReal SurfacePressureH; + // VertCoord instance name and FieldGroup names std::string Name; std::string InitGroupName; diff --git a/components/omega/test/ocn/AuxiliaryStateTest.cpp b/components/omega/test/ocn/AuxiliaryStateTest.cpp index a646f31dfce4..da99280db26b 100644 --- a/components/omega/test/ocn/AuxiliaryStateTest.cpp +++ b/components/omega/test/ocn/AuxiliaryStateTest.cpp @@ -3,6 +3,7 @@ #include "DataTypes.h" #include "Decomp.h" #include "Dimension.h" +#include "Eos.h" #include "Field.h" #include "GlobalConstants.h" #include "Halo.h" @@ -126,6 +127,8 @@ int initAuxStateTest(const std::string &mesh) { VertAdv::init(); + Eos::init(); + return Err; } @@ -146,10 +149,10 @@ int testAuxState() { return -1; } - const auto *Mesh = HorzMesh::getDefault(); - auto *MeshHalo = Halo::getDefault(); - const auto *VCoord = VertCoord::getDefault(); - auto *VAdv = VertAdv::getDefault(); + const auto *Mesh = HorzMesh::getDefault(); + auto *MeshHalo = Halo::getDefault(); + auto *VCoord = VertCoord::getDefault(); + auto *VAdv = VertAdv::getDefault(); TimeInterval TimeStep; // test creation of another auxiliary state AuxiliaryState::create("AnotherAuxState", Mesh, MeshHalo, VCoord, VAdv, 3, From 7e73f18b7385617ca16031eea151a625ed89de20 Mon Sep 17 00:00:00 2001 From: Hyun Kang Date: Mon, 20 Apr 2026 08:11:07 -0400 Subject: [PATCH 2/6] Update Forward-Backward time stepper - Reordered the computational procedures in Forward-Backward --- .../timeStepping/ForwardBackwardStepper.cpp | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/components/omega/src/timeStepping/ForwardBackwardStepper.cpp b/components/omega/src/timeStepping/ForwardBackwardStepper.cpp index e72719a3b2f4..8717b46e3757 100644 --- a/components/omega/src/timeStepping/ForwardBackwardStepper.cpp +++ b/components/omega/src/timeStepping/ForwardBackwardStepper.cpp @@ -29,38 +29,44 @@ void ForwardBackwardStepper::doStep( TimeInstant &SimTime // current simulation time ) const { - const int CurLevel = 0; - const int NextLevel = 1; + const int VelCurLevel = 0; + const int ThickCurLevel = 0; + const int TracerCurLevel = 0; - Array3DReal CurTracerArray = Tracers::getAll(CurLevel); - Array3DReal NextTracerArray = Tracers::getAll(NextLevel); + const int VelNextLevel = 1; + const int ThickNextLevel = 1; + const int TracerNextLevel = 1; + + Array3DReal CurTracerArray = Tracers::getAll(TracerCurLevel); + Array3DReal NextTracerArray = Tracers::getAll(TracerNextLevel); if (State == nullptr) LOG_CRITICAL("Invalid State"); if (AuxState == nullptr) LOG_CRITICAL("Invalid AuxState"); - // R_h^{n} = RHS_h(u^{n}, h^{n}, t^{n}) - Tend->computeThicknessTendencies(State, AuxState, CurLevel, CurLevel, - SimTime); + // R_u^{n} = RHS_u(u^{n}, h^{n}, t^{n}) + Tend->computeVelocityTendencies(State, AuxState, CurTracerArray, + ThickCurLevel, VelCurLevel, TracerCurLevel, + SimTime + TimeStep); - // h^{n+1} = h^{n} + R_h^{n} - updateThicknessByTend(State, NextLevel, State, CurLevel, TimeStep); + // u^{n+1} = u^{n} + R_u^{n} + updateVelocityByTend(State, VelNextLevel, State, VelCurLevel, TimeStep); - // R_phi^{n} = RHS_phi(u^{n}, h^{n}, phi^{n}, t^{n}) - Tend->computeTracerTendencies(State, AuxState, CurTracerArray, CurLevel, - CurLevel, SimTime); + // R_h^{n} = RHS_h(u^{n+1}, h^{n}, t^{n}) + Tend->computeThicknessTendencies(State, AuxState, ThickCurLevel, + VelNextLevel, SimTime); - // phi^{n+1} = (phi^{n} * h^{n} + R_phi^{n}) / h^{n+1} - updateTracersByTend(NextTracerArray, CurTracerArray, State, NextLevel, State, - CurLevel, TimeStep); + // h^{n+1} = h^{n} + R_h^{n} + updateThicknessByTend(State, ThickNextLevel, State, ThickCurLevel, TimeStep); - // R_u^{n+1} = RHS_u(u^{n}, h^{n+1}, t^{n+1}) - Tend->computeVelocityTendencies(State, AuxState, NextTracerArray, NextLevel, - CurLevel, NextLevel, SimTime + TimeStep); + // R_phi^{n} = RHS_phi(u^{n+1}, h^{n+1}, phi^{n}, t^{n}) + Tend->computeTracerTendencies(State, AuxState, CurTracerArray, + ThickNextLevel, VelNextLevel, SimTime); - // u^{n+1} = u^{n} + R_u^{n+1} - updateVelocityByTend(State, NextLevel, State, CurLevel, TimeStep); + // phi^{n+1} = (phi^{n} * h^{n} + R_phi^{n}) / h^{n+1} + updateTracersByTend(NextTracerArray, CurTracerArray, State, ThickNextLevel, + State, ThickCurLevel, TimeStep); // Update time levels (New -> Old) of prognostic variables with halo // exchanges From 25170bbbe0b035dfa696a26b173bd722938230e4 Mon Sep 17 00:00:00 2001 From: Hyun Kang Date: Thu, 23 Apr 2026 22:38:41 -0400 Subject: [PATCH 3/6] Address reviewer comments This commit refactors momentum auxiliary state computation. - Renamed computeMomDiagAux to computeMomVertAux for clarity - Consolidated vertical auxiliary computations by calling computeMomVertAux within computeMomAux - Updated computeMomAux signature to accept TracerArray parameter --- components/omega/src/ocn/AuxiliaryState.cpp | 15 ++++++++------- components/omega/src/ocn/AuxiliaryState.h | 6 +++--- components/omega/src/ocn/Tendencies.cpp | 4 +--- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/components/omega/src/ocn/AuxiliaryState.cpp b/components/omega/src/ocn/AuxiliaryState.cpp index a27419728b13..6ba80a83c178 100644 --- a/components/omega/src/ocn/AuxiliaryState.cpp +++ b/components/omega/src/ocn/AuxiliaryState.cpp @@ -64,12 +64,12 @@ AuxiliaryState::~AuxiliaryState() { // Compute the diagnostic variables required for momentum equation // time stepping -void AuxiliaryState::computeMomDiagAux(const OceanState *State, +void AuxiliaryState::computeMomVertAux(const OceanState *State, const Array3DReal &TracerArray, int ThickTimeLevel, int VelTimeLevel) const { - Pacer::start("AuxState:computeMomDiagAux", 1); + Pacer::start("AuxState:computeMomVertAux", 2); Eos *EosInstance = Eos::getInstance(); @@ -100,12 +100,12 @@ void AuxiliaryState::computeMomDiagAux(const OceanState *State, // compute geometric height VCoord->computeZHeight(LayerThickCell, EosInstance->SpecVol); - Pacer::stop("AuxState:computeMomDiagAux", 1); + Pacer::stop("AuxState:computeMomVertAux", 2); } // Compute the auxiliary variables needed for momentum equation -void AuxiliaryState::computeMomAux(const OceanState *State, int ThickTimeLevel, - int VelTimeLevel) const { +void AuxiliaryState::computeMomAux(const OceanState *State, const Array3DReal &TracerArray, + int ThickTimeLevel, int VelTimeLevel) const { Array2DReal LayerThickCell = State->getLayerThickness(ThickTimeLevel); Array2DReal NormalVelEdge = State->getNormalVelocity(VelTimeLevel); @@ -131,6 +131,8 @@ void AuxiliaryState::computeMomAux(const OceanState *State, int ThickTimeLevel, Pacer::start("AuxState:computeMomAux", 1); + computeMomVertAux(State, TracerArray, ThickTimeLevel, VelTimeLevel); + Pacer::start("AuxState:vertexAuxState1", 2); parallelForOuter( "vertexAuxState1", {Mesh->NVerticesAll}, @@ -281,8 +283,7 @@ void AuxiliaryState::computeAll(const OceanState *State, Pacer::start("AuxState:computeAll", 1); - computeMomDiagAux(State, TracerArray, ThickTimeLevel, VelTimeLevel); - computeMomAux(State, ThickTimeLevel, VelTimeLevel); + computeMomAux(State, TracerArray, ThickTimeLevel, VelTimeLevel); Pacer::start("AuxState:cellAuxState3", 2); parallelForOuter( diff --git a/components/omega/src/ocn/AuxiliaryState.h b/components/omega/src/ocn/AuxiliaryState.h index dd89effc44b7..d7ac24575264 100644 --- a/components/omega/src/ocn/AuxiliaryState.h +++ b/components/omega/src/ocn/AuxiliaryState.h @@ -77,13 +77,13 @@ class AuxiliaryState { I4 exchangeHalo(); // Compute the diagnostic variables needed for time stepping - void computeMomDiagAux(const OceanState *State, + void computeMomVertAux(const OceanState *State, const Array3DReal &TracerArray, int ThickTimeLevel, int VelTimeLevel) const; // Compute all auxiliary variables needed for momentum equation - void computeMomAux(const OceanState *State, int ThickTimeLevel, - int VelTimeLevel) const; + void computeMomAux(const OceanState *State, const Array3DReal &TracerArray, + int ThickTimeLevel, int VelTimeLevel) const; /// Compute all auxiliary variables based on an ocean state at a given time /// level diff --git a/components/omega/src/ocn/Tendencies.cpp b/components/omega/src/ocn/Tendencies.cpp index 45284f53ced9..bb1c772a6901 100644 --- a/components/omega/src/ocn/Tendencies.cpp +++ b/components/omega/src/ocn/Tendencies.cpp @@ -871,9 +871,7 @@ void Tendencies::computeVelocityTendencies( ) { Pacer::start("Tend:computeVelocityTendencies", 1); - AuxState->computeMomDiagAux(State, TracerArray, ThickTimeLevel, - VelTimeLevel); - AuxState->computeMomAux(State, ThickTimeLevel, VelTimeLevel); + AuxState->computeMomAux(State, TracerArray, ThickTimeLevel, VelTimeLevel); computeVelocityTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, VelTimeLevel, TracerTimeLevel, Time); From dce8dfbe07ea71e5d7743012455f61c432b0864a Mon Sep 17 00:00:00 2001 From: Hyun Kang Date: Thu, 23 Apr 2026 22:43:32 -0400 Subject: [PATCH 4/6] Fix linting issues --- components/omega/src/ocn/AuxiliaryState.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/components/omega/src/ocn/AuxiliaryState.cpp b/components/omega/src/ocn/AuxiliaryState.cpp index 6ba80a83c178..f38e9d7d4020 100644 --- a/components/omega/src/ocn/AuxiliaryState.cpp +++ b/components/omega/src/ocn/AuxiliaryState.cpp @@ -104,7 +104,8 @@ void AuxiliaryState::computeMomVertAux(const OceanState *State, } // Compute the auxiliary variables needed for momentum equation -void AuxiliaryState::computeMomAux(const OceanState *State, const Array3DReal &TracerArray, +void AuxiliaryState::computeMomAux(const OceanState *State, + const Array3DReal &TracerArray, int ThickTimeLevel, int VelTimeLevel) const { Array2DReal LayerThickCell = State->getLayerThickness(ThickTimeLevel); Array2DReal NormalVelEdge = State->getNormalVelocity(VelTimeLevel); From 2f2a3215e17dc8572495de9d873422eb90bc7fb0 Mon Sep 17 00:00:00 2001 From: Hyun Kang Date: Thu, 23 Apr 2026 23:14:55 -0400 Subject: [PATCH 5/6] Change the function header comment --- components/omega/src/ocn/AuxiliaryState.cpp | 3 +-- components/omega/src/ocn/AuxiliaryState.h | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/components/omega/src/ocn/AuxiliaryState.cpp b/components/omega/src/ocn/AuxiliaryState.cpp index f38e9d7d4020..ad698973fdad 100644 --- a/components/omega/src/ocn/AuxiliaryState.cpp +++ b/components/omega/src/ocn/AuxiliaryState.cpp @@ -62,8 +62,7 @@ AuxiliaryState::~AuxiliaryState() { FieldGroup::destroy(GroupName); } -// Compute the diagnostic variables required for momentum equation -// time stepping +// Compute auxiliary variables for vertical dynamics void AuxiliaryState::computeMomVertAux(const OceanState *State, const Array3DReal &TracerArray, int ThickTimeLevel, diff --git a/components/omega/src/ocn/AuxiliaryState.h b/components/omega/src/ocn/AuxiliaryState.h index d7ac24575264..e28fd6ec4a1e 100644 --- a/components/omega/src/ocn/AuxiliaryState.h +++ b/components/omega/src/ocn/AuxiliaryState.h @@ -76,7 +76,7 @@ class AuxiliaryState { /// Exchange halo I4 exchangeHalo(); - // Compute the diagnostic variables needed for time stepping + // Compute auxiliary variables for vertical dynamics void computeMomVertAux(const OceanState *State, const Array3DReal &TracerArray, int ThickTimeLevel, int VelTimeLevel) const; From 3ecb506a0ce8b6e08f9a61867c79dc91ae857b13 Mon Sep 17 00:00:00 2001 From: Hyun Kang Date: Sun, 26 Apr 2026 10:36:08 -0400 Subject: [PATCH 6/6] Address reviewer comments This commit restores the computational sequence in computeAllTendencies to its original order. - No changes to the computational sequence in computeAllTendencies are needed in this PR. --- components/omega/src/ocn/Tendencies.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/omega/src/ocn/Tendencies.cpp b/components/omega/src/ocn/Tendencies.cpp index bb1c772a6901..b8eb51b479e1 100644 --- a/components/omega/src/ocn/Tendencies.cpp +++ b/components/omega/src/ocn/Tendencies.cpp @@ -933,10 +933,10 @@ void Tendencies::computeAllTendencies( ) { AuxState->computeAll(State, TracerArray, ThickTimeLevel, VelTimeLevel); - computeVelocityTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, - VelTimeLevel, TracerTimeLevel, Time); computeThicknessTendenciesOnly(State, AuxState, ThickTimeLevel, VelTimeLevel, Time); + computeVelocityTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, + VelTimeLevel, TracerTimeLevel, Time); computeTracerTendenciesOnly(State, AuxState, TracerArray, ThickTimeLevel, VelTimeLevel, Time); } // end all tendency compute