28 TEST_CASE(
"MCPopulation::createWalkers",
"[particle][population]")
30 using namespace testing;
45 CHECK(population.get_walkers().size() == 8);
46 CHECK(population.get_dead_walkers().size() == 8);
47 CHECK(population.get_num_local_walkers() == 8);
48 population.saveWalkerConfigurations(walker_confs);
55 auto old_R00 = walker_confs[0]->R[0][0];
58 CHECK(walker_confs[1]->R[0][0] == old_R00);
60 auto new_R00 = walker_confs[1]->R[0][0] = 0.3;
62 CHECK(population2.get_walkers()[0]->R[0][0] == old_R00);
63 CHECK(population2.get_walkers()[1]->R[0][0] == new_R00);
64 CHECK(population2.get_walkers()[2]->R[0][0] == old_R00);
65 CHECK(population2.get_walkers()[3]->R[0][0] == old_R00);
66 CHECK(population2.get_walkers()[4]->R[0][0] == new_R00);
67 CHECK(population2.get_walkers()[5]->R[0][0] == old_R00);
68 CHECK(population2.get_walkers()[6]->R[0][0] == old_R00);
69 CHECK(population2.get_walkers()[7]->R[0][0] == new_R00);
73 TEST_CASE(
"MCPopulation::createWalkers_walker_ids",
"[particle][population]")
75 using namespace testing;
86 std::vector<MCPopulation> pops;
92 std::vector<long> walker_ids;
95 pops[i].createWalkers(8, walker_confs, 2.0);
96 CHECK(pops[i].get_walkers().size() == 8);
97 CHECK(pops[i].get_dead_walkers().size() == 8);
98 CHECK(pops[i].get_num_local_walkers() == 8);
99 auto walker_elems = pops[i].get_walker_elements();
102 walker_ids.push_back(wer.walker.getWalkerID());
105 std::sort(walker_ids.begin(), walker_ids.end());
107 for (
int i = 1; i < walker_ids.size(); ++i)
108 CHECK(walker_ids[i - 1] != walker_ids[i]);
113 for (
int iw = 0; iw < new_walkers; ++iw)
115 auto wer = pops[i].spawnWalker();
116 walker_ids.push_back(wer.walker.getWalkerID());
119 std::sort(walker_ids.begin(), walker_ids.end());
121 for (
int i = 1; i < walker_ids.size(); ++i)
122 CHECK(walker_ids[i - 1] != walker_ids[i]);
139 TEST_CASE(
"MCPopulation::redistributeWalkers",
"[particle][population]")
141 using namespace testing;
154 REQUIRE(population.get_walkers().size() == 8);
156 std::vector<std::unique_ptr<WalkerConsumer>> walker_consumers(2);
157 std::for_each(walker_consumers.begin(), walker_consumers.end(),
158 [](std::unique_ptr<WalkerConsumer>& wc) { wc.reset(
new WalkerConsumer()); });
159 population.redistributeWalkers(walker_consumers);
163 std::vector<std::unique_ptr<WalkerConsumer>> walker_consumers_incommensurate(3);
164 std::for_each(walker_consumers_incommensurate.begin(), walker_consumers_incommensurate.end(),
165 [](std::unique_ptr<WalkerConsumer>& wc) { wc.reset(
new WalkerConsumer()); });
167 population.redistributeWalkers(walker_consumers_incommensurate);
168 REQUIRE((*walker_consumers_incommensurate[0]).
walkers.size() == 3);
169 REQUIRE((*walker_consumers_incommensurate[2]).
walkers.size() == 2);
helper functions for EinsplineSetBuilder
int rank() const
return the rank
size_t getActiveWalkers() const
return the number of active walkers
type for returning the walker and its elements from MCPopulation
static ParticleSetPool make_diamondC_1x1x1(Communicate *c)
A set of light weight walkers that are carried between driver sections and restart.
TEST_CASE("complex_helper", "[type_traits]")
static WaveFunctionPool make_diamondC_1x1x1(const RuntimeOptions &runtime_options, Communicate *comm, ParticleSetPool &particle_pool)
Communicate * Controller
Global Communicator for a process.
mock class to avoid testing dependency between Crowd and MCPopulation
Wrapping information on parallelism.
REQUIRE(std::filesystem::exists(filename))
void createWalkers(int numWalkers, size_t numPtcls)
create numWalkers Walkers
void createWalkers(IndexType num_walkers, const WalkerConfigurations &walker_configs, RealType reserve=1.0)
}@
static HamiltonianPool make_hamWithEE(Communicate *comm, ParticleSetPool &particle_pool, WaveFunctionPool &wavefunction_pool)
void resize(int numWalkers, size_t numPtcls)
clean up the walker list and make a new list
Class to represent a many-body trial wave function.
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))