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

Performance-portable local-inertial surface solver (Kokkos + ARKStep). More...

#include "../solver/ISurfaceSolver.hpp"
#include "KokkosSurfaceKernels.hpp"
#include "KokkosInertialKernels.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 ArkodeKokkosSurfaceSolver.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::ArkodeKokkosContext
 Context handed to the ARKStep callbacks via ARKodeSetUserData(). More...
 
class  openswmm::twoD::gpu::ArkodeKokkosSurfaceSolver
 

Namespaces

namespace  openswmm
 
namespace  openswmm::twoD
 
namespace  openswmm::twoD::gpu
 

Typedefs

using openswmm::twoD::gpu::VecType = ::sundials::kokkos::Vector<ExecSpace>
 SUNDIALS Kokkos vector specialised on the default execution space.
 

Detailed Description

Performance-portable local-inertial surface solver (Kokkos + ARKStep).

The Kokkos counterpart of the serial ArkodeSurfaceSolver's explicit-gravity (LISFLOOD-FP) local-inertial scheme. State is the augmented [V(cells), q(edges)] vector in a Kokkos N_Vector, so BOTH the RHS/preconditioner kernels (KokkosInertialKernels.hpp) AND ARKStep's vector ops run device-resident — the serial-N_Vector bottleneck that limited the core OpenMP path to ~1.2× is removed.

Only the scalable split is implemented: gravity transport explicit, per-edge friction implicit (diagonal → exact preconditioner, no global solve). The implicit-gravity comparison path stays serial-only.

Lives entirely in the GPU plugin; never linked into the core engine.

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