mirror of https://github.com/QMCPACK/qmcpack.git
Use DriverWalker instead of FatWalker.
This commit is contained in:
parent
99bcbcbd6f
commit
c8fe44c44e
|
@ -13,7 +13,7 @@
|
|||
namespace qmcplusplus
|
||||
{
|
||||
Crowd::Crowd(EstimatorManagerNew& emb,
|
||||
const FatWalkerResourceCollection& fatwalker_res,
|
||||
const DriverWalkerResourceCollection& fatwalker_res,
|
||||
const MultiWalkerDispatchers& dispatchers)
|
||||
: dispatchers_(dispatchers), fatwalker_resource_collection_(fatwalker_res), estimator_manager_crowd_(emb)
|
||||
{}
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include "Estimators/EstimatorManagerCrowd.h"
|
||||
#include "RandomGenerator.h"
|
||||
#include "MultiWalkerDispatchers.h"
|
||||
#include "FatWalkerTypes.h"
|
||||
#include "DriverWalkerTypes.h"
|
||||
|
||||
namespace qmcplusplus
|
||||
{
|
||||
|
@ -43,7 +43,7 @@ public:
|
|||
/** This is the data structure for walkers within a crowd
|
||||
*/
|
||||
Crowd(EstimatorManagerNew& emb,
|
||||
const FatWalkerResourceCollection& fatwalker_res,
|
||||
const DriverWalkerResourceCollection& fatwalker_res,
|
||||
const MultiWalkerDispatchers& dispatchers);
|
||||
|
||||
~Crowd();
|
||||
|
@ -93,7 +93,7 @@ public:
|
|||
|
||||
const EstimatorManagerCrowd& get_estimator_manager_crowd() const { return estimator_manager_crowd_; }
|
||||
|
||||
FatWalkerResourceCollection& getSharedResource() { return fatwalker_resource_collection_; }
|
||||
DriverWalkerResourceCollection& getSharedResource() { return fatwalker_resource_collection_; }
|
||||
|
||||
int size() const { return mcp_walkers_.size(); }
|
||||
|
||||
|
@ -119,7 +119,7 @@ private:
|
|||
RefVector<QMCHamiltonian> walker_hamiltonians_;
|
||||
/** }@ */
|
||||
|
||||
FatWalkerResourceCollection fatwalker_resource_collection_;
|
||||
DriverWalkerResourceCollection fatwalker_resource_collection_;
|
||||
|
||||
EstimatorManagerCrowd estimator_manager_crowd_;
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ void DMCBatched::advanceWalkers(const StateForThread& sft,
|
|||
|
||||
int nnode_crossing(0);
|
||||
auto& walkers = crowd.get_walkers();
|
||||
FatWalkerResourceCollectionLock pbyp_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
DriverWalkerResourceCollectionLock pbyp_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
crowd.get_walker_twfs()[0], crowd.get_walker_hamiltonians()[0]);
|
||||
const RefVectorWithLeader<ParticleSet> walker_elecs(crowd.get_walker_elecs()[0], crowd.get_walker_elecs());
|
||||
const RefVectorWithLeader<TrialWaveFunction> walker_twfs(crowd.get_walker_twfs()[0], crowd.get_walker_twfs());
|
||||
|
@ -290,7 +290,7 @@ void DMCBatched::advanceWalkers(const StateForThread& sft,
|
|||
|
||||
for (int iw = 0; iw < walkers.size(); ++iw)
|
||||
{
|
||||
FatWalkerResourceCollectionLock tmove_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[iw],
|
||||
DriverWalkerResourceCollectionLock tmove_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[iw],
|
||||
crowd.get_walker_twfs()[iw], crowd.get_walker_hamiltonians()[iw]);
|
||||
walker_non_local_moves_accepted[iw] = walker_hamiltonians[iw].makeNonLocalMoves(walker_elecs[iw]);
|
||||
|
||||
|
@ -305,7 +305,7 @@ void DMCBatched::advanceWalkers(const StateForThread& sft,
|
|||
|
||||
if (moved_nonlocal_walkers.size())
|
||||
{
|
||||
FatWalkerResourceCollectionLock tmove_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
DriverWalkerResourceCollectionLock tmove_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
crowd.get_walker_twfs()[0], crowd.get_walker_hamiltonians()[0]);
|
||||
|
||||
twf_dispatcher.flex_evaluateGL(moved_nonlocal_walker_twfs, moved_nonlocal_walker_elecs, false);
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
#include "type_traits/template_types.hpp"
|
||||
#include "QMCWaveFunctions/TrialWaveFunction.h"
|
||||
#include "MultiWalkerDispatchers.h"
|
||||
#include "FatWalkerTypes.h"
|
||||
#include "DriverWalkerTypes.h"
|
||||
|
||||
namespace qmcplusplus
|
||||
{
|
||||
|
@ -156,7 +156,7 @@ void WalkerControl::writeDMCdat(int iter, const std::vector<FullPrecRealType>& c
|
|||
int WalkerControl::branch(int iter,
|
||||
MCPopulation& pop,
|
||||
const MultiWalkerDispatchers& dispatchers,
|
||||
FatWalkerResourceCollection& fatwalker_res,
|
||||
DriverWalkerResourceCollection& fatwalker_res,
|
||||
bool do_not_branch)
|
||||
{
|
||||
if (debug_disable_branching_)
|
||||
|
@ -256,7 +256,7 @@ int WalkerControl::branch(int iter,
|
|||
const auto wf_list_no_leader =
|
||||
convertUPtrToRefVectorSubset(pop.get_twfs(), untouched_walkers, num_walkers - untouched_walkers);
|
||||
|
||||
FatWalkerResourceCollection_PsetTWF_Lock pbyp_lock(fatwalker_res, *pop.get_golden_electrons(), pop.get_golden_twf());
|
||||
DriverWalkerResourceCollection_PsetTWF_Lock pbyp_lock(fatwalker_res, *pop.get_golden_electrons(), pop.get_golden_twf());
|
||||
// a defensive update may not be necessary due to loadWalker above. however, load walker needs to be batched.
|
||||
|
||||
const RefVectorWithLeader<ParticleSet> p_list(*pop.get_golden_electrons(), p_list_no_leader);
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
namespace qmcplusplus
|
||||
{
|
||||
class MultiWalkerDispatchers;
|
||||
struct FatWalkerResourceCollection;
|
||||
struct DriverWalkerResourceCollection;
|
||||
|
||||
/** Class for controlling the walkers for DMC simulations.
|
||||
* w and w/o MPI. Fixed and dynamic population in one place.
|
||||
|
@ -73,7 +73,7 @@ public:
|
|||
int branch(int iter,
|
||||
MCPopulation& pop,
|
||||
const MultiWalkerDispatchers& dispatchers,
|
||||
FatWalkerResourceCollection& fatwalker_res,
|
||||
DriverWalkerResourceCollection& fatwalker_res,
|
||||
bool do_not_branch);
|
||||
|
||||
bool put(xmlNodePtr cur);
|
||||
|
|
|
@ -17,19 +17,19 @@
|
|||
|
||||
namespace qmcplusplus
|
||||
{
|
||||
struct FatWalkerResourceCollection
|
||||
struct DriverWalkerResourceCollection
|
||||
{
|
||||
ResourceCollection pset_res;
|
||||
ResourceCollection twf_res;
|
||||
ResourceCollection ham_res;
|
||||
|
||||
FatWalkerResourceCollection() : pset_res("ParticleSet"), twf_res("TrialWaveFunction"), ham_res("Hamiltonian") {}
|
||||
DriverWalkerResourceCollection() : pset_res("ParticleSet"), twf_res("TrialWaveFunction"), ham_res("Hamiltonian") {}
|
||||
};
|
||||
|
||||
class FatWalkerResourceCollectionLock
|
||||
class DriverWalkerResourceCollectionLock
|
||||
{
|
||||
public:
|
||||
FatWalkerResourceCollectionLock(FatWalkerResourceCollection& fatwalker_res, ParticleSet& pset, TrialWaveFunction& twf, QMCHamiltonian& ham)
|
||||
DriverWalkerResourceCollectionLock(DriverWalkerResourceCollection& fatwalker_res, ParticleSet& pset, TrialWaveFunction& twf, QMCHamiltonian& ham)
|
||||
: pset_res_lock_(fatwalker_res.pset_res, pset), twf_res_lock_(fatwalker_res.twf_res, twf), ham_res_lock_(fatwalker_res.ham_res, ham)
|
||||
{}
|
||||
|
||||
|
@ -39,10 +39,10 @@ private:
|
|||
ResourceCollectionLock<QMCHamiltonian> ham_res_lock_;
|
||||
};
|
||||
|
||||
class FatWalkerResourceCollection_PsetTWF_Lock
|
||||
class DriverWalkerResourceCollection_PsetTWF_Lock
|
||||
{
|
||||
public:
|
||||
FatWalkerResourceCollection_PsetTWF_Lock(FatWalkerResourceCollection& fatwalker_res, ParticleSet& pset, TrialWaveFunction& twf)
|
||||
DriverWalkerResourceCollection_PsetTWF_Lock(DriverWalkerResourceCollection& fatwalker_res, ParticleSet& pset, TrialWaveFunction& twf)
|
||||
: pset_res_lock_(fatwalker_res.pset_res, pset), twf_res_lock_(fatwalker_res.twf_res, twf)
|
||||
{}
|
||||
|
|
@ -334,7 +334,7 @@ void QMCDriverNew::initialLogEvaluation(int crowd_id,
|
|||
auto& ham_dispatcher = crowd.dispatchers_.ham_dispatcher_;
|
||||
|
||||
auto& walkers = crowd.get_walkers();
|
||||
FatWalkerResourceCollectionLock pbyp_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
DriverWalkerResourceCollectionLock pbyp_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
crowd.get_walker_twfs()[0], crowd.get_walker_hamiltonians()[0]);
|
||||
const RefVectorWithLeader<ParticleSet> walker_elecs(crowd.get_walker_elecs()[0], crowd.get_walker_elecs());
|
||||
const RefVectorWithLeader<TrialWaveFunction> walker_twfs(crowd.get_walker_twfs()[0], crowd.get_walker_twfs());
|
||||
|
|
|
@ -39,7 +39,7 @@
|
|||
#include "QMCDrivers/ContextForSteps.h"
|
||||
#include "OhmmsApp/ProjectData.h"
|
||||
#include "MultiWalkerDispatchers.h"
|
||||
#include "FatWalkerTypes.h"
|
||||
#include "DriverWalkerTypes.h"
|
||||
|
||||
class Communicate;
|
||||
|
||||
|
@ -363,7 +363,7 @@ protected:
|
|||
* per crowd resources are copied from this gold instance
|
||||
* it should be activated when dispatchers don't serialize walkers
|
||||
*/
|
||||
struct FatWalkerResourceCollection golden_resource_;
|
||||
struct DriverWalkerResourceCollection golden_resource_;
|
||||
|
||||
/// multi walker dispatchers
|
||||
const MultiWalkerDispatchers dispatchers_;
|
||||
|
|
|
@ -46,7 +46,7 @@ void VMCBatched::advanceWalkers(const StateForThread& sft,
|
|||
auto& twf_dispatcher = crowd.dispatchers_.twf_dispatcher_;
|
||||
auto& ham_dispatcher = crowd.dispatchers_.ham_dispatcher_;
|
||||
auto& walkers = crowd.get_walkers();
|
||||
FatWalkerResourceCollectionLock pbyp_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
DriverWalkerResourceCollectionLock pbyp_lock(crowd.getSharedResource(), crowd.get_walker_elecs()[0],
|
||||
crowd.get_walker_twfs()[0], crowd.get_walker_hamiltonians()[0]);
|
||||
const RefVectorWithLeader<ParticleSet> walker_elecs(crowd.get_walker_elecs()[0], crowd.get_walker_elecs());
|
||||
const RefVectorWithLeader<TrialWaveFunction> walker_twfs(crowd.get_walker_twfs()[0], crowd.get_walker_twfs());
|
||||
|
|
|
@ -40,7 +40,7 @@ public:
|
|||
UPtrVector<TrialWaveFunction> twfs;
|
||||
UPtrVector<QMCHamiltonian> hams;
|
||||
std::vector<TinyVector<double, 3>> tpos;
|
||||
FatWalkerResourceCollection fatwalker_resource_collection_;
|
||||
DriverWalkerResourceCollection fatwalker_resource_collection_;
|
||||
const MultiWalkerDispatchers dispatchers_;
|
||||
|
||||
public:
|
||||
|
@ -96,7 +96,7 @@ TEST_CASE("Crowd integration", "[drivers]")
|
|||
// The above was required behavior for crowd at one point.
|
||||
// TODO: determine whether it still is, I don't think so.
|
||||
const MultiWalkerDispatchers dispatchers(true);
|
||||
FatWalkerResourceCollection fatwalker_resource_collection_;
|
||||
DriverWalkerResourceCollection fatwalker_resource_collection_;
|
||||
Crowd crowd(em, fatwalker_resource_collection_, dispatchers);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue