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#define SWMM_RXN_SCOPE_SUBCATCHMENT 4
53#define SWMM_RXN_SCOPE_SUBSURFACE 3
54
55/* Expression forms — mirrors ReactionExprForm. */
56#define SWMM_RXN_FORM_NONE 0
57#define SWMM_RXN_FORM_RATE 1
58#define SWMM_RXN_FORM_EQUIL 2
59#define SWMM_RXN_FORM_FORMULA 3
60
83 const char* expr, char* errbuf, int buflen,
84 int* col_out);
85
86/* ---- Model discovery (require an engine with a parsed model) ----------- */
87
95
115SWMM_ENGINE_API int swmm_reaction_species_get(SWMM_Engine engine, int idx, char* name, int name_len,
116 int* is_wall, char* units, int units_len,
117 double* atol, double* rtol);
118
126
141SWMM_ENGINE_API int swmm_reaction_coeff_get(SWMM_Engine engine, int idx, char* name, int name_len,
142 int* is_param, double* value);
143
151
166SWMM_ENGINE_API int swmm_reaction_term_get(SWMM_Engine engine, int idx, char* name, int name_len,
167 char* expr, int expr_len);
168
184SWMM_ENGINE_API int swmm_reaction_expr_get(SWMM_Engine engine, int scope, int species_idx,
185 int* form, char* expr, int expr_len);
186
203SWMM_ENGINE_API int swmm_reaction_option_get(SWMM_Engine engine, const char* key, char* value,
204 int value_len);
205
206/* ---- CRUD (E-C2) — BUILDING/OPENED only (rows only seed at start).
207 * Mutators use operation-specific validation. Changes affecting expression
208 * indexes/source text recompile with reaction/registry snapshots; simple
209 * coefficient/source-value assignments do not recompile. Species add/remove
210 * rebuild the registry MSX block, and referenced species removal is refused.
211 * See each operation for side effects and rollback scope. --------------------- */
212
235SWMM_ENGINE_API int swmm_reaction_species_add(SWMM_Engine engine, const char* name, int is_wall,
236 const char* units, double atol, double rtol);
237
255
273SWMM_ENGINE_API int swmm_reaction_coeff_add(SWMM_Engine engine, const char* name, int is_param,
274 double value);
275
287SWMM_ENGINE_API int swmm_reaction_coeff_set_value(SWMM_Engine engine, int idx, double value);
288
304
321SWMM_ENGINE_API int swmm_reaction_term_add(SWMM_Engine engine, const char* name, const char* expr);
322
337SWMM_ENGINE_API int swmm_reaction_term_set_expr(SWMM_Engine engine, int idx, const char* expr);
338
353
372SWMM_ENGINE_API int swmm_reaction_expr_set(SWMM_Engine engine, int scope, int species_idx, int form,
373 const char* expr);
374
393SWMM_ENGINE_API int swmm_reaction_option_set(SWMM_Engine engine, const char* key,
394 const char* value);
395
396/* ---- Initial quality (GLOBAL + the E-B NODE/LINK rows) ----------------- */
397
410 double* value);
428 double value);
440SWMM_ENGINE_API int swmm_reaction_rain_conc_get(SWMM_Engine engine, int species_idx, double* value);
457SWMM_ENGINE_API int swmm_reaction_rain_conc_set(SWMM_Engine engine, int species_idx, double value);
477SWMM_ENGINE_API int swmm_reaction_init_elem_get(SWMM_Engine engine, int entry_idx, int* is_link,
478 int* elem_idx, int* species_idx, double* value);
498SWMM_ENGINE_API int swmm_reaction_init_elem_set(SWMM_Engine engine, int is_link, int elem_idx,
499 int species_idx, double value);
514
515/* ---- Whole-file text surface (E-C3) — the GUI text tab's contract.
516 * serialize -> apply_text -> serialize is byte-identical (D-RC6). -------- */
517
534SWMM_ENGINE_API int swmm_reactions_serialize(SWMM_Engine engine, char* buf, int buflen,
535 int* needed_len);
536
555SWMM_ENGINE_API int swmm_reactions_check_text(SWMM_Engine engine, const char* text, char* errbuf,
556 int buflen);
557
577SWMM_ENGINE_API int swmm_reactions_apply_text(SWMM_Engine engine, const char* text, char* errbuf,
578 int buflen);
579
593SWMM_ENGINE_API int swmm_reactions_save(SWMM_Engine engine, const char* path_or_null);
594
595/* ---- Static vocabulary (no engine handle needed) ----------------------- */
596
605
619SWMM_ENGINE_API int swmm_reaction_hydvar_get(int idx, char* name, int name_len, char* description,
620 int desc_len);
621
627
639SWMM_ENGINE_API int swmm_reaction_function_get(int idx, char* name, int name_len, int* arity);
640
641#ifdef __cplusplus
642}
643#endif
644
645#endif /* OPENSWMM_REACTIONS_H */
#define SWMM_ENGINE_API
Definition openswmm_2d.h:62
void * SWMM_Engine
Opaque handle to an OpenSWMM Engine instance.
Definition openswmm_callbacks.h:55
OpenSWMM Engine — primary transparent C API (master header).
SWMM_ENGINE_API int swmm_reaction_validate_expression(SWMM_Engine engine, int scope, const char *expr, char *errbuf, int buflen, int *col_out)
Compile an expression against the current reaction/model vocabulary without changing state.
Definition openswmm_reactions_impl.cpp:149
SWMM_ENGINE_API int swmm_reaction_term_remove(SWMM_Engine engine, int idx)
Remove an intermediate term that has no compiled references.
Definition openswmm_reactions_impl.cpp:565
SWMM_ENGINE_API int swmm_reactions_serialize(SWMM_Engine engine, char *buf, int buflen, int *needed_len)
Serialize the current reaction system into complete NUL-terminated canonical text.
Definition openswmm_reactions_impl.cpp:830
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 reaction-species declaration.
Definition openswmm_reactions_impl.cpp:214
SWMM_ENGINE_API int swmm_reactions_save(SWMM_Engine engine, const char *path_or_null)
Write canonical reaction text to an explicit or bound config path.
Definition openswmm_reactions_impl.cpp:945
SWMM_ENGINE_API int swmm_reaction_hydvar_count(void)
Count hydraulic identifiers exposed by the expression compiler.
Definition openswmm_reactions_impl.cpp:977
SWMM_ENGINE_API int swmm_reaction_rain_conc_get(SWMM_Engine engine, int species_idx, double *value)
Read a species rainfall concentration.
Definition openswmm_reactions_impl.cpp:725
SWMM_ENGINE_API int swmm_reaction_function_get(int idx, char *name, int name_len, int *arity)
Copy a compiler function name and its argument arity.
Definition openswmm_reactions_impl.cpp:999
SWMM_ENGINE_API int swmm_reaction_term_add(SWMM_Engine engine, const char *name, const char *expr)
Append a copied intermediate term and eagerly compile the system.
Definition openswmm_reactions_impl.cpp:531
SWMM_ENGINE_API int swmm_reaction_species_add(SWMM_Engine engine, const char *name, int is_wall, const char *units, double atol, double rtol)
Append a species and rebuild its unified registry block.
Definition openswmm_reactions_impl.cpp:340
SWMM_ENGINE_API int swmm_reaction_term_count(SWMM_Engine engine)
Count declared intermediate terms.
Definition openswmm_reactions_impl.cpp:251
SWMM_ENGINE_API int swmm_reaction_rain_conc_set(SWMM_Engine engine, int species_idx, double value)
Assign a species rainfall concentration before initialization.
Definition openswmm_reactions_impl.cpp:737
SWMM_ENGINE_API int swmm_reaction_init_elem_set(SWMM_Engine engine, int is_link, int elem_idx, int species_idx, double value)
Upsert a reaction per-element initial concentration.
Definition openswmm_reactions_impl.cpp:787
SWMM_ENGINE_API int swmm_reaction_function_count(void)
Count built-in expression functions.
Definition openswmm_reactions_impl.cpp:995
SWMM_ENGINE_API int swmm_reaction_coeff_add(SWMM_Engine engine, const char *name, int is_param, double value)
Append a coefficient without recompiling unchanged expression indices.
Definition openswmm_reactions_impl.cpp:475
SWMM_ENGINE_API int swmm_reaction_init_global_set(SWMM_Engine engine, int species_idx, double value)
Assign a species global initial concentration before initialization.
Definition openswmm_reactions_impl.cpp:751
SWMM_ENGINE_API int swmm_reaction_init_elem_remove(SWMM_Engine engine, int entry_idx)
Remove one per-element reaction seed row and shift later indices down.
Definition openswmm_reactions_impl.cpp:812
SWMM_ENGINE_API int swmm_reactions_check_text(SWMM_Engine engine, const char *text, char *errbuf, int buflen)
Parse and compile complete reaction text without retaining the staged system.
Definition openswmm_reactions_impl.cpp:926
SWMM_ENGINE_API int swmm_reaction_coeff_remove(SWMM_Engine engine, int idx)
Remove a coefficient only when no compiled expression/override uses it.
Definition openswmm_reactions_impl.cpp:504
SWMM_ENGINE_API int swmm_reaction_term_set_expr(SWMM_Engine engine, int idx, const char *expr)
Replace a term source expression and recompile dependent expressions.
Definition openswmm_reactions_impl.cpp:549
SWMM_ENGINE_API int swmm_reaction_coeff_count(SWMM_Engine engine)
Count declared coefficients.
Definition openswmm_reactions_impl.cpp:231
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 reaction coefficient declaration.
Definition openswmm_reactions_impl.cpp:237
SWMM_ENGINE_API int swmm_reaction_species_count(SWMM_Engine engine)
Count declared reaction species.
Definition openswmm_reactions_impl.cpp:208
SWMM_ENGINE_API int swmm_reaction_hydvar_get(int idx, char *name, int name_len, char *description, int desc_len)
Copy one compiler hydraulic-variable name and optional description.
Definition openswmm_reactions_impl.cpp:981
SWMM_ENGINE_API int swmm_reaction_expr_set(SWMM_Engine engine, int scope, int species_idx, int form, const char *expr)
Set or clear a species reaction expression in one domain.
Definition openswmm_reactions_impl.cpp:583
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)
Read a reaction per-element initial concentration row.
Definition openswmm_reactions_impl.cpp:772
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 reaction form and source text in one supported domain.
Definition openswmm_reactions_impl.cpp:270
SWMM_ENGINE_API int swmm_reaction_species_remove(SWMM_Engine engine, int idx)
Remove an unreferenced species and renumber dependent reaction indices.
Definition openswmm_reactions_impl.cpp:383
SWMM_ENGINE_API int swmm_reaction_init_global_get(SWMM_Engine engine, int species_idx, double *value)
Read a species global initial concentration.
Definition openswmm_reactions_impl.cpp:713
SWMM_ENGINE_API int swmm_reaction_option_set(SWMM_Engine engine, const char *key, const char *value)
Parse and assign one reaction option before initialization.
Definition openswmm_reactions_impl.cpp:614
SWMM_ENGINE_API int swmm_reactions_apply_text(SWMM_Engine engine, const char *text, char *errbuf, int buflen)
Replace the reaction system and its registry block from complete component text.
Definition openswmm_reactions_impl.cpp:937
SWMM_ENGINE_API int swmm_reaction_init_elem_count(SWMM_Engine engine)
Count declared per-element reaction seed rows.
Definition openswmm_reactions_impl.cpp:766
SWMM_ENGINE_API int swmm_reaction_coeff_set_value(SWMM_Engine engine, int idx, double value)
Replace one coefficient value without changing its identity or compiled index.
Definition openswmm_reactions_impl.cpp:494
SWMM_ENGINE_API int swmm_reaction_term_get(SWMM_Engine engine, int idx, char *name, int name_len, char *expr, int expr_len)
Read an intermediate term name and source expression.
Definition openswmm_reactions_impl.cpp:257
SWMM_ENGINE_API int swmm_reaction_option_get(SWMM_Engine engine, const char *key, char *value, int value_len)
Format a reaction option as its canonical token or numeric string.
Definition openswmm_reactions_impl.cpp:294