![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
Kokkos (OpenMP/CUDA/HIP/SYCL) port of the explicit local-inertial FV marcher with tiered local timestepping. More...
#include <array>#include <string>#include <utility>#include <vector>#include "../solver/ISurfaceSolver.hpp"#include "../solver/InertialEdges.hpp"#include "KokkosTypes.hpp"Go to the source code of this file.
Classes | |
| class | openswmm::twoD::gpu::ExplicitKokkosSurfaceSolver |
Namespaces | |
| namespace | openswmm |
| namespace | openswmm::twoD |
| namespace | openswmm::twoD::gpu |
Kokkos (OpenMP/CUDA/HIP/SYCL) port of the explicit local-inertial FV marcher with tiered local timestepping.
P5 of the 2026-07-29 2D reimplementation plan. Same numerical scheme as the serial ExplicitInertialSolver — the scalar kernel bodies are the SAME code (InertialKernels.hpp / VfrClosure.hpp, compiled here with OPENSWMM_KERNEL_FN = KOKKOS_INLINE_FUNCTION) — only the loop structure changes:
face sweep / positivity / cell gather → parallel_for per tier active-set + tier compaction → parallel_scan (device) dt0 → min-reduce (exact in FP) boundary edges + live junction exchange → single-thread device kernel (serial order preserved → deterministic shared- cell/node budgets, exactly the serial semantics)
Host↔device traffic happens ONLY at advance() boundaries (the co-advance sync batches): forcings + frozen 1D node arrays in, {volume, head, depth, edge_flux, ∫Q dt} out. All marching state (V, η, h, q, accumulators, tiers, active sets) is device-resident.
Determinism: every kernel writes disjoint outputs in fixed CSR order and the only reductions are min (FP-exact) — on the OpenMP backend results are bit-identical to the serial marcher for any thread count (gated by test_2d_omp_explicit).