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

Orifice-equation exchange between 2D surface and SWMM nodes. More...

#include <unordered_map>
#include "../data/MeshData.hpp"
#include "../data/SurfaceStateData.hpp"
#include "../data/SolverOptions2D.hpp"
Include dependency graph for NodeCoupling.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  openswmm::twoD::CouplingPoint
 Descriptor for a single coupling point between 2D and 1D. More...
 

Namespaces

namespace  openswmm
 
namespace  openswmm::twoD
 

Functions

std::vector< CouplingPointopenswmm::twoD::buildCouplingPoints (const MeshData &mesh, const SimulationContext &ctx)
 Build the list of coupling points from mesh coupling maps.
 
double openswmm::twoD::computeNodeCouplingDQdh1d (const CouplingPoint &cp, const MeshData &mesh, const SurfaceStateData &state, const NodeData &nodes, const SolverOptions2D &opts) noexcept
 Head sensitivity G = −∂Q/∂h_1d ≥ 0 of the coupling orifice at a point (SI: m³/s per m of 1D head, with h_1d in 2D metres).
 
int openswmm::twoD::accumulateOutfallDischargeStep (const std::vector< CouplingPoint > &cps, const MeshData &mesh, const SurfaceStateData &state, const SimulationContext &ctx, const SolverOptions2D &opts, double dt, std::vector< double > &accum_m3, std::vector< double > &cell_budget_m3, double *sample_row)
 Per-routing-step outfall discharge accumulation.
 
void openswmm::twoD::injectAccumulatedExchange (const std::vector< CouplingPoint > &cps, const MeshData &mesh, SurfaceStateData &state, const std::vector< double > &accum_m3, double window_dt, double sign, const std::vector< double > *node_conc=nullptr)
 Inject a per-point accumulated exchange volume into the 2D window source field.
 
double openswmm::twoD::computeNodeCouplingQ (const CouplingPoint &cp, const MeshData &mesh, const SurfaceStateData &state, const NodeData &nodes, const SolverOptions2D &opts, const double *provisional_vol_m3=nullptr, double h1d_offset_m=0.0) noexcept
 Live node-coupling orifice flux for ONE non-outfall coupling point.
 
void openswmm::twoD::scatterCouplingToYdot (const MeshData &mesh, const SurfaceStateData &state, const CouplingPoint &cp, double Q, double *ydot) noexcept
 Scatter a signed volumetric exchange Q (m³/s) directly onto the cell derivatives ydot[] of the 2D volume ODE (for the live-RHS path).
 
void openswmm::twoD::updateOutfallBoundaries (const std::vector< CouplingPoint > &cps, const MeshData &mesh, const SurfaceStateData &state, SimulationContext &ctx, const SolverOptions2D &opts)
 Update outfall boundary depths from 2D surface heads.
 

Detailed Description

Orifice-equation exchange between 2D surface and SWMM nodes.

Handles:

  • Bidirectional orifice exchange at junction coupling points
  • Uncapped node surcharge spill and return flow
  • Outfall boundary feedback (dynamic tailwater from 2D)
  • Flap gate backflow prevention at outfalls
  • Ponding suppression for 2D-coupled nodes
  • Mass-conservative injection via the forcing API
See also
TWO_DIMENSIONAL_SURFACE_ROUTING_IMPLEMENTATION_STRATEGY.md §6, §13, §14
Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
License\n Apache-2.0