OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
Node.hpp
Go to the documentation of this file.
1
16#ifndef OPENSWMM_NODE_HPP
17#define OPENSWMM_NODE_HPP
18
19#include "../core/Constants.hpp"
20#include "../data/NodeData.hpp"
21#include "../data/TableData.hpp"
22
23namespace openswmm {
24
25struct SimulationContext;
26
27namespace node {
28
29// ============================================================================
30// Per-element functions (for C API / single-object queries)
31// ============================================================================
32
44double getVolume(const NodeData& nodes, int idx, double depth,
45 TableData* tables = nullptr, int unit_sys = 0);
46
58double getSurfArea(const NodeData& nodes, int idx, double depth,
59 TableData* tables = nullptr, int unit_sys = 0);
60
72double getPondedArea(const NodeData& nodes, int idx, double depth);
73
85double getMaxOutflow(const NodeData& nodes, int idx, double q, double dt);
86
99double getOverflow(double new_volume, double full_volume, double dt);
100
109double getDepth(const NodeData& nodes, int idx, double volume,
110 TableData* tables = nullptr, int unit_sys = 0);
111
115inline double getHead(double invert_elev, double depth) {
116 return invert_elev + depth;
117}
118
119// ============================================================================
120// Batch functions (for routing hot loop)
121// ============================================================================
122
131void computeHeads(const double* invert, const double* depth, double* head, int n);
132
140void computeVolumes(const NodeData& nodes, const double* depth, double* volume);
141
151void computeOverflows(const double* new_volume, const double* full_volume,
152 double* overflow, double dt, int n);
153
154} // namespace node
155
156// Constants now consolidated in core/Constants.hpp
157
158} // namespace openswmm
159
160#endif // OPENSWMM_NODE_HPP
double getHead(double invert_elev, double depth)
Compute head from depth: head = invert + depth.
Definition Node.hpp:115
double getSurfArea(const NodeData &nodes, int idx, double depth, TableData *tables, int unit_sys)
Compute surface area at a given depth for a single node.
Definition Node.cpp:131
void computeVolumes(const NodeData &nodes, const double *depth, double *volume)
Compute volumes for all nodes from their current depths.
Definition Node.cpp:227
void computeOverflows(const double *new_volume, const double *full_volume, double *overflow, double dt, int n)
Compute overflow for all nodes.
Definition Node.cpp:238
void computeHeads(const double *invert, const double *depth, double *head, int n)
Compute head = invert + depth for all nodes.
Definition Node.cpp:217
double getDepth(const NodeData &nodes, int idx, double volume, TableData *tables, int unit_sys)
Compute depth from volume for a single node (inverse of getVolume).
Definition Node.cpp:68
double getOverflow(double new_volume, double full_volume, double dt)
Compute overflow rate at a node.
Definition Node.cpp:206
double getMaxOutflow(const NodeData &nodes, int idx, double q, double dt)
Compute max outflow limited by available volume.
Definition Node.cpp:191
double getVolume(const NodeData &nodes, int idx, double depth, TableData *tables, int unit_sys)
Compute volume at a given depth for a single node.
Definition Node.cpp:25
double getPondedArea(const NodeData &nodes, int idx, double depth)
Get the ponded area (for overflow above rim).
Definition Node.cpp:174
Definition NodeCoupling.cpp:15
Structure-of-Arrays storage for all nodes.
Definition NodeData.hpp:90