OpenSWMM Engine  6.0.0-alpha.3
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.3)
Loading...
Searching...
No Matches
openswmm_links.h
Go to the documentation of this file.
1
15
16#ifndef OPENSWMM_LINKS_H
17#define OPENSWMM_LINKS_H
18
19#include "openswmm_engine.h"
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
39
88
89/* =========================================================================
90 * Identity
91 * ========================================================================= */
92
99
106SWMM_ENGINE_API int swmm_link_index(SWMM_Engine engine, const char* id);
107
114SWMM_ENGINE_API const char* swmm_link_id(SWMM_Engine engine, int idx);
115
116/* =========================================================================
117 * Creation (BUILDING or OPENED — "editable" states)
118 * ========================================================================= */
119
136SWMM_ENGINE_API int swmm_link_add(SWMM_Engine engine, const char* id, int type);
137
155SWMM_ENGINE_API int swmm_link_pop_last(SWMM_Engine engine, const char* id);
156
157/* =========================================================================
158 * Connectivity (BUILDING or OPENED)
159 * ========================================================================= */
160
170 int from_node_idx, int to_node_idx);
171
179SWMM_ENGINE_API int swmm_link_get_from_node(SWMM_Engine engine, int idx, int* node_idx);
180
188SWMM_ENGINE_API int swmm_link_get_to_node(SWMM_Engine engine, int idx, int* node_idx);
189
190/* =========================================================================
191 * Geometry setters (BUILDING or OPENED)
192 * ========================================================================= */
193
201SWMM_ENGINE_API int swmm_link_set_length(SWMM_Engine engine, int idx, double length);
202
210SWMM_ENGINE_API int swmm_link_set_roughness(SWMM_Engine engine, int idx, double n);
211
219SWMM_ENGINE_API int swmm_link_set_offset_up(SWMM_Engine engine, int idx, double offset);
220
228SWMM_ENGINE_API int swmm_link_set_offset_dn(SWMM_Engine engine, int idx, double offset);
229
237SWMM_ENGINE_API int swmm_link_set_initial_flow(SWMM_Engine engine, int idx, double flow);
238
246SWMM_ENGINE_API int swmm_link_set_max_flow(SWMM_Engine engine, int idx, double flow);
247
261SWMM_ENGINE_API int swmm_link_get_initial_flow(SWMM_Engine engine, int idx, double* flow);
262
275SWMM_ENGINE_API int swmm_link_get_max_flow(SWMM_Engine engine, int idx, double* flow);
276
289
303SWMM_ENGINE_API int swmm_link_set_orifice_type(SWMM_Engine engine, int idx, int type);
304
315SWMM_ENGINE_API int swmm_link_get_orifice_type(SWMM_Engine engine, int idx, int* type);
316
339
353SWMM_ENGINE_API int swmm_link_set_weir_type(SWMM_Engine engine, int idx, int type);
354
365SWMM_ENGINE_API int swmm_link_get_weir_type(SWMM_Engine engine, int idx, int* type);
366
392
400
407SWMM_ENGINE_API int swmm_link_get_outlet_rating_type(SWMM_Engine engine, int idx, int* type);
408
421SWMM_ENGINE_API int swmm_link_set_outlet_expon(SWMM_Engine engine, int idx, double expon);
422
429SWMM_ENGINE_API int swmm_link_get_outlet_expon(SWMM_Engine engine, int idx, double* expon);
430
438SWMM_ENGINE_API int swmm_link_set_pump_startup_depth(SWMM_Engine engine, int idx, double depth);
439
441SWMM_ENGINE_API int swmm_link_get_pump_startup_depth(SWMM_Engine engine, int idx, double* depth);
442
450SWMM_ENGINE_API int swmm_link_set_pump_shutoff_depth(SWMM_Engine engine, int idx, double depth);
451
453SWMM_ENGINE_API int swmm_link_get_pump_shutoff_depth(SWMM_Engine engine, int idx, double* depth);
454
468
470SWMM_ENGINE_API int swmm_link_get_orifice_open_close_rate(SWMM_Engine engine, int idx, double* rate);
471
472/* =========================================================================
473 * Cross-section (BUILDING or OPENED)
474 * ========================================================================= */
475
492 int shape, double geom1, double geom2,
493 double geom3, double geom4);
494
507 int* shape, double* geom1, double* geom2,
508 double* geom3, double* geom4);
509
510/* =========================================================================
511 * Geometry getters
512 * ========================================================================= */
513
521SWMM_ENGINE_API int swmm_link_get_type(SWMM_Engine engine, int idx, int* type);
522
530SWMM_ENGINE_API int swmm_link_get_length(SWMM_Engine engine, int idx, double* length);
531
539SWMM_ENGINE_API int swmm_link_get_roughness(SWMM_Engine engine, int idx, double* n);
540
541/* =========================================================================
542 * Hydraulic state getters/setters
543 * ========================================================================= */
544
552SWMM_ENGINE_API int swmm_link_get_flow(SWMM_Engine engine, int idx, double* flow);
553
561SWMM_ENGINE_API int swmm_link_set_flow(SWMM_Engine engine, int idx, double flow);
562
570SWMM_ENGINE_API int swmm_link_get_depth(SWMM_Engine engine, int idx, double* depth);
571
579SWMM_ENGINE_API int swmm_link_get_velocity(SWMM_Engine engine, int idx, double* velocity);
580
588SWMM_ENGINE_API int swmm_link_get_capacity(SWMM_Engine engine, int idx, double* capacity);
589
597SWMM_ENGINE_API int swmm_link_get_volume(SWMM_Engine engine, int idx, double* volume);
598
599/* --- Runtime forcing (RUNNING state only) --- */
600
607SWMM_ENGINE_API int swmm_link_set_control_setting(SWMM_Engine engine, int idx, double setting);
608
610SWMM_ENGINE_API int swmm_link_get_control_setting(SWMM_Engine engine, int idx, double* setting);
611
621SWMM_ENGINE_API int swmm_link_set_target_setting(SWMM_Engine engine, int idx, double setting);
622
624SWMM_ENGINE_API int swmm_link_get_target_setting(SWMM_Engine engine, int idx, double* setting);
625
633SWMM_ENGINE_API int swmm_link_set_closed(SWMM_Engine engine, int idx, int closed);
634
636SWMM_ENGINE_API int swmm_link_get_closed(SWMM_Engine engine, int idx, int* closed);
637
638/* =========================================================================
639 * Pump Link API
640 * ========================================================================= */
641
653SWMM_ENGINE_API int swmm_link_set_pump_curve(SWMM_Engine engine, int idx, int curve_idx);
654
662SWMM_ENGINE_API int swmm_link_get_pump_curve(SWMM_Engine engine, int idx, int* curve_idx);
663
672
680SWMM_ENGINE_API int swmm_link_get_pump_init_state(SWMM_Engine engine, int idx, int* on);
681
682/* =========================================================================
683 * Weir Link API
684 * ========================================================================= */
685
693SWMM_ENGINE_API int swmm_link_set_crest_height(SWMM_Engine engine, int idx, double h);
694
702SWMM_ENGINE_API int swmm_link_get_crest_height(SWMM_Engine engine, int idx, double* h);
703
711SWMM_ENGINE_API int swmm_link_set_discharge_coeff(SWMM_Engine engine, int idx, double cd);
712
720SWMM_ENGINE_API int swmm_link_get_discharge_coeff(SWMM_Engine engine, int idx, double* cd);
721
733SWMM_ENGINE_API int swmm_link_set_end_contractions(SWMM_Engine engine, int idx, double n);
734
742SWMM_ENGINE_API int swmm_link_get_end_contractions(SWMM_Engine engine, int idx, double* n);
743
744/* =========================================================================
745 * Conduit Loss Coefficients
746 * ========================================================================= */
747
757SWMM_ENGINE_API int swmm_link_set_loss_coeff(SWMM_Engine engine, int idx, double inlet, double outlet, double avg);
758
768SWMM_ENGINE_API int swmm_link_get_loss_coeff(SWMM_Engine engine, int idx, double* inlet, double* outlet, double* avg);
769
780SWMM_ENGINE_API int swmm_link_set_flap_gate(SWMM_Engine engine, int idx, int has_gate);
781
789SWMM_ENGINE_API int swmm_link_get_flap_gate(SWMM_Engine engine, int idx, int* has_gate);
790
798SWMM_ENGINE_API int swmm_link_set_seep_rate(SWMM_Engine engine, int idx, double rate);
799
807SWMM_ENGINE_API int swmm_link_get_seep_rate(SWMM_Engine engine, int idx, double* rate);
808
820SWMM_ENGINE_API int swmm_link_set_culvert_code(SWMM_Engine engine, int idx, int code);
821
829SWMM_ENGINE_API int swmm_link_get_culvert_code(SWMM_Engine engine, int idx, int* code);
830
838SWMM_ENGINE_API int swmm_link_set_barrels(SWMM_Engine engine, int idx, int n);
839
847SWMM_ENGINE_API int swmm_link_get_barrels(SWMM_Engine engine, int idx, int* n);
848
856SWMM_ENGINE_API int swmm_link_get_slope(SWMM_Engine engine, int idx, double* slope);
857
865SWMM_ENGINE_API int swmm_link_get_offset_up(SWMM_Engine engine, int idx, double* offset);
866
874SWMM_ENGINE_API int swmm_link_get_offset_dn(SWMM_Engine engine, int idx, double* offset);
875
876/* =========================================================================
877 * Link Statistics
878 * ========================================================================= */
879
887SWMM_ENGINE_API int swmm_link_get_stat_max_flow(SWMM_Engine engine, int idx, double* val);
888
896SWMM_ENGINE_API int swmm_link_get_stat_max_velocity(SWMM_Engine engine, int idx, double* val);
897
905SWMM_ENGINE_API int swmm_link_get_stat_max_filling(SWMM_Engine engine, int idx, double* val);
906
914SWMM_ENGINE_API int swmm_link_get_stat_vol_flow(SWMM_Engine engine, int idx, double* val);
915
923SWMM_ENGINE_API int swmm_link_get_stat_surcharge_time(SWMM_Engine engine, int idx, double* val);
924
925/* =========================================================================
926 * Water quality
927 * ========================================================================= */
928
937SWMM_ENGINE_API int swmm_link_get_quality(SWMM_Engine engine, int link_idx,
938 int pollutant_idx, double* conc);
939
940/* =========================================================================
941 * Bulk access
942 * ========================================================================= */
943
951SWMM_ENGINE_API int swmm_link_get_flows_bulk(SWMM_Engine engine, double* buf, int count);
952
960SWMM_ENGINE_API int swmm_link_get_depths_bulk(SWMM_Engine engine, double* buf, int count);
961
969SWMM_ENGINE_API int swmm_link_set_flows_bulk(SWMM_Engine engine, const double* buf, int count);
970
979SWMM_ENGINE_API int swmm_link_get_quality_bulk(SWMM_Engine engine, int pollutant_idx,
980 double* buf, int count);
981
982/* =========================================================================
983 * Phase 3 bulk getters — added in OpenSWMM 6.0.0 to eliminate the N
984 * round-trip cost of per-link scalar accessors in whole-network consumers
985 * (notably the MCP server's get_link_info(all) path and post-run reports).
986 *
987 * Note: velocities, capacities, and hydraulic powers are *derived* values
988 * (depth/flow ratios; flow * head loss). Their bulk variants do a per-link
989 * loop in C — there is no SoA column to memcpy from — but they still
990 * eliminate the C ABI crossing overhead and any Python-level looping cost.
991 * ========================================================================= */
992
1006SWMM_ENGINE_API int swmm_link_get_velocities_bulk(SWMM_Engine engine, double* buf, int count);
1007
1014SWMM_ENGINE_API int swmm_link_get_capacities_bulk(SWMM_Engine engine, double* buf, int count);
1015
1021SWMM_ENGINE_API int swmm_link_get_volumes_bulk(SWMM_Engine engine, double* buf, int count);
1022
1028SWMM_ENGINE_API int swmm_link_get_control_settings_bulk(SWMM_Engine engine, double* buf, int count);
1029
1035SWMM_ENGINE_API int swmm_link_get_target_settings_bulk(SWMM_Engine engine, double* buf, int count);
1036
1046SWMM_ENGINE_API int swmm_link_get_hyd_powers_bulk(SWMM_Engine engine, double* buf, int count);
1047
1069 char* buf,
1070 int stride,
1071 int count);
1072
1073/* =========================================================================
1074 * Pump utilization statistics
1075 * ========================================================================= */
1076
1078SWMM_ENGINE_API int swmm_link_get_stat_pump_cycles(SWMM_Engine engine, int idx, int* cycles);
1079
1081SWMM_ENGINE_API int swmm_link_get_stat_pump_on_time(SWMM_Engine engine, int idx, double* seconds);
1082
1084SWMM_ENGINE_API int swmm_link_get_stat_pump_volume(SWMM_Engine engine, int idx, double* volume);
1085
1143 int* cycles,
1144 double* on_time,
1145 double* volume,
1146 int count);
1147
1148/* =========================================================================
1149 * Hydraulic power
1150 * ========================================================================= */
1151
1153SWMM_ENGINE_API int swmm_link_get_hyd_power(SWMM_Engine engine, int idx, double* power);
1154
1158SWMM_ENGINE_API int swmm_link_rename(SWMM_Engine engine, int idx, const char* newId);
1159
1160/* =========================================================================
1161 * Tag — free-form string label from the INP `[TAGS]` section
1162 * ========================================================================= */
1163
1166 char* buf, int buflen);
1167
1170 const char* tag);
1171
1172#ifdef __cplusplus
1173} /* extern "C" */
1174#endif
1175
1176#endif /* OPENSWMM_LINKS_H */
#define SWMM_ENGINE_API
Definition openswmm_2d.h:37
void * SWMM_Engine
Opaque handle to an OpenSWMM Engine instance.
Definition openswmm_callbacks.h:35
OpenSWMM Engine — primary transparent C API (master header).