OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
openswmm_links.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
31
32#ifndef OPENSWMM_LINKS_H
33#define OPENSWMM_LINKS_H
34
35#include "openswmm_engine.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
55
104
105/* =========================================================================
106 * Identity
107 * ========================================================================= */
108
115
122SWMM_ENGINE_API int swmm_link_index(SWMM_Engine engine, const char* id);
123
130SWMM_ENGINE_API const char* swmm_link_id(SWMM_Engine engine, int idx);
131
132/* =========================================================================
133 * Creation (BUILDING or OPENED — "editable" states)
134 * ========================================================================= */
135
152SWMM_ENGINE_API int swmm_link_add(SWMM_Engine engine, const char* id, int type);
153
171SWMM_ENGINE_API int swmm_link_pop_last(SWMM_Engine engine, const char* id);
172
173/* =========================================================================
174 * Connectivity (BUILDING or OPENED)
175 * ========================================================================= */
176
186 int from_node_idx, int to_node_idx);
187
195SWMM_ENGINE_API int swmm_link_get_from_node(SWMM_Engine engine, int idx, int* node_idx);
196
204SWMM_ENGINE_API int swmm_link_get_to_node(SWMM_Engine engine, int idx, int* node_idx);
205
221
222/* =========================================================================
223 * Geometry setters (BUILDING or OPENED)
224 * ========================================================================= */
225
233SWMM_ENGINE_API int swmm_link_set_length(SWMM_Engine engine, int idx, double length);
234
242SWMM_ENGINE_API int swmm_link_set_roughness(SWMM_Engine engine, int idx, double n);
243
251SWMM_ENGINE_API int swmm_link_set_offset_up(SWMM_Engine engine, int idx, double offset);
252
260SWMM_ENGINE_API int swmm_link_set_offset_dn(SWMM_Engine engine, int idx, double offset);
261
269SWMM_ENGINE_API int swmm_link_set_initial_flow(SWMM_Engine engine, int idx, double flow);
270
278SWMM_ENGINE_API int swmm_link_set_max_flow(SWMM_Engine engine, int idx, double flow);
279
293SWMM_ENGINE_API int swmm_link_get_initial_flow(SWMM_Engine engine, int idx, double* flow);
294
307SWMM_ENGINE_API int swmm_link_get_max_flow(SWMM_Engine engine, int idx, double* flow);
308
321
335SWMM_ENGINE_API int swmm_link_set_orifice_type(SWMM_Engine engine, int idx, int type);
336
347SWMM_ENGINE_API int swmm_link_get_orifice_type(SWMM_Engine engine, int idx, int* type);
348
371
385SWMM_ENGINE_API int swmm_link_set_weir_type(SWMM_Engine engine, int idx, int type);
386
397SWMM_ENGINE_API int swmm_link_get_weir_type(SWMM_Engine engine, int idx, int* type);
398
424
432
439SWMM_ENGINE_API int swmm_link_get_outlet_rating_type(SWMM_Engine engine, int idx, int* type);
440
453SWMM_ENGINE_API int swmm_link_set_outlet_expon(SWMM_Engine engine, int idx, double expon);
454
461SWMM_ENGINE_API int swmm_link_get_outlet_expon(SWMM_Engine engine, int idx, double* expon);
462
470SWMM_ENGINE_API int swmm_link_set_pump_startup_depth(SWMM_Engine engine, int idx, double depth);
471
473SWMM_ENGINE_API int swmm_link_get_pump_startup_depth(SWMM_Engine engine, int idx, double* depth);
474
482SWMM_ENGINE_API int swmm_link_set_pump_shutoff_depth(SWMM_Engine engine, int idx, double depth);
483
485SWMM_ENGINE_API int swmm_link_get_pump_shutoff_depth(SWMM_Engine engine, int idx, double* depth);
486
500
502SWMM_ENGINE_API int swmm_link_get_orifice_open_close_rate(SWMM_Engine engine, int idx, double* rate);
503
504/* =========================================================================
505 * Cross-section (BUILDING or OPENED)
506 * ========================================================================= */
507
524 int shape, double geom1, double geom2,
525 double geom3, double geom4);
526
539 int* shape, double* geom1, double* geom2,
540 double* geom3, double* geom4);
541
542/* =========================================================================
543 * Geometry getters
544 * ========================================================================= */
545
553SWMM_ENGINE_API int swmm_link_get_type(SWMM_Engine engine, int idx, int* type);
554
562SWMM_ENGINE_API int swmm_link_get_length(SWMM_Engine engine, int idx, double* length);
563
571SWMM_ENGINE_API int swmm_link_get_roughness(SWMM_Engine engine, int idx, double* n);
572
573/* =========================================================================
574 * Hydraulic state getters/setters
575 * ========================================================================= */
576
584SWMM_ENGINE_API int swmm_link_get_flow(SWMM_Engine engine, int idx, double* flow);
585
593SWMM_ENGINE_API int swmm_link_set_flow(SWMM_Engine engine, int idx, double flow);
594
602SWMM_ENGINE_API int swmm_link_get_depth(SWMM_Engine engine, int idx, double* depth);
603
611SWMM_ENGINE_API int swmm_link_get_velocity(SWMM_Engine engine, int idx, double* velocity);
612
620SWMM_ENGINE_API int swmm_link_get_capacity(SWMM_Engine engine, int idx, double* capacity);
621
629SWMM_ENGINE_API int swmm_link_get_volume(SWMM_Engine engine, int idx, double* volume);
630
642SWMM_ENGINE_API int swmm_link_get_slot_volume(SWMM_Engine engine, int idx, double* volume);
643
644/* --- Runtime forcing (RUNNING state only) --- */
645
652SWMM_ENGINE_API int swmm_link_set_control_setting(SWMM_Engine engine, int idx, double setting);
653
655SWMM_ENGINE_API int swmm_link_get_control_setting(SWMM_Engine engine, int idx, double* setting);
656
666SWMM_ENGINE_API int swmm_link_set_target_setting(SWMM_Engine engine, int idx, double setting);
667
669SWMM_ENGINE_API int swmm_link_get_target_setting(SWMM_Engine engine, int idx, double* setting);
670
678SWMM_ENGINE_API int swmm_link_set_closed(SWMM_Engine engine, int idx, int closed);
679
681SWMM_ENGINE_API int swmm_link_get_closed(SWMM_Engine engine, int idx, int* closed);
682
683/* =========================================================================
684 * Pump Link API
685 * ========================================================================= */
686
698SWMM_ENGINE_API int swmm_link_set_pump_curve(SWMM_Engine engine, int idx, int curve_idx);
699
707SWMM_ENGINE_API int swmm_link_get_pump_curve(SWMM_Engine engine, int idx, int* curve_idx);
708
717
725SWMM_ENGINE_API int swmm_link_get_pump_init_state(SWMM_Engine engine, int idx, int* on);
726
727/* =========================================================================
728 * Weir Link API
729 * ========================================================================= */
730
738SWMM_ENGINE_API int swmm_link_set_crest_height(SWMM_Engine engine, int idx, double h);
739
747SWMM_ENGINE_API int swmm_link_get_crest_height(SWMM_Engine engine, int idx, double* h);
748
756SWMM_ENGINE_API int swmm_link_set_discharge_coeff(SWMM_Engine engine, int idx, double cd);
757
765SWMM_ENGINE_API int swmm_link_get_discharge_coeff(SWMM_Engine engine, int idx, double* cd);
766
778SWMM_ENGINE_API int swmm_link_set_end_contractions(SWMM_Engine engine, int idx, double n);
779
787SWMM_ENGINE_API int swmm_link_get_end_contractions(SWMM_Engine engine, int idx, double* n);
788
789/* =========================================================================
790 * Conduit Loss Coefficients
791 * ========================================================================= */
792
802SWMM_ENGINE_API int swmm_link_set_loss_coeff(SWMM_Engine engine, int idx, double inlet, double outlet, double avg);
803
813SWMM_ENGINE_API int swmm_link_get_loss_coeff(SWMM_Engine engine, int idx, double* inlet, double* outlet, double* avg);
814
825SWMM_ENGINE_API int swmm_link_set_flap_gate(SWMM_Engine engine, int idx, int has_gate);
826
834SWMM_ENGINE_API int swmm_link_get_flap_gate(SWMM_Engine engine, int idx, int* has_gate);
835
843SWMM_ENGINE_API int swmm_link_set_seep_rate(SWMM_Engine engine, int idx, double rate);
844
852SWMM_ENGINE_API int swmm_link_get_seep_rate(SWMM_Engine engine, int idx, double* rate);
853
865SWMM_ENGINE_API int swmm_link_set_culvert_code(SWMM_Engine engine, int idx, int code);
866
874SWMM_ENGINE_API int swmm_link_get_culvert_code(SWMM_Engine engine, int idx, int* code);
875
883SWMM_ENGINE_API int swmm_link_set_barrels(SWMM_Engine engine, int idx, int n);
884
892SWMM_ENGINE_API int swmm_link_get_barrels(SWMM_Engine engine, int idx, int* n);
893
901SWMM_ENGINE_API int swmm_link_get_slope(SWMM_Engine engine, int idx, double* slope);
902
910SWMM_ENGINE_API int swmm_link_get_offset_up(SWMM_Engine engine, int idx, double* offset);
911
919SWMM_ENGINE_API int swmm_link_get_offset_dn(SWMM_Engine engine, int idx, double* offset);
920
921/* =========================================================================
922 * Link Statistics
923 * ========================================================================= */
924
932SWMM_ENGINE_API int swmm_link_get_stat_max_flow(SWMM_Engine engine, int idx, double* val);
933
941SWMM_ENGINE_API int swmm_link_get_stat_max_velocity(SWMM_Engine engine, int idx, double* val);
942
950SWMM_ENGINE_API int swmm_link_get_stat_max_filling(SWMM_Engine engine, int idx, double* val);
951
957SWMM_ENGINE_API int swmm_link_get_stat_peak_slot_share(SWMM_Engine engine, int idx, double* val);
958
965SWMM_ENGINE_API int swmm_link_get_stat_slot_share(SWMM_Engine engine, int idx, double* val);
966
974SWMM_ENGINE_API int swmm_link_get_stat_vol_flow(SWMM_Engine engine, int idx, double* val);
975
983SWMM_ENGINE_API int swmm_link_get_stat_surcharge_time(SWMM_Engine engine, int idx, double* val);
984
985/* =========================================================================
986 * Water quality
987 * ========================================================================= */
988
997SWMM_ENGINE_API int swmm_link_get_quality(SWMM_Engine engine, int link_idx,
998 int pollutant_idx, double* conc);
999
1000/* =========================================================================
1001 * Bulk access
1002 * ========================================================================= */
1003
1011SWMM_ENGINE_API int swmm_link_get_flows_bulk(SWMM_Engine engine, double* buf, int count);
1012
1020SWMM_ENGINE_API int swmm_link_get_depths_bulk(SWMM_Engine engine, double* buf, int count);
1021
1029SWMM_ENGINE_API int swmm_link_set_flows_bulk(SWMM_Engine engine, const double* buf, int count);
1030
1039SWMM_ENGINE_API int swmm_link_get_quality_bulk(SWMM_Engine engine, int pollutant_idx,
1040 double* buf, int count);
1041
1042/* =========================================================================
1043 * Phase 3 bulk getters — added in OpenSWMM 6.0.0 to eliminate the N
1044 * round-trip cost of per-link scalar accessors in whole-network consumers
1045 * (notably the MCP server's get_link_info(all) path and post-run reports).
1046 *
1047 * Note: velocities, capacities, and hydraulic powers are *derived* values
1048 * (depth/flow ratios; flow * head loss). Their bulk variants do a per-link
1049 * loop in C — there is no SoA column to memcpy from — but they still
1050 * eliminate the C ABI crossing overhead and any Python-level looping cost.
1051 * ========================================================================= */
1052
1066SWMM_ENGINE_API int swmm_link_get_velocities_bulk(SWMM_Engine engine, double* buf, int count);
1067
1074SWMM_ENGINE_API int swmm_link_get_capacities_bulk(SWMM_Engine engine, double* buf, int count);
1075
1081SWMM_ENGINE_API int swmm_link_get_volumes_bulk(SWMM_Engine engine, double* buf, int count);
1082
1088SWMM_ENGINE_API int swmm_link_get_control_settings_bulk(SWMM_Engine engine, double* buf, int count);
1089
1095SWMM_ENGINE_API int swmm_link_get_target_settings_bulk(SWMM_Engine engine, double* buf, int count);
1096
1106SWMM_ENGINE_API int swmm_link_get_hyd_powers_bulk(SWMM_Engine engine, double* buf, int count);
1107
1129 char* buf,
1130 int stride,
1131 int count);
1132
1133/* =========================================================================
1134 * Pump utilization statistics
1135 * ========================================================================= */
1136
1138SWMM_ENGINE_API int swmm_link_get_stat_pump_cycles(SWMM_Engine engine, int idx, int* cycles);
1139
1141SWMM_ENGINE_API int swmm_link_get_stat_pump_on_time(SWMM_Engine engine, int idx, double* seconds);
1142
1144SWMM_ENGINE_API int swmm_link_get_stat_pump_volume(SWMM_Engine engine, int idx, double* volume);
1145
1203 int* cycles,
1204 double* on_time,
1205 double* volume,
1206 int count);
1207
1208/* =========================================================================
1209 * Hydraulic power
1210 * ========================================================================= */
1211
1213SWMM_ENGINE_API int swmm_link_get_hyd_power(SWMM_Engine engine, int idx, double* power);
1214
1218SWMM_ENGINE_API int swmm_link_rename(SWMM_Engine engine, int idx, const char* newId);
1219
1220/* =========================================================================
1221 * Tag — free-form string label from the INP `[TAGS]` section
1222 * ========================================================================= */
1223
1226 char* buf, int buflen);
1227
1230 const char* tag);
1231
1232#ifdef __cplusplus
1233} /* extern "C" */
1234#endif
1235
1236#endif /* OPENSWMM_LINKS_H */
#define SWMM_ENGINE_API
Definition openswmm_2d.h:53
void * SWMM_Engine
Opaque handle to an OpenSWMM Engine instance.
Definition openswmm_callbacks.h:51
OpenSWMM Engine — primary transparent C API (master header).