OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
openswmm_engine.h
Go to the documentation of this file.
1
69#ifndef OPENSWMM_ENGINE_H
70#define OPENSWMM_ENGINE_H
71
72#include "openswmm_callbacks.h"
73
74/* =========================================================================
75 * Export macro
76 * ========================================================================= */
77
78#ifdef OPENSWMM_ENGINE_STATIC
79# define SWMM_ENGINE_API
80#else
81# ifdef _WIN32
82# ifdef openswmm_engine_EXPORTS
83# define SWMM_ENGINE_API __declspec(dllexport)
84# else
85# define SWMM_ENGINE_API __declspec(dllimport)
86# endif
87# else
88# define SWMM_ENGINE_API __attribute__((visibility("default")))
89# endif
90#endif
91
92#ifdef __cplusplus
93extern "C" {
94#endif
95
96/* =========================================================================
97 * Error codes
98 * ========================================================================= */
99
119
130
131/* =========================================================================
132 * Engine lifecycle state
133 * ========================================================================= */
134
146
147/* =========================================================================
148 * Object type identifiers
149 * ========================================================================= */
150
166
167/* =========================================================================
168 * Engine lifecycle functions
169 * ========================================================================= */
170
173
186 const char* inp, const char* rpt, const char* out,
187 const char* input_plugin_lib);
188
191
193SWMM_ENGINE_API int swmm_engine_start(SWMM_Engine engine, int save_results);
194
196SWMM_ENGINE_API int swmm_engine_step(SWMM_Engine engine, double* elapsed_time);
197
211SWMM_ENGINE_API int swmm_engine_stride(SWMM_Engine engine, int n_steps, double* elapsed_time);
212
215
218
221
224
227
228/* =========================================================================
229 * Convenience run functions
230 * ========================================================================= */
231
245SWMM_ENGINE_API int swmm_engine_run(const char* inp, const char* rpt, const char* out,
246 const char* input_plugin_lib);
247
263 const char* inp, const char* rpt, const char* out,
264 const char* input_plugin_lib,
265 SWMM_ProgressCallback callback, void* user_data);
266
267/* =========================================================================
268 * Callback registration
269 * ========================================================================= */
270
272 SWMM_ProgressCallback callback, void* user_data);
274 SWMM_WarningCallback callback, void* user_data);
276 SWMM_StepBeginCallback callback, void* user_data);
278 SWMM_StepEndCallback callback, void* user_data);
279
280/* =========================================================================
281 * Error reporting
282 * ========================================================================= */
283
286SWMM_ENGINE_API const char* swmm_error_message (int code);
287
288/* =========================================================================
289 * Simulation timing
290 * ========================================================================= */
291
292SWMM_ENGINE_API int swmm_get_start_time (SWMM_Engine engine, double* start);
293SWMM_ENGINE_API int swmm_get_end_time (SWMM_Engine engine, double* end);
294SWMM_ENGINE_API int swmm_get_current_time(SWMM_Engine engine, double* current);
296
297/* =========================================================================
298 * Routing event and steady-state status
299 * ========================================================================= */
300
302SWMM_ENGINE_API int swmm_is_between_events(SWMM_Engine engine, int* is_between);
303
306SWMM_ENGINE_API int swmm_get_event_count(SWMM_Engine engine, int* count);
307
308/* -------------------------------------------------------------------------
309 * [EVENTS] section accessors (Slice CW — added 2026-05-21).
310 *
311 * Mirrors the per-row reader in `handle_events` (InfraHandler.cpp). All times
312 * are DateTime decimal days (consistent with `swmm_get_start_time` etc.).
313 * `swmm_events_count` is a synonym of the legacy `swmm_get_event_count` and
314 * is provided so the [EVENTS] surface is self-consistent.
315 * ------------------------------------------------------------------------- */
316
318SWMM_ENGINE_API int swmm_events_count(SWMM_Engine engine, int* count);
319
323 double* start, double* end);
324
329 double start, double end);
330
335 double start, double end, int* out_idx);
336
340
343
347
348/* =========================================================================
349 * Phase 1b: Runoff interface file (legacy "Frunoff").
350 *
351 * Persists per-subcatchment runoff snapshots to a binary file so the
352 * runoff phase of a long simulation can be cached and replayed in a
353 * downstream routing-only run. Mirrors the legacy SWMM-5 file format
354 * (see src/engine/hydrology/RunoffInterface.hpp).
355 *
356 * SAVE mode is fully integrated: open the file in SAVE before
357 * @c swmm_engine_start, run the simulation as normal, then close. The
358 * engine emits one record per runoff substep automatically.
359 *
360 * USE mode currently exposes the file but does NOT yet auto-skip the
361 * engine's runoff computation — callers must invoke
362 * @ref swmm_runoff_iface_read_step between simulation steps and
363 * understand that the engine will overwrite the loaded state if runoff
364 * still runs. Full USE-mode auto-skip is tracked as a follow-up.
365 *
366 * @since 6.0.0
367 * ========================================================================= */
368
379SWMM_ENGINE_API int swmm_runoff_iface_open_write(SWMM_Engine engine, const char* path);
380
390SWMM_ENGINE_API int swmm_runoff_iface_open_read(SWMM_Engine engine, const char* path);
391
406
420
428
429#ifdef __cplusplus
430} /* extern "C" */
431#endif
432
433/* =========================================================================
434 * Master include — pull in all domain headers
435 *
436 * Each domain header includes openswmm_engine.h itself (for SWMM_ENGINE_API
437 * and the handle typedef), so include guards prevent recursion.
438 * ========================================================================= */
439
440#include "openswmm_datetime.h"
441#include "openswmm_model.h"
442#include "openswmm_nodes.h"
443#include "openswmm_links.h"
445#include "openswmm_gages.h"
446#include "openswmm_massbalance.h"
447#include "openswmm_hotstart.h"
448#include "openswmm_spatial.h"
449#include "openswmm_pollutants.h"
450#include "openswmm_tables.h"
451#include "openswmm_inflows.h"
452#include "openswmm_controls.h"
454#include "openswmm_quality.h"
455#include "openswmm_statistics.h"
456#include "openswmm_forcing.h"
457#include "openswmm_edit.h"
458
459#ifdef OPENSWMM_HAS_2D
460#include "openswmm_2d.h"
461#endif
462
463#endif /* OPENSWMM_ENGINE_H */
Optional 2D surface routing module — C API.
Callback function typedefs for the OpenSWMM Engine C API.
void * SWMM_Engine
Opaque handle to an OpenSWMM Engine instance.
Definition openswmm_callbacks.h:35
void(* SWMM_StepBeginCallback)(SWMM_Engine engine, double sim_time, double dt, void *user_data)
Called at the beginning of each simulation timestep, before physics.
Definition openswmm_callbacks.h:112
void(* SWMM_WarningCallback)(SWMM_Engine engine, int code, const char *message, void *user_data)
Called when the engine emits a warning or non-fatal error.
Definition openswmm_callbacks.h:90
void(* SWMM_StepEndCallback)(SWMM_Engine engine, double sim_time, double dt, void *user_data)
Called at the end of each simulation timestep, after physics.
Definition openswmm_callbacks.h:130
void(* SWMM_ProgressCallback)(SWMM_Engine engine, double elapsed_frac, double sim_time, void *user_data)
Called after each simulation timestep to report progress.
Definition openswmm_callbacks.h:65
OpenSWMM Engine — Control Rules C API.
OpenSWMM Engine — SWMM DateTime conversion utilities (C API).
OpenSWMM Engine — Model editing C API (deletion and type conversion).
SWMM_ENGINE_API int swmm_set_steady_state_skip(SWMM_Engine engine, int enabled)
Definition openswmm_engine_impl.cpp:343
SWMM_ENGINE_API int swmm_engine_run(const char *inp, const char *rpt, const char *out, const char *input_plugin_lib)
Run a complete simulation to completion.
Definition openswmm_engine_impl.cpp:158
SWMM_ENGINE_API const char * swmm_get_last_error_msg(SWMM_Engine engine)
Definition openswmm_engine_impl.cpp:204
SWMM_ENGINE_API int swmm_set_progress_callback(SWMM_Engine engine, SWMM_ProgressCallback callback, void *user_data)
Definition openswmm_engine_impl.cpp:167
SWMM_ENGINE_API int swmm_runoff_iface_read_step(SWMM_Engine engine, int *has_data)
Read one runoff substep record from the open USE file into the current subcatchment state.
Definition openswmm_engine_impl.cpp:375
#define SWMM_ENGINE_API
Definition openswmm_engine.h:88
SWMM_ENGINE_API int swmm_events_get(SWMM_Engine engine, int idx, double *start, double *end)
Get the start/end DateTime of the idx-th event.
Definition openswmm_engine_impl.cpp:289
SWMM_ENGINE_API int swmm_events_clear(SWMM_Engine engine)
Remove all events.
Definition openswmm_engine_impl.cpp:331
SWMM_ENGINE_API int swmm_get_routing_step(SWMM_Engine engine, double *dt)
Definition openswmm_engine_impl.cpp:253
SWMM_ENGINE_API int swmm_runoff_iface_open_read(SWMM_Engine engine, const char *path)
Open the runoff interface file for reading (USE mode).
Definition openswmm_engine_impl.cpp:363
SWMM_ENGINE_API int swmm_engine_open(SWMM_Engine engine, const char *inp, const char *rpt, const char *out, const char *input_plugin_lib)
Open and parse a SWMM input file; load plugins → SWMM_STATE_OPENED.
Definition openswmm_engine_impl.cpp:29
SWMM_ENGINE_API int swmm_events_count(SWMM_Engine engine, int *count)
Number of [EVENTS] entries. Alias of swmm_get_event_count.
Definition openswmm_engine_impl.cpp:285
SWMM_ENGINE_API int swmm_engine_end(SWMM_Engine engine)
End the simulation → SWMM_STATE_ENDED.
Definition openswmm_engine_impl.cpp:67
SWMM_ENGINE_API int swmm_get_steady_state_skip(SWMM_Engine engine, int *enabled)
Get/set steady-state skip flag.
Definition openswmm_engine_impl.cpp:337
SWMM_ENGINE_API int swmm_get_current_time(SWMM_Engine engine, double *current)
Definition openswmm_engine_impl.cpp:247
SWMM_ENGINE_API int swmm_engine_close(SWMM_Engine engine)
Close all files → SWMM_STATE_CLOSED.
Definition openswmm_engine_impl.cpp:77
SWMM_ENGINE_API int swmm_set_warning_callback(SWMM_Engine engine, SWMM_WarningCallback callback, void *user_data)
Definition openswmm_engine_impl.cpp:174
SWMM_ENGINE_API int swmm_is_between_events(SWMM_Engine engine, int *is_between)
Check if simulation is currently between routing events.
Definition openswmm_engine_impl.cpp:263
SWMM_ENGINE_API const char * swmm_error_message(int code)
Definition openswmm_engine_impl.cpp:209
SWMM_ENGINE_API int swmm_events_remove(SWMM_Engine engine, int idx)
Remove the idx-th event. Trailing entries shift down by one.
Definition openswmm_engine_impl.cpp:322
SWMM_ENGINE_API int swmm_runoff_iface_open_write(SWMM_Engine engine, const char *path)
Open the runoff interface file for writing (SAVE mode).
Definition openswmm_engine_impl.cpp:357
SWMM_ENGINE_API int swmm_engine_run_with_callback(const char *inp, const char *rpt, const char *out, const char *input_plugin_lib, SWMM_ProgressCallback callback, void *user_data)
Run a complete simulation with a progress callback.
Definition openswmm_engine_impl.cpp:119
SWMM_ENGINE_API int swmm_engine_get_state(SWMM_Engine engine, int *state)
Query the current engine lifecycle state.
Definition openswmm_engine_impl.cpp:106
SWMM_ENGINE_API int swmm_get_event_count(SWMM_Engine engine, int *count)
Get number of routing events defined.
Definition openswmm_engine_impl.cpp:274
SWMM_WarnCode
Definition openswmm_engine.h:120
@ SWMM_WARN_NUMERICAL
Definition openswmm_engine.h:127
@ SWMM_WARN_DEPRECATED_KW
Definition openswmm_engine.h:125
@ SWMM_WARN_UNKNOWN_OPTION
Definition openswmm_engine.h:124
@ SWMM_WARN_NONE
Definition openswmm_engine.h:121
@ SWMM_WARN_UNKNOWN_SECTION
Definition openswmm_engine.h:123
@ SWMM_WARN_STABILITY_LIMIT
Definition openswmm_engine.h:128
@ SWMM_WARN_HOTSTART_MISSING
Definition openswmm_engine.h:122
@ SWMM_WARN_PLUGIN_INIT
Definition openswmm_engine.h:126
SWMM_ENGINE_API void swmm_engine_destroy(SWMM_Engine engine)
Destroy the engine handle (any state, NULL safe).
Definition openswmm_engine_impl.cpp:82
SWMM_ENGINE_API int swmm_events_set(SWMM_Engine engine, int idx, double start, double end)
Overwrite the idx-th event's window.
Definition openswmm_engine_impl.cpp:300
SWMM_ObjectType
Definition openswmm_engine.h:151
@ SWMM_OBJ_GAGE
Definition openswmm_engine.h:152
@ SWMM_OBJ_LINK
Definition openswmm_engine.h:155
@ SWMM_OBJ_SHAPE
Definition openswmm_engine.h:163
@ SWMM_OBJ_UNITHYD
Definition openswmm_engine.h:161
@ SWMM_OBJ_LANDUSE
Definition openswmm_engine.h:157
@ SWMM_OBJ_POLLUT
Definition openswmm_engine.h:156
@ SWMM_OBJ_RDII
Definition openswmm_engine.h:160
@ SWMM_OBJ_TIMESER
Definition openswmm_engine.h:158
@ SWMM_OBJ_LID
Definition openswmm_engine.h:164
@ SWMM_OBJ_SUBCATCH
Definition openswmm_engine.h:153
@ SWMM_OBJ_SNOWMELT
Definition openswmm_engine.h:162
@ SWMM_OBJ_NODE
Definition openswmm_engine.h:154
@ SWMM_OBJ_TABLE
Definition openswmm_engine.h:159
SWMM_EngineState
Definition openswmm_engine.h:135
@ SWMM_STATE_RUNNING
Definition openswmm_engine.h:141
@ SWMM_STATE_BUILDING
Definition openswmm_engine.h:144
@ SWMM_STATE_CREATED
Definition openswmm_engine.h:137
@ SWMM_STATE_NONE
Definition openswmm_engine.h:136
@ SWMM_STATE_INITIALIZED
Definition openswmm_engine.h:139
@ SWMM_STATE_ENDED
Definition openswmm_engine.h:142
@ SWMM_STATE_CLOSED
Definition openswmm_engine.h:143
@ SWMM_STATE_OPENED
Definition openswmm_engine.h:138
@ SWMM_STATE_STARTED
Definition openswmm_engine.h:140
SWMM_ENGINE_API SWMM_Engine swmm_engine_create(void)
Create a new engine instance (SWMM_STATE_CREATED).
Definition openswmm_engine_impl.cpp:21
SWMM_ENGINE_API int swmm_get_start_time(SWMM_Engine engine, double *start)
Definition openswmm_engine_impl.cpp:235
SWMM_ENGINE_API int swmm_engine_start(SWMM_Engine engine, int save_results)
Start the simulation → SWMM_STATE_STARTED.
Definition openswmm_engine_impl.cpp:41
SWMM_ErrorCode
Definition openswmm_engine.h:100
@ SWMM_ERR_DEPENDENCY
Definition openswmm_engine.h:116
@ SWMM_ERR_OUTFILE
Definition openswmm_engine.h:105
@ SWMM_ERR_INPFILE
Definition openswmm_engine.h:103
@ SWMM_ERR_RPTFILE
Definition openswmm_engine.h:104
@ SWMM_ERR_IO
Definition openswmm_engine.h:112
@ SWMM_ERR_CRS
Definition openswmm_engine.h:114
@ SWMM_ERR_BADINDEX
Definition openswmm_engine.h:109
@ SWMM_ERR_INTERNAL
Definition openswmm_engine.h:117
@ SWMM_ERR_LIFECYCLE
Definition openswmm_engine.h:107
@ SWMM_ERR_HOTSTART
Definition openswmm_engine.h:113
@ SWMM_OK
Definition openswmm_engine.h:101
@ SWMM_ERR_BADPARAM
Definition openswmm_engine.h:110
@ SWMM_ERR_NUMERICAL
Definition openswmm_engine.h:115
@ SWMM_ERR_PLUGIN
Definition openswmm_engine.h:111
@ SWMM_ERR_BADHANDLE
Definition openswmm_engine.h:108
@ SWMM_ERR_NOMEM
Definition openswmm_engine.h:102
@ SWMM_ERR_PARSE
Definition openswmm_engine.h:106
SWMM_ENGINE_API int swmm_get_last_error(SWMM_Engine engine)
Definition openswmm_engine_impl.cpp:199
SWMM_ENGINE_API int swmm_engine_report(SWMM_Engine engine)
Write summary report (SWMM_STATE_ENDED).
Definition openswmm_engine_impl.cpp:72
SWMM_ENGINE_API int swmm_get_end_time(SWMM_Engine engine, double *end)
Definition openswmm_engine_impl.cpp:241
SWMM_ENGINE_API int swmm_engine_stride(SWMM_Engine engine, int n_steps, double *elapsed_time)
Advance up to n_steps routing steps in one call (Gap #50 — swmm_stride equivalent).
Definition openswmm_engine_impl.cpp:52
SWMM_ENGINE_API int swmm_runoff_iface_save_step(SWMM_Engine engine, double dt)
Manually emit one runoff substep record to the open SAVE file.
Definition openswmm_engine_impl.cpp:369
SWMM_ENGINE_API int swmm_set_step_end_callback(SWMM_Engine engine, SWMM_StepEndCallback callback, void *user_data)
Definition openswmm_engine_impl.cpp:188
SWMM_ENGINE_API int swmm_runoff_iface_close(SWMM_Engine engine)
Close the runoff interface file.
Definition openswmm_engine_impl.cpp:382
SWMM_ENGINE_API int swmm_engine_initialize(SWMM_Engine engine)
Initialize the simulation → SWMM_STATE_INITIALIZED.
Definition openswmm_engine_impl.cpp:36
SWMM_ENGINE_API int swmm_engine_step(SWMM_Engine engine, double *elapsed_time)
Advance one explicit timestep. elapsed_time==0 when done.
Definition openswmm_engine_impl.cpp:46
SWMM_ENGINE_API int swmm_events_add(SWMM_Engine engine, double start, double end, int *out_idx)
Append a new event window.
Definition openswmm_engine_impl.cpp:312
SWMM_ENGINE_API int swmm_set_step_begin_callback(SWMM_Engine engine, SWMM_StepBeginCallback callback, void *user_data)
Definition openswmm_engine_impl.cpp:181
Runtime forcing API — inject fluxes with mass-balance tracking.
OpenSWMM Engine — Rain Gage C API.
Hot start file management — transparent C API.
OpenSWMM Engine — Inflows (External, DWF, RDII) C API.
OpenSWMM Engine — Infrastructure (Transects, Streets, Inlets, LIDs) C API.
OpenSWMM Engine — Mass Balance / Continuity C API.
OpenSWMM Engine — Model building and options C API.
OpenSWMM Engine — Node C API.
OpenSWMM Engine — Pollutant / Water Quality C API.
OpenSWMM Engine — Water Quality (Landuse / Buildup / Washoff / Treatment) C API.
OpenSWMM Engine — Spatial Frame C API.
OpenSWMM Engine — Statistics Query C API.
OpenSWMM Engine — Subcatchment C API.
OpenSWMM Engine — Tables (Time Series & Curves) and Patterns C API.