OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
openswmm_output.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
2//
3// Copyright 2026 Caleb Buahin
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
58
59#ifndef OPENSWMM_OUTPUT_H
60#define OPENSWMM_OUTPUT_H
61
63
64#ifdef __cplusplus
65extern "C" {
66#endif
67
68/* =========================================================================
69 * Opaque handle
70 * ========================================================================= */
71
73typedef void* SWMM_Output;
74
75/* =========================================================================
76 * Result variable enumerations
77 * ========================================================================= */
78
96
112
127
149
150/* =========================================================================
151 * Lifecycle
152 * ========================================================================= */
153
161
177
190SWMM_ENGINE_API int swmm_output_refresh(SWMM_Output handle, int* periods);
191
197
204
205/* =========================================================================
206 * Metadata queries
207 * ========================================================================= */
208
215
223
230
237
244
251
258
273 double* start_date);
274
281
282/* =========================================================================
283 * Object ID retrieval
284 * ========================================================================= */
285
293 int index);
294
302 int index);
303
311 int index);
312
328 int index);
329
330/* =========================================================================
331 * Per-period result retrieval (all objects, one variable, one period)
332 * ========================================================================= */
333
344 int period,
345 int var,
346 float* values);
347
358 int period,
359 int var,
360 float* values);
361
372 int period,
373 int var,
374 float* values);
375
386 int period,
387 int var,
388 float* value);
389
390/* =========================================================================
391 * Time series retrieval (one object, one variable, period range)
392 * ========================================================================= */
393
406 int subcatch_idx,
407 int var,
408 int start_period,
409 int end_period,
410 float* values);
411
424 int node_idx,
425 int var,
426 int start_period,
427 int end_period,
428 float* values);
429
442 int link_idx,
443 int var,
444 int start_period,
445 int end_period,
446 float* values);
447
459 int var,
460 int start_period,
461 int end_period,
462 float* values);
463
464/* =========================================================================
465 * Per-object result retrieval (all variables for one object at one period)
466 * ========================================================================= */
467
479 int subcatch_idx,
480 int period,
481 float* values,
482 int* count);
483
495 int node_idx,
496 int period,
497 float* values,
498 int* count);
499
511 int link_idx,
512 int period,
513 float* values,
514 int* count);
515
516/* =========================================================================
517 * Simulation time retrieval
518 * ========================================================================= */
519
534 int period,
535 double* time);
536
537/* =========================================================================
538 * Per-node summary statistics — Slice QA-01
539 *
540 * The SWMM 5.x binary output format does not include a stats block; these
541 * functions reconstruct the four flooding statistics at read time by
542 * walking the per-period node results stored in the file. The semantics
543 * mirror the engine-side `swmm_node_get_stat_*` accessors (which read
544 * from SimulationContext.nodes.stat_*), except sourced from a SWMM_Output
545 * handle so per-output comparisons work across multiple loaded .out
546 * files. Implementations are O(n_periods) per call.
547 *
548 * Caveat: aggregation runs over REPORT-step samples, not the engine's
549 * internal routing-step samples. For runs where the report step is much
550 * coarser than the routing step (e.g. report every hour vs. route every
551 * 5 s), `time_flooded` and `vol_flooded` will under-count brief
552 * sub-report-step flooding events. The engine-side getters
553 * (`swmm_node_get_stat_*`) retain the legacy routing-step precision —
554 * use those when a fresh in-process run is the source.
555 * ========================================================================= */
556
570 int node_idx,
571 double* value);
572
581 int node_idx,
582 double* value);
583
593 int node_idx,
594 double* value);
595
606 int node_idx,
607 double* value);
608
609/* =========================================================================
610 * Error reporting
611 * ========================================================================= */
612
619
620#ifdef __cplusplus
621}
622#endif
623
624#endif /* OPENSWMM_OUTPUT_H */
SWMM_ENGINE_API int swmm_output_get_pollut_count(SWMM_Output handle)
Get the number of pollutants in the output file.
Definition openswmm_output_impl.cpp:120
SWMM_ENGINE_API int swmm_output_get_version(SWMM_Output handle)
Get the SWMM version stored in the output file.
Definition openswmm_output_impl.cpp:95
SWMM_ENGINE_API int swmm_output_get_node_attribute(SWMM_Output handle, int node_idx, int period, float *values, int *count)
Get all result variables for a single node at one period.
Definition openswmm_output_impl.cpp:271
SWMM_ENGINE_API int swmm_output_get_subcatch_attribute(SWMM_Output handle, int subcatch_idx, int period, float *values, int *count)
Get all result variables for a single subcatchment at one period.
Definition openswmm_output_impl.cpp:261
SWMM_ENGINE_API int swmm_output_get_error_code(SWMM_Output handle)
Get the error code stored in the output file footer.
Definition openswmm_output_impl.cpp:342
SWMM_OutSystemVar
System-wide result variable indices.
Definition openswmm_output.h:133
@ SWMM_OUT_SYS_PET
Definition openswmm_output.h:147
@ SWMM_OUT_SYS_OUTFLOW
Definition openswmm_output.h:144
@ SWMM_OUT_SYS_RAINFALL
Definition openswmm_output.h:135
@ SWMM_OUT_SYS_TEMPERATURE
Definition openswmm_output.h:134
@ SWMM_OUT_SYS_DW_INFLOW
Definition openswmm_output.h:140
@ SWMM_OUT_SYS_SNOW_DEPTH
Definition openswmm_output.h:136
@ SWMM_OUT_SYS_INFIL
Definition openswmm_output.h:138
@ SWMM_OUT_SYS_RUNOFF
Definition openswmm_output.h:139
@ SWMM_OUT_SYS_STORAGE
Definition openswmm_output.h:145
@ SWMM_OUT_SYS_LAT_INFLOW
Definition openswmm_output.h:142
@ SWMM_OUT_SYS_GW_INFLOW
Definition openswmm_output.h:141
@ SWMM_OUT_SYS_EVAP_TOTAL
Definition openswmm_output.h:146
@ SWMM_OUT_SYS_FLOODING
Definition openswmm_output.h:143
@ SWMM_OUT_SYS_EVAP
Definition openswmm_output.h:137
SWMM_ENGINE_API int swmm_output_get_period_count(SWMM_Output handle)
Get the number of reporting periods (timesteps) in the output file.
Definition openswmm_output_impl.cpp:125
SWMM_ENGINE_API int swmm_output_refresh(SWMM_Output handle, int *periods)
Re-count the periods of a file opened with swmm_output_open_live().
Definition openswmm_output_impl.cpp:71
SWMM_ENGINE_API SWMM_Output swmm_output_open_live(const char *path)
Open a binary output file that is still being written.
Definition openswmm_output_impl.cpp:60
SWMM_ENGINE_API int swmm_output_get_subcatch_result(SWMM_Output handle, int period, int var, float *values)
Get one subcatchment variable for all subcatchments at a given period.
Definition openswmm_output_impl.cpp:175
SWMM_OutNodeVar
Node result variable indices.
Definition openswmm_output.h:103
@ SWMM_OUT_NODE_TOTAL_INFLOW
Definition openswmm_output.h:108
@ SWMM_OUT_NODE_POLLUT_BASE
Definition openswmm_output.h:110
@ SWMM_OUT_NODE_HEAD
Definition openswmm_output.h:105
@ SWMM_OUT_NODE_DEPTH
Definition openswmm_output.h:104
@ SWMM_OUT_NODE_VOLUME
Definition openswmm_output.h:106
@ SWMM_OUT_NODE_OVERFLOW
Definition openswmm_output.h:109
@ SWMM_OUT_NODE_LATERAL_INFLOW
Definition openswmm_output.h:107
SWMM_ENGINE_API int swmm_output_get_report_step(SWMM_Output handle)
Get the report step in seconds.
Definition openswmm_output_impl.cpp:138
SWMM_ENGINE_API const char * swmm_output_get_pollut_id(SWMM_Output handle, int index)
Get the string ID of a species (pollutant) column by index.
Definition openswmm_output_impl.cpp:165
SWMM_OutSubcatchVar
Subcatchment result variable indices.
Definition openswmm_output.h:85
@ SWMM_OUT_SUBCATCH_INFIL
Definition openswmm_output.h:89
@ SWMM_OUT_SUBCATCH_RAINFALL
Definition openswmm_output.h:86
@ SWMM_OUT_SUBCATCH_POLLUT_BASE
Definition openswmm_output.h:94
@ SWMM_OUT_SUBCATCH_GW_FLOW
Definition openswmm_output.h:91
@ SWMM_OUT_SUBCATCH_RUNOFF
Definition openswmm_output.h:90
@ SWMM_OUT_SUBCATCH_EVAP
Definition openswmm_output.h:88
@ SWMM_OUT_SUBCATCH_SNOW_DEPTH
Definition openswmm_output.h:87
@ SWMM_OUT_SUBCATCH_SOIL_MOIST
Definition openswmm_output.h:93
@ SWMM_OUT_SUBCATCH_GW_ELEV
Definition openswmm_output.h:92
SWMM_ENGINE_API int swmm_output_get_node_stat_max_overflow(SWMM_Output handle, int node_idx, double *value)
Maximum node overflow rate across all reporting periods.
Definition openswmm_output_impl.cpp:317
SWMM_ENGINE_API int swmm_output_get_node_series(SWMM_Output handle, int node_idx, int var, int start_period, int end_period, float *values)
Get a node variable time series across a range of periods.
Definition openswmm_output_impl.cpp:223
SWMM_ENGINE_API int swmm_output_get_node_stat_time_flooded(SWMM_Output handle, int node_idx, double *value)
Total time the node was flooded across the simulation.
Definition openswmm_output_impl.cpp:331
SWMM_ENGINE_API int swmm_output_get_node_stat_max_depth(SWMM_Output handle, int node_idx, double *value)
Maximum node depth across all reporting periods.
Definition openswmm_output_impl.cpp:310
SWMM_ENGINE_API int swmm_output_get_system_series(SWMM_Output handle, int var, int start_period, int end_period, float *values)
Get a system variable time series across a range of periods.
Definition openswmm_output_impl.cpp:247
SWMM_ENGINE_API int swmm_output_get_link_result(SWMM_Output handle, int period, int var, float *values)
Get one link variable for all links at a given period.
Definition openswmm_output_impl.cpp:191
SWMM_ENGINE_API int swmm_output_get_start_date(SWMM_Output handle, double *start_date)
Get the simulation start date as a SWMM DateTime double.
Definition openswmm_output_impl.cpp:130
SWMM_ENGINE_API int swmm_output_get_link_attribute(SWMM_Output handle, int link_idx, int period, float *values, int *count)
Get all result variables for a single link at one period.
Definition openswmm_output_impl.cpp:281
SWMM_ENGINE_API int swmm_output_get_flow_units(SWMM_Output handle)
Get the flow units code.
Definition openswmm_output_impl.cpp:100
SWMM_ENGINE_API int swmm_output_get_link_count(SWMM_Output handle)
Get the number of links in the output file.
Definition openswmm_output_impl.cpp:115
SWMM_ENGINE_API int swmm_output_get_link_series(SWMM_Output handle, int link_idx, int var, int start_period, int end_period, float *values)
Get a link variable time series across a range of periods.
Definition openswmm_output_impl.cpp:235
SWMM_ENGINE_API int swmm_output_get_subcatch_count(SWMM_Output handle)
Get the number of subcatchments in the output file.
Definition openswmm_output_impl.cpp:105
SWMM_ENGINE_API int swmm_output_get_node_result(SWMM_Output handle, int period, int var, float *values)
Get one node variable for all nodes at a given period.
Definition openswmm_output_impl.cpp:183
SWMM_OutLinkVar
Link result variable indices.
Definition openswmm_output.h:119
@ SWMM_OUT_LINK_FLOW
Definition openswmm_output.h:120
@ SWMM_OUT_LINK_VELOCITY
Definition openswmm_output.h:122
@ SWMM_OUT_LINK_DEPTH
Definition openswmm_output.h:121
@ SWMM_OUT_LINK_POLLUT_BASE
Definition openswmm_output.h:125
@ SWMM_OUT_LINK_VOLUME
Definition openswmm_output.h:123
@ SWMM_OUT_LINK_CAPACITY
Definition openswmm_output.h:124
void * SWMM_Output
Opaque handle to an opened output file reader.
Definition openswmm_output.h:73
SWMM_ENGINE_API int swmm_output_get_node_count(SWMM_Output handle)
Get the number of nodes in the output file.
Definition openswmm_output_impl.cpp:110
SWMM_ENGINE_API int swmm_output_get_system_result(SWMM_Output handle, int period, int var, float *value)
Get system-wide results at a given period.
Definition openswmm_output_impl.cpp:199
SWMM_ENGINE_API const char * swmm_output_get_subcatch_id(SWMM_Output handle, int index)
Get the string ID of a subcatchment by index.
Definition openswmm_output_impl.cpp:147
SWMM_ENGINE_API int swmm_output_get_period_time(SWMM_Output handle, int period, double *time)
Get the simulation time for a given period as a SWMM DateTime double.
Definition openswmm_output_impl.cpp:295
SWMM_ENGINE_API const char * swmm_output_get_node_id(SWMM_Output handle, int index)
Get the string ID of a node by index.
Definition openswmm_output_impl.cpp:153
SWMM_ENGINE_API int swmm_output_is_live(SWMM_Output handle)
1 while a handle from swmm_output_open_live() has not yet seen the closing records,...
Definition openswmm_output_impl.cpp:79
SWMM_ENGINE_API int swmm_output_get_subcatch_series(SWMM_Output handle, int subcatch_idx, int var, int start_period, int end_period, float *values)
Get a subcatchment variable time series across a range of periods.
Definition openswmm_output_impl.cpp:211
SWMM_ENGINE_API SWMM_Output swmm_output_open(const char *path)
Open a binary output file for reading.
Definition openswmm_output_impl.cpp:49
SWMM_ENGINE_API const char * swmm_output_get_link_id(SWMM_Output handle, int index)
Get the string ID of a link by index.
Definition openswmm_output_impl.cpp:159
SWMM_ENGINE_API void swmm_output_close(SWMM_Output handle)
Close the output file and free all resources.
Definition openswmm_output_impl.cpp:84
SWMM_ENGINE_API int swmm_output_get_node_stat_vol_flooded(SWMM_Output handle, int node_idx, double *value)
Total flood volume at the node across the simulation.
Definition openswmm_output_impl.cpp:324
#define SWMM_ENGINE_API
Definition openswmm_2d.h:53