OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
openswmm::SimulationSnapshot Struct Reference

Complete simulation state snapshot at one output time step. More...

#include <SimulationSnapshot.hpp>

Collaboration diagram for openswmm::SimulationSnapshot:

Public Attributes

double sim_time = 0.0
 Simulation date/time (SWMM DateTime: days since 12/31/1899).
 
std::int64_t wall_time_unix = 0
 Wall-clock Unix timestamp when snapshot was taken.
 
int output_step_index = 0
 Sequential output step index (0-based).
 
int node_count = 0
 Number of nodes.
 
int link_count = 0
 Number of links.
 
int subcatch_count = 0
 Number of subcatchments.
 
int gage_count = 0
 Number of rain gages.
 
int pollut_count = 0
 Number of pollutants.
 
NodeSnapshot nodes
 Node state.
 
LinkSnapshot links
 Link state.
 
SubcatchSnapshot subcatch
 Subcatchment state.
 
GageSnapshot gages
 Gage state.
 
double sys_temperature = 0.0
 Air temperature.
 
double sys_rainfall = 0.0
 Average rainfall over all gages.
 
double sys_snow_depth = 0.0
 Total snow depth.
 
double sys_evap = 0.0
 Total evaporation loss.
 
double sys_infil = 0.0
 Total infiltration loss.
 
double sys_runoff = 0.0
 Total runoff flow.
 
double sys_dw_inflow = 0.0
 Total dry weather inflow.
 
double sys_gw_inflow = 0.0
 Total groundwater inflow.
 
double sys_ii_inflow = 0.0
 Total RDII inflow.
 
double sys_ext_inflow = 0.0
 Total external inflow.
 
double sys_flooding = 0.0
 Total flooding.
 
double sys_outflow = 0.0
 Total outflow.
 
double sys_storage = 0.0
 Total storage volume.
 
double sys_pet = 0.0
 Potential evapotranspiration.
 
bool has_subcatchments = true
 Whether the model has any subcatchments.
 
std::vector< double > node_quality
 Node pollutant concentrations.
 
std::vector< double > link_quality
 Link pollutant concentrations.
 
std::vector< double > subcatch_quality
 Subcatchment pollutant loadings.
 
const std::vector< std::string > * node_ids = nullptr
 Node IDs in index order. Pointer to engine-managed strings.
 
const std::vector< std::string > * link_ids = nullptr
 Link IDs in index order.
 
const std::vector< std::string > * subcatch_ids = nullptr
 Subcatchment IDs in index order.
 
const std::vector< std::string > * gage_ids = nullptr
 Gage IDs in index order.
 
const std::vector< std::string > * pollut_names = nullptr
 Pollutant names in index order.
 
const char * flow_units = nullptr
 Flow unit string (e.g., "CFS", "LPS").
 
const char * length_units = nullptr
 Length unit string (e.g., "FEET", "METERS").
 
int flow_units_code = 0
 Flow units code (FlowUnits enum value: 0=CFS, 3=CMS, etc.).
 
int surface_tri_count = 0
 Number of cells (faces): triangles + quads.
 
int surface_vert_count = 0
 Number of vertices (nodes)
 
int surface_quad_count = 0
 Number of quadrilateral cells (0 = all triangles)
 
int surface_edge_stride = 3
 
std::vector< uint8_t > surface_cell_nv
 
std::vector< double > surface_depth
 Overland flow depth ψ_o (m), per face.
 
std::vector< double > surface_head
 Total head h_o = z_s + ψ_o (m), per face.
 
std::vector< double > surface_grad_hx
 Unlimited head gradient ∂h/∂x, per face.
 
std::vector< double > surface_grad_hy
 Unlimited head gradient ∂h/∂y, per face.
 
std::vector< double > surface_grad_hx_lim
 Slope-limited head gradient ∂h/∂x, per face.
 
std::vector< double > surface_grad_hy_lim
 Slope-limited head gradient ∂h/∂y, per face.
 
MeshSnowSnapshot surface_snow
 Accepted snow state/ledgers, SI; own completed clock.
 
std::vector< double > surface_rainfall
 Rainfall intensity (m/s), per face.
 
std::vector< double > surface_coupling_flux
 Coupling flux to SWMM node (m/s, + = into 2D), per face.
 
std::vector< double > surface_net_source
 Net source/sink (m/s), per face.
 
std::vector< double > surface_infil_rate
 Held infiltration loss rate (m/s, ≥ 0), per face — all zero when no [2D_INFILTRATION*] model resolved.
 
std::vector< double > surface_infil_cum
 Cumulative infiltrated depth (m), per face.
 
std::vector< double > surface_rain_cum
 Cumulative rainfall volume (m³), per face.
 
std::vector< double > surface_species_conc
 2D surface species concentration (overland transport S1/S2).
 
int surface_species_count = 0
 
const std::vector< std::string > * surface_species_names = nullptr
 
const std::vector< std::string > * surface_species_units = nullptr
 
std::vector< double > surface_buildup
 S7: buildup on the cells' land-use surfaces, per surface species (the pollutant and MSX rows only — the first surface_buildup_count rows of surface_species_names), user mass per acre (US) or hectare (SI), summed over the cell's land uses. Layout [species * surface_tri_count + face]. Empty when no [2D_COVERAGES] row resolved.
 
int surface_buildup_count = 0
 
bool gw2d_active = false
 G-O: the two-zone [2D_AQUIFER] kernel's per-cell state, SI, one value per face (surface_tri_count), empty when no aquifer resolved. Rates are the cell's LAST firing (held between firings, like the surface's held infiltration rate).
 
std::vector< double > gw2d_table_elev
 water-table elevation (m) = bed + hg
 
std::vector< double > gw2d_hg
 saturated thickness (m)
 
std::vector< double > gw2d_hu
 closure A bulk unsaturated storage (m of water); 0 under closure B
 
std::vector< double > gw2d_recharge
 q0 (m/s), + down, − capillary rise
 
std::vector< double > gw2d_lateral
 net lateral Darcy into the cell (m³/s)
 
std::vector< double > gw2d_node_exchange
 exchange with a 1D node (m³/s), + out of the aquifer
 
std::vector< double > gw2d_deep
 deep loss (m/s)
 
std::vector< double > gw2d_et
 subsurface ET (m/s, ≥ 0 out)
 
std::vector< double > gw2d_dunne
 saturation excess returned to the surface (m³/s)
 
std::vector< double > gw2d_infil_in
 infiltration delivered from the surface (m/s)
 
std::vector< double > gw2d_link_seepage
 
std::vector< double > gw2d_sat_conc
 
std::vector< double > gw2d_unsat_conc
 
std::vector< double > gw2d_species_ledger
 
int gw2d_species_count = 0
 
const std::vector< std::string > * gw2d_species_names = nullptr
 
std::vector< double > gw2d_bed_elev
 
std::vector< int > gw2d_closure
 
std::vector< double > gw2d_theta_sigma
 
int gw2d_m_layers = 0
 
std::vector< double > gw2d_ledger
 
std::vector< double > gw2d_bed_exchange_cum
 
const std::vector< std::string > * gw2d_node_names = nullptr
 
bool thermal2d_active = false
 
int thermal2d_layer_count = 0
 
int thermal2d_surface_budget_terms = 6
 
int thermal2d_ground_budget_terms = 12
 
std::vector< double > thermal2d_water_temperature
 degC, face
 
std::vector< double > thermal2d_bed_temperature
 degC, face
 
std::vector< double > thermal2d_bed_energy
 J, face.
 
std::vector< double > thermal2d_bed_capacity
 
int thermal2d_bed_species_count = 0
 
std::vector< std::string > thermal2d_bed_species_names
 
std::vector< std::string > thermal2d_bed_species_units
 
std::vector< double > thermal2d_bed_pore_volume
 
std::vector< double > thermal2d_bed_species_concentration
 
std::vector< double > thermal2d_bed_species_exchange
 
std::vector< double > thermal2d_bed_age_generation
 Cumulative local bed age generation in hour m3.
 
std::vector< double > thermal2d_surface_budget
 
std::vector< double > thermal2d_evaporation_m3
 cumulative accepted evaporation, face
 
std::vector< double > thermal2d_ground_temperature
 capacity-weighted degC, face
 
std::vector< double > thermal2d_ground_energy
 J, face.
 
std::vector< double > thermal2d_ground_capacity
 
std::vector< double > thermal2d_ground_layer_center_m
 [layer, face], fixed-grid depth positive downward.
 
std::vector< double > thermal2d_ground_layer_temperature
 
std::vector< double > thermal2d_ground_layer_energy
 
std::vector< double > thermal2d_ground_layer_capacity
 
std::vector< double > thermal2d_ground_budget
 
int thermal2d_lid_layer_count = 0
 
std::vector< int > thermal2d_lid_layer_node_index
 
std::vector< int > thermal2d_lid_layer_face_index
 
std::vector< int > thermal2d_lid_layer_physical_index
 
std::vector< int > thermal2d_lid_layer_control_index
 
std::vector< int > thermal2d_lid_layer_authored_index
 
std::vector< std::string > thermal2d_lid_layer_node_id
 
std::vector< double > thermal2d_lid_layer_top_m
 
std::vector< double > thermal2d_lid_layer_bottom_m
 
std::vector< double > thermal2d_lid_layer_area_m2
 
std::vector< double > thermal2d_lid_layer_temperature
 
std::vector< double > thermal2d_lid_layer_energy
 
std::vector< double > thermal2d_lid_layer_capacity
 
std::vector< double > thermal2d_lid_layer_ground_contact_j
 
std::vector< double > surface_edge_flux
 Normal integrated edge flux m3/s, [cell*surface_edge_stride+edge].
 
std::vector< double > surface_vert_head
 Reconstructed head at vertices (m) — SOLVER field (dry-cell head = bed)
 
std::vector< double > surface_vert_depth
 SIGNED vertex depth η_v − z_v (m) — wet-masked, wetted-contact-gated render reconstruction; > 0 where water reaches the vertex, 0 = no-data sentinel (older engines also emitted negatives on the dry side of partially wet cells — readers stay negative-tolerant)
 
std::vector< double > surface_face_vx
 Cell-centred velocity X (m/s), per face.
 
std::vector< double > surface_face_vy
 Cell-centred velocity Y (m/s), per face.
 
std::vector< double > surface_continuity_err
 Per-cell continuity residual (m³/s), per face.
 
std::vector< double > surface_stat_max_depth
 Max overland depth ψ_o (m), per face.
 
std::vector< double > surface_stat_max_velocity
 Max cell speed |v| (m/s), per face.
 
std::vector< double > surface_stat_max_cont_err
 Max |continuity residual| (m³/s), per face.
 
std::vector< double > gw2d_infil_capacity
 Aquifer top-interface receiving capacity (m s-1)
 
std::vector< double > gw2d_infil_remaining
 Remaining receiving allowance after pending receipts (m3)
 
std::vector< double > gw2d_infil_refresh
 Capacity refresh time since simulation start (s)
 
std::vector< double > gw2d_infil_pending
 Reserved surface water pending aquifer firing (m3)
 
std::vector< double > gw2d_reject
 Rejected top-interface delivery returned to surface (m3 s-1)
 
std::vector< double > gw2d_reject_cum
 Cumulative rejected top-interface delivery (m3)
 
std::vector< double > gw2d_dunne_cum
 Cumulative physical saturation excess (m3)
 
std::vector< double > gw2d_et_pending
 
std::vector< double > gw2d_et_potential_cum
 
std::vector< double > gw2d_et_surface_cum
 
std::vector< double > gw2d_et_soil_cum
 
std::vector< double > gw2d_et_unused_cum
 
std::vector< double > gw2d_et_surface
 
std::vector< double > gw2d_et_potential
 
std::vector< double > gw2d_et_stress
 
std::vector< double > gw2d_et_refresh
 
std::vector< double > thermal2d_bed_initial_energy
 Initial local-storage bed sensible energy, constant [face] over time.
 
std::vector< double > thermal2d_bed_species_initial_amount
 
int gw2d_transport_layers = 0
 
int gw2d_boundary_count = 0
 
std::vector< double > gw2d_layer_mass
 
std::vector< double > gw2d_layer_concentration
 
std::vector< double > gw2d_boundary_water
 
std::vector< double > gw2d_boundary_species
 
std::vector< int > gw2d_boundary_cell_edge
 
std::vector< double > gw2d_transport_ledger
 

Detailed Description

Complete simulation state snapshot at one output time step.

Created by the main simulation thread when output is due, then posted to the IOThread write queue. Plugins receive a const reference to this during IOutputPlugin::update().

Member Data Documentation

◆ flow_units

const char* openswmm::SimulationSnapshot::flow_units = nullptr

Flow unit string (e.g., "CFS", "LPS").

◆ flow_units_code

int openswmm::SimulationSnapshot::flow_units_code = 0

Flow units code (FlowUnits enum value: 0=CFS, 3=CMS, etc.).

◆ gage_count

int openswmm::SimulationSnapshot::gage_count = 0

Number of rain gages.

◆ gage_ids

const std::vector<std::string>* openswmm::SimulationSnapshot::gage_ids = nullptr

Gage IDs in index order.

◆ gages

GageSnapshot openswmm::SimulationSnapshot::gages

Gage state.

◆ gw2d_active

bool openswmm::SimulationSnapshot::gw2d_active = false

G-O: the two-zone [2D_AQUIFER] kernel's per-cell state, SI, one value per face (surface_tri_count), empty when no aquifer resolved. Rates are the cell's LAST firing (held between firings, like the surface's held infiltration rate).

◆ gw2d_bed_elev

std::vector<double> openswmm::SimulationSnapshot::gw2d_bed_elev

Static per-cell descriptors (filled every snapshot; the writer stores them once): aquifer bottom elevation (m) and the resolved closure (SWMM_GW2D_CLOSURE_*: 0 closed form, 1 enslaved, 2 sigma).

◆ gw2d_bed_exchange_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_bed_exchange_cum

Cumulative exchange per [2D_AQUIFER_NODE] bed (m³, + out of the aquifer into the pipe), in the authored bed order; gw2d_node_names is the parallel name list (null when there are no beds).

◆ gw2d_boundary_cell_edge

std::vector<int> openswmm::SimulationSnapshot::gw2d_boundary_cell_edge

◆ gw2d_boundary_count

int openswmm::SimulationSnapshot::gw2d_boundary_count = 0

◆ gw2d_boundary_species

std::vector<double> openswmm::SimulationSnapshot::gw2d_boundary_species

◆ gw2d_boundary_water

std::vector<double> openswmm::SimulationSnapshot::gw2d_boundary_water

◆ gw2d_closure

std::vector<int> openswmm::SimulationSnapshot::gw2d_closure

◆ gw2d_deep

std::vector<double> openswmm::SimulationSnapshot::gw2d_deep

deep loss (m/s)

◆ gw2d_dunne

std::vector<double> openswmm::SimulationSnapshot::gw2d_dunne

saturation excess returned to the surface (m³/s)

◆ gw2d_dunne_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_dunne_cum

Cumulative physical saturation excess (m3)

◆ gw2d_et

std::vector<double> openswmm::SimulationSnapshot::gw2d_et

subsurface ET (m/s, ≥ 0 out)

◆ gw2d_et_pending

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_pending

◆ gw2d_et_potential

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_potential

◆ gw2d_et_potential_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_potential_cum

◆ gw2d_et_refresh

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_refresh

◆ gw2d_et_soil_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_soil_cum

◆ gw2d_et_stress

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_stress

◆ gw2d_et_surface

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_surface

◆ gw2d_et_surface_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_surface_cum

◆ gw2d_et_unused_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_et_unused_cum

◆ gw2d_hg

std::vector<double> openswmm::SimulationSnapshot::gw2d_hg

saturated thickness (m)

◆ gw2d_hu

std::vector<double> openswmm::SimulationSnapshot::gw2d_hu

closure A bulk unsaturated storage (m of water); 0 under closure B

◆ gw2d_infil_capacity

std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_capacity

Aquifer top-interface receiving capacity (m s-1)

◆ gw2d_infil_in

std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_in

infiltration delivered from the surface (m/s)

◆ gw2d_infil_pending

std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_pending

Reserved surface water pending aquifer firing (m3)

◆ gw2d_infil_refresh

std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_refresh

Capacity refresh time since simulation start (s)

◆ gw2d_infil_remaining

std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_remaining

Remaining receiving allowance after pending receipts (m3)

◆ gw2d_lateral

std::vector<double> openswmm::SimulationSnapshot::gw2d_lateral

net lateral Darcy into the cell (m³/s)

◆ gw2d_layer_concentration

std::vector<double> openswmm::SimulationSnapshot::gw2d_layer_concentration

◆ gw2d_layer_mass

std::vector<double> openswmm::SimulationSnapshot::gw2d_layer_mass

◆ gw2d_ledger

std::vector<double> openswmm::SimulationSnapshot::gw2d_ledger

Domain ledger (m³, cumulative): recharge, lateral, deep, node, dunne, caprise, et, infil_in, init_storage, storage (live, incl. accumulators), link (G-X3, conduit seepage in), continuity residual (ledgered) — the historical order above, then named source injection and extraction.

◆ gw2d_link_seepage

std::vector<double> openswmm::SimulationSnapshot::gw2d_link_seepage

G-X3: conduit seepage delivered in (m³/s)

◆ gw2d_m_layers

int openswmm::SimulationSnapshot::gw2d_m_layers = 0

◆ gw2d_node_exchange

std::vector<double> openswmm::SimulationSnapshot::gw2d_node_exchange

exchange with a 1D node (m³/s), + out of the aquifer

◆ gw2d_node_names

const std::vector<std::string>* openswmm::SimulationSnapshot::gw2d_node_names = nullptr

◆ gw2d_recharge

std::vector<double> openswmm::SimulationSnapshot::gw2d_recharge

q0 (m/s), + down, − capillary rise

◆ gw2d_reject

std::vector<double> openswmm::SimulationSnapshot::gw2d_reject

Rejected top-interface delivery returned to surface (m3 s-1)

◆ gw2d_reject_cum

std::vector<double> openswmm::SimulationSnapshot::gw2d_reject_cum

Cumulative rejected top-interface delivery (m3)

◆ gw2d_sat_conc

std::vector<double> openswmm::SimulationSnapshot::gw2d_sat_conc

T7.5: the aquifer's transported tuple, [s * n_cells + c], as CONCENTRATIONS (mass / water volume of the zone) — the quantity a reader plots, derived here so no consumer has to know how the kernel stores it. A zone with no water reports 0 rather than dividing.

◆ gw2d_species_count

int openswmm::SimulationSnapshot::gw2d_species_count = 0

◆ gw2d_species_ledger

std::vector<double> openswmm::SimulationSnapshot::gw2d_species_ledger

[s * kTerms + t] cumulative species ledger; the term order is the terms attribute the writer emits.

◆ gw2d_species_names

const std::vector<std::string>* openswmm::SimulationSnapshot::gw2d_species_names = nullptr

◆ gw2d_table_elev

std::vector<double> openswmm::SimulationSnapshot::gw2d_table_elev

water-table elevation (m) = bed + hg

◆ gw2d_theta_sigma

std::vector<double> openswmm::SimulationSnapshot::gw2d_theta_sigma

Closure B water content per σ layer, [layer * surface_tri_count + face], layer 0 at the ground surface; gw2d_m_layers layers. A cell not under closure B carries 0 in every layer (mask with gw2d_closure).

◆ gw2d_transport_layers

int openswmm::SimulationSnapshot::gw2d_transport_layers = 0

◆ gw2d_transport_ledger

std::vector<double> openswmm::SimulationSnapshot::gw2d_transport_ledger

◆ gw2d_unsat_conc

std::vector<double> openswmm::SimulationSnapshot::gw2d_unsat_conc

◆ has_subcatchments

bool openswmm::SimulationSnapshot::has_subcatchments = true

Whether the model has any subcatchments.

Legacy assigns SYS_TEMPERATURE and SYS_PET — and applies the SI temperature conversion — at the end of output_saveSubcatchResults, which is called only behind if (Nobjects[SUBCATCH] > 0) (output.c:489-490). With no subcatchments both stay at the zero-initialised value of SysResults and are never converted, so a raw 0 is reported whatever the unit system. Carried on the snapshot because the display-unit conversion is where that has to be honoured: the degF->degC conversion is AFFINE, so converting a zero yields -17.78 degC rather than zero.

◆ length_units

const char* openswmm::SimulationSnapshot::length_units = nullptr

Length unit string (e.g., "FEET", "METERS").

◆ link_count

int openswmm::SimulationSnapshot::link_count = 0

Number of links.

◆ link_ids

const std::vector<std::string>* openswmm::SimulationSnapshot::link_ids = nullptr

Link IDs in index order.

◆ link_quality

std::vector<double> openswmm::SimulationSnapshot::link_quality

Link pollutant concentrations.

Layout: [link_index * pollut_count + pollut_index]

◆ links

LinkSnapshot openswmm::SimulationSnapshot::links

Link state.

◆ node_count

int openswmm::SimulationSnapshot::node_count = 0

Number of nodes.

◆ node_ids

const std::vector<std::string>* openswmm::SimulationSnapshot::node_ids = nullptr

Node IDs in index order. Pointer to engine-managed strings.

◆ node_quality

std::vector<double> openswmm::SimulationSnapshot::node_quality

Node pollutant concentrations.

Layout: [node_index * pollut_count + pollut_index] Size: node_count * pollut_count doubles.

◆ nodes

NodeSnapshot openswmm::SimulationSnapshot::nodes

Node state.

◆ output_step_index

int openswmm::SimulationSnapshot::output_step_index = 0

Sequential output step index (0-based).

◆ pollut_count

int openswmm::SimulationSnapshot::pollut_count = 0

Number of pollutants.

◆ pollut_names

const std::vector<std::string>* openswmm::SimulationSnapshot::pollut_names = nullptr

Pollutant names in index order.

◆ sim_time

double openswmm::SimulationSnapshot::sim_time = 0.0

Simulation date/time (SWMM DateTime: days since 12/31/1899).

◆ subcatch

SubcatchSnapshot openswmm::SimulationSnapshot::subcatch

Subcatchment state.

◆ subcatch_count

int openswmm::SimulationSnapshot::subcatch_count = 0

Number of subcatchments.

◆ subcatch_ids

const std::vector<std::string>* openswmm::SimulationSnapshot::subcatch_ids = nullptr

Subcatchment IDs in index order.

◆ subcatch_quality

std::vector<double> openswmm::SimulationSnapshot::subcatch_quality

Subcatchment pollutant loadings.

◆ surface_buildup

std::vector<double> openswmm::SimulationSnapshot::surface_buildup

S7: buildup on the cells' land-use surfaces, per surface species (the pollutant and MSX rows only — the first surface_buildup_count rows of surface_species_names), user mass per acre (US) or hectare (SI), summed over the cell's land uses. Layout [species * surface_tri_count + face]. Empty when no [2D_COVERAGES] row resolved.

◆ surface_buildup_count

int openswmm::SimulationSnapshot::surface_buildup_count = 0

◆ surface_cell_nv

std::vector<uint8_t> openswmm::SimulationSnapshot::surface_cell_nv

Vertices per cell (3 or 4), sized surface_tri_count. Empty when the mesh is all triangles (consumers may treat empty as "all 3").

◆ surface_continuity_err

std::vector<double> openswmm::SimulationSnapshot::surface_continuity_err

Per-cell continuity residual (m³/s), per face.

◆ surface_coupling_flux

std::vector<double> openswmm::SimulationSnapshot::surface_coupling_flux

Coupling flux to SWMM node (m/s, + = into 2D), per face.

◆ surface_depth

std::vector<double> openswmm::SimulationSnapshot::surface_depth

Overland flow depth ψ_o (m), per face.

◆ surface_edge_flux

std::vector<double> openswmm::SimulationSnapshot::surface_edge_flux

Normal integrated edge flux m3/s, [cell*surface_edge_stride+edge].

◆ surface_edge_stride

int openswmm::SimulationSnapshot::surface_edge_stride = 3

Edge slots per cell row in surface_edge_flux (3 | 4)

◆ surface_face_vx

std::vector<double> openswmm::SimulationSnapshot::surface_face_vx

Cell-centred velocity X (m/s), per face.

◆ surface_face_vy

std::vector<double> openswmm::SimulationSnapshot::surface_face_vy

Cell-centred velocity Y (m/s), per face.

◆ surface_grad_hx

std::vector<double> openswmm::SimulationSnapshot::surface_grad_hx

Unlimited head gradient ∂h/∂x, per face.

◆ surface_grad_hx_lim

std::vector<double> openswmm::SimulationSnapshot::surface_grad_hx_lim

Slope-limited head gradient ∂h/∂x, per face.

◆ surface_grad_hy

std::vector<double> openswmm::SimulationSnapshot::surface_grad_hy

Unlimited head gradient ∂h/∂y, per face.

◆ surface_grad_hy_lim

std::vector<double> openswmm::SimulationSnapshot::surface_grad_hy_lim

Slope-limited head gradient ∂h/∂y, per face.

◆ surface_head

std::vector<double> openswmm::SimulationSnapshot::surface_head

Total head h_o = z_s + ψ_o (m), per face.

◆ surface_infil_cum

std::vector<double> openswmm::SimulationSnapshot::surface_infil_cum

Cumulative infiltrated depth (m), per face.

◆ surface_infil_rate

std::vector<double> openswmm::SimulationSnapshot::surface_infil_rate

Held infiltration loss rate (m/s, ≥ 0), per face — all zero when no [2D_INFILTRATION*] model resolved.

◆ surface_net_source

std::vector<double> openswmm::SimulationSnapshot::surface_net_source

Net source/sink (m/s), per face.

◆ surface_quad_count

int openswmm::SimulationSnapshot::surface_quad_count = 0

Number of quadrilateral cells (0 = all triangles)

◆ surface_rain_cum

std::vector<double> openswmm::SimulationSnapshot::surface_rain_cum

Cumulative rainfall volume (m³), per face.

◆ surface_rainfall

std::vector<double> openswmm::SimulationSnapshot::surface_rainfall

Rainfall intensity (m/s), per face.

◆ surface_snow

MeshSnowSnapshot openswmm::SimulationSnapshot::surface_snow

Accepted snow state/ledgers, SI; own completed clock.

◆ surface_species_conc

std::vector<double> openswmm::SimulationSnapshot::surface_species_conc

2D surface species concentration (overland transport S1/S2).

Layout: [species * surface_tri_count + face], species-major to match the engine's own cell store. surface_species_count rows in the 1D row order (pollutants, MSX, age, temperature — see surface_species_names). A dry cell reports 0 (its mass is held, not divided). Empty when the model carries no 2D transport.

◆ surface_species_count

int openswmm::SimulationSnapshot::surface_species_count = 0

◆ surface_species_names

const std::vector<std::string>* openswmm::SimulationSnapshot::surface_species_names = nullptr

S4: the 2D row names in row order (pollutant ids, MSX ids, __WATER_AGE__, __TEMPERATURE__) — surface_species_count entries. Null before S4 / when 2D transport is off; consumers fall back to pollut_names.

◆ surface_species_units

const std::vector<std::string>* openswmm::SimulationSnapshot::surface_species_units = nullptr

S4b: per-row unit labels in the same order as surface_species_names (pollutant units "MG/L" | "UG/L" | "#/L", the MSX species' declared units, "hours" for __WATER_AGE__, "degC" for __TEMPERATURE__). Null when 2D transport is off.

◆ surface_stat_max_cont_err

std::vector<double> openswmm::SimulationSnapshot::surface_stat_max_cont_err

Max |continuity residual| (m³/s), per face.

◆ surface_stat_max_depth

std::vector<double> openswmm::SimulationSnapshot::surface_stat_max_depth

Max overland depth ψ_o (m), per face.

◆ surface_stat_max_velocity

std::vector<double> openswmm::SimulationSnapshot::surface_stat_max_velocity

Max cell speed |v| (m/s), per face.

◆ surface_tri_count

int openswmm::SimulationSnapshot::surface_tri_count = 0

Number of cells (faces): triangles + quads.

◆ surface_vert_count

int openswmm::SimulationSnapshot::surface_vert_count = 0

Number of vertices (nodes)

◆ surface_vert_depth

std::vector<double> openswmm::SimulationSnapshot::surface_vert_depth

SIGNED vertex depth η_v − z_v (m) — wet-masked, wetted-contact-gated render reconstruction; > 0 where water reaches the vertex, 0 = no-data sentinel (older engines also emitted negatives on the dry side of partially wet cells — readers stay negative-tolerant)

◆ surface_vert_head

std::vector<double> openswmm::SimulationSnapshot::surface_vert_head

Reconstructed head at vertices (m) — SOLVER field (dry-cell head = bed)

◆ sys_dw_inflow

double openswmm::SimulationSnapshot::sys_dw_inflow = 0.0

Total dry weather inflow.

◆ sys_evap

double openswmm::SimulationSnapshot::sys_evap = 0.0

Total evaporation loss.

◆ sys_ext_inflow

double openswmm::SimulationSnapshot::sys_ext_inflow = 0.0

Total external inflow.

◆ sys_flooding

double openswmm::SimulationSnapshot::sys_flooding = 0.0

Total flooding.

◆ sys_gw_inflow

double openswmm::SimulationSnapshot::sys_gw_inflow = 0.0

Total groundwater inflow.

◆ sys_ii_inflow

double openswmm::SimulationSnapshot::sys_ii_inflow = 0.0

Total RDII inflow.

◆ sys_infil

double openswmm::SimulationSnapshot::sys_infil = 0.0

Total infiltration loss.

◆ sys_outflow

double openswmm::SimulationSnapshot::sys_outflow = 0.0

Total outflow.

◆ sys_pet

double openswmm::SimulationSnapshot::sys_pet = 0.0

Potential evapotranspiration.

◆ sys_rainfall

double openswmm::SimulationSnapshot::sys_rainfall = 0.0

Average rainfall over all gages.

◆ sys_runoff

double openswmm::SimulationSnapshot::sys_runoff = 0.0

Total runoff flow.

◆ sys_snow_depth

double openswmm::SimulationSnapshot::sys_snow_depth = 0.0

Total snow depth.

◆ sys_storage

double openswmm::SimulationSnapshot::sys_storage = 0.0

Total storage volume.

◆ sys_temperature

double openswmm::SimulationSnapshot::sys_temperature = 0.0

Air temperature.

◆ thermal2d_active

bool openswmm::SimulationSnapshot::thermal2d_active = false

◆ thermal2d_bed_age_generation

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_age_generation

Cumulative local bed age generation in hour m3.

◆ thermal2d_bed_capacity

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_capacity

J K-1, face

◆ thermal2d_bed_energy

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_energy

J, face.

◆ thermal2d_bed_initial_energy

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_initial_energy

Initial local-storage bed sensible energy, constant [face] over time.

◆ thermal2d_bed_pore_volume

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_pore_volume

◆ thermal2d_bed_species_concentration

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_species_concentration

◆ thermal2d_bed_species_count

int openswmm::SimulationSnapshot::thermal2d_bed_species_count = 0

Local finite-bed porewater species outputs, species-major [species, face]. Temperature rows are omitted; age is expressed in hours. A cell without a local bed pore volume is NaN in each field.

◆ thermal2d_bed_species_exchange

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_species_exchange

Cumulative exchange amount, positive from surface water into the bed, in the corresponding reported species unit multiplied by m3.

◆ thermal2d_bed_species_initial_amount

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_species_initial_amount

Initial finite bed-porewater amount, species-major [species, face]; age is converted from seconds to hours, matching the reported species.

◆ thermal2d_bed_species_names

std::vector<std::string> openswmm::SimulationSnapshot::thermal2d_bed_species_names

◆ thermal2d_bed_species_units

std::vector<std::string> openswmm::SimulationSnapshot::thermal2d_bed_species_units

◆ thermal2d_bed_temperature

std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_temperature

degC, face

◆ thermal2d_evaporation_m3

std::vector<double> openswmm::SimulationSnapshot::thermal2d_evaporation_m3

cumulative accepted evaporation, face

◆ thermal2d_ground_budget

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_budget

[face, term]: initial, advective, source, surface, deep, latent, lateral, water contact, channel contact, residual, pending lateral, LID contact.

◆ thermal2d_ground_budget_terms

int openswmm::SimulationSnapshot::thermal2d_ground_budget_terms = 12

◆ thermal2d_ground_capacity

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_capacity

J K-1, face

◆ thermal2d_ground_energy

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_energy

J, face.

◆ thermal2d_ground_layer_capacity

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_capacity

◆ thermal2d_ground_layer_center_m

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_center_m

[layer, face], fixed-grid depth positive downward.

◆ thermal2d_ground_layer_energy

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_energy

◆ thermal2d_ground_layer_temperature

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_temperature

◆ thermal2d_ground_temperature

std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_temperature

capacity-weighted degC, face

◆ thermal2d_layer_count

int openswmm::SimulationSnapshot::thermal2d_layer_count = 0

◆ thermal2d_lid_layer_area_m2

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_area_m2

◆ thermal2d_lid_layer_authored_index

std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_authored_index

◆ thermal2d_lid_layer_bottom_m

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_bottom_m

◆ thermal2d_lid_layer_capacity

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_capacity

◆ thermal2d_lid_layer_control_index

std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_control_index

◆ thermal2d_lid_layer_count

int openswmm::SimulationSnapshot::thermal2d_lid_layer_count = 0

Mesh-connected Richards LID thermal stores, in stable [lid_layer] order. Static arrays describe the node/face/physical LID cell mapping; time-varying arrays carry accepted canonical energy and capacity.

◆ thermal2d_lid_layer_energy

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_energy

◆ thermal2d_lid_layer_face_index

std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_face_index

◆ thermal2d_lid_layer_ground_contact_j

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_ground_contact_j

◆ thermal2d_lid_layer_node_id

std::vector<std::string> openswmm::SimulationSnapshot::thermal2d_lid_layer_node_id

◆ thermal2d_lid_layer_node_index

std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_node_index

◆ thermal2d_lid_layer_physical_index

std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_physical_index

◆ thermal2d_lid_layer_temperature

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_temperature

◆ thermal2d_lid_layer_top_m

std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_top_m

◆ thermal2d_surface_budget

std::vector<double> openswmm::SimulationSnapshot::thermal2d_surface_budget

[face, term]: radiation, sensible, latent, deep boundary, water->bed, accepted non-advective water increment. All terms are cumulative J.

◆ thermal2d_surface_budget_terms

int openswmm::SimulationSnapshot::thermal2d_surface_budget_terms = 6

◆ thermal2d_water_temperature

std::vector<double> openswmm::SimulationSnapshot::thermal2d_water_temperature

degC, face

◆ wall_time_unix

std::int64_t openswmm::SimulationSnapshot::wall_time_unix = 0

Wall-clock Unix timestamp when snapshot was taken.


The documentation for this struct was generated from the following file: