![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
Plan PE — per-element radiative and bed attributes. More...
#include <cstddef>#include <cstdint>#include <string>#include <vector>Go to the source code of this file.
Classes | |
| struct | openswmm::HeatElement |
| Which element a flux evaluator is being called for. More... | |
| struct | openswmm::HeatOverrideRow |
Namespaces | |
| namespace | openswmm |
Enumerations | |
| enum class | openswmm::HeatElemKind : std::uint8_t { openswmm::NODE = 0 , openswmm::LINK = 1 , openswmm::SUBCATCH = 2 , openswmm::LID = 3 , openswmm::CELL2D = 4 } |
| What kind of element a flux is being evaluated for (D-PE1). More... | |
| enum class | openswmm::HeatScope : std::uint8_t { openswmm::GLOBAL = 0 , openswmm::TAG = 1 , openswmm::NODE = 2 , openswmm::LINK = 3 } |
| Scope of one override row (D-PE3). Ordered by specificity. More... | |
| enum class | openswmm::HeatAttr : int { openswmm::ALBEDO = 0 , openswmm::SHADE_FACTOR , openswmm::SKY_VIEW , openswmm::EMISS_WATER , openswmm::EMISS_LANDCOVER , openswmm::LANDCOVER_TEMP , openswmm::SED_THERMAL_DIFFUSIVITY , openswmm::SED_SOLUTE_DIFFUSIVITY , openswmm::SED_BED_THICKNESS , openswmm::SED_GROUND_DEPTH , openswmm::SED_GROUND_TEMP , openswmm::SED_HYPORHEIC_VELOCITY , openswmm::SED_DENSITY , openswmm::SED_SPECIFIC_HEAT , openswmm::COUNT_ } |
| Which attribute an override row sets. More... | |
Functions | |
| bool | openswmm::isSedimentAttr (HeatAttr a) noexcept |
Plan PE — per-element radiative and bed attributes.
Shading, sky view, land-cover emissivity and temperature, burial depth, ground temperature, hyporheic velocity and bed material are properties of a PLACE. Until PE they were one number for the whole model, which collapses exactly the spatial signal a heat model exists to produce: a shaded riparian reach and an exposed concrete channel shared one shade factor, and a 4 m trunk and a 0.8 m lateral shared one ground depth.
HeatElement — a kind and an index. ARD cells and LARD parcels deliberately do NOT get their own kind: both resolve to their parent LINK. Shading does not vary within one conduit in any data a modeller can supply, and a finer table would be one nothing can fill. Do not "improve" this into a per-cell table.resolveHeatOverrides runs once at open, after every component has applied, and materialises a dense vector only if at least one row targets that family. The step loop then reads ov.empty() ? global : ov[i] — one predictable branch, no hashing, no search.Two properties follow, and both are the reason for the choice: a model with no overrides allocates nothing and passes the same global object it passed before PE, so byte-identity is structural rather than tested; and the per-step cost of this whole feature on such a model is one .empty() check.
GLOBAL < TAG < element. Most specific wins. TAG reads SWMM's own [TAGS] section, already parsed and already round-tripped, so fifty shaded conduits are tagged once rather than listed fifty times. This replaces the reference's <from> <to> element range, which does not map onto a network graph with no linear element ordering.