25#ifndef OPENSWMM_UNIT_CONVERSION_HPP
26#define OPENSWMM_UNIT_CONVERSION_HPP
60static constexpr double Ucf[10][2] = {
62 {43200.0, 1097280.0 },
64 {1036800.0, 26334720.0},
66 {2.2956e-5, 0.92903e-5},
75static constexpr double Qcf[6] = {
97inline constexpr std::array<std::array<double, 2>, 10>
makeUcfInv() {
98 std::array<std::array<double, 2>, 10> r{};
99 for (
int q = 0; q < 10; ++q)
100 for (
int u = 0; u < 2; ++u)
101 r[
static_cast<std::size_t
>(q)][
static_cast<std::size_t
>(u)] =
106 std::array<double, 6> r{};
107 for (
int f = 0; f < 6; ++f) r[static_cast<std::size_t>(f)] = 1.0 / Qcf[f];
122static constexpr double ACRES_TO_FT2 = 43560.0;
123static constexpr double FT3_TO_MGAL = 7.48052e-6;
124static constexpr double SEC_PER_DAY = 86400.0;
173 {
"CFS",
"GPM",
"MGD",
"CMS",
"LPS",
"MLD" };
213 return unit_system == 0 ? tF : (5.0 / 9.0) * (tF - 32.0);
Definition UnitConversion.hpp:96
constexpr std::array< double, 6 > makeQcfInv()
Definition UnitConversion.hpp:105
constexpr std::array< std::array< double, 2 >, 10 > makeUcfInv()
Definition UnitConversion.hpp:97
Definition UnitConversion.cpp:15
constexpr const char * FlowUnitWords[6]
Legacy FlowUnitWords — index by FlowUnits enum (CFS,GPM,MGD,CMS,LPS,MLD).
Definition UnitConversion.hpp:172
constexpr std::array< std::array< double, 2 >, 10 > Ucf_inv
Reciprocal of Ucf[quantity][unit_system] — multiply display by this → internal.
Definition UnitConversion.hpp:113
Quantity
Definition UnitConversion.hpp:40
@ TEMPERATURE
Divide °F (US) or °C (SI) by this → °F.
Definition UnitConversion.hpp:48
@ EVAPRATE
Divide in/day (US) or mm/day (SI) by this → ft/sec.
Definition UnitConversion.hpp:43
@ LANDAREA
Divide ac (US) or ha (SI) by this → ft²
Definition UnitConversion.hpp:45
@ MASS
Divide lb (US) or kg (SI) by this → mg.
Definition UnitConversion.hpp:49
@ VOLUME
Divide ft³ (US) or m³ (SI) by this → ft³
Definition UnitConversion.hpp:46
@ FLOW
Divide display flow units by this → cfs.
Definition UnitConversion.hpp:51
@ RAINFALL
Divide in/hr (US) or mm/hr (SI) by this → ft/sec.
Definition UnitConversion.hpp:41
@ RAINDEPTH
Divide in (US) or mm (SI) by this → ft.
Definition UnitConversion.hpp:42
@ WINDSPEED
Divide mph (US) or km/hr (SI) by this → mph.
Definition UnitConversion.hpp:47
@ LENGTH
Divide ft (US) or m (SI) by this → ft.
Definition UnitConversion.hpp:44
@ GWFLOW
Divide cfs/ac (US) or cms/ha (SI) by this → ft/sec.
Definition UnitConversion.hpp:50
constexpr std::array< double, 6 > Qcf_inv
Reciprocal of Qcf[flow_units] — multiply display flow by this → cfs.
Definition UnitConversion.hpp:116
double UCF(int quantity, const SimulationOptions &opts)
Get unit conversion factor for a quantity.
Definition UnitConversion.cpp:23
double UCF_inv(int quantity, const SimulationOptions &opts)
Reciprocal of UCF — multiply display by this to get internal units.
Definition UnitConversion.cpp:37
int getUnitSystem(int flow_units)
Determine unit system (0=US, 1=SI) from flow units.
Definition UnitConversion.cpp:17
Definition NodeCoupling.cpp:15
All SWMM simulation options parsed from [OPTIONS] section.
Definition SimulationOptions.hpp:124
Definition UnitConversion.hpp:184
const char * depth_word
rainfall / runoff depth (in | mm)
Definition UnitConversion.hpp:202
int flow_units
FlowUnits enum value.
Definition UnitConversion.hpp:186
const char * vel_word
link velocity (ft/sec | m/sec)
Definition UnitConversion.hpp:203
double landarea
ft² → ac | ha
Definition UnitConversion.hpp:195
const char * flow_word
CFS | CMS | ...
Definition UnitConversion.hpp:200
const char * mvol_word
10^6 gal | 10^6 ltr
Definition UnitConversion.hpp:204
double length
ft → ft | m
Definition UnitConversion.hpp:190
double temperature(double tF) const
Internal temperature (°F) → display (°F for US, °C for SI).
Definition UnitConversion.hpp:212
static DisplayUnits from(const SimulationOptions &opts)
Build from simulation options (selects unit system + flow units).
Definition UnitConversion.cpp:51
double rainfall
ft/s → in/hr | mm/hr
Definition UnitConversion.hpp:192
double volume
ft³ → ft³ | m³
Definition UnitConversion.hpp:191
double raindepth
ft → in | mm (also runoff-depth columns)
Definition UnitConversion.hpp:193
const char * storage_vol_word
1000 ft3 | 1000 m3
Definition UnitConversion.hpp:206
double mvol
ft³ → 10^6 gal | 10^6 ltr
Definition UnitConversion.hpp:196
const char * landvol_word
acre-feet | hectare-m
Definition UnitConversion.hpp:205
int unit_system
0 = US, 1 = SI
Definition UnitConversion.hpp:185
double flow
cfs → display flow (Qcf)
Definition UnitConversion.hpp:189
double evaprate
ft/s → in/day | mm/day
Definition UnitConversion.hpp:194
double landvol
ft³ → acre-ft | hectare-m
Definition UnitConversion.hpp:197
const char * length_word
depth / HGL / surcharge column
Definition UnitConversion.hpp:201