QMCPACK
test_Crowd.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 //
9 // File created by: Peter Doak, doakpw@ornl.gov, Oak Ridge National Laboratory
10 //////////////////////////////////////////////////////////////////////////////////////
11 
12 #include "catch.hpp"
13 
14 #include "Configuration.h"
15 #include "Message/Communicate.h"
16 #include "QMCDrivers/Crowd.h"
22 
24 
25 namespace qmcplusplus
26 {
27 namespace testing
28 {
30 {
31 public:
33 
36  Crowd& get_crowd() { return *crowd_ptr; }
41  std::vector<TinyVector<double, 3>> tpos;
44 
45 public:
47  {
48  crowd_ptr = std::make_unique<Crowd>(em, driverwalker_resource_collection_, *pools.particle_pool->getParticleSet("e"),
49  *pools.wavefunction_pool->getPrimary(), *pools.hamiltonian_pool->getPrimary(), dispatchers_);
50  Crowd& crowd = *crowd_ptr;
51  // To match the minimal particle set
52  int num_particles = 2;
53  // for testing we update the first position in the walker
54  auto makePointWalker = [this, &pools, &crowd, num_particles](TinyVector<double, 3> pos) {
55  walkers.emplace_back(std::make_unique<MCPWalker>(num_particles));
56  walkers.back()->R[0] = pos;
57  psets.emplace_back(std::make_unique<ParticleSet>(*(pools.particle_pool->getParticleSet("e"))));
58  twfs.emplace_back(pools.wavefunction_pool->getPrimary()->makeClone(*psets.back()));
59  hams.emplace_back(pools.hamiltonian_pool->getPrimary()->makeClone(*psets.back(), *twfs.back()));
60  crowd.addWalker(*walkers.back(), *psets.back(), *twfs.back(), *hams.back());
61  };
62 
63  tpos.push_back(TinyVector<double, 3>(1.0, 0.0, 0.0));
64  makePointWalker(tpos.back());
65  tpos.push_back(TinyVector<double, 3>(1.0, 2.0, 0.0));
66  makePointWalker(tpos.back());
67  }
68 
70  {
71  walkers.emplace_back(std::make_unique<MCPWalker>(*walkers.back()));
72  psets.emplace_back(std::make_unique<ParticleSet>(*psets.back()));
73  twfs.emplace_back(twfs.back()->makeClone(*psets.back()));
74  hams.emplace_back(hams.back()->makeClone(*psets.back(), *twfs.back()));
75  }
76 };
77 } // namespace testing
78 
79 TEST_CASE("Crowd integration", "[drivers]")
80 {
82  using namespace testing;
84 
85  EstimatorManagerNew em(*pools.hamiltonian_pool->getPrimary(), comm);
86 
87  const MultiWalkerDispatchers dispatchers(true);
88  DriverWalkerResourceCollection driverwalker_resource_collection_;
89 
90  Crowd crowd(em, driverwalker_resource_collection_, *pools.particle_pool->getParticleSet("e"),
91  *pools.wavefunction_pool->getPrimary(), *pools.hamiltonian_pool->getPrimary(), dispatchers);
92 }
93 
94 TEST_CASE("Crowd redistribute walkers")
95 {
96  using namespace testing;
98 
99  CrowdWithWalkers crowd_with_walkers(pools);
100  Crowd& crowd = crowd_with_walkers.get_crowd();
101 
102  crowd_with_walkers.makeAnotherPointWalker();
103  crowd.clearWalkers();
104  for (int iw = 0; iw < crowd_with_walkers.walkers.size(); ++iw)
105  crowd.addWalker(*crowd_with_walkers.walkers[iw], *crowd_with_walkers.psets[iw], *crowd_with_walkers.twfs[iw],
106  *crowd_with_walkers.hams[iw]);
107  REQUIRE(crowd.size() == 3);
108 }
109 
110 } // namespace qmcplusplus
UPtrVector< QMCHamiltonian > hams
Definition: test_Crowd.cpp:40
helper functions for EinsplineSetBuilder
Definition: Configuration.h:43
Class to manage a set of ScalarEstimators As a manager, this class handles the aggregation of data fr...
std::vector< TinyVector< double, 3 > > tpos
Definition: test_Crowd.cpp:41
UPtr< ParticleSetPool > particle_pool
Definition: SetupPools.h:33
TEST_CASE("complex_helper", "[type_traits]")
std::vector< std::unique_ptr< T > > UPtrVector
UPtr< HamiltonianPool > hamiltonian_pool
Definition: SetupPools.h:35
Driver synchronized step context.
Definition: Crowd.h:38
Communicate * Controller
Global Communicator for a process.
Definition: Communicate.cpp:35
UPtrVector< TrialWaveFunction > twfs
Definition: test_Crowd.cpp:39
Wrapping information on parallelism.
Definition: Communicate.h:68
UPtr< WaveFunctionPool > wavefunction_pool
Definition: SetupPools.h:34
REQUIRE(std::filesystem::exists(filename))
DriverWalker multi walker resource collections It currently supports VMC and DMC only.
SetupPools pools
std::unique_ptr< T > UPtr
UPtrVector< ParticleSet > psets
Definition: test_Crowd.cpp:38
UPtrVector< MCPWalker > walkers
Definition: test_Crowd.cpp:37
A container class to represent a walker.
Definition: Walker.h:49
const MultiWalkerDispatchers dispatchers_
Definition: test_Crowd.cpp:43
DriverWalkerResourceCollection driverwalker_resource_collection_
Definition: test_Crowd.cpp:42