diff --git a/ocaml/Element.ml b/ocaml/Element.ml index bd080f00..f0d4455d 100644 --- a/ocaml/Element.ml +++ b/ocaml/Element.ml @@ -3,74 +3,142 @@ open Qptypes exception ElementError of string -type t = -|X +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 - |Pt +|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" | "Dummy" -> 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 -| "Pt" | "Platinum" -> Pt +| "X" | "Dummy" -> 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")) @@ -130,7 +198,70 @@ let to_string = function | 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 @@ -171,26 +302,88 @@ let to_long_string = function | 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" -| Pt -> "Platinum" - +| 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 @@ -249,109 +442,235 @@ let to_charge c = | 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 -| 78 -> Pt +| 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.37 - | He -> 0.70 - | Li -> 1.23 - | Be -> 0.89 - | B -> 0.90 - | C -> 0.85 - | N -> 0.74 - | O -> 0.74 - | F -> 0.72 - | Ne -> 0.70 - | Na -> 1.00 - | Mg -> 1.36 - | Al -> 1.25 - | Si -> 1.17 - | P -> 1.10 - | S -> 1.10 - | Cl -> 0.99 - | Ar -> 0.70 + | 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.74 - | Sc -> 1.44 - | Ti -> 1.32 - | V -> 1.22 - | Cr -> 0.00 - | Mn -> 1.16 - | Fe -> 0.00 - | Co -> 1.15 - | Ni -> 1.17 - | Cu -> 1.25 - | Zn -> 1.25 - | Ga -> 1.20 - | Ge -> 1.21 - | As -> 1.16 - | Se -> 0.70 - | Br -> 1.24 - | Kr -> 1.91 + | 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 @@ -370,112 +689,241 @@ let covalent_radius x = | Te -> 1.38 | I -> 1.39 | Xe -> 1.40 - | Pt -> 1.30 + | 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 -> 0. - | H -> 1.20 - | He -> 1.70 - | Li -> 1.70 - | Be -> 1.70 - | B -> 1.70 - | C -> 1.70 - | N -> 1.55 - | O -> 1.52 - | F -> 1.47 - | Ne -> 1.70 - | Na -> 1.70 - | Mg -> 1.70 - | Al -> 1.94 - | Si -> 2.10 - | P -> 1.80 - | S -> 1.80 - | Cl -> 1.75 - | Ar -> 1.70 - | K -> 1.70 - | Ca -> 1.70 - | Sc -> 1.70 - | Ti -> 1.70 - | V -> 1.98 - | Cr -> 1.94 - | Mn -> 1.93 - | Fe -> 1.93 - | Co -> 1.92 - | Ni -> 1.70 - | Cu -> 1.70 - | Zn -> 1.70 - | Ga -> 2.02 - | Ge -> 1.70 - | As -> 1.96 - | Se -> 1.70 - | Br -> 2.10 - | Kr -> 1.70 - | Rb -> 3.03 - | Sr -> 2.49 - | Y -> 0. - | Zr -> 0. - | Nb -> 0. - | Mo -> 0. - | Tc -> 0. - | Ru -> 0. - | Rh -> 0. - | Pd -> 1.63 - | Ag -> 1.72 - | Cd -> 1.58 - | In -> 1.93 - | Sn -> 2.17 - | Sb -> 2.06 - | Te -> 2.06 - | I -> 1.98 - | Xe -> 2.16 - | Pt -> 1.75 + | 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 - Units.angstrom_to_bohr *. (result x) - |> Positive_float.of_float + 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.00260 - | Li -> 6.941 - | Be -> 9.01218 - | B -> 10.81 - | C -> 12.011 - | N -> 14.0067 - | O -> 15.9994 - | F -> 18.998403 - | Ne -> 20.179 - | Na -> 22.98977 - | Mg -> 24.305 - | Al -> 26.98154 - | Si -> 28.0855 - | P -> 30.97376 - | S -> 32.06 - | Cl -> 35.453 - | Ar -> 39.948 - | K -> 39.0983 - | Ca -> 40.08 - | Sc -> 44.9559 - | Ti -> 47.90 - | V -> 50.9415 - | Cr -> 51.996 - | Mn -> 54.9380 - | Fe -> 55.9332 - | Co -> 58.9332 - | Ni -> 58.70 - | Cu -> 63.546 - | Zn -> 65.38 - | Ga -> 69.72 - | Ge -> 72.59 - | As -> 74.9216 - | Se -> 78.96 - | Br -> 79.904 - | Kr -> 83.80 + | 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 @@ -494,7 +942,70 @@ let mass x = | 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 diff --git a/ocaml/Element.mli b/ocaml/Element.mli index fc6c679f..cd0f6bff 100644 --- a/ocaml/Element.mli +++ b/ocaml/Element.mli @@ -1,13 +1,18 @@ exception ElementError of string -type t = -|X +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 - |Pt +|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] (** String conversion functions *) @@ -19,5 +24,5 @@ val to_long_string : t -> string val to_charge : t -> Charge.t val of_charge : Charge.t -> t val covalent_radius : t -> Qptypes.Positive_float.t -val vdw_radius : t -> Qptypes.Positive_float.t +val vdw_radius : t -> Qptypes.Positive_float.t option val mass : t -> Qptypes.Positive_float.t