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
60
61#ifndef OPENSWMM_OUTPUT_H
62#define OPENSWMM_OUTPUT_H
63
65
66#ifdef __cplusplus
67extern "C" {
68#endif
69
70/* =========================================================================
71 * Opaque handle
72 * ========================================================================= */
73
75typedef void* SWMM_Output;
76
90
91/* =========================================================================
92 * Result variable enumerations
93 * ========================================================================= */
94
111 /* Optional UEB fields. These are codes, not positional array indices.
112 All use SI, averaged over the non-LID subcatchment area. Their accepted
113 clock is recorded separately; it can differ from the hydraulic report
114 clock. A file without UEB has no extension. Unavailable rows are NaN. */
126
145
155
170
196
197/* =========================================================================
198 * Lifecycle
199 * ========================================================================= */
200
214
228
242SWMM_ENGINE_API int swmm_output_refresh(SWMM_Output handle, int* periods);
243
252
263
264/* =========================================================================
265 * Metadata queries
266 * ========================================================================= */
267
276
285
294
303
312
322
334
347SWMM_ENGINE_API int swmm_output_get_start_date(SWMM_Output handle, double* start_date);
348
357
358/* =========================================================================
359 * Object ID retrieval
360 * ========================================================================= */
361
372SWMM_ENGINE_API const char* swmm_output_get_subcatch_id(SWMM_Output handle, int index);
373
383SWMM_ENGINE_API const char* swmm_output_get_node_id(SWMM_Output handle, int index);
384
394SWMM_ENGINE_API const char* swmm_output_get_link_id(SWMM_Output handle, int index);
395
408SWMM_ENGINE_API const char* swmm_output_get_pollut_id(SWMM_Output handle, int index);
409
410/* =========================================================================
411 * Per-period result retrieval (all objects, one variable, one period)
412 * ========================================================================= */
413
432SWMM_ENGINE_API int swmm_output_get_subcatch_result(SWMM_Output handle, int period, int var,
433 float* values);
434
453SWMM_ENGINE_API int swmm_output_get_node_result(SWMM_Output handle, int period, int var,
454 float* values);
455
474SWMM_ENGINE_API int swmm_output_get_link_result(SWMM_Output handle, int period, int var,
475 float* values);
476
494SWMM_ENGINE_API int swmm_output_get_system_result(SWMM_Output handle, int period, int var,
495 float* value);
496
497/* =========================================================================
498 * Time series retrieval (one object, one variable, period range)
499 * ========================================================================= */
500
519SWMM_ENGINE_API int swmm_output_get_subcatch_series(SWMM_Output handle, int subcatch_idx, int var,
520 int start_period, int end_period,
521 float* values);
522
541SWMM_ENGINE_API int swmm_output_get_node_series(SWMM_Output handle, int node_idx, int var,
542 int start_period, int end_period, float* values);
543
562SWMM_ENGINE_API int swmm_output_get_link_series(SWMM_Output handle, int link_idx, int var,
563 int start_period, int end_period, float* values);
564
582SWMM_ENGINE_API int swmm_output_get_system_series(SWMM_Output handle, int var, int start_period,
583 int end_period, float* values);
584
585/* =========================================================================
586 * Per-object result retrieval (all variables for one object at one period)
587 * ========================================================================= */
588
609 int period, float* values, int* count);
610
630SWMM_ENGINE_API int swmm_output_get_node_attribute(SWMM_Output handle, int node_idx, int period,
631 float* values, int* count);
632
652SWMM_ENGINE_API int swmm_output_get_link_attribute(SWMM_Output handle, int link_idx, int period,
653 float* values, int* count);
654
655/* =========================================================================
656 * Simulation time retrieval
657 * ========================================================================= */
658
671SWMM_ENGINE_API int swmm_output_get_period_time(SWMM_Output handle, int period, double* time);
672
673/* =========================================================================
674 * Per-node summary statistics — Slice QA-01
675 *
676 * The SWMM 5.x binary output format does not include a stats block; these
677 * functions reconstruct the four flooding statistics at read time by
678 * walking the per-period node results stored in the file. The semantics
679 * mirror the engine-side `swmm_node_get_stat_*` accessors (which read
680 * from SimulationContext.nodes.stat_*), except sourced from a SWMM_Output
681 * handle so per-output comparisons work across multiple loaded .out
682 * files. Implementations are O(n_periods) per call.
683 *
684 * Caveat: aggregation runs over REPORT-step samples, not the engine's
685 * internal routing-step samples. For runs where the report step is much
686 * coarser than the routing step (e.g. report every hour vs. route every
687 * 5 s), `time_flooded` and `vol_flooded` can miss brief events or assign
688 * an entire report interval to a brief positive sample. The engine-side getters
689 * (`swmm_node_get_stat_*`) retain the legacy routing-step precision —
690 * use those when a fresh in-process run is the source.
691 * ========================================================================= */
692
707 double* value);
708
724 double* value);
725
742 double* value);
743
760 double* value);
761
762/* =========================================================================
763 * Error reporting
764 * ========================================================================= */
765
775
776#ifdef __cplusplus
777}
778#endif
779
780#endif /* OPENSWMM_OUTPUT_H */
SWMM_ENGINE_API int swmm_output_get_pollut_count(SWMM_Output handle)
Read the output species-column count.
Definition openswmm_output_impl.cpp:148
SWMM_ENGINE_API int swmm_output_get_version(SWMM_Output handle)
Read the output writer version.
Definition openswmm_output_impl.cpp:118
SWMM_ENGINE_API int swmm_output_get_pollut_units(SWMM_Output handle, int index)
Read a species column stored concentration-unit code.
Definition openswmm_output_impl.cpp:52
SWMM_ENGINE_API int swmm_output_get_node_attribute(SWMM_Output handle, int node_idx, int period, float *values, int *count)
Read node variables at one report record.
Definition openswmm_output_impl.cpp:274
SWMM_ENGINE_API int swmm_output_get_subcatch_attribute(SWMM_Output handle, int subcatch_idx, int period, float *values, int *count)
Read subcatchment variables at one report record.
Definition openswmm_output_impl.cpp:268
SWMM_ENGINE_API int swmm_output_get_error_code(SWMM_Output handle)
Read the output simulation footer error.
Definition openswmm_output_impl.cpp:331
SWMM_OutSystemVar
System-wide result variable indices.
Definition openswmm_output.h:177
@ SWMM_OUT_SYS_TOTAL_INFLOW
Definition openswmm_output.h:187
@ SWMM_OUT_SYS_PET
Definition openswmm_output.h:193
@ SWMM_OUT_SYS_OUTFLOW
Definition openswmm_output.h:190
@ SWMM_OUT_SYS_RAINFALL
Definition openswmm_output.h:179
@ SWMM_OUT_SYS_TEMPERATURE
Definition openswmm_output.h:178
@ SWMM_OUT_SYS_EXT_INFLOW
Definition openswmm_output.h:186
@ SWMM_OUT_SYS_DW_INFLOW
Definition openswmm_output.h:183
@ SWMM_OUT_SYS_SNOW_DEPTH
Definition openswmm_output.h:180
@ SWMM_OUT_SYS_INFIL
Definition openswmm_output.h:181
@ SWMM_OUT_SYS_RUNOFF
Definition openswmm_output.h:182
@ SWMM_OUT_SYS_STORAGE
Definition openswmm_output.h:191
@ SWMM_OUT_SYS_LAT_INFLOW
Definition openswmm_output.h:194
@ SWMM_OUT_SYS_GW_INFLOW
Definition openswmm_output.h:184
@ SWMM_OUT_SYS_FLOODING
Definition openswmm_output.h:189
@ SWMM_OUT_SYS_RDII_INFLOW
Definition openswmm_output.h:185
@ SWMM_OUT_SYS_EVAP
Definition openswmm_output.h:192
SWMM_ENGINE_API int swmm_output_get_period_count(SWMM_Output handle)
Read the output currently known whole-report count.
Definition openswmm_output_impl.cpp:154
SWMM_ENGINE_API int swmm_output_has_subcatch_variable(SWMM_Output handle, int code)
Node result variable indices.
Definition openswmm_output_impl.cpp:55
SWMM_ENGINE_API int swmm_output_refresh(SWMM_Output handle, int *periods)
Update whole-period count and adopt a final footer on a live reader.
Definition openswmm_output_impl.cpp:90
SWMM_ENGINE_API SWMM_Output swmm_output_open_live(const char *path)
Allocate a reader for the complete records of an output still being written.
Definition openswmm_output_impl.cpp:77
SWMM_ENGINE_API int swmm_output_get_subcatch_result(SWMM_Output handle, int period, int var, float *values)
Read one subcatchment variable for all subcatchment rows at one period.
Definition openswmm_output_impl.cpp:206
SWMM_OutNodeVar
Definition openswmm_output.h:146
@ SWMM_OUT_NODE_TOTAL_INFLOW
Definition openswmm_output.h:151
@ SWMM_OUT_NODE_POLLUT_BASE
Definition openswmm_output.h:153
@ SWMM_OUT_NODE_HEAD
Definition openswmm_output.h:148
@ SWMM_OUT_NODE_DEPTH
Definition openswmm_output.h:147
@ SWMM_OUT_NODE_VOLUME
Definition openswmm_output.h:149
@ SWMM_OUT_NODE_OVERFLOW
Definition openswmm_output.h:152
@ SWMM_OUT_NODE_LATERAL_INFLOW
Definition openswmm_output.h:150
SWMM_ENGINE_API int swmm_output_get_report_step(SWMM_Output handle)
Read the output configured reporting interval.
Definition openswmm_output_impl.cpp:168
SWMM_ENGINE_API const char * swmm_output_get_pollut_id(SWMM_Output handle, int index)
Borrow a species identifier from the output header.
Definition openswmm_output_impl.cpp:196
SWMM_OutSubcatchVar
Subcatchment result variable indices.
Definition openswmm_output.h:101
@ SWMM_OUT_SUBCATCH_SNOW_BULK_TEMP
Definition openswmm_output.h:118
@ SWMM_OUT_SUBCATCH_INFIL
Definition openswmm_output.h:105
@ SWMM_OUT_SUBCATCH_RAINFALL
Definition openswmm_output.h:102
@ SWMM_OUT_SUBCATCH_POLLUT_BASE
Definition openswmm_output.h:110
@ SWMM_OUT_SUBCATCH_SNOW_INPUT
Definition openswmm_output.h:122
@ SWMM_OUT_SUBCATCH_SNOW_ALBEDO
Definition openswmm_output.h:119
@ SWMM_OUT_SUBCATCH_SNOW_TIME
Definition openswmm_output.h:124
@ SWMM_OUT_SUBCATCH_GW_FLOW
Definition openswmm_output.h:107
@ SWMM_OUT_SUBCATCH_RUNOFF
Definition openswmm_output.h:106
@ SWMM_OUT_SUBCATCH_SNOW_COVER
Definition openswmm_output.h:120
@ SWMM_OUT_SUBCATCH_SNOW_SURFACE_TEMP
Definition openswmm_output.h:117
@ SWMM_OUT_SUBCATCH_SNOW_ENERGY
Definition openswmm_output.h:116
@ SWMM_OUT_SUBCATCH_SNOW_MELT
Definition openswmm_output.h:121
@ SWMM_OUT_SUBCATCH_SNOW_SUBLIMATION
Definition openswmm_output.h:123
@ SWMM_OUT_SUBCATCH_EVAP
Definition openswmm_output.h:104
@ SWMM_OUT_SUBCATCH_SNOW_SWE
Definition openswmm_output.h:115
@ SWMM_OUT_SUBCATCH_SNOW_DEPTH
Definition openswmm_output.h:103
@ SWMM_OUT_SUBCATCH_SOIL_MOIST
Definition openswmm_output.h:109
@ SWMM_OUT_SUBCATCH_GW_ELEV
Definition openswmm_output.h:108
SWMM_ENGINE_API int swmm_output_get_node_stat_max_overflow(SWMM_Output handle, int node_idx, double *value)
Reconstruct node maximum reported overflow from report records.
Definition openswmm_output_impl.cpp:309
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)
Read a closed range of node report samples.
Definition openswmm_output_impl.cpp:244
SWMM_ENGINE_API int swmm_output_get_node_stat_time_flooded(SWMM_Output handle, int node_idx, double *value)
Reconstruct node report-sampled flooding duration from report records.
Definition openswmm_output_impl.cpp:321
SWMM_ENGINE_API int swmm_output_get_node_stat_max_depth(SWMM_Output handle, int node_idx, double *value)
Reconstruct node maximum reported depth from report records.
Definition openswmm_output_impl.cpp:303
SWMM_ENGINE_API int swmm_output_get_system_series(SWMM_Output handle, int var, int start_period, int end_period, float *values)
Read a closed range of system report samples.
Definition openswmm_output_impl.cpp:258
SWMM_ENGINE_API int swmm_output_get_link_result(SWMM_Output handle, int period, int var, float *values)
Read one link variable for all link rows at one period.
Definition openswmm_output_impl.cpp:218
SWMM_ENGINE_API int swmm_output_get_start_date(SWMM_Output handle, double *start_date)
Read the calendar baseline stored in output report metadata.
Definition openswmm_output_impl.cpp:160
SWMM_ENGINE_API int swmm_output_get_link_attribute(SWMM_Output handle, int link_idx, int period, float *values, int *count)
Read link variables at one report record.
Definition openswmm_output_impl.cpp:280
SWMM_ENGINE_API int swmm_output_get_flow_units(SWMM_Output handle)
Read the output file flow-unit selector.
Definition openswmm_output_impl.cpp:124
SWMM_ENGINE_API int swmm_output_get_link_count(SWMM_Output handle)
Read the output link count.
Definition openswmm_output_impl.cpp:142
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)
Read a closed range of link report samples.
Definition openswmm_output_impl.cpp:251
SWMM_ENGINE_API int swmm_output_get_subcatch_count(SWMM_Output handle)
Read the output subcatchment count.
Definition openswmm_output_impl.cpp:130
SWMM_ENGINE_API int swmm_output_get_node_result(SWMM_Output handle, int period, int var, float *values)
Read one node variable for all node rows at one period.
Definition openswmm_output_impl.cpp:212
SWMM_OutLinkVar
Link result variable indices.
Definition openswmm_output.h:162
@ SWMM_OUT_LINK_FLOW
Definition openswmm_output.h:163
@ SWMM_OUT_LINK_VELOCITY
Definition openswmm_output.h:165
@ SWMM_OUT_LINK_DEPTH
Definition openswmm_output.h:164
@ SWMM_OUT_LINK_POLLUT_BASE
Definition openswmm_output.h:168
@ SWMM_OUT_LINK_VOLUME
Definition openswmm_output.h:166
@ SWMM_OUT_LINK_CAPACITY
Definition openswmm_output.h:167
void * SWMM_Output
Opaque handle to an opened output file reader.
Definition openswmm_output.h:75
SWMM_ENGINE_API int swmm_output_get_node_count(SWMM_Output handle)
Read the output node count.
Definition openswmm_output_impl.cpp:136
SWMM_ENGINE_API int swmm_output_get_system_result(SWMM_Output handle, int period, int var, float *value)
Read one system variable for the system at one period.
Definition openswmm_output_impl.cpp:224
SWMM_ENGINE_API const char * swmm_output_get_subcatch_id(SWMM_Output handle, int index)
Borrow a subcatchment identifier from the output header.
Definition openswmm_output_impl.cpp:178
SWMM_ENGINE_API int swmm_output_get_period_time(SWMM_Output handle, int period, double *time)
Read the exact calendar timestamp of one report record.
Definition openswmm_output_impl.cpp:290
SWMM_ENGINE_API const char * swmm_output_get_node_id(SWMM_Output handle, int index)
Borrow a node identifier from the output header.
Definition openswmm_output_impl.cpp:184
SWMM_ENGINE_API int swmm_output_is_live(SWMM_Output handle)
Read whether the output reader is still using live record counting.
Definition openswmm_output_impl.cpp:100
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)
Read a closed range of subcatchment report samples.
Definition openswmm_output_impl.cpp:234
SWMM_ENGINE_API SWMM_Output swmm_output_open(const char *path)
Allocate a reader for a binary output with a valid closing footer.
Definition openswmm_output_impl.cpp:64
SWMM_ENGINE_API const char * swmm_output_get_link_id(SWMM_Output handle, int index)
Borrow a link identifier from the output header.
Definition openswmm_output_impl.cpp:190
SWMM_ENGINE_API void swmm_output_close(SWMM_Output handle)
Close the file and delete its independent output-reader handle.
Definition openswmm_output_impl.cpp:106
SWMM_ENGINE_API int swmm_output_get_node_stat_vol_flooded(SWMM_Output handle, int node_idx, double *value)
Reconstruct node report-sampled flooding integral from report records.
Definition openswmm_output_impl.cpp:315
#define SWMM_ENGINE_API
Definition openswmm_2d.h:62
Build-generated visibility and deprecation macros for the engine API.