|
| 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 | +
|
| 10 | +quantity! { |
| 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_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_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_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_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_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_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_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_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_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_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_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "g · m/(s³ · K)", |
| 56 | + "gram meter per second cubed kelvin", "grams meter per second cubed kelvin"; |
| 57 | + @decigram_meter_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_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_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_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_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_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_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_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_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_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)] |
| 136 | +mod 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_per_second_cubed_kelvin>(); |
| 161 | + test::<m::zettagram, ti::kelvin, tc::zettagram_meter_per_second_cubed_kelvin>(); |
| 162 | + test::<m::exagram, ti::kelvin, tc::exagram_meter_per_second_cubed_kelvin>(); |
| 163 | + test::<m::petagram, ti::kelvin, tc::petagram_meter_per_second_cubed_kelvin>(); |
| 164 | + test::<m::teragram, ti::kelvin, tc::teragram_meter_per_second_cubed_kelvin>(); |
| 165 | + test::<m::gigagram, ti::kelvin, tc::gigagram_meter_per_second_cubed_kelvin>(); |
| 166 | + test::<m::megagram, ti::kelvin, tc::megagram_meter_per_second_cubed_kelvin>(); |
| 167 | + test::<m::kilogram, ti::kelvin, tc::kilogram_meter_per_second_cubed_kelvin>(); |
| 168 | + test::<m::hectogram, ti::kelvin, tc::hectogram_meter_per_second_cubed_kelvin>(); |
| 169 | + test::<m::decagram, ti::kelvin, tc::decagram_meter_per_second_cubed_kelvin>(); |
| 170 | + test::<m::gram, ti::kelvin, tc::gram_meter_per_second_cubed_kelvin>(); |
| 171 | + test::<m::decigram, ti::kelvin, tc::decigram_meter_per_second_cubed_kelvin>(); |
| 172 | + test::<m::centigram, ti::kelvin, tc::centigram_meter_per_second_cubed_kelvin>(); |
| 173 | + test::<m::milligram, ti::kelvin, tc::milligram_meter_per_second_cubed_kelvin>(); |
| 174 | + test::<m::microgram, ti::kelvin, tc::microgram_meter_per_second_cubed_kelvin>(); |
| 175 | + test::<m::nanogram, ti::kelvin, tc::nanogram_meter_per_second_cubed_kelvin>(); |
| 176 | + test::<m::picogram, ti::kelvin, tc::picogram_meter_per_second_cubed_kelvin>(); |
| 177 | + test::<m::femtogram, ti::kelvin, tc::femtogram_meter_per_second_cubed_kelvin>(); |
| 178 | + test::<m::attogram, ti::kelvin, tc::attogram_meter_per_second_cubed_kelvin>(); |
| 179 | + test::<m::zeptogram, ti::kelvin, tc::zeptogram_meter_per_second_cubed_kelvin>(); |
| 180 | + test::<m::yoctogram, ti::kelvin, tc::yoctogram_meter_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_per_length_ti_units() { |
| 202 | + test::<p::yottawatt, l::meter, ti::kelvin, tc::yottawatt_per_kelvin>(); |
| 203 | + test::<p::zettawatt, l::meter, ti::kelvin, tc::zettawatt_per_kelvin>(); |
| 204 | + test::<p::exawatt, l::meter, ti::kelvin, tc::exawatt_per_kelvin>(); |
| 205 | + test::<p::petawatt, l::meter, ti::kelvin, tc::petawatt_per_kelvin>(); |
| 206 | + test::<p::terawatt, l::meter, ti::kelvin, tc::terawatt_per_kelvin>(); |
| 207 | + test::<p::gigawatt, l::meter, ti::kelvin, tc::gigawatt_per_kelvin>(); |
| 208 | + test::<p::megawatt, l::meter, ti::kelvin, tc::megawatt_per_kelvin>(); |
| 209 | + test::<p::kilowatt, l::meter, ti::kelvin, tc::kilowatt_per_kelvin>(); |
| 210 | + test::<p::hectowatt, l::meter, ti::kelvin, tc::hectowatt_per_kelvin>(); |
| 211 | + test::<p::decawatt, l::meter, ti::kelvin, tc::decawatt_per_kelvin>(); |
| 212 | + test::<p::watt, l::meter, ti::kelvin, tc::watt_per_kelvin>(); |
| 213 | + test::<p::deciwatt, l::meter, ti::kelvin, tc::deciwatt_per_kelvin>(); |
| 214 | + test::<p::centiwatt, l::meter, ti::kelvin, tc::centiwatt_per_kelvin>(); |
| 215 | + test::<p::milliwatt, l::meter, ti::kelvin, tc::milliwatt_per_kelvin>(); |
| 216 | + test::<p::microwatt, l::meter, ti::kelvin, tc::microwatt_per_kelvin>(); |
| 217 | + test::<p::nanowatt, l::meter, ti::kelvin, tc::nanowatt_per_kelvin>(); |
| 218 | + test::<p::picowatt, l::meter, ti::kelvin, tc::picowatt_per_kelvin>(); |
| 219 | + test::<p::femtowatt, l::meter, ti::kelvin, tc::femtowatt_per_kelvin>(); |
| 220 | + test::<p::attowatt, l::meter, ti::kelvin, tc::attowatt_per_kelvin>(); |
| 221 | + test::<p::zeptowatt, l::meter, ti::kelvin, tc::zeptowatt_per_kelvin>(); |
| 222 | + test::<p::yoctowatt, l::meter, ti::kelvin, tc::yoctowatt_per_kelvin>(); |
| 223 | + |
| 224 | + test::<p::kilowatt, l::meter, ti::degree_celsius, tc::kilowatt_per_degree_celsius>(); |
| 225 | + test::<p::watt, l::meter, ti::degree_celsius, tc::watt_per_meter_degree_celsius>(); |
| 226 | + test::<p::milliwatt, l::meter, ti::degree_celsius, tc::milliwatt_per_degree_celsius>(); |
| 227 | + |
| 228 | + fn test< |
| 229 | + P: p::Conversion<V>, |
| 230 | + L: l::Conversion<V>, |
| 231 | + TI: ti::Conversion<V>, |
| 232 | + TC: tc::Conversion<V>>() |
| 233 | + { |
| 234 | + Test::assert_approx_eq(&ThermalConductance::new::<TC>(V::one()), |
| 235 | + &(Power::new::<P>(V::one()) |
| 236 | + / TemperatureInterval::new::<TI>(V::one()))); |
| 237 | + } |
| 238 | + } |
| 239 | + } |
| 240 | +} |
0 commit comments