QMCPACK
test_MCCoords.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: Peter Doak, doakpw@ornl.gov, Oak Ridge National Laboratory
8 // Cody A. Melton, cmelton@sandia.gov, Sandia National Laboratories
9 //
10 // File created by: Peter Doak, doakpw@ornl.gov, Oak Ridge National Laboratory
11 //////////////////////////////////////////////////////////////////////////////////////
12 
13 #include "catch.hpp"
14 #include "MCCoords.hpp"
16 #include "Utilities/StdRandom.h"
18 
19 namespace qmcplusplus
20 {
21 TEST_CASE("MCCoords", "[Particle]")
22 {
23  {
24  constexpr auto mct = CoordsType::POS;
25  auto mc_coords = MCCoords<mct>(3);
26  REQUIRE(mc_coords.positions.size() == 3);
27 
28  QMCTraits::PosType p1({0.1, 0.2, 0.3});
29  QMCTraits::PosType p2({0.4, 0.5, 0.6});
30  QMCTraits::PosType p3({0.7, 0.8, 0.9});
31  QMCTraits::PosType p4({-1.0, -1.0, -1.0});
32 
33  mc_coords.positions = {p1, p2, p3};
34  auto shift_coords = MCCoords<mct>(3);
35  shift_coords.positions = {p4, p4, p4};
36  mc_coords += shift_coords;
37  CHECK(Approx(mc_coords.positions[0][0]) == -0.9);
38  CHECK(Approx(mc_coords.positions[0][1]) == -0.8);
39  CHECK(Approx(mc_coords.positions[0][2]) == -0.7);
40  CHECK(Approx(mc_coords.positions[1][0]) == -0.6);
41  CHECK(Approx(mc_coords.positions[1][1]) == -0.5);
42  CHECK(Approx(mc_coords.positions[1][2]) == -0.4);
43  CHECK(Approx(mc_coords.positions[2][0]) == -0.3);
44  CHECK(Approx(mc_coords.positions[2][1]) == -0.2);
45  CHECK(Approx(mc_coords.positions[2][2]) == -0.1);
46 
47  auto shift_coords2 = MCCoords<mct>(3);
48  shift_coords2.positions = {-p4, -p4, -p4};
49  mc_coords += shift_coords2;
50  CHECK(Approx(mc_coords.positions[0][0]) == 0.1);
51  CHECK(Approx(mc_coords.positions[0][1]) == 0.2);
52  CHECK(Approx(mc_coords.positions[0][2]) == 0.3);
53  CHECK(Approx(mc_coords.positions[1][0]) == 0.4);
54  CHECK(Approx(mc_coords.positions[1][1]) == 0.5);
55  CHECK(Approx(mc_coords.positions[1][2]) == 0.6);
56  CHECK(Approx(mc_coords.positions[2][0]) == 0.7);
57  CHECK(Approx(mc_coords.positions[2][1]) == 0.8);
58  CHECK(Approx(mc_coords.positions[2][2]) == 0.9);
59 
60  MCCoords<mct> subset(1);
61  mc_coords.getSubset(1, 1, subset);
62  REQUIRE(subset.positions.size() == 1);
63  CHECK(Approx(subset.positions[0][0]) == 0.4);
64  CHECK(Approx(subset.positions[0][1]) == 0.5);
65  CHECK(Approx(subset.positions[0][2]) == 0.6);
66  }
67  {
68  constexpr auto mct = CoordsType::POS_SPIN;
69  auto mc_coords = MCCoords<mct>(3);
70  REQUIRE(mc_coords.positions.size() == 3);
71  REQUIRE(mc_coords.spins.size() == 3);
72 
73  mc_coords.spins = {0.1, 0.2, 0.3};
74  auto shift_coords = MCCoords<mct>(3);
75  shift_coords.spins = {1.0, 1.0, 1.0};
76  mc_coords += shift_coords;
77  CHECK(Approx(mc_coords.spins[0]) == 1.1);
78  CHECK(Approx(mc_coords.spins[1]) == 1.2);
79  CHECK(Approx(mc_coords.spins[2]) == 1.3);
80 
81  auto shift_coords2 = MCCoords<mct>(3);
82  shift_coords2.spins = {-1.0, -1.0, -1.0};
83  mc_coords += shift_coords2;
84  CHECK(Approx(mc_coords.spins[0]) == 0.1);
85  CHECK(Approx(mc_coords.spins[1]) == 0.2);
86  CHECK(Approx(mc_coords.spins[2]) == 0.3);
87 
88  MCCoords<mct> subset(1);
89  mc_coords.getSubset(2, 1, subset);
90  REQUIRE(subset.spins.size() == 1);
91  CHECK(Approx(subset.spins[0]) == 0.3);
92  }
93 }
94 
95 } // namespace qmcplusplus
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
TEST_CASE("complex_helper", "[type_traits]")
REQUIRE(std::filesystem::exists(filename))
A minimally functional wrapper for the since c++11 <random>
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))