QMCPACK
test_pyscf_complex_MO.cpp
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2018 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Mark Dewing, mdewing@anl.gov, Argonne National Laboratory
8 // Chandler Bennett, bennettcc@ornl.gov, Oak Ridge National Laboratory
9 //
10 // File created by: Mark Dewing, mdewing@anl.gov, Argonne National Laboratory
11 //////////////////////////////////////////////////////////////////////////////////////
12 
13 /* This is a deterministic unit test that verifies the molecular orbital values from QMCPACK
14  * match those from PySCF in the specific case of a complex periodic gaussian basis.
15  * For off gamma carbon diamond, the real and imaginary parts of all molecular orbitals along a
16  * real-space path that spans regions both inside and outside of the cell are required to agree with
17  * the reference values obtained from PySCF. The reference values were generated from Carbon1x1x1-tw1_gen_mos.py.
18 */
19 
20 #include "catch.hpp"
21 
22 #include "Configuration.h"
23 #include "Message/Communicate.h"
29 
30 namespace qmcplusplus
31 {
33 {
34  std::ostringstream section_name;
35  section_name << "Carbon diamond off gamma unit test: ";
36 
37  SECTION(section_name.str())
38  {
40 
42  bool okay = doc.parse("C_diamond-twist-third.structure.xml");
43  REQUIRE(okay);
44  xmlNodePtr root = doc.getRoot();
45 
47  // BCC H
48  lattice.R = {3.37316115, 3.37316115, 0.0, 0.0, 3.37316115, 3.37316115, 3.37316115, 0.0, 3.37316115};
49  lattice.reset();
50 
51  const SimulationCell simulation_cell(lattice);
52  auto ions_ptr = std::make_unique<ParticleSet>(simulation_cell);
53  auto& ions(*ions_ptr);
54  XMLParticleParser parse_ions(ions);
55  OhmmsXPathObject particleset_ion("//particleset[@name='ion0']", doc.getXPathContext());
56  REQUIRE(particleset_ion.size() == 1);
57  parse_ions.readXML(particleset_ion[0]);
58 
59  REQUIRE(ions.groups() == 1);
60  REQUIRE(ions.R.size() == 2);
61  ions.update();
62 
63  auto elec_ptr = std::make_unique<ParticleSet>(simulation_cell);
64  auto& elec(*elec_ptr);
65  XMLParticleParser parse_elec(elec);
66  OhmmsXPathObject particleset_elec("//particleset[@name='e']", doc.getXPathContext());
67  REQUIRE(particleset_elec.size() == 1);
68  parse_elec.readXML(particleset_elec[0]);
69 
70  REQUIRE(elec.groups() == 2);
71  REQUIRE(elec.R.size() == 8);
72 
73  elec.R = 0.0;
74 
75  elec.addTable(ions);
76  elec.update();
77 
78  Libxml2Document doc2;
79 
80  okay = doc2.parse("C_diamond-twist-third.wfj.xml");
81  REQUIRE(okay);
82  xmlNodePtr root2 = doc2.getRoot();
83 
85  particle_set_map.emplace(elec_ptr->getName(), std::move(elec_ptr));
86  particle_set_map.emplace(ions_ptr->getName(), std::move(ions_ptr));
87 
88  SPOSetBuilderFactory bf(c, elec, particle_set_map);
89 
90  OhmmsXPathObject MO_base("//determinantset", doc2.getXPathContext());
91  REQUIRE(MO_base.size() == 1);
92 
93  const auto sposet_builder_ptr = bf.createSPOSetBuilder(MO_base[0]);
94  auto& bb = *sposet_builder_ptr;
95 
96  OhmmsXPathObject slater_base("//sposet", doc2.getXPathContext());
97  auto sposet = bb.createSPOSet(slater_base[0]);
98 
99  SPOSet::ValueVector values;
100  values.resize(26);
101 
102  // BEGIN generated C++ input from Carbon1x1x1-tw1_gen_mos.py (pyscf version 1.6.2) on 2019-11-19 15:08:42.652893
103 
104  //Move electron 0 to position [[-10. -10. -10.]] a.u.:
105  elec.R[0] = {-10.0, -10.0, -10.0};
106  elec.update();
107  sposet->evaluateValue(elec, 0, values);
108 
109  // Position [[-10. -10. -10.]] a.u.
110  // Verifying values of SPO 0
111  CHECK(std::real(values[0]) == Approx(-0.060195105580765275));
112  CHECK(std::imag(values[0]) == Approx(-0.011833831357235357));
113 
114  // Verifying values of SPO 1
115  CHECK(std::real(values[1]) == Approx(0.0486805973426202));
116  CHECK(std::imag(values[1]) == Approx(0.02535990721099494));
117 
118  // Verifying values of SPO 2
119  CHECK(std::real(values[2]) == Approx(2.0679269928380872e-13));
120  CHECK(std::imag(values[2]) == Approx(-7.649005669303763e-14));
121 
122  // Verifying values of SPO 3
123  CHECK(std::real(values[3]) == Approx(-8.497271896529268e-13));
124  CHECK(std::imag(values[3]) == Approx(1.7299795493710973e-13));
125 
126  // Verifying values of SPO 4
127  CHECK(std::real(values[4]) == Approx(0.014722495006984714));
128  CHECK(std::imag(values[4]) == Approx(-0.07164030105855403));
129 
130  // Verifying values of SPO 5
131  CHECK(std::real(values[5]) == Approx(2.5059967122265113e-13));
132  CHECK(std::imag(values[5]) == Approx(2.6819557859270038e-12));
133 
134  // Verifying values of SPO 6
135  CHECK(std::real(values[6]) == Approx(-1.4149372320505777e-13));
136  CHECK(std::imag(values[6]) == Approx(-6.166027974666144e-13));
137 
138  // Verifying values of SPO 7
139  CHECK(std::real(values[7]) == Approx(0.1625931972310664));
140  CHECK(std::imag(values[7]) == Approx(-0.06588438085509145));
141 
142  // Verifying values of SPO 8
143  CHECK(std::real(values[8]) == Approx(0.14211538487895298));
144  CHECK(std::imag(values[8]) == Approx(-0.10262731977374147));
145 
146  // Verifying values of SPO 9
147  CHECK(std::real(values[9]) == Approx(6.853515151228338e-13));
148  CHECK(std::imag(values[9]) == Approx(-6.336955699765e-13));
149 
150  // Verifying values of SPO 10
151  CHECK(std::real(values[10]) == Approx(-2.242625356252415e-12));
152  CHECK(std::imag(values[10]) == Approx(1.2973476459787747e-12));
153 
154  // Verifying values of SPO 11
155  CHECK(std::real(values[11]) == Approx(0.16369199334396695));
156  CHECK(std::imag(values[11]) == Approx(-0.10523147038857521));
157 
158  // Verifying values of SPO 12
159  CHECK(std::real(values[12]) == Approx(-6.491920716278332e-14));
160  CHECK(std::imag(values[12]) == Approx(-2.5135275805165893e-14));
161 
162  // Verifying values of SPO 13
163  CHECK(std::real(values[13]) == Approx(2.477731561589818e-13));
164  CHECK(std::imag(values[13]) == Approx(-6.782768791069354e-14));
165 
166  // Verifying values of SPO 14
167  CHECK(std::real(values[14]) == Approx(-7.389267149549019e-13));
168  CHECK(std::imag(values[14]) == Approx(1.8454929424926995e-12));
169 
170  // Verifying values of SPO 15
171  CHECK(std::real(values[15]) == Approx(1.551052689063858e-12));
172  CHECK(std::imag(values[15]) == Approx(-5.080043156968638e-12));
173 
174  // Verifying values of SPO 16
175  CHECK(std::real(values[16]) == Approx(0.02643126908254878));
176  CHECK(std::imag(values[16]) == Approx(-0.10382334171056015));
177 
178  // Verifying values of SPO 17
179  CHECK(std::real(values[17]) == Approx(-0.008572223551589144));
180  CHECK(std::imag(values[17]) == Approx(0.1360121319699977));
181 
182  // Verifying values of SPO 18
183  CHECK(std::real(values[18]) == Approx(-8.83004606933017e-14));
184  CHECK(std::imag(values[18]) == Approx(6.17399794483608e-13));
185 
186  // Verifying values of SPO 19
187  CHECK(std::real(values[19]) == Approx(-1.2893852652240422e-13));
188  CHECK(std::imag(values[19]) == Approx(3.7305644684515455e-12));
189 
190  // Verifying values of SPO 20
191  CHECK(std::real(values[20]) == Approx(0.02873591847713064));
192  CHECK(std::imag(values[20]) == Approx(-0.153030888627405));
193 
194  // Verifying values of SPO 21
195  CHECK(std::real(values[21]) == Approx(-5.410008378781134e-13));
196  CHECK(std::imag(values[21]) == Approx(-1.9873859502526956e-14));
197 
198  // Verifying values of SPO 22
199  CHECK(std::real(values[22]) == Approx(1.3256132302963402e-12));
200  CHECK(std::imag(values[22]) == Approx(9.89605099255277e-13));
201 
202  // Verifying values of SPO 23
203  CHECK(std::real(values[23]) == Approx(1.1945652800271454e-13));
204  CHECK(std::imag(values[23]) == Approx(-2.047390035286864e-13));
205 
206  // Verifying values of SPO 24
207  CHECK(std::real(values[24]) == Approx(6.814895869844398e-13));
208  CHECK(std::imag(values[24]) == Approx(-9.42856903662901e-14));
209 
210  // Verifying values of SPO 25
211  CHECK(std::real(values[25]) == Approx(-0.015289434969691054));
212  CHECK(std::imag(values[25]) == Approx(-0.03615194381469279));
213 
214  //Move electron 0 to position [[-6.666667 -6.666667 -6.666667]] a.u.:
215  elec.R[0] = {-6.666667, -6.666667, -6.666667};
216  elec.update();
217  sposet->evaluateValue(elec, 0, values);
218 
219  // Position [[-6.666667 -6.666667 -6.666667]] a.u.
220  // Verifying values of SPO 0
221  CHECK(std::real(values[0]) == Approx(0.0956158275805242));
222  CHECK(std::imag(values[0]) == Approx(0.03287266037323013));
223 
224  // Verifying values of SPO 1
225  CHECK(std::real(values[1]) == Approx(0.11506570134621005));
226  CHECK(std::imag(values[1]) == Approx(-0.0900472787152517));
227 
228  // Verifying values of SPO 2
229  CHECK(std::real(values[2]) == Approx(3.6262524017215473e-13));
230  CHECK(std::imag(values[2]) == Approx(-8.165796056348355e-14));
231 
232  // Verifying values of SPO 3
233  CHECK(std::real(values[3]) == Approx(-1.499448351923057e-12));
234  CHECK(std::imag(values[3]) == Approx(1.207191898465219e-13));
235 
236  // Verifying values of SPO 4
237  CHECK(std::real(values[4]) == Approx(0.09133965128853623));
238  CHECK(std::imag(values[4]) == Approx(-0.07359368062940903));
239 
240  // Verifying values of SPO 5
241  CHECK(std::real(values[5]) == Approx(-2.1379426007743085e-12));
242  CHECK(std::imag(values[5]) == Approx(2.7089146897775157e-12));
243 
244  // Verifying values of SPO 6
245  CHECK(std::real(values[6]) == Approx(6.268878374154817e-13));
246  CHECK(std::imag(values[6]) == Approx(-7.328572427840399e-13));
247 
248  // Verifying values of SPO 7
249  CHECK(std::real(values[7]) == Approx(0.1450364317288277));
250  CHECK(std::imag(values[7]) == Approx(0.1499844328343919));
251 
252  // Verifying values of SPO 8
253  CHECK(std::real(values[8]) == Approx(0.1533421330529442));
254  CHECK(std::imag(values[8]) == Approx(0.09647361404443654));
255 
256  // Verifying values of SPO 9
257  CHECK(std::real(values[9]) == Approx(-8.187964194921162e-13));
258  CHECK(std::imag(values[9]) == Approx(4.4221050437064805e-13));
259 
260  // Verifying values of SPO 10
261  CHECK(std::real(values[10]) == Approx(4.14457530803798e-12));
262  CHECK(std::imag(values[10]) == Approx(-3.1273247862003916e-13));
263 
264  // Verifying values of SPO 11
265  CHECK(std::real(values[11]) == Approx(-0.23130832819832292));
266  CHECK(std::imag(values[11]) == Approx(-0.000920632077534666));
267 
268  // Verifying values of SPO 12
269  CHECK(std::real(values[12]) == Approx(2.3089689879702785e-13));
270  CHECK(std::imag(values[12]) == Approx(8.097805194661028e-13));
271 
272  // Verifying values of SPO 13
273  CHECK(std::real(values[13]) == Approx(-1.2650332172739602e-12));
274  CHECK(std::imag(values[13]) == Approx(-1.7846488183430846e-13));
275 
276  // Verifying values of SPO 14
277  CHECK(std::real(values[14]) == Approx(-1.4239386578211e-12));
278  CHECK(std::imag(values[14]) == Approx(1.6467786336155512e-12));
279 
280  // Verifying values of SPO 15
281  CHECK(std::real(values[15]) == Approx(3.445370725198817e-12));
282  CHECK(std::imag(values[15]) == Approx(-2.88321103094349e-12));
283 
284  // Verifying values of SPO 16
285  CHECK(std::real(values[16]) == Approx(0.06850124380096241));
286  CHECK(std::imag(values[16]) == Approx(-0.004634947034247484));
287 
288  // Verifying values of SPO 17
289  CHECK(std::real(values[17]) == Approx(0.35713027737573216));
290  CHECK(std::imag(values[17]) == Approx(0.09047102606218091));
291 
292  // Verifying values of SPO 18
293  CHECK(std::real(values[18]) == Approx(2.2383223715827679e-13));
294  CHECK(std::imag(values[18]) == Approx(9.967200661795276e-14));
295 
296  // Verifying values of SPO 19
297  CHECK(std::real(values[19]) == Approx(9.707838699186186e-12));
298  CHECK(std::imag(values[19]) == Approx(5.315903969755244e-13));
299 
300  // Verifying values of SPO 20
301  CHECK(std::real(values[20]) == Approx(0.24626463443252364));
302  CHECK(std::imag(values[20]) == Approx(-0.07802697773073676));
303 
304  // Verifying values of SPO 21
305  CHECK(std::real(values[21]) == Approx(-6.978536668841118e-13));
306  CHECK(std::imag(values[21]) == Approx(2.91436579306753e-13));
307 
308  // Verifying values of SPO 22
309  CHECK(std::real(values[22]) == Approx(1.3880337858309117e-12));
310  CHECK(std::imag(values[22]) == Approx(-2.2989839200496397e-12));
311 
312  // Verifying values of SPO 23
313  CHECK(std::real(values[23]) == Approx(-1.4148543446437055e-12));
314  CHECK(std::imag(values[23]) == Approx(3.6835638711982286e-13));
315 
316  // Verifying values of SPO 24
317  CHECK(std::real(values[24]) == Approx(-5.500253025100187e-13));
318  CHECK(std::imag(values[24]) == Approx(-1.235497815173411e-12));
319 
320  // Verifying values of SPO 25
321  CHECK(std::real(values[25]) == Approx(0.7850948237148717));
322  CHECK(std::imag(values[25]) == Approx(-0.6716776823047774));
323 
324  //Move electron 0 to position [[-3.333334 -3.333334 -3.333334]] a.u.:
325  elec.R[0] = {-3.333334, -3.333334, -3.333334};
326  elec.update();
327  sposet->evaluateValue(elec, 0, values);
328 
329  // Position [[-3.333334 -3.333334 -3.333334]] a.u.
330  // Verifying values of SPO 0
331  CHECK(std::real(values[0]) == Approx(-0.06005230809177282));
332  CHECK(std::imag(values[0]) == Approx(-0.005290783996832645));
333 
334  // Verifying values of SPO 1
335  CHECK(std::real(values[1]) == Approx(0.04593960387952771));
336  CHECK(std::imag(values[1]) == Approx(0.03337244273082512));
337 
338  // Verifying values of SPO 2
339  CHECK(std::real(values[2]) == Approx(2.1968109839728915e-13));
340  CHECK(std::imag(values[2]) == Approx(-8.417851376747011e-14));
341 
342  // Verifying values of SPO 3
343  CHECK(std::real(values[3]) == Approx(-8.999305207334697e-13));
344  CHECK(std::imag(values[3]) == Approx(2.0359793834210627e-13));
345 
346  // Verifying values of SPO 4
347  CHECK(std::real(values[4]) == Approx(0.018164912111658126));
348  CHECK(std::imag(values[4]) == Approx(-0.07922559625400716));
349 
350  // Verifying values of SPO 5
351  CHECK(std::real(values[5]) == Approx(1.4349914486982305e-13));
352  CHECK(std::imag(values[5]) == Approx(2.9226239484116607e-12));
353 
354  // Verifying values of SPO 6
355  CHECK(std::real(values[6]) == Approx(-1.1288736058805674e-13));
356  CHECK(std::imag(values[6]) == Approx(-6.832621491132385e-13));
357 
358  // Verifying values of SPO 7
359  CHECK(std::real(values[7]) == Approx(0.1651619894114805));
360  CHECK(std::imag(values[7]) == Approx(-0.06134476438049227));
361 
362  // Verifying values of SPO 8
363  CHECK(std::real(values[8]) == Approx(0.14028043757888803));
364  CHECK(std::imag(values[8]) == Approx(-0.10727459702035165));
365 
366  // Verifying values of SPO 9
367  CHECK(std::real(values[9]) == Approx(7.288215170092265e-13));
368  CHECK(std::imag(values[9]) == Approx(-6.500147642486826e-13));
369 
370  // Verifying values of SPO 10
371  CHECK(std::real(values[10]) == Approx(-2.3690801924617754e-12));
372  CHECK(std::imag(values[10]) == Approx(1.2809042021000265e-12));
373 
374  // Verifying values of SPO 11
375  CHECK(std::real(values[11]) == Approx(0.17134778976483186));
376  CHECK(std::imag(values[11]) == Approx(-0.09873043450786173));
377 
378  // Verifying values of SPO 12
379  CHECK(std::real(values[12]) == Approx(-4.721136675333712e-14));
380  CHECK(std::imag(values[12]) == Approx(1.479762495375543e-14));
381 
382  // Verifying values of SPO 13
383  CHECK(std::real(values[13]) == Approx(1.827221642785641e-13));
384  CHECK(std::imag(values[13]) == Approx(-3.08052194664315e-14));
385 
386  // Verifying values of SPO 14
387  CHECK(std::real(values[14]) == Approx(-4.352638042034029e-13));
388  CHECK(std::imag(values[14]) == Approx(1.8446439037660834e-12));
389 
390  // Verifying values of SPO 15
391  CHECK(std::real(values[15]) == Approx(6.46854097962043e-13));
392  CHECK(std::imag(values[15]) == Approx(-4.927302489657481e-12));
393 
394  // Verifying values of SPO 16
395  CHECK(std::real(values[16]) == Approx(0.007153805199742103));
396  CHECK(std::imag(values[16]) == Approx(-0.09671197376753325));
397 
398  // Verifying values of SPO 17
399  CHECK(std::real(values[17]) == Approx(0.0127598393467023));
400  CHECK(std::imag(values[17]) == Approx(0.16334397744406476));
401 
402  // Verifying values of SPO 18
403  CHECK(std::real(values[18]) == Approx(-6.968514298788527e-14));
404  CHECK(std::imag(values[18]) == Approx(6.594685735382753e-13));
405 
406  // Verifying values of SPO 19
407  CHECK(std::real(values[19]) == Approx(4.700545509464493e-13));
408  CHECK(std::imag(values[19]) == Approx(4.414564200230628e-12));
409 
410  // Verifying values of SPO 20
411  CHECK(std::real(values[20]) == Approx(0.04159487544411769));
412  CHECK(std::imag(values[20]) == Approx(-0.1385550610888857));
413 
414  // Verifying values of SPO 21
415  CHECK(std::real(values[21]) == Approx(-5.91423394723593e-13));
416  CHECK(std::imag(values[21]) == Approx(-4.260524213468368e-14));
417 
418  // Verifying values of SPO 22
419  CHECK(std::real(values[22]) == Approx(1.554485706631173e-12));
420  CHECK(std::imag(values[22]) == Approx(1.0536316828100446e-12));
421 
422  // Verifying values of SPO 23
423  CHECK(std::real(values[23]) == Approx(1.2028225633590926e-13));
424  CHECK(std::imag(values[23]) == Approx(-2.8023416921979087e-13));
425 
426  // Verifying values of SPO 24
427  CHECK(std::real(values[24]) == Approx(7.943472267278781e-13));
428  CHECK(std::imag(values[24]) == Approx(-1.860109288800894e-13));
429 
430  // Verifying values of SPO 25
431  CHECK(std::real(values[25]) == Approx(-0.02037392105518354));
432  CHECK(std::imag(values[25]) == Approx(-0.057434079996872056));
433 
434  //Move electron 0 to position [[-9.99999999e-07 -9.99999999e-07 -9.99999999e-07]] a.u.:
435  elec.R[0] = {-9.999999992515995e-07, -9.999999992515995e-07, -9.999999992515995e-07};
436  elec.update();
437  sposet->evaluateValue(elec, 0, values);
438 
439  // Position [[-9.99999999e-07 -9.99999999e-07 -9.99999999e-07]] a.u.
440  // Verifying values of SPO 0
441  CHECK(std::real(values[0]) == Approx(0.10167888698741122));
442  CHECK(std::imag(values[0]) == Approx(-0.005941230707015811));
443 
444  // Verifying values of SPO 1
445  CHECK(std::real(values[1]) == Approx(0.06770487558800753));
446  CHECK(std::imag(values[1]) == Approx(0.008637814352396151));
447 
448  // Verifying values of SPO 2
449  CHECK(std::real(values[2]) == Approx(3.60922270259699e-13));
450  CHECK(std::imag(values[2]) == Approx(-5.756254305688054e-14));
451 
452  // Verifying values of SPO 3
453  CHECK(std::real(values[3]) == Approx(-1.5147241100318388e-12));
454  CHECK(std::imag(values[3]) == Approx(4.370202116763758e-14));
455 
456  // Verifying values of SPO 4
457  CHECK(std::real(values[4]) == Approx(0.1285247939510426));
458  CHECK(std::imag(values[4]) == Approx(-0.010293562806552263));
459 
460  // Verifying values of SPO 5
461  CHECK(std::real(values[5]) == Approx(-3.1382097441498023e-12));
462  CHECK(std::imag(values[5]) == Approx(5.680356358934007e-13));
463 
464  // Verifying values of SPO 6
465  CHECK(std::real(values[6]) == Approx(8.714109078422965e-13));
466  CHECK(std::imag(values[6]) == Approx(-1.8866876919070565e-13));
467 
468  // Verifying values of SPO 7
469  CHECK(std::real(values[7]) == Approx(0.0787451415811546));
470  CHECK(std::imag(values[7]) == Approx(0.00141109567072648));
471 
472  // Verifying values of SPO 8
473  CHECK(std::real(values[8]) == Approx(-0.0387351183536941));
474  CHECK(std::imag(values[8]) == Approx(0.012263153973258889));
475 
476  // Verifying values of SPO 9
477  CHECK(std::real(values[9]) == Approx(-4.3274845513970603e-14));
478  CHECK(std::imag(values[9]) == Approx(-9.283134158055235e-14));
479 
480  // Verifying values of SPO 10
481  CHECK(std::real(values[10]) == Approx(2.4316486325254445e-13));
482  CHECK(std::imag(values[10]) == Approx(1.6584216636762436e-13));
483 
484  // Verifying values of SPO 11
485  CHECK(std::real(values[11]) == Approx(-0.010875903895641862));
486  CHECK(std::imag(values[11]) == Approx(0.04714572895763401));
487 
488  // Verifying values of SPO 12
489  CHECK(std::real(values[12]) == Approx(2.0172275308035739e-13));
490  CHECK(std::imag(values[12]) == Approx(5.497217874676079e-13));
491 
492  // Verifying values of SPO 13
493  CHECK(std::real(values[13]) == Approx(-8.496293946065942e-13));
494  CHECK(std::imag(values[13]) == Approx(-1.036705443495618e-13));
495 
496  // Verifying values of SPO 14
497  CHECK(std::real(values[14]) == Approx(-2.263782260614978e-12));
498  CHECK(std::imag(values[14]) == Approx(5.795082295856767e-13));
499 
500  // Verifying values of SPO 15
501  CHECK(std::real(values[15]) == Approx(6.377089828402728e-12));
502  CHECK(std::imag(values[15]) == Approx(-6.716103368246984e-13));
503 
504  // Verifying values of SPO 16
505  CHECK(std::real(values[16]) == Approx(0.12847308968746957));
506  CHECK(std::imag(values[16]) == Approx(0.02035282496639674));
507 
508  // Verifying values of SPO 17
509  CHECK(std::real(values[17]) == Approx(0.1737553721002816));
510  CHECK(std::imag(values[17]) == Approx(-0.0376579821006186));
511 
512  // Verifying values of SPO 18
513  CHECK(std::real(values[18]) == Approx(-1.4876446427583875e-13));
514  CHECK(std::imag(values[18]) == Approx(-3.7704344851099533e-13));
515 
516  // Verifying values of SPO 19
517  CHECK(std::real(values[19]) == Approx(4.382987028924654e-12));
518  CHECK(std::imag(values[19]) == Approx(-2.5937429287598488e-12));
519 
520  // Verifying values of SPO 20
521  CHECK(std::real(values[20]) == Approx(0.15399434198150766));
522  CHECK(std::imag(values[20]) == Approx(-0.02568058890861615));
523 
524  // Verifying values of SPO 21
525  CHECK(std::real(values[21]) == Approx(-1.869012757649718e-13));
526  CHECK(std::imag(values[21]) == Approx(2.032548120769792e-13));
527 
528  // Verifying values of SPO 22
529  CHECK(std::real(values[22]) == Approx(-9.61637020079959e-13));
530  CHECK(std::imag(values[22]) == Approx(-1.8784349076636863e-12));
531 
532  // Verifying values of SPO 23
533  CHECK(std::real(values[23]) == Approx(-1.0113611337362861e-12));
534  CHECK(std::imag(values[23]) == Approx(1.0432885024476444e-12));
535 
536  // Verifying values of SPO 24
537  CHECK(std::real(values[24]) == Approx(-8.348460811998449e-13));
538  CHECK(std::imag(values[24]) == Approx(-1.0209888494617845e-13));
539 
540  // Verifying values of SPO 25
541  CHECK(std::real(values[25]) == Approx(0.8037234583780705));
542  CHECK(std::imag(values[25]) == Approx(-0.8579924081605256));
543 
544  //Move electron 0 to position [[3.333332 3.333332 3.333332]] a.u.:
545  elec.R[0] = {3.3333320000000004, 3.3333320000000004, 3.3333320000000004};
546  elec.update();
547  sposet->evaluateValue(elec, 0, values);
548 
549  // Position [[3.333332 3.333332 3.333332]] a.u.
550  // Verifying values of SPO 0
551  CHECK(std::real(values[0]) == Approx(-0.059806620261567495));
552  CHECK(std::imag(values[0]) == Approx(0.0014605026493625755));
553 
554  // Verifying values of SPO 1
555  CHECK(std::real(values[1]) == Approx(0.042130656010843565));
556  CHECK(std::imag(values[1]) == Approx(0.041154352141271694));
557 
558  // Verifying values of SPO 2
559  CHECK(std::real(values[2]) == Approx(2.299461077958894e-13));
560  CHECK(std::imag(values[2]) == Approx(-9.228330396886522e-14));
561 
562  // Verifying values of SPO 3
563  CHECK(std::real(values[3]) == Approx(-9.411403950013916e-13));
564  CHECK(std::imag(values[3]) == Approx(2.373896446652552e-13));
565 
566  // Verifying values of SPO 4
567  CHECK(std::real(values[4]) == Approx(0.022449104164198187));
568  CHECK(std::imag(values[4]) == Approx(-0.08741397581582212));
569 
570  // Verifying values of SPO 5
571  CHECK(std::real(values[5]) == Approx(5.8607649950285695e-15));
572  CHECK(std::imag(values[5]) == Approx(3.172440606911535e-12));
573 
574  // Verifying values of SPO 6
575  CHECK(std::real(values[6]) == Approx(-7.517818458469839e-14));
576  CHECK(std::imag(values[6]) == Approx(-7.526353676741086e-13));
577 
578  // Verifying values of SPO 7
579  CHECK(std::real(values[7]) == Approx(0.16660016621038506));
580  CHECK(std::imag(values[7]) == Approx(-0.05698359576596997));
581 
582  // Verifying values of SPO 8
583  CHECK(std::real(values[8]) == Approx(0.13740625808310925));
584  CHECK(std::imag(values[8]) == Approx(-0.10946922834461466));
585 
586  // Verifying values of SPO 9
587  CHECK(std::real(values[9]) == Approx(7.572904391658913e-13));
588  CHECK(std::imag(values[9]) == Approx(-6.606785411995795e-13));
589 
590  // Verifying values of SPO 10
591  CHECK(std::real(values[10]) == Approx(-2.4508546356377402e-12));
592  CHECK(std::imag(values[10]) == Approx(1.2663325239134368e-12));
593 
594  // Verifying values of SPO 11
595  CHECK(std::real(values[11]) == Approx(0.17681058034809968));
596  CHECK(std::imag(values[11]) == Approx(-0.09275809690899624));
597 
598  // Verifying values of SPO 12
599  CHECK(std::real(values[12]) == Approx(-2.9056613057169995e-14));
600  CHECK(std::imag(values[12]) == Approx(4.9557581445141706e-14));
601 
602  // Verifying values of SPO 13
603  CHECK(std::real(values[13]) == Approx(1.2658321585137323e-13));
604  CHECK(std::imag(values[13]) == Approx(1.070843942851782e-14));
605 
606  // Verifying values of SPO 14
607  CHECK(std::real(values[14]) == Approx(-8.521829595450246e-14));
608  CHECK(std::imag(values[14]) == Approx(1.77439224452637e-12));
609 
610  // Verifying values of SPO 15
611  CHECK(std::real(values[15]) == Approx(-3.6150944959863987e-13));
612  CHECK(std::imag(values[15]) == Approx(-4.5876243176725545e-12));
613 
614  // Verifying values of SPO 16
615  CHECK(std::real(values[16]) == Approx(-0.014036906825284585));
616  CHECK(std::imag(values[16]) == Approx(-0.08614468966547723));
617 
618  // Verifying values of SPO 17
619  CHECK(std::real(values[17]) == Approx(0.033216162124121054));
620  CHECK(std::imag(values[17]) == Approx(0.18639424345387834));
621 
622  // Verifying values of SPO 18
623  CHECK(std::real(values[18]) == Approx(-4.552953546266951e-14));
624  CHECK(std::imag(values[18]) == Approx(6.769691296399057e-13));
625 
626  // Verifying values of SPO 19
627  CHECK(std::real(values[19]) == Approx(1.0413475613943049e-12));
628  CHECK(std::imag(values[19]) == Approx(4.9922947429389975e-12));
629 
630  // Verifying values of SPO 20
631  CHECK(std::real(values[20]) == Approx(0.049807632374415926));
632  CHECK(std::imag(values[20]) == Approx(-0.11666665209986808));
633 
634  // Verifying values of SPO 21
635  CHECK(std::real(values[21]) == Approx(-6.182341843173099e-13));
636  CHECK(std::imag(values[21]) == Approx(-6.314824100072268e-14));
637 
638  // Verifying values of SPO 22
639  CHECK(std::real(values[22]) == Approx(1.7345326427769266e-12));
640  CHECK(std::imag(values[22]) == Approx(1.094659994231126e-12));
641 
642  // Verifying values of SPO 23
643  CHECK(std::real(values[23]) == Approx(1.290911743878159e-13));
644  CHECK(std::imag(values[23]) == Approx(-3.4848512356417114e-13));
645 
646  // Verifying values of SPO 24
647  CHECK(std::real(values[24]) == Approx(8.886571862605712e-13));
648  CHECK(std::imag(values[24]) == Approx(-2.685212860435276e-13));
649 
650  // Verifying values of SPO 25
651  CHECK(std::real(values[25]) == Approx(-0.02637454702199341));
652  CHECK(std::imag(values[25]) == Approx(-0.08028180462518811));
653 
654  //Move electron 0 to position [[6.666665 6.666665 6.666665]] a.u.:
655  elec.R[0] = {6.666665000000002, 6.666665000000002, 6.666665000000002};
656  elec.update();
657  sposet->evaluateValue(elec, 0, values);
658 
659  // Position [[6.666665 6.666665 6.666665]] a.u.
660  // Verifying values of SPO 0
661  CHECK(std::real(values[0]) == Approx(0.11380752148567085));
662  CHECK(std::imag(values[0]) == Approx(-0.04390587226150721));
663 
664  // Verifying values of SPO 1
665  CHECK(std::real(values[1]) == Approx(0.02588030482486917));
666  CHECK(std::imag(values[1]) == Approx(0.10687921643358252));
667 
668  // Verifying values of SPO 2
669  CHECK(std::real(values[2]) == Approx(3.197341334549546e-13));
670  CHECK(std::imag(values[2]) == Approx(-2.3414238599544394e-14));
671 
672  // Verifying values of SPO 3
673  CHECK(std::real(values[3]) == Approx(-1.3703920844638083e-12));
674  CHECK(std::imag(values[3]) == Approx(-4.923708702683163e-14));
675 
676  // Verifying values of SPO 4
677  CHECK(std::real(values[4]) == Approx(0.18010843596428783));
678  CHECK(std::imag(values[4]) == Approx(0.04962376866516952));
679 
680  // Verifying values of SPO 5
681  CHECK(std::real(values[5]) == Approx(-4.672976839154819e-12));
682  CHECK(std::imag(values[5]) == Approx(-1.544795977090896e-12));
683 
684  // Verifying values of SPO 6
685  CHECK(std::real(values[6]) == Approx(1.2509722576569074e-12));
686  CHECK(std::imag(values[6]) == Approx(3.563501771870871e-13));
687 
688  // Verifying values of SPO 7
689  CHECK(std::real(values[7]) == Approx(0.010394738060449391));
690  CHECK(std::imag(values[7]) == Approx(-0.15080653874439975));
691 
692  // Verifying values of SPO 8
693  CHECK(std::real(values[8]) == Approx(-0.22742833831292314));
694  CHECK(std::imag(values[8]) == Approx(-0.08681115895058802));
695 
696  // Verifying values of SPO 9
697  CHECK(std::real(values[9]) == Approx(7.017990606811553e-13));
698  CHECK(std::imag(values[9]) == Approx(-6.006243721193688e-13));
699 
700  // Verifying values of SPO 10
701  CHECK(std::real(values[10]) == Approx(-3.5441754061629804e-12));
702  CHECK(std::imag(values[10]) == Approx(5.510674056680197e-13));
703 
704  // Verifying values of SPO 11
705  CHECK(std::real(values[11]) == Approx(0.19602654856168172));
706  CHECK(std::imag(values[11]) == Approx(0.08793147752366054));
707 
708  // Verifying values of SPO 12
709  CHECK(std::real(values[12]) == Approx(1.1100410142953716e-13));
710  CHECK(std::imag(values[12]) == Approx(2.1529784776147745e-13));
711 
712  // Verifying values of SPO 13
713  CHECK(std::real(values[13]) == Approx(-3.1113994995362083e-13));
714  CHECK(std::imag(values[13]) == Approx(-9.16124845162143e-14));
715 
716  // Verifying values of SPO 14
717  CHECK(std::real(values[14]) == Approx(-2.8425823215546873e-12));
718  CHECK(std::imag(values[14]) == Approx(-5.967361937077563e-13));
719 
720  // Verifying values of SPO 15
721  CHECK(std::real(values[15]) == Approx(8.500061674827252e-12));
722  CHECK(std::imag(values[15]) == Approx(1.6117350650343773e-12));
723 
724  // Verifying values of SPO 16
725  CHECK(std::real(values[16]) == Approx(0.1685048554426682));
726  CHECK(std::imag(values[16]) == Approx(0.040751301285559566));
727 
728  // Verifying values of SPO 17
729  CHECK(std::real(values[17]) == Approx(-0.05992911952275292));
730  CHECK(std::imag(values[17]) == Approx(-0.147726013001218));
731 
732  // Verifying values of SPO 18
733  CHECK(std::real(values[18]) == Approx(-6.090732565369773e-13));
734  CHECK(std::imag(values[18]) == Approx(-7.443355801535639e-13));
735 
736  // Verifying values of SPO 19
737  CHECK(std::real(values[19]) == Approx(-2.2154083501205196e-12));
738  CHECK(std::imag(values[19]) == Approx(-5.02729118133428e-12));
739 
740  // Verifying values of SPO 20
741  CHECK(std::real(values[20]) == Approx(0.061780347627032536));
742  CHECK(std::imag(values[20]) == Approx(0.01686579925949514));
743 
744  // Verifying values of SPO 21
745  CHECK(std::real(values[21]) == Approx(3.0787695380514886e-13));
746  CHECK(std::imag(values[21]) == Approx(1.6918178698834226e-14));
747 
748  // Verifying values of SPO 22
749  CHECK(std::real(values[22]) == Approx(-3.221671335678293e-12));
750  CHECK(std::imag(values[22]) == Approx(-9.562454010396891e-13));
751 
752  // Verifying values of SPO 23
753  CHECK(std::real(values[23]) == Approx(-4.3583890429925625e-13));
754  CHECK(std::imag(values[23]) == Approx(1.578955716802118e-12));
755 
756  // Verifying values of SPO 24
757  CHECK(std::real(values[24]) == Approx(-9.202570529310635e-13));
758  CHECK(std::imag(values[24]) == Approx(1.13342674089293e-12));
759 
760  // Verifying values of SPO 25
761  CHECK(std::real(values[25]) == Approx(0.7098778186417222));
762  CHECK(std::imag(values[25]) == Approx(-0.928839302822032));
763 
764  //Move electron 0 to position [[9.999998 9.999998 9.999998]] a.u.:
765  elec.R[0] = {9.999998000000001, 9.999998000000001, 9.999998000000001};
766  elec.update();
767  sposet->evaluateValue(elec, 0, values);
768 
769  // Position [[9.999998 9.999998 9.999998]] a.u.
770  // Verifying values of SPO 0
771  CHECK(std::real(values[0]) == Approx(-0.05950698756399922));
772  CHECK(std::imag(values[0]) == Approx(0.008451159090256224));
773 
774  // Verifying values of SPO 1
775  CHECK(std::real(values[1]) == Approx(0.0372927266605709));
776  CHECK(std::imag(values[1]) == Approx(0.04865086992861883));
777 
778  // Verifying values of SPO 2
779  CHECK(std::real(values[2]) == Approx(2.3700317966038143e-13));
780  CHECK(std::imag(values[2]) == Approx(-1.0025983406577301e-13));
781 
782  // Verifying values of SPO 3
783  CHECK(std::real(values[3]) == Approx(-9.70793757903483e-13));
784  CHECK(std::imag(values[3]) == Approx(2.724608733149554e-13));
785 
786  // Verifying values of SPO 4
787  CHECK(std::real(values[4]) == Approx(0.02755063738588984));
788  CHECK(std::imag(values[4]) == Approx(-0.09640122180554679));
789 
790  // Verifying values of SPO 5
791  CHECK(std::real(values[5]) == Approx(-1.6269971476154967e-13));
792  CHECK(std::imag(values[5]) == Approx(3.438238409269704e-12));
793 
794  // Verifying values of SPO 6
795  CHECK(std::real(values[6]) == Approx(-2.855643508474324e-14));
796  CHECK(std::imag(values[6]) == Approx(-8.265646196873323e-13));
797 
798  // Verifying values of SPO 7
799  CHECK(std::real(values[7]) == Approx(0.16726281762463338));
800  CHECK(std::imag(values[7]) == Approx(-0.052898517004949845));
801 
802  // Verifying values of SPO 8
803  CHECK(std::real(values[8]) == Approx(0.13334645793969357));
804  CHECK(std::imag(values[8]) == Approx(-0.10880327269811665));
805 
806  // Verifying values of SPO 9
807  CHECK(std::real(values[9]) == Approx(7.692422002437098e-13));
808  CHECK(std::imag(values[9]) == Approx(-6.640972494690012e-13));
809 
810  // Verifying values of SPO 10
811  CHECK(std::real(values[10]) == Approx(-2.4821733211548425e-12));
812  CHECK(std::imag(values[10]) == Approx(1.2520175866069816e-12));
813 
814  // Verifying values of SPO 11
815  CHECK(std::real(values[11]) == Approx(0.1798235956119672));
816  CHECK(std::imag(values[11]) == Approx(-0.0874643862941136));
817 
818  // Verifying values of SPO 12
819  CHECK(std::real(values[12]) == Approx(-1.1709383431389981e-14));
820  CHECK(std::imag(values[12]) == Approx(7.639071676987064e-14));
821 
822  // Verifying values of SPO 13
823  CHECK(std::real(values[13]) == Approx(8.413148674931816e-14));
824  CHECK(std::imag(values[13]) == Approx(5.638892139842643e-14));
825 
826  // Verifying values of SPO 14
827  CHECK(std::real(values[14]) == Approx(3.033437215039551e-13));
828  CHECK(std::imag(values[14]) == Approx(1.6158520918629484e-12));
829 
830  // Verifying values of SPO 15
831  CHECK(std::real(values[15]) == Approx(-1.4472936742422837e-12));
832  CHECK(std::imag(values[15]) == Approx(-4.016332839335127e-12));
833 
834  // Verifying values of SPO 16
835  CHECK(std::real(values[16]) == Approx(-0.03653573483382949));
836  CHECK(std::imag(values[16]) == Approx(-0.07139149065641964));
837 
838  // Verifying values of SPO 17
839  CHECK(std::real(values[17]) == Approx(0.05195911753492378));
840  CHECK(std::imag(values[17]) == Approx(0.20377702124340888));
841 
842  // Verifying values of SPO 18
843  CHECK(std::real(values[18]) == Approx(-1.3913349264311425e-14));
844  CHECK(std::imag(values[18]) == Approx(6.650238087623492e-13));
845 
846  // Verifying values of SPO 19
847  CHECK(std::real(values[19]) == Approx(1.5612684760915313e-12));
848  CHECK(std::imag(values[19]) == Approx(5.4326976941529405e-12));
849 
850  // Verifying values of SPO 20
851  CHECK(std::real(values[20]) == Approx(0.05183727962592069));
852  CHECK(std::imag(values[20]) == Approx(-0.08693036223348635));
853 
854  // Verifying values of SPO 21
855  CHECK(std::real(values[21]) == Approx(-6.168889188205947e-13));
856  CHECK(std::imag(values[21]) == Approx(-7.934625127721342e-14));
857 
858  // Verifying values of SPO 22
859  CHECK(std::real(values[22]) == Approx(1.854426333865271e-12));
860  CHECK(std::imag(values[22]) == Approx(1.1091023934392614e-12));
861 
862  // Verifying values of SPO 23
863  CHECK(std::real(values[23]) == Approx(1.4450940425974687e-13));
864  CHECK(std::imag(values[23]) == Approx(-4.0532507912929545e-13));
865 
866  // Verifying values of SPO 24
867  CHECK(std::real(values[24]) == Approx(9.63345721944599e-13));
868  CHECK(std::imag(values[24]) == Approx(-3.381600555043806e-13));
869 
870  // Verifying values of SPO 25
871  CHECK(std::real(values[25]) == Approx(-0.03316664551198499));
872  CHECK(std::imag(values[25]) == Approx(-0.10326287192308459));
873 
874  // END generated C++ input from Carbon1x1x1-tw1_gen_mos.py (pyscf version 1.6.2) on 2019-11-19 15:08:42.847403
875  }
876 }
877 
878 TEST_CASE("ReadMolecularOrbital GTO Carbon Diamond", "[wavefunction]") { test_C_diamond(); }
879 
880 } // namespace qmcplusplus
a class that defines a supercell in D-dimensional Euclean space.
class that handles xmlDoc
Definition: Libxml2Doc.h:76
QMCTraits::RealType real
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
xmlXPathContextPtr getXPathContext()
Definition: Libxml2Doc.cpp:100
TEST_CASE("complex_helper", "[type_traits]")
xmlNodePtr getRoot()
Definition: Libxml2Doc.h:88
Communicate * Controller
Global Communicator for a process.
Definition: Communicate.cpp:35
std::map< std::string, const std::unique_ptr< ParticleSet > > PSetMap
class to handle xmlXPathObject
Definition: Libxml2Doc.h:26
Wrapping information on parallelism.
Definition: Communicate.h:68
CrystalLattice< OHMMS_PRECISION, OHMMS_DIM > lattice
Decalaration of One-Dimesional grids.
float imag(const float &c)
imaginary part of a scalar. Cannot be replaced by std::imag due to AFQMC specific needs...
REQUIRE(std::filesystem::exists(filename))
OrbitalSetTraits< ValueType >::ValueVector ValueVector
Definition: SPOSet.h:49
bool readXML(xmlNodePtr cur)
process xmlnode <particleset/> which contains everything about the particle set to initialize ...
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))
bool parse(const std::string &fname)
Definition: Libxml2Doc.cpp:180
std::unique_ptr< SPOSetBuilder > createSPOSetBuilder(xmlNodePtr rootNode)