1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: atommap.cc
4 // Copyright (C) 2009 Toru Shiozaki
5 //
6 // Author: Toru Shiozaki <shiozaki@northwestern.edu>
7 // Maintainer: Shiozaki group
8 //
9 // This file is part of the BAGEL package.
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //
24
25
26 #include <src/util/atommap.h>
27 #include <src/util/constants.h>
28 #include <sstream>
29 #include <stdexcept>
30
31 using namespace std;
32 using namespace bagel;
33
AtomMap()34 AtomMap::AtomMap () {
35 atommap.emplace("q", 0);
36 atommap.emplace("h", 1);
37 atommap.emplace("he", 2);
38 atommap.emplace("li", 3);
39 atommap.emplace("be", 4);
40 atommap.emplace("b", 5);
41 atommap.emplace("c", 6);
42 atommap.emplace("n", 7);
43 atommap.emplace("o", 8);
44 atommap.emplace("f", 9);
45 atommap.emplace("ne", 10);
46 atommap.emplace("na", 11);
47 atommap.emplace("mg", 12);
48 atommap.emplace("al", 13);
49 atommap.emplace("si", 14);
50 atommap.emplace("p", 15);
51 atommap.emplace("s", 16);
52 atommap.emplace("cl", 17);
53 atommap.emplace("ar", 18);
54 atommap.emplace("k", 19);
55 atommap.emplace("ca", 20);
56 atommap.emplace("sc", 21);
57 atommap.emplace("ti", 22);
58 atommap.emplace("v", 23);
59 atommap.emplace("cr", 24);
60 atommap.emplace("mn", 25);
61 atommap.emplace("fe", 26);
62 atommap.emplace("co", 27);
63 atommap.emplace("ni", 28);
64 atommap.emplace("cu", 29);
65 atommap.emplace("zn", 30);
66 atommap.emplace("ga", 31);
67 atommap.emplace("ge", 32);
68 atommap.emplace("as", 33);
69 atommap.emplace("se", 34);
70 atommap.emplace("br", 35);
71 atommap.emplace("kr", 36);
72 atommap.emplace("rb", 37);
73 atommap.emplace("sr", 38);
74 atommap.emplace("y", 39);
75 atommap.emplace("zr", 40);
76 atommap.emplace("nb", 41);
77 atommap.emplace("mo", 42);
78 atommap.emplace("tc", 43);
79 atommap.emplace("ru", 44);
80 atommap.emplace("rh", 45);
81 atommap.emplace("pd", 46);
82 atommap.emplace("ag", 47);
83 atommap.emplace("cd", 48);
84 atommap.emplace("in", 49);
85 atommap.emplace("sn", 50);
86 atommap.emplace("sb", 51);
87 atommap.emplace("te", 52);
88 atommap.emplace("i", 53);
89 atommap.emplace("xe", 54);
90 atommap.emplace("cs", 55);
91 atommap.emplace("ba", 56);
92 atommap.emplace("la", 57);
93 atommap.emplace("ce", 58);
94 atommap.emplace("pr", 59);
95 atommap.emplace("nd", 60);
96 atommap.emplace("pm", 61);
97 atommap.emplace("sm", 62);
98 atommap.emplace("eu", 63);
99 atommap.emplace("gd", 64);
100 atommap.emplace("tb", 65);
101 atommap.emplace("dy", 66);
102 atommap.emplace("ho", 67);
103 atommap.emplace("er", 68);
104 atommap.emplace("tm", 69);
105 atommap.emplace("yb", 70);
106 atommap.emplace("lu", 71);
107 atommap.emplace("hf", 72);
108 atommap.emplace("ta", 73);
109 atommap.emplace("w", 74);
110 atommap.emplace("re", 75);
111 atommap.emplace("os", 76);
112 atommap.emplace("ir", 77);
113 atommap.emplace("pt", 78);
114 atommap.emplace("au", 79);
115 atommap.emplace("hg", 80);
116 atommap.emplace("tl", 81);
117 atommap.emplace("pb", 82);
118 atommap.emplace("bi", 83);
119 atommap.emplace("po", 84);
120 atommap.emplace("at", 85);
121 atommap.emplace("rn", 86);
122 atommap.emplace("fr", 87);
123 atommap.emplace("ra", 88);
124 atommap.emplace("ac", 89);
125 atommap.emplace("th", 90);
126 atommap.emplace("pa", 91);
127 atommap.emplace("u", 92);
128 atommap.emplace("np", 93);
129 atommap.emplace("pu", 94);
130 atommap.emplace("am", 95);
131 atommap.emplace("cm", 96);
132 atommap.emplace("bk", 97);
133 atommap.emplace("cf", 98);
134 atommap.emplace("es", 99);
135 atommap.emplace("fm", 100);
136 atommap.emplace("md", 101);
137 atommap.emplace("no", 102);
138 atommap.emplace("lr", 103);
139 atommap.emplace("rf", 104);
140 atommap.emplace("db", 105);
141 atommap.emplace("sg", 106);
142 atommap.emplace("bh", 107);
143 atommap.emplace("hs", 108);
144 atommap.emplace("mt", 109);
145 atommap.emplace("ds", 110);
146 atommap.emplace("rg", 111);
147 atommap.emplace("cn", 112);
148 atommap.emplace("uut", 113);
149 atommap.emplace("fl", 114);
150 atommap.emplace("uup", 115);
151 atommap.emplace("lv", 116);
152 atommap.emplace("uus", 117);
153 atommap.emplace("uuo", 118);
154
155 cov_radii.emplace("h", 0.31);
156 cov_radii.emplace("he", 0.28);
157 cov_radii.emplace("li", 1.28);
158 cov_radii.emplace("be", 0.96);
159 cov_radii.emplace("b", 0.84);
160 cov_radii.emplace("c", 0.76);
161 cov_radii.emplace("n", 0.71);
162 cov_radii.emplace("o", 0.66);
163 cov_radii.emplace("f", 0.57);
164 cov_radii.emplace("ne", 0.58);
165 cov_radii.emplace("na", 1.66);
166 cov_radii.emplace("mg", 1.41);
167 cov_radii.emplace("al", 1.21);
168 cov_radii.emplace("si", 1.11);
169 cov_radii.emplace("p", 1.07);
170 cov_radii.emplace("s", 1.05);
171 cov_radii.emplace("cl", 1.02);
172 cov_radii.emplace("ar", 1.06);
173 cov_radii.emplace("k", 2.03);
174 cov_radii.emplace("ca", 1.76);
175 cov_radii.emplace("sc", 1.70);
176 cov_radii.emplace("ti", 1.60);
177 cov_radii.emplace("v", 1.53);
178 cov_radii.emplace("cr", 1.39);
179 cov_radii.emplace("mn", 1.39);
180 cov_radii.emplace("fe", 1.32);
181 cov_radii.emplace("co", 1.26);
182 cov_radii.emplace("ni", 1.24);
183 cov_radii.emplace("cu", 1.32);
184 cov_radii.emplace("zn", 1.22);
185 cov_radii.emplace("ga", 1.22);
186 cov_radii.emplace("ge", 1.20);
187 cov_radii.emplace("as", 1.19);
188 cov_radii.emplace("se", 1.20);
189 cov_radii.emplace("br", 1.20);
190 cov_radii.emplace("kr", 1.16);
191 cov_radii.emplace("rb", 2.20);
192 cov_radii.emplace("sr", 1.95);
193 cov_radii.emplace("y", 1.90);
194 cov_radii.emplace("zr", 1.75);
195 cov_radii.emplace("nb", 1.64);
196 cov_radii.emplace("mo", 1.54);
197 cov_radii.emplace("tc", 1.47);
198 cov_radii.emplace("ru", 1.46);
199 cov_radii.emplace("rh", 1.42);
200 cov_radii.emplace("pd", 1.39);
201 cov_radii.emplace("ag", 1.45);
202 cov_radii.emplace("cd", 1.44);
203 cov_radii.emplace("in", 1.42);
204 cov_radii.emplace("sn", 1.39);
205 cov_radii.emplace("sb", 1.39);
206 cov_radii.emplace("te", 1.38);
207 cov_radii.emplace("i", 1.39);
208 cov_radii.emplace("xe", 1.40);
209 cov_radii.emplace("cs", 2.44);
210 cov_radii.emplace("ba", 2.15);
211 cov_radii.emplace("la", 2.07);
212 cov_radii.emplace("ce", 2.04);
213 cov_radii.emplace("pr", 2.03);
214 cov_radii.emplace("nd", 2.01);
215 cov_radii.emplace("pm", 1.99);
216 cov_radii.emplace("sm", 1.98);
217 cov_radii.emplace("eu", 1.98);
218 cov_radii.emplace("gd", 1.96);
219 cov_radii.emplace("tb", 1.94);
220 cov_radii.emplace("dy", 1.92);
221 cov_radii.emplace("ho", 1.92);
222 cov_radii.emplace("er", 1.89);
223 cov_radii.emplace("tm", 1.90);
224 cov_radii.emplace("yb", 1.87);
225 cov_radii.emplace("lu", 1.87);
226 cov_radii.emplace("hf", 1.75);
227 cov_radii.emplace("ta", 1.70);
228 cov_radii.emplace("w", 1.62);
229 cov_radii.emplace("re", 1.51);
230 cov_radii.emplace("os", 1.44);
231 cov_radii.emplace("ir", 1.41);
232 cov_radii.emplace("pt", 1.36);
233 cov_radii.emplace("au", 1.36);
234 cov_radii.emplace("hg", 1.32);
235 cov_radii.emplace("tl", 1.45);
236 cov_radii.emplace("pb", 1.46);
237 cov_radii.emplace("bi", 1.48);
238 cov_radii.emplace("po", 1.40);
239 cov_radii.emplace("at", 1.50);
240 cov_radii.emplace("rn", 1.50);
241 cov_radii.emplace("fr", 2.60);
242 cov_radii.emplace("ra", 2.21);
243 cov_radii.emplace("ac", 2.15);
244 cov_radii.emplace("th", 2.06);
245 cov_radii.emplace("pa", 2.00);
246 cov_radii.emplace("u", 1.96);
247 cov_radii.emplace("np", 1.90);
248 cov_radii.emplace("pu", 1.87);
249 cov_radii.emplace("am", 1.80);
250 cov_radii.emplace("cm", 1.69);
251
252 // atom sizes (Bragg-Slater radii)
253 bsradii.emplace("h", 0.25);
254 bsradii.emplace("he", 0.25);
255 bsradii.emplace("li", 1.45);
256 bsradii.emplace("be", 1.05);
257 bsradii.emplace("b", 0.85);
258 bsradii.emplace("c", 0.7);
259 bsradii.emplace("n", 0.65);
260 bsradii.emplace("o", 0.6);
261 bsradii.emplace("f", 0.5);
262 bsradii.emplace("ne", 0.45);
263 bsradii.emplace("na", 1.8);
264 bsradii.emplace("mg", 1.5);
265 bsradii.emplace("al", 1.25);
266 bsradii.emplace("si", 1.1);
267 bsradii.emplace("p", 1.0);
268 bsradii.emplace("s", 1.0);
269 bsradii.emplace("cl", 1.0);
270 bsradii.emplace("ar", 1.0);
271 bsradii.emplace("k", 2.2);
272 bsradii.emplace("ca", 1.8);
273 bsradii.emplace("sc", 1.6);
274 bsradii.emplace("ti", 1.4);
275 bsradii.emplace("v", 1.35);
276 bsradii.emplace("cr", 1.4);
277 bsradii.emplace("mn", 1.4);
278 bsradii.emplace("fe", 1.4);
279 bsradii.emplace("co", 1.35);
280 bsradii.emplace("ni", 1.35);
281 bsradii.emplace("cu", 1.35);
282 bsradii.emplace("zn", 1.35);
283 bsradii.emplace("ga", 1.3);
284 bsradii.emplace("ge", 1.25);
285 bsradii.emplace("as", 1.15);
286 bsradii.emplace("se", 1.15);
287 bsradii.emplace("br", 1.15);
288 bsradii.emplace("kr", 1.15);
289 bsradii.emplace("rb", 2.35);
290 bsradii.emplace("sr", 2.0);
291 bsradii.emplace("y", 1.8);
292 bsradii.emplace("zr", 1.55);
293 bsradii.emplace("nb", 1.45);
294 bsradii.emplace("mo", 1.45);
295 bsradii.emplace("tc", 1.35);
296 bsradii.emplace("ru", 1.3);
297 bsradii.emplace("rh", 1.35);
298 bsradii.emplace("pd", 1.4);
299 bsradii.emplace("ag", 1.6);
300 bsradii.emplace("cd", 1.55);
301 bsradii.emplace("in", 1.55);
302 bsradii.emplace("sn", 1.45);
303 bsradii.emplace("sb", 1.45);
304 bsradii.emplace("te", 1.4);
305 bsradii.emplace("i", 1.4);
306 bsradii.emplace("xe", 1.4);
307 bsradii.emplace("cs", 2.6);
308 bsradii.emplace("ba", 2.15);
309 bsradii.emplace("la", 1.95);
310 bsradii.emplace("ce", 1.85);
311 bsradii.emplace("pr", 1.85);
312 bsradii.emplace("nd", 1.85);
313 bsradii.emplace("pm", 1.85);
314 bsradii.emplace("sm", 1.85);
315 bsradii.emplace("eu", 1.85);
316 bsradii.emplace("gd", 1.8);
317 bsradii.emplace("tb", 1.75);
318 bsradii.emplace("dy", 1.75);
319 bsradii.emplace("ho", 1.75);
320 bsradii.emplace("er", 1.75);
321 bsradii.emplace("tm", 1.75);
322 bsradii.emplace("yb", 1.75);
323 bsradii.emplace("lu", 1.75);
324 bsradii.emplace("hf", 1.55);
325 bsradii.emplace("ta", 1.45);
326 bsradii.emplace("w", 1.35);
327 bsradii.emplace("re", 1.35);
328 bsradii.emplace("os", 1.3);
329 bsradii.emplace("ir", 1.35);
330 bsradii.emplace("pt", 1.35);
331 bsradii.emplace("au", 1.35);
332 bsradii.emplace("hg", 1.5);
333 bsradii.emplace("tl", 1.9);
334 bsradii.emplace("pb", 1.8);
335 bsradii.emplace("bi", 1.6);
336 bsradii.emplace("po", 1.9);
337 bsradii.emplace("at", 1.9);
338 bsradii.emplace("rn", 1.9);
339 bsradii.emplace("fr", 2.85);
340 bsradii.emplace("ra", 2.15);
341 bsradii.emplace("ac", 1.95);
342 bsradii.emplace("th", 1.8);
343 bsradii.emplace("pa", 1.8);
344 bsradii.emplace("u", 1.75);
345 bsradii.emplace("np", 1.75);
346 bsradii.emplace("pu", 1.75);
347 bsradii.emplace("am", 1.75);
348 bsradii.emplace("cm", 1.75);
349 bsradii.emplace("bk", 1.75);
350 bsradii.emplace("cf", 1.75);
351 bsradii.emplace("es", 1.75);
352 bsradii.emplace("fm", 1.75);
353 bsradii.emplace("md", 1.75);
354 bsradii.emplace("no", 1.75);
355 bsradii.emplace("lr", 1.75);
356 #if 0
357 bsradii.emplace("rf", 104);
358 bsradii.emplace("db", 105);
359 bsradii.emplace("sg", 106);
360 bsradii.emplace("bh", 107);
361 bsradii.emplace("hs", 108);
362 bsradii.emplace("mt", 109);
363 bsradii.emplace("ds", 110);
364 bsradii.emplace("rg", 111);
365 bsradii.emplace("cn", 112);
366 bsradii.emplace("uut", 113);
367 bsradii.emplace("fl", 114);
368 bsradii.emplace("uup", 115);
369 bsradii.emplace("lv", 116);
370 bsradii.emplace("uus", 117);
371 bsradii.emplace("uuo", 118);
372 #endif
373
374 // finite nuclear exponents, from L. Visscher and K. G. Dyall, At. Data Nucl. Data Tables 67, 207 (1997)
375 nuclear_exponents.emplace("q", 0.0000000000E+00);
376 nuclear_exponents.emplace("h", 2.1248239171E+09);
377 nuclear_exponents.emplace("he", 1.1671538870E+09);
378 nuclear_exponents.emplace("li", 8.9266848806E+08);
379 nuclear_exponents.emplace("be", 7.8788802914E+08);
380 nuclear_exponents.emplace("b", 7.1178709563E+08);
381 nuclear_exponents.emplace("c", 6.8077502929E+08);
382 nuclear_exponents.emplace("n", 6.2865615725E+08);
383 nuclear_exponents.emplace("o", 5.8631436655E+08);
384 nuclear_exponents.emplace("f", 5.3546911034E+08);
385 nuclear_exponents.emplace("ne", 5.2105715255E+08);
386 nuclear_exponents.emplace("na", 4.8349721509E+08);
387 nuclear_exponents.emplace("mg", 4.7254270882E+08);
388 nuclear_exponents.emplace("al", 4.4335984491E+08);
389 nuclear_exponents.emplace("si", 4.3467748823E+08);
390 nuclear_exponents.emplace("p", 4.1117553148E+08);
391 nuclear_exponents.emplace("s", 4.0407992047E+08);
392 nuclear_exponents.emplace("cl", 3.8463852873E+08);
393 nuclear_exponents.emplace("ar", 3.5722217300E+08);
394 nuclear_exponents.emplace("k", 3.6228128110E+08);
395 nuclear_exponents.emplace("ca", 3.5722217300E+08);
396 nuclear_exponents.emplace("sc", 3.3451324570E+08);
397 nuclear_exponents.emplace("ti", 3.2263108827E+08);
398 nuclear_exponents.emplace("v", 3.1181925878E+08);
399 nuclear_exponents.emplace("cr", 3.0842641793E+08);
400 nuclear_exponents.emplace("mn", 2.9881373610E+08);
401 nuclear_exponents.emplace("fe", 2.9578406371E+08);
402 nuclear_exponents.emplace("co", 2.8716667270E+08);
403 nuclear_exponents.emplace("ni", 2.8996391416E+08);
404 nuclear_exponents.emplace("cu", 2.7665979354E+08);
405 nuclear_exponents.emplace("zn", 2.7419021043E+08);
406 nuclear_exponents.emplace("ga", 2.6267002737E+08);
407 nuclear_exponents.emplace("ge", 2.5235613399E+08);
408 nuclear_exponents.emplace("as", 2.5042024280E+08);
409 nuclear_exponents.emplace("se", 2.4130163719E+08);
410 nuclear_exponents.emplace("br", 2.4305454351E+08);
411 nuclear_exponents.emplace("kr", 2.3461213272E+08);
412 nuclear_exponents.emplace("rb", 2.3301551109E+08);
413 nuclear_exponents.emplace("sr", 2.2839354730E+08);
414 nuclear_exponents.emplace("y", 2.2690621893E+08);
415 nuclear_exponents.emplace("zr", 2.2544431039E+08);
416 nuclear_exponents.emplace("nb", 2.2120420724E+08);
417 nuclear_exponents.emplace("mo", 2.1458511597E+08);
418 nuclear_exponents.emplace("tc", 2.1458511597E+08);
419 nuclear_exponents.emplace("ru", 2.0965270287E+08);
420 nuclear_exponents.emplace("rh", 2.0846586999E+08);
421 nuclear_exponents.emplace("pd", 2.0500935221E+08);
422 nuclear_exponents.emplace("ag", 2.0389047621E+08);
423 nuclear_exponents.emplace("cd", 1.9648639618E+08);
424 nuclear_exponents.emplace("in", 1.9548577691E+08);
425 nuclear_exponents.emplace("sn", 1.9067718154E+08);
426 nuclear_exponents.emplace("sb", 1.8975246242E+08);
427 nuclear_exponents.emplace("te", 1.8193056289E+08);
428 nuclear_exponents.emplace("i", 1.8444240538E+08);
429 nuclear_exponents.emplace("xe", 1.8030529331E+08);
430 nuclear_exponents.emplace("cs", 1.7950688281E+08);
431 nuclear_exponents.emplace("ba", 1.7565009043E+08);
432 nuclear_exponents.emplace("la", 1.7490463170E+08);
433 nuclear_exponents.emplace("ce", 1.7416744147E+08);
434 nuclear_exponents.emplace("pr", 1.7343837120E+08);
435 nuclear_exponents.emplace("nd", 1.7129844956E+08);
436 nuclear_exponents.emplace("pm", 1.7060044589E+08);
437 nuclear_exponents.emplace("sm", 1.6591550422E+08);
438 nuclear_exponents.emplace("eu", 1.6527352089E+08);
439 nuclear_exponents.emplace("gd", 1.6215880671E+08);
440 nuclear_exponents.emplace("tb", 1.6155419421E+08);
441 nuclear_exponents.emplace("dy", 1.5977529080E+08);
442 nuclear_exponents.emplace("ho", 1.5977529080E+08);
443 nuclear_exponents.emplace("er", 1.5636673634E+08);
444 nuclear_exponents.emplace("tm", 1.5581702004E+08);
445 nuclear_exponents.emplace("yb", 1.5314257850E+08);
446 nuclear_exponents.emplace("lu", 1.5262201512E+08);
447 nuclear_exponents.emplace("hf", 1.5008710340E+08);
448 nuclear_exponents.emplace("ta", 1.4959325643E+08);
449 nuclear_exponents.emplace("w", 1.4813689532E+08);
450 nuclear_exponents.emplace("re", 1.4671710337E+08);
451 nuclear_exponents.emplace("os", 1.4442808782E+08);
452 nuclear_exponents.emplace("ir", 1.4398142103E+08);
453 nuclear_exponents.emplace("pt", 1.4309883584E+08);
454 nuclear_exponents.emplace("au", 1.4223027307E+08);
455 nuclear_exponents.emplace("hg", 1.4011788914E+08);
456 nuclear_exponents.emplace("tl", 1.3888925203E+08);
457 nuclear_exponents.emplace("pb", 1.3768840081E+08);
458 nuclear_exponents.emplace("bi", 1.3729411599E+08);
459 nuclear_exponents.emplace("po", 1.3729411599E+08);
460 nuclear_exponents.emplace("at", 1.3690277000E+08);
461 nuclear_exponents.emplace("rn", 1.3242350205E+08);
462 nuclear_exponents.emplace("fr", 1.3206733609E+08);
463 nuclear_exponents.emplace("ra", 1.3101367628E+08);
464 nuclear_exponents.emplace("ac", 1.3066730974E+08);
465 nuclear_exponents.emplace("th", 1.2897067480E+08);
466 nuclear_exponents.emplace("pa", 1.2930539512E+08);
467 nuclear_exponents.emplace("u", 1.2700881714E+08);
468 nuclear_exponents.emplace("np", 1.2733038109E+08);
469 nuclear_exponents.emplace("pu", 1.2512299012E+08);
470 nuclear_exponents.emplace("am", 1.2543221826E+08);
471 nuclear_exponents.emplace("cm", 1.2420711085E+08);
472 nuclear_exponents.emplace("bk", 1.2420711085E+08);
473 nuclear_exponents.emplace("cf", 1.2301273547E+08);
474 nuclear_exponents.emplace("es", 1.2271879740E+08);
475 nuclear_exponents.emplace("fm", 1.2127611477E+08);
476 nuclear_exponents.emplace("md", 1.2099285491E+08);
477 nuclear_exponents.emplace("no", 1.2071131346E+08);
478 nuclear_exponents.emplace("lr", 1.1987683191E+08);
479 nuclear_exponents.emplace("db", 1.2015331850E+08);
480 nuclear_exponents.emplace("jl", 1.1987683191E+08);
481 nuclear_exponents.emplace("rf", 1.1960199758E+08);
482 nuclear_exponents.emplace("bh", 1.1987683191E+08);
483 nuclear_exponents.emplace("hn", 1.1905722195E+08);
484 nuclear_exponents.emplace("mt", 1.1878724932E+08);
485
486 //Atomic masses taken from CRC Handbook of Chemistry and Physics
487 //average isotope mass
488 averaged_masses.emplace("q", 0.0);
489 averaged_masses.emplace("h", 1.00794);
490 averaged_masses.emplace("he", 4.00260);
491 averaged_masses.emplace("li", 6.941);
492 averaged_masses.emplace("be", 9.01218);
493 averaged_masses.emplace("b", 10.81);
494 averaged_masses.emplace("c", 12.011);
495 averaged_masses.emplace("n", 14.0067);
496 averaged_masses.emplace("o", 15.9994);
497 averaged_masses.emplace("f", 18.998403);
498 averaged_masses.emplace("ne", 20.179);
499 averaged_masses.emplace("na", 22.989877);
500 averaged_masses.emplace("mg", 24.305);
501 averaged_masses.emplace("al", 26.98154);
502 averaged_masses.emplace("si", 28.0955);
503 averaged_masses.emplace("p", 30.97376);
504 averaged_masses.emplace("s", 32.06);
505 averaged_masses.emplace("cl", 35.453);
506 averaged_masses.emplace("ar", 39.948);
507 averaged_masses.emplace("k", 39.0983);
508 averaged_masses.emplace("ca", 40.08);
509 averaged_masses.emplace("sc", 44.9559);
510 averaged_masses.emplace("ti", 47.88);
511 averaged_masses.emplace("v", 50.9415);
512 averaged_masses.emplace("cr", 51.996);
513 averaged_masses.emplace("mn", 54.9380);
514 averaged_masses.emplace("fe", 55.847);
515 averaged_masses.emplace("co", 58.9332);
516 averaged_masses.emplace("ni", 58.69);
517 averaged_masses.emplace("cu", 63.546);
518 averaged_masses.emplace("zn", 65.39);
519 averaged_masses.emplace("ga", 69.72);
520 averaged_masses.emplace("ge", 72.59);
521 averaged_masses.emplace("as", 74.9216);
522 averaged_masses.emplace("se", 78.96);
523 averaged_masses.emplace("br", 79.904);
524 averaged_masses.emplace("kr", 83.80);
525 averaged_masses.emplace("rb", 85.4678);
526 averaged_masses.emplace("sr", 87.62);
527 averaged_masses.emplace("y", 88.9059);
528 averaged_masses.emplace("zr", 91.22);
529 averaged_masses.emplace("nb", 92.9064);
530 averaged_masses.emplace("mo", 95.94);
531 averaged_masses.emplace("tc", 98.0);
532 averaged_masses.emplace("ru", 101.07);
533 averaged_masses.emplace("rh", 102.9055);
534 averaged_masses.emplace("pd", 106.42);
535 averaged_masses.emplace("ag", 107.8682);
536 averaged_masses.emplace("cd", 112.41);
537 averaged_masses.emplace("in", 114.82);
538 averaged_masses.emplace("sn", 118.69);
539 averaged_masses.emplace("sb", 121.75);
540 averaged_masses.emplace("te", 127.60);
541 averaged_masses.emplace("i", 126.9054);
542 averaged_masses.emplace("xe", 131.29);
543 averaged_masses.emplace("cs", 132.9054);
544 averaged_masses.emplace("ba", 137.33);
545 averaged_masses.emplace("la", 138.9055);
546 averaged_masses.emplace("ce", 140.12);
547 averaged_masses.emplace("pr", 140.9077);
548 averaged_masses.emplace("nd", 144.24);
549 averaged_masses.emplace("pm", 145.0);
550 averaged_masses.emplace("sm", 150.36);
551 averaged_masses.emplace("eu", 151.96);
552 averaged_masses.emplace("gd", 157.25);
553 averaged_masses.emplace("tb", 158.9254);
554 averaged_masses.emplace("dy", 162.5);
555 averaged_masses.emplace("ho", 164.9304);
556 averaged_masses.emplace("er", 167.26);
557 averaged_masses.emplace("tm", 168.9342);
558 averaged_masses.emplace("yb", 173.04);
559 averaged_masses.emplace("lu", 174.976);
560 averaged_masses.emplace("hf", 178.49);
561 averaged_masses.emplace("ta", 180.9479);
562 averaged_masses.emplace("w", 183.85);
563 averaged_masses.emplace("re", 186.207);
564 averaged_masses.emplace("os", 190.2);
565 averaged_masses.emplace("ir", 192.22);
566 averaged_masses.emplace("pt", 195.08);
567 averaged_masses.emplace("au", 196.9665);
568 averaged_masses.emplace("hg", 200.59);
569 averaged_masses.emplace("tl", 204.383);
570 averaged_masses.emplace("pb", 207.2);
571 averaged_masses.emplace("bi", 208.9804);
572 averaged_masses.emplace("po", 208.9825);
573 averaged_masses.emplace("at", 210.9875);
574 averaged_masses.emplace("rn", 222.0175);
575 averaged_masses.emplace("fr", 223.0198);
576 averaged_masses.emplace("ra", 226.0254);
577 averaged_masses.emplace("ac", 227.0278);
578 averaged_masses.emplace("th", 232.0381);
579 averaged_masses.emplace("pa", 231.0359);
580 averaged_masses.emplace("u", 238.0289);
581 averaged_masses.emplace("np", 237.0482);
582 averaged_masses.emplace("pu", 244.0);
583 averaged_masses.emplace("am", 243.0);
584 averaged_masses.emplace("cm", 247.0);
585
586 angmap.emplace("s", 0);
587 angmap.emplace("p", 1);
588 angmap.emplace("d", 2);
589 angmap.emplace("f", 3);
590 angmap.emplace("g", 4);
591 angmap.emplace("h", 5);
592 angmap.emplace("i", 6);
593 angmap.emplace("j", 7);
594 // Since they are not implemented yet
595 //angmap.emplace("k", 8);
596 //angmap.emplace("l", 9);
597
598 nclosed.emplace("h", make_tuple(0,0,0,0));
599 nclosed.emplace("he", make_tuple(2,0,0,0));
600 nclosed.emplace("li", make_tuple(2,0,0,0));
601 nclosed.emplace("be", make_tuple(4,0,0,0));
602 nclosed.emplace("b", make_tuple(4,0,0,0));
603 nclosed.emplace("c", make_tuple(4,0,0,0));
604 nclosed.emplace("n", make_tuple(4,0,0,0));
605 nclosed.emplace("o", make_tuple(4,0,0,0));
606 nclosed.emplace("f", make_tuple(4,0,0,0));
607 nclosed.emplace("ne", make_tuple(4,6,0,0));
608 nclosed.emplace("na", make_tuple(4,6,0,0));
609 nclosed.emplace("mg", make_tuple(6,6,0,0));
610 nclosed.emplace("al", make_tuple(6,6,0,0));
611 nclosed.emplace("si", make_tuple(6,6,0,0));
612 nclosed.emplace("p", make_tuple(6,6,0,0));
613 nclosed.emplace("s", make_tuple(6,6,0,0));
614 nclosed.emplace("cl", make_tuple(6,6,0,0));
615 nclosed.emplace("ar", make_tuple(6,12,0,0));
616 nclosed.emplace("k", make_tuple(6,12,0,0));
617 nclosed.emplace("ca", make_tuple(8,12,0,0));
618 nclosed.emplace("sc", make_tuple(8,12,0,0));
619 nclosed.emplace("ti", make_tuple(8,12,0,0));
620 nclosed.emplace("v", make_tuple(8,12,0,0));
621 nclosed.emplace("cr", make_tuple(8,12,0,0));
622 nclosed.emplace("mn", make_tuple(8,12,0,0));
623 nclosed.emplace("fe", make_tuple(8,12,0,0));
624 nclosed.emplace("co", make_tuple(8,12,0,0));
625 nclosed.emplace("ni", make_tuple(8,12,0,0));
626 nclosed.emplace("cu", make_tuple(8,12,0,0));
627 nclosed.emplace("zn", make_tuple(8,12,10,0));
628 nclosed.emplace("ga", make_tuple(8,12,10,0));
629 nclosed.emplace("ge", make_tuple(8,12,10,0));
630 nclosed.emplace("as", make_tuple(8,12,10,0));
631 nclosed.emplace("se", make_tuple(8,12,10,0));
632 nclosed.emplace("br", make_tuple(8,12,10,0));
633 nclosed.emplace("kr", make_tuple(8,18,10,0));
634 nclosed.emplace("rb", make_tuple(8,18,10,0));
635 nclosed.emplace("sr", make_tuple(10,18,10,0));
636 nclosed.emplace("y", make_tuple(10,18,10,0));
637 nclosed.emplace("zr", make_tuple(10,18,10,0));
638 nclosed.emplace("nb", make_tuple(10,18,10,0));
639 nclosed.emplace("mo", make_tuple(10,18,10,0));
640 nclosed.emplace("tc", make_tuple(10,18,10,0));
641 nclosed.emplace("ru", make_tuple(10,18,10,0));
642 nclosed.emplace("rh", make_tuple(10,18,10,0));
643 nclosed.emplace("pd", make_tuple(10,18,10,0));
644 nclosed.emplace("ag", make_tuple(10,18,10,0));
645 nclosed.emplace("cd", make_tuple(10,18,20,0));
646 nclosed.emplace("in", make_tuple(10,18,20,0));
647 nclosed.emplace("sn", make_tuple(10,18,20,0));
648 nclosed.emplace("sb", make_tuple(10,18,20,0));
649 nclosed.emplace("te", make_tuple(10,18,20,0));
650 nclosed.emplace("i", make_tuple(10,18,20,0));
651 nclosed.emplace("xe", make_tuple(10,24,20,0));
652 nclosed.emplace("cs", make_tuple(10,24,20,0));
653 nclosed.emplace("ba", make_tuple(12,24,20,0));
654 nclosed.emplace("la", make_tuple(12,24,20,0));
655 nclosed.emplace("ce", make_tuple(12,24,20,0));
656 nclosed.emplace("pr", make_tuple(12,24,20,0));
657 nclosed.emplace("nd", make_tuple(12,24,20,0));
658 nclosed.emplace("pm", make_tuple(12,24,20,0));
659 nclosed.emplace("sm", make_tuple(12,24,20,0));
660 nclosed.emplace("eu", make_tuple(12,24,20,0));
661 nclosed.emplace("gd", make_tuple(12,24,20,0));
662 nclosed.emplace("tb", make_tuple(12,24,20,0));
663 nclosed.emplace("dy", make_tuple(12,24,20,0));
664 nclosed.emplace("ho", make_tuple(12,24,20,0));
665 nclosed.emplace("er", make_tuple(12,24,20,0));
666 nclosed.emplace("tm", make_tuple(12,24,20,0));
667 nclosed.emplace("yb", make_tuple(12,24,20,14));
668 nclosed.emplace("lu", make_tuple(12,24,20,14));
669 nclosed.emplace("hf", make_tuple(12,24,20,14));
670 nclosed.emplace("ta", make_tuple(12,24,20,14));
671 nclosed.emplace("w", make_tuple(12,24,20,14));
672 nclosed.emplace("re", make_tuple(12,24,20,14));
673 nclosed.emplace("os", make_tuple(12,24,20,14));
674 nclosed.emplace("ir", make_tuple(12,24,20,14));
675 nclosed.emplace("pt", make_tuple(10,24,20,14));
676 nclosed.emplace("au", make_tuple(10,24,30,14));
677 nclosed.emplace("hg", make_tuple(12,24,30,14));
678 nclosed.emplace("tl", make_tuple(12,24,30,14));
679 nclosed.emplace("pb", make_tuple(12,24,30,14));
680 nclosed.emplace("bi", make_tuple(12,24,30,14));
681 nclosed.emplace("po", make_tuple(12,24,30,14));
682 nclosed.emplace("at", make_tuple(12,24,30,14));
683 nclosed.emplace("rn", make_tuple(12,30,30,14));
684 nclosed.emplace("fr", make_tuple(12,30,30,14));
685 nclosed.emplace("ra", make_tuple(14,30,30,14));
686 nclosed.emplace("ac", make_tuple(14,30,30,14));
687 nclosed.emplace("th", make_tuple(14,30,30,14));
688 nclosed.emplace("pa", make_tuple(14,30,30,14));
689 nclosed.emplace("u", make_tuple(14,30,30,14));
690 nclosed.emplace("np", make_tuple(14,30,30,14));
691 nclosed.emplace("pu", make_tuple(14,30,30,14));
692 nclosed.emplace("am", make_tuple(14,30,30,14));
693 nclosed.emplace("cm", make_tuple(14,30,30,14));
694 nclosed.emplace("bk", make_tuple(14,30,30,14));
695 nclosed.emplace("cf", make_tuple(14,30,30,14));
696 nclosed.emplace("es", make_tuple(14,30,30,14));
697 nclosed.emplace("fm", make_tuple(14,30,30,14));
698 nclosed.emplace("md", make_tuple(14,30,30,14));
699 nclosed.emplace("no", make_tuple(14,30,30,14));
700 nclosed.emplace("lr", make_tuple(14,30,30,28));
701 nclosed.emplace("rf", make_tuple(14,30,30,28));
702 nclosed.emplace("db", make_tuple(14,30,30,28));
703 nclosed.emplace("sg", make_tuple(14,30,30,28));
704 nclosed.emplace("bh", make_tuple(14,30,30,28));
705 nclosed.emplace("hs", make_tuple(14,30,30,28));
706 nclosed.emplace("mt", make_tuple(14,30,30,28));
707 nclosed.emplace("ds", make_tuple(14,30,30,28));
708 nclosed.emplace("rg", make_tuple(14,30,30,28));
709 nclosed.emplace("cn", make_tuple(14,30,40,28));
710 nclosed.emplace("uut", make_tuple(14,30,40,28));
711 nclosed.emplace("fl", make_tuple(14,30,40,28));
712 nclosed.emplace("uup", make_tuple(14,30,40,28));
713 nclosed.emplace("lv", make_tuple(14,30,40,28));
714 nclosed.emplace("uus", make_tuple(14,30,40,28));
715 nclosed.emplace("uuo", make_tuple(14,36,40,28));
716
717 nopen.emplace("h", make_tuple(1,0,0,0));
718 nopen.emplace("he", make_tuple(0,0,0,0));
719 nopen.emplace("li", make_tuple(1,0,0,0));
720 nopen.emplace("be", make_tuple(0,0,0,0));
721 nopen.emplace("b", make_tuple(0,1,0,0));
722 nopen.emplace("c", make_tuple(0,2,0,0));
723 nopen.emplace("n", make_tuple(0,3,0,0));
724 nopen.emplace("o", make_tuple(0,4,0,0));
725 nopen.emplace("f", make_tuple(0,5,0,0));
726 nopen.emplace("ne", make_tuple(0,0,0,0));
727 nopen.emplace("na", make_tuple(1,0,0,0));
728 nopen.emplace("mg", make_tuple(0,0,0,0));
729 nopen.emplace("al", make_tuple(0,1,0,0));
730 nopen.emplace("si", make_tuple(0,2,0,0));
731 nopen.emplace("p", make_tuple(0,3,0,0));
732 nopen.emplace("s", make_tuple(0,4,0,0));
733 nopen.emplace("cl", make_tuple(0,5,0,0));
734 nopen.emplace("ar", make_tuple(0,0,0,0));
735 nopen.emplace("k", make_tuple(1,0,0,0));
736 nopen.emplace("ca", make_tuple(0,0,0,0));
737 nopen.emplace("sc", make_tuple(0,0,1,0));
738 nopen.emplace("ti", make_tuple(0,0,2,0));
739 nopen.emplace("v", make_tuple(0,0,3,0));
740 nopen.emplace("cr", make_tuple(0,0,4,0));
741 nopen.emplace("mn", make_tuple(0,0,5,0));
742 nopen.emplace("fe", make_tuple(0,0,6,0));
743 nopen.emplace("co", make_tuple(0,0,7,0));
744 nopen.emplace("ni", make_tuple(0,0,8,0));
745 nopen.emplace("cu", make_tuple(0,0,9,0));
746 nopen.emplace("zn", make_tuple(0,0,0,0));
747 nopen.emplace("ga", make_tuple(0,1,0,0));
748 nopen.emplace("ge", make_tuple(0,2,0,0));
749 nopen.emplace("as", make_tuple(0,3,0,0));
750 nopen.emplace("se", make_tuple(0,4,0,0));
751 nopen.emplace("br", make_tuple(0,5,0,0));
752 nopen.emplace("kr", make_tuple(0,0,0,0));
753 nopen.emplace("rb", make_tuple(1,0,0,0));
754 nopen.emplace("sr", make_tuple(0,0,0,0));
755 nopen.emplace("y", make_tuple(0,0,1,0));
756 nopen.emplace("zr", make_tuple(0,0,2,0));
757 nopen.emplace("nb", make_tuple(0,0,3,0));
758 nopen.emplace("mo", make_tuple(0,0,4,0));
759 nopen.emplace("tc", make_tuple(0,0,5,0));
760 nopen.emplace("ru", make_tuple(0,0,6,0));
761 nopen.emplace("rh", make_tuple(0,0,7,0));
762 nopen.emplace("pd", make_tuple(0,0,8,0));
763 nopen.emplace("ag", make_tuple(0,0,9,0));
764 nopen.emplace("cd", make_tuple(0,0,0,0));
765 nopen.emplace("in", make_tuple(0,1,0,0));
766 nopen.emplace("sn", make_tuple(0,2,0,0));
767 nopen.emplace("sb", make_tuple(0,3,0,0));
768 nopen.emplace("te", make_tuple(0,4,0,0));
769 nopen.emplace("i", make_tuple(0,5,0,0));
770 nopen.emplace("xe", make_tuple(0,0,0,0));
771 nopen.emplace("cs", make_tuple(1,0,0,0));
772 nopen.emplace("ba", make_tuple(0,0,0,0));
773 nopen.emplace("la", make_tuple(0,0,1,0));
774 nopen.emplace("ce", make_tuple(0,0,1,1));
775 nopen.emplace("pr", make_tuple(0,0,0,3));
776 nopen.emplace("nd", make_tuple(0,0,0,4));
777 nopen.emplace("pm", make_tuple(0,0,0,5));
778 nopen.emplace("sm", make_tuple(0,0,0,6));
779 nopen.emplace("eu", make_tuple(0,0,0,7));
780 nopen.emplace("gd", make_tuple(0,0,1,7));
781 nopen.emplace("tb", make_tuple(0,0,0,9));
782 nopen.emplace("dy", make_tuple(0,0,0,10));
783 nopen.emplace("ho", make_tuple(0,0,0,11));
784 nopen.emplace("er", make_tuple(0,0,0,12));
785 nopen.emplace("tm", make_tuple(0,0,0,13));
786 nopen.emplace("yb", make_tuple(0,0,0,0));
787 nopen.emplace("lu", make_tuple(0,0,1,0));
788 nopen.emplace("hf", make_tuple(0,0,2,0));
789 nopen.emplace("ta", make_tuple(0,0,3,0));
790 nopen.emplace("w", make_tuple(0,0,4,0));
791 nopen.emplace("re", make_tuple(0,0,5,0));
792 nopen.emplace("os", make_tuple(0,0,6,0));
793 nopen.emplace("ir", make_tuple(0,0,7,0));
794 nopen.emplace("pt", make_tuple(1,0,9,0));
795 nopen.emplace("au", make_tuple(1,0,0,0));
796 nopen.emplace("hg", make_tuple(0,0,0,0));
797 nopen.emplace("tl", make_tuple(0,1,0,0));
798 nopen.emplace("pb", make_tuple(0,2,0,0));
799 nopen.emplace("bi", make_tuple(0,3,0,0));
800 nopen.emplace("po", make_tuple(0,4,0,0));
801 nopen.emplace("at", make_tuple(0,5,0,0));
802 nopen.emplace("rn", make_tuple(0,0,0,0));
803 nopen.emplace("fr", make_tuple(1,0,0,0));
804 nopen.emplace("ra", make_tuple(0,0,0,0));
805 nopen.emplace("ac", make_tuple(0,0,1,0));
806 nopen.emplace("th", make_tuple(0,0,2,0));
807 nopen.emplace("pa", make_tuple(0,0,1,2));
808 nopen.emplace("u", make_tuple(0,0,1,3));
809 nopen.emplace("np", make_tuple(0,0,1,4));
810 nopen.emplace("pu", make_tuple(0,0,0,6));
811 nopen.emplace("am", make_tuple(0,0,0,7));
812 nopen.emplace("cm", make_tuple(0,0,1,7));
813 nopen.emplace("bk", make_tuple(0,0,0,9));
814 nopen.emplace("cf", make_tuple(0,0,0,10));
815 nopen.emplace("es", make_tuple(0,0,0,11));
816 nopen.emplace("fm", make_tuple(0,0,0,12));
817 nopen.emplace("md", make_tuple(0,0,0,13));
818 nopen.emplace("no", make_tuple(0,0,0,0));
819 nopen.emplace("lr", make_tuple(0,1,0,0));
820 nopen.emplace("rf", make_tuple(0,0,2,0));
821 nopen.emplace("db", make_tuple(0,0,3,0));
822 nopen.emplace("sg", make_tuple(0,0,4,0));
823 nopen.emplace("bh", make_tuple(0,0,5,0));
824 nopen.emplace("hs", make_tuple(0,0,6,0));
825 nopen.emplace("mt", make_tuple(0,0,7,0));
826 nopen.emplace("ds", make_tuple(0,0,8,0));
827 nopen.emplace("rg", make_tuple(0,0,9,0));
828 nopen.emplace("cn", make_tuple(0,0,0,0));
829 nopen.emplace("uut", make_tuple(0,1,0,0));
830 nopen.emplace("fl", make_tuple(0,2,0,0));
831 nopen.emplace("uup", make_tuple(0,3,0,0));
832 nopen.emplace("lv", make_tuple(0,4,0,0));
833 nopen.emplace("uus", make_tuple(0,5,0,0));
834 nopen.emplace("uuo", make_tuple(0,0,0,0));
835
836 // P in the hyperfine coupling formula, copied from Takeshi's ORZ package
837 // which in turn originates from Orca's output according to Takeshi
838 // P = g_e * g_N * beta_e * beta_N :
839 // g_e = 2.000... (g factor of free electron)
840 // g_N = g factor of nucleus
841 // beta_e = electron magneton = alpha(fine structure constant) / 2.0
842 // beta_N = nuclear magneton
843 hfccp.emplace("h", 533.5514);
844 hfccp.emplace("he", 0.0000);
845 hfccp.emplace("li", 207.3726);
846 hfccp.emplace("be", 0.0000);
847 hfccp.emplace("b", 171.2143);
848 hfccp.emplace("c", 134.1900);
849 hfccp.emplace("n", 38.5677);
850 hfccp.emplace("o", -72.3588);
851 hfccp.emplace("f", 502.2244);
852 hfccp.emplace("ne", 0.0000);
853 hfccp.emplace("na", 141.2175);
854 hfccp.emplace("mg", 0.0000);
855 hfccp.emplace("al", 139.1361);
856 hfccp.emplace("si", 0.0000);
857 hfccp.emplace("p", 216.1834);
858 hfccp.emplace("s", 0.0000);
859 hfccp.emplace("cl", 0.0000);
860 hfccp.emplace("ar", 0.0000);
861 hfccp.emplace("k", 24.9301);
862 hfccp.emplace("ca", 0.0000);
863 hfccp.emplace("sc", 0.0000);
864 hfccp.emplace("ti", -30.1264);
865 hfccp.emplace("v", 140.2594);
866 hfccp.emplace("cr", -30.0605);
867 hfccp.emplace("mn", 132.0006);
868 hfccp.emplace("fe", 0.0000);
869 hfccp.emplace("co", 0.0000);
870 hfccp.emplace("ni", 0.0000);
871 hfccp.emplace("cu", 141.7533);
872 hfccp.emplace("zn", 33.4622);
873 hfccp.emplace("ga", 0.0000);
874 hfccp.emplace("ge", 0.0000);
875 hfccp.emplace("as", 0.0000);
876 hfccp.emplace("se", 0.0000);
877 hfccp.emplace("br", 0.0000);
878 hfccp.emplace("kr", 0.0000);
879 //hfccp.emplace("rb", 0.0000);
880 //hfccp.emplace("sr", 0.0000);
881 //hfccp.emplace("y", 0.0000);
882 //hfccp.emplace("zr", 0.0000);
883 //hfccp.emplace("nb", 0.0000);
884 //hfccp.emplace("mo", 0.0000);
885 //hfccp.emplace("tc", 0.0000);
886 //hfccp.emplace("ru", 0.0000);
887 hfccp.emplace("rh", -16.8881);
888 hfccp.emplace("pd", -24.4534);
889 hfccp.emplace("ag", -21.7071);
890 hfccp.emplace("cd", -113.7112);
891 //hfccp.emplace("in", 0.0000);
892 //hfccp.emplace("sn", 0.0000);
893 //hfccp.emplace("sb", 0.0000);
894 //hfccp.emplace("te", 0.0000);
895 //hfccp.emplace("i", 0.0000);
896 //hfccp.emplace("xe", 0.0000);
897 //hfccp.emplace("cs", 0.0000);
898 //hfccp.emplace("ba", 0.0000);
899 //hfccp.emplace("la", 0.0000);
900 //hfccp.emplace("ce", 0.0000);
901 //hfccp.emplace("pr", 0.0000);
902 //hfccp.emplace("nd", 0.0000);
903 //hfccp.emplace("pm", 0.0000);
904 //hfccp.emplace("sm", 0.0000);
905 //hfccp.emplace("eu", 0.0000);
906 //hfccp.emplace("gd", 0.0000);
907 //hfccp.emplace("tb", 0.0000);
908 //hfccp.emplace("dy", 0.0000);
909 //hfccp.emplace("ho", 0.0000);
910 //hfccp.emplace("er", 0.0000);
911 //hfccp.emplace("tm", 0.0000);
912 //hfccp.emplace("yb", 0.0000);
913 //hfccp.emplace("lu", 0.0000);
914 //hfccp.emplace("hf", 0.0000);
915 //hfccp.emplace("ta", 0.0000);
916 //hfccp.emplace("w", 0.0000);
917 //hfccp.emplace("re", 0.0000);
918 //hfccp.emplace("os", 0.0000);
919 //hfccp.emplace("ir", 0.0000);
920 //hfccp.emplace("pt", 0.0000);
921 hfccp.emplace("au", 9.3580);
922 //hfccp.emplace("hg", 0.0000);
923 //hfccp.emplace("tl", 0.0000);
924 //hfccp.emplace("pb", 0.0000);
925 //hfccp.emplace("bi", 0.0000);
926 //hfccp.emplace("po", 0.0000);
927 //hfccp.emplace("at", 0.0000);
928 //hfccp.emplace("rn", 0.0000);
929 //hfccp.emplace("fr", 0.0000);
930 //hfccp.emplace("ra", 0.0000);
931 //hfccp.emplace("ac", 0.0000);
932 //hfccp.emplace("th", 0.0000);
933 //hfccp.emplace("pa", 0.0000);
934 //hfccp.emplace("u", 0.0000);
935 //hfccp.emplace("np", 0.0000);
936 //hfccp.emplace("pu", 0.0000);
937 //hfccp.emplace("am", 0.0000);
938 //hfccp.emplace("cm", 0.0000);
939 //hfccp.emplace("bk", 0.0000);
940 //hfccp.emplace("cf", 0.0000);
941 //hfccp.emplace("es", 0.0000);
942 //hfccp.emplace("fm", 0.0000);
943 //hfccp.emplace("md", 0.0000);
944 //hfccp.emplace("no", 0.0000);
945 //hfccp.emplace("lr", 0.0000);
946 //hfccp.emplace("rf", 0.0000);
947
948 }
949
angular_number(const string input) const950 int AtomMap::angular_number(const string input) const {
951 auto miter = angmap.find(input);
952 stringstream ss; ss << "Unknown angular number in a basis set file. Requested: " << input << endl;
953 if (miter == angmap.end()) throw runtime_error(ss.str());
954 #ifndef COMPILE_J_ORB
955 if (input == "j")
956 throw runtime_error("j-orbitals requested in a basis set file. BAGEL must be compiled with the -DCOMPILE_J_ORB flag to use this.");
957 #endif
958 return miter->second;
959 }
960
961
radius(const string input) const962 double AtomMap::radius(const string input) const {
963 auto miter = bsradii.find(input);
964 if (miter == bsradii.end()) throw runtime_error("Unknown atom (Bragg-Slater radii).");
965 return miter->second/au2angstrom__;
966 }
967
968
cov_radius(const string input) const969 double AtomMap::cov_radius(const string input) const {
970 auto miter = cov_radii.find(input);
971 if (miter == cov_radii.end()) throw runtime_error("Unknown atom (Covalent radii).");
972 return miter->second/au2angstrom__;
973 }
974
975
nuclear_exponent(const string input) const976 double AtomMap::nuclear_exponent(const string input) const {
977 auto miter = nuclear_exponents.find(input);
978 if (miter == nuclear_exponents.end()) throw runtime_error("Unknown atom (Finite nucleus exponent).");
979 return miter->second;
980 }
981
averaged_mass(const string input) const982 double AtomMap::averaged_mass(const string input) const {
983 auto miter = averaged_masses.find(input);
984 if (miter == averaged_masses.end()) throw runtime_error("Unknown atom (Averaged atomic mass).");
985 return miter->second;
986 }
987
num_closed(const string input) const988 tuple<int,int,int,int> AtomMap::num_closed(const string input) const {
989 auto miter = nclosed.find(input);
990 if (miter == nclosed.end()) throw runtime_error("Unknown atom (#closed shell).");
991 return miter->second;
992 }
993
994
num_open(const string input) const995 tuple<int,int,int,int> AtomMap::num_open(const string input) const {
996 auto miter = nopen.find(input);
997 if (miter == nopen.end()) throw runtime_error("Unknown atom (#open shell).");
998 return miter->second;
999 }
1000
1001
hfcc_exists(const string input) const1002 bool AtomMap::hfcc_exists(const string input) const {
1003 return hfccp.find(input) != hfccp.end();
1004 }
1005
1006
hfcc_pfac(const string input) const1007 double AtomMap::hfcc_pfac(const string input) const {
1008 auto miter = hfccp.find(input);
1009 if (miter == hfccp.end()) throw runtime_error("Unknown atom (HPCC P factor).");
1010 return miter->second;
1011 }
1012
1013
atom_number(const string input) const1014 int AtomMap::atom_number(const string input) const {
1015 auto miter = atommap.find(input);
1016 stringstream ss; ss << "Unknown Atom number in a basis set file. Requested: " << input << endl;
1017 if (miter == atommap.end()) throw runtime_error(ss.str());
1018 return miter->second;
1019 }
1020
angular_string(const int input)1021 const string AtomMap::angular_string(const int input) {
1022 for(auto& m : angmap) {
1023 if(m.second == input) { return m.first; }
1024 }
1025 return "X";
1026 }
1027