1use std::convert::TryInto;
2
3#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
4#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
5#[allow(missing_docs)]
7pub enum Element {
8 H = 1,
10 He,
12 Li,
14 Be,
16 B,
18 C,
20 N,
22 O,
24 F,
26 Ne,
28 Na,
30 Mg,
32 Al,
34 Si,
36 P,
38 S,
40 Cl,
42 Ar,
44 K,
46 Ca,
48 Sc,
50 Ti,
52 V,
54 Cr,
56 Mn,
58 Fe,
60 Co,
62 Ni,
64 Cu,
66 Zn,
68 Ga,
70 Ge,
72 As,
74 Se,
76 Br,
78 Kr,
80 Rb,
82 Sr,
84 Y,
86 Zr,
88 Nb,
90 Mo,
92 Tc,
94 Ru,
96 Rh,
98 Pd,
100 Ag,
102 Cd,
104 In,
106 Sn,
108 Sb,
110 Te,
112 I,
114 Xe,
116 Cs,
118 Ba,
120 La,
122 Ce,
124 Pr,
126 Nd,
128 Pm,
130 Sm,
132 Eu,
134 Gd,
136 Tb,
138 Dy,
140 Ho,
142 Er,
144 Tm,
146 Yb,
148 Lu,
150 Hf,
152 Ta,
154 W,
156 Re,
158 Os,
160 Ir,
162 Pt,
164 Au,
166 Hg,
168 Tl,
170 Pb,
172 Bi,
174 Po,
176 At,
178 Rn,
180 Fr,
182 Ra,
184 Ac,
186 Th,
188 Pa,
190 U,
192 Np,
194 Pu,
196 Am,
198 Cm,
200 Bk,
202 Cf,
204 Es,
206 Fm,
208 Md,
210 No,
212 Lr,
214 Rf,
216 Db,
218 Sg,
220 Bh,
222 Hs,
224 Mt,
226 Ds,
228 Rg,
230 Cn,
232 Nh,
234 Fl,
236 Mc,
238 Lv,
240 Ts,
242 Og,
244}
245
246impl Element {
247 pub const fn atomic_number(&self) -> usize {
249 *self as usize
250 }
251
252 pub const fn new(atomic_number: usize) -> Option<Element> {
254 match atomic_number {
255 1 => Some(Element::H),
256 2 => Some(Element::He),
257 3 => Some(Element::Li),
258 4 => Some(Element::Be),
259 5 => Some(Element::B),
260 6 => Some(Element::C),
261 7 => Some(Element::N),
262 8 => Some(Element::O),
263 9 => Some(Element::F),
264 10 => Some(Element::Ne),
265 11 => Some(Element::Na),
266 12 => Some(Element::Mg),
267 13 => Some(Element::Al),
268 14 => Some(Element::Si),
269 15 => Some(Element::P),
270 16 => Some(Element::S),
271 17 => Some(Element::Cl),
272 18 => Some(Element::Ar),
273 19 => Some(Element::K),
274 20 => Some(Element::Ca),
275 21 => Some(Element::Sc),
276 22 => Some(Element::Ti),
277 23 => Some(Element::V),
278 24 => Some(Element::Cr),
279 25 => Some(Element::Mn),
280 26 => Some(Element::Fe),
281 27 => Some(Element::Co),
282 28 => Some(Element::Ni),
283 29 => Some(Element::Cu),
284 30 => Some(Element::Zn),
285 31 => Some(Element::Ga),
286 32 => Some(Element::Ge),
287 33 => Some(Element::As),
288 34 => Some(Element::Se),
289 35 => Some(Element::Br),
290 36 => Some(Element::Kr),
291 37 => Some(Element::Rb),
292 38 => Some(Element::Sr),
293 39 => Some(Element::Y),
294 40 => Some(Element::Zr),
295 41 => Some(Element::Nb),
296 42 => Some(Element::Mo),
297 43 => Some(Element::Tc),
298 44 => Some(Element::Ru),
299 45 => Some(Element::Rh),
300 46 => Some(Element::Pd),
301 47 => Some(Element::Ag),
302 48 => Some(Element::Cd),
303 49 => Some(Element::In),
304 50 => Some(Element::Sn),
305 51 => Some(Element::Sb),
306 52 => Some(Element::Te),
307 53 => Some(Element::I),
308 54 => Some(Element::Xe),
309 55 => Some(Element::Cs),
310 56 => Some(Element::Ba),
311 57 => Some(Element::La),
312 58 => Some(Element::Ce),
313 59 => Some(Element::Pr),
314 60 => Some(Element::Nd),
315 61 => Some(Element::Pm),
316 62 => Some(Element::Sm),
317 63 => Some(Element::Eu),
318 64 => Some(Element::Gd),
319 65 => Some(Element::Tb),
320 66 => Some(Element::Dy),
321 67 => Some(Element::Ho),
322 68 => Some(Element::Er),
323 69 => Some(Element::Tm),
324 70 => Some(Element::Yb),
325 71 => Some(Element::Lu),
326 72 => Some(Element::Hf),
327 73 => Some(Element::Ta),
328 74 => Some(Element::W),
329 75 => Some(Element::Re),
330 76 => Some(Element::Os),
331 77 => Some(Element::Ir),
332 78 => Some(Element::Pt),
333 79 => Some(Element::Au),
334 80 => Some(Element::Hg),
335 81 => Some(Element::Tl),
336 82 => Some(Element::Pb),
337 83 => Some(Element::Bi),
338 84 => Some(Element::Po),
339 85 => Some(Element::At),
340 86 => Some(Element::Rn),
341 87 => Some(Element::Fr),
342 88 => Some(Element::Ra),
343 89 => Some(Element::Ac),
344 90 => Some(Element::Th),
345 91 => Some(Element::Pa),
346 92 => Some(Element::U),
347 93 => Some(Element::Np),
348 94 => Some(Element::Pu),
349 95 => Some(Element::Am),
350 96 => Some(Element::Cm),
351 97 => Some(Element::Bk),
352 98 => Some(Element::Cf),
353 99 => Some(Element::Es),
354 100 => Some(Element::Fm),
355 101 => Some(Element::Md),
356 102 => Some(Element::No),
357 103 => Some(Element::Lr),
358 104 => Some(Element::Rf),
359 105 => Some(Element::Db),
360 106 => Some(Element::Sg),
361 107 => Some(Element::Bh),
362 108 => Some(Element::Hs),
363 109 => Some(Element::Mt),
364 110 => Some(Element::Ds),
365 111 => Some(Element::Rg),
366 112 => Some(Element::Cn),
367 113 => Some(Element::Nh),
368 114 => Some(Element::Fl),
369 115 => Some(Element::Mc),
370 116 => Some(Element::Lv),
371 117 => Some(Element::Ts),
372 118 => Some(Element::Og),
373 _ => None,
374 }
375 }
376
377 pub fn from_symbol(symbol: impl AsRef<str>) -> Option<Element> {
379 symbol.as_ref().try_into().ok()
380 }
381
382 pub fn symbol(&self) -> &'static str {
384 ELEMENT_SYMBOLS[self.atomic_number() - 1]
385 }
386
387 pub const fn full_name(&self) -> &'static str {
389 ELEMENT_NAMES[self.atomic_number() - 1]
390 }
391
392 pub const fn atomic_radius(&self) -> &'static AtomicRadius {
394 &ELEMENT_ATOMIC_RADII[self.atomic_number() - 1]
395 }
396
397 pub const fn weight(&self) -> Option<f64> {
401 ELEMENT_WEIGHT[self.atomic_number() - 1]
402 }
403
404 pub const fn electro_negativity(&self) -> Option<f64> {
407 ELEMENT_ELECTRON_NEGATIVITY[self.atomic_number() - 1]
408 }
409}
410
411#[allow(clippy::use_debug)]
412impl std::fmt::Display for Element {
413 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
414 write!(f, "{self:?}")
415 }
416}
417
418impl std::convert::TryFrom<&str> for Element {
419 type Error = &'static str;
420
421 fn try_from(value: &str) -> Result<Self, Self::Error> {
422 let value = value.to_ascii_uppercase();
423 if let Some(element) = ELEMENT_SYMBOLS
424 .iter()
425 .position(|name| *name == value.as_str())
426 .and_then(|n| Element::new(n + 1))
427 {
428 Ok(element)
429 } else {
430 Err("Invalid element code")
431 }
432 }
433}
434
435#[cfg(test)]
436#[allow(clippy::unwrap_used)]
437mod tests {
438 use std::convert::TryInto;
439
440 use crate::Element;
441
442 #[test]
443 fn atomic_number() {
444 assert_eq!(Element::Og.atomic_number(), 118);
445 assert_eq!(Element::Og, Element::new(118).unwrap());
446 }
447
448 #[test]
449 fn display() {
450 assert_eq!(Element::Lv.to_string(), "Lv");
451 assert_eq!(Element::Cl.to_string(), "Cl");
452 let element: Element = "Cl".try_into().unwrap();
453 assert_eq!(Element::Cl.atomic_number(), element.atomic_number());
454 }
455}
456
457const ELEMENT_SYMBOLS: [&str; 118] = [
459 "H", "HE", "LI", "BE", "B", "C", "N", "O", "F", "NE", "NA", "MG", "AL", "SI", "P", "S", "CL",
460 "AR", "K", "CA", "SC", "TI", "V", "CR", "MN", "FE", "CO", "NI", "CU", "ZN", "GA", "GE", "AS",
461 "SE", "BR", "KR", "RB", "SR", "Y", "ZR", "NB", "MO", "TC", "RU", "RH", "PD", "AG", "CD", "IN",
462 "SN", "SB", "TE", "I", "XE", "CS", "BA", "LA", "CE", "PR", "ND", "PM", "SM", "EU", "GD", "TB",
463 "DY", "HO", "ER", "TM", "YB", "LU", "HF", "TA", "W", "RE", "OS", "IR", "PT", "AU", "HG", "TL",
464 "PB", "BI", "PO", "AT", "RN", "FR", "RA", "AC", "TH", "PA", "U", "NP", "PU", "AM", "CM", "BK",
465 "CF", "ES", "FM", "MD", "NO", "LR", "RF", "DB", "SG", "BH", "HS", "MT", "DS", "RG", "CN", "NH",
466 "FL", "MC", "LV", "TS", "OG",
467];
468
469const ELEMENT_NAMES: [&str; 118] = [
471 "Hydrogen",
472 "Helium",
473 "Lithium",
474 "Beryllium",
475 "Boron",
476 "Carbon",
477 "Nitrogen",
478 "Oxygen",
479 "Fluorine",
480 "Neon",
481 "Sodium",
482 "Magnesium",
483 "Aluminum",
484 "Silicon",
485 "Phosphorus",
486 "Sulfur",
487 "Chlorine",
488 "Argon",
489 "Potassium",
490 "Calcium",
491 "Scandium",
492 "Titanium",
493 "Vanadium",
494 "Chromium",
495 "Manganese",
496 "Iron",
497 "Cobalt",
498 "Nickel",
499 "Copper",
500 "Zinc",
501 "Gallium",
502 "Germanium",
503 "Arsenic",
504 "Selenium",
505 "Bromine",
506 "Krypton",
507 "Rubidium",
508 "Strontium",
509 "Yttrium",
510 "Zirconium",
511 "Niobium",
512 "Molybdenum",
513 "Technetium",
514 "Ruthenium",
515 "Rhodium",
516 "Palladium",
517 "Silver",
518 "Cadmium",
519 "Indium",
520 "Tin",
521 "Antimony",
522 "Tellurium",
523 "Iodine",
524 "Xenon",
525 "Cesium",
526 "Barium",
527 "Lanthanum",
528 "Cerium",
529 "Praseodymium",
530 "Neodymium",
531 "Promethium",
532 "Samarium",
533 "Europium",
534 "Gadolinium",
535 "Terbium",
536 "Dysprosium",
537 "Holmium",
538 "Erbium",
539 "Thulium",
540 "Ytterbium",
541 "Lutetium",
542 "Hafnium",
543 "Tantalum",
544 "Wolfram",
545 "Rhenium",
546 "Osmium",
547 "Iridium",
548 "Platinum",
549 "Gold",
550 "Mercury",
551 "Thallium",
552 "Lead",
553 "Bismuth",
554 "Polonium",
555 "Astatine",
556 "Radon",
557 "Francium",
558 "Radium",
559 "Actinium",
560 "Thorium",
561 "Protactinium",
562 "Uranium",
563 "Neptunium",
564 "Plutonium",
565 "Americium",
566 "Curium",
567 "Berkelium",
568 "Californium",
569 "Einsteinium",
570 "Fermium",
571 "Mendelevium",
572 "Nobelium",
573 "Lawrencium",
574 "Rutherfordium",
575 "Dubnium",
576 "Seaborgium",
577 "Bohrium",
578 "Hassium",
579 "Meitnerium",
580 "Darmstadtium ",
581 "Roentgenium ",
582 "Copernicium ",
583 "Nihonium",
584 "Flerovium",
585 "Moscovium",
586 "Livermorium",
587 "Tennessine",
588 "Oganesson",
589];
590
591#[derive(Debug)]
593pub struct AtomicRadius {
594 pub unbound: Option<f64>,
598 pub van_der_waals: Option<f64>,
601 pub covalent_single: f64,
604 pub covalent_double: Option<f64>,
607 pub covalent_triple: Option<f64>,
610}
611
612impl AtomicRadius {
613 const fn new(
614 unbound: Option<f64>,
615 van_der_waals: Option<f64>,
616 covalent_single: f64,
617 covalent_double: Option<f64>,
618 covalent_triple: Option<f64>,
619 ) -> Self {
620 Self {
621 unbound,
622 van_der_waals,
623 covalent_single,
624 covalent_double,
625 covalent_triple,
626 }
627 }
628}
629
630const ELEMENT_ATOMIC_RADII: [AtomicRadius; 118] = [
632 AtomicRadius::new(Some(1.54), Some(1.2), 0.32, None, None),
633 AtomicRadius::new(Some(1.34), Some(1.43), 0.46, None, None),
634 AtomicRadius::new(Some(2.20), Some(2.12), 1.33, Some(1.24), None),
635 AtomicRadius::new(Some(2.19), Some(1.98), 1.02, Some(0.90), Some(0.85)),
636 AtomicRadius::new(Some(2.05), Some(1.91), 0.85, Some(0.78), Some(0.73)),
637 AtomicRadius::new(Some(1.90), Some(1.77), 0.75, Some(0.67), Some(0.60)),
638 AtomicRadius::new(Some(1.79), Some(1.66), 0.71, Some(0.60), Some(0.54)),
639 AtomicRadius::new(Some(1.71), Some(1.5), 0.63, Some(0.57), Some(0.53)),
640 AtomicRadius::new(Some(1.63), Some(1.46), 0.64, Some(0.59), Some(0.53)),
641 AtomicRadius::new(Some(1.56), Some(1.58), 0.67, Some(0.96), None),
642 AtomicRadius::new(Some(2.25), Some(2.5), 1.55, Some(1.60), None),
643 AtomicRadius::new(Some(2.40), Some(2.51), 1.39, Some(1.32), Some(1.27)),
644 AtomicRadius::new(Some(2.39), Some(2.25), 1.26, Some(1.13), Some(1.11)),
645 AtomicRadius::new(Some(2.32), Some(2.19), 1.16, Some(1.07), Some(1.02)),
646 AtomicRadius::new(Some(2.23), Some(1.9), 1.11, Some(1.02), Some(0.94)),
647 AtomicRadius::new(Some(2.14), Some(1.89), 1.03, Some(0.94), Some(0.95)),
648 AtomicRadius::new(Some(2.06), Some(1.82), 0.99, Some(0.95), Some(0.93)),
649 AtomicRadius::new(Some(1.97), Some(1.83), 0.96, Some(1.07), Some(0.96)),
650 AtomicRadius::new(Some(2.34), Some(2.73), 1.96, Some(1.93), None),
651 AtomicRadius::new(Some(2.70), Some(2.62), 1.71, Some(1.47), Some(1.33)),
652 AtomicRadius::new(Some(2.63), Some(2.58), 1.48, Some(1.16), Some(1.14)),
653 AtomicRadius::new(Some(2.57), Some(2.46), 1.36, Some(1.17), Some(1.08)),
654 AtomicRadius::new(Some(2.52), Some(2.42), 1.34, Some(1.12), Some(1.06)),
655 AtomicRadius::new(Some(2.33), Some(2.45), 1.22, Some(1.11), Some(1.03)),
656 AtomicRadius::new(Some(2.42), Some(2.45), 1.19, Some(1.05), Some(1.03)),
657 AtomicRadius::new(Some(2.37), Some(2.44), 1.16, Some(1.09), Some(1.02)),
658 AtomicRadius::new(Some(2.33), Some(2.4), 1.11, Some(1.03), Some(9.6)),
659 AtomicRadius::new(Some(2.29), Some(2.4), 1.10, Some(1.01), Some(1.01)),
660 AtomicRadius::new(Some(2.17), Some(2.38), 1.12, Some(1.15), Some(1.20)),
661 AtomicRadius::new(Some(2.22), Some(2.39), 1.18, Some(1.20), None),
662 AtomicRadius::new(Some(2.33), Some(2.32), 1.24, Some(1.17), Some(1.21)),
663 AtomicRadius::new(Some(2.34), Some(2.29), 1.21, Some(1.11), Some(1.14)),
664 AtomicRadius::new(Some(2.31), Some(1.88), 1.21, Some(1.14), Some(1.06)),
665 AtomicRadius::new(Some(2.24), Some(1.82), 1.16, Some(1.07), Some(1.07)),
666 AtomicRadius::new(Some(2.19), Some(1.86), 1.14, Some(1.09), Some(1.10)),
667 AtomicRadius::new(Some(2.12), Some(2.25), 1.17, Some(1.21), Some(1.08)),
668 AtomicRadius::new(Some(2.40), Some(3.21), 2.10, Some(2.02), None),
669 AtomicRadius::new(Some(2.79), Some(2.84), 1.85, Some(1.57), Some(1.39)),
670 AtomicRadius::new(Some(2.74), Some(2.75), 1.63, Some(1.30), Some(1.24)),
671 AtomicRadius::new(Some(2.69), Some(2.52), 1.54, Some(1.27), Some(1.21)),
672 AtomicRadius::new(Some(2.51), Some(2.56), 1.47, Some(1.25), Some(1.16)),
673 AtomicRadius::new(Some(2.44), Some(2.45), 1.38, Some(1.21), Some(1.13)),
674 AtomicRadius::new(Some(2.52), Some(2.44), 1.28, Some(1.20), Some(1.10)),
675 AtomicRadius::new(Some(2.37), Some(2.46), 1.25, Some(1.14), Some(1.03)),
676 AtomicRadius::new(Some(2.33), Some(2.44), 1.25, Some(1.10), Some(1.06)),
677 AtomicRadius::new(Some(2.15), Some(2.15), 1.20, Some(1.17), Some(1.12)),
678 AtomicRadius::new(Some(2.25), Some(2.53), 1.28, Some(1.39), Some(1.37)),
679 AtomicRadius::new(Some(2.38), Some(2.49), 1.36, Some(1.44), None),
680 AtomicRadius::new(Some(2.46), Some(2.43), 1.42, Some(1.36), Some(1.46)),
681 AtomicRadius::new(Some(2.48), Some(2.42), 1.40, Some(1.30), Some(1.32)),
682 AtomicRadius::new(Some(2.46), Some(2.47), 1.40, Some(1.33), Some(1.27)),
683 AtomicRadius::new(Some(2.42), Some(1.99), 1.36, Some(1.28), Some(1.21)),
684 AtomicRadius::new(Some(2.38), Some(2.04), 1.33, Some(1.29), Some(1.25)),
685 AtomicRadius::new(Some(2.32), Some(2.06), 1.31, Some(1.35), Some(1.22)),
686 AtomicRadius::new(Some(2.49), Some(3.48), 2.32, Some(2.09), None),
687 AtomicRadius::new(Some(2.93), Some(3.03), 1.96, Some(1.61), Some(1.49)),
688 AtomicRadius::new(Some(2.84), Some(2.98), 1.80, Some(1.39), Some(1.39)),
689 AtomicRadius::new(Some(2.82), Some(2.88), 1.63, Some(1.37), Some(1.31)),
690 AtomicRadius::new(Some(2.86), Some(2.92), 1.76, Some(1.38), Some(1.28)),
691 AtomicRadius::new(Some(2.84), Some(2.95), 1.74, Some(1.37), None),
692 AtomicRadius::new(Some(2.83), None, 1.73, Some(1.35), None),
693 AtomicRadius::new(Some(2.80), Some(2.9), 1.72, Some(1.34), None),
694 AtomicRadius::new(Some(2.80), Some(2.87), 1.68, Some(1.34), None),
695 AtomicRadius::new(Some(2.77), Some(2.83), 1.69, Some(1.35), Some(1.32)),
696 AtomicRadius::new(Some(2.76), Some(2.79), 1.68, Some(1.35), None),
697 AtomicRadius::new(Some(2.75), Some(2.87), 1.67, Some(1.33), None),
698 AtomicRadius::new(Some(2.73), Some(2.81), 1.66, Some(1.33), None),
699 AtomicRadius::new(Some(2.72), Some(2.83), 1.65, Some(1.33), None),
700 AtomicRadius::new(Some(2.71), Some(2.79), 1.64, Some(1.31), None),
701 AtomicRadius::new(Some(2.77), Some(2.8), 1.70, Some(1.29), None),
702 AtomicRadius::new(Some(2.70), Some(2.74), 1.62, Some(1.31), Some(1.31)),
703 AtomicRadius::new(Some(2.64), Some(2.63), 1.52, Some(1.28), Some(1.22)),
704 AtomicRadius::new(Some(2.58), Some(2.53), 1.46, Some(1.26), Some(1.19)),
705 AtomicRadius::new(Some(2.53), Some(2.57), 1.37, Some(1.20), Some(1.15)),
706 AtomicRadius::new(Some(2.49), Some(2.49), 1.31, Some(1.19), Some(1.10)),
707 AtomicRadius::new(Some(2.44), Some(2.48), 1.29, Some(1.16), Some(1.09)),
708 AtomicRadius::new(Some(2.40), Some(2.41), 1.22, Some(1.15), Some(1.07)),
709 AtomicRadius::new(Some(2.30), Some(2.29), 1.23, Some(1.12), Some(1.10)),
710 AtomicRadius::new(Some(2.26), Some(2.32), 1.24, Some(1.21), Some(1.23)),
711 AtomicRadius::new(Some(2.29), Some(2.45), 1.33, Some(1.42), None),
712 AtomicRadius::new(Some(2.42), Some(2.47), 1.44, Some(1.42), Some(1.50)),
713 AtomicRadius::new(Some(2.49), Some(2.6), 1.44, Some(1.35), Some(1.37)),
714 AtomicRadius::new(Some(2.50), Some(2.54), 1.51, Some(1.41), Some(1.35)),
715 AtomicRadius::new(Some(2.50), None, 1.45, Some(1.35), Some(1.29)),
716 AtomicRadius::new(Some(2.47), None, 1.47, Some(1.38), Some(1.38)),
717 AtomicRadius::new(Some(2.43), None, 1.42, Some(1.45), Some(1.33)),
718 AtomicRadius::new(Some(2.58), None, 2.23, Some(2.18), None),
719 AtomicRadius::new(Some(2.92), None, 2.01, Some(1.73), Some(1.59)),
720 AtomicRadius::new(Some(2.93), Some(2.8), 1.86, Some(1.53), Some(1.40)),
721 AtomicRadius::new(Some(2.88), Some(2.93), 1.75, Some(1.43), Some(1.36)),
722 AtomicRadius::new(Some(2.85), Some(2.88), 1.69, Some(1.38), Some(1.29)),
723 AtomicRadius::new(Some(2.83), Some(2.71), 1.70, Some(1.34), Some(1.18)),
724 AtomicRadius::new(Some(2.81), Some(2.82), 1.71, Some(1.36), Some(1.16)),
725 AtomicRadius::new(Some(2.78), Some(2.81), 1.72, Some(1.35), None),
726 AtomicRadius::new(Some(2.76), Some(2.83), 1.66, Some(1.35), None),
727 AtomicRadius::new(Some(2.64), Some(3.05), 1.66, Some(1.36), None),
728 AtomicRadius::new(None, Some(3.4), 1.68, Some(1.39), None),
729 AtomicRadius::new(None, Some(3.05), 1.68, Some(1.40), None),
730 AtomicRadius::new(None, Some(2.7), 1.65, Some(1.40), None),
731 AtomicRadius::new(None, None, 1.67, Some(1.67), Some(1.67)),
732 AtomicRadius::new(None, None, 1.73, Some(1.39), None),
733 AtomicRadius::new(None, None, 1.76, Some(1.76), Some(1.76)),
734 AtomicRadius::new(None, None, 1.61, Some(1.41), None),
735 AtomicRadius::new(None, None, 1.57, Some(1.40), Some(1.31)),
736 AtomicRadius::new(None, None, 1.49, Some(1.36), Some(1.26)),
737 AtomicRadius::new(None, None, 1.43, Some(1.28), Some(1.21)),
738 AtomicRadius::new(None, None, 1.41, Some(1.28), Some(1.19)),
739 AtomicRadius::new(None, None, 1.34, Some(1.25), Some(1.18)),
740 AtomicRadius::new(None, None, 1.29, Some(1.25), Some(1.13)),
741 AtomicRadius::new(None, None, 1.28, Some(1.16), Some(1.12)),
742 AtomicRadius::new(None, None, 1.21, Some(1.16), Some(1.18)),
743 AtomicRadius::new(None, None, 1.22, Some(1.37), Some(1.30)),
744 AtomicRadius::new(None, None, 1.36, None, None),
745 AtomicRadius::new(None, None, 1.43, None, None),
746 AtomicRadius::new(None, None, 1.62, None, None),
747 AtomicRadius::new(None, None, 1.75, None, None),
748 AtomicRadius::new(None, None, 1.65, None, None),
749 AtomicRadius::new(None, None, 1.57, None, None),
750];
751
752const ELEMENT_WEIGHT: [Option<f64>; 118] = [
753 Some(1.007975),
754 Some(4.002602),
755 Some(6.9675),
756 Some(9.0121831),
757 Some(10.8135),
758 Some(12.0106),
759 Some(14.006855),
760 Some(15.9994),
761 Some(18.998403163),
762 Some(20.1797),
763 Some(22.98976928),
764 Some(24.3055),
765 Some(26.9815384),
766 Some(28.085),
767 Some(30.973761998),
768 Some(32.0675),
769 Some(35.4515),
770 Some(39.8775),
771 Some(39.0983),
772 Some(40.078),
773 Some(44.955908),
774 Some(47.867),
775 Some(50.9415),
776 Some(51.9961),
777 Some(54.938043),
778 Some(55.845),
779 Some(58.933194),
780 Some(58.6934),
781 Some(63.546),
782 Some(65.38),
783 Some(69.723),
784 Some(72.630),
785 Some(74.921595),
786 Some(78.971),
787 Some(79.904),
788 Some(83.798),
789 Some(85.4678),
790 Some(87.62),
791 Some(88.90584),
792 Some(91.224),
793 Some(92.90637),
794 Some(95.95),
795 None,
796 Some(101.07),
797 Some(102.90549),
798 Some(106.42),
799 Some(107.8682),
800 Some(112.414),
801 Some(114.818),
802 Some(118.710),
803 Some(121.760),
804 Some(127.60),
805 Some(126.90447),
806 Some(131.293),
807 Some(132.90545196),
808 Some(137.327),
809 Some(138.90547),
810 Some(140.116),
811 Some(140.90766),
812 Some(144.242),
813 None,
814 Some(150.36),
815 Some(151.964),
816 Some(157.25),
817 Some(158.925354),
818 Some(162.500),
819 Some(164.930328),
820 Some(167.259),
821 Some(168.934218),
822 Some(173.045),
823 Some(174.9668),
824 Some(178.486),
825 Some(180.94788),
826 Some(183.84),
827 Some(186.207),
828 Some(190.23),
829 Some(192.217),
830 Some(195.084),
831 Some(196.966570),
832 Some(200.592),
833 Some(204.3835),
834 Some(207.04),
835 Some(208.98040),
836 None,
837 None,
838 None,
839 None,
840 None,
841 None,
842 Some(232.0377),
843 Some(231.03588),
844 Some(238.02891),
845 None,
846 None,
847 None,
848 None,
849 None,
850 None,
851 None,
852 None,
853 None,
854 None,
855 None,
856 None,
857 None,
858 None,
859 None,
860 None,
861 None,
862 None,
863 None,
864 None,
865 None,
866 None,
867 None,
868 None,
869 None,
870 None,
871];
872
873const ELEMENT_ELECTRON_NEGATIVITY: [Option<f64>; 118] = [
874 Some(2.20),
875 None,
876 Some(0.98),
877 Some(1.57),
878 Some(2.04),
879 Some(2.55),
880 Some(3.04),
881 Some(3.44),
882 Some(3.98),
883 None,
884 Some(0.93),
885 Some(1.31),
886 Some(1.61),
887 Some(1.90),
888 Some(2.19),
889 Some(2.58),
890 Some(3.16),
891 None,
892 Some(0.82),
893 Some(1.00),
894 Some(1.36),
895 Some(1.54),
896 Some(1.63),
897 Some(1.66),
898 Some(1.55),
899 Some(1.83),
900 Some(1.88),
901 Some(1.91),
902 Some(1.90),
903 Some(1.65),
904 Some(1.81),
905 Some(2.01),
906 Some(2.18),
907 Some(2.55),
908 Some(2.96),
909 None,
910 Some(0.82),
911 Some(0.95),
912 Some(1.22),
913 Some(1.33),
914 Some(1.6),
915 Some(2.16),
916 Some(2.10),
917 Some(2.2),
918 Some(2.28),
919 Some(2.20),
920 Some(1.93),
921 Some(1.69),
922 Some(1.78),
923 Some(1.96),
924 Some(2.05),
925 Some(2.1),
926 Some(2.66),
927 Some(2.60),
928 Some(0.79),
929 Some(0.89),
930 Some(1.10),
931 Some(1.12),
932 Some(1.13),
933 Some(1.14),
934 None,
935 Some(1.17),
936 None,
937 Some(1.20),
938 None,
939 Some(1.22),
940 Some(1.23),
941 Some(1.24),
942 Some(1.25),
943 None,
944 Some(1.0),
945 Some(1.3),
946 Some(1.5),
947 Some(1.7),
948 Some(1.9),
949 Some(2.2),
950 Some(2.2),
951 Some(2.2),
952 Some(2.4),
953 Some(1.9),
954 Some(1.8),
955 Some(1.8),
956 Some(1.9),
957 Some(2.0),
958 Some(2.2),
959 None,
960 Some(0.7),
961 Some(0.9),
962 Some(1.1),
963 Some(1.3),
964 Some(1.5),
965 Some(1.7),
966 Some(1.3),
967 Some(1.3),
968 None,
969 None,
970 None,
971 None,
972 None,
973 None,
974 None,
975 None,
976 None,
977 None,
978 None,
979 None,
980 None,
981 None,
982 None,
983 None,
984 None,
985 None,
986 None,
987 None,
988 None,
989 None,
990 None,
991 None,
992];