Skip to main content

uom/si/
pressure.rs

1//! Pressure (base unit pascal, kg · m⁻¹ · s⁻²).
2
3quantity! {
4    /// Pressure (base unit pascal, kg · m⁻¹ · s⁻²).
5    quantity: Pressure; "pressure";
6    /// Dimension of pressure, L⁻¹MT⁻² (base unit pascal, kg · m⁻¹ · s⁻²).
7    dimension: ISQ<
8        N1,     // length
9        P1,     // mass
10        N2,     // time
11        Z0,     // electric current
12        Z0,     // thermodynamic temperature
13        Z0,     // amount of substance
14        Z0>;    // luminous intensity
15    units {
16        @yottapascal: prefix!(yotta); "YPa", "yottapascal", "yottapascals";
17        @zettapascal: prefix!(zetta); "ZPa", "zettapascal", "zettapascals";
18        @exapascal: prefix!(exa); "EPa", "exapascal", "exapascals";
19        @petapascal: prefix!(peta); "PPa", "petapascal", "petapascals";
20        @terapascal: prefix!(tera); "TPa", "terapascal", "terapascals";
21        @gigapascal: prefix!(giga); "GPa", "gigapascal", "gigapascals";
22        @megapascal: prefix!(mega); "MPa", "megapascal", "megapascals";
23        @kilopascal: prefix!(kilo); "kPa", "kilopascal", "kilopascals";
24        @hectopascal: prefix!(hecto); "hPa", "hectopascal", "hectopascals";
25        @decapascal: prefix!(deca); "daPa", "decapascal", "decapascals";
26        /// Derived unit of pressure.
27        @pascal: prefix!(none); "Pa", "pascal", "pascals";
28        @decipascal: prefix!(deci); "dPa", "decipascal", "decipascals";
29        @centipascal: prefix!(centi); "cPa", "centipascal", "centipascals";
30        @millipascal: prefix!(milli); "mPa", "millipascal", "millipascals";
31        @micropascal: prefix!(micro); "µPa", "micropascal", "micropascals";
32        @nanopascal: prefix!(nano); "nPa", "nanopascal", "nanopascals";
33        @picopascal: prefix!(pico); "pPa", "picopascal", "picopascals";
34        @femtopascal: prefix!(femto); "fPa", "femtopascal", "femtopascals";
35        @attopascal: prefix!(atto); "aPa", "attopascal", "attopascals";
36        @zeptopascal: prefix!(zepto); "zPa", "zeptopascal", "zeptopascals";
37        @yoctopascal: prefix!(yocto); "yPa", "yoctopascal", "yoctopascals";
38
39        @kilogram_force_per_square_meter: prefix!(none) / prefix!(none) * 9.806_65_E0; "kgf/m²",
40            "kilogram-force per square meter", "kilograms-force per square meter";
41
42        @kilogram_force_per_square_centimeter:
43            prefix!(none) / (prefix!(centi) * prefix!(centi)) * 9.806_65_E0; "kgf/cm²",
44            "kilogram-force per square centimeter", "kilograms-force per square centimeter";
45        @gram_force_per_square_centimeter:
46            prefix!(none) / prefix!(kilo) / (prefix!(centi) * prefix!(centi)) * 9.806_65_E0;
47            "gf/cm²", "gram-force per square centimeter", "grams-force per square centimeter";
48
49        @kilogram_force_per_square_millimeter:
50            prefix!(none) / (prefix!(milli) * prefix!(milli)) * 9.806_65_E0;
51            "kgf/mm²", "kilogram-force per square millimeter",
52            "kilograms-force per square millimeter";
53
54        @atmosphere: 1.013_25_E5; "atm", "atmosphere", "atmospheres";
55        @atmosphere_technical: 9.806_65_E4; "at", "atmosphere (technical)",
56            "atmospheres (technical)";
57        @bar: 1.0_E5; "bar", "bar", "bar";
58        @centimeter_of_mercury_0: 1.333_22_E3; "cm Hg (0 °C)", "centimeter of mercury (0 °C)",
59            "centimeters of mercury (0 °C)";
60        @centimeter_of_mercury: 1.333_224_E3; "cm Hg", "centimeter of mercury",
61            "centimeters of mercury";
62        @centimeter_of_water_4: 9.806_38_E1; "cm H₂O (4 °C)", "centimeter of water (4 °C)",
63            "centimeters of water (4 °C)";
64        @centimeter_of_water: 9.806_65_E1; "cm H₂O", "centimeter of water", "centimeters of water";
65        @dyne_per_square_centimeter: 1.0_E-1; "dyn/cm²", "dyne per square centimeter",
66            "dynes per square centimeter";
67        @foot_of_mercury: 4.063_666_E4; "ft Hg", "foot of mercury", "feet of mercury";
68        @foot_of_water_39_2: 2.988_98_E3; "ft H₂O (39.2 °F)", "foot of water (39.2 °F)",
69            "feet of water (39.2 °F)";
70        @foot_of_water: 2.989_067_E3; "ft H₂O", "foot of water", "feet of water";
71        @inch_of_mercury_32: 3.386_38_E3; "in Hg (32 °F)", "inch of mercury (32 °F)",
72            "inches of mercury (32 °F)";
73        @inch_of_mercury_60: 3.376_85_E3; "in Hg (60 °F)", "inch of mercury (60 °F)",
74            "inches of mercury (60 °F)";
75        @inch_of_mercury: 3.386_389_E3; "in Hg", "inch of mercury", "inches of mercury";
76        @inch_of_water_39_2: 2.490_82_E2; "in H₂O (39.2 °F)", "inch of water (39.2 °F)",
77            "inches of water (39.2 °F)";
78        @inch_of_water_60: 2.488_4_E2; "in H₂O (60 °F)", "inch of water (60 °F)",
79            "inches of water (60 °F)";
80        @inch_of_water: 2.490_889_E2; "in H₂O", "inch of water", "inches of water";
81        @newton_per_square_millimeter: 1.0_E6; "N/mm²", "newton per square millimeter",
82            "newtons per square millimeter";
83        @kip_per_square_inch: 6.894_757_889_515_779_E6; "kip/in²", "kip per square inch",
84            "kips per square inch";
85        @millibar: 1.0_E2; "mbar", "millibar", "millibar";
86        @millimeter_of_mercury: 1.333_224_E2; "mm Hg", "millimeter of mercury",
87            "millimeters of mercury";
88        @millimeter_of_water: 9.806_65_E0; "mm H₂O", "millimeter of water",
89            "millimeters of water";
90        @millitorr: 1.333_224_E-1; "mTorr", "millitorr", "millitorr";
91        @poundal_per_square_foot: 1.488_164_434_662_202_5_E0; "pdl/ft²", "poundal per square foot",
92            "poundals per square foot";
93        @pound_force_per_square_foot: 4.788_026_312_163_735_6_E1; "lbf/ft²",
94            "pound-force per square foot", "pounds-force per square foot";
95        @pound_force_per_square_inch: 6.894_757_889_515_779_E3; "lbf/in²",
96            "pound-force per square inch", "pounds-force per square inch";
97        @psi: 6.894_757_E3; "psi", "pound-force per square inch", "pounds-force per square inch";
98        @torr: 1.333_224_E2; "Torr", "torr", "torr";
99    }
100}
101
102#[cfg(test)]
103mod tests {
104    storage_types! {
105        use crate::num::One;
106        use crate::si::area as a;
107        use crate::si::force as f;
108        use crate::si::pressure as p;
109        use crate::si::quantities::*;
110        use crate::tests::Test;
111
112        #[test]
113        fn check_dimension() {
114            let _: Pressure<V> = Force::new::<f::newton>(V::one())
115                / Area::new::<a::square_meter>(V::one());
116        }
117
118        #[test]
119        fn check_units() {
120            test::<f::yottanewton, a::square_meter, p::yottapascal>();
121            test::<f::zettanewton, a::square_meter, p::zettapascal>();
122            test::<f::exanewton, a::square_meter, p::exapascal>();
123            test::<f::petanewton, a::square_meter, p::petapascal>();
124            test::<f::teranewton, a::square_meter, p::terapascal>();
125            test::<f::giganewton, a::square_meter, p::gigapascal>();
126            test::<f::meganewton, a::square_meter, p::megapascal>();
127            test::<f::kilonewton, a::square_meter, p::kilopascal>();
128            test::<f::hectonewton, a::square_meter, p::hectopascal>();
129            test::<f::decanewton, a::square_meter, p::decapascal>();
130            test::<f::newton, a::square_meter, p::pascal>();
131            test::<f::decinewton, a::square_meter, p::decipascal>();
132            test::<f::centinewton, a::square_meter, p::centipascal>();
133            test::<f::millinewton, a::square_meter, p::millipascal>();
134            test::<f::micronewton, a::square_meter, p::micropascal>();
135            test::<f::nanonewton, a::square_meter, p::nanopascal>();
136            test::<f::piconewton, a::square_meter, p::picopascal>();
137            test::<f::femtonewton, a::square_meter, p::femtopascal>();
138            test::<f::attonewton, a::square_meter, p::attopascal>();
139            test::<f::zeptonewton, a::square_meter, p::zeptopascal>();
140            test::<f::yoctonewton, a::square_meter, p::yoctopascal>();
141
142            test::<f::kilogram_force, a::square_meter, p::kilogram_force_per_square_meter>();
143
144            test::<f::kilogram_force, a::square_centimeter,
145                p::kilogram_force_per_square_centimeter>();
146            test::<f::gram_force, a::square_centimeter, p::gram_force_per_square_centimeter>();
147
148            test::<f::kilogram_force, a::square_millimeter,
149                p::kilogram_force_per_square_millimeter>();
150
151            test::<f::dyne, a::square_centimeter, p::dyne_per_square_centimeter>();
152            test::<f::newton, a::square_millimeter, p::newton_per_square_millimeter>();
153            test::<f::kip, a::square_inch, p::kip_per_square_inch>();
154            test::<f::poundal, a::square_foot, p::poundal_per_square_foot>();
155            test::<f::pound_force, a::square_inch, p::pound_force_per_square_inch>();
156            test::<f::pound_force, a::square_foot, p::pound_force_per_square_foot>();
157
158            fn test<F: f::Conversion<V>, A: a::Conversion<V>, P: p::Conversion<V>>() {
159                Test::assert_approx_eq(&Pressure::new::<P>(V::one()),
160                    &(Force::new::<F>(V::one()) / Area::new::<A>(V::one())));
161            }
162        }
163    }
164}