mendeleev/properties/
boiling_point.rs

1use super::Element;
2use crate::Kelvin;
3
4#[cfg(feature = "ranges")]
5/// Range from the minimum to the maximum boiling point across all elements
6///
7/// Convenience constant to avoid writing the code below when this range is needed:
8///
9/// ```
10/// use mendeleev::{Element, BOILING_POINT_RANGE};
11/// let all_values = Element::iter().flat_map(|e| e.boiling_point());
12/// let min = all_values.clone().min_by(|a, b| a.total_cmp(&b)).unwrap();
13/// let max = all_values.max_by(|a, b| a.total_cmp(&b)).unwrap();
14/// assert_eq!(min..=max, BOILING_POINT_RANGE);
15/// ```
16pub const BOILING_POINT_RANGE: core::ops::RangeInclusive<Kelvin> = Kelvin(4.222)..=Kelvin(5863.15);
17
18macro_rules! kel {
19    ($value:literal) => {
20        Some(Kelvin($value))
21    };
22}
23
24impl Element {
25    /// Returns the element's boiling point, if known.
26    ///
27    /// For elements that have multiple allotropes, one of them was chosen arbitrarily for the
28    /// return value.
29    ///
30    /// ```
31    /// use mendeleev::{Element, Kelvin};
32    /// assert_eq!(Element::H.boiling_point(), Some(Kelvin(20.271)));
33    /// // Graphite (sublimation point)
34    /// assert_eq!(Element::C.boiling_point(), Some(Kelvin(4098.15)));
35    /// // White phosphorus
36    /// assert_eq!(Element::P.boiling_point(), Some(Kelvin(553.65)));
37    /// assert_eq!(Element::Og.boiling_point(), None);
38    /// ```
39    pub const fn boiling_point(&self) -> Option<Kelvin> {
40        use Element as E;
41        match self {
42            E::H => kel!(20.271),
43            E::He => kel!(4.222),
44            E::Li => kel!(1615.15),
45            E::Be => kel!(2741.15),
46            E::B => kel!(4273.15),
47            E::C => kel!(4098.15), // graphite (sublimation)
48            E::N => kel!(77.355),
49            E::O => kel!(90.188),
50            E::F => kel!(85.04),
51            E::Ne => kel!(27.104),
52            E::Na => kel!(1156.09),
53            E::Mg => kel!(1363.15),
54            E::Al => kel!(2792.15),
55            E::Si => kel!(3538.15),
56            E::P => kel!(553.65), // white
57            E::S => kel!(717.76), // rhombic
58            E::Cl => kel!(239.11),
59            E::Ar => kel!(87.302),
60            E::K => kel!(1032.15),
61            E::Ca => kel!(1757.15),
62            E::Sc => kel!(3109.15),
63            E::Ti => kel!(3560.15),
64            E::V => kel!(3680.15),
65            E::Cr => kel!(2944.15),
66            E::Mn => kel!(2334.15),
67            E::Fe => kel!(3134.15),
68            E::Co => kel!(3200.15),
69            E::Ni => kel!(3186.15),
70            E::Cu => kel!(2833.15),
71            E::Zn => kel!(1180.15),
72            E::Ga => kel!(2502.15),
73            E::Ge => kel!(3106.15),
74            E::As => kel!(889.15), // gray
75            E::Se => kel!(958.15), // vitreous
76            E::Br => kel!(331.95),
77            E::Kr => kel!(119.735),
78            E::Rb => kel!(961.15),
79            E::Sr => kel!(1650.15),
80            E::Y => kel!(3618.15),
81            E::Zr => kel!(4679.15),
82            E::Nb => kel!(5014.15),
83            E::Mo => kel!(4912.15),
84            E::Tc => kel!(4535.15),
85            E::Ru => kel!(4420.15),
86            E::Rh => kel!(3968.15),
87            E::Pd => kel!(3236.15),
88            E::Ag => kel!(2435.15),
89            E::Cd => kel!(1040.15),
90            E::In => kel!(2300.15),
91            E::Sn => kel!(2859.15), // gray
92            E::Sb => kel!(1860.15), // gray
93            E::Te => kel!(1261.15),
94            E::I => kel!(457.55),
95            E::Xe => kel!(165.051),
96            E::Cs => kel!(944.15),
97            E::Ba => kel!(2118.15),
98            E::La => kel!(3737.15),
99            E::Ce => kel!(3716.15),
100            E::Pr => kel!(3793.15),
101            E::Nd => kel!(3347.15),
102            E::Pm => None,
103            E::Sm => kel!(2067.15),
104            E::Eu => kel!(1802.15),
105            E::Gd => kel!(3546.15),
106            E::Tb => kel!(3503.15),
107            E::Dy => kel!(2840.15),
108            E::Ho => kel!(2973.15),
109            E::Er => kel!(3141.15),
110            E::Tm => kel!(2223.15),
111            E::Yb => kel!(1469.15),
112            E::Lu => kel!(3675.15),
113            E::Hf => kel!(4873.15),
114            E::Ta => kel!(5728.15),
115            E::W => kel!(5828.15),
116            E::Re => kel!(5863.15),
117            E::Os => kel!(5281.15),
118            E::Ir => kel!(4701.15),
119            E::Pt => kel!(4098.15),
120            E::Au => kel!(3109.15),
121            E::Hg => kel!(629.769),
122            E::Tl => kel!(1746.15),
123            E::Pb => kel!(2022.15),
124            E::Bi => kel!(1837.15),
125            E::Po => kel!(1235.15),
126            E::At => None,
127            E::Rn => kel!(211.45),
128            E::Fr => None,
129            E::Ra => None,
130            E::Ac => kel!(3473.15),
131            E::Th => kel!(5058.15),
132            E::Pa => None,
133            E::U => kel!(4404.15),
134            E::Np => None,
135            E::Pu => kel!(3501.15),
136            E::Am => None,
137            E::Cm => None,
138            E::Bk => None,
139            E::Cf => None,
140            E::Es => None,
141            E::Fm => None,
142            E::Md => None,
143            E::No => None,
144            E::Lr => None,
145            E::Rf => None,
146            E::Db => None,
147            E::Sg => None,
148            E::Bh => None,
149            E::Hs => None,
150            E::Mt => None,
151            E::Ds => None,
152            E::Rg => None,
153            E::Cn => None,
154            E::Nh => None,
155            E::Fl => None,
156            E::Mc => None,
157            E::Lv => None,
158            E::Ts => None,
159            E::Og => None,
160        }
161    }
162}