![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
Complete simulation state snapshot at one output time step. More...
#include <SimulationSnapshot.hpp>
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 |
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().
| const char* openswmm::SimulationSnapshot::flow_units = nullptr |
Flow unit string (e.g., "CFS", "LPS").
| int openswmm::SimulationSnapshot::flow_units_code = 0 |
Flow units code (FlowUnits enum value: 0=CFS, 3=CMS, etc.).
| int openswmm::SimulationSnapshot::gage_count = 0 |
Number of rain gages.
| const std::vector<std::string>* openswmm::SimulationSnapshot::gage_ids = nullptr |
Gage IDs in index order.
| GageSnapshot openswmm::SimulationSnapshot::gages |
Gage state.
| 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).
| 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).
| 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).
| std::vector<int> openswmm::SimulationSnapshot::gw2d_boundary_cell_edge |
| int openswmm::SimulationSnapshot::gw2d_boundary_count = 0 |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_boundary_species |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_boundary_water |
| std::vector<int> openswmm::SimulationSnapshot::gw2d_closure |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_deep |
deep loss (m/s)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_dunne |
saturation excess returned to the surface (m³/s)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_dunne_cum |
Cumulative physical saturation excess (m3)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et |
subsurface ET (m/s, ≥ 0 out)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_pending |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_potential |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_potential_cum |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_refresh |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_soil_cum |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_stress |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_surface |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_surface_cum |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_et_unused_cum |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_hg |
saturated thickness (m)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_hu |
closure A bulk unsaturated storage (m of water); 0 under closure B
| std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_capacity |
Aquifer top-interface receiving capacity (m s-1)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_in |
infiltration delivered from the surface (m/s)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_pending |
Reserved surface water pending aquifer firing (m3)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_refresh |
Capacity refresh time since simulation start (s)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_infil_remaining |
Remaining receiving allowance after pending receipts (m3)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_lateral |
net lateral Darcy into the cell (m³/s)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_layer_concentration |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_layer_mass |
| 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.
| std::vector<double> openswmm::SimulationSnapshot::gw2d_link_seepage |
G-X3: conduit seepage delivered in (m³/s)
| int openswmm::SimulationSnapshot::gw2d_m_layers = 0 |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_node_exchange |
exchange with a 1D node (m³/s), + out of the aquifer
| const std::vector<std::string>* openswmm::SimulationSnapshot::gw2d_node_names = nullptr |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_recharge |
q0 (m/s), + down, − capillary rise
| std::vector<double> openswmm::SimulationSnapshot::gw2d_reject |
Rejected top-interface delivery returned to surface (m3 s-1)
| std::vector<double> openswmm::SimulationSnapshot::gw2d_reject_cum |
Cumulative rejected top-interface delivery (m3)
| 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.
| int openswmm::SimulationSnapshot::gw2d_species_count = 0 |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_species_ledger |
[s * kTerms + t] cumulative species ledger; the term order is the terms attribute the writer emits.
| const std::vector<std::string>* openswmm::SimulationSnapshot::gw2d_species_names = nullptr |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_table_elev |
water-table elevation (m) = bed + hg
| 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).
| int openswmm::SimulationSnapshot::gw2d_transport_layers = 0 |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_transport_ledger |
| std::vector<double> openswmm::SimulationSnapshot::gw2d_unsat_conc |
| 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.
| const char* openswmm::SimulationSnapshot::length_units = nullptr |
Length unit string (e.g., "FEET", "METERS").
| int openswmm::SimulationSnapshot::link_count = 0 |
Number of links.
| const std::vector<std::string>* openswmm::SimulationSnapshot::link_ids = nullptr |
Link IDs in index order.
| std::vector<double> openswmm::SimulationSnapshot::link_quality |
Link pollutant concentrations.
Layout: [link_index * pollut_count + pollut_index]
| LinkSnapshot openswmm::SimulationSnapshot::links |
Link state.
| int openswmm::SimulationSnapshot::node_count = 0 |
Number of nodes.
| const std::vector<std::string>* openswmm::SimulationSnapshot::node_ids = nullptr |
Node IDs in index order. Pointer to engine-managed strings.
| std::vector<double> openswmm::SimulationSnapshot::node_quality |
Node pollutant concentrations.
Layout: [node_index * pollut_count + pollut_index] Size: node_count * pollut_count doubles.
| NodeSnapshot openswmm::SimulationSnapshot::nodes |
Node state.
| int openswmm::SimulationSnapshot::output_step_index = 0 |
Sequential output step index (0-based).
| int openswmm::SimulationSnapshot::pollut_count = 0 |
Number of pollutants.
| const std::vector<std::string>* openswmm::SimulationSnapshot::pollut_names = nullptr |
Pollutant names in index order.
| double openswmm::SimulationSnapshot::sim_time = 0.0 |
Simulation date/time (SWMM DateTime: days since 12/31/1899).
| SubcatchSnapshot openswmm::SimulationSnapshot::subcatch |
Subcatchment state.
| int openswmm::SimulationSnapshot::subcatch_count = 0 |
Number of subcatchments.
| const std::vector<std::string>* openswmm::SimulationSnapshot::subcatch_ids = nullptr |
Subcatchment IDs in index order.
| std::vector<double> openswmm::SimulationSnapshot::subcatch_quality |
Subcatchment pollutant loadings.
| 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.
| int openswmm::SimulationSnapshot::surface_buildup_count = 0 |
| 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").
| std::vector<double> openswmm::SimulationSnapshot::surface_continuity_err |
Per-cell continuity residual (m³/s), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_coupling_flux |
Coupling flux to SWMM node (m/s, + = into 2D), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_depth |
Overland flow depth ψ_o (m), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_edge_flux |
Normal integrated edge flux m3/s, [cell*surface_edge_stride+edge].
| int openswmm::SimulationSnapshot::surface_edge_stride = 3 |
Edge slots per cell row in surface_edge_flux (3 | 4)
| std::vector<double> openswmm::SimulationSnapshot::surface_face_vx |
Cell-centred velocity X (m/s), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_face_vy |
Cell-centred velocity Y (m/s), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_grad_hx |
Unlimited head gradient ∂h/∂x, per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_grad_hx_lim |
Slope-limited head gradient ∂h/∂x, per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_grad_hy |
Unlimited head gradient ∂h/∂y, per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_grad_hy_lim |
Slope-limited head gradient ∂h/∂y, per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_head |
Total head h_o = z_s + ψ_o (m), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_infil_cum |
Cumulative infiltrated depth (m), per face.
| 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.
| std::vector<double> openswmm::SimulationSnapshot::surface_net_source |
Net source/sink (m/s), per face.
| int openswmm::SimulationSnapshot::surface_quad_count = 0 |
Number of quadrilateral cells (0 = all triangles)
| std::vector<double> openswmm::SimulationSnapshot::surface_rain_cum |
Cumulative rainfall volume (m³), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_rainfall |
Rainfall intensity (m/s), per face.
| MeshSnowSnapshot openswmm::SimulationSnapshot::surface_snow |
Accepted snow state/ledgers, SI; own completed clock.
| 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.
| int openswmm::SimulationSnapshot::surface_species_count = 0 |
| 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.
| 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.
| std::vector<double> openswmm::SimulationSnapshot::surface_stat_max_cont_err |
Max |continuity residual| (m³/s), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_stat_max_depth |
Max overland depth ψ_o (m), per face.
| std::vector<double> openswmm::SimulationSnapshot::surface_stat_max_velocity |
Max cell speed |v| (m/s), per face.
| int openswmm::SimulationSnapshot::surface_tri_count = 0 |
Number of cells (faces): triangles + quads.
| int openswmm::SimulationSnapshot::surface_vert_count = 0 |
Number of vertices (nodes)
| 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)
| std::vector<double> openswmm::SimulationSnapshot::surface_vert_head |
Reconstructed head at vertices (m) — SOLVER field (dry-cell head = bed)
| double openswmm::SimulationSnapshot::sys_dw_inflow = 0.0 |
Total dry weather inflow.
| double openswmm::SimulationSnapshot::sys_evap = 0.0 |
Total evaporation loss.
| double openswmm::SimulationSnapshot::sys_ext_inflow = 0.0 |
Total external inflow.
| double openswmm::SimulationSnapshot::sys_flooding = 0.0 |
Total flooding.
| double openswmm::SimulationSnapshot::sys_gw_inflow = 0.0 |
Total groundwater inflow.
| double openswmm::SimulationSnapshot::sys_ii_inflow = 0.0 |
Total RDII inflow.
| double openswmm::SimulationSnapshot::sys_infil = 0.0 |
Total infiltration loss.
| double openswmm::SimulationSnapshot::sys_outflow = 0.0 |
Total outflow.
| double openswmm::SimulationSnapshot::sys_pet = 0.0 |
Potential evapotranspiration.
| double openswmm::SimulationSnapshot::sys_rainfall = 0.0 |
Average rainfall over all gages.
| double openswmm::SimulationSnapshot::sys_runoff = 0.0 |
Total runoff flow.
| double openswmm::SimulationSnapshot::sys_snow_depth = 0.0 |
Total snow depth.
| double openswmm::SimulationSnapshot::sys_storage = 0.0 |
Total storage volume.
| double openswmm::SimulationSnapshot::sys_temperature = 0.0 |
Air temperature.
| bool openswmm::SimulationSnapshot::thermal2d_active = false |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_age_generation |
Cumulative local bed age generation in hour m3.
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_capacity |
J K-1, face
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_energy |
J, face.
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_initial_energy |
Initial local-storage bed sensible energy, constant [face] over time.
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_pore_volume |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_species_concentration |
| 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.
| 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.
| 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.
| std::vector<std::string> openswmm::SimulationSnapshot::thermal2d_bed_species_names |
| std::vector<std::string> openswmm::SimulationSnapshot::thermal2d_bed_species_units |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_bed_temperature |
degC, face
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_evaporation_m3 |
cumulative accepted evaporation, face
| 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.
| int openswmm::SimulationSnapshot::thermal2d_ground_budget_terms = 12 |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_capacity |
J K-1, face
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_energy |
J, face.
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_capacity |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_center_m |
[layer, face], fixed-grid depth positive downward.
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_energy |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_layer_temperature |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_ground_temperature |
capacity-weighted degC, face
| int openswmm::SimulationSnapshot::thermal2d_layer_count = 0 |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_area_m2 |
| std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_authored_index |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_bottom_m |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_capacity |
| std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_control_index |
| 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.
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_energy |
| std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_face_index |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_ground_contact_j |
| std::vector<std::string> openswmm::SimulationSnapshot::thermal2d_lid_layer_node_id |
| std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_node_index |
| std::vector<int> openswmm::SimulationSnapshot::thermal2d_lid_layer_physical_index |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_temperature |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_lid_layer_top_m |
| 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.
| int openswmm::SimulationSnapshot::thermal2d_surface_budget_terms = 6 |
| std::vector<double> openswmm::SimulationSnapshot::thermal2d_water_temperature |
degC, face
| std::int64_t openswmm::SimulationSnapshot::wall_time_unix = 0 |
Wall-clock Unix timestamp when snapshot was taken.