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

Plan PE — per-element radiative and bed attributes. More...

#include <cstddef>
#include <cstdint>
#include <string>
#include <vector>
Include dependency graph for HeatOverrideData.hpp:
This graph shows which files directly or indirectly include this file:

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
 

Detailed Description

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.

The element token (D-PE1)
Flux evaluators take a 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.
Resolution is dense-on-demand (D-PE2)
Parsing produces sparse rows. 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.

Precedence (D-PE3)
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.
See also
plans/transport/PER_ELEMENT_HEAT_ATTRIBUTES_PLAN_2026-09-01.md
Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
License\n Apache-2.0