mendeleev/properties/
melting_point.rs

1use super::Element;
2use crate::Kelvin;
3
4#[cfg(feature = "ranges")]
5/// Range from the minimum to the maximum melting 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, MELTING_POINT_RANGE};
11/// let all_values = Element::iter().flat_map(|e| e.melting_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, MELTING_POINT_RANGE);
15/// ```
16pub const MELTING_POINT_RANGE: core::ops::RangeInclusive<Kelvin> = Kelvin(13.99)..=Kelvin(3687.15);
17
18macro_rules! kel {
19    ($value:literal) => {
20        Some(Kelvin($value))
21    };
22}
23
24impl Element {
25    /// Returns the element's melting point, if known.
26    ///
27    /// For some elements that do not melt at atmospheric pressure, the value is given for triple
28    /// point pressure.
29    ///
30    /// For elements that have multiple allotropes, one of them was chosen arbitrarily for the
31    /// return value.
32    ///
33    /// ```
34    /// use mendeleev::{Element, Kelvin};
35    /// assert_eq!(Element::H.melting_point(), Some(Kelvin(13.99)));
36    /// // Carbon allotropes have no melting point at standard pressure
37    /// assert_eq!(Element::C.melting_point(), None);
38    /// // White phosphorus
39    /// assert_eq!(Element::P.melting_point(), Some(Kelvin(317.3)));
40    /// assert_eq!(Element::Og.melting_point(), None);
41    /// ```
42    pub const fn melting_point(&self) -> Option<Kelvin> {
43        use Element as E;
44        match self {
45            E::H => kel!(13.99),
46            E::He => None,
47            E::Li => kel!(453.65),
48            E::Be => kel!(1560.15),
49            E::B => kel!(2350.15),
50            E::C => None, // graphite
51            E::N => kel!(63.15),
52            E::O => kel!(54.36),
53            E::F => kel!(53.48),
54            E::Ne => kel!(24.56),
55            E::Na => kel!(370.944),
56            E::Mg => kel!(923.15),
57            E::Al => kel!(933.473),
58            E::Si => kel!(1687.15),
59            E::P => kel!(317.3),  // white
60            E::S => kel!(368.35), // rhombic
61            E::Cl => kel!(171.65),
62            E::Ar => kel!(83.81),
63            E::K => kel!(336.65),
64            E::Ca => kel!(1115.15),
65            E::Sc => kel!(1814.15),
66            E::Ti => kel!(1943.15),
67            E::V => kel!(2183.15),
68            E::Cr => kel!(2180.15),
69            E::Mn => kel!(1519.15),
70            E::Fe => kel!(1811.15),
71            E::Co => kel!(1768.15),
72            E::Ni => kel!(1728.15),
73            E::Cu => kel!(1357.77),
74            E::Zn => kel!(692.677),
75            E::Ga => kel!(302.9146),
76            E::Ge => kel!(1211.4),
77            E::As => kel!(1090.15), // gray
78            E::Se => kel!(453.15),  // vitreous
79            E::Br => kel!(265.95),
80            E::Kr => kel!(115.78),
81            E::Rb => kel!(312.45),
82            E::Sr => kel!(1050.15),
83            E::Y => kel!(1795.15),
84            E::Zr => kel!(2127.15),
85            E::Nb => kel!(2750.15),
86            E::Mo => kel!(2895.15),
87            E::Tc => kel!(2430.15),
88            E::Ru => kel!(2606.15),
89            E::Rh => kel!(2236.15),
90            E::Pd => kel!(1827.95),
91            E::Ag => kel!(1234.93),
92            E::Cd => kel!(594.219),
93            E::In => kel!(429.7485),
94            E::Sn => kel!(286.35),  // gray
95            E::Sb => kel!(903.778), // gray
96            E::Te => kel!(722.66),
97            E::I => kel!(386.85),
98            E::Xe => kel!(161.4),
99            E::Cs => kel!(301.65),
100            E::Ba => kel!(1000.15),
101            E::La => kel!(1193.15),
102            E::Ce => kel!(1072.15),
103            E::Pr => kel!(1204.15),
104            E::Nd => kel!(1289.15),
105            E::Pm => kel!(1315.15),
106            E::Sm => kel!(1345.15),
107            E::Eu => kel!(1095.15),
108            E::Gd => kel!(1586.15),
109            E::Tb => kel!(1632.15),
110            E::Dy => kel!(1685.15),
111            E::Ho => kel!(1745.15),
112            E::Er => kel!(1802.15),
113            E::Tm => kel!(1818.15),
114            E::Yb => kel!(1097.15),
115            E::Lu => kel!(1936.15),
116            E::Hf => kel!(2506.15),
117            E::Ta => kel!(3290.15),
118            E::W => kel!(3687.15),
119            E::Re => kel!(3458.15),
120            E::Os => kel!(3306.15),
121            E::Ir => kel!(2719.15),
122            E::Pt => kel!(2041.35),
123            E::Au => kel!(1337.33),
124            E::Hg => kel!(234.321),
125            E::Tl => kel!(577.15),
126            E::Pb => kel!(600.612),
127            E::Bi => kel!(544.552),
128            E::Po => kel!(527.15),
129            E::At => kel!(575.15),
130            E::Rn => kel!(202.15),
131            E::Fr => kel!(294.15),
132            E::Ra => kel!(969.15),
133            E::Ac => kel!(1323.15),
134            E::Th => kel!(2023.15),
135            E::Pa => kel!(1845.15),
136            E::U => kel!(1408.15),
137            E::Np => kel!(917.15),
138            E::Pu => kel!(913.15),
139            E::Am => kel!(1449.15),
140            E::Cm => kel!(1618.15),
141            E::Bk => kel!(1259.15), // β form
142            E::Cf => kel!(1173.15),
143            E::Es => kel!(1133.15),
144            E::Fm => kel!(1800.15),
145            E::Md => kel!(1100.15),
146            E::No => kel!(1100.15),
147            E::Lr => kel!(1900.15),
148            E::Rf => None,
149            E::Db => None,
150            E::Sg => None,
151            E::Bh => None,
152            E::Hs => None,
153            E::Mt => None,
154            E::Ds => None,
155            E::Rg => None,
156            E::Cn => None,
157            E::Nh => None,
158            E::Fl => None,
159            E::Mc => None,
160            E::Lv => None,
161            E::Ts => None,
162            E::Og => None,
163        }
164    }
165}