OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
SimulationContext.hpp
Go to the documentation of this file.
1
60#ifndef OPENSWMM_ENGINE_SIMULATION_CONTEXT_HPP
61#define OPENSWMM_ENGINE_SIMULATION_CONTEXT_HPP
62
63#include "../data/GageData.hpp"
64#include "../data/LinkData.hpp"
65#include "../data/NameIndex.hpp"
66#include "../data/NodeData.hpp"
67#include "../data/PollutantData.hpp"
68#include "../data/SubcatchData.hpp"
69#include "../data/TableData.hpp"
70#include "SimulationOptions.hpp"
71#include "SpatialFrame.hpp"
72#include "UserFlags.hpp"
73#include "../data/QualityData.hpp"
74#include "../data/InflowData.hpp"
75#include "../data/InfraData.hpp"
76#include "../data/HydrologyData.hpp"
77#include "../data/ForcingData.hpp"
78
79#include <algorithm>
80#include <cstdint>
81#include <string>
82#include <vector>
83
84namespace openswmm {
85
86// ============================================================================
87// Plugin specification (from [PLUGINS] section)
88// ============================================================================
89
99struct PluginSpec {
100 std::string path;
101 std::vector<std::string> init_args;
102};
103
104// ============================================================================
105// Engine state enumeration
106// ============================================================================
107
116enum class EngineState : int32_t {
117 CREATED = 0,
118 OPENED = 1,
119 INITIALIZED = 2,
120 RUNNING = 3,
121 PAUSED = 4,
122 ENDED = 5,
123 REPORTED = 6,
124 CLOSED = 7,
125 ERROR_STATE = 8,
126 BUILDING = 9
127};
128
129// ============================================================================
130// SimulationContext
131// ============================================================================
132
142
143 // =========================================================================
144 // Engine state
145 // =========================================================================
146
149
150 // =========================================================================
151 // Options & configuration
152 // =========================================================================
153
159
160 // =========================================================================
161 // Simulation clock
162 // =========================================================================
163
172 double current_time = 0.0;
173
181 double current_date = 0.0;
182
192
200
201 // =========================================================================
202 // Object data stores (Structure-of-Arrays)
203 // =========================================================================
204
210
216
222
228
234
240
241 // =========================================================================
242 // Name-to-index lookup (O(1))
243 // =========================================================================
244
250
256
262
268
274
280
281 // =========================================================================
282 // Quality data (landuse, buildup, washoff, treatment)
283 // =========================================================================
284
290
291 // =========================================================================
292 // Inflow data (external, DWF, RDII, patterns)
293 // =========================================================================
294
299
300 // =========================================================================
301 // Infrastructure data (transects, streets, inlets, controls)
302 // =========================================================================
303
309
310 // =========================================================================
311 // Hydrology data (snowpacks, aquifers, LID)
312 // =========================================================================
313
321
322 // =========================================================================
323 // Spatial data
324 // =========================================================================
325
331
332 // =========================================================================
333 // User-defined flags
334 // =========================================================================
335
342
343 // =========================================================================
344 // Runtime forcing data
345 // =========================================================================
346
356
357 // =========================================================================
358 // Plugin specifications (from [PLUGINS] section)
359 // =========================================================================
360
366 std::vector<PluginSpec> plugin_specs;
367
368 // =========================================================================
369 // Error / warning tracking
370 // =========================================================================
371
376 int error_code = 0;
377
383
387 std::string error_message;
388
389 // =========================================================================
390 // Mass balance accumulators (SoA — vectorisable batch updates)
391 // =========================================================================
392
402 struct MassBalance {
403 // Runoff totals
404 double runoff_rainfall = 0.0;
405 double runoff_evap = 0.0;
406 double runoff_infil = 0.0;
407 double runoff_runoff = 0.0;
408 double runoff_snowremov = 0.0;
409 double runoff_init_store = 0.0;
410 double runoff_final_store= 0.0;
411
412 // Routing totals
415 double routing_gw_inflow = 0.0;
416 double routing_rdii = 0.0;
417 double routing_external = 0.0;
418 double routing_flooding = 0.0;
419 double routing_outflow = 0.0;
420 double routing_evap_loss = 0.0;
421 double routing_seep_loss = 0.0;
424
425 // User-forced volumes (diagnostic — subset of routing_external)
427
428 // Per-step accumulators (reset each step for reporting)
429 double step_flooding = 0.0;
430 double step_outflow = 0.0;
431 double step_dw_inflow = 0.0;
432 double step_gw_inflow = 0.0;
433
434 // Quality mass balance (per-pollutant, in mass units)
435 std::vector<double> qual_init_buildup;
436 std::vector<double> qual_final_buildup;
437 std::vector<double> qual_surface_buildup;
438 std::vector<double> qual_wet_deposition;
439 std::vector<double> qual_sweeping;
440 std::vector<double> qual_bmp_removal;
441 std::vector<double> qual_infil_loss;
442 std::vector<double> qual_runoff_load;
443 std::vector<double> qual_routing_wet;
444 std::vector<double> qual_routing_outflow;
445 std::vector<double> qual_routing_flood;
446 std::vector<double> qual_routing_init;
447 std::vector<double> qual_routing_final;
448 std::vector<double> qual_routing_reacted;
449
451 auto np = static_cast<std::size_t>(n_pollutants);
452 qual_init_buildup.assign(np, 0.0);
453 qual_final_buildup.assign(np, 0.0);
454 qual_surface_buildup.assign(np, 0.0);
455 qual_wet_deposition.assign(np, 0.0);
456 qual_sweeping.assign(np, 0.0);
457 qual_bmp_removal.assign(np, 0.0);
458 qual_infil_loss.assign(np, 0.0);
459 qual_runoff_load.assign(np, 0.0);
460 qual_routing_wet.assign(np, 0.0);
461 qual_routing_outflow.assign(np, 0.0);
462 qual_routing_flood.assign(np, 0.0);
463 qual_routing_init.assign(np, 0.0);
464 qual_routing_final.assign(np, 0.0);
465 qual_routing_reacted.assign(np, 0.0);
466 }
467
468 void reset() {
469 // Save quality vectors, reset scalars, restore vectors
470 auto qi = std::move(qual_init_buildup);
471 auto qf = std::move(qual_final_buildup);
472 auto qsb = std::move(qual_surface_buildup);
473 auto qwd = std::move(qual_wet_deposition);
474 auto qsw = std::move(qual_sweeping);
475 auto qbmp = std::move(qual_bmp_removal);
476 auto qil = std::move(qual_infil_loss);
477 auto qrl = std::move(qual_runoff_load);
478 auto qrw = std::move(qual_routing_wet);
479 auto qro = std::move(qual_routing_outflow);
480 auto qrf = std::move(qual_routing_flood);
481 auto qri = std::move(qual_routing_init);
482 auto qrfi = std::move(qual_routing_final);
483 auto qrr = std::move(qual_routing_reacted);
484 *this = MassBalance{};
485 qual_init_buildup = std::move(qi);
486 qual_final_buildup = std::move(qf);
487 qual_surface_buildup = std::move(qsb);
488 qual_wet_deposition = std::move(qwd);
489 qual_sweeping = std::move(qsw);
490 qual_bmp_removal = std::move(qbmp);
491 qual_infil_loss = std::move(qil);
492 qual_runoff_load = std::move(qrl);
493 qual_routing_wet = std::move(qrw);
494 qual_routing_outflow = std::move(qro);
495 qual_routing_flood = std::move(qrf);
496 qual_routing_init = std::move(qri);
497 qual_routing_final = std::move(qrfi);
498 qual_routing_reacted = std::move(qrr);
499 // Zero out the quality vectors (except init_buildup which is
500 // computed once during initQuality and must survive reset)
501 for (auto* v : {&qual_final_buildup,
508 std::fill(v->begin(), v->end(), 0.0);
509 }
510 }
511
513 double runoff_error() const {
514 double total_in = runoff_rainfall + runoff_init_store;
516 return (total_in > 0.0) ? (total_in - total_out) / total_in : 0.0;
517 }
518
520 double routing_error() const {
521 double total_in = routing_dry_weather + routing_wet_weather +
524 double total_out = routing_flooding + routing_outflow +
527 return (total_in > 0.0) ? (total_in - total_out) / total_in : 0.0;
528 }
530
531 // =========================================================================
532 // Routing time-step statistics
533 // =========================================================================
534
536 double min_step = 1.0e30;
537 double max_step = 0.0;
538 double sum_step = 0.0;
539 long n_steps = 0;
540 double steady_pct = 0.0;
541 double avg_iterations = 0.0;
542
543 void update(double dt) {
544 if (dt < min_step) min_step = dt;
545 if (dt > max_step) max_step = dt;
546 sum_step += dt;
547 ++n_steps;
548 }
549 double avg_step() const {
550 return (n_steps > 0) ? sum_step / static_cast<double>(n_steps) : 0.0;
551 }
553
554 // =========================================================================
555 // Input file path (for model write / hot start)
556 // =========================================================================
557
562 std::string inp_file_path;
563
564 // =========================================================================
565 // Context-level operations
566 // =========================================================================
567
575 void reset() {
577 current_time = 0.0;
578 current_date = 0.0;
581 error_code = 0;
582 warning_code = 0;
583 error_message.clear();
584
585 // Clear SoA stores
586 nodes = NodeData{};
587 links = LinkData{};
589 gages = GageData{};
591 tables = TableData{};
592
593 // Clear name indices
600
601 // Clear spatial, flags, and forcing
605 }
606
613 void save_state() noexcept {
619 }
620 }
621
640
661 );
662
663 // Resize spatial coordinate arrays
664 spatial.node_x.assign(static_cast<std::size_t>(node_names.size()), 0.0);
665 spatial.node_y.assign(static_cast<std::size_t>(node_names.size()), 0.0);
666 spatial.link_x.assign(static_cast<std::size_t>(link_names.size()), 0.0);
667 spatial.link_y.assign(static_cast<std::size_t>(link_names.size()), 0.0);
668 spatial.subcatch_x.assign(static_cast<std::size_t>(subcatch_names.size()), 0.0);
669 spatial.subcatch_y.assign(static_cast<std::size_t>(subcatch_names.size()), 0.0);
670
671 // Resize link vertex and subcatchment polygon arrays
672 spatial.link_vertices_x.resize(static_cast<std::size_t>(link_names.size()));
673 spatial.link_vertices_y.resize(static_cast<std::size_t>(link_names.size()));
674 spatial.subcatch_polygon_x.resize(static_cast<std::size_t>(subcatch_names.size()));
675 spatial.subcatch_polygon_y.resize(static_cast<std::size_t>(subcatch_names.size()));
676
677 // Resize gage coordinates
678 spatial.gage_x.assign(static_cast<std::size_t>(gage_names.size()), 0.0);
679 spatial.gage_y.assign(static_cast<std::size_t>(gage_names.size()), 0.0);
680 }
681
682 // =========================================================================
683 // Convenience accessors
684 // =========================================================================
685
687 int n_nodes() const noexcept { return node_names.size(); }
688
690 int n_links() const noexcept { return link_names.size(); }
691
693 int n_subcatches() const noexcept { return subcatch_names.size(); }
694
696 int n_gages() const noexcept { return gage_names.size(); }
697
699 int n_pollutants() const noexcept { return pollutant_names.size(); }
700 int n_landuses() const noexcept { return landuse_names.size(); }
701
703 int n_tables() const noexcept { return table_names.size(); }
704};
705
706} /* namespace openswmm */
707
708#endif /* OPENSWMM_ENGINE_SIMULATION_CONTEXT_HPP */
Simulation options parsed from the [OPTIONS] section.
Spatial frame — CRS specification and coordinate data for nodes/links.
User-defined model flags (InfoWorks ICM-style, two-section design).
Bidirectional name↔index registry for SWMM objects.
Definition NameIndex.hpp:45
int size() const noexcept
Number of registered names.
Definition NameIndex.hpp:109
void clear() noexcept
Remove all entries.
Definition NameIndex.hpp:123
Stores the full user-flags data: schema definitions + per-object values.
Definition UserFlags.hpp:127
void clear() noexcept
Clear both schema definitions and per-object value assignments.
Definition UserFlags.hpp:246
EngineState
High-level engine lifecycle state.
Definition SimulationContext.hpp:116
@ CLOSED
Resources released.
@ ENDED
Simulation loop completed.
@ ERROR_STATE
Fatal error; call swmm_engine_last_error()
@ RUNNING
Simulation loop in progress.
@ REPORTED
Summary report written.
@ BUILDING
Programmatic model construction in progress (no .inp)
@ CREATED
Context allocated, no input loaded.
@ PAUSED
Simulation paused (future hot-swap support)
@ INITIALIZED
Initial conditions applied.
@ OPENED
Input file parsed, objects allocated.
Definition Controls.cpp:24
SoA storage for aquifer parameter sets.
Definition HydrologyData.hpp:66
Definition QualityData.hpp:47
Definition InfraData.hpp:101
Definition InflowData.hpp:53
Definition InflowData.hpp:27
Definition ForcingData.hpp:52
Structure-of-Arrays storage for all rain gages.
Definition GageData.hpp:75
void reset_state() noexcept
Definition GageData.hpp:211
void resize(int n)
Definition GageData.hpp:187
Definition InfraData.hpp:66
Definition InfraData.hpp:82
Definition QualityData.hpp:28
SoA storage for LID control type definitions.
Definition HydrologyData.hpp:99
SoA storage for LID usage assignments to subcatchments.
Definition HydrologyData.hpp:135
Structure-of-Arrays storage for all nodes.
Definition NodeData.hpp:89
void reset_state() noexcept
Zero all state variables (for a cold start).
Definition NodeData.hpp:473
void save_state() noexcept
Snapshot current state into old-step arrays before solving.
Definition NodeData.hpp:462
void resize(int n)
Resize all arrays to hold exactly n nodes.
Definition NodeData.hpp:385
Definition InflowData.hpp:95
One plugin entry from the [PLUGINS] section.
Definition SimulationContext.hpp:99
std::string path
Shared library path.
Definition SimulationContext.hpp:100
std::vector< std::string > init_args
Extra tokens from the [PLUGINS] row.
Definition SimulationContext.hpp:101
Static properties for each pollutant species.
Definition PollutantData.hpp:55
void resize_pollutants(int n)
Resize pollutant definition arrays to hold n pollutants.
Definition PollutantData.hpp:171
void save_quality_state() noexcept
Definition PollutantData.hpp:203
void reset_quality_state() noexcept
Definition PollutantData.hpp:209
void resize_quality(int n_nodes, int n_links, int n_subcatches)
Allocate per-object quality arrays.
Definition PollutantData.hpp:193
Definition InflowData.hpp:78
Cumulative mass balance totals for runoff and routing.
Definition SimulationContext.hpp:402
double routing_rdii
Definition SimulationContext.hpp:416
double routing_gw_inflow
Definition SimulationContext.hpp:415
double routing_init_storage
Definition SimulationContext.hpp:422
double routing_evap_loss
Definition SimulationContext.hpp:420
std::vector< double > qual_surface_buildup
Accumulated buildup during sim.
Definition SimulationContext.hpp:437
double routing_dry_weather
Definition SimulationContext.hpp:413
std::vector< double > qual_routing_final
Final stored quality mass.
Definition SimulationContext.hpp:447
double runoff_runoff
Total surface runoff volume (ft3)
Definition SimulationContext.hpp:407
std::vector< double > qual_init_buildup
Initial buildup mass.
Definition SimulationContext.hpp:435
std::vector< double > qual_routing_init
Initial stored quality mass.
Definition SimulationContext.hpp:446
std::vector< double > qual_runoff_load
Mass load in surface runoff.
Definition SimulationContext.hpp:442
std::vector< double > qual_final_buildup
Final buildup mass.
Definition SimulationContext.hpp:436
double routing_final_storage
Definition SimulationContext.hpp:423
double runoff_init_store
Initial surface storage (ft3)
Definition SimulationContext.hpp:409
double routing_seep_loss
Definition SimulationContext.hpp:421
std::vector< double > qual_routing_flood
Quality mass lost to flooding.
Definition SimulationContext.hpp:445
double runoff_snowremov
Total snow removal volume (ft3)
Definition SimulationContext.hpp:408
double routing_external
Definition SimulationContext.hpp:417
std::vector< double > qual_infil_loss
Mass lost to infiltration.
Definition SimulationContext.hpp:441
double runoff_final_store
Final surface storage (ft3)
Definition SimulationContext.hpp:410
std::vector< double > qual_routing_reacted
Quality mass lost to decay.
Definition SimulationContext.hpp:448
double routing_wet_weather
Definition SimulationContext.hpp:414
std::vector< double > qual_wet_deposition
Wet deposition mass.
Definition SimulationContext.hpp:438
double step_gw_inflow
Definition SimulationContext.hpp:432
double runoff_rainfall
Total rainfall volume (ft3)
Definition SimulationContext.hpp:404
void reset()
Definition SimulationContext.hpp:468
double routing_flooding
Definition SimulationContext.hpp:418
void resize_quality(int n_pollutants)
Definition SimulationContext.hpp:450
double runoff_evap
Total evaporation volume (ft3)
Definition SimulationContext.hpp:405
double step_flooding
Definition SimulationContext.hpp:429
std::vector< double > qual_sweeping
Mass removed by sweeping.
Definition SimulationContext.hpp:439
double routing_error() const
Routing continuity error (fraction).
Definition SimulationContext.hpp:520
std::vector< double > qual_routing_outflow
Quality mass leaving at outfalls.
Definition SimulationContext.hpp:444
double routing_forcing_inflow
Cumulative user-forced lateral inflow (ft3)
Definition SimulationContext.hpp:426
double runoff_infil
Total infiltration volume (ft3)
Definition SimulationContext.hpp:406
double step_outflow
Definition SimulationContext.hpp:430
std::vector< double > qual_bmp_removal
BMP treatment removal.
Definition SimulationContext.hpp:440
double routing_outflow
Definition SimulationContext.hpp:419
double runoff_error() const
Runoff continuity error (fraction).
Definition SimulationContext.hpp:513
std::vector< double > qual_routing_wet
Wet weather quality inflow to routing.
Definition SimulationContext.hpp:443
double step_dw_inflow
Definition SimulationContext.hpp:431
Definition SimulationContext.hpp:535
double sum_step
Sum of all routing time steps (sec)
Definition SimulationContext.hpp:538
long n_steps
Total number of routing steps.
Definition SimulationContext.hpp:539
double avg_step() const
Definition SimulationContext.hpp:549
double max_step
Maximum routing time step used (sec)
Definition SimulationContext.hpp:537
double min_step
Minimum routing time step used (sec)
Definition SimulationContext.hpp:536
void update(double dt)
Definition SimulationContext.hpp:543
double steady_pct
Percent of time in steady state.
Definition SimulationContext.hpp:540
double avg_iterations
Average iterations per step (DW only)
Definition SimulationContext.hpp:541
Central, reentrant simulation context.
Definition SimulationContext.hpp:141
struct openswmm::SimulationContext::MassBalance mass_balance
NameIndex aquifer_names
Definition SimulationContext.hpp:317
TransectStore transects
Definition SimulationContext.hpp:304
UserFlags user_flags
User-defined flags from [USER_FLAGS] section.
Definition SimulationContext.hpp:341
void save_state() noexcept
Snapshot current state into old-step arrays before solving.
Definition SimulationContext.hpp:613
NameIndex subcatch_names
Subcatchment name → subcatchment index.
Definition SimulationContext.hpp:261
NameIndex node_names
Node name → node index.
Definition SimulationContext.hpp:249
InletUsageStore inlet_usages
Definition SimulationContext.hpp:307
int n_nodes() const noexcept
Number of nodes.
Definition SimulationContext.hpp:687
ExtInflowData ext_inflows
Definition SimulationContext.hpp:295
NodeData nodes
All node state and properties.
Definition SimulationContext.hpp:209
TableData tables
All time series and rating curves.
Definition SimulationContext.hpp:239
int error_code
Most recent error code (0 = no error).
Definition SimulationContext.hpp:376
RDIIAssignData rdii_assigns
Definition SimulationContext.hpp:297
AquiferStore aquifers
Definition SimulationContext.hpp:316
NameIndex snowpack_names
Definition SimulationContext.hpp:315
InletStore inlets
Definition SimulationContext.hpp:306
GageData gages
All rain gage state and properties.
Definition SimulationContext.hpp:227
DwfData dwf_inflows
Definition SimulationContext.hpp:296
NameIndex gage_names
Rain gage name → gage index.
Definition SimulationContext.hpp:267
BuildupData buildup
Definition SimulationContext.hpp:287
int n_gages() const noexcept
Number of rain gages.
Definition SimulationContext.hpp:696
std::string inp_file_path
Path to the input .inp file (empty if not opened from a file).
Definition SimulationContext.hpp:562
NameIndex table_names
Time series / curve name → table index.
Definition SimulationContext.hpp:279
EngineState state
Current lifecycle state of the engine.
Definition SimulationContext.hpp:148
WashoffData washoff
Definition SimulationContext.hpp:288
int warning_code
Most recent warning code (0 = no warning).
Definition SimulationContext.hpp:382
NameIndex landuse_names
Definition SimulationContext.hpp:285
int n_tables() const noexcept
Number of tables (time series + curves).
Definition SimulationContext.hpp:703
double dt_output_remaining
Time remaining until the next output boundary (seconds).
Definition SimulationContext.hpp:191
struct openswmm::SimulationContext::RoutingStepStats routing_stats
LidControlStore lid_controls
Definition SimulationContext.hpp:318
ControlRuleStore control_rules
Definition SimulationContext.hpp:308
TreatmentData treatment
Definition SimulationContext.hpp:289
LinkData links
All link state and properties.
Definition SimulationContext.hpp:215
double dt_controls_remaining
Time remaining until the next control rule event (seconds).
Definition SimulationContext.hpp:199
void reset()
Fully reset the context to a CREATED state.
Definition SimulationContext.hpp:575
int n_pollutants() const noexcept
Number of pollutants.
Definition SimulationContext.hpp:699
LidUsageStore lid_usage
Definition SimulationContext.hpp:320
void allocate_objects()
Allocate all object arrays after input parsing is complete.
Definition SimulationContext.hpp:651
int n_subcatches() const noexcept
Number of subcatchments.
Definition SimulationContext.hpp:693
int n_links() const noexcept
Number of links.
Definition SimulationContext.hpp:690
NameIndex link_names
Link name → link index.
Definition SimulationContext.hpp:255
std::vector< PluginSpec > plugin_specs
Plugin library specs parsed from [PLUGINS].
Definition SimulationContext.hpp:366
StreetStore streets
Definition SimulationContext.hpp:305
double current_time
Current simulation time (decimal days from start_date).
Definition SimulationContext.hpp:172
ForcingData forcing
Per-element runtime forcing state (lateral inflows, head boundaries, rainfall, evap,...
Definition SimulationContext.hpp:355
int n_landuses() const noexcept
Definition SimulationContext.hpp:700
std::string error_message
Human-readable message for the last error/warning.
Definition SimulationContext.hpp:387
SpatialFrame spatial
Coordinate reference system and georeferenced coordinates.
Definition SimulationContext.hpp:330
SnowpackStore snowpacks
Definition SimulationContext.hpp:314
PatternData patterns
Definition SimulationContext.hpp:298
NameIndex lid_names
Definition SimulationContext.hpp:319
NameIndex pollutant_names
Pollutant name → pollutant index.
Definition SimulationContext.hpp:273
void reset_state() noexcept
Reset all state variables to initial conditions (cold start).
Definition SimulationContext.hpp:628
SubcatchData subcatches
All subcatchment state and properties.
Definition SimulationContext.hpp:221
LanduseData landuses
Definition SimulationContext.hpp:286
SimulationOptions options
Parsed simulation options (from [OPTIONS] section).
Definition SimulationContext.hpp:158
PollutantData pollutants
Pollutant definitions and per-object quality state.
Definition SimulationContext.hpp:233
double current_date
Absolute current date/time (decimal days, Julian date).
Definition SimulationContext.hpp:181
All SWMM simulation options parsed from [OPTIONS] section.
Definition SimulationOptions.hpp:100
double start_date
Simulation start date/time (decimal days, Julian date).
Definition SimulationOptions.hpp:107
bool quality_routing
True if quality routing is enabled.
Definition SimulationOptions.hpp:215
double report_step
Reporting output interval in seconds.
Definition SimulationOptions.hpp:128
SoA storage for snowpack parameter sets.
Definition HydrologyData.hpp:36
Spatial frame containing CRS and georeferenced coordinates.
Definition SpatialFrame.hpp:82
std::vector< double > link_x
Link centroid X coordinates.
Definition SpatialFrame.hpp:123
std::vector< double > subcatch_x
Subcatchment centroid X.
Definition SpatialFrame.hpp:133
std::vector< double > node_x
Node X coordinates (easting or longitude).
Definition SpatialFrame.hpp:113
std::vector< double > gage_x
Gage X coordinates.
Definition SpatialFrame.hpp:163
std::vector< double > gage_y
Gage Y coordinates.
Definition SpatialFrame.hpp:166
std::vector< std::vector< double > > subcatch_polygon_y
Per-subcatchment polygon Y vertices.
Definition SpatialFrame.hpp:156
std::vector< std::vector< double > > link_vertices_x
Per-link X vertices. link_vertices_x[link_idx] is a vector of X coords.
Definition SpatialFrame.hpp:143
std::vector< double > link_y
Link centroid Y coordinates.
Definition SpatialFrame.hpp:126
std::vector< std::vector< double > > subcatch_polygon_x
Per-subcatchment polygon X vertices.
Definition SpatialFrame.hpp:153
std::vector< double > node_y
Node Y coordinates (northing or latitude).
Definition SpatialFrame.hpp:116
std::vector< double > subcatch_y
Subcatchment centroid Y.
Definition SpatialFrame.hpp:136
std::vector< std::vector< double > > link_vertices_y
Per-link Y vertices. link_vertices_y[link_idx] is a vector of Y coords.
Definition SpatialFrame.hpp:146
Definition InfraData.hpp:46
Structure-of-Arrays storage for all subcatchments.
Definition SubcatchData.hpp:39
void reset_state() noexcept
Definition SubcatchData.hpp:395
void resize(int n)
Definition SubcatchData.hpp:335
void save_state() noexcept
Definition SubcatchData.hpp:391
SoA collection of all time series and curves in the model.
Definition TableData.hpp:248
void reset_cursors() noexcept
Reset all cursors (call before re-running a simulation).
Definition TableData.hpp:268
Definition InfraData.hpp:26
Definition QualityData.hpp:99
Definition QualityData.hpp:73