OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
CvodeKokkosSurfaceSolver.hpp File Reference

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>
Include dependency graph for CvodeKokkosSurfaceSolver.hpp:
This graph shows which files directly or indirectly include this file:

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
 

Detailed Description

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.

Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
License\n MIT License