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
118
119/* =========================================================================
120 * Identity
121 * ========================================================================= */
122
129
136SWMM_ENGINE_API int swmm_link_index(SWMM_Engine engine, const char* id);
137
148SWMM_ENGINE_API const char* swmm_link_id(SWMM_Engine engine, int idx);
149
150/* =========================================================================
151 * Creation (BUILDING or OPENED — "editable" states)
152 * ========================================================================= */
153
174SWMM_ENGINE_API int swmm_link_add(SWMM_Engine engine, const char* id, int type);
175
197SWMM_ENGINE_API int swmm_link_pop_last(SWMM_Engine engine, const char* id);
198
199/* =========================================================================
200 * Connectivity (BUILDING or OPENED)
201 * ========================================================================= */
202
217SWMM_ENGINE_API int swmm_link_set_nodes(SWMM_Engine engine, int idx, int from_node_idx,
218 int to_node_idx);
219
231SWMM_ENGINE_API int swmm_link_get_from_node(SWMM_Engine engine, int idx, int* node_idx);
232
244SWMM_ENGINE_API int swmm_link_get_to_node(SWMM_Engine engine, int idx, int* node_idx);
245
265
266/* =========================================================================
267 * Geometry setters (BUILDING or OPENED)
268 * ========================================================================= */
269
281SWMM_ENGINE_API int swmm_link_set_length(SWMM_Engine engine, int idx, double length);
282
294SWMM_ENGINE_API int swmm_link_set_roughness(SWMM_Engine engine, int idx, double n);
295
309SWMM_ENGINE_API int swmm_link_set_offset_up(SWMM_Engine engine, int idx, double offset);
310
324SWMM_ENGINE_API int swmm_link_set_offset_dn(SWMM_Engine engine, int idx, double offset);
325
340SWMM_ENGINE_API int swmm_link_set_initial_flow(SWMM_Engine engine, int idx, double flow);
341
353SWMM_ENGINE_API int swmm_link_set_max_flow(SWMM_Engine engine, int idx, double flow);
354
372SWMM_ENGINE_API int swmm_link_get_initial_flow(SWMM_Engine engine, int idx, double* flow);
373
390SWMM_ENGINE_API int swmm_link_get_max_flow(SWMM_Engine engine, int idx, double* flow);
391
404
422SWMM_ENGINE_API int swmm_link_set_orifice_type(SWMM_Engine engine, int idx, int type);
423
438SWMM_ENGINE_API int swmm_link_get_orifice_type(SWMM_Engine engine, int idx, int* type);
439
462
480SWMM_ENGINE_API int swmm_link_set_weir_type(SWMM_Engine engine, int idx, int type);
481
496SWMM_ENGINE_API int swmm_link_get_weir_type(SWMM_Engine engine, int idx, int* type);
497
523
538
549SWMM_ENGINE_API int swmm_link_get_outlet_rating_type(SWMM_Engine engine, int idx, int* type);
550
564SWMM_ENGINE_API int swmm_link_set_outlet_expon(SWMM_Engine engine, int idx, double expon);
565
576SWMM_ENGINE_API int swmm_link_get_outlet_expon(SWMM_Engine engine, int idx, double* expon);
577
591SWMM_ENGINE_API int swmm_link_set_pump_startup_depth(SWMM_Engine engine, int idx, double depth);
592
602SWMM_ENGINE_API int swmm_link_get_pump_startup_depth(SWMM_Engine engine, int idx, double* depth);
603
617SWMM_ENGINE_API int swmm_link_set_pump_shutoff_depth(SWMM_Engine engine, int idx, double depth);
618
628SWMM_ENGINE_API int swmm_link_get_pump_shutoff_depth(SWMM_Engine engine, int idx, double* depth);
629
644
657 double* rate);
658
659/* =========================================================================
660 * Cross-section (BUILDING or OPENED)
661 * ========================================================================= */
662
685SWMM_ENGINE_API int swmm_link_set_xsect(SWMM_Engine engine, int idx, int shape, double geom1,
686 double geom2, double geom3, double geom4);
687
709SWMM_ENGINE_API int swmm_link_get_xsect(SWMM_Engine engine, int idx, int* shape, double* geom1,
710 double* geom2, double* geom3, double* geom4);
711
712/* =========================================================================
713 * Geometry getters
714 * ========================================================================= */
715
727SWMM_ENGINE_API int swmm_link_get_type(SWMM_Engine engine, int idx, int* type);
728
740SWMM_ENGINE_API int swmm_link_get_length(SWMM_Engine engine, int idx, double* length);
741
753SWMM_ENGINE_API int swmm_link_get_roughness(SWMM_Engine engine, int idx, double* n);
754
755/* =========================================================================
756 * Hydraulic state getters/setters
757 * ========================================================================= */
758
770SWMM_ENGINE_API int swmm_link_get_flow(SWMM_Engine engine, int idx, double* flow);
771
783SWMM_ENGINE_API int swmm_link_set_flow(SWMM_Engine engine, int idx, double flow);
784
796SWMM_ENGINE_API int swmm_link_get_depth(SWMM_Engine engine, int idx, double* depth);
797
809SWMM_ENGINE_API int swmm_link_get_velocity(SWMM_Engine engine, int idx, double* velocity);
810
823SWMM_ENGINE_API int swmm_link_get_capacity(SWMM_Engine engine, int idx, double* capacity);
824
836SWMM_ENGINE_API int swmm_link_get_volume(SWMM_Engine engine, int idx, double* volume);
837
853SWMM_ENGINE_API int swmm_link_get_slot_volume(SWMM_Engine engine, int idx, double* volume);
854
855/* --- Runtime forcing (RUNNING state only) --- */
856
870SWMM_ENGINE_API int swmm_link_set_control_setting(SWMM_Engine engine, int idx, double setting);
871
880SWMM_ENGINE_API int swmm_link_get_control_setting(SWMM_Engine engine, int idx, double* setting);
881
895SWMM_ENGINE_API int swmm_link_set_target_setting(SWMM_Engine engine, int idx, double setting);
896
905SWMM_ENGINE_API int swmm_link_get_target_setting(SWMM_Engine engine, int idx, double* setting);
906
918SWMM_ENGINE_API int swmm_link_set_closed(SWMM_Engine engine, int idx, int closed);
919
928SWMM_ENGINE_API int swmm_link_get_closed(SWMM_Engine engine, int idx, int* closed);
929
930/* =========================================================================
931 * Pump Link API
932 * ========================================================================= */
933
949SWMM_ENGINE_API int swmm_link_set_pump_curve(SWMM_Engine engine, int idx, int curve_idx);
950
962SWMM_ENGINE_API int swmm_link_get_pump_curve(SWMM_Engine engine, int idx, int* curve_idx);
963
977
989SWMM_ENGINE_API int swmm_link_get_pump_init_state(SWMM_Engine engine, int idx, int* on);
990
991/* =========================================================================
992 * Weir Link API
993 * ========================================================================= */
994
1006SWMM_ENGINE_API int swmm_link_set_crest_height(SWMM_Engine engine, int idx, double h);
1007
1019SWMM_ENGINE_API int swmm_link_get_crest_height(SWMM_Engine engine, int idx, double* h);
1020
1032SWMM_ENGINE_API int swmm_link_set_discharge_coeff(SWMM_Engine engine, int idx, double cd);
1033
1045SWMM_ENGINE_API int swmm_link_get_discharge_coeff(SWMM_Engine engine, int idx, double* cd);
1046
1062SWMM_ENGINE_API int swmm_link_set_end_contractions(SWMM_Engine engine, int idx, double n);
1063
1075SWMM_ENGINE_API int swmm_link_get_end_contractions(SWMM_Engine engine, int idx, double* n);
1076
1077/* =========================================================================
1078 * Conduit Loss Coefficients
1079 * ========================================================================= */
1080
1094SWMM_ENGINE_API int swmm_link_set_loss_coeff(SWMM_Engine engine, int idx, double inlet,
1095 double outlet, double avg);
1096
1111SWMM_ENGINE_API int swmm_link_get_loss_coeff(SWMM_Engine engine, int idx, double* inlet,
1112 double* outlet, double* avg);
1113
1128SWMM_ENGINE_API int swmm_link_set_flap_gate(SWMM_Engine engine, int idx, int has_gate);
1129
1141SWMM_ENGINE_API int swmm_link_get_flap_gate(SWMM_Engine engine, int idx, int* has_gate);
1142
1154SWMM_ENGINE_API int swmm_link_set_seep_rate(SWMM_Engine engine, int idx, double rate);
1155
1167SWMM_ENGINE_API int swmm_link_get_seep_rate(SWMM_Engine engine, int idx, double* rate);
1168
1184SWMM_ENGINE_API int swmm_link_set_culvert_code(SWMM_Engine engine, int idx, int code);
1185
1197SWMM_ENGINE_API int swmm_link_get_culvert_code(SWMM_Engine engine, int idx, int* code);
1198
1210SWMM_ENGINE_API int swmm_link_set_barrels(SWMM_Engine engine, int idx, int n);
1211
1223SWMM_ENGINE_API int swmm_link_get_barrels(SWMM_Engine engine, int idx, int* n);
1224
1236SWMM_ENGINE_API int swmm_link_get_slope(SWMM_Engine engine, int idx, double* slope);
1237
1250SWMM_ENGINE_API int swmm_link_get_offset_up(SWMM_Engine engine, int idx, double* offset);
1251
1264SWMM_ENGINE_API int swmm_link_get_offset_dn(SWMM_Engine engine, int idx, double* offset);
1265
1266/* =========================================================================
1267 * Link Statistics
1268 * ========================================================================= */
1269
1281SWMM_ENGINE_API int swmm_link_get_stat_max_flow(SWMM_Engine engine, int idx, double* val);
1282
1294SWMM_ENGINE_API int swmm_link_get_stat_max_velocity(SWMM_Engine engine, int idx, double* val);
1295
1307SWMM_ENGINE_API int swmm_link_get_stat_max_filling(SWMM_Engine engine, int idx, double* val);
1308
1319SWMM_ENGINE_API int swmm_link_get_stat_peak_slot_share(SWMM_Engine engine, int idx, double* val);
1320
1332SWMM_ENGINE_API int swmm_link_get_stat_slot_share(SWMM_Engine engine, int idx, double* val);
1333
1345SWMM_ENGINE_API int swmm_link_get_stat_vol_flow(SWMM_Engine engine, int idx, double* val);
1346
1358SWMM_ENGINE_API int swmm_link_get_stat_surcharge_time(SWMM_Engine engine, int idx, double* val);
1359
1360/* =========================================================================
1361 * Water quality
1362 * ========================================================================= */
1363
1376SWMM_ENGINE_API int swmm_link_get_quality(SWMM_Engine engine, int link_idx, int pollutant_idx,
1377 double* conc);
1378
1379/* =========================================================================
1380 * Bulk access
1381 * ========================================================================= */
1382
1394SWMM_ENGINE_API int swmm_link_get_flows_bulk(SWMM_Engine engine, double* buf, int count);
1395
1407SWMM_ENGINE_API int swmm_link_get_depths_bulk(SWMM_Engine engine, double* buf, int count);
1408
1421SWMM_ENGINE_API int swmm_link_set_flows_bulk(SWMM_Engine engine, const double* buf, int count);
1422
1436SWMM_ENGINE_API int swmm_link_get_quality_bulk(SWMM_Engine engine, int pollutant_idx, double* buf,
1437 int count);
1438
1439/* =========================================================================
1440 * Phase 3 bulk getters — added in OpenSWMM 6.0.0 to eliminate the N
1441 * round-trip cost of per-link scalar accessors in whole-network consumers
1442 * (notably the MCP server's get_link_info(all) path and post-run reports).
1443 *
1444 * Note: velocities, capacities, and hydraulic powers are *derived* values
1445 * (depth/flow ratios; flow * head loss). Their bulk variants do a per-link
1446 * loop in C — there is no SoA column to memcpy from — but they still
1447 * eliminate the C ABI crossing overhead and any Python-level looping cost.
1448 * ========================================================================= */
1449
1464SWMM_ENGINE_API int swmm_link_get_velocities_bulk(SWMM_Engine engine, double* buf, int count);
1465
1479SWMM_ENGINE_API int swmm_link_get_capacities_bulk(SWMM_Engine engine, double* buf, int count);
1480
1493SWMM_ENGINE_API int swmm_link_get_volumes_bulk(SWMM_Engine engine, double* buf, int count);
1494
1507SWMM_ENGINE_API int swmm_link_get_control_settings_bulk(SWMM_Engine engine, double* buf, int count);
1508
1521SWMM_ENGINE_API int swmm_link_get_target_settings_bulk(SWMM_Engine engine, double* buf, int count);
1522
1537SWMM_ENGINE_API int swmm_link_get_hyd_powers_bulk(SWMM_Engine engine, double* buf, int count);
1538
1562SWMM_ENGINE_API int swmm_link_get_ids_bulk(SWMM_Engine engine, char* buf, int stride, int count);
1563
1564/* =========================================================================
1565 * Pump utilization statistics
1566 * ========================================================================= */
1567
1578SWMM_ENGINE_API int swmm_link_get_stat_pump_cycles(SWMM_Engine engine, int idx, int* cycles);
1579
1590SWMM_ENGINE_API int swmm_link_get_stat_pump_on_time(SWMM_Engine engine, int idx, double* seconds);
1591
1602SWMM_ENGINE_API int swmm_link_get_stat_pump_volume(SWMM_Engine engine, int idx, double* volume);
1603
1666SWMM_ENGINE_API int swmm_link_get_pump_stats_bulk(SWMM_Engine engine, int* cycles, double* on_time,
1667 double* volume, int count);
1668
1669/* =========================================================================
1670 * Hydraulic power
1671 * ========================================================================= */
1672
1684SWMM_ENGINE_API int swmm_link_get_hyd_power(SWMM_Engine engine, int idx, double* power);
1685
1698SWMM_ENGINE_API int swmm_link_rename(SWMM_Engine engine, int idx, const char* newId);
1699
1700/* =========================================================================
1701 * Tag — free-form string label from the INP `[TAGS]` section
1702 * ========================================================================= */
1703
1715SWMM_ENGINE_API int swmm_link_get_tag(SWMM_Engine engine, int idx, char* buf, int buflen);
1716
1727SWMM_ENGINE_API int swmm_link_set_tag(SWMM_Engine engine, int idx, const char* tag);
1728
1729#ifdef __cplusplus
1730} /* extern "C" */
1731#endif
1732
1733#endif /* OPENSWMM_LINKS_H */
#define SWMM_ENGINE_API
Definition openswmm_2d.h:62
void * SWMM_Engine
Opaque handle to an OpenSWMM Engine instance.
Definition openswmm_callbacks.h:55
OpenSWMM Engine — primary transparent C API (master header).