fastsim_core/
uc.rs

1//! Module providing unit constants (e.g. 1 kg) for an assortment of
2//! dimensional quantities.  
3
4use super::si::*;
5
6use uom::lib::marker::PhantomData;
7use uom::si::f32::ThermalConductance;
8use uom::si::Quantity;
9
10/// Invoking `unit_const!(R, Ratio, 1.0);` yields:
11/// ```ignore
12/// pub const R: Ratio = Quantity {
13///    dimension: PhantomData,
14///    units: PhantomData,
15///    value: 1.0,
16/// }
17/// ```
18macro_rules! unit_const {
19    ($(#[$docs:meta])* $name:ident, $T:ty, $value:expr) => {
20        $(#[$docs])*
21        /// defines uom unit const
22        pub const $name: $T = Quantity {
23            dimension: PhantomData,
24            units: PhantomData,
25            value: $value,
26        };
27    };
28}
29
30unit_const!(R, Ratio, 1.0);
31unit_const!(RAD, Angle, 1.0);
32unit_const!(DEG, Angle, 1.745_329_251_994_329_5_E-2);
33unit_const!(REV, Angle, 6.283_185_307_179_586_E0);
34unit_const!(RADPM, Curvature, 1.0);
35
36unit_const!(KG, Mass, 1.0);
37unit_const!(TON, Mass, 9.071_847_E2);
38unit_const!(LB, Mass, 4.535_924_E-1);
39
40unit_const!(M, Length, 1.0);
41unit_const!(FT, Length, 3.048_E-1);
42unit_const!(MI, Length, 1.609_344_E3);
43unit_const!(M2, Area, 1.0);
44unit_const!(FT2, Area, 9.290_304_E-2);
45unit_const!(M3, Volume, 1.0);
46unit_const!(L, Volume, 1.0e-3);
47unit_const!(GALLON, Volume, 3.785e-3);
48
49unit_const!(S, Time, 1.0);
50unit_const!(MIN, Time, 60.0);
51unit_const!(TIME_NAN, Time, f64::NAN);
52unit_const!(HZ, Frequency, 1.0);
53
54unit_const!(N, Force, 1.0);
55unit_const!(LBF, Force, 4.448_222_E0);
56
57unit_const!(W, Power, 1.0);
58unit_const!(KW, Power, 1.0E3);
59unit_const!(MW, Power, 1.0E6);
60unit_const!(J, Energy, 1.0);
61unit_const!(KWH, Energy, 3.6E6);
62unit_const!(MJ, Energy, 1.0E6);
63unit_const!(KJ, Energy, 1.0E3);
64
65unit_const!(KGM2, MomentOfInertia, 1.0);
66
67unit_const!(KGPM3, MassDensity, 1.0);
68
69unit_const!(MPS, Velocity, 1.0);
70unit_const!(MPH, Velocity, 4.470_4_E-1);
71unit_const!(KPH, Velocity, 3.6);
72unit_const!(MPS2, Acceleration, 1.0);
73unit_const!(MPS3, Jerk, 1.0);
74unit_const!(SPM, InverseVelocity, 1.0);
75unit_const!(SPEED_DIFF_JOIN, Velocity, 4.470_4_E-2);
76
77unit_const!(WPS, PowerRate, 1.0);
78
79unit_const!(
80    /// Acceleration due to gravity at geographic center of continental US (39.833333, -98.585522) at sea level
81    /// <https://en.wikipedia.org/wiki/Geographic_center_of_the_United_States#Contiguous_United_States>
82    /// Calculated using the WGS-84 formula <https://en.wikipedia.org/wiki/Theoretical_gravity#Somigliana_equation>
83    ACC_GRAV,
84    Acceleration,
85    // 9.801_548_494_963_14 rounded to 3 sig figs
86    9.80
87);
88
89unit_const!(KELVIN, Temperature, 1.0);
90unit_const!(KELVIN_INT, TemperatureInterval, 1.0);
91unit_const!(J_PER_KG_K, SpecificHeatCapacity, 1.0);
92unit_const!(J_PER_K, HeatCapacity, 1.0);
93unit_const!(J_PER_KG, SpecificEnergy, 1.0);
94unit_const!(PASCAL_SECOND, DynamicViscosity, 1.0);
95unit_const!(PASCAL, Pressure, 1.0);
96unit_const!(WATT_PER_METER_SQUARED_KELVIN, ThermalConductance, 1.0);
97unit_const!(WATT_PER_METER_KELVIN, ThermalConductivity, 1.0);
98
99pub const CELSIUS_TO_KELVIN: f64 = 273.15;