Skip to main content

uom/si/
molar_heat_capacity.rs

1//! Molar heat capacity (base unit joule per kelvin mole, m² · kg · s⁻² · K⁻¹ · mol⁻¹).
2
3quantity! {
4    /// Molar heat capacity (base unit joule per kelvin mole, m² · kg · s⁻² · K⁻¹ · mol⁻¹).
5    quantity: MolarHeatCapacity; "molar heat capacity";
6    /// Dimension of molar heat capacity, L²MT⁻²Th⁻¹N⁻¹ (base unit joule per kelvin mole,
7    /// m² · kg · s⁻² · K⁻¹ · mol⁻¹).
8    dimension: ISQ<
9        P2,     // length
10        P1,     // mass
11        N2,     // time
12        Z0,     // electric current
13        N1,     // thermodynamic temperature
14        N1,     // amount of substance
15        Z0>;    // luminous intensity
16    units {
17        @yottajoule_per_kelvin_mole: prefix!(yotta); "YJ/(K · mol)", "yottajoule per kelvin mole",
18            "yottajoules per kelvin mole";
19        @zettajoule_per_kelvin_mole: prefix!(zetta); "ZJ/(K · mol)", "zettajoule per kelvin mole",
20            "zettajoules per kelvin mole";
21        @exajoule_per_kelvin_mole: prefix!(exa); "EJ/(K · mol)", "exajoule per kelvin mole",
22            "exajoules per kelvin mole";
23        @petajoule_per_kelvin_mole: prefix!(peta); "PJ/(K · mol)", "petajoule per kelvin mole",
24            "petajoules per kelvin mole";
25        @terajoule_per_kelvin_mole: prefix!(tera); "TJ/(K · mol)", "terajoule per kelvin mole",
26            "terajoules per kelvin mole";
27        @gigajoule_per_kelvin_mole: prefix!(giga); "GJ/(K · mol)", "gigajoule per kelvin mole",
28            "gigajoules per kelvin mole";
29        @megajoule_per_kelvin_mole: prefix!(mega); "MJ/(K · mol)", "megajoule per kelvin mole",
30            "megajoules per kelvin mole";
31        @kilojoule_per_kelvin_mole: prefix!(kilo); "kJ/(K · mol)", "kilojoule per kelvin mole",
32            "kilojoules per kelvin mole";
33        @hectojoule_per_kelvin_mole: prefix!(hecto); "hJ/(K · mol)", "hectojoule per kelvin mole",
34            "hectojoules per kelvin mole";
35        @decajoule_per_kelvin_mole: prefix!(deca); "daJ/(K · mol)", "decajoule per kelvin mole",
36            "decajoules per kelvin mole";
37        /// Derived unit of molar heat capacity.
38        @joule_per_kelvin_mole: prefix!(none); "J/(K · mol)", "joule per kelvin mole",
39            "joules per kelvin mole";
40        @decijoule_per_kelvin_mole: prefix!(deci); "dJ/(K · mol)", "decijoule per kelvin mole",
41            "decijoules per kelvin mole";
42        @centijoule_per_kelvin_mole: prefix!(centi); "cJ/(K · mol)", "centijoule per kelvin mole",
43            "centijoules per kelvin mole";
44        @millijoule_per_kelvin_mole: prefix!(milli); "mJ/(K · mol)", "millijoule per kelvin mole",
45            "millijoules per kelvin mole";
46        @microjoule_per_kelvin_mole: prefix!(micro); "µJ/(K · mol)", "microjoule per kelvin mole",
47            "microjoules per kelvin mole";
48        @nanojoule_per_kelvin_mole: prefix!(nano); "nJ/(K · mol)", "nanojoule per kelvin mole",
49            "nanojoules per kelvin mole";
50        @picojoule_per_kelvin_mole: prefix!(pico); "pJ/(K · mol)", "picojoule per kelvin mole",
51            "picojoules per kelvin mole";
52        @femtojoule_per_kelvin_mole: prefix!(femto); "fJ/(K · mol)", "femtojoule per kelvin mole",
53            "femtojoules per kelvin mole";
54        @attojoule_per_kelvin_mole: prefix!(atto); "aJ/(K · mol)", "attojoule per kelvin mole",
55            "attojoules per kelvin mole";
56        @zeptojoule_per_kelvin_mole: prefix!(zepto); "zJ/(K · mol)", "zeptojoule per kelvin mole",
57            "zeptojoules per kelvin mole";
58        @yoctojoule_per_kelvin_mole: prefix!(yocto); "yJ/(K · mol)", "yoctojoule per kelvin mole",
59            "yoctojoules per kelvin mole";
60
61        @btu_it_per_kelvin_mole: 1.055_056_E3; "Btu (IT)/(K · mol)",
62            "British thermal unit (IT) per kelvin mole",
63            "British thermal units (IT) per kelvin mole";
64        @btu_per_kelvin_mole: 1.054_350_E3; "Btu/(K · mol)", "British thermal unit per kelvin mole",
65            "British thermal units per kelvin mole";
66        @btu_39_per_kelvin_mole: 1.059_67_E3; "Btu₃₉/(K · mol)",
67            "British thermal unit (39 °F) per kelvin mole",
68            "British thermal units (39 °F) per kelvin mole";
69        @btu_59_per_kelvin_mole: 1.054_80_E3; "Btu₅₉/(K · mol)",
70            "British thermal unit (59 °F) per kelvin mole",
71            "British thermal units (59 °F) per kelvin mole";
72        @btu_60_per_kelvin_mole: 1.054_68_E3; "Btu₆₀/(K · mol)",
73            "British thermal unit (60 °F) per kelvin mole",
74            "British thermal units (60 °F) per kelvin mole";
75        @calorie_it_per_kelvin_mole: 4.186_8_E0; "cal (IT)/(K · mol)",
76            "calorie (IT) per kelvin mole", "calories (IT) per kelvin mole";
77        @calorie_per_kelvin_mole: 4.184_E0; "cal/(K · mol)", "calorie per kelvin mole",
78            "calories per kelvin mole";
79        @calorie_15_per_kelvin_mole: 4.185_80_E0; "cal₁₅/(K · mol)",
80            "calorie (15 °C) per kelvin mole", "calories (15 °C) per kelvin mole";
81        @calorie_20_per_kelvin_mole: 4.181_90_E0; "cal₂₀/(K · mol)",
82            "calorie (20 °C) per kelvin mole", "calories (20 °C) per kelvin mole";
83        @calorie_it_nutrition_per_kelvin_mole: 4.186_8_E3; "Cal (IT)/(K · mol)",
84            "Calorie (IT) per kelvin mole", "Calories (IT) per kelvin mole";
85        @calorie_nutrition_per_kelvin_mole: 4.184_E3; "Cal/(K · mol)",
86            "Calorie per kelvin mole", "Calories per kelvin mole";
87        @kilocalorie_it_per_kelvin_mole: 4.186_8_E3; "kcal (IT)/(K · mol)",
88            "kilocalorie (IT) per kelvin mole", "kilocalories (IT) per kelvin mole";
89        @kilocalorie_per_kelvin_mole: 4.184_E3; "kcal/(K · mol)", "kilocalorie per kelvin mole",
90            "kilocalories per kelvin mole";
91
92        @joule_per_kelvin_particle: 6.022_140_76_E23; "J/(K · particle)",
93            "joule per kelvin particle", "joules per kelvin particle";
94        @electronvolt_per_kelvin_particle: 6.022_140_76_E23 * 1.602_176_634_E-19;
95            "eV/(K · particle)", "electronvolt per kelvin particle",
96            "electronvolts per kelvin particle";
97
98        @molar_gas_constant: 8.314_462_618_E0; "R", "molar gas constant", "molar gas constants";
99    }
100}
101
102#[cfg(test)]
103mod tests {
104    storage_types! {
105        use crate::num::One;
106        use crate::si::amount_of_substance as aos;
107        use crate::si::energy as e;
108        use crate::si::molar_heat_capacity as m;
109        use crate::si::quantities::*;
110        use crate::si::temperature_interval as t;
111        use crate::tests::Test;
112
113        #[test]
114        fn check_dimension() {
115            let _: MolarHeatCapacity<V> = Energy::new::<e::joule>(V::one())
116                / (TemperatureInterval::new::<t::kelvin>(V::one())
117                    * AmountOfSubstance::new::<aos::mole>(V::one()));
118        }
119
120        #[test]
121        fn check_units() {
122            test::<e::yottajoule, t::kelvin, aos::mole, m::yottajoule_per_kelvin_mole>();
123            test::<e::zettajoule, t::kelvin, aos::mole, m::zettajoule_per_kelvin_mole>();
124            test::<e::exajoule, t::kelvin, aos::mole, m::exajoule_per_kelvin_mole>();
125            test::<e::petajoule, t::kelvin, aos::mole, m::petajoule_per_kelvin_mole>();
126            test::<e::terajoule, t::kelvin, aos::mole, m::terajoule_per_kelvin_mole>();
127            test::<e::gigajoule, t::kelvin, aos::mole, m::gigajoule_per_kelvin_mole>();
128            test::<e::megajoule, t::kelvin, aos::mole, m::megajoule_per_kelvin_mole>();
129            test::<e::kilojoule, t::kelvin, aos::mole, m::kilojoule_per_kelvin_mole>();
130            test::<e::hectojoule, t::kelvin, aos::mole, m::hectojoule_per_kelvin_mole>();
131            test::<e::decajoule, t::kelvin, aos::mole, m::decajoule_per_kelvin_mole>();
132            test::<e::joule, t::kelvin, aos::mole, m::joule_per_kelvin_mole>();
133            test::<e::decijoule, t::kelvin, aos::mole, m::decijoule_per_kelvin_mole>();
134            test::<e::centijoule, t::kelvin, aos::mole, m::centijoule_per_kelvin_mole>();
135            test::<e::millijoule, t::kelvin, aos::mole, m::millijoule_per_kelvin_mole>();
136            test::<e::microjoule, t::kelvin, aos::mole, m::microjoule_per_kelvin_mole>();
137            test::<e::nanojoule, t::kelvin, aos::mole, m::nanojoule_per_kelvin_mole>();
138            test::<e::picojoule, t::kelvin, aos::mole, m::picojoule_per_kelvin_mole>();
139            test::<e::femtojoule, t::kelvin, aos::mole, m::femtojoule_per_kelvin_mole>();
140            test::<e::attojoule, t::kelvin, aos::mole, m::attojoule_per_kelvin_mole>();
141            test::<e::zeptojoule, t::kelvin, aos::mole, m::zeptojoule_per_kelvin_mole>();
142            test::<e::yoctojoule, t::kelvin, aos::mole, m::yoctojoule_per_kelvin_mole>();
143
144            test::<e::btu_it, t::kelvin, aos::mole, m::btu_it_per_kelvin_mole>();
145            test::<e::btu, t::kelvin, aos::mole, m::btu_per_kelvin_mole>();
146            test::<e::btu_39, t::kelvin, aos::mole, m::btu_39_per_kelvin_mole>();
147            test::<e::btu_59, t::kelvin, aos::mole, m::btu_59_per_kelvin_mole>();
148            test::<e::btu_60, t::kelvin, aos::mole, m::btu_60_per_kelvin_mole>();
149            test::<e::calorie_it, t::kelvin, aos::mole, m::calorie_it_per_kelvin_mole>();
150            test::<e::calorie, t::kelvin, aos::mole, m::calorie_per_kelvin_mole>();
151            test::<e::calorie_15, t::kelvin, aos::mole, m::calorie_15_per_kelvin_mole>();
152            test::<e::calorie_20, t::kelvin, aos::mole, m::calorie_20_per_kelvin_mole>();
153            test::<e::calorie_it_nutrition, t::kelvin, aos::mole, m::calorie_it_nutrition_per_kelvin_mole>();
154            test::<e::calorie_nutrition, t::kelvin, aos::mole, m::calorie_nutrition_per_kelvin_mole>();
155            test::<e::kilocalorie_it, t::kelvin, aos::mole, m::kilocalorie_it_per_kelvin_mole>();
156            test::<e::kilocalorie, t::kelvin, aos::mole, m::kilocalorie_per_kelvin_mole>();
157
158            test::<e::joule, t::kelvin, aos::particle, m::joule_per_kelvin_particle>();
159            test::<e::electronvolt, t::kelvin, aos::particle,
160                m::electronvolt_per_kelvin_particle>();
161
162            fn test<E: e::Conversion<V>, T: t::Conversion<V>, AOS: aos::Conversion<V>, M: m::Conversion<V>>() {
163                Test::assert_approx_eq(&MolarHeatCapacity::new::<M>(V::one()),
164                    &(Energy::new::<E>(V::one())
165                        / (TemperatureInterval::new::<T>(V::one())
166                            * AmountOfSubstance::new::<AOS>(V::one()))));
167            }
168        }
169    }
170}