OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
openswmm_links.h
Go to the documentation of this file.
1
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
69
70/* =========================================================================
71 * Identity
72 * ========================================================================= */
73
80
87SWMM_ENGINE_API int swmm_link_index(SWMM_Engine engine, const char* id);
88
95SWMM_ENGINE_API const char* swmm_link_id(SWMM_Engine engine, int idx);
96
97/* =========================================================================
98 * Creation (BUILDING or OPENED — "editable" states)
99 * ========================================================================= */
100
117SWMM_ENGINE_API int swmm_link_add(SWMM_Engine engine, const char* id, int type);
118
136SWMM_ENGINE_API int swmm_link_pop_last(SWMM_Engine engine, const char* id);
137
138/* =========================================================================
139 * Connectivity (BUILDING or OPENED)
140 * ========================================================================= */
141
151 int from_node_idx, int to_node_idx);
152
160SWMM_ENGINE_API int swmm_link_get_from_node(SWMM_Engine engine, int idx, int* node_idx);
161
169SWMM_ENGINE_API int swmm_link_get_to_node(SWMM_Engine engine, int idx, int* node_idx);
170
171/* =========================================================================
172 * Geometry setters (BUILDING or OPENED)
173 * ========================================================================= */
174
182SWMM_ENGINE_API int swmm_link_set_length(SWMM_Engine engine, int idx, double length);
183
191SWMM_ENGINE_API int swmm_link_set_roughness(SWMM_Engine engine, int idx, double n);
192
200SWMM_ENGINE_API int swmm_link_set_offset_up(SWMM_Engine engine, int idx, double offset);
201
209SWMM_ENGINE_API int swmm_link_set_offset_dn(SWMM_Engine engine, int idx, double offset);
210
218SWMM_ENGINE_API int swmm_link_set_initial_flow(SWMM_Engine engine, int idx, double flow);
219
227SWMM_ENGINE_API int swmm_link_set_max_flow(SWMM_Engine engine, int idx, double flow);
228
242SWMM_ENGINE_API int swmm_link_get_initial_flow(SWMM_Engine engine, int idx, double* flow);
243
256SWMM_ENGINE_API int swmm_link_get_max_flow(SWMM_Engine engine, int idx, double* flow);
257
270
284SWMM_ENGINE_API int swmm_link_set_orifice_type(SWMM_Engine engine, int idx, int type);
285
296SWMM_ENGINE_API int swmm_link_get_orifice_type(SWMM_Engine engine, int idx, int* type);
297
320
334SWMM_ENGINE_API int swmm_link_set_weir_type(SWMM_Engine engine, int idx, int type);
335
346SWMM_ENGINE_API int swmm_link_get_weir_type(SWMM_Engine engine, int idx, int* type);
347
373
381
388SWMM_ENGINE_API int swmm_link_get_outlet_rating_type(SWMM_Engine engine, int idx, int* type);
389
402SWMM_ENGINE_API int swmm_link_set_outlet_expon(SWMM_Engine engine, int idx, double expon);
403
410SWMM_ENGINE_API int swmm_link_get_outlet_expon(SWMM_Engine engine, int idx, double* expon);
411
419SWMM_ENGINE_API int swmm_link_set_pump_startup_depth(SWMM_Engine engine, int idx, double depth);
420
422SWMM_ENGINE_API int swmm_link_get_pump_startup_depth(SWMM_Engine engine, int idx, double* depth);
423
431SWMM_ENGINE_API int swmm_link_set_pump_shutoff_depth(SWMM_Engine engine, int idx, double depth);
432
434SWMM_ENGINE_API int swmm_link_get_pump_shutoff_depth(SWMM_Engine engine, int idx, double* depth);
435
449
451SWMM_ENGINE_API int swmm_link_get_orifice_open_close_rate(SWMM_Engine engine, int idx, double* rate);
452
453/* =========================================================================
454 * Cross-section (BUILDING or OPENED)
455 * ========================================================================= */
456
473 int shape, double geom1, double geom2,
474 double geom3, double geom4);
475
488 int* shape, double* geom1, double* geom2,
489 double* geom3, double* geom4);
490
491/* =========================================================================
492 * Geometry getters
493 * ========================================================================= */
494
502SWMM_ENGINE_API int swmm_link_get_type(SWMM_Engine engine, int idx, int* type);
503
511SWMM_ENGINE_API int swmm_link_get_length(SWMM_Engine engine, int idx, double* length);
512
520SWMM_ENGINE_API int swmm_link_get_roughness(SWMM_Engine engine, int idx, double* n);
521
522/* =========================================================================
523 * Hydraulic state getters/setters
524 * ========================================================================= */
525
533SWMM_ENGINE_API int swmm_link_get_flow(SWMM_Engine engine, int idx, double* flow);
534
542SWMM_ENGINE_API int swmm_link_set_flow(SWMM_Engine engine, int idx, double flow);
543
551SWMM_ENGINE_API int swmm_link_get_depth(SWMM_Engine engine, int idx, double* depth);
552
560SWMM_ENGINE_API int swmm_link_get_velocity(SWMM_Engine engine, int idx, double* velocity);
561
569SWMM_ENGINE_API int swmm_link_get_capacity(SWMM_Engine engine, int idx, double* capacity);
570
578SWMM_ENGINE_API int swmm_link_get_volume(SWMM_Engine engine, int idx, double* volume);
579
580/* --- Runtime forcing (RUNNING state only) --- */
581
588SWMM_ENGINE_API int swmm_link_set_control_setting(SWMM_Engine engine, int idx, double setting);
589
591SWMM_ENGINE_API int swmm_link_get_control_setting(SWMM_Engine engine, int idx, double* setting);
592
602SWMM_ENGINE_API int swmm_link_set_target_setting(SWMM_Engine engine, int idx, double setting);
603
605SWMM_ENGINE_API int swmm_link_get_target_setting(SWMM_Engine engine, int idx, double* setting);
606
614SWMM_ENGINE_API int swmm_link_set_closed(SWMM_Engine engine, int idx, int closed);
615
617SWMM_ENGINE_API int swmm_link_get_closed(SWMM_Engine engine, int idx, int* closed);
618
619/* =========================================================================
620 * Pump Link API
621 * ========================================================================= */
622
634SWMM_ENGINE_API int swmm_link_set_pump_curve(SWMM_Engine engine, int idx, int curve_idx);
635
643SWMM_ENGINE_API int swmm_link_get_pump_curve(SWMM_Engine engine, int idx, int* curve_idx);
644
653
661SWMM_ENGINE_API int swmm_link_get_pump_init_state(SWMM_Engine engine, int idx, int* on);
662
663/* =========================================================================
664 * Weir Link API
665 * ========================================================================= */
666
674SWMM_ENGINE_API int swmm_link_set_crest_height(SWMM_Engine engine, int idx, double h);
675
683SWMM_ENGINE_API int swmm_link_get_crest_height(SWMM_Engine engine, int idx, double* h);
684
692SWMM_ENGINE_API int swmm_link_set_discharge_coeff(SWMM_Engine engine, int idx, double cd);
693
701SWMM_ENGINE_API int swmm_link_get_discharge_coeff(SWMM_Engine engine, int idx, double* cd);
702
714SWMM_ENGINE_API int swmm_link_set_end_contractions(SWMM_Engine engine, int idx, double n);
715
723SWMM_ENGINE_API int swmm_link_get_end_contractions(SWMM_Engine engine, int idx, double* n);
724
725/* =========================================================================
726 * Conduit Loss Coefficients
727 * ========================================================================= */
728
738SWMM_ENGINE_API int swmm_link_set_loss_coeff(SWMM_Engine engine, int idx, double inlet, double outlet, double avg);
739
749SWMM_ENGINE_API int swmm_link_get_loss_coeff(SWMM_Engine engine, int idx, double* inlet, double* outlet, double* avg);
750
761SWMM_ENGINE_API int swmm_link_set_flap_gate(SWMM_Engine engine, int idx, int has_gate);
762
770SWMM_ENGINE_API int swmm_link_get_flap_gate(SWMM_Engine engine, int idx, int* has_gate);
771
779SWMM_ENGINE_API int swmm_link_set_seep_rate(SWMM_Engine engine, int idx, double rate);
780
788SWMM_ENGINE_API int swmm_link_get_seep_rate(SWMM_Engine engine, int idx, double* rate);
789
801SWMM_ENGINE_API int swmm_link_set_culvert_code(SWMM_Engine engine, int idx, int code);
802
810SWMM_ENGINE_API int swmm_link_get_culvert_code(SWMM_Engine engine, int idx, int* code);
811
819SWMM_ENGINE_API int swmm_link_set_barrels(SWMM_Engine engine, int idx, int n);
820
828SWMM_ENGINE_API int swmm_link_get_barrels(SWMM_Engine engine, int idx, int* n);
829
837SWMM_ENGINE_API int swmm_link_get_slope(SWMM_Engine engine, int idx, double* slope);
838
846SWMM_ENGINE_API int swmm_link_get_offset_up(SWMM_Engine engine, int idx, double* offset);
847
855SWMM_ENGINE_API int swmm_link_get_offset_dn(SWMM_Engine engine, int idx, double* offset);
856
857/* =========================================================================
858 * Link Statistics
859 * ========================================================================= */
860
868SWMM_ENGINE_API int swmm_link_get_stat_max_flow(SWMM_Engine engine, int idx, double* val);
869
877SWMM_ENGINE_API int swmm_link_get_stat_max_velocity(SWMM_Engine engine, int idx, double* val);
878
886SWMM_ENGINE_API int swmm_link_get_stat_max_filling(SWMM_Engine engine, int idx, double* val);
887
895SWMM_ENGINE_API int swmm_link_get_stat_vol_flow(SWMM_Engine engine, int idx, double* val);
896
904SWMM_ENGINE_API int swmm_link_get_stat_surcharge_time(SWMM_Engine engine, int idx, double* val);
905
906/* =========================================================================
907 * Water quality
908 * ========================================================================= */
909
918SWMM_ENGINE_API int swmm_link_get_quality(SWMM_Engine engine, int link_idx,
919 int pollutant_idx, double* conc);
920
921/* =========================================================================
922 * Bulk access
923 * ========================================================================= */
924
932SWMM_ENGINE_API int swmm_link_get_flows_bulk(SWMM_Engine engine, double* buf, int count);
933
941SWMM_ENGINE_API int swmm_link_get_depths_bulk(SWMM_Engine engine, double* buf, int count);
942
950SWMM_ENGINE_API int swmm_link_set_flows_bulk(SWMM_Engine engine, const double* buf, int count);
951
960SWMM_ENGINE_API int swmm_link_get_quality_bulk(SWMM_Engine engine, int pollutant_idx,
961 double* buf, int count);
962
963/* =========================================================================
964 * Phase 3 bulk getters — added in OpenSWMM 6.0.0 to eliminate the N
965 * round-trip cost of per-link scalar accessors in whole-network consumers
966 * (notably the MCP server's get_link_info(all) path and post-run reports).
967 *
968 * Note: velocities, capacities, and hydraulic powers are *derived* values
969 * (depth/flow ratios; flow * head loss). Their bulk variants do a per-link
970 * loop in C — there is no SoA column to memcpy from — but they still
971 * eliminate the C ABI crossing overhead and any Python-level looping cost.
972 * ========================================================================= */
973
987SWMM_ENGINE_API int swmm_link_get_velocities_bulk(SWMM_Engine engine, double* buf, int count);
988
995SWMM_ENGINE_API int swmm_link_get_capacities_bulk(SWMM_Engine engine, double* buf, int count);
996
1002SWMM_ENGINE_API int swmm_link_get_volumes_bulk(SWMM_Engine engine, double* buf, int count);
1003
1009SWMM_ENGINE_API int swmm_link_get_control_settings_bulk(SWMM_Engine engine, double* buf, int count);
1010
1016SWMM_ENGINE_API int swmm_link_get_target_settings_bulk(SWMM_Engine engine, double* buf, int count);
1017
1027SWMM_ENGINE_API int swmm_link_get_hyd_powers_bulk(SWMM_Engine engine, double* buf, int count);
1028
1050 char* buf,
1051 int stride,
1052 int count);
1053
1054/* =========================================================================
1055 * Pump utilization statistics
1056 * ========================================================================= */
1057
1059SWMM_ENGINE_API int swmm_link_get_stat_pump_cycles(SWMM_Engine engine, int idx, int* cycles);
1060
1062SWMM_ENGINE_API int swmm_link_get_stat_pump_on_time(SWMM_Engine engine, int idx, double* seconds);
1063
1065SWMM_ENGINE_API int swmm_link_get_stat_pump_volume(SWMM_Engine engine, int idx, double* volume);
1066
1124 int* cycles,
1125 double* on_time,
1126 double* volume,
1127 int count);
1128
1129/* =========================================================================
1130 * Hydraulic power
1131 * ========================================================================= */
1132
1134SWMM_ENGINE_API int swmm_link_get_hyd_power(SWMM_Engine engine, int idx, double* power);
1135
1139SWMM_ENGINE_API int swmm_link_rename(SWMM_Engine engine, int idx, const char* newId);
1140
1141/* =========================================================================
1142 * Tag — free-form string label from the INP `[TAGS]` section
1143 * ========================================================================= */
1144
1147 char* buf, int buflen);
1148
1151 const char* tag);
1152
1153#ifdef __cplusplus
1154} /* extern "C" */
1155#endif
1156
1157#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).