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