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
461const ELEMENT_SYMBOLS: [&str; 118] = [
463 "H", "HE", "LI", "BE", "B", "C", "N", "O", "F", "NE", "NA", "MG", "AL", "SI", "P", "S", "CL",
464 "AR", "K", "CA", "SC", "TI", "V", "CR", "MN", "FE", "CO", "NI", "CU", "ZN", "GA", "GE", "AS",
465 "SE", "BR", "KR", "RB", "SR", "Y", "ZR", "NB", "MO", "TC", "RU", "RH", "PD", "AG", "CD", "IN",
466 "SN", "SB", "TE", "I", "XE", "CS", "BA", "LA", "CE", "PR", "ND", "PM", "SM", "EU", "GD", "TB",
467 "DY", "HO", "ER", "TM", "YB", "LU", "HF", "TA", "W", "RE", "OS", "IR", "PT", "AU", "HG", "TL",
468 "PB", "BI", "PO", "AT", "RN", "FR", "RA", "AC", "TH", "PA", "U", "NP", "PU", "AM", "CM", "BK",
469 "CF", "ES", "FM", "MD", "NO", "LR", "RF", "DB", "SG", "BH", "HS", "MT", "DS", "RG", "CN", "NH",
470 "FL", "MC", "LV", "TS", "OG",
471];
472
473const ELEMENT_NAMES: [&str; 118] = [
475 "Hydrogen",
476 "Helium",
477 "Lithium",
478 "Beryllium",
479 "Boron",
480 "Carbon",
481 "Nitrogen",
482 "Oxygen",
483 "Fluorine",
484 "Neon",
485 "Sodium",
486 "Magnesium",
487 "Aluminum",
488 "Silicon",
489 "Phosphorus",
490 "Sulfur",
491 "Chlorine",
492 "Argon",
493 "Potassium",
494 "Calcium",
495 "Scandium",
496 "Titanium",
497 "Vanadium",
498 "Chromium",
499 "Manganese",
500 "Iron",
501 "Cobalt",
502 "Nickel",
503 "Copper",
504 "Zinc",
505 "Gallium",
506 "Germanium",
507 "Arsenic",
508 "Selenium",
509 "Bromine",
510 "Krypton",
511 "Rubidium",
512 "Strontium",
513 "Yttrium",
514 "Zirconium",
515 "Niobium",
516 "Molybdenum",
517 "Technetium",
518 "Ruthenium",
519 "Rhodium",
520 "Palladium",
521 "Silver",
522 "Cadmium",
523 "Indium",
524 "Tin",
525 "Antimony",
526 "Tellurium",
527 "Iodine",
528 "Xenon",
529 "Cesium",
530 "Barium",
531 "Lanthanum",
532 "Cerium",
533 "Praseodymium",
534 "Neodymium",
535 "Promethium",
536 "Samarium",
537 "Europium",
538 "Gadolinium",
539 "Terbium",
540 "Dysprosium",
541 "Holmium",
542 "Erbium",
543 "Thulium",
544 "Ytterbium",
545 "Lutetium",
546 "Hafnium",
547 "Tantalum",
548 "Wolfram",
549 "Rhenium",
550 "Osmium",
551 "Iridium",
552 "Platinum",
553 "Gold",
554 "Mercury",
555 "Thallium",
556 "Lead",
557 "Bismuth",
558 "Polonium",
559 "Astatine",
560 "Radon",
561 "Francium",
562 "Radium",
563 "Actinium",
564 "Thorium",
565 "Protactinium",
566 "Uranium",
567 "Neptunium",
568 "Plutonium",
569 "Americium",
570 "Curium",
571 "Berkelium",
572 "Californium",
573 "Einsteinium",
574 "Fermium",
575 "Mendelevium",
576 "Nobelium",
577 "Lawrencium",
578 "Rutherfordium",
579 "Dubnium",
580 "Seaborgium",
581 "Bohrium",
582 "Hassium",
583 "Meitnerium",
584 "Darmstadtium ",
585 "Roentgenium ",
586 "Copernicium ",
587 "Nihonium",
588 "Flerovium",
589 "Moscovium",
590 "Livermorium",
591 "Tennessine",
592 "Oganesson",
593];
594
595#[derive(Debug)]
597pub struct AtomicRadius {
598 pub unbound: Option<f64>,
602 pub van_der_waals: Option<f64>,
605 pub covalent_single: f64,
608 pub covalent_double: Option<f64>,
611 pub covalent_triple: Option<f64>,
614}
615
616impl AtomicRadius {
617 const fn new(
618 unbound: Option<f64>,
619 van_der_waals: Option<f64>,
620 covalent_single: f64,
621 covalent_double: Option<f64>,
622 covalent_triple: Option<f64>,
623 ) -> Self {
624 Self {
625 unbound,
626 van_der_waals,
627 covalent_single,
628 covalent_double,
629 covalent_triple,
630 }
631 }
632}
633
634const ELEMENT_ATOMIC_RADII: [AtomicRadius; 118] = [
636 AtomicRadius::new(Some(1.54), Some(1.2), 0.32, None, None),
637 AtomicRadius::new(Some(1.34), Some(1.43), 0.46, None, None),
638 AtomicRadius::new(Some(2.20), Some(2.12), 1.33, Some(1.24), None),
639 AtomicRadius::new(Some(2.19), Some(1.98), 1.02, Some(0.90), Some(0.85)),
640 AtomicRadius::new(Some(2.05), Some(1.91), 0.85, Some(0.78), Some(0.73)),
641 AtomicRadius::new(Some(1.90), Some(1.77), 0.75, Some(0.67), Some(0.60)),
642 AtomicRadius::new(Some(1.79), Some(1.66), 0.71, Some(0.60), Some(0.54)),
643 AtomicRadius::new(Some(1.71), Some(1.5), 0.63, Some(0.57), Some(0.53)),
644 AtomicRadius::new(Some(1.63), Some(1.46), 0.64, Some(0.59), Some(0.53)),
645 AtomicRadius::new(Some(1.56), Some(1.58), 0.67, Some(0.96), None),
646 AtomicRadius::new(Some(2.25), Some(2.5), 1.55, Some(1.60), None),
647 AtomicRadius::new(Some(2.40), Some(2.51), 1.39, Some(1.32), Some(1.27)),
648 AtomicRadius::new(Some(2.39), Some(2.25), 1.26, Some(1.13), Some(1.11)),
649 AtomicRadius::new(Some(2.32), Some(2.19), 1.16, Some(1.07), Some(1.02)),
650 AtomicRadius::new(Some(2.23), Some(1.9), 1.11, Some(1.02), Some(0.94)),
651 AtomicRadius::new(Some(2.14), Some(1.89), 1.03, Some(0.94), Some(0.95)),
652 AtomicRadius::new(Some(2.06), Some(1.82), 0.99, Some(0.95), Some(0.93)),
653 AtomicRadius::new(Some(1.97), Some(1.83), 0.96, Some(1.07), Some(0.96)),
654 AtomicRadius::new(Some(2.34), Some(2.73), 1.96, Some(1.93), None),
655 AtomicRadius::new(Some(2.70), Some(2.62), 1.71, Some(1.47), Some(1.33)),
656 AtomicRadius::new(Some(2.63), Some(2.58), 1.48, Some(1.16), Some(1.14)),
657 AtomicRadius::new(Some(2.57), Some(2.46), 1.36, Some(1.17), Some(1.08)),
658 AtomicRadius::new(Some(2.52), Some(2.42), 1.34, Some(1.12), Some(1.06)),
659 AtomicRadius::new(Some(2.33), Some(2.45), 1.22, Some(1.11), Some(1.03)),
660 AtomicRadius::new(Some(2.42), Some(2.45), 1.19, Some(1.05), Some(1.03)),
661 AtomicRadius::new(Some(2.37), Some(2.44), 1.16, Some(1.09), Some(1.02)),
662 AtomicRadius::new(Some(2.33), Some(2.4), 1.11, Some(1.03), Some(9.6)),
663 AtomicRadius::new(Some(2.29), Some(2.4), 1.10, Some(1.01), Some(1.01)),
664 AtomicRadius::new(Some(2.17), Some(2.38), 1.12, Some(1.15), Some(1.20)),
665 AtomicRadius::new(Some(2.22), Some(2.39), 1.18, Some(1.20), None),
666 AtomicRadius::new(Some(2.33), Some(2.32), 1.24, Some(1.17), Some(1.21)),
667 AtomicRadius::new(Some(2.34), Some(2.29), 1.21, Some(1.11), Some(1.14)),
668 AtomicRadius::new(Some(2.31), Some(1.88), 1.21, Some(1.14), Some(1.06)),
669 AtomicRadius::new(Some(2.24), Some(1.82), 1.16, Some(1.07), Some(1.07)),
670 AtomicRadius::new(Some(2.19), Some(1.86), 1.14, Some(1.09), Some(1.10)),
671 AtomicRadius::new(Some(2.12), Some(2.25), 1.17, Some(1.21), Some(1.08)),
672 AtomicRadius::new(Some(2.40), Some(3.21), 2.10, Some(2.02), None),
673 AtomicRadius::new(Some(2.79), Some(2.84), 1.85, Some(1.57), Some(1.39)),
674 AtomicRadius::new(Some(2.74), Some(2.75), 1.63, Some(1.30), Some(1.24)),
675 AtomicRadius::new(Some(2.69), Some(2.52), 1.54, Some(1.27), Some(1.21)),
676 AtomicRadius::new(Some(2.51), Some(2.56), 1.47, Some(1.25), Some(1.16)),
677 AtomicRadius::new(Some(2.44), Some(2.45), 1.38, Some(1.21), Some(1.13)),
678 AtomicRadius::new(Some(2.52), Some(2.44), 1.28, Some(1.20), Some(1.10)),
679 AtomicRadius::new(Some(2.37), Some(2.46), 1.25, Some(1.14), Some(1.03)),
680 AtomicRadius::new(Some(2.33), Some(2.44), 1.25, Some(1.10), Some(1.06)),
681 AtomicRadius::new(Some(2.15), Some(2.15), 1.20, Some(1.17), Some(1.12)),
682 AtomicRadius::new(Some(2.25), Some(2.53), 1.28, Some(1.39), Some(1.37)),
683 AtomicRadius::new(Some(2.38), Some(2.49), 1.36, Some(1.44), None),
684 AtomicRadius::new(Some(2.46), Some(2.43), 1.42, Some(1.36), Some(1.46)),
685 AtomicRadius::new(Some(2.48), Some(2.42), 1.40, Some(1.30), Some(1.32)),
686 AtomicRadius::new(Some(2.46), Some(2.47), 1.40, Some(1.33), Some(1.27)),
687 AtomicRadius::new(Some(2.42), Some(1.99), 1.36, Some(1.28), Some(1.21)),
688 AtomicRadius::new(Some(2.38), Some(2.04), 1.33, Some(1.29), Some(1.25)),
689 AtomicRadius::new(Some(2.32), Some(2.06), 1.31, Some(1.35), Some(1.22)),
690 AtomicRadius::new(Some(2.49), Some(3.48), 2.32, Some(2.09), None),
691 AtomicRadius::new(Some(2.93), Some(3.03), 1.96, Some(1.61), Some(1.49)),
692 AtomicRadius::new(Some(2.84), Some(2.98), 1.80, Some(1.39), Some(1.39)),
693 AtomicRadius::new(Some(2.82), Some(2.88), 1.63, Some(1.37), Some(1.31)),
694 AtomicRadius::new(Some(2.86), Some(2.92), 1.76, Some(1.38), Some(1.28)),
695 AtomicRadius::new(Some(2.84), Some(2.95), 1.74, Some(1.37), None),
696 AtomicRadius::new(Some(2.83), None, 1.73, Some(1.35), None),
697 AtomicRadius::new(Some(2.80), Some(2.9), 1.72, Some(1.34), None),
698 AtomicRadius::new(Some(2.80), Some(2.87), 1.68, Some(1.34), None),
699 AtomicRadius::new(Some(2.77), Some(2.83), 1.69, Some(1.35), Some(1.32)),
700 AtomicRadius::new(Some(2.76), Some(2.79), 1.68, Some(1.35), None),
701 AtomicRadius::new(Some(2.75), Some(2.87), 1.67, Some(1.33), None),
702 AtomicRadius::new(Some(2.73), Some(2.81), 1.66, Some(1.33), None),
703 AtomicRadius::new(Some(2.72), Some(2.83), 1.65, Some(1.33), None),
704 AtomicRadius::new(Some(2.71), Some(2.79), 1.64, Some(1.31), None),
705 AtomicRadius::new(Some(2.77), Some(2.8), 1.70, Some(1.29), None),
706 AtomicRadius::new(Some(2.70), Some(2.74), 1.62, Some(1.31), Some(1.31)),
707 AtomicRadius::new(Some(2.64), Some(2.63), 1.52, Some(1.28), Some(1.22)),
708 AtomicRadius::new(Some(2.58), Some(2.53), 1.46, Some(1.26), Some(1.19)),
709 AtomicRadius::new(Some(2.53), Some(2.57), 1.37, Some(1.20), Some(1.15)),
710 AtomicRadius::new(Some(2.49), Some(2.49), 1.31, Some(1.19), Some(1.10)),
711 AtomicRadius::new(Some(2.44), Some(2.48), 1.29, Some(1.16), Some(1.09)),
712 AtomicRadius::new(Some(2.40), Some(2.41), 1.22, Some(1.15), Some(1.07)),
713 AtomicRadius::new(Some(2.30), Some(2.29), 1.23, Some(1.12), Some(1.10)),
714 AtomicRadius::new(Some(2.26), Some(2.32), 1.24, Some(1.21), Some(1.23)),
715 AtomicRadius::new(Some(2.29), Some(2.45), 1.33, Some(1.42), None),
716 AtomicRadius::new(Some(2.42), Some(2.47), 1.44, Some(1.42), Some(1.50)),
717 AtomicRadius::new(Some(2.49), Some(2.6), 1.44, Some(1.35), Some(1.37)),
718 AtomicRadius::new(Some(2.50), Some(2.54), 1.51, Some(1.41), Some(1.35)),
719 AtomicRadius::new(Some(2.50), None, 1.45, Some(1.35), Some(1.29)),
720 AtomicRadius::new(Some(2.47), None, 1.47, Some(1.38), Some(1.38)),
721 AtomicRadius::new(Some(2.43), None, 1.42, Some(1.45), Some(1.33)),
722 AtomicRadius::new(Some(2.58), None, 2.23, Some(2.18), None),
723 AtomicRadius::new(Some(2.92), None, 2.01, Some(1.73), Some(1.59)),
724 AtomicRadius::new(Some(2.93), Some(2.8), 1.86, Some(1.53), Some(1.40)),
725 AtomicRadius::new(Some(2.88), Some(2.93), 1.75, Some(1.43), Some(1.36)),
726 AtomicRadius::new(Some(2.85), Some(2.88), 1.69, Some(1.38), Some(1.29)),
727 AtomicRadius::new(Some(2.83), Some(2.71), 1.70, Some(1.34), Some(1.18)),
728 AtomicRadius::new(Some(2.81), Some(2.82), 1.71, Some(1.36), Some(1.16)),
729 AtomicRadius::new(Some(2.78), Some(2.81), 1.72, Some(1.35), None),
730 AtomicRadius::new(Some(2.76), Some(2.83), 1.66, Some(1.35), None),
731 AtomicRadius::new(Some(2.64), Some(3.05), 1.66, Some(1.36), None),
732 AtomicRadius::new(None, Some(3.4), 1.68, Some(1.39), None),
733 AtomicRadius::new(None, Some(3.05), 1.68, Some(1.40), None),
734 AtomicRadius::new(None, Some(2.7), 1.65, Some(1.40), None),
735 AtomicRadius::new(None, None, 1.67, Some(1.67), Some(1.67)),
736 AtomicRadius::new(None, None, 1.73, Some(1.39), None),
737 AtomicRadius::new(None, None, 1.76, Some(1.76), Some(1.76)),
738 AtomicRadius::new(None, None, 1.61, Some(1.41), None),
739 AtomicRadius::new(None, None, 1.57, Some(1.40), Some(1.31)),
740 AtomicRadius::new(None, None, 1.49, Some(1.36), Some(1.26)),
741 AtomicRadius::new(None, None, 1.43, Some(1.28), Some(1.21)),
742 AtomicRadius::new(None, None, 1.41, Some(1.28), Some(1.19)),
743 AtomicRadius::new(None, None, 1.34, Some(1.25), Some(1.18)),
744 AtomicRadius::new(None, None, 1.29, Some(1.25), Some(1.13)),
745 AtomicRadius::new(None, None, 1.28, Some(1.16), Some(1.12)),
746 AtomicRadius::new(None, None, 1.21, Some(1.16), Some(1.18)),
747 AtomicRadius::new(None, None, 1.22, Some(1.37), Some(1.30)),
748 AtomicRadius::new(None, None, 1.36, None, None),
749 AtomicRadius::new(None, None, 1.43, None, None),
750 AtomicRadius::new(None, None, 1.62, None, None),
751 AtomicRadius::new(None, None, 1.75, None, None),
752 AtomicRadius::new(None, None, 1.65, None, None),
753 AtomicRadius::new(None, None, 1.57, None, None),
754];
755
756const ELEMENT_WEIGHT: [Option<f64>; 118] = [
757 Some(1.007975),
758 Some(4.002602),
759 Some(6.9675),
760 Some(9.0121831),
761 Some(10.8135),
762 Some(12.0106),
763 Some(14.006855),
764 Some(15.9994),
765 Some(18.998403163),
766 Some(20.1797),
767 Some(22.98976928),
768 Some(24.3055),
769 Some(26.9815384),
770 Some(28.085),
771 Some(30.973761998),
772 Some(32.0675),
773 Some(35.4515),
774 Some(39.8775),
775 Some(39.0983),
776 Some(40.078),
777 Some(44.955908),
778 Some(47.867),
779 Some(50.9415),
780 Some(51.9961),
781 Some(54.938043),
782 Some(55.845),
783 Some(58.933194),
784 Some(58.6934),
785 Some(63.546),
786 Some(65.38),
787 Some(69.723),
788 Some(72.630),
789 Some(74.921595),
790 Some(78.971),
791 Some(79.904),
792 Some(83.798),
793 Some(85.4678),
794 Some(87.62),
795 Some(88.90584),
796 Some(91.224),
797 Some(92.90637),
798 Some(95.95),
799 None,
800 Some(101.07),
801 Some(102.90549),
802 Some(106.42),
803 Some(107.8682),
804 Some(112.414),
805 Some(114.818),
806 Some(118.710),
807 Some(121.760),
808 Some(127.60),
809 Some(126.90447),
810 Some(131.293),
811 Some(132.90545196),
812 Some(137.327),
813 Some(138.90547),
814 Some(140.116),
815 Some(140.90766),
816 Some(144.242),
817 None,
818 Some(150.36),
819 Some(151.964),
820 Some(157.25),
821 Some(158.925354),
822 Some(162.500),
823 Some(164.930328),
824 Some(167.259),
825 Some(168.934218),
826 Some(173.045),
827 Some(174.9668),
828 Some(178.486),
829 Some(180.94788),
830 Some(183.84),
831 Some(186.207),
832 Some(190.23),
833 Some(192.217),
834 Some(195.084),
835 Some(196.966570),
836 Some(200.592),
837 Some(204.3835),
838 Some(207.04),
839 Some(208.98040),
840 None,
841 None,
842 None,
843 None,
844 None,
845 None,
846 Some(232.0377),
847 Some(231.03588),
848 Some(238.02891),
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 None,
872 None,
873 None,
874 None,
875];
876
877const ELEMENT_ELECTRON_NEGATIVITY: [Option<f64>; 118] = [
878 Some(2.20),
879 None,
880 Some(0.98),
881 Some(1.57),
882 Some(2.04),
883 Some(2.55),
884 Some(3.04),
885 Some(3.44),
886 Some(3.98),
887 None,
888 Some(0.93),
889 Some(1.31),
890 Some(1.61),
891 Some(1.90),
892 Some(2.19),
893 Some(2.58),
894 Some(3.16),
895 None,
896 Some(0.82),
897 Some(1.00),
898 Some(1.36),
899 Some(1.54),
900 Some(1.63),
901 Some(1.66),
902 Some(1.55),
903 Some(1.83),
904 Some(1.88),
905 Some(1.91),
906 Some(1.90),
907 Some(1.65),
908 Some(1.81),
909 Some(2.01),
910 Some(2.18),
911 Some(2.55),
912 Some(2.96),
913 None,
914 Some(0.82),
915 Some(0.95),
916 Some(1.22),
917 Some(1.33),
918 Some(1.6),
919 Some(2.16),
920 Some(2.10),
921 Some(2.2),
922 Some(2.28),
923 Some(2.20),
924 Some(1.93),
925 Some(1.69),
926 Some(1.78),
927 Some(1.96),
928 Some(2.05),
929 Some(2.1),
930 Some(2.66),
931 Some(2.60),
932 Some(0.79),
933 Some(0.89),
934 Some(1.10),
935 Some(1.12),
936 Some(1.13),
937 Some(1.14),
938 None,
939 Some(1.17),
940 None,
941 Some(1.20),
942 None,
943 Some(1.22),
944 Some(1.23),
945 Some(1.24),
946 Some(1.25),
947 None,
948 Some(1.0),
949 Some(1.3),
950 Some(1.5),
951 Some(1.7),
952 Some(1.9),
953 Some(2.2),
954 Some(2.2),
955 Some(2.2),
956 Some(2.4),
957 Some(1.9),
958 Some(1.8),
959 Some(1.8),
960 Some(1.9),
961 Some(2.0),
962 Some(2.2),
963 None,
964 Some(0.7),
965 Some(0.9),
966 Some(1.1),
967 Some(1.3),
968 Some(1.5),
969 Some(1.7),
970 Some(1.3),
971 Some(1.3),
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 None,
993 None,
994 None,
995 None,
996];