mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-12-23 03:53:29 +01:00
1014 lines
20 KiB
OCaml
1014 lines
20 KiB
OCaml
open Sexplib.Std
|
|
open Qptypes
|
|
|
|
exception ElementError of string
|
|
|
|
type t = X
|
|
|
|
|H |He
|
|
|Li|Be |B |C |N |O |F |Ne
|
|
|Na|Mg |Al|Si|P |S |Cl|Ar
|
|
|K |Ca|Sc|Ti|V |Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr
|
|
|Rb|Sr|Y |Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I |Xe
|
|
|Cs|Ba|La|Hf|Ta|W |Re|Os|Ir|Pt|Au|Hg|Tl|Pb|Bi|Po|At|Rn
|
|
|Fr|Ra|Ac|Rf|Db|Sg|Bh|Hs|Mt|Ds|Rg|Cn|Nh|Fl|Mc|Lv|Ts|Og
|
|
|
|
|Ce|Pr|Nd|Pm|Sm|Eu|Gd|Tb|Dy|Ho|Er|Tm|Yb|Lu
|
|
|Th|Pa|U |Np|Pu|Am|Cm|Bk|Cf|Es|Fm|Md|No|Lr
|
|
|
|
[@@deriving sexp]
|
|
|
|
let of_string x =
|
|
match (String.capitalize_ascii (String.lowercase_ascii x)) with
|
|
| "X" | "Ghost" -> X
|
|
| "H" | "Hydrogen" -> H
|
|
| "He" | "Helium" -> He
|
|
| "Li" | "Lithium" -> Li
|
|
| "Be" | "Beryllium" -> Be
|
|
| "B" | "Boron" -> B
|
|
| "C" | "Carbon" -> C
|
|
| "N" | "Nitrogen" -> N
|
|
| "O" | "Oxygen" -> O
|
|
| "F" | "Fluorine" -> F
|
|
| "Ne" | "Neon" -> Ne
|
|
| "Na" | "Sodium" -> Na
|
|
| "Mg" | "Magnesium" -> Mg
|
|
| "Al" | "Aluminum" -> Al
|
|
| "Si" | "Silicon" -> Si
|
|
| "P" | "Phosphorus" -> P
|
|
| "S" | "Sulfur" -> S
|
|
| "Cl" | "Chlorine" -> Cl
|
|
| "Ar" | "Argon" -> Ar
|
|
| "K" | "Potassium" -> K
|
|
| "Ca" | "Calcium" -> Ca
|
|
| "Sc" | "Scandium" -> Sc
|
|
| "Ti" | "Titanium" -> Ti
|
|
| "V" | "Vanadium" -> V
|
|
| "Cr" | "Chromium" -> Cr
|
|
| "Mn" | "Manganese" -> Mn
|
|
| "Fe" | "Iron" -> Fe
|
|
| "Co" | "Cobalt" -> Co
|
|
| "Ni" | "Nickel" -> Ni
|
|
| "Cu" | "Copper" -> Cu
|
|
| "Zn" | "Zinc" -> Zn
|
|
| "Ga" | "Gallium" -> Ga
|
|
| "Ge" | "Germanium" -> Ge
|
|
| "As" | "Arsenic" -> As
|
|
| "Se" | "Selenium" -> Se
|
|
| "Br" | "Bromine" -> Br
|
|
| "Kr" | "Krypton" -> Kr
|
|
| "Rb" | "Rubidium" -> Rb
|
|
| "Sr" | "Strontium" -> Sr
|
|
| "Y" | "Yttrium" -> Y
|
|
| "Zr" | "Zirconium" -> Zr
|
|
| "Nb" | "Niobium" -> Nb
|
|
| "Mo" | "Molybdenum" -> Mo
|
|
| "Tc" | "Technetium" -> Tc
|
|
| "Ru" | "Ruthenium" -> Ru
|
|
| "Rh" | "Rhodium" -> Rh
|
|
| "Pd" | "Palladium" -> Pd
|
|
| "Ag" | "Silver" -> Ag
|
|
| "Cd" | "Cadmium" -> Cd
|
|
| "In" | "Indium" -> In
|
|
| "Sn" | "Tin" -> Sn
|
|
| "Sb" | "Antimony" -> Sb
|
|
| "Te" | "Tellurium" -> Te
|
|
| "I" | "Iodine" -> I
|
|
| "Xe" | "Xenon" -> Xe
|
|
| "Cs" | "Cesium" -> Cs
|
|
| "Ba" | "Barium" -> Ba
|
|
| "La" | "Lanthanum" -> La
|
|
| "Ce" | "Cerium" -> Ce
|
|
| "Pr" | "Praseodymium" -> Pr
|
|
| "Nd" | "Neodymium" -> Nd
|
|
| "Pm" | "Promethium" -> Pm
|
|
| "Sm" | "Samarium" -> Sm
|
|
| "Eu" | "Europium" -> Eu
|
|
| "Gd" | "Gadolinium" -> Gd
|
|
| "Tb" | "Terbium" -> Tb
|
|
| "Dy" | "Dysprosium" -> Dy
|
|
| "Ho" | "Holmium" -> Ho
|
|
| "Er" | "Erbium" -> Er
|
|
| "Tm" | "Thulium" -> Tm
|
|
| "Yb" | "Ytterbium" -> Yb
|
|
| "Lu" | "Lutetium" -> Lu
|
|
| "Hf" | "Hafnium" -> Hf
|
|
| "Ta" | "Tantalum" -> Ta
|
|
| "W" | "Tungsten" -> W
|
|
| "Re" | "Rhenium" -> Re
|
|
| "Os" | "Osmium" -> Os
|
|
| "Ir" | "Iridium" -> Ir
|
|
| "Pt" | "Platinum" -> Pt
|
|
| "Au" | "Gold" -> Au
|
|
| "Hg" | "Mercury" -> Hg
|
|
| "Tl" | "Thallium" -> Tl
|
|
| "Pb" | "Lead" -> Pb
|
|
| "Bi" | "Bismuth" -> Bi
|
|
| "Po" | "Polonium" -> Po
|
|
| "At" | "Astatine" -> At
|
|
| "Rn" | "Radon" -> Rn
|
|
| "Fr" | "Francium" -> Fr
|
|
| "Ra" | "Radium" -> Ra
|
|
| "Ac" | "Actinium" -> Ac
|
|
| "Th" | "Thorium" -> Th
|
|
| "Pa" | "Protactinium" -> Pa
|
|
| "U" | "Uranium" -> U
|
|
| "Np" | "Neptunium" -> Np
|
|
| "Pu" | "Plutonium" -> Pu
|
|
| "Am" | "Americium" -> Am
|
|
| "Cm" | "Curium" -> Cm
|
|
| "Bk" | "Berkelium" -> Bk
|
|
| "Cf" | "Californium" -> Cf
|
|
| "Es" | "Einsteinium" -> Es
|
|
| "Fm" | "Fermium" -> Fm
|
|
| "Md" | "Mendelevium" -> Md
|
|
| "No" | "Nobelium" -> No
|
|
| "Lr" | "Lawrencium" -> Lr
|
|
| "Rf" | "Rutherfordium"-> Rf
|
|
| "Db" | "Dubnium" -> Db
|
|
| "Sg" | "Seaborgium" -> Sg
|
|
| "Bh" | "Bohrium" -> Bh
|
|
| "Hs" | "Hassium" -> Hs
|
|
| "Mt" | "Meitnerium" -> Mt
|
|
| "Ds" | "Darmstadtium" -> Ds
|
|
| "Rg" | "Roentgenium" -> Rg
|
|
| "Cn" | "Copernicium" -> Cn
|
|
| "Nh" | "Nihonium" -> Nh
|
|
| "Fl" | "Flerovium" -> Fl
|
|
| "Mc" | "Moscovium" -> Mc
|
|
| "Lv" | "Livermorium" -> Lv
|
|
| "Ts" | "Tennessine" -> Ts
|
|
| "Og" | "Oganesson" -> Og
|
|
| x -> raise (ElementError ("Element "^x^" unknown"))
|
|
|
|
|
|
let to_string = function
|
|
| X -> "X"
|
|
| H -> "H"
|
|
| He -> "He"
|
|
| Li -> "Li"
|
|
| Be -> "Be"
|
|
| B -> "B"
|
|
| C -> "C"
|
|
| N -> "N"
|
|
| O -> "O"
|
|
| F -> "F"
|
|
| Ne -> "Ne"
|
|
| Na -> "Na"
|
|
| Mg -> "Mg"
|
|
| Al -> "Al"
|
|
| Si -> "Si"
|
|
| P -> "P"
|
|
| S -> "S"
|
|
| Cl -> "Cl"
|
|
| Ar -> "Ar"
|
|
| K -> "K"
|
|
| Ca -> "Ca"
|
|
| Sc -> "Sc"
|
|
| Ti -> "Ti"
|
|
| V -> "V"
|
|
| Cr -> "Cr"
|
|
| Mn -> "Mn"
|
|
| Fe -> "Fe"
|
|
| Co -> "Co"
|
|
| Ni -> "Ni"
|
|
| Cu -> "Cu"
|
|
| Zn -> "Zn"
|
|
| Ga -> "Ga"
|
|
| Ge -> "Ge"
|
|
| As -> "As"
|
|
| Se -> "Se"
|
|
| Br -> "Br"
|
|
| Kr -> "Kr"
|
|
| Rb -> "Rb"
|
|
| Sr -> "Sr"
|
|
| Y -> "Y"
|
|
| Zr -> "Zr"
|
|
| Nb -> "Nb"
|
|
| Mo -> "Mo"
|
|
| Tc -> "Tc"
|
|
| Ru -> "Ru"
|
|
| Rh -> "Rh"
|
|
| Pd -> "Pd"
|
|
| Ag -> "Ag"
|
|
| Cd -> "Cd"
|
|
| In -> "In"
|
|
| Sn -> "Sn"
|
|
| Sb -> "Sb"
|
|
| Te -> "Te"
|
|
| I -> "I"
|
|
| Xe -> "Xe"
|
|
| Cs -> "Cs"
|
|
| Ba -> "Ba"
|
|
| La -> "La"
|
|
| Hf -> "Hf"
|
|
| Ta -> "Ta"
|
|
| W -> "W"
|
|
| Re -> "Re"
|
|
| Os -> "Os"
|
|
| Ir -> "Ir"
|
|
| Pt -> "Pt"
|
|
| Au -> "Au"
|
|
| Hg -> "Hg"
|
|
| Tl -> "Tl"
|
|
| Pb -> "Pb"
|
|
| Bi -> "Bi"
|
|
| Po -> "Po"
|
|
| At -> "At"
|
|
| Rn -> "Rn"
|
|
| Fr -> "Fr"
|
|
| Ra -> "Ra"
|
|
| Ac -> "Ac"
|
|
| Rf -> "Rf"
|
|
| Db -> "Db"
|
|
| Sg -> "Sg"
|
|
| Bh -> "Bh"
|
|
| Hs -> "Hs"
|
|
| Mt -> "Mt"
|
|
| Ds -> "Ds"
|
|
| Rg -> "Rg"
|
|
| Cn -> "Cn"
|
|
| Nh -> "Nh"
|
|
| Fl -> "Fl"
|
|
| Mc -> "Mc"
|
|
| Lv -> "Lv"
|
|
| Ts -> "Ts"
|
|
| Og -> "Og"
|
|
| Ce -> "Ce"
|
|
| Pr -> "Pr"
|
|
| Nd -> "Nd"
|
|
| Pm -> "Pm"
|
|
| Sm -> "Sm"
|
|
| Eu -> "Eu"
|
|
| Gd -> "Gd"
|
|
| Tb -> "Tb"
|
|
| Dy -> "Dy"
|
|
| Ho -> "Ho"
|
|
| Er -> "Er"
|
|
| Tm -> "Tm"
|
|
| Yb -> "Yb"
|
|
| Lu -> "Lu"
|
|
| Th -> "Th"
|
|
| Pa -> "Pa"
|
|
| U -> "U"
|
|
| Np -> "Np"
|
|
| Pu -> "Pu"
|
|
| Am -> "Am"
|
|
| Cm -> "Cm"
|
|
| Bk -> "Bk"
|
|
| Cf -> "Cf"
|
|
| Es -> "Es"
|
|
| Fm -> "Fm"
|
|
| Md -> "Md"
|
|
| No -> "No"
|
|
| Lr -> "Lr"
|
|
|
|
|
|
let to_long_string = function
|
|
| X -> "Ghost"
|
|
| H -> "Hydrogen"
|
|
| He -> "Helium"
|
|
| Li -> "Lithium"
|
|
| Be -> "Beryllium"
|
|
| B -> "Boron"
|
|
| C -> "Carbon"
|
|
| N -> "Nitrogen"
|
|
| O -> "Oxygen"
|
|
| F -> "Fluorine"
|
|
| Ne -> "Neon"
|
|
| Na -> "Sodium"
|
|
| Mg -> "Magnesium"
|
|
| Al -> "Aluminum"
|
|
| Si -> "Silicon"
|
|
| P -> "Phosphorus"
|
|
| S -> "Sulfur"
|
|
| Cl -> "Chlorine"
|
|
| Ar -> "Argon"
|
|
| K -> "Potassium"
|
|
| Ca -> "Calcium"
|
|
| Sc -> "Scandium"
|
|
| Ti -> "Titanium"
|
|
| V -> "Vanadium"
|
|
| Cr -> "Chromium"
|
|
| Mn -> "Manganese"
|
|
| Fe -> "Iron"
|
|
| Co -> "Cobalt"
|
|
| Ni -> "Nickel"
|
|
| Cu -> "Copper"
|
|
| Zn -> "Zinc"
|
|
| Ga -> "Gallium"
|
|
| Ge -> "Germanium"
|
|
| As -> "Arsenic"
|
|
| Se -> "Selenium"
|
|
| Br -> "Bromine"
|
|
| Kr -> "Krypton"
|
|
| Rb -> "Rubidium"
|
|
| Sr -> "Strontium"
|
|
| Y -> "Yttrium"
|
|
| Zr -> "Zirconium"
|
|
| Nb -> "Niobium"
|
|
| Mo -> "Molybdenum"
|
|
| Tc -> "Technetium"
|
|
| Ru -> "Ruthenium"
|
|
| Rh -> "Rhodium"
|
|
| Pd -> "Palladium"
|
|
| Ag -> "Silver"
|
|
| Cd -> "Cadmium"
|
|
| In -> "Indium"
|
|
| Sn -> "Tin"
|
|
| Sb -> "Antimony"
|
|
| Te -> "Tellurium"
|
|
| I -> "Iodine"
|
|
| Xe -> "Xenon"
|
|
| Cs -> "Cesium"
|
|
| Ba -> "Barium"
|
|
| La -> "Lanthanum"
|
|
| Ce -> "Cerium"
|
|
| Pr -> "Praseodymium"
|
|
| Nd -> "Neodymium"
|
|
| Pm -> "Promethium"
|
|
| Sm -> "Samarium"
|
|
| Eu -> "Europium"
|
|
| Gd -> "Gadolinium"
|
|
| Tb -> "Terbium"
|
|
| Dy -> "Dysprosium"
|
|
| Ho -> "Holmium"
|
|
| Er -> "Erbium"
|
|
| Tm -> "Thulium"
|
|
| Yb -> "Ytterbium"
|
|
| Lu -> "Lutetium"
|
|
| Hf -> "Hafnium"
|
|
| Ta -> "Tantalum"
|
|
| W -> "Tungsten"
|
|
| Re -> "Rhenium"
|
|
| Os -> "Osmium"
|
|
| Ir -> "Iridium"
|
|
| Pt -> "Platinum"
|
|
| Au -> "Gold"
|
|
| Hg -> "Mercury"
|
|
| Tl -> "Thallium"
|
|
| Pb -> "Lead"
|
|
| Bi -> "Bismuth"
|
|
| Po -> "Polonium"
|
|
| At -> "Astatine"
|
|
| Rn -> "Radon"
|
|
| Fr -> "Francium"
|
|
| Ra -> "Radium"
|
|
| Ac -> "Actinium"
|
|
| Th -> "Thorium"
|
|
| Pa -> "Protactinium"
|
|
| U -> "Uranium"
|
|
| Np -> "Neptunium"
|
|
| Pu -> "Plutonium"
|
|
| Am -> "Americium"
|
|
| Cm -> "Curium"
|
|
| Bk -> "Berkelium"
|
|
| Cf -> "Californium"
|
|
| Es -> "Einsteinium"
|
|
| Fm -> "Fermium"
|
|
| Md -> "Mendelevium"
|
|
| No -> "Nobelium"
|
|
| Lr -> "Lawrencium"
|
|
| Rf -> "Rutherfordium"
|
|
| Db -> "Dubnium"
|
|
| Sg -> "Seaborgium"
|
|
| Bh -> "Bohrium"
|
|
| Hs -> "Hassium"
|
|
| Mt -> "Meitnerium"
|
|
| Ds -> "Darmstadtium"
|
|
| Rg -> "Roentgenium"
|
|
| Cn -> "Copernicium"
|
|
| Nh -> "Nihonium"
|
|
| Fl -> "Flerovium"
|
|
| Mc -> "Moscovium"
|
|
| Lv -> "Livermorium"
|
|
| Ts -> "Tennessine"
|
|
| Og -> "Oganesson"
|
|
|
|
let to_charge c =
|
|
let result = match c with
|
|
| X -> 0
|
|
| H -> 1
|
|
| He -> 2
|
|
| Li -> 3
|
|
| Be -> 4
|
|
| B -> 5
|
|
| C -> 6
|
|
| N -> 7
|
|
| O -> 8
|
|
| F -> 9
|
|
| Ne -> 10
|
|
| Na -> 11
|
|
| Mg -> 12
|
|
| Al -> 13
|
|
| Si -> 14
|
|
| P -> 15
|
|
| S -> 16
|
|
| Cl -> 17
|
|
| Ar -> 18
|
|
| K -> 19
|
|
| Ca -> 20
|
|
| Sc -> 21
|
|
| Ti -> 22
|
|
| V -> 23
|
|
| Cr -> 24
|
|
| Mn -> 25
|
|
| Fe -> 26
|
|
| Co -> 27
|
|
| Ni -> 28
|
|
| Cu -> 29
|
|
| Zn -> 30
|
|
| Ga -> 31
|
|
| Ge -> 32
|
|
| As -> 33
|
|
| Se -> 34
|
|
| Br -> 35
|
|
| Kr -> 36
|
|
| Rb -> 37
|
|
| Sr -> 38
|
|
| Y -> 39
|
|
| Zr -> 40
|
|
| Nb -> 41
|
|
| Mo -> 42
|
|
| Tc -> 43
|
|
| Ru -> 44
|
|
| Rh -> 45
|
|
| Pd -> 46
|
|
| Ag -> 47
|
|
| Cd -> 48
|
|
| In -> 49
|
|
| Sn -> 50
|
|
| Sb -> 51
|
|
| Te -> 52
|
|
| I -> 53
|
|
| Xe -> 54
|
|
| Cs -> 55
|
|
| Ba -> 56
|
|
| La -> 57
|
|
| Ce -> 58
|
|
| Pr -> 59
|
|
| Nd -> 60
|
|
| Pm -> 61
|
|
| Sm -> 62
|
|
| Eu -> 63
|
|
| Gd -> 64
|
|
| Tb -> 65
|
|
| Dy -> 66
|
|
| Ho -> 67
|
|
| Er -> 68
|
|
| Tm -> 69
|
|
| Yb -> 70
|
|
| Lu -> 71
|
|
| Hf -> 72
|
|
| Ta -> 73
|
|
| W -> 74
|
|
| Re -> 75
|
|
| Os -> 76
|
|
| Ir -> 77
|
|
| Pt -> 78
|
|
| Au -> 79
|
|
| Hg -> 80
|
|
| Tl -> 81
|
|
| Pb -> 82
|
|
| Bi -> 83
|
|
| Po -> 84
|
|
| At -> 85
|
|
| Rn -> 86
|
|
| Fr -> 87
|
|
| Ra -> 88
|
|
| Ac -> 89
|
|
| Th -> 90
|
|
| Pa -> 91
|
|
| U -> 92
|
|
| Np -> 93
|
|
| Pu -> 94
|
|
| Am -> 95
|
|
| Cm -> 96
|
|
| Bk -> 97
|
|
| Cf -> 98
|
|
| Es -> 99
|
|
| Fm -> 100
|
|
| Md -> 101
|
|
| No -> 102
|
|
| Lr -> 103
|
|
| Rf -> 104
|
|
| Db -> 105
|
|
| Sg -> 106
|
|
| Bh -> 107
|
|
| Hs -> 108
|
|
| Mt -> 109
|
|
| Ds -> 110
|
|
| Rg -> 111
|
|
| Cn -> 112
|
|
| Nh -> 113
|
|
| Fl -> 114
|
|
| Mc -> 115
|
|
| Lv -> 116
|
|
| Ts -> 117
|
|
| Og -> 118
|
|
in Charge.of_int result
|
|
|
|
|
|
let of_charge c = match (Charge.to_int c) with
|
|
| 0 -> X
|
|
| 1 -> H
|
|
| 2 -> He
|
|
| 3 -> Li
|
|
| 4 -> Be
|
|
| 5 -> B
|
|
| 6 -> C
|
|
| 7 -> N
|
|
| 8 -> O
|
|
| 9 -> F
|
|
| 10 -> Ne
|
|
| 11 -> Na
|
|
| 12 -> Mg
|
|
| 13 -> Al
|
|
| 14 -> Si
|
|
| 15 -> P
|
|
| 16 -> S
|
|
| 17 -> Cl
|
|
| 18 -> Ar
|
|
| 19 -> K
|
|
| 20 -> Ca
|
|
| 21 -> Sc
|
|
| 22 -> Ti
|
|
| 23 -> V
|
|
| 24 -> Cr
|
|
| 25 -> Mn
|
|
| 26 -> Fe
|
|
| 27 -> Co
|
|
| 28 -> Ni
|
|
| 29 -> Cu
|
|
| 30 -> Zn
|
|
| 31 -> Ga
|
|
| 32 -> Ge
|
|
| 33 -> As
|
|
| 34 -> Se
|
|
| 35 -> Br
|
|
| 36 -> Kr
|
|
| 37 -> Rb
|
|
| 38 -> Sr
|
|
| 39 -> Y
|
|
| 40 -> Zr
|
|
| 41 -> Nb
|
|
| 42 -> Mo
|
|
| 43 -> Tc
|
|
| 44 -> Ru
|
|
| 45 -> Rh
|
|
| 46 -> Pd
|
|
| 47 -> Ag
|
|
| 48 -> Cd
|
|
| 49 -> In
|
|
| 50 -> Sn
|
|
| 51 -> Sb
|
|
| 52 -> Te
|
|
| 53 -> I
|
|
| 54 -> Xe
|
|
| 55 -> Cs
|
|
| 56 -> Ba
|
|
| 57 -> La
|
|
| 58 -> Ce
|
|
| 59 -> Pr
|
|
| 60 -> Nd
|
|
| 61 -> Pm
|
|
| 62 -> Sm
|
|
| 63 -> Eu
|
|
| 64 -> Gd
|
|
| 65 -> Tb
|
|
| 66 -> Dy
|
|
| 67 -> Ho
|
|
| 68 -> Er
|
|
| 69 -> Tm
|
|
| 70 -> Yb
|
|
| 71 -> Lu
|
|
| 72 -> Hf
|
|
| 73 -> Ta
|
|
| 74 -> W
|
|
| 75 -> Re
|
|
| 76 -> Os
|
|
| 77 -> Ir
|
|
| 78 -> Pt
|
|
| 79 -> Au
|
|
| 80 -> Hg
|
|
| 81 -> Tl
|
|
| 82 -> Pb
|
|
| 83 -> Bi
|
|
| 84 -> Po
|
|
| 85 -> At
|
|
| 86 -> Rn
|
|
| 87 -> Fr
|
|
| 88 -> Ra
|
|
| 89 -> Ac
|
|
| 90 -> Th
|
|
| 91 -> Pa
|
|
| 92 -> U
|
|
| 93 -> Np
|
|
| 94 -> Pu
|
|
| 95 -> Am
|
|
| 96 -> Cm
|
|
| 97 -> Bk
|
|
| 98 -> Cf
|
|
| 99 -> Es
|
|
| 100 -> Fm
|
|
| 101 -> Md
|
|
| 102 -> No
|
|
| 103 -> Lr
|
|
| 104 -> Rf
|
|
| 105 -> Db
|
|
| 106 -> Sg
|
|
| 107 -> Bh
|
|
| 108 -> Hs
|
|
| 109 -> Mt
|
|
| 110 -> Ds
|
|
| 111 -> Rg
|
|
| 112 -> Cn
|
|
| 113 -> Nh
|
|
| 114 -> Fl
|
|
| 115 -> Mc
|
|
| 116 -> Lv
|
|
| 117 -> Ts
|
|
| 118 -> Og
|
|
| x -> raise (ElementError ("Element of charge "^(string_of_int x)^" unknown"))
|
|
|
|
|
|
let covalent_radius x =
|
|
let result = function
|
|
| X -> 0.
|
|
| H -> 0.31
|
|
| He -> 0.28
|
|
| Li -> 1.28
|
|
| Be -> 0.96
|
|
| B -> 0.85
|
|
| C -> 0.76
|
|
| N -> 0.71
|
|
| O -> 0.66
|
|
| F -> 0.57
|
|
| Ne -> 0.58
|
|
| Na -> 1.66
|
|
| Mg -> 1.41
|
|
| Al -> 1.21
|
|
| Si -> 1.11
|
|
| P -> 1.07
|
|
| S -> 1.05
|
|
| Cl -> 1.02
|
|
| Ar -> 1.06
|
|
| K -> 2.03
|
|
| Ca -> 1.76
|
|
| Sc -> 1.70
|
|
| Ti -> 1.60
|
|
| V -> 1.53
|
|
| Cr -> 1.39
|
|
| Mn -> 1.39
|
|
| Fe -> 1.32
|
|
| Co -> 1.26
|
|
| Ni -> 1.24
|
|
| Cu -> 1.32
|
|
| Zn -> 1.22
|
|
| Ga -> 1.22
|
|
| Ge -> 1.20
|
|
| As -> 1.19
|
|
| Se -> 1.20
|
|
| Br -> 1.20
|
|
| Kr -> 1.16
|
|
| Rb -> 2.20
|
|
| Sr -> 1.95
|
|
| Y -> 1.90
|
|
| Zr -> 1.75
|
|
| Nb -> 1.64
|
|
| Mo -> 1.54
|
|
| Tc -> 1.47
|
|
| Ru -> 1.46
|
|
| Rh -> 1.42
|
|
| Pd -> 1.39
|
|
| Ag -> 1.45
|
|
| Cd -> 1.44
|
|
| In -> 1.42
|
|
| Sn -> 1.39
|
|
| Sb -> 1.39
|
|
| Te -> 1.38
|
|
| I -> 1.39
|
|
| Xe -> 1.40
|
|
| Cs -> 2.44
|
|
| Ba -> 2.15
|
|
| La -> 2.07
|
|
| Ce -> 2.04
|
|
| Pr -> 2.03
|
|
| Nd -> 2.01
|
|
| Pm -> 1.99
|
|
| Sm -> 1.98
|
|
| Eu -> 1.98
|
|
| Gd -> 1.96
|
|
| Tb -> 1.94
|
|
| Dy -> 1.92
|
|
| Ho -> 1.92
|
|
| Er -> 1.89
|
|
| Tm -> 1.90
|
|
| Yb -> 1.87
|
|
| Lu -> 1.87
|
|
| Hf -> 1.75
|
|
| Ta -> 1.70
|
|
| W -> 1.62
|
|
| Re -> 1.51
|
|
| Os -> 1.44
|
|
| Ir -> 1.41
|
|
| Pt -> 1.36
|
|
| Au -> 1.36
|
|
| Hg -> 1.32
|
|
| Tl -> 1.45
|
|
| Pb -> 1.46
|
|
| Bi -> 1.48
|
|
| Po -> 1.40
|
|
| At -> 1.50
|
|
| Rn -> 1.50
|
|
| Fr -> 2.60
|
|
| Ra -> 2.21
|
|
| Ac -> 2.15
|
|
| Th -> 2.06
|
|
| Pa -> 2.00
|
|
| U -> 1.96
|
|
| Np -> 1.90
|
|
| Pu -> 1.87
|
|
| Am -> 1.80
|
|
| Cm -> 1.69
|
|
| Bk -> raise (ElementError "Covalent radius not defined for Bk")
|
|
| Cf -> raise (ElementError "Covalent radius not defined for Cf")
|
|
| Es -> raise (ElementError "Covalent radius not defined for Es")
|
|
| Fm -> raise (ElementError "Covalent radius not defined for Fm")
|
|
| Md -> raise (ElementError "Covalent radius not defined for Md")
|
|
| No -> raise (ElementError "Covalent radius not defined for No")
|
|
| Lr -> raise (ElementError "Covalent radius not defined for Lr")
|
|
| Rf -> raise (ElementError "Covalent radius not defined for Rf")
|
|
| Db -> raise (ElementError "Covalent radius not defined for Db")
|
|
| Sg -> raise (ElementError "Covalent radius not defined for Sg")
|
|
| Bh -> raise (ElementError "Covalent radius not defined for Bh")
|
|
| Hs -> raise (ElementError "Covalent radius not defined for Hs")
|
|
| Mt -> raise (ElementError "Covalent radius not defined for Mt")
|
|
| Ds -> raise (ElementError "Covalent radius not defined for Ds")
|
|
| Rg -> raise (ElementError "Covalent radius not defined for Rg")
|
|
| Cn -> raise (ElementError "Covalent radius not defined for Cn")
|
|
| Nh -> raise (ElementError "Covalent radius not defined for Nh")
|
|
| Fl -> raise (ElementError "Covalent radius not defined for Fl")
|
|
| Mc -> raise (ElementError "Covalent radius not defined for Mc")
|
|
| Lv -> raise (ElementError "Covalent radius not defined for Lv")
|
|
| Ts -> raise (ElementError "Covalent radius not defined for Ts")
|
|
| Og -> raise (ElementError "Covalent radius not defined for Og")
|
|
in
|
|
Units.angstrom_to_bohr *. (result x)
|
|
|> Positive_float.of_float
|
|
|
|
|
|
let vdw_radius x =
|
|
let result = function
|
|
| X -> Some 0.
|
|
| H -> Some 1.20
|
|
| He -> Some 1.40
|
|
| Li -> Some 1.82
|
|
| Be -> None
|
|
| B -> None
|
|
| C -> Some 1.70
|
|
| N -> Some 1.55
|
|
| O -> Some 1.52
|
|
| F -> Some 1.47
|
|
| Ne -> Some 1.54
|
|
| Na -> Some 2.27
|
|
| Mg -> Some 1.73
|
|
| Al -> Some 1.94
|
|
| Si -> Some 2.10
|
|
| P -> Some 1.80
|
|
| S -> Some 1.80
|
|
| Cl -> Some 1.75
|
|
| Ar -> Some 1.88
|
|
| K -> Some 2.75
|
|
| Ca -> None
|
|
| Sc -> None
|
|
| Ti -> None
|
|
| V -> Some 1.98
|
|
| Cr -> Some 1.94
|
|
| Mn -> Some 1.93
|
|
| Fe -> Some 1.93
|
|
| Co -> Some 1.92
|
|
| Ni -> Some 1.63
|
|
| Cu -> Some 1.40
|
|
| Zn -> Some 1.39
|
|
| Ga -> Some 1.87
|
|
| Ge -> None
|
|
| As -> Some 1.85
|
|
| Se -> Some 1.90
|
|
| Br -> Some 1.85
|
|
| Kr -> Some 2.02
|
|
| Rb -> Some 3.03
|
|
| Sr -> Some 2.49
|
|
| Y -> None
|
|
| Zr -> None
|
|
| Nb -> None
|
|
| Mo -> None
|
|
| Tc -> None
|
|
| Ru -> None
|
|
| Rh -> None
|
|
| Pd -> Some 1.63
|
|
| Ag -> Some 1.72
|
|
| Cd -> Some 1.58
|
|
| In -> Some 1.93
|
|
| Sn -> Some 2.17
|
|
| Sb -> Some 2.06
|
|
| Te -> Some 2.06
|
|
| I -> Some 1.98
|
|
| Xe -> Some 2.16
|
|
| Cs -> None
|
|
| Ba -> None
|
|
| La -> None
|
|
| Ce -> None
|
|
| Pr -> None
|
|
| Nd -> None
|
|
| Pm -> None
|
|
| Sm -> None
|
|
| Eu -> None
|
|
| Gd -> None
|
|
| Tb -> None
|
|
| Dy -> None
|
|
| Ho -> None
|
|
| Er -> None
|
|
| Tm -> None
|
|
| Yb -> None
|
|
| Lu -> None
|
|
| Hf -> None
|
|
| Ta -> None
|
|
| W -> None
|
|
| Re -> None
|
|
| Os -> None
|
|
| Ir -> None
|
|
| Pt -> Some 1.75
|
|
| Au -> Some 1.66
|
|
| Hg -> Some 1.55
|
|
| Tl -> Some 1.96
|
|
| Pb -> Some 2.02
|
|
| Bi -> None
|
|
| Po -> None
|
|
| At -> None
|
|
| Rn -> None
|
|
| Fr -> None
|
|
| Ra -> None
|
|
| Ac -> None
|
|
| Th -> None
|
|
| Pa -> None
|
|
| U -> Some 1.86
|
|
| Np -> None
|
|
| Pu -> None
|
|
| Am -> None
|
|
| Cm -> None
|
|
| Bk -> None
|
|
| Cf -> None
|
|
| Es -> None
|
|
| Fm -> None
|
|
| Md -> None
|
|
| No -> None
|
|
| Lr -> None
|
|
| Rf -> None
|
|
| Db -> None
|
|
| Sg -> None
|
|
| Bh -> None
|
|
| Hs -> None
|
|
| Mt -> None
|
|
| Ds -> None
|
|
| Rg -> None
|
|
| Cn -> None
|
|
| Nh -> None
|
|
| Fl -> None
|
|
| Mc -> None
|
|
| Lv -> None
|
|
| Ts -> None
|
|
| Og -> None
|
|
in
|
|
match result x with
|
|
| Some y -> Some (Positive_float.of_float @@ Units.angstrom_to_bohr *. y )
|
|
| None -> None
|
|
|
|
|
|
let mass x =
|
|
let result = function
|
|
| X -> 0.
|
|
| H -> 1.0079
|
|
| He -> 4.002602
|
|
| Li -> 6.941
|
|
| Be -> 9.0121831
|
|
| B -> 10.81
|
|
| C -> 12.011
|
|
| N -> 14.0067
|
|
| O -> 15.9994
|
|
| F -> 18.998403163
|
|
| Ne -> 20.1797
|
|
| Na -> 22.98976928
|
|
| Mg -> 24.305
|
|
| Al -> 26.9815385
|
|
| Si -> 28.0855
|
|
| P -> 30.973761998
|
|
| S -> 32.06
|
|
| Cl -> 35.453
|
|
| Ar -> 39.948
|
|
| K -> 39.0983
|
|
| Ca -> 40.078
|
|
| Sc -> 44.955908
|
|
| Ti -> 47.867
|
|
| V -> 50.9415
|
|
| Cr -> 51.9961
|
|
| Mn -> 54.938044
|
|
| Fe -> 55.845
|
|
| Co -> 58.933194
|
|
| Ni -> 58.6934
|
|
| Cu -> 63.546
|
|
| Zn -> 65.38
|
|
| Ga -> 69.723
|
|
| Ge -> 72.630
|
|
| As -> 74.921595
|
|
| Se -> 78.971
|
|
| Br -> 79.904
|
|
| Kr -> 83.798
|
|
| Rb -> 85.4678
|
|
| Sr -> 87.62
|
|
| Y -> 88.90584
|
|
| Zr -> 91.224
|
|
| Nb -> 92.90637
|
|
| Mo -> 95.95
|
|
| Tc -> 98.
|
|
| Ru -> 101.07
|
|
| Rh -> 102.90550
|
|
| Pd -> 106.42
|
|
| Ag -> 107.8682
|
|
| Cd -> 112.414
|
|
| In -> 114.818
|
|
| Sn -> 118.710
|
|
| Sb -> 121.760
|
|
| Te -> 127.60
|
|
| I -> 126.90447
|
|
| Xe -> 131.293
|
|
| Cs -> 132.90545196
|
|
| Ba -> 137.327
|
|
| La -> 138.90547
|
|
| Ce -> 140.116
|
|
| Pr -> 140.90766
|
|
| Nd -> 144.242
|
|
| Pm -> 145.
|
|
| Sm -> 150.36
|
|
| Eu -> 151.964
|
|
| Gd -> 157.25
|
|
| Tb -> 158.92535
|
|
| Dy -> 162.500
|
|
| Ho -> 164.93033
|
|
| Er -> 167.259
|
|
| Tm -> 168.93422
|
|
| Yb -> 173.045
|
|
| Lu -> 174.9668
|
|
| Hf -> 178.49
|
|
| Ta -> 180.94788
|
|
| W -> 183.84
|
|
| Re -> 186.207
|
|
| Os -> 190.23
|
|
| Ir -> 192.217
|
|
| Pt -> 195.084
|
|
| Au -> 196.966569
|
|
| Hg -> 200.592
|
|
| Tl -> 204.38
|
|
| Pb -> 207.2
|
|
| Bi -> 208.98040
|
|
| Po -> 209.
|
|
| At -> 210.
|
|
| Rn -> 222.
|
|
| Fr -> 223.
|
|
| Ra -> 226.
|
|
| Ac -> 227.
|
|
| Th -> 232.0377
|
|
| Pa -> 231.03588
|
|
| U -> 238.02891
|
|
| Np -> 237.
|
|
| Pu -> 244.
|
|
| Am -> 243.
|
|
| Cm -> 247.
|
|
| Bk -> 247.
|
|
| Cf -> 251.
|
|
| Es -> 252.
|
|
| Fm -> 257.
|
|
| Md -> 258.
|
|
| No -> 259.
|
|
| Lr -> 262.
|
|
| Rf -> 267.
|
|
| Db -> 270.
|
|
| Sg -> 269.
|
|
| Bh -> 270.
|
|
| Hs -> 270.
|
|
| Mt -> 278.
|
|
| Ds -> 281.
|
|
| Rg -> 281.
|
|
| Cn -> 285.
|
|
| Nh -> 286.
|
|
| Fl -> 289.
|
|
| Mc -> 289.
|
|
| Lv -> 293.
|
|
| Ts -> 293.
|
|
| Og -> 294.
|
|
in
|
|
result x
|
|
|> Positive_float.of_float
|
|
|
|
|