uom/si/
thermal_conductance.rs

1//! Thermal conductance (base unit watt per kelvin, kg · m² · s⁻³ · K⁻¹).
2//!
3//! Thermal conductance has the same kind as [temperature interval][ti], as this quantity relates
4//! to change of temperature. Not of kind `TemperatureKind`, used by [thermodynamic
5//! temperature][tt]. See [thermodynamic temperature][tt] for a full explanation.
6//!
7//! [ti]: ../temperature_interval/index.html
8//! [tt]: ../thermodynamic_temperature/index.html
9
10quantity! {
11    /// Thermal conductance (base unit watt per kelvin, kg · m² · s⁻³ · K⁻¹).
12    quantity: ThermalConductance; "thermal conductance";
13    /// Dimension of thermal conductance, LM²T⁻³Th⁻¹ (base unit watt per kelvin, kg · m² · s⁻³
14    /// · K⁻¹).
15    dimension: ISQ<
16        P2,     // length
17        P1,     // mass
18        N3,     // time
19        Z0,     // electric current
20        N1,     // thermodynamic temperature
21        Z0,     // amount of substance
22        Z0>;    // luminous intensity
23    units {
24        @yottagram_meter_squared_per_second_cubed_kelvin: prefix!(yotta) / prefix!(kilo);
25            "Yg · m²/(s³ · K)", "yottagram meter squared per second cubed kelvin",
26            "yottagrams meter squared per second cubed kelvin";
27        @zettagram_meter_squared_per_second_cubed_kelvin: prefix!(zetta) / prefix!(kilo);
28            "Zg · m²/(s³ · K)", "zettagram meter squared per second cubed kelvin",
29            "zettagrams meter squared per second cubed kelvin";
30        @exagram_meter_squared_per_second_cubed_kelvin: prefix!(exa) / prefix!(kilo); "Eg · m²/(s³ · K)",
31            "exagram meter squared per second cubed kelvin",
32            "exagrams meter squared per second cubed kelvin";
33        @petagram_meter_squared_per_second_cubed_kelvin: prefix!(peta) / prefix!(kilo); "Pg · m²/(s³ · K)",
34            "petagram meter squared per second cubed kelvin",
35            "petagrams meter squared per second cubed kelvin";
36        @teragram_meter_squared_per_second_cubed_kelvin: prefix!(tera) / prefix!(kilo); "Tg · m²/(s³ · K)",
37            "teragram meter squared per second cubed kelvin",
38            "teragrams meter squared per second cubed kelvin";
39        @gigagram_meter_squared_per_second_cubed_kelvin: prefix!(giga) / prefix!(kilo); "Gg · m²/(s³ · K)",
40            "gigagram meter squared per second cubed kelvin",
41            "gigagrams meter squared per second cubed kelvin";
42        @megagram_meter_squared_per_second_cubed_kelvin: prefix!(mega) / prefix!(kilo); "Mg · m²/(s³ · K)",
43            "megagram meter squared per second cubed kelvin",
44            "megagrams meter squared per second cubed kelvin";
45        /// Derived unit of thermal conductance in base units. Equivalent to W/K.
46        @kilogram_meter_squared_per_second_cubed_kelvin: prefix!(kilo) / prefix!(kilo); "kg · m²/(s³ · K)",
47            "kilogram meter squared per second cubed kelvin",
48            "kilograms meter squared per second cubed kelvin";
49        @hectogram_meter_squared_per_second_cubed_kelvin: prefix!(hecto) / prefix!(kilo);
50            "hg · m²/(s³ · K)", "hectogram meter squared per second cubed kelvin",
51            "hectograms meter squared per second cubed kelvin";
52        @decagram_meter_squared_per_second_cubed_kelvin: prefix!(deca) / prefix!(kilo); "dag · m²/(s³ · K)",
53            "decagram meter squared per second cubed kelvin",
54            "decagrams meter squared per second cubed kelvin";
55        @gram_meter_squared_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "g · m/(s³ · K)",
56            "gram meter squared per second cubed kelvin", "grams meter squared per second cubed kelvin";
57        @decigram_meter_squared_per_second_cubed_kelvin: prefix!(deci) / prefix!(kilo); "dg · m²/(s³ · K)",
58            "decigram meter squared per second cubed kelvin",
59            "decigrams meter squared per second cubed kelvin";
60        @centigram_meter_squared_per_second_cubed_kelvin: prefix!(centi) / prefix!(kilo);
61            "cg · m²/(s³ · K)", "centigram meter squared per second cubed kelvin",
62            "centigrams meter squared per second cubed kelvin";
63        @milligram_meter_squared_per_second_cubed_kelvin: prefix!(milli) / prefix!(kilo);
64            "mg · m²/(s³ · K)", "milligram meter squared per second cubed kelvin",
65            "milligrams meter squared per second cubed kelvin";
66        @microgram_meter_squared_per_second_cubed_kelvin: prefix!(micro) / prefix!(kilo); "µg · m/(s³ · K)",
67            "microgram meter squared per second cubed kelvin",
68            "micrograms meter squared per second cubed kelvin";
69        @nanogram_meter_squared_per_second_cubed_kelvin: prefix!(nano) / prefix!(kilo); "ng · m²/(s³ · K)",
70            "nanogram meter squared per second cubed kelvin",
71            "nanograms meter squared per second cubed kelvin";
72        @picogram_meter_squared_per_second_cubed_kelvin: prefix!(pico) / prefix!(kilo); "pg · m²/(s³ · K)",
73            "picogram meter squared per second cubed kelvin",
74            "picograms meter squared per second cubed kelvin";
75        @femtogram_meter_squared_per_second_cubed_kelvin: prefix!(femto) / prefix!(kilo);
76            "fg · m²/(s³ · K)", "femtogram meter squared per second cubed kelvin",
77            "femtograms meter squared per second cubed kelvin";
78        @attogram_meter_squared_per_second_cubed_kelvin: prefix!(atto) / prefix!(kilo); "ag · m²/(s³ · K)",
79            "attogram meter squared per second cubed kelvin",
80            "attograms meter squared per second cubed kelvin";
81        @zeptogram_meter_squared_per_second_cubed_kelvin: prefix!(zepto) / prefix!(kilo);
82            "zg · m²/(s³ · K)", "zeptogram meter squared per second cubed kelvin",
83            "zeptograms meter squared per second cubed kelvin";
84        @yoctogram_meter_squared_per_second_cubed_kelvin: prefix!(yocto) / prefix!(kilo);
85            "yg · m²/(s³ · K)", "yoctogram meter squared per second cubed kelvin",
86            "yoctograms meter squared per second cubed kelvin";
87
88        // Thermal conductance is much more commonly expressed in terms of power / temperature.
89        @yottawatt_per_kelvin: prefix!(yotta); "YW/K", "yottawatt per kelvin",
90            "yottawatts per kelvin";
91        @zettawatt_per_kelvin: prefix!(zetta); "ZW/K", "zettawatt per kelvin",
92            "zettawatts per kelvin";
93        @exawatt_per_kelvin: prefix!(exa); "EW/K", "exawatt per kelvin", "exawatts per kelvin";
94        @petawatt_per_kelvin: prefix!(peta); "PW/K", "petawatt per kelvin", "petawatts per kelvin";
95        @terawatt_per_kelvin: prefix!(tera); "TW/K", "terawatt per kelvin", "terawatts per kelvin";
96        @gigawatt_per_kelvin: prefix!(giga); "GW/K", "gigawatt per kelvin", "gigawatts per kelvin";
97        @megawatt_per_kelvin: prefix!(mega); "MW/K", "megawatt per kelvin", "megawatts per kelvin";
98        @kilowatt_per_kelvin: prefix!(kilo); "kW/K", "kilowatt per kelvin", "kilowatts per kelvin";
99        @hectowatt_per_kelvin: prefix!(hecto); "hW/K", "hectowatt per kelvin",
100            "hectowatts per kelvin";
101        @decawatt_per_kelvin: prefix!(deca); "daW/K", "decawatt per kelvin", "decawatts per kelvin";
102        /// Derived unit of thermal conductance in derived units. Equivalent to kg · m²/(s³ · K).
103        @watt_per_kelvin: prefix!(none); "W/K", "watt per kelvin", "watts per kelvin";
104        @deciwatt_per_kelvin: prefix!(deci); "dW/K", "deciwatt per kelvin", "deciwatts per kelvin";
105        @centiwatt_per_kelvin: prefix!(centi); "cW/K", "centiwatt per kelvin",
106            "centiwatts per kelvin";
107        @milliwatt_per_kelvin: prefix!(milli); "mW/K", "milliwatt per kelvin",
108            "milliwatts per kelvin";
109        @microwatt_per_kelvin: prefix!(micro); "µW/K", "microwatt per kelvin",
110            "microwatts per kelvin";
111        @nanowatt_per_kelvin: prefix!(nano); "nW/K", "nanowatt per kelvin", "nanowatts per kelvin";
112        @picowatt_per_kelvin: prefix!(pico); "pW/K", "picowatt per kelvin", "picowatts per kelvin";
113        @femtowatt_per_kelvin: prefix!(femto); "fW/K", "femtowatt per kelvin",
114            "femtowatts per kelvin";
115        @attowatt_per_kelvin: prefix!(atto); "aW/K", "attowatt per kelvin", "attowatts per kelvin";
116        @zeptowatt_per_kelvin: prefix!(zepto); "zW/K", "zeptowatt per kelvin",
117            "zeptowatts per kelvin";
118        @yoctowatt_per_kelvin: prefix!(yocto); "yW/K", "yoctowatt per kelvin",
119            "yoctowatts per kelvin";
120
121        // Celsius for convenience.
122        @kilogram_meter_squared_per_second_cubed_degree_celsius: prefix!(kilo) / prefix!(kilo);
123            "kg · m²/(s³ · °C)", "kilogram meter squared per second cubed degree Celsius",
124            "kilograms meter squared per second cubed degree Celsius";
125        @kilowatt_per_degree_celsius: prefix!(kilo); "kW/°C", "kilowatt per degree Celsius",
126            "kilowatts per degree Celsius";
127        /// Derived unit of thermal conductance in derived units. Equivalent to kg · m²/(s³ · K).
128        @watt_per_meter_degree_celsius: prefix!(none); "W/°C", "watt per degree Celsius",
129            "watts per degree Celsius";
130        @milliwatt_per_degree_celsius: prefix!(milli); "mW/°C", "milliwatt per degree Celsius",
131            "milliwatts per degree Celsius";
132    }
133}
134
135#[cfg(test)]
136mod tests {
137    storage_types! {
138        use crate::num::One;
139        use crate::si::length as l;
140        use crate::si::mass as m;
141        use crate::si::power as p;
142        use crate::si::quantities::*;
143        use crate::si::temperature_interval as ti;
144        use crate::si::thermal_conductance as tc;
145        use crate::si::time as t;
146        use crate::tests::Test;
147
148        #[test]
149        fn check_dimension() {
150            let _: ThermalConductance<V> = Mass::new::<m::kilogram>(V::one())
151                * Length::new::<l::meter>(V::one()) * Length::new::<l::meter>(V::one())
152                / (Time::new::<t::second>(V::one())
153                    * Time::new::<t::second>(V::one())
154                    * Time::new::<t::second>(V::one())
155                    * TemperatureInterval::new::<ti::kelvin>(V::one()));
156        }
157
158        #[test]
159        fn check_base_units() {
160            test::<m::yottagram, ti::kelvin, tc::yottagram_meter_squared_per_second_cubed_kelvin>();
161            test::<m::zettagram, ti::kelvin, tc::zettagram_meter_squared_per_second_cubed_kelvin>();
162            test::<m::exagram, ti::kelvin, tc::exagram_meter_squared_per_second_cubed_kelvin>();
163            test::<m::petagram, ti::kelvin, tc::petagram_meter_squared_per_second_cubed_kelvin>();
164            test::<m::teragram, ti::kelvin, tc::teragram_meter_squared_per_second_cubed_kelvin>();
165            test::<m::gigagram, ti::kelvin, tc::gigagram_meter_squared_per_second_cubed_kelvin>();
166            test::<m::megagram, ti::kelvin, tc::megagram_meter_squared_per_second_cubed_kelvin>();
167            test::<m::kilogram, ti::kelvin, tc::kilogram_meter_squared_per_second_cubed_kelvin>();
168            test::<m::hectogram, ti::kelvin, tc::hectogram_meter_squared_per_second_cubed_kelvin>();
169            test::<m::decagram, ti::kelvin, tc::decagram_meter_squared_per_second_cubed_kelvin>();
170            test::<m::gram, ti::kelvin, tc::gram_meter_squared_per_second_cubed_kelvin>();
171            test::<m::decigram, ti::kelvin, tc::decigram_meter_squared_per_second_cubed_kelvin>();
172            test::<m::centigram, ti::kelvin, tc::centigram_meter_squared_per_second_cubed_kelvin>();
173            test::<m::milligram, ti::kelvin, tc::milligram_meter_squared_per_second_cubed_kelvin>();
174            test::<m::microgram, ti::kelvin, tc::microgram_meter_squared_per_second_cubed_kelvin>();
175            test::<m::nanogram, ti::kelvin, tc::nanogram_meter_squared_per_second_cubed_kelvin>();
176            test::<m::picogram, ti::kelvin, tc::picogram_meter_squared_per_second_cubed_kelvin>();
177            test::<m::femtogram, ti::kelvin, tc::femtogram_meter_squared_per_second_cubed_kelvin>();
178            test::<m::attogram, ti::kelvin, tc::attogram_meter_squared_per_second_cubed_kelvin>();
179            test::<m::zeptogram, ti::kelvin, tc::zeptogram_meter_squared_per_second_cubed_kelvin>();
180            test::<m::yoctogram, ti::kelvin, tc::yoctogram_meter_squared_per_second_cubed_kelvin>();
181
182            test::<m::kilogram, ti::degree_celsius,
183                tc::kilogram_meter_squared_per_second_cubed_degree_celsius>();
184
185            fn test<
186                M: m::Conversion<V>,
187                TI: ti::Conversion<V>,
188                TC: tc::Conversion<V>>()
189            {
190                Test::assert_approx_eq(&ThermalConductance::new::<TC>(V::one()),
191                    &(Mass::new::<M>(V::one())
192                        * Length::new::<l::meter>(V::one()) * Length::new::<l::meter>(V::one())
193                        / (Time::new::<t::second>(V::one())
194                            * Time::new::<t::second>(V::one())
195                            * Time::new::<t::second>(V::one())
196                            * TemperatureInterval::new::<TI>(V::one()))));
197            }
198        }
199
200        #[test]
201        fn check_power_ti_units() {
202            test::<p::yottawatt, ti::kelvin, tc::yottawatt_per_kelvin>();
203            test::<p::zettawatt, ti::kelvin, tc::zettawatt_per_kelvin>();
204            test::<p::exawatt, ti::kelvin, tc::exawatt_per_kelvin>();
205            test::<p::petawatt, ti::kelvin, tc::petawatt_per_kelvin>();
206            test::<p::terawatt, ti::kelvin, tc::terawatt_per_kelvin>();
207            test::<p::gigawatt, ti::kelvin, tc::gigawatt_per_kelvin>();
208            test::<p::megawatt, ti::kelvin, tc::megawatt_per_kelvin>();
209            test::<p::kilowatt, ti::kelvin, tc::kilowatt_per_kelvin>();
210            test::<p::hectowatt, ti::kelvin, tc::hectowatt_per_kelvin>();
211            test::<p::decawatt, ti::kelvin, tc::decawatt_per_kelvin>();
212            test::<p::watt, ti::kelvin, tc::watt_per_kelvin>();
213            test::<p::deciwatt, ti::kelvin, tc::deciwatt_per_kelvin>();
214            test::<p::centiwatt, ti::kelvin, tc::centiwatt_per_kelvin>();
215            test::<p::milliwatt, ti::kelvin, tc::milliwatt_per_kelvin>();
216            test::<p::microwatt, ti::kelvin, tc::microwatt_per_kelvin>();
217            test::<p::nanowatt, ti::kelvin, tc::nanowatt_per_kelvin>();
218            test::<p::picowatt, ti::kelvin, tc::picowatt_per_kelvin>();
219            test::<p::femtowatt, ti::kelvin, tc::femtowatt_per_kelvin>();
220            test::<p::attowatt, ti::kelvin, tc::attowatt_per_kelvin>();
221            test::<p::zeptowatt, ti::kelvin, tc::zeptowatt_per_kelvin>();
222            test::<p::yoctowatt, ti::kelvin, tc::yoctowatt_per_kelvin>();
223
224            test::<p::kilowatt, ti::degree_celsius, tc::kilowatt_per_degree_celsius>();
225            test::<p::watt, ti::degree_celsius, tc::watt_per_meter_degree_celsius>();
226            test::<p::milliwatt, ti::degree_celsius, tc::milliwatt_per_degree_celsius>();
227
228            fn test<
229                P: p::Conversion<V>,
230                TI: ti::Conversion<V>,
231                TC: tc::Conversion<V>>()
232            {
233                Test::assert_approx_eq(&ThermalConductance::new::<TC>(V::one()),
234                    &(Power::new::<P>(V::one())
235                        / TemperatureInterval::new::<TI>(V::one())));
236            }
237        }
238    }
239}