![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
#include <ExplicitFvSolver.hpp>
Public Member Functions | |
| ExplicitFvSolver ()=default | |
| ~ExplicitFvSolver () override=default | |
| ExplicitFvSolver (const ExplicitFvSolver &)=delete | |
| ExplicitFvSolver & | operator= (const ExplicitFvSolver &)=delete |
| void | initialize (NetworkMeshData &mesh, NetworkStateData &state, const FvOptions &opts) override |
One-time setup. mesh, state and opts must outlive the solver. | |
| double | advance (double t_current, double t_target, const FvStepForcing &forcing) override |
| void | reinitialize (double t0) override |
Reinitialize at t0 after external state edits (hot start, API writes). | |
| void | finalize () override |
| Release all backend resources. | |
| long | last_num_steps () const noexcept override |
| Substep count used by the last advance() call. | |
| double | last_step_size () const noexcept override |
| Last internal substep size (s). | |
| double | suggested_step () const noexcept override |
| RunStats | run_stats () const noexcept override |
| Read cumulative statistics. Default: zeros (backend has no counters). | |
| bool | is_initialized () const noexcept override |
| True once initialize() has completed and the solver is ready. | |
| bool | divergence (Divergence &d) const noexcept override |
| const std::vector< double > & | node_exchange () const noexcept |
| const std::vector< double > & | node_inflow_volume () const noexcept |
| const std::vector< double > & | node_outflow_volume () const noexcept |
| const std::vector< uint8_t > & | inlet_control () const noexcept |
| const std::vector< double > & | node_flood_volume () const noexcept |
| Per-node flooding VOLUME (ft³) over the last advance(). | |
| const std::vector< double > & | dummy_volume () const noexcept |
| const std::vector< std::uint8_t > & | node_passthrough () const noexcept |
| const std::vector< std::uint8_t > & | node_publish_stage () const noexcept |
| const std::vector< double > & | cell_flow_integral () const noexcept |
| double | nodeVolumeFromDepth (int node, double depth) const |
| int | lts_tiers () const noexcept |
| const std::array< long, kMaxLtsTiers > & | tier_occupancy () const noexcept |
Public Member Functions inherited from openswmm::fv::INetworkSolver | |
| virtual | ~INetworkSolver ()=default |
|
default |
|
overridedefault |
|
delete |
|
overridevirtual |
Advance from t_current to t_target (s), substepping at the CFL limit.
Implements openswmm::fv::INetworkSolver.
|
inlinenoexcept |
Time-integrated cell discharge (ft³) over the last advance(), used to publish a routing-step MEAN link flow rather than an end-of-step snapshot — the snapshot aliases badly when a routing step spans many substeps.
|
inlineoverridevirtualnoexcept |
True when the last advance() left a cell beyond physical bounds (or non-finite), with d describing the worst offender. Default: never reports, for a backend without the check.
Reimplemented from openswmm::fv::INetworkSolver.
|
inlinenoexcept |
|
overridevirtual |
Release all backend resources.
Implements openswmm::fv::INetworkSolver.
|
overridevirtual |
One-time setup. mesh, state and opts must outlive the solver.
Implements openswmm::fv::INetworkSolver.
|
inlinenoexcept |
Per-conduit flag: did HEC-5 inlet control cap this culvert's inflow at any point in the last advance()? Reported as the "Inlet Ctrl" column.
|
inlineoverridevirtualnoexcept |
True once initialize() has completed and the solver is ready.
Implements openswmm::fv::INetworkSolver.
|
inlineoverridevirtualnoexcept |
Substep count used by the last advance() call.
Implements openswmm::fv::INetworkSolver.
|
inlineoverridevirtualnoexcept |
Last internal substep size (s).
Implements openswmm::fv::INetworkSolver.
|
inlinenoexcept |
Number of LTS tiers the last macro cycle ran with. 1 means tiering found nothing to separate and the solver took the global-dt path.
|
inlinenoexcept |
|
inlinenoexcept |
Per-node flooding VOLUME (ft³) over the last advance().
|
inlinenoexcept |
Per-node conduit-face exchange VOLUME split into arriving and departing magnitudes (ft³) over the last advance(). SWMM's node ledger is not a net figure — inflow and outflow are separate magnitudes, and the mass balance books an outfall's system discharge from inflow alone — so the split has to be accumulated here, per substep, rather than reconstructed from the net afterwards.
|
inlinenoexcept |
|
inlinenoexcept |
Pass-through classification (clean degree-2 junctions whose faces present the neighbouring cells to each other directly; refreshed with the structure flows). The publish path reads it to reconstruct those nodes' REPORTED heads face-consistently — the solver-internal head stays the stable wet-mean, which also serves as the ghost boundary state under LTS tier holds.
|
inlinenoexcept |
Nodes whose PUBLISHED stage should be reconstructed from the incident wet cells rather than reported as the solver's own head. A superset of node_passthrough(): the same cleanliness and structure/carry tests, but at any degree, because the degree-2 restriction exists only for the solver's direct-face bypass.
Measured on Example1 under FLOW_ROUTING FV: nodes outside this set published a stage up to 0.91 ft above their own adjacent cell at FV_MIN_CELLS 1, falling ~first-order with refinement (a datum term), while nodes inside it never exceeded 0.0002 ft at any refinement. See tests/manual/fv_node_stage/RESULTS.md.
| double openswmm::fv::ExplicitFvSolver::nodeVolumeFromDepth | ( | int | node, |
| double | depth ) const |
Depth → volume through the node's own storage relation. Exposed for the Router glue's seeding path and for the conservation tests.
|
delete |
|
overridevirtual |
Reinitialize at t0 after external state edits (hot start, API writes).
Implements openswmm::fv::INetworkSolver.
|
overridevirtualnoexcept |
Read cumulative statistics. Default: zeros (backend has no counters).
Reimplemented from openswmm::fv::INetworkSolver.
|
inlineoverridevirtualnoexcept |
CFL-limited step the solver would take next, from its most recent census. Router::getAdaptiveStep publishes this as the routing-step suggestion.
Implements openswmm::fv::INetworkSolver.
|
inlinenoexcept |
Cells per tier over the run — the §6.12 histogram that proves tiering is genuinely active on a case rather than degenerating to K = 1.