QMCPACK
test_TWFGrads.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) 2022 QMCPACK developers.
6 //
7 // File developed by: Cody A. Melton, cmelton@sandia.gov, Sandia National Laboratories
8 //
9 // File created by: Cody A. Melton, cmelton@sandia.gov, Sandia National Laboratories
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 #include "catch.hpp"
13 #include "TWFGrads.hpp"
14 
15 namespace qmcplusplus
16 {
17 TEST_CASE("TWFGrads", "[QMCWaveFunctions]")
18 {
19  {
20  constexpr auto CT = CoordsType::POS;
21  auto grads = TWFGrads<CT>(3);
22  REQUIRE(grads.grads_positions.size() == 3);
23 
24  grads.grads_positions[0] = QMCTraits::GradType({0.1, 0.2, 0.3});
25  grads.grads_positions[1] = QMCTraits::GradType({0.4, 0.5, 0.6});
26  grads.grads_positions[2] = QMCTraits::GradType({0.7, 0.8, 0.9});
27 
28  auto shift = TWFGrads<CT>(3);
29  shift.grads_positions[0] = QMCTraits::GradType({1.0, 1.0, 1.0});
30  shift.grads_positions[1] = QMCTraits::GradType({1.0, 1.0, 1.0});
31  shift.grads_positions[2] = QMCTraits::GradType({1.0, 1.0, 1.0});
32 
33  grads += shift;
34 #ifdef QMC_COMPLEX
35  CHECK(grads.grads_positions[0][0] == ComplexApprox(QMCTraits::ValueType(1.1, 0.0)));
36  CHECK(grads.grads_positions[0][1] == ComplexApprox(QMCTraits::ValueType(1.2, 0.0)));
37  CHECK(grads.grads_positions[0][2] == ComplexApprox(QMCTraits::ValueType(1.3, 0.0)));
38  CHECK(grads.grads_positions[1][0] == ComplexApprox(QMCTraits::ValueType(1.4, 0.0)));
39  CHECK(grads.grads_positions[1][1] == ComplexApprox(QMCTraits::ValueType(1.5, 0.0)));
40  CHECK(grads.grads_positions[1][2] == ComplexApprox(QMCTraits::ValueType(1.6, 0.0)));
41  CHECK(grads.grads_positions[2][0] == ComplexApprox(QMCTraits::ValueType(1.7, 0.0)));
42  CHECK(grads.grads_positions[2][1] == ComplexApprox(QMCTraits::ValueType(1.8, 0.0)));
43  CHECK(grads.grads_positions[2][2] == ComplexApprox(QMCTraits::ValueType(1.9, 0.0)));
44 #else
45  CHECK(grads.grads_positions[0][0] == Approx(1.1));
46  CHECK(grads.grads_positions[0][1] == Approx(1.2));
47  CHECK(grads.grads_positions[0][2] == Approx(1.3));
48  CHECK(grads.grads_positions[1][0] == Approx(1.4));
49  CHECK(grads.grads_positions[1][1] == Approx(1.5));
50  CHECK(grads.grads_positions[1][2] == Approx(1.6));
51  CHECK(grads.grads_positions[2][0] == Approx(1.7));
52  CHECK(grads.grads_positions[2][1] == Approx(1.8));
53  CHECK(grads.grads_positions[2][2] == Approx(1.9));
54 #endif
55  }
56  {
57  constexpr auto CT = CoordsType::POS_SPIN;
58  auto grads = TWFGrads<CT>(2);
59  REQUIRE(grads.grads_positions.size() == 2);
60  REQUIRE(grads.grads_spins.size() == 2);
61  grads.grads_positions[0] = QMCTraits::GradType({0.1, 0.2, 0.3});
62  grads.grads_positions[1] = QMCTraits::GradType({0.4, 0.5, 0.6});
63  grads.grads_spins[0] = QMCTraits::ComplexType(0.7, 0.8);
64  grads.grads_spins[1] = QMCTraits::ComplexType(0.9, 1.0);
65 
66  auto shift = TWFGrads<CT>(2);
67  shift.grads_positions[0] = QMCTraits::GradType({1.0, 1.0, 1.0});
68  shift.grads_positions[1] = QMCTraits::GradType({1.0, 1.0, 1.0});
69  shift.grads_spins[0] = QMCTraits::ComplexType(1.0, 0.0);
70  shift.grads_spins[1] = QMCTraits::ComplexType(1.0, 0.0);
71 
72  grads += shift;
73 #ifdef QMC_COMPLEX
74  CHECK(grads.grads_positions[0][0] == ComplexApprox(QMCTraits::ValueType(1.1, 0.0)));
75  CHECK(grads.grads_positions[0][1] == ComplexApprox(QMCTraits::ValueType(1.2, 0.0)));
76  CHECK(grads.grads_positions[0][2] == ComplexApprox(QMCTraits::ValueType(1.3, 0.0)));
77  CHECK(grads.grads_positions[1][0] == ComplexApprox(QMCTraits::ValueType(1.4, 0.0)));
78  CHECK(grads.grads_positions[1][1] == ComplexApprox(QMCTraits::ValueType(1.5, 0.0)));
79  CHECK(grads.grads_positions[1][2] == ComplexApprox(QMCTraits::ValueType(1.6, 0.0)));
80 #else
81  CHECK(grads.grads_positions[0][0] == Approx(1.1));
82  CHECK(grads.grads_positions[0][1] == Approx(1.2));
83  CHECK(grads.grads_positions[0][2] == Approx(1.3));
84  CHECK(grads.grads_positions[1][0] == Approx(1.4));
85  CHECK(grads.grads_positions[1][1] == Approx(1.5));
86  CHECK(grads.grads_positions[1][2] == Approx(1.6));
87 #endif
88  CHECK(grads.grads_spins[0] == ComplexApprox(QMCTraits::ComplexType(1.7, 0.8)));
89  CHECK(grads.grads_spins[1] == ComplexApprox(QMCTraits::ComplexType(1.9, 1.0)));
90  }
91 }
92 
93 } // namespace qmcplusplus
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
QTBase::GradType GradType
Definition: Configuration.h:62
TEST_CASE("complex_helper", "[type_traits]")
QTBase::ComplexType ComplexType
Definition: Configuration.h:59
QTBase::ValueType ValueType
Definition: Configuration.h:60
REQUIRE(std::filesystem::exists(filename))
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))