![]() |
OpenSWMM Engine
6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
|
Performance-portable CVODE surface solver (Phase 1: Kokkos/OpenMP). More...
#include "../solver/ISurfaceSolver.hpp"#include "KokkosSurfaceKernels.hpp"#include <nvector/nvector_kokkos.hpp>#include <sundials/sundials_context.h>#include <sundials/sundials_linearsolver.h>#include <sundials/sundials_types.h>#include <memory>Go to the source code of this file.
Classes | |
| struct | openswmm::twoD::gpu::KokkosSolverContext |
| Context handed to the CVODE callbacks via CVodeSetUserData(). More... | |
| class | openswmm::twoD::gpu::CvodeKokkosSurfaceSolver |
Namespaces | |
| namespace | openswmm |
| namespace | openswmm::twoD |
| namespace | openswmm::twoD::gpu |
Performance-portable CVODE surface solver (Phase 1: Kokkos/OpenMP).
Implements ISurfaceSolver with a Kokkos-backed N_Vector and the RHS pipeline in KokkosSurfaceKernels.hpp. The CVODE configuration (BDF + Newton + SPGMR/GMRES + optional Jacobi preconditioner, tolerances, step bounds) is identical to the serial CvodeSurfaceSolver, so results match the CPU reference within solver tolerance — only the vector ops and RHS run through Kokkos.
Phase 1 uses the Kokkos OpenMP execution space: state is host-resident, so the host<->device deep_copies are no-ops and the RHS runs as multithreaded CPU loops. Phase 2 flips ExecSpace to CUDA (and keeps state device-resident) without touching this class beyond the data-residency copies already isolated in advance().
Lives entirely in the GPU plugin; never linked into the core engine, so the base library stays Kokkos-free.