41#ifndef OPENSWMM_UNIT_CONVERSION_HPP
42#define OPENSWMM_UNIT_CONVERSION_HPP
76static constexpr double Ucf[10][2] = {
80 {1036800.0, 26334720.0},
82 {2.2956e-5, 0.92903e-5},
91static constexpr double Qcf[6] = {
117inline constexpr std::array<std::array<double, 2>, 10>
makeUcfInv() {
118 std::array<std::array<double, 2>, 10> r{};
119 for (
int q = 0; q < 10; ++q)
120 for (
int u = 0; u < 2; ++u)
121 r[
static_cast<std::size_t
>(q)][
static_cast<std::size_t
>(u)] = 1.0 / Ucf[q][u];
129 std::array<double, 6> r{};
130 for (
int f = 0; f < 6; ++f)
131 r[
static_cast<std::size_t
>(f)] = 1.0 / Qcf[f];
146static constexpr double ACRES_TO_FT2 = 43560.0;
147static constexpr double FT3_TO_MGAL = 7.48052e-6;
148static constexpr double SEC_PER_DAY = 86400.0;
196inline constexpr const char*
FlowUnitWords[6] = {
"CFS",
"GPM",
"MGD",
"CMS",
"LPS",
"MLD"};
250 return unit_system == 0 ? tF : (5.0 / 9.0) * (tF - 32.0);
Definition UnitConversion.hpp:112
constexpr std::array< double, 6 > makeQcfInv()
Build compile-time reciprocals of flow conversion factors.
Definition UnitConversion.hpp:128
constexpr std::array< std::array< double, 2 >, 10 > makeUcfInv()
Build compile-time reciprocals of every quantity/system conversion.
Definition UnitConversion.hpp:117
Definition UnitConversion.cpp:31
constexpr const char * FlowUnitWords[6]
Legacy FlowUnitWords — index by FlowUnits enum (CFS,GPM,MGD,CMS,LPS,MLD).
Definition UnitConversion.hpp:196
constexpr std::array< std::array< double, 2 >, 10 > Ucf_inv
Reciprocal of Ucf[quantity][unit_system] — multiply display by this → internal.
Definition UnitConversion.hpp:137
Quantity
Definition UnitConversion.hpp:56
@ TEMPERATURE
Legacy scale entry only; absolute temperatures require offset conversion.
Definition UnitConversion.hpp:64
@ EVAPRATE
Divide in/day (US) or mm/day (SI) by this → ft/sec.
Definition UnitConversion.hpp:59
@ LANDAREA
Divide ac (US) or ha (SI) by this → ft²
Definition UnitConversion.hpp:61
@ MASS
Divide lb (US) or kg (SI) by this → mg.
Definition UnitConversion.hpp:65
@ VOLUME
Divide ft³ (US) or m³ (SI) by this → ft³
Definition UnitConversion.hpp:62
@ FLOW
Divide display flow units by this → cfs.
Definition UnitConversion.hpp:67
@ RAINFALL
Divide in/hr (US) or mm/hr (SI) by this → ft/sec.
Definition UnitConversion.hpp:57
@ RAINDEPTH
Divide in (US) or mm (SI) by this → ft.
Definition UnitConversion.hpp:58
@ WINDSPEED
Divide mph (US) or km/hr (SI) by this → mph.
Definition UnitConversion.hpp:63
@ LENGTH
Divide ft (US) or m (SI) by this → ft.
Definition UnitConversion.hpp:60
@ GWFLOW
Divide cfs/ac (US) or cms/ha (SI) by this → ft/sec.
Definition UnitConversion.hpp:66
constexpr std::array< double, 6 > Qcf_inv
Reciprocal of Qcf[flow_units] — multiply display flow by this → cfs.
Definition UnitConversion.hpp:140
double UCF(int quantity, const SimulationOptions &opts)
Get unit conversion factor for a quantity.
Definition UnitConversion.cpp:39
double UCF_inv(int quantity, const SimulationOptions &opts)
Reciprocal of UCF — multiply display by this to get internal units.
Definition UnitConversion.cpp:53
int getUnitSystem(int flow_units)
Determine unit system (0=US, 1=SI) from flow units.
Definition UnitConversion.cpp:33
Definition ExchangeLaw.hpp:60
All SWMM simulation options parsed from [OPTIONS] section.
Definition SimulationOptions.hpp:168
Definition UnitConversion.hpp:207
const char * depth_word
rainfall / runoff depth (in | mm)
Definition UnitConversion.hpp:225
int flow_units
FlowUnits enum value.
Definition UnitConversion.hpp:209
const char * vel_word
link velocity (ft/sec | m/sec)
Definition UnitConversion.hpp:226
double landarea
ft² → ac | ha
Definition UnitConversion.hpp:218
const char * flow_word
CFS | CMS | ...
Definition UnitConversion.hpp:223
const char * mvol_word
10^6 gal | 10^6 ltr
Definition UnitConversion.hpp:227
double length
ft → ft | m
Definition UnitConversion.hpp:213
double temperature(double tF) const
Convert an internal Fahrenheit temperature to this bundle's display scale.
Definition UnitConversion.hpp:249
static DisplayUnits from(const SimulationOptions &opts)
Build display factors and borrowed static labels from flow-unit options.
Definition UnitConversion.cpp:67
double rainfall
ft/s → in/hr | mm/hr
Definition UnitConversion.hpp:215
double volume
ft³ → ft³ | m³
Definition UnitConversion.hpp:214
double raindepth
ft → in | mm (also runoff-depth columns)
Definition UnitConversion.hpp:216
const char * storage_vol_word
1000 ft3 | 1000 m3
Definition UnitConversion.hpp:229
double mvol
ft³ → 10^6 gal | 10^6 ltr
Definition UnitConversion.hpp:219
const char * landvol_word
acre-feet | hectare-m
Definition UnitConversion.hpp:228
int unit_system
0 = US, 1 = SI
Definition UnitConversion.hpp:208
double flow
cfs → display flow (Qcf)
Definition UnitConversion.hpp:212
double evaprate
ft/s → in/day | mm/day
Definition UnitConversion.hpp:217
double landvol
ft³ → acre-ft | hectare-m
Definition UnitConversion.hpp:220
const char * length_word
depth / HGL / surcharge column
Definition UnitConversion.hpp:224