![]() |
OpenSWMM Engine
6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
|
OpenSWMM Engine — Node C API. More...
#include "openswmm_engine.h"Go to the source code of this file.
Classes | |
| struct | SWMM_OutfallExportReceipt |
Typedefs | |
| typedef enum SWMM_NodeType | SWMM_NodeType |
| Node type classification. | |
| typedef struct SWMM_OutfallExportReceipt | SWMM_OutfallExportReceipt |
| typedef enum SWMM_DividerType | SWMM_DividerType |
| Flow divider method. | |
Enumerations | |
| enum | SWMM_NodeType { SWMM_NODE_JUNCTION = 0 , SWMM_NODE_OUTFALL = 1 , SWMM_NODE_STORAGE = 2 , SWMM_NODE_DIVIDER = 3 } |
| Node type classification. More... | |
| enum | SWMM_StorageShape { SWMM_STORAGE_TABULAR = 0 , SWMM_STORAGE_FUNCTIONAL = 1 , SWMM_STORAGE_CYLINDRICAL = 2 , SWMM_STORAGE_CONICAL = 3 , SWMM_STORAGE_PARABOLOID , SWMM_STORAGE_PYRAMIDAL } |
| Storage-unit surface-area relation codes. More... | |
| enum | SWMM_DividerType { SWMM_DIVIDER_CUTOFF = 0 , SWMM_DIVIDER_OVERFLOW = 1 , SWMM_DIVIDER_TABULAR = 2 , SWMM_DIVIDER_WEIR = 3 } |
| Flow divider method. More... | |
Functions | |
| SWMM_ENGINE_API int | swmm_node_count (SWMM_Engine engine) |
| Get the total number of nodes in the model. | |
| SWMM_ENGINE_API int | swmm_node_index (SWMM_Engine engine, const char *id) |
| Look up a node's zero-based index by its string identifier. | |
| SWMM_ENGINE_API const char * | swmm_node_id (SWMM_Engine engine, int idx) |
| Get the string identifier of a node by index. | |
| SWMM_ENGINE_API int | swmm_node_get_export_receipt (SWMM_Engine engine, int idx, SWMM_OutfallExportReceipt *receipt, double *pollutant_amounts, int count) |
| Read committed external 1D outfall exports without withdrawing water again. | |
| SWMM_ENGINE_API int | swmm_node_add (SWMM_Engine engine, const char *id, int type) |
| Add a new node to the model. | |
| SWMM_ENGINE_API int | swmm_node_pop_last (SWMM_Engine engine, const char *id) |
| Remove the most recently added node (undo-of-add). | |
| SWMM_ENGINE_API int | swmm_node_set_invert_elev (SWMM_Engine engine, int idx, double elev) |
| Set a node's invert elevation. | |
| SWMM_ENGINE_API int | swmm_node_set_max_depth (SWMM_Engine engine, int idx, double depth) |
| Set a node's maximum depth (distance from invert to crown). | |
| SWMM_ENGINE_API int | swmm_node_set_surcharge_depth (SWMM_Engine engine, int idx, double depth) |
| Set the allowed surcharge depth above the node's crown. | |
| SWMM_ENGINE_API int | swmm_node_set_storage_area (SWMM_Engine engine, int idx, double area) |
| SWMM_ENGINE_API int | swmm_node_get_storage_area (SWMM_Engine engine, int idx, double *area) |
| SWMM_ENGINE_API int | swmm_node_set_pond_area (SWMM_Engine engine, int idx, double area) |
| Set the ponded surface area when depth exceeds the maximum. | |
| SWMM_ENGINE_API int | swmm_node_set_initial_depth (SWMM_Engine engine, int idx, double depth) |
| Set a node's initial water depth at simulation start. | |
| SWMM_ENGINE_API int | swmm_node_set_rim_depth (SWMM_Engine engine, int idx, double depth) |
| Set a node's rendering-only rim (ground) depth above the invert. | |
| SWMM_ENGINE_API int | swmm_node_get_type (SWMM_Engine engine, int idx, int *type) |
| Get the type of a node. | |
| SWMM_ENGINE_API int | swmm_node_is_virtual (SWMM_Engine engine, int idx, int *is_virtual) |
| Query whether a node is a virtual junction. | |
| SWMM_ENGINE_API int | swmm_node_set_virtual (SWMM_Engine engine, int idx, int make_virtual) |
| Set or clear a node's virtual-junction flag. | |
| SWMM_ENGINE_API int | swmm_node_virtual_eligible (SWMM_Engine engine, int idx, int *rule_code) |
| Dry-run check of the virtual-junction usage rules for a node. | |
| SWMM_ENGINE_API int | swmm_node_is_inlet (SWMM_Engine engine, int idx, int *is_inlet) |
| Read whether a node carries the inlet-junction marker. | |
| SWMM_ENGINE_API int | swmm_node_inlet_eligible (SWMM_Engine engine, int idx, int for_drop_inlet, int *rule_code) |
| Evaluate inlet-junction topology rules without changing the node. | |
| SWMM_ENGINE_API int | swmm_node_set_inlet (SWMM_Engine engine, int idx, int make_inlet) |
| Enable or disable inlet-junction authoring on an editable node. | |
| SWMM_ENGINE_API int | swmm_node_get_invert_elev (SWMM_Engine engine, int idx, double *elev) |
| Get a node's invert elevation. | |
| SWMM_ENGINE_API int | swmm_node_get_max_depth (SWMM_Engine engine, int idx, double *depth) |
| Get a node's maximum depth. | |
| SWMM_ENGINE_API int | swmm_node_get_rim_depth (SWMM_Engine engine, int idx, double *depth) |
| Get a node's rendering-only rim (ground) depth above the invert. | |
| SWMM_ENGINE_API int | swmm_node_get_depth (SWMM_Engine engine, int idx, double *depth) |
| Get the current water depth at a node. | |
| SWMM_ENGINE_API int | swmm_node_set_depth (SWMM_Engine engine, int idx, double depth) |
| Set the water depth at a node (runtime override). | |
| SWMM_ENGINE_API int | swmm_node_get_head (SWMM_Engine engine, int idx, double *head) |
| Get the current hydraulic head at a node (invert + depth). | |
| SWMM_ENGINE_API int | swmm_node_get_volume (SWMM_Engine engine, int idx, double *volume) |
| Get the current stored water volume at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_lateral_inflow (SWMM_Engine engine, int idx, double *inflow) |
| Get the current lateral inflow at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_overflow (SWMM_Engine engine, int idx, double *overflow) |
| Get the current overflow (flooding) rate at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_inflow (SWMM_Engine engine, int idx, double *inflow) |
| Read the current assembled lateral-inflow field. | |
| SWMM_ENGINE_API int | swmm_node_set_lateral_inflow (SWMM_Engine engine, int idx, double flow) |
| Set a persistent runtime user lateral-inflow contribution. | |
| SWMM_ENGINE_API int | swmm_node_set_quality_mass_flux (SWMM_Engine engine, int node_idx, int pollutant_idx, double mass_rate) |
| Set a persistent additive runtime pollutant amount-rate contribution. | |
| SWMM_ENGINE_API int | swmm_node_set_head_boundary (SWMM_Engine engine, int idx, double head) |
| Set an outfall fixed-head boundary retained in its subtype row. | |
| SWMM_ENGINE_API int | swmm_node_get_quality (SWMM_Engine engine, int node_idx, int pollutant_idx, double *conc) |
| Get the pollutant concentration at a node. | |
| SWMM_ENGINE_API int | swmm_node_set_storage_curve (SWMM_Engine engine, int idx, int curve_idx) |
| Assign a storage curve (depth vs. area) to a storage node. | |
| SWMM_ENGINE_API int | swmm_node_get_storage_curve (SWMM_Engine engine, int idx, int *curve_idx) |
| Get the storage curve index assigned to a storage node. | |
| SWMM_ENGINE_API int | swmm_node_set_storage_functional (SWMM_Engine engine, int idx, double a, double b, double c) |
| Set functional storage parameters: Area = a * Depth^b + c. | |
| SWMM_ENGINE_API int | swmm_node_get_storage_functional (SWMM_Engine engine, int idx, double *a, double *b, double *c) |
| Get functional storage parameters. | |
| SWMM_ENGINE_API int | swmm_node_set_storage_shape (SWMM_Engine engine, int idx, int shape) |
| Set a storage node's surface-area relation. | |
| SWMM_ENGINE_API int | swmm_node_get_storage_shape (SWMM_Engine engine, int idx, int *shape) |
| Get a storage node's surface-area relation. | |
| SWMM_ENGINE_API int | swmm_node_set_storage_geometry (SWMM_Engine engine, int idx, double p1, double p2, double p3) |
| Set the raw dimensions of a geometric storage shape. | |
| SWMM_ENGINE_API int | swmm_node_get_storage_geometry (SWMM_Engine engine, int idx, double *p1, double *p2, double *p3) |
| Get the raw dimensions of a geometric storage shape. | |
| SWMM_ENGINE_API int | swmm_node_set_storage_seep_rate (SWMM_Engine engine, int idx, double rate) |
| Set a constant seepage (exfiltration) rate for a storage node. | |
| SWMM_ENGINE_API int | swmm_node_get_storage_seep_rate (SWMM_Engine engine, int idx, double *rate) |
| Get the constant seepage (exfiltration) rate of a storage node. | |
| SWMM_ENGINE_API int | swmm_node_set_exfil_params (SWMM_Engine engine, int idx, double suction, double ksat, double imd) |
| Set Green–Ampt exfiltration parameters for a storage node. | |
| SWMM_ENGINE_API int | swmm_node_get_exfil_params (SWMM_Engine engine, int idx, double *suction, double *ksat, double *imd) |
| Get Green–Ampt exfiltration parameters for a storage node. | |
| SWMM_ENGINE_API int | swmm_node_set_outfall_type (SWMM_Engine engine, int idx, int type) |
| Set the outfall boundary condition type. | |
| SWMM_ENGINE_API int | swmm_node_get_outfall_type (SWMM_Engine engine, int idx, int *type) |
| Get the outfall boundary condition type. | |
| SWMM_ENGINE_API int | swmm_node_set_outfall_stage (SWMM_Engine engine, int idx, double stage) |
| Set a fixed outfall stage (for FIXED type outfalls). | |
| SWMM_ENGINE_API int | swmm_node_set_outfall_tidal (SWMM_Engine engine, int idx, int curve_idx) |
| Assign a tidal curve to an outfall (for TIDAL type outfalls). | |
| SWMM_ENGINE_API int | swmm_node_set_outfall_timeseries (SWMM_Engine engine, int idx, int ts_idx) |
| Assign a time series to an outfall (for TIMESERIES type outfalls). | |
| SWMM_ENGINE_API int | swmm_node_get_outfall_param (SWMM_Engine engine, int idx, double *param) |
| Get the outfall stage parameter (fixed stage, or current computed stage). | |
| SWMM_ENGINE_API int | swmm_node_get_outfall_tidal (SWMM_Engine engine, int idx, int *curve_idx) |
| Get the tidal curve index assigned to a TIDAL outfall. | |
| SWMM_ENGINE_API int | swmm_node_get_outfall_timeseries (SWMM_Engine engine, int idx, int *ts_idx) |
| Get the time-series index assigned to a TIMESERIES outfall. | |
| SWMM_ENGINE_API int | swmm_node_set_outfall_flap_gate (SWMM_Engine engine, int idx, int has_gate) |
| Set whether a flap gate exists at the outfall. | |
| SWMM_ENGINE_API int | swmm_node_get_outfall_flap_gate (SWMM_Engine engine, int idx, int *has_gate) |
| Get whether a flap gate exists at the outfall. | |
| SWMM_ENGINE_API int | swmm_node_set_divider_type (SWMM_Engine engine, int idx, int type) |
| Set the divider method for a flow-divider node. | |
| SWMM_ENGINE_API int | swmm_node_get_divider_type (SWMM_Engine engine, int idx, int *type) |
| Get the divider method for a flow-divider node. | |
| SWMM_ENGINE_API int | swmm_node_get_surcharge_depth (SWMM_Engine engine, int idx, double *depth) |
| Get the surcharge depth above the node's crown. | |
| SWMM_ENGINE_API int | swmm_node_get_ponded_area (SWMM_Engine engine, int idx, double *area) |
| Get the ponded area at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_initial_depth (SWMM_Engine engine, int idx, double *depth) |
| Get the initial depth at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_crown_elev (SWMM_Engine engine, int idx, double *elev) |
| Get the crown elevation (invert + max depth) at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_full_volume (SWMM_Engine engine, int idx, double *vol) |
| Get the full (maximum) stored volume at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_losses (SWMM_Engine engine, int idx, double *losses) |
| Get the cumulative water losses at a node (evaporation + exfiltration). | |
| SWMM_ENGINE_API int | swmm_node_get_outflow (SWMM_Engine engine, int idx, double *outflow) |
| Get the total outflow from a node through downstream links. | |
| SWMM_ENGINE_API int | swmm_node_get_degree (SWMM_Engine engine, int idx, int *degree) |
| Get the degree (number of connected links) of a node. | |
| SWMM_ENGINE_API int | swmm_node_get_stat_max_depth (SWMM_Engine engine, int idx, double *val) |
| Get the maximum depth recorded at a node during the simulation. | |
| SWMM_ENGINE_API int | swmm_node_get_stat_max_overflow (SWMM_Engine engine, int idx, double *val) |
| Get the maximum overflow rate recorded at a node. | |
| SWMM_ENGINE_API int | swmm_node_get_stat_vol_flooded (SWMM_Engine engine, int idx, double *val) |
| Get the total flood volume at a node over the simulation. | |
| SWMM_ENGINE_API int | swmm_node_get_stat_time_flooded (SWMM_Engine engine, int idx, double *val) |
| Get the total time a node was flooded during the simulation. | |
| SWMM_ENGINE_API int | swmm_node_get_depths_bulk (SWMM_Engine engine, double *buf, int count) |
| Get depths for all nodes in a single call. | |
| SWMM_ENGINE_API int | swmm_node_get_heads_bulk (SWMM_Engine engine, double *buf, int count) |
| Get hydraulic heads for all nodes in a single call. | |
| SWMM_ENGINE_API int | swmm_node_get_inflows_bulk (SWMM_Engine engine, double *buf, int count) |
| Copy a prefix of the assembled lateral-inflow field. | |
| SWMM_ENGINE_API int | swmm_node_get_overflows_bulk (SWMM_Engine engine, double *buf, int count) |
| Get overflow rates for all nodes in a single call. | |
| SWMM_ENGINE_API int | swmm_node_set_depths_bulk (SWMM_Engine engine, const double *buf, int count) |
| Set depths for all nodes in a single call (runtime override). | |
| SWMM_ENGINE_API int | swmm_node_set_lat_inflows_bulk (SWMM_Engine engine, const double *buf, int count) |
| Overwrite a prefix of the current assembled lateral-inflow field. | |
| SWMM_ENGINE_API int | swmm_node_get_quality_bulk (SWMM_Engine engine, int pollutant_idx, double *buf, int count) |
| Get pollutant concentrations at all nodes for one pollutant. | |
| SWMM_ENGINE_API int | swmm_node_get_volumes_bulk (SWMM_Engine engine, double *buf, int count) |
| Get current stored volumes for all nodes in a single call. | |
| SWMM_ENGINE_API int | swmm_node_get_outflows_bulk (SWMM_Engine engine, double *buf, int count) |
| Get current outflows for all nodes in a single call. | |
| SWMM_ENGINE_API int | swmm_node_get_losses_bulk (SWMM_Engine engine, double *buf, int count) |
| Get accumulated node losses (exfil + evap) for all nodes in one call. | |
| SWMM_ENGINE_API int | swmm_node_get_lateral_inflows_bulk (SWMM_Engine engine, double *buf, int count) |
| Get current lateral inflows for all nodes in a single call. | |
| SWMM_ENGINE_API int | swmm_node_get_ids_bulk (SWMM_Engine engine, char *buf, int stride, int count) |
| Get node IDs for all nodes in a single call (stride-packed UTF-8). | |
| SWMM_ENGINE_API int | swmm_node_set_outfall_route_to (SWMM_Engine engine, int idx, int subcatch_idx) |
| Set an outfall route-to subcatchment index directly. | |
| SWMM_ENGINE_API int | swmm_node_get_outfall_route_to (SWMM_Engine engine, int idx, int *subcatch_idx) |
| Read the outfall route-to subcatchment index. | |
| SWMM_ENGINE_API int | swmm_node_get_depth_from_volume (SWMM_Engine engine, int idx, double volume, double *depth) |
| Evaluate node depth from a supplied display-unit water volume. | |
| SWMM_ENGINE_API int | swmm_node_rename (SWMM_Engine engine, int idx, const char *newId) |
| Rename a node in the editable name index. | |
| SWMM_ENGINE_API int | swmm_node_get_tag (SWMM_Engine engine, int idx, char *buf, int buflen) |
| Copy a node free-form tag. | |
| SWMM_ENGINE_API int | swmm_node_set_tag (SWMM_Engine engine, int idx, const char *tag) |
| Copy or clear a node free-form tag without changing topology. | |
OpenSWMM Engine — Node C API.
Node add (BUILDING state), geometry setters, state get/set, lateral inflow injection (RUNNING), bulk access, quality.
| typedef enum SWMM_DividerType SWMM_DividerType |
Flow divider method.
Selects how a divider node splits inflow between its diversion link and its main outflow link. The value is stored in the per-node divider_type SoA array and only consulted when type[i] == SWMM_NODE_DIVIDER.
| typedef enum SWMM_NodeType SWMM_NodeType |
Node type classification.
Every node in a SWMM model belongs to one of these types. The type governs which property setters/getters are valid and how the node participates in routing.
| typedef struct SWMM_OutfallExportReceipt SWMM_OutfallExportReceipt |
Cumulative committed 1D outfall transfers, independent of REPORT_START. Positive exports have already left SWMM: consumers must not withdraw them again. Reverse water is retained separately and is not a one-way export. SI water is m3; heat is J relative to 0 degC using model rho/cp. Pollutant arrays use kg for MG/L and UG/L, and counts for #/L. Read units first. Flags: 1 external water, 2 LEGACY pollutant loads, 4 native heat. Route-to-subcatchment and native 2D-owned outfalls are refused. No MSX or ARD/LARD mass capability is implied by these receipts.
| enum SWMM_DividerType |
Flow divider method.
Selects how a divider node splits inflow between its diversion link and its main outflow link. The value is stored in the per-node divider_type SoA array and only consulted when type[i] == SWMM_NODE_DIVIDER.
| enum SWMM_NodeType |
Node type classification.
Every node in a SWMM model belongs to one of these types. The type governs which property setters/getters are valid and how the node participates in routing.
| Enumerator | |
|---|---|
| SWMM_NODE_JUNCTION | Standard junction node. |
| SWMM_NODE_OUTFALL | Outfall boundary node. |
| SWMM_NODE_STORAGE | Storage unit (pond, tank, etc.). |
| SWMM_NODE_DIVIDER | Flow divider. |
| enum SWMM_StorageShape |
Storage-unit surface-area relation codes.
Ordinals match the legacy solver's enum StorageType, so the same int is valid on both engines. The four geometric shapes take three raw dimensions (see swmm_node_set_storage_geometry); TABULAR takes a curve; FUNCTIONAL takes the a/b/c power-law coefficients.
| SWMM_ENGINE_API int swmm_node_add | ( | SWMM_Engine | engine, |
| const char * | id, | ||
| int | type ) |
Add a new node to the model.
The engine must be in SWMM_STATE_BUILDING (programmatic construction) or SWMM_STATE_OPENED (interactive editing after the .inp has been parsed). Returns SWMM_ERR_LIFECYCLE for any other state — once the simulation has been initialized, started, or run, the node-count invariant is baked into solver state and the engine must be closed + re-opened to accept new objects.
The node is appended to the model's node list and its index equals the previous count.
| [in] | engine | Engine handle. |
| [in] | id | Unique null-terminated identifier for the new node. |
| [in] | type | Node type (see SWMM_NodeType). |
| SWMM_ENGINE_API int swmm_node_count | ( | SWMM_Engine | engine | ) |
Get the total number of nodes in the model.
| [in] | engine | Engine handle. |
| SWMM_ENGINE_API int swmm_node_get_crown_elev | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | elev ) |
Get the crown elevation (invert + max depth) at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | elev | Receives the crown elevation in project length units. |
| SWMM_ENGINE_API int swmm_node_get_degree | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | degree ) |
Get the degree (number of connected links) of a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | degree | Receives the number of links connected to this node. |
| SWMM_ENGINE_API int swmm_node_get_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | depth ) |
Get the current water depth at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | depth | Receives depth in project length units. |
| SWMM_ENGINE_API int swmm_node_get_depth_from_volume | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | volume, | ||
| double * | depth ) |
Evaluate node depth from a supplied display-unit water volume.
Uses the configured node subtype, storage coefficients/curve and project unit system. Does not change stored volume/depth or validate input finiteness in this wrapper.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | volume | Water volume in project display volume units; converted internally before evaluating storage geometry. |
| [out] | depth | Optional destination for depth in project display length units; NULL skips the calculation. |
| SWMM_ENGINE_API int swmm_node_get_depths_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get depths for all nodes in a single call.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements (should equal swmm_node_count()). |
| SWMM_ENGINE_API int swmm_node_get_divider_type | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | type ) |
Get the divider method for a flow-divider node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | type | Receives the divider type code. |
| SWMM_ENGINE_API int swmm_node_get_exfil_params | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | suction, | ||
| double * | ksat, | ||
| double * | imd ) |
Get Green–Ampt exfiltration parameters for a storage node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | suction | Receives the suction head. |
| [out] | ksat | Receives the saturated hydraulic conductivity. |
| [out] | imd | Receives the initial moisture deficit. |
| SWMM_ENGINE_API int swmm_node_get_export_receipt | ( | SWMM_Engine | engine, |
| int | idx, | ||
| SWMM_OutfallExportReceipt * | receipt, | ||
| double * | pollutant_amounts, | ||
| int | count ) |
Read committed external 1D outfall exports without withdrawing water again.
Requires an outfall with no route-to-subcatchment and no native surface-owned exchange. Cumulative committed transfers are independent of REPORT_START; exported water already left SWMM. Flags 1/2/4 indicate external water/LEGACY pollutant/native heat capability. No MSX or ARD/LARD amount capability is implied.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [out] | receipt | Non-null water/heat/availability record: exported and separately reversed water in m3, sensible heat in J relative to 0 degrees C using model rho/cp, and capability flags. |
| [out] | pollutant_amounts | Caller-owned array of count amounts in pollutant order; required only when count>0. MG/L and UG/L pollutants use kg; #/L uses counts. |
| [in] | count | Must equal the current model pollutant count exactly, including zero. |
| SWMM_ENGINE_API int swmm_node_get_full_volume | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | vol ) |
Get the full (maximum) stored volume at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | vol | Receives the full volume in project volume units. |
| SWMM_ENGINE_API int swmm_node_get_head | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | head ) |
Get the current hydraulic head at a node (invert + depth).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | head | Receives the head in project length units. |
| SWMM_ENGINE_API int swmm_node_get_heads_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get hydraulic heads for all nodes in a single call.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements. |
| SWMM_ENGINE_API int swmm_node_get_ids_bulk | ( | SWMM_Engine | engine, |
| char * | buf, | ||
| int | stride, | ||
| int | count ) |
Get node IDs for all nodes in a single call (stride-packed UTF-8).
Each ID is written into a fixed-size slot buf[i*stride .. i*stride+stride-1]. The ID is NUL-terminated within its slot; if the ID is longer than stride-1 bytes it is truncated and still NUL-terminated. The caller can recover each ID via strlen(buf + i*stride) (or equivalent UTF-8-safe slicing).
This is the Phase 3 alternative to looping swmm_node_id N times through the C ABI. A typical stride for SWMM node IDs is 32–64 bytes (SWMM IDs are limited to MAX_ID_CHARS = 31 in legacy); callers should choose a stride that comfortably accommodates the longest ID in their model.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of stride*count bytes. |
| [in] | stride | Per-ID slot size in bytes (must be > 1 to allow at least one character plus the NUL). |
| [in] | count | Number of IDs to read. |
SWMM_OK on success; SWMM_ERR_BADHANDLE if engine is invalid; SWMM_ERR_BADPARAM if buf is NULL, stride < 2, or count <= 0.| SWMM_ENGINE_API int swmm_node_get_inflow | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | inflow ) |
Read the current assembled lateral-inflow field.
Despite the historical name, this wrapper reads lat_flow only; upstream link contributions are not added. It is equivalent to swmm_node_get_lateral_inflow().
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [out] | inflow | Optional destination in project display flow units. |
| SWMM_ENGINE_API int swmm_node_get_inflows_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Copy a prefix of the assembled lateral-inflow field.
Reads lat_flow only, without adding upstream link contributions; equivalent to swmm_node_get_lateral_inflows_bulk().
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [out] | buf | Non-null caller-owned array of count doubles in project display flow units. |
| [in] | count | Positive capacity/requested prefix length; writes min(count,node count) values and leaves any remaining entries unchanged. |
| SWMM_ENGINE_API int swmm_node_get_initial_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | depth ) |
Get the initial depth at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | depth | Receives the initial depth in project length units. |
| SWMM_ENGINE_API int swmm_node_get_invert_elev | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | elev ) |
Get a node's invert elevation.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | elev | Receives the invert elevation in project length units. |
| SWMM_ENGINE_API int swmm_node_get_lateral_inflow | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | inflow ) |
Get the current lateral inflow at a node.
Lateral inflow is the externally applied flow (DWF, RDII, user inflows) as opposed to the total inflow which includes upstream link contributions.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | inflow | Receives the lateral inflow in project flow units. |
| SWMM_ENGINE_API int swmm_node_get_lateral_inflows_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get current lateral inflows for all nodes in a single call.
Single-pass bulk variant of swmm_node_get_lateral_inflow. The matching setter is swmm_node_set_lat_inflows_bulk.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements. |
SWMM_OK on success, or an error code. | SWMM_ENGINE_API int swmm_node_get_losses | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | losses ) |
Get the cumulative water losses at a node (evaporation + exfiltration).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | losses | Receives the loss volume in project volume units. |
| SWMM_ENGINE_API int swmm_node_get_losses_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get accumulated node losses (exfil + evap) for all nodes in one call.
Single-pass bulk variant of swmm_node_get_losses.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements. |
SWMM_OK on success, or an error code. | SWMM_ENGINE_API int swmm_node_get_max_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | depth ) |
Get a node's maximum depth.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | depth | Receives the maximum depth in project length units. |
| SWMM_ENGINE_API int swmm_node_get_outfall_flap_gate | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | has_gate ) |
Get whether a flap gate exists at the outfall.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | has_gate | Receives 1 if flap gate present, 0 otherwise. |
| SWMM_ENGINE_API int swmm_node_get_outfall_param | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | param ) |
Get the outfall stage parameter (fixed stage, or current computed stage).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | param | Receives the outfall parameter value. |
| SWMM_ENGINE_API int swmm_node_get_outfall_route_to | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | subcatch_idx ) |
Read the outfall route-to subcatchment index.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [out] | subcatch_idx | Optional destination: stored subcatchment index, or -1 when unset/non-outfall. |
| SWMM_ENGINE_API int swmm_node_get_outfall_tidal | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | curve_idx ) |
Get the tidal curve index assigned to a TIDAL outfall.
The outfall parameter slot is union-typed across stage / tidal-idx / ts-idx; this accessor returns the slot interpreted as a curve index only when the outfall is currently of TIDAL type. Returns SWMM_ERR_BADPARAM if the outfall type is not TIDAL, so the caller can distinguish "unassigned" from a genuine index of 0.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | curve_idx | Receives the zero-based curve index. |
| SWMM_ENGINE_API int swmm_node_get_outfall_timeseries | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | ts_idx ) |
Get the time-series index assigned to a TIMESERIES outfall.
Symmetric to swmm_node_get_outfall_tidal. Returns SWMM_ERR_BADPARAM unless the outfall is currently of TIMESERIES type.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | ts_idx | Receives the zero-based time-series index. |
| SWMM_ENGINE_API int swmm_node_get_outfall_type | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | type ) |
Get the outfall boundary condition type.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | type | Receives the outfall type code. |
| SWMM_ENGINE_API int swmm_node_get_outflow | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | outflow ) |
Get the total outflow from a node through downstream links.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | outflow | Receives the outflow in project flow units. |
| SWMM_ENGINE_API int swmm_node_get_outflows_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get current outflows for all nodes in a single call.
Single-pass bulk variant of swmm_node_get_outflow.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements. |
SWMM_OK on success, or an error code (see swmm_node_get_volumes_bulk). | SWMM_ENGINE_API int swmm_node_get_overflow | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | overflow ) |
Get the current overflow (flooding) rate at a node.
Overflow occurs when the water depth exceeds the node's maximum depth and ponding is not enabled (or the ponded area is exceeded).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | overflow | Receives the overflow rate in project flow units. |
| SWMM_ENGINE_API int swmm_node_get_overflows_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get overflow rates for all nodes in a single call.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements. |
| SWMM_ENGINE_API int swmm_node_get_ponded_area | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | area ) |
Get the ponded area at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | area | Receives the ponded area in project area units. |
| SWMM_ENGINE_API int swmm_node_get_quality | ( | SWMM_Engine | engine, |
| int | node_idx, | ||
| int | pollutant_idx, | ||
| double * | conc ) |
Get the pollutant concentration at a node.
| [in] | engine | Engine handle. |
| [in] | node_idx | Zero-based node index. |
| [in] | pollutant_idx | Zero-based pollutant index. |
| [out] | conc | Receives the concentration in pollutant units. |
| SWMM_ENGINE_API int swmm_node_get_quality_bulk | ( | SWMM_Engine | engine, |
| int | pollutant_idx, | ||
| double * | buf, | ||
| int | count ) |
Get pollutant concentrations at all nodes for one pollutant.
| [in] | engine | Engine handle. |
| [in] | pollutant_idx | Zero-based pollutant index. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements (should equal swmm_node_count()). |
| SWMM_ENGINE_API int swmm_node_get_rim_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | depth ) |
Get a node's rendering-only rim (ground) depth above the invert.
See swmm_node_set_rim_depth(). 0 means unset: a renderer drawing a ground line should fall back to swmm_node_get_max_depth(), which for a virtual junction is the pipe crown.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | depth | Receives the rim depth in project length units, or 0. |
| SWMM_ENGINE_API int swmm_node_get_stat_max_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | val ) |
Get the maximum depth recorded at a node during the simulation.
| [in] | engine | Engine handle (ENDED or RUNNING state). |
| [in] | idx | Zero-based node index. |
| [out] | val | Receives the maximum depth in project length units. |
| SWMM_ENGINE_API int swmm_node_get_stat_max_overflow | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | val ) |
Get the maximum overflow rate recorded at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | val | Receives the maximum overflow in project flow units. |
| SWMM_ENGINE_API int swmm_node_get_stat_time_flooded | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | val ) |
Get the total time a node was flooded during the simulation.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | val | Receives the flooded duration in seconds. |
| SWMM_ENGINE_API int swmm_node_get_stat_vol_flooded | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | val ) |
Get the total flood volume at a node over the simulation.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | val | Receives the flooded volume in project volume units. |
| SWMM_ENGINE_API int swmm_node_get_storage_area | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | area ) |
Read authored junction storage area in project area units (ft2 or m2) (zero by default).
| SWMM_ENGINE_API int swmm_node_get_storage_curve | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | curve_idx ) |
Get the storage curve index assigned to a storage node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | curve_idx | Receives the curve index, or -1 if functional. |
| SWMM_ENGINE_API int swmm_node_get_storage_functional | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | a, | ||
| double * | b, | ||
| double * | c ) |
Get functional storage parameters.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | a | Receives coefficient a. |
| [out] | b | Receives exponent b. |
| [out] | c | Receives constant c. |
| SWMM_ENGINE_API int swmm_node_get_storage_geometry | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | p1, | ||
| double * | p2, | ||
| double * | p3 ) |
Get the raw dimensions of a geometric storage shape.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | p1 | Receives the major axis / base length. |
| [out] | p2 | Receives the minor axis / base width. |
| [out] | p3 | Receives the side slope / height. |
| SWMM_ENGINE_API int swmm_node_get_storage_seep_rate | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | rate ) |
Get the constant seepage (exfiltration) rate of a storage node.
The exfiltration Ksat when exfiltration uses its constant-rate form (zero suction and IMD); 0 when it uses Green-Ampt parameters or is off, and for a node that is not storage.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | rate | Receives the rate, in/hr (US) or mm/hr (SI). |
| SWMM_ENGINE_API int swmm_node_get_storage_shape | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | shape ) |
Get a storage node's surface-area relation.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | shape | Receives a SWMM_StorageShape code. |
| SWMM_ENGINE_API int swmm_node_get_surcharge_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | depth ) |
Get the surcharge depth above the node's crown.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | depth | Receives the surcharge depth in project length units. |
| SWMM_ENGINE_API int swmm_node_get_tag | ( | SWMM_Engine | engine, |
| int | idx, | ||
| char * | buf, | ||
| int | buflen ) |
Copy a node free-form tag.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [out] | buf | Non-null caller-owned text buffer; empty when no tag exists, NUL-terminated and silently truncated to buflen-1 bytes. |
| [in] | buflen | Positive buffer capacity in bytes including NUL. |
| SWMM_ENGINE_API int swmm_node_get_type | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | type ) |
Get the type of a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | type | Receives the node type (see SWMM_NodeType). |
| SWMM_ENGINE_API int swmm_node_get_volume | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double * | volume ) |
Get the current stored water volume at a node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | volume | Receives the volume in project volume units. |
| SWMM_ENGINE_API int swmm_node_get_volumes_bulk | ( | SWMM_Engine | engine, |
| double * | buf, | ||
| int | count ) |
Get current stored volumes for all nodes in a single call.
Single-pass bulk variant of swmm_node_get_volume — avoids N round-trips through the C ABI for whole-network reads. Used by the MCP server's per-node info builders and the mass_balance resource.
| [in] | engine | Engine handle. |
| [out] | buf | Caller-allocated buffer of at least count doubles. |
| [in] | count | Number of elements. If smaller than swmm_node_count() only the first min(count, n_nodes) entries are written. |
SWMM_OK on success; SWMM_ERR_BADHANDLE if engine is invalid; SWMM_ERR_BADPARAM if buf is NULL or count <= 0. | SWMM_ENGINE_API const char * swmm_node_id | ( | SWMM_Engine | engine, |
| int | idx ) |
Get the string identifier of a node by index.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| SWMM_ENGINE_API int swmm_node_index | ( | SWMM_Engine | engine, |
| const char * | id ) |
Look up a node's zero-based index by its string identifier.
| [in] | engine | Engine handle. |
| [in] | id | Null-terminated node identifier. |
| SWMM_ENGINE_API int swmm_node_inlet_eligible | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | for_drop_inlet, | ||
| int * | rule_code ) |
Evaluate inlet-junction topology rules without changing the node.
A topology refusal is reported in rule_code while the API returns SWMM_OK; inspect the code separately.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | for_drop_inlet | 0 evaluates the street-inlet profile; nonzero evaluates drop-inlet eligibility. |
| [out] | rule_code | Optional destination: 0 for eligible, otherwise the specific inlet/virtual-junction validation code. |
| SWMM_ENGINE_API int swmm_node_is_inlet | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | is_inlet ) |
Read whether a node carries the inlet-junction marker.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [out] | is_inlet | Optional destination: 1 when marked inlet, otherwise 0. |
| SWMM_ENGINE_API int swmm_node_is_virtual | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | is_virtual ) |
Query whether a node is a virtual junction.
A virtual junction is a zero-storage, momentum-transmitting JUNCTION-typed node connecting exactly two conduits of identical cross-section (INP section [VIRTUAL_JUNCTIONS]; refactored engine only).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | is_virtual | Receives 1 if the node is a virtual junction, else 0. |
| SWMM_ENGINE_API int swmm_node_pop_last | ( | SWMM_Engine | engine, |
| const char * | id ) |
Remove the most recently added node (undo-of-add).
Pops the tail of the node list. The engine must be in SWMM_STATE_BUILDING or SWMM_STATE_OPENED. Returns SWMM_ERR_BADINDEX if the tail doesn't match id (guards against undo / redo order mismatches), SWMM_ERR_BADPARAM if any link references the tail node (the caller must cascade those removals first via swmm_link_pop_last), or SWMM_ERR_LIFECYCLE for any other state.
This is an intentionally narrow surface that avoids renumbering any cross-references; for a general swmm_node_remove(idx) see the engine roadmap — full remove requires renumbering every link / subcatch / control / report reference and is tracked separately.
| [in] | engine | Engine handle. |
| [in] | id | Expected tail identifier (null-terminated). |
| SWMM_ENGINE_API int swmm_node_rename | ( | SWMM_Engine | engine, |
| int | idx, | ||
| const char * | newId ) |
Rename a node in the editable name index.
Keeps numeric node indices. Borrowed ID pointers can be invalidated; the wrapper changes the name index and does not itself rewrite arbitrary stored text references.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | newId | Non-null, nonempty NUL-terminated new ID; copied internally and required to be unique in the node index. |
| SWMM_ENGINE_API int swmm_node_set_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | depth ) |
Set the water depth at a node (runtime override).
| [in] | engine | Engine handle (RUNNING state). |
| [in] | idx | Zero-based node index. |
| [in] | depth | New depth in project length units. |
| SWMM_ENGINE_API int swmm_node_set_depths_bulk | ( | SWMM_Engine | engine, |
| const double * | buf, | ||
| int | count ) |
Set depths for all nodes in a single call (runtime override).
| [in] | engine | Engine handle (RUNNING state). |
| [in] | buf | Array of depth values, one per node. |
| [in] | count | Number of elements (should equal swmm_node_count()). |
| SWMM_ENGINE_API int swmm_node_set_divider_type | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | type ) |
Set the divider method for a flow-divider node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_DIVIDER). |
| [in] | type | Divider type code (see SWMM_DividerType). |
| SWMM_ENGINE_API int swmm_node_set_exfil_params | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | suction, | ||
| double | ksat, | ||
| double | imd ) |
Set Green–Ampt exfiltration parameters for a storage node.
Exfiltration models soil infiltration losses from the bottom and banks of a storage unit using the Green–Ampt method.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_STORAGE). |
| [in] | suction | Soil capillary suction head (project length units). |
| [in] | ksat | Saturated hydraulic conductivity (project length/time). |
| [in] | imd | Initial moisture deficit (fraction: 0–1). |
| SWMM_ENGINE_API int swmm_node_set_head_boundary | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | head ) |
Set an outfall fixed-head boundary retained in its subtype row.
Sets the outfall type to FIXED and stores its stage parameter; it is not automatically reset after one step. Does not check input finiteness or supply a per-boundary clear operation.
| [in] | engine | Non-null RUNNING engine. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | head | Datum head in project display length units, converted to internal length. |
| SWMM_ENGINE_API int swmm_node_set_initial_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | depth ) |
Set a node's initial water depth at simulation start.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [in] | depth | Initial depth in project length units. |
| SWMM_ENGINE_API int swmm_node_set_inlet | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | make_inlet ) |
Enable or disable inlet-junction authoring on an editable node.
Validates through the inlet-junction edit helper before applying the requested marker. Treat a nonzero returned rule code as a refused edit.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | make_inlet | 0 clears the marker; nonzero requests inlet conversion under current topology rules. |
| SWMM_ENGINE_API int swmm_node_set_invert_elev | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | elev ) |
Set a node's invert elevation.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [in] | elev | Invert elevation in project length units. |
| SWMM_ENGINE_API int swmm_node_set_lat_inflows_bulk | ( | SWMM_Engine | engine, |
| const double * | buf, | ||
| int | count ) |
Overwrite a prefix of the current assembled lateral-inflow field.
Writes lat_flow directly, unlike the persistent user_lat_flow scalar setter. Subsequent inflow assembly may replace these values. Does not check finite values or promise a persistent forcing prescription.
| [in] | engine | Non-null RUNNING engine. |
| [in] | buf | Non-null borrowed array of count project display flow values, converted and copied synchronously. |
| [in] | count | Positive requested prefix length; uses min(count,node count). |
| SWMM_ENGINE_API int swmm_node_set_lateral_inflow | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | flow ) |
Set a persistent runtime user lateral-inflow contribution.
Stores user_lat_flow, not the current assembled lat_flow. Runtime forcing OVERRIDE/ADD can overlay it; ordinary DWF/RDII/input contributions are assembled separately. The value persists across steps and does not replace all authored inflows. No finite/range validation is applied.
| [in] | engine | Non-null RUNNING engine. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | flow | Signed project display flow, converted to internal flow and retained until changed; zero stops this contribution. |
| SWMM_ENGINE_API int swmm_node_set_max_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | depth ) |
Set a node's maximum depth (distance from invert to crown).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [in] | depth | Maximum depth in project length units. |
| SWMM_ENGINE_API int swmm_node_set_outfall_flap_gate | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | has_gate ) |
Set whether a flap gate exists at the outfall.
A flap gate prevents reverse flow through the outfall.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_OUTFALL). |
| [in] | has_gate | Non-zero to enable flap gate; zero to disable. |
| SWMM_ENGINE_API int swmm_node_set_outfall_route_to | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | subcatch_idx ) |
Set an outfall route-to subcatchment index directly.
No lifecycle guard is imposed. For a valid node without an outfall subtype this is a successful no-op; it does not convert the node into an outfall.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | subcatch_idx | Subcatchment index to store, or -1 for no routing. This wrapper does not validate the supplied subcatchment index. |
| SWMM_ENGINE_API int swmm_node_set_outfall_stage | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | stage ) |
Set a fixed outfall stage (for FIXED type outfalls).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_OUTFALL). |
| [in] | stage | Fixed stage elevation in project length units. |
| SWMM_ENGINE_API int swmm_node_set_outfall_tidal | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | curve_idx ) |
Assign a tidal curve to an outfall (for TIDAL type outfalls).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_OUTFALL). |
| [in] | curve_idx | Zero-based curve index defining hour-of-day vs. stage. |
| SWMM_ENGINE_API int swmm_node_set_outfall_timeseries | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | ts_idx ) |
Assign a time series to an outfall (for TIMESERIES type outfalls).
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_OUTFALL). |
| [in] | ts_idx | Zero-based time series index defining time vs. stage. |
| SWMM_ENGINE_API int swmm_node_set_outfall_type | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | type ) |
Set the outfall boundary condition type.
Common types: 0=FREE, 1=NORMAL, 2=FIXED, 3=TIDAL, 4=TIMESERIES.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_OUTFALL). |
| [in] | type | Outfall type code. |
| SWMM_ENGINE_API int swmm_node_set_pond_area | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | area ) |
Set the ponded surface area when depth exceeds the maximum.
When ponding is modeled, excess water is stored on the surface using this area. Set to 0 to disable ponding at this node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [in] | area | Ponded area in project area units (e.g., ft² or m²). |
| SWMM_ENGINE_API int swmm_node_set_quality_mass_flux | ( | SWMM_Engine | engine, |
| int | node_idx, | ||
| int | pollutant_idx, | ||
| double | mass_rate ) |
Set a persistent additive runtime pollutant amount-rate contribution.
Persists until replaced, then contributes at routing steps. Negative extraction is subject to the quality loader available-mass clamp; this setter itself does not validate a finite/range value.
| [in] | engine | Non-null RUNNING engine. |
| [in] | node_idx | Zero-based existing node index. |
| [in] | pollutant_idx | Zero-based existing pollutant index. |
| [in] | mass_rate | Raw internal concentration-unit*ft3/s amount rate; passed to the quality loader without a project-mass conversion. Zero stops the retained contribution. |
| SWMM_ENGINE_API int swmm_node_set_rim_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | depth ) |
Set a node's rendering-only rim (ground) depth above the invert.
RENDERING ONLY — no hydraulics, routing, reporting or output-file code reads this value, so setting it can never change a result. It exists for virtual junctions, whose max depth is derived (always the shared pipe crown): without it every viewer drawing a ground line collapses the surface to the crown at each break point. It is the optional third token of a [VIRTUAL_JUNCTIONS] row.
On other node types the value is simply carried; renderers use the real max depth there. Pass 0 to clear it ("unset" — renderers fall back to the max depth). Negative values are clamped to 0.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [in] | depth | Rim depth above the invert in project length units. |
| SWMM_ENGINE_API int swmm_node_set_storage_area | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | area ) |
Physical ordinary-junction chamber area in project area units (ft2 or m2). Zero retains legacy behavior. Geometry edits only; nonfinite/negative values and virtual/inlet/nonjunction assignments fail.
| SWMM_ENGINE_API int swmm_node_set_storage_curve | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | curve_idx ) |
Assign a storage curve (depth vs. area) to a storage node.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_STORAGE). |
| [in] | curve_idx | Zero-based curve index (from swmm_curve_add()). |
| SWMM_ENGINE_API int swmm_node_set_storage_functional | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | a, | ||
| double | b, | ||
| double | c ) |
Set functional storage parameters: Area = a * Depth^b + c.
Defines the depth–area relationship using a power-law equation instead of a tabular curve.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_STORAGE). |
| [in] | a | Coefficient a. |
| [in] | b | Exponent b. |
| [in] | c | Constant c. |
| SWMM_ENGINE_API int swmm_node_set_storage_geometry | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | p1, | ||
| double | p2, | ||
| double | p3 ) |
Set the raw dimensions of a geometric storage shape.
Meaning of p1/p2/p3 depends on the node's current shape — see SWMM_StorageShape. The engine stores the raw dimensions (so they survive a write back to .inp) and derives the area coefficients from them. The call is atomic: if the dimensions are invalid nothing is written.
Validity (mirrors the legacy solver): p1 > 0, p2 > 0, p3 >= 0, and p3 != 0 for SWMM_STORAGE_PARABOLOID.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_STORAGE). |
| [in] | p1 | Major axis / base length. |
| [in] | p2 | Minor axis / base width. |
| [in] | p3 | Side slope (run/rise), or height for SWMM_STORAGE_PARABOLOID. |
| SWMM_ENGINE_API int swmm_node_set_storage_seep_rate | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | rate ) |
Set a constant seepage (exfiltration) rate for a storage node.
The constant-rate form of storage exfiltration, as a [STORAGE] row ending in a bare Ksat: sets the exfiltration Ksat to rate with zero suction and IMD, replacing any Green-Ampt parameters (see swmm_node_set_exfil_params). A rate of 0 turns exfiltration off.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_STORAGE). |
| [in] | rate | Seepage rate, in/hr (US) or mm/hr (SI); must be >= 0. |
| SWMM_ENGINE_API int swmm_node_set_storage_shape | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | shape ) |
Set a storage node's surface-area relation.
Setting a geometric shape detaches any storage curve and re-derives the internal area coefficients from the node's current raw dimensions; follow with swmm_node_set_storage_geometry() to supply them. Setting SWMM_STORAGE_FUNCTIONAL also detaches the curve. Use swmm_node_set_storage_curve() to make a node TABULAR.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be SWMM_NODE_STORAGE). |
| [in] | shape | A SWMM_StorageShape code. |
shape is not a valid code.| SWMM_ENGINE_API int swmm_node_set_surcharge_depth | ( | SWMM_Engine | engine, |
| int | idx, | ||
| double | depth ) |
Set the allowed surcharge depth above the node's crown.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [in] | depth | Surcharge depth in project length units. |
| SWMM_ENGINE_API int swmm_node_set_tag | ( | SWMM_Engine | engine, |
| int | idx, | ||
| const char * | tag ) |
Copy or clear a node free-form tag without changing topology.
No lifecycle guard is imposed. Tags are keyed by node index and persist through node rename.
| [in] | engine | Non-null live engine handle; caller provides exclusive access. |
| [in] | idx | Zero-based node index in [0,swmm_node_count(engine)). |
| [in] | tag | Borrowed NUL-terminated tag to copy; NULL/empty clears it. |
| SWMM_ENGINE_API int swmm_node_set_virtual | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int | make_virtual ) |
Set or clear a node's virtual-junction flag.
Setting runs full validation of the usage rules and applies the derived-geometry contract (full depth = pipe crown, zero surcharge depth, zero ponded area). Clearing always succeeds for a virtual node. BUILDING or OPENED state only.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index (must be a JUNCTION to set). |
| [in] | make_virtual | 1 to set, 0 to clear. |
| SWMM_ENGINE_API int swmm_node_virtual_eligible | ( | SWMM_Engine | engine, |
| int | idx, | ||
| int * | rule_code ) |
Dry-run check of the virtual-junction usage rules for a node.
Read-only: evaluates the same structural rules that swmm_node_set_virtual() enforces (exactly two attached conduits of identical cross-section, zero offsets, no 2D surface coupling, dynamic-wave or FV routing) without changing any state and without requiring the node to currently be a JUNCTION — so callers can offer "convert to virtual junction" only when it would succeed.
| [in] | engine | Engine handle. |
| [in] | idx | Zero-based node index. |
| [out] | rule_code | Receives 0 when the node satisfies every rule, else the distinct ERR_VJ_* rule code (see swmm_node_set_virtual) identifying the violated rule. |