Skip to main content

uom/si/
thermal_conductivity.rs

1//! Thermal conductivity (base unit watt per meter kelvin, kg · m · s⁻³ · K⁻¹).
2//!
3//! Thermal conductivity 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 conductivity (base unit watt per meter kelvin, kg · m · s⁻³ · K⁻¹).
12    quantity: ThermalConductivity; "thermal conductivity";
13    /// Dimension of thermal conductivity, LMT⁻³Th⁻¹ (base unit watt per meter kelvin, kg · m · s⁻³
14    /// · K⁻¹).
15    dimension: ISQ<
16        P1,     // 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_per_second_cubed_kelvin: prefix!(yotta) / prefix!(kilo); "Yg · m/(s³ · K)",
25            "yottagram meter per second cubed kelvin", "yottagrams meter per second cubed kelvin";
26        @zettagram_meter_per_second_cubed_kelvin: prefix!(zetta) / prefix!(kilo); "Zg · m/(s³ · K)",
27            "zettagram meter per second cubed kelvin", "zettagrams meter per second cubed kelvin";
28        @exagram_meter_per_second_cubed_kelvin: prefix!(exa) / prefix!(kilo); "Eg · m/(s³ · K)",
29            "exagram meter per second cubed kelvin", "exagrams meter per second cubed kelvin";
30        @petagram_meter_per_second_cubed_kelvin: prefix!(peta) / prefix!(kilo); "Pg · m/(s³ · K)",
31            "petagram meter per second cubed kelvin", "petagrams meter per second cubed kelvin";
32        @teragram_meter_per_second_cubed_kelvin: prefix!(tera) / prefix!(kilo); "Tg · m/(s³ · K)",
33            "teragram meter per second cubed kelvin", "teragrams meter per second cubed kelvin";
34        @gigagram_meter_per_second_cubed_kelvin: prefix!(giga) / prefix!(kilo); "Gg · m/(s³ · K)",
35            "gigagram meter per second cubed kelvin", "gigagrams meter per second cubed kelvin";
36        @megagram_meter_per_second_cubed_kelvin: prefix!(mega) / prefix!(kilo); "Mg · m/(s³ · K)",
37            "megagram meter per second cubed kelvin", "megagrams meter per second cubed kelvin";
38        /// Derived unit of thermal conductivity in base units. Equivalent to W/(m · K).
39        @kilogram_meter_per_second_cubed_kelvin: prefix!(kilo) / prefix!(kilo); "kg · m/(s³ · K)",
40            "kilogram meter per second cubed kelvin", "kilograms meter per second cubed kelvin";
41        @hectogram_meter_per_second_cubed_kelvin: prefix!(hecto) / prefix!(kilo); "hg · m/(s³ · K)",
42            "hectogram meter per second cubed kelvin", "hectograms meter per second cubed kelvin";
43        @decagram_meter_per_second_cubed_kelvin: prefix!(deca) / prefix!(kilo); "dag · m/(s³ · K)",
44            "decagram meter per second cubed kelvin", "decagrams meter per second cubed kelvin";
45        @gram_meter_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "g · m/(s³ · K)",
46            "gram meter per second cubed kelvin", "grams meter per second cubed kelvin";
47        @decigram_meter_per_second_cubed_kelvin: prefix!(deci) / prefix!(kilo); "dg · m/(s³ · K)",
48            "decigram meter per second cubed kelvin", "decigrams meter per second cubed kelvin";
49        @centigram_meter_per_second_cubed_kelvin: prefix!(centi) / prefix!(kilo); "cg · m/(s³ · K)",
50            "centigram meter per second cubed kelvin", "centigrams meter per second cubed kelvin";
51        @milligram_meter_per_second_cubed_kelvin: prefix!(milli) / prefix!(kilo); "mg · m/(s³ · K)",
52            "milligram meter per second cubed kelvin", "milligrams meter per second cubed kelvin";
53        @microgram_meter_per_second_cubed_kelvin: prefix!(micro) / prefix!(kilo); "µg · m/(s³ · K)",
54            "microgram meter per second cubed kelvin", "micrograms meter per second cubed kelvin";
55        @nanogram_meter_per_second_cubed_kelvin: prefix!(nano) / prefix!(kilo); "ng · m/(s³ · K)",
56            "nanogram meter per second cubed kelvin", "nanograms meter per second cubed kelvin";
57        @picogram_meter_per_second_cubed_kelvin: prefix!(pico) / prefix!(kilo); "pg · m/(s³ · K)",
58            "picogram meter per second cubed kelvin", "picograms meter per second cubed kelvin";
59        @femtogram_meter_per_second_cubed_kelvin: prefix!(femto) / prefix!(kilo); "fg · m/(s³ · K)",
60            "femtogram meter per second cubed kelvin", "femtograms meter per second cubed kelvin";
61        @attogram_meter_per_second_cubed_kelvin: prefix!(atto) / prefix!(kilo); "ag · m/(s³ · K)",
62            "attogram meter per second cubed kelvin", "attograms meter per second cubed kelvin";
63        @zeptogram_meter_per_second_cubed_kelvin: prefix!(zepto) / prefix!(kilo); "zg · m/(s³ · K)",
64            "zeptogram meter per second cubed kelvin", "zeptograms meter per second cubed kelvin";
65        @yoctogram_meter_per_second_cubed_kelvin: prefix!(yocto) / prefix!(kilo); "yg · m/(s³ · K)",
66            "yoctogram meter per second cubed kelvin", "yoctograms meter per second cubed kelvin";
67
68        // Thermal conductivity is much more commonly expressed in terms of
69        // power / (length · temperature).
70        @yottawatt_per_meter_kelvin: prefix!(yotta); "YW/(m · K)",
71            "yottawatt per meter kelvin", "yottawatts per meter kelvin";
72        @zettawatt_per_meter_kelvin: prefix!(zetta); "ZW/(m · K)",
73            "zettawatt per meter kelvin", "zettawatts per meter kelvin";
74        @exawatt_per_meter_kelvin: prefix!(exa); "EW/(m · K)",
75            "exawatt per meter kelvin", "exawatts per meter kelvin";
76        @petawatt_per_meter_kelvin: prefix!(peta); "PW/(m · K)",
77            "petawatt per meter kelvin", "petawatts per meter kelvin";
78        @terawatt_per_meter_kelvin: prefix!(tera); "TW/(m · K)",
79            "terawatt per meter kelvin", "terawatts per meter kelvin";
80        @gigawatt_per_meter_kelvin: prefix!(giga); "GW/(m · K)",
81            "gigawatt per meter kelvin", "gigawatts per meter kelvin";
82        @megawatt_per_meter_kelvin: prefix!(mega); "MW/(m · K)",
83            "megawatt per meter kelvin", "megawatts per meter kelvin";
84        @kilowatt_per_meter_kelvin: prefix!(kilo); "kW/(m · K)",
85            "kilowatt per meter kelvin", "kilowatts per meter kelvin";
86        @hectowatt_per_meter_kelvin: prefix!(hecto); "hW/(m · K)",
87            "hectowatt per meter kelvin", "hectowatts per meter kelvin";
88        @decawatt_per_meter_kelvin: prefix!(deca); "daW/(m · K)",
89            "decawatt per meter kelvin", "decawatts per meter kelvin";
90        /// Derived unit of thermal conductivity in derived units. Equivalent to kg · m/(s³ · K).
91        @watt_per_meter_kelvin: prefix!(none); "W/(m · K)",
92            "watt per meter kelvin", "watts per meter kelvin";
93        @deciwatt_per_meter_kelvin: prefix!(deci); "dW/(m · K)",
94            "deciwatt per meter kelvin", "deciwatts per meter kelvin";
95        @centiwatt_per_meter_kelvin: prefix!(centi); "cW/(m · K)",
96            "centiwatt per meter kelvin", "centiwatts per meter kelvin";
97        @milliwatt_per_meter_kelvin: prefix!(milli); "mW/(m · K)",
98            "milliwatt per meter kelvin", "milliwatts per meter kelvin";
99        @microwatt_per_meter_kelvin: prefix!(micro); "µW/(m · K)",
100            "microwatt per meter kelvin", "microwatts per meter kelvin";
101        @nanowatt_per_meter_kelvin: prefix!(nano); "nW/(m · K)",
102            "nanowatt per meter kelvin", "nanowatts per meter kelvin";
103        @picowatt_per_meter_kelvin: prefix!(pico); "pW/(m · K)",
104            "picowatt per meter kelvin", "picowatts per meter kelvin";
105        @femtowatt_per_meter_kelvin: prefix!(femto); "fW/(m · K)",
106            "femtowatt per meter kelvin", "femtowatts per meter kelvin";
107        @attowatt_per_meter_kelvin: prefix!(atto); "aW/(m · K)",
108            "attowatt per meter kelvin", "attowatts per meter kelvin";
109        @zeptowatt_per_meter_kelvin: prefix!(zepto); "zW/(m · K)",
110            "zeptowatt per meter kelvin", "zeptowatts per meter kelvin";
111        @yoctowatt_per_meter_kelvin: prefix!(yocto); "yW/(m · K)",
112            "yoctowatt per meter kelvin", "yoctowatts per meter kelvin";
113
114        // Celsius for convenience.
115        @kilogram_meter_per_second_cubed_degree_celsius: prefix!(kilo) / prefix!(kilo);
116            "kg · m/(s³ · °C)", "kilogram meter per second cubed degree celsius",
117            "kilograms meter per second cubed degree celsius";
118        @kilowatt_per_meter_degree_celsius: prefix!(kilo); "kW/(m · °C)",
119            "kilowatt per meter degree celsius", "kilowatts per meter degree celsius";
120        /// Derived unit of thermal conductivity in derived units. Equivalent to kg · m/(s³ · K).
121        @watt_per_meter_degree_celsius: prefix!(none); "W/(m · °C)",
122            "watt per meter degree celsius", "watts per meter degree celsius";
123        @milliwatt_per_meter_degree_celsius: prefix!(milli); "mW/(m · °C)",
124            "milliwatt per meter degree celsius", "milliwatts per meter degree celsius";
125    }
126}
127
128#[cfg(test)]
129mod tests {
130    storage_types! {
131        use crate::num::One;
132        use crate::si::length as l;
133        use crate::si::mass as m;
134        use crate::si::power as p;
135        use crate::si::quantities::*;
136        use crate::si::temperature_interval as ti;
137        use crate::si::thermal_conductivity as tc;
138        use crate::si::time as t;
139        use crate::tests::Test;
140
141        #[test]
142        fn check_dimension() {
143            let _: ThermalConductivity<V> = Mass::new::<m::kilogram>(V::one())
144                * Length::new::<l::meter>(V::one())
145                / (Time::new::<t::second>(V::one())
146                    * Time::new::<t::second>(V::one())
147                    * Time::new::<t::second>(V::one())
148                    * TemperatureInterval::new::<ti::kelvin>(V::one()));
149        }
150
151        #[test]
152        fn check_base_units() {
153            test::<m::yottagram, ti::kelvin, tc::yottagram_meter_per_second_cubed_kelvin>();
154            test::<m::zettagram, ti::kelvin, tc::zettagram_meter_per_second_cubed_kelvin>();
155            test::<m::exagram, ti::kelvin, tc::exagram_meter_per_second_cubed_kelvin>();
156            test::<m::petagram, ti::kelvin, tc::petagram_meter_per_second_cubed_kelvin>();
157            test::<m::teragram, ti::kelvin, tc::teragram_meter_per_second_cubed_kelvin>();
158            test::<m::gigagram, ti::kelvin, tc::gigagram_meter_per_second_cubed_kelvin>();
159            test::<m::megagram, ti::kelvin, tc::megagram_meter_per_second_cubed_kelvin>();
160            test::<m::kilogram, ti::kelvin, tc::kilogram_meter_per_second_cubed_kelvin>();
161            test::<m::hectogram, ti::kelvin, tc::hectogram_meter_per_second_cubed_kelvin>();
162            test::<m::decagram, ti::kelvin, tc::decagram_meter_per_second_cubed_kelvin>();
163            test::<m::gram, ti::kelvin, tc::gram_meter_per_second_cubed_kelvin>();
164            test::<m::decigram, ti::kelvin, tc::decigram_meter_per_second_cubed_kelvin>();
165            test::<m::centigram, ti::kelvin, tc::centigram_meter_per_second_cubed_kelvin>();
166            test::<m::milligram, ti::kelvin, tc::milligram_meter_per_second_cubed_kelvin>();
167            test::<m::microgram, ti::kelvin, tc::microgram_meter_per_second_cubed_kelvin>();
168            test::<m::nanogram, ti::kelvin, tc::nanogram_meter_per_second_cubed_kelvin>();
169            test::<m::picogram, ti::kelvin, tc::picogram_meter_per_second_cubed_kelvin>();
170            test::<m::femtogram, ti::kelvin, tc::femtogram_meter_per_second_cubed_kelvin>();
171            test::<m::attogram, ti::kelvin, tc::attogram_meter_per_second_cubed_kelvin>();
172            test::<m::zeptogram, ti::kelvin, tc::zeptogram_meter_per_second_cubed_kelvin>();
173            test::<m::yoctogram, ti::kelvin, tc::yoctogram_meter_per_second_cubed_kelvin>();
174
175            test::<m::kilogram, ti::degree_celsius,
176                tc::kilogram_meter_per_second_cubed_degree_celsius>();
177
178            fn test<
179                M: m::Conversion<V>,
180                TI: ti::Conversion<V>,
181                TC: tc::Conversion<V>>()
182            {
183                Test::assert_approx_eq(&ThermalConductivity::new::<TC>(V::one()),
184                    &(Mass::new::<M>(V::one())
185                        * Length::new::<l::meter>(V::one())
186                        / (Time::new::<t::second>(V::one())
187                            * Time::new::<t::second>(V::one())
188                            * Time::new::<t::second>(V::one())
189                            * TemperatureInterval::new::<TI>(V::one()))));
190            }
191        }
192
193        #[test]
194        fn check_power_per_length_ti_units() {
195            test::<p::yottawatt, l::meter, ti::kelvin, tc::yottawatt_per_meter_kelvin>();
196            test::<p::zettawatt, l::meter, ti::kelvin, tc::zettawatt_per_meter_kelvin>();
197            test::<p::exawatt, l::meter, ti::kelvin, tc::exawatt_per_meter_kelvin>();
198            test::<p::petawatt, l::meter, ti::kelvin, tc::petawatt_per_meter_kelvin>();
199            test::<p::terawatt, l::meter, ti::kelvin, tc::terawatt_per_meter_kelvin>();
200            test::<p::gigawatt, l::meter, ti::kelvin, tc::gigawatt_per_meter_kelvin>();
201            test::<p::megawatt, l::meter, ti::kelvin, tc::megawatt_per_meter_kelvin>();
202            test::<p::kilowatt, l::meter, ti::kelvin, tc::kilowatt_per_meter_kelvin>();
203            test::<p::hectowatt, l::meter, ti::kelvin, tc::hectowatt_per_meter_kelvin>();
204            test::<p::decawatt, l::meter, ti::kelvin, tc::decawatt_per_meter_kelvin>();
205            test::<p::watt, l::meter, ti::kelvin, tc::watt_per_meter_kelvin>();
206            test::<p::deciwatt, l::meter, ti::kelvin, tc::deciwatt_per_meter_kelvin>();
207            test::<p::centiwatt, l::meter, ti::kelvin, tc::centiwatt_per_meter_kelvin>();
208            test::<p::milliwatt, l::meter, ti::kelvin, tc::milliwatt_per_meter_kelvin>();
209            test::<p::microwatt, l::meter, ti::kelvin, tc::microwatt_per_meter_kelvin>();
210            test::<p::nanowatt, l::meter, ti::kelvin, tc::nanowatt_per_meter_kelvin>();
211            test::<p::picowatt, l::meter, ti::kelvin, tc::picowatt_per_meter_kelvin>();
212            test::<p::femtowatt, l::meter, ti::kelvin, tc::femtowatt_per_meter_kelvin>();
213            test::<p::attowatt, l::meter, ti::kelvin, tc::attowatt_per_meter_kelvin>();
214            test::<p::zeptowatt, l::meter, ti::kelvin, tc::zeptowatt_per_meter_kelvin>();
215            test::<p::yoctowatt, l::meter, ti::kelvin, tc::yoctowatt_per_meter_kelvin>();
216
217            test::<p::kilowatt, l::meter, ti::degree_celsius,
218                tc::kilowatt_per_meter_degree_celsius>();
219            test::<p::watt, l::meter, ti::degree_celsius, tc::watt_per_meter_degree_celsius>();
220            test::<p::milliwatt, l::meter, ti::degree_celsius,
221                tc::milliwatt_per_meter_degree_celsius>();
222
223            fn test<
224                P: p::Conversion<V>,
225                L: l::Conversion<V>,
226                TI: ti::Conversion<V>,
227                TC: tc::Conversion<V>>()
228            {
229                Test::assert_approx_eq(&ThermalConductivity::new::<TC>(V::one()),
230                    &(Power::new::<P>(V::one())
231                        / (Length::new::<L>(V::one()) * TemperatureInterval::new::<TI>(V::one()))));
232            }
233        }
234    }
235}