#include <PressurizedHeadSolver.hpp>
◆ anonymous enum
| anonymous enum : std::uint8_t |
Face treatment decided by classify(). Values are load-bearing for the assembly switch; kNone faces are untouched. kFull — both sides pressurized: Casulli form (steady state reduces to ΔH/L = −S_f exactly — the head-loss invariance gate). kDelta — a transition face (exactly one side pressurized, with a pressurized CELL side). CLASSIFICATION ONLY in R2a: the face stays fully explicit — Godunov flux and census bound. Folding transitions in was built and MEASURED before being cut: every memoryless fold (frozen-ghost delta form, free cell as a soft unknown, free-side depth thresholds at 0.05 and 0.5·y_full) re-times an ADVANCING fill — bore arrival 65/345 s, 60/545 s, 75/1320 s at c = 150/660 against the 42 s quasi-steady analytic — because any instantaneous threshold is swept through transiently while a cell fills. A STANDING transition (backwater below an internal jump) is only distinguishable by cadence, so releasing its census throttle belongs to the LTS composition (R2b), which can put the front on its own fine tier. kNone — everything else: gated/culvert faces (their laws stand), closed ends, and faces with no pressurized CELL side (a pressurized ghost against a free cell is the classic manhole bore).
| Enumerator |
|---|
| kNone | |
| kFull | |
| kDelta | |
◆ anyImplicit()
| bool openswmm::fv::PressurizedHeadSolver::anyImplicit |
( |
| ) |
const |
|
inlinenoexcept |
◆ cellPressurized()
Is this cell pressurized (band entry and above) under the R2 rule? Under the TPA closure (issue #156: state.cell_tpa non-empty) membership IS the regime flag — a latched sub-atmospheric cell sits below y_crown yet is exactly the stiff-acoustic case this solver exists for (plan §2.2(1)). The flag is fixed within a substep, so the SPD structure and the census edit stay consistent.
◆ classify()
| bool openswmm::fv::PressurizedHeadSolver::classify |
( |
const PressurizedView & | v | ) |
|
Re-derive the pressurized subset from the instantaneous state: pressurized cells, implicit faces with their mode, folded junction rows and the component partition. Returns true when at least one implicit face exists (i.e. solve() has work).
◆ faceModeOf()
Implicit eligibility and mode of one face, derived from the instantaneous state alone — the ONE predicate classify() and the census edit share, so the dt bound and the solve can never disagree about which faces are covered. Gated and culvert-capped faces are never implicit (their laws stand, explicitly); a pressurized ghost against a FREE cell is the filling bore and stays explicit too.
◆ finalizeCells()
| void openswmm::fv::PressurizedHeadSolver::finalizeCells |
( |
const PressurizedView & | v | ) |
|
Post-update pass: a pressurized cell's momentum state is slaved to the solved face discharges (Q_i = mean of its two face fluxes in the cell frame) so no explicit acoustic residue survives in the collocated Q. Call AFTER updateCells/updateNodes.
◆ foldedNodes()
| const std::vector< std::uint8_t > & openswmm::fv::PressurizedHeadSolver::foldedNodes |
( |
| ) |
const |
|
inlinenoexcept |
Folded-node mask from the last classify() — relaxNodeFluxes must skip these (their continuity is a row of the implicit system).
◆ ghostPressurized()
Is the node-side ghost of face f pressurized?
◆ solve()
| void openswmm::fv::PressurizedHeadSolver::solve |
( |
const PressurizedView & | v, |
|
|
double | dt ) |
Assemble and solve the SPD head system per component, then overwrite the implicit faces' entries in f_mass (and the species-facing copies f_flux.mass / f_sstar) with the back-substituted discharges, and write the folded junctions' heads (ceiling/floor clamped, with a one-shot Dirichlet re-solve for violating rows).
The documentation for this class was generated from the following files: