![]() |
OpenSWMM Engine
6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
|
SUNDIALS ARKODE/ARKStep IMEX integrator for the 2D surface routing ODE. More...
#include "../data/MeshData.hpp"#include "../data/SurfaceStateData.hpp"#include "../data/SolverOptions2D.hpp"#include "ISurfaceSolver.hpp"#include "InertialEdges.hpp"Go to the source code of this file.
SUNDIALS ARKODE/ARKStep IMEX integrator for the 2D surface routing ODE.
Phase 1 of docs/IMEX_LOCAL_INERTIAL_IMPLEMENTATION_PLAN.md. An alternative ISurfaceSolver to CvodeSurfaceSolver that integrates the same semi-discrete finite-volume system dV/dt = F_E(V) + F_I(V) with an additive Runge–Kutta IMEX method instead of CVODE's fully implicit BDF. The right-hand side is split (see SurfaceFluxCalculator):
F_E (explicit, non-stiff): rainfall, held coupling, evaporation. F_I (implicit, stiff) : the diffusion flux divergence + the live 1D↔2D orifice coupling.
Only F_I enters the implicit-stage Newton–Krylov solve, so the implicit Jacobian is the diffusion stencil — the BoomerAMG / Jacobi preconditioner (reused verbatim from the CVODE path; SUNDIALS 7's ARKLsPrecSetupFn/SolveFn share CVODE's callback signature) inverts M = I − γ·J over exactly that operator.
The state augmentation, tolerance scheme, and live-coupling ∫Q dt accumulators mirror CvodeSurfaceSolver so the router drives this backend through the unchanged ISurfaceSolver contract.