diff --git a/src/QMCDrivers/CloneManager.cpp b/src/QMCDrivers/CloneManager.cpp index 284a2e325..ff2e86e70 100644 --- a/src/QMCDrivers/CloneManager.cpp +++ b/src/QMCDrivers/CloneManager.cpp @@ -81,7 +81,6 @@ CloneManager::~CloneManager() { // delete_iter(CSMovers.begin(),CSMovers.end()); delete_iter(Movers.begin(),Movers.end()); - delete_iter(branchClones.begin(),branchClones.end()); delete_iter(estimatorClones.begin(),estimatorClones.end()); #if !defined(REMOVE_TRACEMANAGER) diff --git a/src/QMCDrivers/CloneManager.h b/src/QMCDrivers/CloneManager.h index 68ef328e5..f0b18559b 100644 --- a/src/QMCDrivers/CloneManager.h +++ b/src/QMCDrivers/CloneManager.h @@ -83,8 +83,6 @@ protected: std::vector estimatorClones; ///trace managers std::vector traceClones; - ///Branch engines - std::vector branchClones; //for correlated sampling. static std::vector > WPoolClones; diff --git a/src/QMCDrivers/CorrelatedSampling/CSVMC.cpp b/src/QMCDrivers/CorrelatedSampling/CSVMC.cpp index 6dd1a6011..902363398 100644 --- a/src/QMCDrivers/CorrelatedSampling/CSVMC.cpp +++ b/src/QMCDrivers/CorrelatedSampling/CSVMC.cpp @@ -237,7 +237,6 @@ void CSVMC::resetRun() if(Movers.empty()) { CSMovers.resize(NumThreads,0); - branchClones.resize(NumThreads,0); estimatorClones.resize(NumThreads,0); traceClones.resize(NumThreads,0); Rng.resize(NumThreads,0); @@ -255,8 +254,6 @@ void CSVMC::resetRun() #endif Rng[ip]=new RandomGenerator_t(*(RandomNumberControl::Children[ip])); - - branchClones[ip] = new BranchEngineType(*branchEngine); if(QMCDriverMode[QMC_UPDATE_MODE]) { if (UseDrift == "yes") @@ -288,7 +285,7 @@ void CSVMC::resetRun() app_log() << os.str() << std::endl; CSMovers[ip]->put(qmcNode); - CSMovers[ip]->resetRun( branchClones[ip], estimatorClones[ip],traceClones[ip]); + CSMovers[ip]->resetRun(branchEngine, estimatorClones[ip],traceClones[ip]); } } @@ -314,7 +311,7 @@ void CSVMC::resetRun() { //int ip=omp_get_thread_num(); CSMovers[ip]->put(qmcNode); - CSMovers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); + CSMovers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); if (QMCDriverMode[QMC_UPDATE_MODE]) CSMovers[ip]->initCSWalkersForPbyP(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1], nWarmupSteps>0); else diff --git a/src/QMCDrivers/DMC/DMCOMP.cpp b/src/QMCDrivers/DMC/DMCOMP.cpp index c0357fa0f..d0a1ec478 100644 --- a/src/QMCDrivers/DMC/DMCOMP.cpp +++ b/src/QMCDrivers/DMC/DMCOMP.cpp @@ -85,10 +85,8 @@ void DMCOMP::resetComponents(xmlNodePtr cur) { delete Movers[ip]; delete estimatorClones[ip]; - delete branchClones[ip]; estimatorClones[ip]= new EstimatorManagerBase(*Estimators); estimatorClones[ip]->setCollectionMode(false); - branchClones[ip] = new BranchEngineType(*branchEngine); #if !defined(REMOVE_TRACEMANAGER) delete traceClones[ip]; traceClones[ip] = Traces->makeClone(); @@ -101,7 +99,7 @@ void DMCOMP::resetComponents(xmlNodePtr cur) { Movers[ip] = new DMCUpdatePbyPWithRejectionFast(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); Movers[ip]->put(cur); - Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); + Movers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); Movers[ip]->initWalkersForPbyP(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); } else @@ -111,7 +109,7 @@ void DMCOMP::resetComponents(xmlNodePtr cur) else Movers[ip] = new DMCUpdateAllWithRejection(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); Movers[ip]->put(cur); - Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); + Movers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); Movers[ip]->initWalkers(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); } } @@ -136,7 +134,6 @@ void DMCOMP::resetUpdateEngines() } //if(QMCDriverMode[QMC_UPDATE_MODE]) W.clearAuxDataSet(); Movers.resize(NumThreads,0); - branchClones.resize(NumThreads,0); Rng.resize(NumThreads,0); estimatorClones.resize(NumThreads,0); traceClones.resize(NumThreads,0); @@ -171,12 +168,11 @@ void DMCOMP::resetUpdateEngines() Rng[ip]=new RandomGenerator_t(*RandomNumberControl::Children[ip]); hClones[ip]->setRandomGenerator(Rng[ip]); #endif - branchClones[ip] = new BranchEngineType(*branchEngine); if(QMCDriverMode[QMC_UPDATE_MODE]) { Movers[ip] = new DMCUpdatePbyPWithRejectionFast(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); Movers[ip]->put(qmcNode); - Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); + Movers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); Movers[ip]->initWalkersForPbyP(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); } else @@ -186,7 +182,7 @@ void DMCOMP::resetUpdateEngines() else Movers[ip] = new DMCUpdateAllWithRejection(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); Movers[ip]->put(qmcNode); - Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); + Movers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); Movers[ip]->initWalkers(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); } } @@ -302,7 +298,7 @@ bool DMCOMP::run() for(int ip=1; ipCollectables; } - branchEngine->branch(CurrentStep, W, branchClones); + branchEngine->branch(CurrentStep, W); // if(storeConfigs && (CurrentStep%storeConfigs == 0)) { // ForwardWalkingHistory.storeConfigsForForwardWalking(W); // W.resetWalkerParents(); diff --git a/src/QMCDrivers/QMCUpdateBase.cpp b/src/QMCDrivers/QMCUpdateBase.cpp index dba8fa833..c2a7d1b97 100644 --- a/src/QMCDrivers/QMCUpdateBase.cpp +++ b/src/QMCDrivers/QMCUpdateBase.cpp @@ -86,8 +86,6 @@ bool QMCUpdateBase::put(xmlNodePtr cur) { H.setNonLocalMoves(cur); bool s=myParams.put(cur); - if (branchEngine) - branchEngine->put(cur); return s; } @@ -95,7 +93,6 @@ void QMCUpdateBase::resetRun(BranchEngineType* brancher, EstimatorManagerBase* e { Estimators=est; branchEngine=brancher; - branchEngine->setEstimatorManager(est); NumPtcl = W.getTotalNum(); deltaR.resize(NumPtcl); drift.resize(NumPtcl); @@ -128,14 +125,6 @@ void QMCUpdateBase::resetRun(BranchEngineType* brancher, EstimatorManagerBase* e Traces = traces; } - -void QMCUpdateBase::resetEtrial(RealType et) -{ - //branchEngine->E_T=et; - branchEngine->setTrialEnergy(et,1.0); - branchEngine->flush(0); -} - void QMCUpdateBase::startRun(int blocks, bool record) { Estimators->start(blocks,record); diff --git a/src/QMCDrivers/QMCUpdateBase.h b/src/QMCDrivers/QMCUpdateBase.h index a0c0caa82..f7f0a6aae 100644 --- a/src/QMCDrivers/QMCUpdateBase.h +++ b/src/QMCDrivers/QMCUpdateBase.h @@ -137,8 +137,6 @@ public: /** stop a run */ void stopRun(); void stopRun2(); - /** reset the trial energy */ - void resetEtrial(RealType et); /** prepare to start a block * @param steps number of steps within the block @@ -272,7 +270,7 @@ protected: ///random number generator RandomGenerator_t& RandomGen; ///branch engine - BranchEngineType* branchEngine; + const BranchEngineType* branchEngine; ///estimator EstimatorManagerBase* Estimators; ///parameters diff --git a/src/QMCDrivers/RMC/RMCSingleOMP.cpp b/src/QMCDrivers/RMC/RMCSingleOMP.cpp index f26f98136..f3a95848b 100644 --- a/src/QMCDrivers/RMC/RMCSingleOMP.cpp +++ b/src/QMCDrivers/RMC/RMCSingleOMP.cpp @@ -106,7 +106,7 @@ namespace qmcplusplus if (Period4WalkerDump && now_loc % myPeriod4WalkerDump == 0) wClones[ip]->saveEnsemble (wit, wit_end); - branchEngine->collect (CurrentStep, W, branchClones); //Ray Clay: For now, collects and syncs based on first reptile. Need a better way to do this. + branchEngine->collect (CurrentStep, W); //Ray Clay: For now, collects and syncs based on first reptile. Need a better way to do this. } Movers[ip]->stopBlock (false); } //end-of-parallel for @@ -211,7 +211,6 @@ namespace qmcplusplus if (Movers.empty ()) { Movers.resize (NumThreads, 0); - branchClones.resize (NumThreads, 0); estimatorClones.resize (NumThreads, 0); traceClones.resize (NumThreads, 0); Rng.resize (NumThreads, 0); @@ -229,7 +228,6 @@ namespace qmcplusplus traceClones[ip] = Traces->makeClone (); #endif hClones[ip]->setRandomGenerator (Rng[ip]); - branchClones[ip] = new BranchEngineType (*branchEngine); if (QMCDriverMode[QMC_UPDATE_MODE]) { os << @@ -271,7 +269,7 @@ namespace qmcplusplus for (int ip = 0; ip < NumThreads; ++ip) { Movers[ip]->put (qmcNode); - Movers[ip]->resetRun (branchClones[ip], estimatorClones[ip], + Movers[ip]->resetRun (branchEngine, estimatorClones[ip], traceClones[ip]); // wClones[ip]->reptile = new Reptile(*wClones[ip], W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); wClones[ip]->reptile = W.ReptileList[ip]; @@ -316,7 +314,7 @@ namespace qmcplusplus { Movers[ip]->advanceWalkers (W.begin () + wPerNode[ip], W.begin () + wPerNode[ip + 1], false); - branchEngine->collect (CurrentStep, W, branchClones); + branchEngine->collect (CurrentStep, W); } } diff --git a/src/QMCDrivers/SimpleFixedNodeBranch.cpp b/src/QMCDrivers/SimpleFixedNodeBranch.cpp index 51fabbe5e..a47ee76bc 100644 --- a/src/QMCDrivers/SimpleFixedNodeBranch.cpp +++ b/src/QMCDrivers/SimpleFixedNodeBranch.cpp @@ -121,7 +121,6 @@ void SimpleFixedNodeBranch::start(const std::string& froot, bool append) MyEstimator->reset(); } -//void SimpleFixedNodeBranch::initWalkerController(MCWalkerConfiguration& walkers, RealType tau, bool fixW, bool killwalker) int SimpleFixedNodeBranch::initWalkerController(MCWalkerConfiguration& walkers, bool fixW, bool killwalker) { BranchMode.set(B_DMC,1);//set DMC @@ -180,7 +179,7 @@ int SimpleFixedNodeBranch::initWalkerController(MCWalkerConfiguration& walkers, //update the simulation parameters WalkerController->put(myNode); //assign current Eref and a large number for variance - WalkerController->setEnergyAndVariance(vParam[B_EREF],vParam[B_SIGMA2]); + WalkerController->setTrialEnergy(vParam[B_ETRIAL]); this->reset(); if(fromscratch) { @@ -371,24 +370,9 @@ void SimpleFixedNodeBranch::branch(int iter, MCWalkerConfiguration& walkers) MyEstimator->accumulate(walkers); } -/** perform branching - * - * Set the trial energy of clones - */ -void SimpleFixedNodeBranch::branch(int iter, MCWalkerConfiguration& walkers, std::vector& clones) -{ - branch(iter,walkers); - //synchronize it - for(int i=0; ivParam=vParam; - if((BranchMode[B_DMCSTAGE])&&(ToDoSteps==0)) - for(int i=0; iBranchMode=BranchMode; -} /** * */ - void SimpleFixedNodeBranch::collect(int iter, MCWalkerConfiguration& W) { //Update the current energy and accumulate. @@ -476,23 +460,9 @@ void SimpleFixedNodeBranch::collect(int iter, MCWalkerConfiguration& W) MyEstimator->accumulate(W); } -//Ray Clay: Have to come up with a better way to collect and sync up reptile copies. This is taken from DMC. See RMCSingleOMP - -void SimpleFixedNodeBranch::collect(int iter, MCWalkerConfiguration& W, std::vector& clones) -{ - collect(iter,W); - //synchronize it - for(int i=0; ivParam=vParam; - if((BranchMode[B_RMCSTAGE])&&(ToDoSteps==0)) - for(int i=0; iBranchMode=BranchMode; -} /** Calculates and saves various action components, also does necessary updates for running averages. * */ - - void SimpleFixedNodeBranch::reset() { //use effective time step of BranchInterval*Tau @@ -634,7 +604,6 @@ int SimpleFixedNodeBranch::resetRun(xmlNodePtr cur) WalkerController->put(myNode); ToDoSteps=iParam[B_WARMUPSTEPS]=(iParam[B_WARMUPSTEPS])?iParam[B_WARMUPSTEPS]:10; setBranchCutoff(vParam[B_SIGMA2],WalkerController->targetSigma,10); - WalkerController->setEnergyAndVariance(vParam[B_EREF],vParam[B_SIGMA2]); WalkerController->reset(); #ifdef QMC_CUDA reset(); // needed. Ye diff --git a/src/QMCDrivers/SimpleFixedNodeBranch.h b/src/QMCDrivers/SimpleFixedNodeBranch.h index cece1a545..122c7838e 100644 --- a/src/QMCDrivers/SimpleFixedNodeBranch.h +++ b/src/QMCDrivers/SimpleFixedNodeBranch.h @@ -359,33 +359,18 @@ struct SimpleFixedNodeBranch: public QMCTraits return vParam[B_TAUEFF]; } - inline void setTrialEnergy(RealType etot, RealType wtot=1.0) - { - vParam[B_EREF]=vParam[B_ETRIAL]=etot/wtot; - //Eref=Etrial=etot/wtot; - } - /** perform branching * @param iter current step * @param w Walker configuration */ void branch(int iter, MCWalkerConfiguration& w); - /** perform branching - * @param iter the iteration - * @param w the walker ensemble - * @param clones of the branch engine for OpenMP threads - */ - void branch(int iter, MCWalkerConfiguration& w, std::vector& clones); - /** update RMC counters and running averages. * @param iter the iteration * @param w the walker ensemble * @param clones of the branch engine for OpenMP threads */ - void collect(int iter, MCWalkerConfiguration& w); - void collect(int iter, MCWalkerConfiguration& w, std::vector& clones); /** restart averaging * @param counter Counter to determine the cummulative average will be reset. diff --git a/src/QMCDrivers/VMC/VMCLinearOptOMP.cpp b/src/QMCDrivers/VMC/VMCLinearOptOMP.cpp index 7d5e38f6b..107fca862 100644 --- a/src/QMCDrivers/VMC/VMCLinearOptOMP.cpp +++ b/src/QMCDrivers/VMC/VMCLinearOptOMP.cpp @@ -481,7 +481,6 @@ void VMCLinearOptOMP::resetRun() { Movers.resize(NumThreads,0); // CSMovers.resize(NumThreads,0); - branchClones.resize(NumThreads,0); estimatorClones.resize(NumThreads,0); traceClones.resize(NumThreads,0); Rng.resize(NumThreads,0); @@ -502,7 +501,6 @@ void VMCLinearOptOMP::resetRun() #endif Rng[ip]=new RandomGenerator_t(*(RandomNumberControl::Children[ip])); hClones[ip]->setRandomGenerator(Rng[ip]); - branchClones[ip] = new BranchEngineType(*branchEngine); if (QMCDriverMode[QMC_UPDATE_MODE]) { // if (UseDrift == "rn") @@ -526,7 +524,7 @@ void VMCLinearOptOMP::resetRun() // CSMovers[ip]= Movers[ip]=new VMCUpdatePbyP(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); // } - //Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip]); + //Movers[ip]->resetRun(branchEngine,estimatorClones[ip]); } else { @@ -549,7 +547,7 @@ void VMCLinearOptOMP::resetRun() // CSMovers[ip]= Movers[ip]=new VMCUpdateAll(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); // } - //Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip]); + //Movers[ip]->resetRun(branchEngine,estimatorClones[ip]); } if (ip==0) app_log() << os.str() << std::endl; @@ -570,8 +568,8 @@ void VMCLinearOptOMP::resetRun() int ip=omp_get_thread_num(); Movers[ip]->put(qmcNode); // CSMovers[ip]->put(qmcNode); - Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); -// CSMovers[ip]->resetRun(branchClones[ip],estimatorClones[ip]); + Movers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); +// CSMovers[ip]->resetRun(branchEngine,estimatorClones[ip]); if (QMCDriverMode[QMC_UPDATE_MODE]) Movers[ip]->initWalkersForPbyP(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); else diff --git a/src/QMCDrivers/VMC/VMCSingleOMP.cpp b/src/QMCDrivers/VMC/VMCSingleOMP.cpp index d4b6fb378..d4976d64d 100644 --- a/src/QMCDrivers/VMC/VMCSingleOMP.cpp +++ b/src/QMCDrivers/VMC/VMCSingleOMP.cpp @@ -157,7 +157,6 @@ void VMCSingleOMP::resetRun() { movers_created=true; Movers.resize(NumThreads,0); - branchClones.resize(NumThreads,0); estimatorClones.resize(NumThreads,0); traceClones.resize(NumThreads,0); Rng.resize(NumThreads,0); @@ -177,7 +176,6 @@ void VMCSingleOMP::resetRun() Rng[ip]=new RandomGenerator_t(*(RandomNumberControl::Children[ip])); hClones[ip]->setRandomGenerator(Rng[ip]); #endif - branchClones[ip] = new BranchEngineType(*branchEngine); if (QMCDriverMode[QMC_UPDATE_MODE]) { Movers[ip]=new VMCUpdatePbyP(*wClones[ip],*psiClones[ip],*hClones[ip],*Rng[ip]); @@ -235,7 +233,7 @@ void VMCSingleOMP::resetRun() { //int ip=omp_get_thread_num(); Movers[ip]->put(qmcNode); - Movers[ip]->resetRun(branchClones[ip],estimatorClones[ip],traceClones[ip]); + Movers[ip]->resetRun(branchEngine,estimatorClones[ip],traceClones[ip]); if (QMCDriverMode[QMC_UPDATE_MODE]) Movers[ip]->initWalkersForPbyP(W.begin()+wPerNode[ip],W.begin()+wPerNode[ip+1]); else diff --git a/src/QMCDrivers/WalkerControlBase.cpp b/src/QMCDrivers/WalkerControlBase.cpp index cfd8b5f4e..846d398c3 100644 --- a/src/QMCDrivers/WalkerControlBase.cpp +++ b/src/QMCDrivers/WalkerControlBase.cpp @@ -27,8 +27,7 @@ namespace qmcplusplus WalkerControlBase::WalkerControlBase(Communicate* c, bool rn) : MPIObjectBase(c), SwapMode(0), Nmin(1), Nmax(10) , MaxCopy(2), NumWalkersCreated(0), NumWalkersSent(0) - , targetEnergyBound(10), targetVar(2), targetSigma(10) - , dmcStream(0), WriteRN(rn) + , targetSigma(10), dmcStream(0), WriteRN(rn) { MyMethod=-1; //assign invalid method NumContexts=myComm->size(); @@ -560,7 +559,6 @@ bool WalkerControlBase::put(xmlNodePtr cur) int nw_target=0, nw_max=0; std::string nonblocking="yes"; ParameterSet params; - params.add(targetEnergyBound,"energyBound","double"); params.add(targetSigma,"sigmaBound","double"); params.add(MaxCopy,"maxCopy","int"); params.add(nw_target,"targetwalkers","int"); diff --git a/src/QMCDrivers/WalkerControlBase.h b/src/QMCDrivers/WalkerControlBase.h index 54b93aec8..bd6279583 100644 --- a/src/QMCDrivers/WalkerControlBase.h +++ b/src/QMCDrivers/WalkerControlBase.h @@ -94,16 +94,8 @@ public: IndexType NumWalkersSent; ///trial energy energy RealType trialEnergy; - ///target average energy - RealType targetAvg; - ///target average variance - RealType targetVar; ///target sigma to limit fluctuations of the trial energy RealType targetSigma; - ///bound of the energy window - RealType targetEnergyBound; - ///current variance - RealType curVar; ///number of particle per node std::vector NumPerNode; ///offset of the particle index @@ -179,15 +171,6 @@ public: return curData[i]; } - /** set the target average and variance - */ - inline void setEnergyAndVariance(RealType e, RealType v) - { - trialEnergy=e; - targetAvg=e; - targetVar=v; - } - /** update properties without branching */ int doNotBranch(int iter, MCWalkerConfiguration& W); diff --git a/src/QMCDrivers/tests/test_fixed_node_branch.cpp b/src/QMCDrivers/tests/test_fixed_node_branch.cpp index 897c68d11..18b227821 100644 --- a/src/QMCDrivers/tests/test_fixed_node_branch.cpp +++ b/src/QMCDrivers/tests/test_fixed_node_branch.cpp @@ -53,18 +53,9 @@ TEST_CASE("Fixed node branch", "[drivers][walker_control]") REQUIRE(fnb.getTau() == Approx(tau)); - fnb.advanceQMCCounter(); REQUIRE(fnb.iParam[SimpleFixedNodeBranch::B_COUNTER] == 0); - - fnb.setTrialEnergy(-4.0); - - REQUIRE(fnb.getEtrial() == Approx(-4.0)); - REQUIRE(fnb.getEref() == Approx(-4.0)); - - - // default is classic cutoff scheme //fnb.setBranchCutoff(); }