OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
LidNodeData.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2// Copyright 2026 Caleb Buahin
3
12
13#ifndef OPENSWMM_LID_NODE_DATA_HPP
14#define OPENSWMM_LID_NODE_DATA_HPP
15#include <array>
16#include <vector>
17#include <string>
20
21namespace openswmm {
22// Authored, ordered layers. Thickness/suction are in rain-depth units (in/mm),
23// conductivity in in/hr or mm/hr. BOTTOM is a boundary, not a numbered layer.
24enum class LidNodeLayerKind { Surface = 0, Media = 1, Aggregate = 2, Bottom = 3 };
26 std::string pollutant;
27 double removal = 0.0; // fraction of outgoing mass
28 double decay = 0.0; // first-order rate, per day
29 std::string expression; // optional R= or C=, applied after fixed removal
30};
33 std::array<double, 7> params{};
34 std::vector<LidLayerTreatment> treatment;
35 richards::Material retention; // explicit inverse-metre parameters
36 richards::Options flow; // control options, stored on first layer only
37};
39 double bottom = 0.0, top = 0.0; // feet above invert
40 double geometric_volume = 0.0, area = 0.0;
41 double porosity = 1.0, theta = 0.0, field_capacity = 0.0, wilting_point = 0.0;
42 double conductivity = 0.0, conductivity_slope = 0.0, suction = 0.0;
44 int layer = 0;
45};
47 int from, to;
48 double volume;
49}; // -1 mobile, -2 lateral, -3 evaporation
51 int link, cell;
52 double volume;
53}; // positive into held water
55 bool richards = false;
56 std::vector<double> richards_water; // ft3, full porous stores; surface row is unused
57 std::vector<double> richards_pressure; // ft, negative means suction
58 richards::Report richards_report; // SI diagnostics for last accepted interval
59 double richards_bottom_loss = 0.0; // ft3, outside-mesh system loss
60 double richards_completed_time = 0.0; // internal owner clock; R5 joint restart still guarded
62 0.0; // accepted hydraulic interval; transient until joint restart qualifies
63 bool richards_mesh_pending_finish = false; // accepted interval awaits one hydraulic port finish
64 bool richards_mesh_routed = false; // final native routing trial awaits finish; no replay/reset
65 // One modified Green-Ampt history for the media directly below SURFACE.
66 // Other layer/port wetting uses the physical cell and mobile inventories.
69 double infiltration_head = 0.0; // last reconciled mobile water-table depth
70
71 std::vector<double> quality_mass; // [cell * pollutant + pollutant], retained stores
72 std::vector<double> quality_old_water;
73 std::vector<LidWaterTransfer> quality_transfers;
74 std::vector<LidPortTransfer> quality_ports;
75 std::vector<double> quality_outlet_conc; // [link * pollutant + pollutant], NaN means mobile
76 std::vector<double>
77 thermal_energy; // canonical J per physical cell; never a dry-temperature display value
78 std::vector<double>
79 thermal_ground_contact_j; // cumulative signed soil-contact receipt, positive into each LID cell
80 double quality_old_mobile = 0.0;
81 double mobile_delta = 0.0; // accepted port balance in the current hydraulic iteration
82 std::vector<double>
83 port_delta; // accepted link exchange volumes, reset each hydraulic iteration
84 std::vector<LidNodeCell> cells; // top to bottom; MEDIA subdivided dynamically
85 double held_volume = 0.0;
86 double evap_volume = 0.0;
87 double captured_flow = 0.0;
88 double treated_volume = 0.0;
89};
90enum class LidNodeBottom { Current = 0, Sealed = 1, MeshAquifer = 2 };
97 int link = -1;
98 int layer = 1; // one-based, top to bottom
99 bool top = false;
100};
101} // namespace openswmm
102#endif
Infiltration models — Horton, Green-Ampt, SCS Curve Number.
Richards-equation soil column state and numerical integration.
Definition ExchangeLaw.hpp:60
LidNodeLayerKind
Definition LidNodeData.hpp:24
@ Bottom
Definition LidNodeData.hpp:24
@ Aggregate
Definition LidNodeData.hpp:24
@ Media
Definition LidNodeData.hpp:24
@ Surface
Definition LidNodeData.hpp:24
LidNodeBottom
Definition LidNodeData.hpp:90
@ Current
Definition LidNodeData.hpp:90
@ MeshAquifer
Definition LidNodeData.hpp:90
@ Sealed
Definition LidNodeData.hpp:90
Definition Infiltration.hpp:74
Definition LidNodeData.hpp:25
double decay
Definition LidNodeData.hpp:28
double removal
Definition LidNodeData.hpp:27
std::string expression
Definition LidNodeData.hpp:29
std::string pollutant
Definition LidNodeData.hpp:26
Definition LidNodeData.hpp:38
double top
Definition LidNodeData.hpp:39
double area
Definition LidNodeData.hpp:40
double porosity
Definition LidNodeData.hpp:41
double conductivity_slope
Definition LidNodeData.hpp:42
double conductivity
Definition LidNodeData.hpp:42
int layer
Definition LidNodeData.hpp:44
LidNodeLayerKind kind
Definition LidNodeData.hpp:43
double theta
Definition LidNodeData.hpp:41
double geometric_volume
Definition LidNodeData.hpp:40
double field_capacity
Definition LidNodeData.hpp:41
double bottom
Definition LidNodeData.hpp:39
double wilting_point
Definition LidNodeData.hpp:41
double suction
Definition LidNodeData.hpp:42
Definition LidNodeData.hpp:91
double initial_saturation
Definition LidNodeData.hpp:93
LidNodeBottom bottom
Definition LidNodeData.hpp:94
int control
Definition LidNodeData.hpp:92
Definition LidNodeData.hpp:31
richards::Options flow
Definition LidNodeData.hpp:36
std::array< double, 7 > params
Definition LidNodeData.hpp:33
richards::Material retention
Definition LidNodeData.hpp:35
std::vector< LidLayerTreatment > treatment
Definition LidNodeData.hpp:34
LidNodeLayerKind kind
Definition LidNodeData.hpp:32
Definition LidNodeData.hpp:96
int link
Definition LidNodeData.hpp:97
bool top
Definition LidNodeData.hpp:99
int layer
Definition LidNodeData.hpp:98
Definition LidNodeData.hpp:54
std::vector< double > richards_water
Definition LidNodeData.hpp:56
int infiltration_cell
Definition LidNodeData.hpp:68
double evap_volume
Definition LidNodeData.hpp:86
std::vector< double > thermal_energy
Definition LidNodeData.hpp:77
richards::Report richards_report
Definition LidNodeData.hpp:58
double richards_mesh_start
Definition LidNodeData.hpp:61
bool richards_mesh_pending_finish
Definition LidNodeData.hpp:63
bool richards
Definition LidNodeData.hpp:55
double richards_completed_time
Definition LidNodeData.hpp:60
std::vector< LidNodeCell > cells
Definition LidNodeData.hpp:84
double quality_old_mobile
Definition LidNodeData.hpp:80
double held_volume
Definition LidNodeData.hpp:85
std::vector< double > quality_outlet_conc
Definition LidNodeData.hpp:75
std::vector< double > port_delta
Definition LidNodeData.hpp:83
std::vector< double > thermal_ground_contact_j
Definition LidNodeData.hpp:79
std::vector< LidWaterTransfer > quality_transfers
Definition LidNodeData.hpp:73
bool richards_mesh_routed
Definition LidNodeData.hpp:64
double infiltration_head
Definition LidNodeData.hpp:69
std::vector< double > richards_pressure
Definition LidNodeData.hpp:57
double mobile_delta
Definition LidNodeData.hpp:81
double richards_bottom_loss
Definition LidNodeData.hpp:59
double captured_flow
Definition LidNodeData.hpp:87
std::vector< double > quality_mass
Definition LidNodeData.hpp:71
std::vector< LidPortTransfer > quality_ports
Definition LidNodeData.hpp:74
std::vector< double > quality_old_water
Definition LidNodeData.hpp:72
double treated_volume
Definition LidNodeData.hpp:88
GreenAmptState surface_infil
Definition LidNodeData.hpp:67
Definition LidNodeData.hpp:50
double volume
Definition LidNodeData.hpp:52
int cell
Definition LidNodeData.hpp:51
int link
Definition LidNodeData.hpp:51
Definition LidNodeData.hpp:46
int to
Definition LidNodeData.hpp:47
int from
Definition LidNodeData.hpp:47
double volume
Definition LidNodeData.hpp:48
Definition RichardsColumn.hpp:21
Definition RichardsColumn.hpp:24
Definition RichardsColumn.hpp:60