OpenSWMM Engine  6.0.0-alpha.4
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.4)
Loading...
Searching...
No Matches
openswmm_reactions.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 */
17
38
39#ifndef OPENSWMM_REACTIONS_H
40#define OPENSWMM_REACTIONS_H
41
42#include "openswmm_engine.h"
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
48/* Expression scopes for validation. */
49#define SWMM_RXN_SCOPE_TERM 0
50#define SWMM_RXN_SCOPE_PIPE 1
51#define SWMM_RXN_SCOPE_TANK 2
52
53/* Expression forms — mirrors ReactionExprForm. */
54#define SWMM_RXN_FORM_NONE 0
55#define SWMM_RXN_FORM_RATE 1
56#define SWMM_RXN_FORM_EQUIL 2
57#define SWMM_RXN_FORM_FORMULA 3
58
79 int scope, const char* expr, char* errbuf, int buflen, int* col_out);
80
81/* ---- Model discovery (require an engine with a parsed model) ----------- */
82
85
88 char* name, int name_len, int* is_wall,
89 char* units, int units_len, double* atol, double* rtol);
90
93
96 char* name, int name_len, int* is_param, double* value);
97
100
103 char* name, int name_len, char* expr, int expr_len);
104
110 int species_idx, int* form, char* expr, int expr_len);
111
118 const char* key, char* value, int value_len);
119
120/* ---- CRUD (E-C2) — BUILDING/OPENED only (rows only seed at start).
121 * Every mutator validates eagerly: the whole system is recompiled before
122 * the call returns, and a mutation that leaves any expression uncompilable
123 * is rolled back and refused (SWMM_ERR_BADPARAM) — the GUI can never store
124 * an uncompilable model (D-RC5). Species add/remove rebuild the species
125 * registry's MSX block in place (D-RC3); removal of a species still
126 * referenced by any compiled expression is refused. --------------------- */
127
130 const char* name, int is_wall, const char* units, double atol,
131 double rtol);
132
135
138 const char* name, int is_param, double value);
139
142 double value);
143
146
149 const char* name, const char* expr);
150
153 const char* expr);
154
157
163 int species_idx, int form, const char* expr);
164
167 const char* key, const char* value);
168
169/* ---- Initial quality (GLOBAL + the E-B NODE/LINK rows) ----------------- */
170
172 int species_idx, double* value);
174 int species_idx, double value);
177 int entry_idx, int* is_link, int* elem_idx, int* species_idx,
178 double* value);
181 int is_link, int elem_idx, int species_idx, double value);
183 int entry_idx);
184
185/* ---- Whole-file text surface (E-C3) — the GUI text tab's contract.
186 * serialize -> apply_text -> serialize is byte-identical (D-RC6). -------- */
187
197 int buflen, int* needed_len);
198
206 const char* text, char* errbuf, int buflen);
207
216 const char* text, char* errbuf, int buflen);
217
223 const char* path_or_null);
224
225/* ---- Static vocabulary (no engine handle needed) ----------------------- */
226
230
232SWMM_ENGINE_API int swmm_reaction_hydvar_get(int idx, char* name,
233 int name_len, char* description, int desc_len);
234
237
239SWMM_ENGINE_API int swmm_reaction_function_get(int idx, char* name,
240 int name_len, int* arity);
241
242#ifdef __cplusplus
243}
244#endif
245
246#endif /* OPENSWMM_REACTIONS_H */
#define SWMM_ENGINE_API
Definition openswmm_2d.h:53
void * SWMM_Engine
Opaque handle to an OpenSWMM Engine instance.
Definition openswmm_callbacks.h:51
OpenSWMM Engine — primary transparent C API (master header).
SWMM_ENGINE_API int swmm_reaction_validate_expression(SWMM_Engine engine, int scope, const char *expr, char *errbuf, int buflen, int *col_out)
Compile-only validation of a reaction expression against the model's live vocabulary (species,...
Definition openswmm_reactions_impl.cpp:115
SWMM_ENGINE_API int swmm_reaction_term_remove(SWMM_Engine engine, int idx)
Remove term idx. Refused while referenced.
Definition openswmm_reactions_impl.cpp:460
SWMM_ENGINE_API int swmm_reactions_serialize(SWMM_Engine engine, char *buf, int buflen, int *needed_len)
Canonical .rxn text from engine state.
Definition openswmm_reactions_impl.cpp:667
SWMM_ENGINE_API int swmm_reaction_species_get(SWMM_Engine engine, int idx, char *name, int name_len, int *is_wall, char *units, int units_len, double *atol, double *rtol)
Read one species: name, BULK(0)/WALL(1), units, tolerances.
Definition openswmm_reactions_impl.cpp:158
SWMM_ENGINE_API int swmm_reactions_save(SWMM_Engine engine, const char *path_or_null)
Serialize to the bound component config path (or path_or_null when given). SWMM_ERR_BADPARAM when nei...
Definition openswmm_reactions_impl.cpp:762
SWMM_ENGINE_API int swmm_reaction_hydvar_count(void)
Number of built-in hydraulic variables (D Q U RE US FF AV HRT DT TEMP).
Definition openswmm_reactions_impl.cpp:794
SWMM_ENGINE_API int swmm_reaction_function_get(int idx, char *name, int name_len, int *arity)
Read one function's name and arity.
Definition openswmm_reactions_impl.cpp:814
SWMM_ENGINE_API int swmm_reaction_term_add(SWMM_Engine engine, const char *name, const char *expr)
Add an intermediate term (referencable by later terms only).
Definition openswmm_reactions_impl.cpp:425
SWMM_ENGINE_API int swmm_reaction_species_add(SWMM_Engine engine, const char *name, int is_wall, const char *units, double atol, double rtol)
Declare a species (is_wall: 0 BULK, 1 WALL; atol/rtol 0 = global).
Definition openswmm_reactions_impl.cpp:277
SWMM_ENGINE_API int swmm_reaction_term_count(SWMM_Engine engine)
Number of [REACTION_TERMS] entries.
Definition openswmm_reactions_impl.cpp:197
SWMM_ENGINE_API int swmm_reaction_init_elem_set(SWMM_Engine engine, int is_link, int elem_idx, int species_idx, double value)
Upsert on (is_link, elem_idx, species_idx). Value must be >= 0.
Definition openswmm_reactions_impl.cpp:622
SWMM_ENGINE_API int swmm_reaction_function_count(void)
Number of built-in functions (EXP … TAN arity 1; MIN MAX POW 2).
Definition openswmm_reactions_impl.cpp:810
SWMM_ENGINE_API int swmm_reaction_coeff_add(SWMM_Engine engine, const char *name, int is_param, double value)
Add a coefficient (is_param: 1 PARAMETER, 0 CONSTANT).
Definition openswmm_reactions_impl.cpp:374
SWMM_ENGINE_API int swmm_reaction_init_global_set(SWMM_Engine engine, int species_idx, double value)
Definition openswmm_reactions_impl.cpp:585
SWMM_ENGINE_API int swmm_reaction_init_elem_remove(SWMM_Engine engine, int entry_idx)
Definition openswmm_reactions_impl.cpp:647
SWMM_ENGINE_API int swmm_reactions_check_text(SWMM_Engine engine, const char *text, char *errbuf, int buflen)
Dry-run full-file parse+compile of .rxn TEXT against this model. Zero state change,...
Definition openswmm_reactions_impl.cpp:743
SWMM_ENGINE_API int swmm_reaction_coeff_remove(SWMM_Engine engine, int idx)
Remove coefficient idx. Refused while referenced.
Definition openswmm_reactions_impl.cpp:404
SWMM_ENGINE_API int swmm_reaction_term_set_expr(SWMM_Engine engine, int idx, const char *expr)
Replace term idx's expression.
Definition openswmm_reactions_impl.cpp:444
SWMM_ENGINE_API int swmm_reaction_coeff_count(SWMM_Engine engine)
Number of [REACTION_COEFFICIENTS] entries.
Definition openswmm_reactions_impl.cpp:176
SWMM_ENGINE_API int swmm_reaction_coeff_get(SWMM_Engine engine, int idx, char *name, int name_len, int *is_param, double *value)
Read one coefficient: name, PARAMETER(1)/CONSTANT(0), value.
Definition openswmm_reactions_impl.cpp:182
SWMM_ENGINE_API int swmm_reaction_species_count(SWMM_Engine engine)
Number of declared MSX species (0 when no reactions configured).
Definition openswmm_reactions_impl.cpp:153
SWMM_ENGINE_API int swmm_reaction_hydvar_get(int idx, char *name, int name_len, char *description, int desc_len)
Read one hydraulic variable's name and description.
Definition openswmm_reactions_impl.cpp:798
SWMM_ENGINE_API int swmm_reaction_expr_set(SWMM_Engine engine, int scope, int species_idx, int form, const char *expr)
Set (or clear, with SWMM_RXN_FORM_NONE) a species' expression in one scope (PIPE or TANK).
Definition openswmm_reactions_impl.cpp:478
SWMM_ENGINE_API int swmm_reaction_init_elem_get(SWMM_Engine engine, int entry_idx, int *is_link, int *elem_idx, int *species_idx, double *value)
Definition openswmm_reactions_impl.cpp:605
SWMM_ENGINE_API int swmm_reaction_expr_get(SWMM_Engine engine, int scope, int species_idx, int *form, char *expr, int expr_len)
Read a species' expression in one scope (PIPE or TANK).
Definition openswmm_reactions_impl.cpp:217
SWMM_ENGINE_API int swmm_reaction_species_remove(SWMM_Engine engine, int idx)
Remove species idx. Refused while any expression references it.
Definition openswmm_reactions_impl.cpp:316
SWMM_ENGINE_API int swmm_reaction_init_global_get(SWMM_Engine engine, int species_idx, double *value)
Definition openswmm_reactions_impl.cpp:574
SWMM_ENGINE_API int swmm_reaction_option_set(SWMM_Engine engine, const char *key, const char *value)
Set a [REACTION_OPTIONS] value from its canonical token.
Definition openswmm_reactions_impl.cpp:506
SWMM_ENGINE_API int swmm_reactions_apply_text(SWMM_Engine engine, const char *text, char *errbuf, int buflen)
Transactional replace of the whole reaction system from .rxn TEXT.
Definition openswmm_reactions_impl.cpp:754
SWMM_ENGINE_API int swmm_reaction_init_elem_count(SWMM_Engine engine)
Definition openswmm_reactions_impl.cpp:599
SWMM_ENGINE_API int swmm_reaction_coeff_set_value(SWMM_Engine engine, int idx, double value)
Change a coefficient's value.
Definition openswmm_reactions_impl.cpp:393
SWMM_ENGINE_API int swmm_reaction_term_get(SWMM_Engine engine, int idx, char *name, int name_len, char *expr, int expr_len)
Read one term: name and its source expression.
Definition openswmm_reactions_impl.cpp:203
SWMM_ENGINE_API int swmm_reaction_option_get(SWMM_Engine engine, const char *key, char *value, int value_len)
Read a [REACTION_OPTIONS] value as its canonical token.
Definition openswmm_reactions_impl.cpp:236