OpenSWMM Engine  6.0.0-alpha.3
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.3)
Loading...
Searching...
No Matches
SimulationOptions.hpp
Go to the documentation of this file.
1
23
24#ifndef OPENSWMM_ENGINE_SIMULATION_OPTIONS_HPP
25#define OPENSWMM_ENGINE_SIMULATION_OPTIONS_HPP
26
27#include "FilePathPair.hpp"
28#include <string>
29#include <vector>
30#include <unordered_map>
31#include <cstdint>
32#include <cmath>
33
34namespace openswmm {
35
36// ============================================================================
37// Enumerators matching legacy SWMM enums.h
38// ============================================================================
39
44enum class FlowUnits : int {
45 CFS = 0,
46 GPM = 1,
47 MGD = 2,
48 CMS = 3,
49 LPS = 4,
50 MLD = 5
51};
52
57enum class RoutingModel : int {
58 STEADY = 0,
59 KINWAVE = 1,
61};
62
74
79enum class RunoffModel : int {
80 NONE = 0,
82};
83
101enum class NodeContinuity : int {
104};
105
106// ============================================================================
107// SimulationOptions struct
108// ============================================================================
109
125 // -----------------------------------------------------------------------
126 // Time control
127 // -----------------------------------------------------------------------
128
131 double start_date = 2453006.0; // Jan 1, 2004 OADate (days since 12/30/1899) (legacy default)
132
134 double end_date = 0.0;
135
145 double total_duration_ms = -1.0;
146
148 double report_start = 0.0;
149
151 double routing_step = 20.0;
152
154 double min_routing_step = 0.5;
155
157 double dry_step = 3600.0;
158
160 double wet_step = 300.0;
161
163 double report_step = 900.0;
164
166 double dry_days = 0.0;
167
170 double variable_step = 0.75;
171
177 double lengthening_step = 0.0;
178
180 int sweep_start = 1;
181
183 int sweep_end = 365;
184
185 // -----------------------------------------------------------------------
186 // Flow and routing
187 // -----------------------------------------------------------------------
188
191
194
197
200
201 // -----------------------------------------------------------------------
202 // Solver settings
203 // -----------------------------------------------------------------------
204
206 int max_trials = 8;
207
212
217 double dps_target_celerity = 25.0;
218
224 double dps_alpha = 3.0;
225
231 double dps_decay_time = 0.5;
232
235
245 bool anderson_accel = false;
246
249 int normal_flow_ltd = 2; // BOTH (legacy default)
250
254
257 int inertial_damping = 1; // PARTIAL (legacy default)
258
261 int link_offsets = 0; // DEPTH_OFFSET (legacy default)
262
264 double min_slope = 0.0;
265
267 double min_surf_area = 0.0; // 0 = use MIN_SURFAREA constant
268
271 double head_tol = 0.005;
272
275 double sys_flow_tol = 0.05;
276
279 double lat_flow_tol = 0.05;
280
285 bool skip_steady_state = false;
286
297
298 // -----------------------------------------------------------------------
299 // System settings
300 // -----------------------------------------------------------------------
301
303 bool quality_routing = false;
304
306 bool allow_ponding = false;
307
309 bool ignore_rainfall = false;
310
312 bool ignore_snow_melt = false;
313
315 bool ignore_groundwater = false;
316
318 bool ignore_rdii = false;
319
321 bool ignore_routing = false;
322
324 bool ignore_quality = false;
325
326 // -----------------------------------------------------------------------
334 double rule_step = 0.0;
335
336 // Threading
337 // -----------------------------------------------------------------------
338
353 int num_threads = 1;
354
355 // -----------------------------------------------------------------------
356 // New in 6.0.0 — CRS (R06)
357 // -----------------------------------------------------------------------
358
375 std::string crs;
376
377 // -----------------------------------------------------------------------
378 // New in 6.0.0 — Extension options map (R05)
379 // -----------------------------------------------------------------------
380
398 std::unordered_map<std::string, std::string> ext_options;
399
400 // -----------------------------------------------------------------------
401 // Evaporation settings (from [EVAPORATION] section)
402 // -----------------------------------------------------------------------
403
405 int evap_type = 0;
406
408 double evap_values[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
409
411 std::string evap_ts_name;
412
414 std::string evap_recovery_pat;
415
417 bool evap_dry_only = false;
418
420 double pan_coeff[12] = {1,1,1,1,1,1,1,1,1,1,1,1};
421
422 // -----------------------------------------------------------------------
423 // Temperature settings (from [TEMPERATURE] section)
424 // -----------------------------------------------------------------------
425
427 int temp_source = 0;
428
430 std::string temp_ts_name;
431
434
436 double temp_file_start = 0.0;
437
442 int temp_units = -1;
443
445 int wind_type = 0;
446
448 double wind_speed[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
449
451 double snow_divt = 34.0;
452
454 double snow_ati_wt = 0.5;
455
457 double snow_nrg_ratio = 0.6;
458
460 double snow_lat = 0.0;
461
467 double snow_dtlong = 0.0;
468
473 double snow_elev = 0.0;
474
476 double snow_min_melt = 0.0;
477
479 double snow_max_melt = 0.0;
480
482 double adc_imperv[10] = {1,1,1,1,1,1,1,1,1,1};
483
485 double adc_perv[10] = {1,1,1,1,1,1,1,1,1,1};
486
487 // -----------------------------------------------------------------------
488 // Report settings (from [REPORT] section)
489 // -----------------------------------------------------------------------
490
492 bool rpt_disabled = false;
493
496
498 int rpt_nodes = 1;
499
501 int rpt_links = 1;
502
504 bool rpt_input = false;
505
507 bool rpt_continuity = true;
508
510 bool rpt_flowstats = true;
511
513 bool rpt_controls = false;
514
516 bool rpt_averages = false;
517
519 std::vector<std::string> rpt_subcatch_names;
520
522 std::vector<std::string> rpt_node_names;
523
525 std::vector<std::string> rpt_link_names;
526
532 double totalDurationMs() const {
533 if (total_duration_ms >= 0.0) return total_duration_ms;
534 return std::floor((end_date - start_date) * 86400.0) * 1000.0;
535 }
536};
537
538} /* namespace openswmm */
539
540#endif /* OPENSWMM_ENGINE_SIMULATION_OPTIONS_HPP */
Carrier for an external file reference in a SWMM model.
@ NONE
Definition SimulationContext.hpp:125
Definition NodeCoupling.cpp:15
InfiltrationModel
Infiltration methods.
Definition SimulationOptions.hpp:67
@ MOD_GREEN_AMPT
Definition SimulationOptions.hpp:71
@ CURVE_NUMBER
Definition SimulationOptions.hpp:72
@ GREEN_AMPT
Definition SimulationOptions.hpp:70
@ HORTON
Definition SimulationOptions.hpp:68
@ MOD_HORTON
Definition SimulationOptions.hpp:69
FlowUnits
Flow unit systems.
Definition SimulationOptions.hpp:44
@ GPM
Gallons per minute.
Definition SimulationOptions.hpp:46
@ MGD
Million gallons per day.
Definition SimulationOptions.hpp:47
@ CFS
Cubic feet per second.
Definition SimulationOptions.hpp:45
@ MLD
Million liters per day.
Definition SimulationOptions.hpp:50
@ CMS
Cubic meters per second.
Definition SimulationOptions.hpp:48
@ LPS
Liters per second.
Definition SimulationOptions.hpp:49
NodeContinuity
Node continuity formulation for depth update.
Definition SimulationOptions.hpp:101
@ EXPLICIT
Classic explicit two-branch (default)
Definition SimulationOptions.hpp:102
@ SEMI_IMPLICIT
Unified semi-implicit formulation.
Definition SimulationOptions.hpp:103
RunoffModel
Runoff routing methods.
Definition SimulationOptions.hpp:79
@ NL_POND
Non-linear reservoir (default)
Definition SimulationOptions.hpp:81
RoutingModel
Flow routing methods.
Definition SimulationOptions.hpp:57
@ KINWAVE
Kinematic wave approximation.
Definition SimulationOptions.hpp:59
@ STEADY
Steady-state (no routing)
Definition SimulationOptions.hpp:58
@ DYNWAVE
Dynamic wave (full Saint-Venant)
Definition SimulationOptions.hpp:60
Two-string carrier for any external file path that appears in a SWMM .inp file.
Definition FilePathPair.hpp:47
All SWMM simulation options parsed from [OPTIONS] section.
Definition SimulationOptions.hpp:124
bool ignore_groundwater
Ignore groundwater.
Definition SimulationOptions.hpp:315
double dry_step
Dry-weather runoff timestep in seconds.
Definition SimulationOptions.hpp:157
bool rpt_disabled
TRUE if all reporting is disabled.
Definition SimulationOptions.hpp:492
double adc_imperv[10]
Areal depletion curve for impervious surfaces (10 fractions).
Definition SimulationOptions.hpp:482
bool rpt_continuity
Report continuity errors (default true).
Definition SimulationOptions.hpp:507
double routing_step
Hydraulic routing timestep in seconds. Legacy default: 20.
Definition SimulationOptions.hpp:151
double variable_step
Courant factor for variable time stepping (0 = fixed step).
Definition SimulationOptions.hpp:170
bool ignore_routing
Ignore routing.
Definition SimulationOptions.hpp:321
double snow_min_melt
Snowmelt: minimum melt coefficient.
Definition SimulationOptions.hpp:476
int rpt_links
Link reporting: 0=NONE, 1=ALL, 2=SOME. Default ALL.
Definition SimulationOptions.hpp:501
double min_routing_step
Minimum routing timestep in seconds (CFL floor).
Definition SimulationOptions.hpp:154
double end_date
Simulation end date/time (decimal days, OADate (days since 12/30/1899)).
Definition SimulationOptions.hpp:134
std::string crs
Coordinate reference system string.
Definition SimulationOptions.hpp:375
FlowUnits flow_units
Flow units system.
Definition SimulationOptions.hpp:190
int evap_type
Evaporation type: 0=CONSTANT, 1=MONTHLY, 2=TIMESERIES, 3=TEMPERATURE, 4=FILE.
Definition SimulationOptions.hpp:405
double lat_flow_tol
Lateral inflow tolerance (fraction, e.g., 0.05 = 5%).
Definition SimulationOptions.hpp:279
bool ignore_rainfall
Ignore rainfall (for hot start runs).
Definition SimulationOptions.hpp:309
double wet_step
Wet-weather runoff timestep in seconds.
Definition SimulationOptions.hpp:160
double snow_divt
Snowmelt: dividing temperature.
Definition SimulationOptions.hpp:451
std::string evap_ts_name
Timeseries name for evaporation (evap_type == 2).
Definition SimulationOptions.hpp:411
std::string evap_recovery_pat
Recovery pattern name for evaporation.
Definition SimulationOptions.hpp:414
int wind_type
Wind speed type: 0=MONTHLY, 1=FILE.
Definition SimulationOptions.hpp:445
RoutingModel routing_model
Routing method. Legacy default: DYNWAVE.
Definition SimulationOptions.hpp:193
bool ignore_snow_melt
Ignore snowmelt.
Definition SimulationOptions.hpp:312
std::unordered_map< std::string, std::string > ext_options
Key-value map for unknown [OPTIONS] keys.
Definition SimulationOptions.hpp:398
std::vector< std::string > rpt_link_names
Named links to report (used when rpt_links == 2).
Definition SimulationOptions.hpp:525
bool rpt_flowstats
Report flow statistics (default true).
Definition SimulationOptions.hpp:510
double snow_dtlong
Snowmelt: longitude/solar-time correction (minutes).
Definition SimulationOptions.hpp:467
int surcharge_method
Surcharge method: 0=EXTRAN, 1=SLOT, 2=DYNAMIC_SLOT (DPS).
Definition SimulationOptions.hpp:211
double dps_decay_time
DPS decay time scale (seconds).
Definition SimulationOptions.hpp:231
double pan_coeff[12]
Monthly pan coefficients (used when evap_type == 4/FILE).
Definition SimulationOptions.hpp:420
bool rpt_controls
Report control actions (default false).
Definition SimulationOptions.hpp:513
double head_tol
Convergence head tolerance in project length units.
Definition SimulationOptions.hpp:271
bool skip_steady_state
Skip routing when system is in steady state.
Definition SimulationOptions.hpp:285
double snow_elev
Snowmelt: site elevation above sea level (ft, internal units).
Definition SimulationOptions.hpp:473
int rpt_nodes
Node reporting: 0=NONE, 1=ALL, 2=SOME. Default ALL.
Definition SimulationOptions.hpp:498
double evap_values[12]
Monthly evaporation values (used when evap_type == 0 or 1).
Definition SimulationOptions.hpp:408
double snow_nrg_ratio
Snowmelt: negative melt ratio.
Definition SimulationOptions.hpp:457
double total_duration_ms
Total simulation duration in milliseconds, or -1 if not set.
Definition SimulationOptions.hpp:145
double totalDurationMs() const
Total simulation duration in milliseconds (legacy TotalDuration).
Definition SimulationOptions.hpp:532
double dps_target_celerity
DPS target pressure celerity (m/s, converted to ft/s at init).
Definition SimulationOptions.hpp:217
double snow_max_melt
Snowmelt: maximum melt coefficient.
Definition SimulationOptions.hpp:479
RunoffModel runoff_model
Runoff routing method.
Definition SimulationOptions.hpp:199
int rpt_subcatchments
Subcatchment reporting: 0=NONE, 1=ALL, 2=SOME. Default ALL.
Definition SimulationOptions.hpp:495
int sweep_start
Street sweeping start day-of-year (1-365). 0 = not set.
Definition SimulationOptions.hpp:180
int inertial_damping
Inertial damping: 0=NONE, 1=PARTIAL, 2=FULL.
Definition SimulationOptions.hpp:257
double snow_lat
Snowmelt: latitude (degrees).
Definition SimulationOptions.hpp:460
std::string temp_ts_name
Timeseries name for temperature data.
Definition SimulationOptions.hpp:430
std::vector< std::string > rpt_node_names
Named nodes to report (used when rpt_nodes == 2).
Definition SimulationOptions.hpp:522
FilePathPair temp_file
File path for temperature data. Carries {absolute, original}.
Definition SimulationOptions.hpp:433
double temp_file_start
Temperature file start date (OADate).
Definition SimulationOptions.hpp:436
double report_start
Report start date/time.
Definition SimulationOptions.hpp:148
bool ignore_quality
Ignore water quality.
Definition SimulationOptions.hpp:324
double sys_flow_tol
System flow tolerance (fraction, e.g., 0.05 = 5%).
Definition SimulationOptions.hpp:275
bool write_absolute_paths
Slice IO-4 opt-out: emit external-file paths verbatim absolute.
Definition SimulationOptions.hpp:296
int normal_flow_ltd
Normal flow limitation: 0=SLOPE, 1=FROUDE, 2=BOTH, 3=NEITHER.
Definition SimulationOptions.hpp:249
int force_main_eqn
Force main equation: 0=Hazen-Williams, 1=Darcy-Weisbach.
Definition SimulationOptions.hpp:253
NodeContinuity node_continuity
Node continuity formulation for depth update. Default: EXPLICIT (legacy).
Definition SimulationOptions.hpp:234
std::vector< std::string > rpt_subcatch_names
Named subcatchments to report (used when rpt_subcatchments == 2).
Definition SimulationOptions.hpp:519
bool rpt_averages
Report time-averaged results (default false).
Definition SimulationOptions.hpp:516
double rule_step
Control rule evaluation interval (seconds).
Definition SimulationOptions.hpp:334
int max_trials
Maximum number of flow routing iterations (dynamic wave).
Definition SimulationOptions.hpp:206
bool rpt_input
Report input summary.
Definition SimulationOptions.hpp:504
int link_offsets
Link offset mode: 0=DEPTH_OFFSET, 1=ELEV_OFFSET.
Definition SimulationOptions.hpp:261
bool evap_dry_only
If true, evaporation only occurs on dry days.
Definition SimulationOptions.hpp:417
double snow_ati_wt
Snowmelt: ATI weight (0–1).
Definition SimulationOptions.hpp:454
double start_date
Simulation start date/time (decimal days, OADate (days since 12/30/1899)).
Definition SimulationOptions.hpp:131
double adc_perv[10]
Areal depletion curve for pervious surfaces (10 fractions).
Definition SimulationOptions.hpp:485
double min_surf_area
Minimum node surface area (ft²).
Definition SimulationOptions.hpp:267
double wind_speed[12]
Monthly wind speed values (12 months).
Definition SimulationOptions.hpp:448
bool quality_routing
True if quality routing is enabled.
Definition SimulationOptions.hpp:303
bool allow_ponding
True if evaporation is included.
Definition SimulationOptions.hpp:306
bool anderson_accel
Enable Anderson acceleration for Picard iteration convergence.
Definition SimulationOptions.hpp:245
double report_step
Reporting output interval in seconds.
Definition SimulationOptions.hpp:163
int temp_source
Temperature source: 0=NONE, 1=TIMESERIES, 2=FILE.
Definition SimulationOptions.hpp:427
InfiltrationModel infiltration
Infiltration method for subcatchments.
Definition SimulationOptions.hpp:196
bool ignore_rdii
Ignore RDII.
Definition SimulationOptions.hpp:318
double dry_days
Antecedent dry days.
Definition SimulationOptions.hpp:166
int temp_units
Climate-file temperature units: 0=tenths-degC (C10), 1=degC (C), 2=degF (F); -1 = unspecified (reader...
Definition SimulationOptions.hpp:442
int num_threads
Number of OpenMP threads for parallel solver loops.
Definition SimulationOptions.hpp:353
double dps_alpha
DPS surcharge shock parameter (dimensionless, >= 2).
Definition SimulationOptions.hpp:224
double min_slope
Minimum conduit slope (ft/ft).
Definition SimulationOptions.hpp:264
int sweep_end
Street sweeping end day-of-year (1-365). 0 = not set.
Definition SimulationOptions.hpp:183
double lengthening_step
Conduit lengthening timestep (seconds, 0 = use routing_step).
Definition SimulationOptions.hpp:177