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