QMCPACK
CSUpdateBase Class Reference
+ Inheritance diagram for CSUpdateBase:
+ Collaboration diagram for CSUpdateBase:

Public Member Functions

 CSUpdateBase (MCWalkerConfiguration &w, std::vector< TrialWaveFunction *> &psi, std::vector< QMCHamiltonian *> &h, RandomBase< FullPrecRealType > &rg)
 
 ~CSUpdateBase () override
 
void computeSumRatio (const std::vector< RealType > &logpsi, const std::vector< RealType > &avgNorm, std::vector< RealType > &sumratio)
 
void computeSumRatio (const Matrix< RealType > &ratioij, std::vector< RealType > &sumratio)
 
void computeSumRatio (const std::vector< RealType > &logpsi, const std::vector< RealType > &avgNorm, Matrix< RealType > &ratioij, std::vector< RealType > &sumratio)
 
void updateRatioMatrix (const std::vector< RealType > &ratio_pbyp, Matrix< RealType > &ratioij)
 
void resizeWorkSpace (int nw, int nptcls)
 
void updateNorms ()
 
void updateAvgWeights ()
 
void initCSWalkers (WalkerIter_t it, WalkerIter_t it_end, bool resetNorms)
 
void initCSWalkersForPbyP (WalkerIter_t it, WalkerIter_t it_end, bool resetNorms)
 
void updateCSWalkers (WalkerIter_t it, WalkerIter_t it_end)
 
- Public Member Functions inherited from QMCUpdateBase
 QMCUpdateBase (MCWalkerConfiguration &w, TrialWaveFunction &psi, QMCHamiltonian &h, RandomBase< FullPrecRealType > &rg)
 Constructor. More...
 
 QMCUpdateBase (MCWalkerConfiguration &w, TrialWaveFunction &psi, TrialWaveFunction &guide, QMCHamiltonian &h, RandomBase< FullPrecRealType > &rg)
 Alt Constructor. More...
 
virtual ~QMCUpdateBase ()
 destructor More...
 
RealType acceptRatio () const
 
void resetRun (BranchEngineType *brancher, EstimatorManagerBase *est, TraceManager *traces, const DriftModifierBase *driftmodifer)
 reset the QMCUpdateBase parameters More...
 
void resetRun2 (BranchEngineType *brancher, EstimatorManagerBase *est, TraceManager *traces, WalkerLogCollector *wlog_collector_, const DriftModifierBase *driftmodifer)
 
RealType getTau ()
 
void setTau (RealType t)
 
RealType getSpinMass ()
 
void setSpinMass (RealType m)
 
void getLogs (std::vector< RealType > &logs)
 
void set_step (int step)
 
void startRun (int blocks, bool record)
 start a run More...
 
void stopRun ()
 stop a run More...
 
void stopRun2 ()
 
void startBlock (int steps)
 prepare to start a block More...
 
void stopBlock (bool collectall=true)
 stop a block More...
 
void setMultiplicity (WalkerIter_t it, WalkerIter_t it_end)
 set the multiplicity of the walkers to branch More...
 
void setMultiplicity (Walker_t &awalker) const
 
virtual void initWalkersForPbyP (WalkerIter_t it, WalkerIter_t it_end)
 initialize Walker buffers for PbyP update More...
 
virtual void initWalkers (WalkerIter_t it, WalkerIter_t it_end)
 initialize Walker for walker update More...
 
virtual bool put (xmlNodePtr cur)
 process options More...
 
void accumulate (WalkerIter_t it, WalkerIter_t it_end)
 
virtual void advanceWalkers (WalkerIter_t it, WalkerIter_t it_end, bool recompute)
 advance walkers executed at each step More...
 
virtual void advanceWalker (Walker_t &thisWalker, bool recompute)=0
 move a walker More...
 
virtual RealType advanceWalkerForEE (Walker_t &w1, std::vector< PosType > &dR, std::vector< int > &iats, std::vector< int > &rs, std::vector< RealType > &ratios)
 
int RMC_checkIndex (int N, int NMax)
 
void RMC_checkWalkerBounds (WalkerIter_t &it, WalkerIter_t first, WalkerIter_t last)
 
RealType logBackwardGF (const ParticleSet::ParticlePos &displ)
 

Public Attributes

int nPsi
 
bool useDrift
 
std::vector< RealTypelogpsi
 
std::vector< RealTypesumratio
 
std::vector< RealTypeinvsumratio
 
std::vector< RealTypeavgNorm
 
std::vector< RealTypeavgWeight
 
std::vector< RealTypelogNorm
 
std::vector< RealTypecumNorm
 
std::vector< RealTypeinstRij
 
std::vector< RealTyperatio
 
Matrix< RealTyperatioIJ
 
std::string useDriftOption
 
Matrix< RealTypeRatioIJ
 
CSEnergyEstimatormultiEstimator
 multiple estimator More...
 
std::vector< QMCHamiltonian * > H1
 a list of QMCHamiltonians for multiple method More...
 
std::vector< TrialWaveFunction * > Psi1
 a list of TrialWaveFunctions for multiple method More...
 
std::vector< ParticleSet::ParticleGradient * > G1
 
std::vector< ParticleSet::ParticleLaplacian * > L1
 
std::vector< GradTypeg1_old
 
std::vector< GradTypeg1_new
 
- Public Attributes inherited from QMCUpdateBase
int nSubSteps
 number of steps per measurement More...
 
DriverDebugChecks debug_checks_ = DriverDebugChecks::ALL_OFF
 determine additional checks for debugging purpose More...
 
std::string debug_checks_str_
 
IndexType MaxAge
 MaxAge>0 indicates branch is done. More...
 
IndexType nAccept
 counter for number of moves accepted More...
 
IndexType nReject
 counter for number of moves rejected More...
 
IndexType nAllRejected
 Total number of the steps when all the particle moves are rejected. More...
 
IndexType nNodeCrossing
 Total number of node crossings per block. More...
 
IndexType NonLocalMoveAccepted
 Total numer of non-local moves accepted. More...
 
RealType Tau
 timestep More...
 
RealType spinMass
 spin mass More...
 
bool UseDrift
 use Drift More...
 
RealType csoffset
 normalization offset for cs type runs. More...
 
TraceManagerTraces
 traces More...
 
WalkerLogCollectorwlog_collector
 

Additional Inherited Members

- Public Types inherited from QMCUpdateBase
using Walker_t = MCWalkerConfiguration::Walker_t
 
using WalkerIter_t = MCWalkerConfiguration::iterator
 
using BranchEngineType = SimpleFixedNodeBranch
 
using mPosType = PosType
 
using mTensorType = TensorType
 
- Public Types inherited from QMCTraits
enum  { DIM = OHMMS_DIM, DIM_VGL = OHMMS_DIM + 2 }
 
using QTBase = QMCTypes< OHMMS_PRECISION, DIM >
 
using QTFull = QMCTypes< OHMMS_PRECISION_FULL, DIM >
 
using RealType = QTBase::RealType
 
using ComplexType = QTBase::ComplexType
 
using ValueType = QTBase::ValueType
 
using PosType = QTBase::PosType
 
using GradType = QTBase::GradType
 
using TensorType = QTBase::TensorType
 
using IndexType = OHMMS_INDEXTYPE
 define other types More...
 
using FullPrecRealType = QTFull::RealType
 
using FullPrecValueType = QTFull::ValueType
 
using PropertySetType = RecordNamedProperty< FullPrecRealType >
 define PropertyList_t More...
 
using PtclGrpIndexes = std::vector< std::pair< int, int > >
 
- Protected Member Functions inherited from QMCUpdateBase
RealType getNodeCorrection (const ParticleSet::ParticleGradient &g, ParticleSet::ParticlePos &gscaled)
 evaluate the ratio of scaled velocity and velocity More...
 
 QMCUpdateBase (const QMCUpdateBase &)=delete
 copy constructor (disabled) More...
 
- Static Protected Member Functions inherited from QMCUpdateBase
static void checkLogAndGL (ParticleSet &pset, TrialWaveFunction &twf, const std::string_view location)
 check logpsi and grad and lap against values computed from scratch More...
 
- Protected Attributes inherited from QMCUpdateBase
bool UpdatePbyP
 update particle-by-particle More...
 
IndexType NumPtcl
 number of particles More...
 
RealType m_oneover2tau
 Time-step factor $ 1/(2\tau)$. More...
 
RealType m_sqrttau
 Time-step factor $ \sqrt{\tau}$. More...
 
RealType m_tauovermass
 tau/mass More...
 
RealType m_r2max
 maximum displacement^2 More...
 
MCWalkerConfigurationW
 walker ensemble More...
 
TrialWaveFunctionPsi
 trial function More...
 
TrialWaveFunctionGuide
 guide function More...
 
QMCHamiltonianH
 Hamiltonian. More...
 
RandomBase< FullPrecRealType > & RandomGen
 random number generator More...
 
const BranchEngineTypebranchEngine
 branch engine, stateless reference to the one in QMCDriver More...
 
const DriftModifierBaseDriftModifier
 drift modifer, stateless reference to the one in QMCDriver More...
 
EstimatorManagerBaseEstimators
 estimator More...
 
ParameterSet myParams
 parameters More...
 
std::vector< RealTypeMassInvS
 1/Mass per species More...
 
std::vector< RealTypeMassInvP
 1/Mass per particle More...
 
std::vector< RealTypeSqrtTauOverMass
 sqrt(tau/Mass) per particle More...
 
ParticleSet::ParticlePos drift
 temporary storage for drift More...
 
ParticleSet::ParticlePos deltaR
 temporary storage for random displacement More...
 
ParticleSet::ParticleScalar deltaS
 temporart storage for spin displacement More...
 
ParticleSet::ParticleGradient G
 storage for differential gradients for PbyP update More...
 
ParticleSet::ParticleGradient dG
 
ParticleSet::ParticleLaplacian L
 storage for differential laplacians for PbyP update More...
 
ParticleSet::ParticleLaplacian dL
 

Detailed Description

Definition at line 27 of file CSUpdateBase.h.

Constructor & Destructor Documentation

◆ CSUpdateBase()

CSUpdateBase ( MCWalkerConfiguration w,
std::vector< TrialWaveFunction *> &  psi,
std::vector< QMCHamiltonian *> &  h,
RandomBase< FullPrecRealType > &  rg 
)

Definition at line 29 of file CSUpdateBase.cpp.

References ParameterSet::add(), QMCUpdateBase::myParams, and CSUpdateBase::useDriftOption.

33  : QMCUpdateBase(w, *psipool[0], *hpool[0], rg), nPsi(0), useDriftOption("no"), H1(hpool), Psi1(psipool)
34 {
35  myParams.add(useDriftOption, "useDrift");
36 }
std::vector< TrialWaveFunction * > Psi1
a list of TrialWaveFunctions for multiple method
Definition: CSUpdateBase.h:57
QMCUpdateBase(MCWalkerConfiguration &w, TrialWaveFunction &psi, QMCHamiltonian &h, RandomBase< FullPrecRealType > &rg)
Constructor.
void add(PDT &aparam, const std::string &aname_in, std::vector< PDT > candidate_values={}, TagStatus status=TagStatus::OPTIONAL)
add a new parameter corresponding to an xmlNode <parameter>
ParameterSet myParams
parameters
std::vector< QMCHamiltonian * > H1
a list of QMCHamiltonians for multiple method
Definition: CSUpdateBase.h:55

◆ ~CSUpdateBase()

~CSUpdateBase ( )
override

Definition at line 38 of file CSUpdateBase.cpp.

References qmcplusplus::delete_iter(), CSUpdateBase::G1, and CSUpdateBase::L1.

39 {
40  delete_iter(G1.begin(), G1.end());
41  delete_iter(L1.begin(), L1.end());
42 }
void delete_iter(IT first, IT last)
delete the pointers in [first,last)
std::vector< ParticleSet::ParticleGradient * > G1
Definition: CSUpdateBase.h:59
std::vector< ParticleSet::ParticleLaplacian * > L1
Definition: CSUpdateBase.h:60

Member Function Documentation

◆ computeSumRatio() [1/3]

void computeSumRatio ( const std::vector< RealType > &  logpsi,
const std::vector< RealType > &  avgNorm,
std::vector< RealType > &  sumratio 
)

Definition at line 103 of file CSUpdateBase.cpp.

References qmcplusplus::exp(), and CSUpdateBase::nPsi.

Referenced by CSVMCUpdatePbyP::advanceWalker().

106 {
107  for (int ipsi = 0; ipsi < nPsi; ipsi++)
108  sumrat[ipsi] = 1.0;
109 
110  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
111  {
112  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++)
113  {
114  RealType ratioij = avnorm[ipsi] / avnorm[jpsi] * std::exp(2.0 * (lpsi[jpsi] - lpsi[ipsi]));
115  sumrat[ipsi] += ratioij;
116  sumrat[jpsi] += 1.0 / ratioij;
117  }
118  }
119 }
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
QMCTraits::RealType RealType

◆ computeSumRatio() [2/3]

void computeSumRatio ( const Matrix< RealType > &  ratioij,
std::vector< RealType > &  sumratio 
)

Definition at line 147 of file CSUpdateBase.cpp.

References CSUpdateBase::nPsi.

148 {
149  for (int ipsi = 0; ipsi < nPsi; ipsi++)
150  sumrat[ipsi] = 1.0;
151 
152  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
153  {
154  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++)
155  {
156  sumrat[ipsi] += Ratioij[ipsi][jpsi];
157  sumrat[jpsi] += Ratioij[jpsi][ipsi];
158  }
159  }
160 }

◆ computeSumRatio() [3/3]

void computeSumRatio ( const std::vector< RealType > &  logpsi,
const std::vector< RealType > &  avgNorm,
Matrix< RealType > &  ratioij,
std::vector< RealType > &  sumratio 
)

Definition at line 123 of file CSUpdateBase.cpp.

References qmcplusplus::exp(), and CSUpdateBase::nPsi.

127 {
128  for (int ipsi = 0; ipsi < nPsi; ipsi++)
129  {
130  sumrat[ipsi] = 1.0;
131  Ratioij[ipsi][ipsi] = 1.0;
132  }
133 
134  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
135  {
136  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++)
137  {
138  Ratioij[ipsi][jpsi] = avnorm[ipsi] / avnorm[jpsi] * std::exp(2.0 * (lpsi[jpsi] - lpsi[ipsi]));
139  Ratioij[jpsi][ipsi] = 1.0 / Ratioij[ipsi][jpsi];
140  sumrat[ipsi] += Ratioij[ipsi][jpsi];
141  sumrat[jpsi] += Ratioij[jpsi][ipsi];
142  }
143  }
144 }
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)

◆ initCSWalkers()

void initCSWalkers ( WalkerIter_t  it,
WalkerIter_t  it_end,
bool  resetNorms 
)

thisWalker.Drift=0.0; if(useDrift) { for(int ipsi=0; ipsi< nPsi; ipsi++) PAOps<RealType,DIM>::axpy(invsumratio[ipsi],Psi1[ipsi]->G,thisWalker.Drift); setScaledDrift(Tau,thisWalker.Drift); }

Definition at line 180 of file CSUpdateBase.cpp.

References qmcplusplus::app_error(), CSUpdateBase::avgNorm, CSUpdateBase::cumNorm, qmcplusplus::Units::charge::e, qmcplusplus::exp(), ParticleSet::G, Walker< t_traits, p_traits >::getPropertyBase(), ParticleSet::getTotalNum(), CSUpdateBase::H1, CSUpdateBase::invsumratio, CSUpdateBase::logNorm, CSUpdateBase::logpsi, Walker< t_traits, p_traits >::Multiplicity, CSUpdateBase::nPsi, Walker< t_traits, p_traits >::Properties, CSUpdateBase::Psi1, ParticleSet::R, Walker< t_traits, p_traits >::R, CSUpdateBase::ratioIJ, CSUpdateBase::resizeWorkSpace(), CSUpdateBase::sumratio, ParticleSet::update(), CSUpdateBase::useDrift, CSUpdateBase::useDriftOption, and QMCUpdateBase::W.

181 {
182  nPsi = Psi1.size();
183  useDrift = (useDriftOption == "yes");
184  if (nPsi == 0)
185  {
186  app_error() << " CSUpdateBase::initCSWalkers fails. Empyty Psi/H pairs" << std::endl;
187  abort(); //FIX_ABORT
188  }
189  int nw = it_end - it; //W.getActiveWalkers();
191  if (resetNorms)
192  logNorm.resize(nPsi, 0.0);
193  for (int ipsi = 0; ipsi < nPsi; ipsi++)
194  avgNorm[ipsi] = std::exp(logNorm[ipsi]);
195  int iw(0);
196  while (it != it_end)
197  {
198  Walker_t& thisWalker(**it);
199  W.R = thisWalker.R;
200 
201  W.update();
202  //evalaute the wavefunction and hamiltonian
203  for (int ipsi = 0; ipsi < nPsi; ipsi++)
204  {
205  logpsi[ipsi] = Psi1[ipsi]->evaluateLog(W);
206  Psi1[ipsi]->G = W.G;
207  thisWalker.Properties(ipsi, WP::LOGPSI) = logpsi[ipsi];
208  RealType e = thisWalker.Properties(ipsi, WP::LOCALENERGY) = H1[ipsi]->evaluate(W);
209  H1[ipsi]->saveProperty(thisWalker.getPropertyBase(ipsi));
210  sumratio[ipsi] = 1.0;
211  }
212  //Check SIMONE's note
213  //Compute the sum over j of Psi^2[j]/Psi^2[i] for each i
214  int indexij(0);
215  RealType* restrict rPtr = ratioIJ[iw];
216  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
217  {
218  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++)
219  {
220  RealType r = std::exp(2.0 * (logpsi[jpsi] - logpsi[ipsi]));
221  rPtr[indexij++] = r * avgNorm[ipsi] / avgNorm[jpsi];
222  sumratio[ipsi] += r;
223  sumratio[jpsi] += 1.0 / r;
224  }
225  }
226  //Re-use Multiplicity as the sumratio
227  thisWalker.Multiplicity = sumratio[0];
228  for (int ipsi = 0; ipsi < nPsi; ipsi++)
229  {
230  thisWalker.Properties(ipsi, WP::UMBRELLAWEIGHT) = invsumratio[ipsi] = 1.0 / sumratio[ipsi];
231  cumNorm[ipsi] += 1.0 / sumratio[ipsi];
232  }
233  //DON't forget DRIFT!!!
234  /// thisWalker.Drift=0.0;
235  /// if(useDrift)
236  /// {
237  /// for(int ipsi=0; ipsi< nPsi; ipsi++)
238  /// PAOps<RealType,DIM>::axpy(invsumratio[ipsi],Psi1[ipsi]->G,thisWalker.Drift);
239  /// setScaledDrift(Tau,thisWalker.Drift);
240  /// }
241  ++it;
242  ++iw;
243  }
244 }
std::vector< RealType > logNorm
Definition: CSUpdateBase.h:44
std::vector< RealType > sumratio
Definition: CSUpdateBase.h:40
std::vector< RealType > cumNorm
Definition: CSUpdateBase.h:45
size_t getTotalNum() const
Definition: ParticleSet.h:493
std::ostream & app_error()
Definition: OutputManager.h:67
MCWalkerConfiguration::Walker_t Walker_t
Definition: QMCUpdateBase.h:44
void update(bool skipSK=false)
update the internal data
std::vector< TrialWaveFunction * > Psi1
a list of TrialWaveFunctions for multiple method
Definition: CSUpdateBase.h:57
void resizeWorkSpace(int nw, int nptcls)
std::vector< RealType > logpsi
Definition: CSUpdateBase.h:39
std::vector< RealType > invsumratio
Definition: CSUpdateBase.h:41
ParticleGradient G
gradients of the particles
Definition: ParticleSet.h:83
ParticlePos R
Position.
Definition: ParticleSet.h:79
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
MCWalkerConfiguration & W
walker ensemble
QMCTraits::RealType RealType
std::vector< RealType > avgNorm
Definition: CSUpdateBase.h:42
Matrix< RealType > ratioIJ
Definition: CSUpdateBase.h:48
std::vector< QMCHamiltonian * > H1
a list of QMCHamiltonians for multiple method
Definition: CSUpdateBase.h:55

◆ initCSWalkersForPbyP()

void initCSWalkersForPbyP ( WalkerIter_t  it,
WalkerIter_t  it_end,
bool  resetNorms 
)

Definition at line 246 of file CSUpdateBase.cpp.

References PooledMemory< T_scalar, Alloc >::allocate(), qmcplusplus::app_log(), CSUpdateBase::avgNorm, PooledMemory< T_scalar, Alloc >::clear(), CSUpdateBase::cumNorm, Walker< t_traits, p_traits >::DataSet, qmcplusplus::exp(), ParticleSet::G, CSUpdateBase::G1, Walker< t_traits, p_traits >::getPropertyBase(), ParticleSet::getTotalNum(), CSUpdateBase::H1, CSUpdateBase::invsumratio, ParticleSet::L, Walker< t_traits, p_traits >::L, CSUpdateBase::L1, CSUpdateBase::logNorm, CSUpdateBase::logpsi, Walker< t_traits, p_traits >::Multiplicity, CSUpdateBase::nPsi, qmcplusplus::print_mem(), Walker< t_traits, p_traits >::Properties, CSUpdateBase::Psi1, ParticleSet::R, Walker< t_traits, p_traits >::R, CSUpdateBase::ratio, CSUpdateBase::ratioIJ, Walker< t_traits, p_traits >::registerData(), CSUpdateBase::resizeWorkSpace(), PooledMemory< T_scalar, Alloc >::rewind(), CSUpdateBase::sumratio, ParticleSet::update(), QMCUpdateBase::UpdatePbyP, and QMCUpdateBase::W.

247 {
248  UpdatePbyP = true;
249  nPsi = Psi1.size();
250  int nw = it_end - it;
251  int iw(0);
253  //ratio is for temporary holding of psi_i(...r'...)/psi_i(...r...).
254  ratio.resize(nPsi, 1.0);
255 
256  if (resetNorms)
257  logNorm.resize(nPsi, 0.0);
258  for (int ipsi = 0; ipsi < nPsi; ipsi++)
259  avgNorm[ipsi] = std::exp(logNorm[ipsi]);
260 
261  for (; it != it_end; ++it)
262  {
263  Walker_t& awalker(**it);
264  W.R = awalker.R;
265  W.update(true);
266  //W.loadWalker(awalker,UpdatePbyP);
267  // if (awalker.MDataSet.size()!=nPsi)
268  // awalker.MultDataSet.resize(nPsi);
269 
270  awalker.DataSet.clear();
271  awalker.DataSet.rewind();
272  awalker.registerData();
273  for (int ipsi = 0; ipsi < nPsi; ipsi++)
274  {
275  Psi1[ipsi]->registerData(W, awalker.DataSet);
276  }
277  awalker.DataSet.allocate();
278  for (int ipsi = 0; ipsi < nPsi; ipsi++)
279  {
280  Psi1[ipsi]->copyFromBuffer(W, awalker.DataSet);
281  Psi1[ipsi]->evaluateLog(W);
282  logpsi[ipsi] = Psi1[ipsi]->updateBuffer(W, awalker.DataSet, false);
283  Psi1[ipsi]->G = W.G;
284  *G1[ipsi] = W.G;
285  Psi1[ipsi]->L = W.L;
286  *L1[ipsi] = W.L;
287 
288  awalker.Properties(ipsi, WP::LOGPSI) = logpsi[ipsi];
289  awalker.Properties(ipsi, WP::LOCALENERGY) = H1[ipsi]->evaluate(W);
290  H1[ipsi]->saveProperty(awalker.getPropertyBase(ipsi));
291  sumratio[ipsi] = 1.0;
292  }
293  awalker.G = W.G;
294  awalker.L = W.L;
295  // randomize(awalker);
296 
297  int indexij(0);
298  RealType* rPtr = ratioIJ[iw++];
299  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
300  {
301  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++, indexij++)
302  {
303  RealType r = std::exp(2.0 * (logpsi[jpsi] - logpsi[ipsi]));
304  //rPtr[indexij++]=r*avgNorm[ipsi]/avgNorm[jpsi];
305  rPtr[indexij] = r * avgNorm[ipsi] / avgNorm[jpsi];
306  sumratio[ipsi] += r;
307  sumratio[jpsi] += 1.0 / r;
308  }
309  }
310  //Re-use Multiplicity as the sumratio
311  awalker.Multiplicity = sumratio[0];
312  for (int ipsi = 0; ipsi < nPsi; ipsi++)
313  {
314  awalker.Properties(ipsi, WP::UMBRELLAWEIGHT) = invsumratio[ipsi] = 1.0 / sumratio[ipsi];
315  cumNorm[ipsi] += 1.0 / sumratio[ipsi];
316  }
317  }
318 #pragma omp master
319  print_mem("Memory Usage after the buffer registration", app_log());
320 }
std::vector< RealType > logNorm
Definition: CSUpdateBase.h:44
std::vector< RealType > sumratio
Definition: CSUpdateBase.h:40
std::vector< RealType > cumNorm
Definition: CSUpdateBase.h:45
size_t getTotalNum() const
Definition: ParticleSet.h:493
std::ostream & app_log()
Definition: OutputManager.h:65
MCWalkerConfiguration::Walker_t Walker_t
Definition: QMCUpdateBase.h:44
void update(bool skipSK=false)
update the internal data
ParticleLaplacian L
laplacians of the particles
Definition: ParticleSet.h:85
std::vector< TrialWaveFunction * > Psi1
a list of TrialWaveFunctions for multiple method
Definition: CSUpdateBase.h:57
void print_mem(const std::string &title, std::ostream &log)
Definition: MemoryUsage.cpp:30
void resizeWorkSpace(int nw, int nptcls)
std::vector< RealType > logpsi
Definition: CSUpdateBase.h:39
std::vector< RealType > invsumratio
Definition: CSUpdateBase.h:41
ParticleGradient G
gradients of the particles
Definition: ParticleSet.h:83
ParticlePos R
Position.
Definition: ParticleSet.h:79
std::vector< ParticleSet::ParticleGradient * > G1
Definition: CSUpdateBase.h:59
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
MCWalkerConfiguration & W
walker ensemble
QMCTraits::RealType RealType
std::vector< RealType > ratio
Definition: CSUpdateBase.h:47
std::vector< RealType > avgNorm
Definition: CSUpdateBase.h:42
std::vector< ParticleSet::ParticleLaplacian * > L1
Definition: CSUpdateBase.h:60
Matrix< RealType > ratioIJ
Definition: CSUpdateBase.h:48
std::vector< QMCHamiltonian * > H1
a list of QMCHamiltonians for multiple method
Definition: CSUpdateBase.h:55
bool UpdatePbyP
update particle-by-particle

◆ resizeWorkSpace()

void resizeWorkSpace ( int  nw,
int  nptcls 
)

Definition at line 44 of file CSUpdateBase.cpp.

References CSUpdateBase::avgNorm, CSUpdateBase::avgWeight, CSUpdateBase::cumNorm, QMCUpdateBase::dG, CSUpdateBase::G1, CSUpdateBase::g1_new, CSUpdateBase::g1_old, CSUpdateBase::instRij, CSUpdateBase::invsumratio, CSUpdateBase::L1, CSUpdateBase::logNorm, CSUpdateBase::logpsi, CSUpdateBase::nPsi, CSUpdateBase::Psi1, CSUpdateBase::ratio, CSUpdateBase::ratioIJ, CSUpdateBase::RatioIJ, Matrix< T, Alloc >::resize(), and CSUpdateBase::sumratio.

Referenced by CSUpdateBase::initCSWalkers(), and CSUpdateBase::initCSWalkersForPbyP().

45 {
46  if (logpsi.size())
47  return;
48  logpsi.resize(nPsi);
49  ratio.resize(nPsi);
50  sumratio.resize(nPsi);
51  invsumratio.resize(nPsi);
52  avgNorm.resize(nPsi, 1.0);
53  logNorm.resize(nPsi, 0.0);
54  cumNorm.resize(nPsi, 0.0);
55  avgWeight.resize(nPsi, 1.0);
56  instRij.resize(nPsi * (nPsi - 1) / 2);
57  ratioIJ.resize(nw, nPsi * (nPsi - 1) / 2);
59  dG.resize(nptcls);
60 
61  g1_new.resize(nPsi);
62  g1_old.resize(nPsi);
63 
64  for (int ipsi = 0; ipsi < nPsi; ipsi++)
65  {
66  Psi1[ipsi]->G.resize(nptcls);
67  Psi1[ipsi]->L.resize(nptcls);
68  G1.push_back(new ParticleSet::ParticleGradient(nptcls));
69  L1.push_back(new ParticleSet::ParticleLaplacian(nptcls));
70  }
71 }
std::vector< RealType > logNorm
Definition: CSUpdateBase.h:44
std::vector< RealType > sumratio
Definition: CSUpdateBase.h:40
std::vector< RealType > cumNorm
Definition: CSUpdateBase.h:45
ParticleAttrib< QTFull::ValueType > ParticleLaplacian
Definition: Configuration.h:96
void resize(size_type n, size_type m)
Resize the container.
Definition: OhmmsMatrix.h:99
std::vector< RealType > avgWeight
Definition: CSUpdateBase.h:43
std::vector< TrialWaveFunction * > Psi1
a list of TrialWaveFunctions for multiple method
Definition: CSUpdateBase.h:57
std::vector< RealType > logpsi
Definition: CSUpdateBase.h:39
std::vector< RealType > invsumratio
Definition: CSUpdateBase.h:41
std::vector< ParticleSet::ParticleGradient * > G1
Definition: CSUpdateBase.h:59
Matrix< RealType > RatioIJ
Definition: CSUpdateBase.h:51
std::vector< GradType > g1_old
Definition: CSUpdateBase.h:63
std::vector< RealType > instRij
Definition: CSUpdateBase.h:46
std::vector< GradType > g1_new
Definition: CSUpdateBase.h:64
std::vector< RealType > ratio
Definition: CSUpdateBase.h:47
std::vector< RealType > avgNorm
Definition: CSUpdateBase.h:42
ParticleAttrib< QTFull::GradType > ParticleGradient
Definition: Configuration.h:95
std::vector< ParticleSet::ParticleLaplacian * > L1
Definition: CSUpdateBase.h:60
Matrix< RealType > ratioIJ
Definition: CSUpdateBase.h:48
ParticleSet::ParticleGradient dG

◆ updateAvgWeights()

void updateAvgWeights ( )

Definition at line 91 of file CSUpdateBase.cpp.

References CSUpdateBase::avgWeight, CSUpdateBase::cumNorm, and CSUpdateBase::nPsi.

92 {
93  RealType winv = 1.0 / double(std::accumulate(cumNorm.begin(), cumNorm.end(), 0.0));
94  for (int ipsi = 0; ipsi < nPsi; ipsi++)
95  {
96  avgWeight[ipsi] = cumNorm[ipsi] * winv;
97  // app_log()<<ipsi<<" "<<avgWeight[ipsi]<< std::endl;
98  // avgNorm[ipsi]=0.5;
99  cumNorm[ipsi] = 0;
100  }
101 }
std::vector< RealType > cumNorm
Definition: CSUpdateBase.h:45
std::vector< RealType > avgWeight
Definition: CSUpdateBase.h:43
QMCTraits::RealType RealType

◆ updateCSWalkers()

void updateCSWalkers ( WalkerIter_t  it,
WalkerIter_t  it_end 
)

thisWalker.Drift=0.0; if(useDrift) { for(int ipsi=0; ipsi< nPsi; ipsi++) PAOps<RealType,DIM>::axpy(invsumratio[ipsi],Psi1[ipsi]->G,thisWalker.Drift); setScaledDrift(Tau,thisWalker.Drift); }

Definition at line 322 of file CSUpdateBase.cpp.

References CSUpdateBase::avgNorm, qmcplusplus::exp(), ParticleSet::G, Walker< t_traits, p_traits >::getPropertyBase(), CSUpdateBase::H1, CSUpdateBase::invsumratio, CSUpdateBase::logpsi, Walker< t_traits, p_traits >::Multiplicity, CSUpdateBase::nPsi, Walker< t_traits, p_traits >::Properties, CSUpdateBase::Psi1, CSUpdateBase::ratioIJ, CSUpdateBase::sumratio, and QMCUpdateBase::W.

323 {
324  int iw = 0;
325  while (it != it_end)
326  {
327  Walker_t& thisWalker(**it);
328  Walker_t::WFBuffer_t& w_buffer((*it)->DataSet);
329  //app_log()<<"DAMN. YOU FOUND ME. (updateCSWalkers called)\n";
330  // w_buffer.rewind();
331  // W.updateBuffer(**it,w_buffer);
332  //evalaute the wavefunction and hamiltonian
333  for (int ipsi = 0; ipsi < nPsi; ipsi++)
334  {
335  //Need to modify the return value of WaveFunctionComponent::registerData
336  logpsi[ipsi] = Psi1[ipsi]->updateBuffer(W, (*it)->DataSet);
337  Psi1[ipsi]->G = W.G;
338  thisWalker.Properties(ipsi, WP::LOGPSI) = logpsi[ipsi];
339  thisWalker.Properties(ipsi, WP::LOCALENERGY) = H1[ipsi]->evaluate(W);
340  H1[ipsi]->saveProperty(thisWalker.getPropertyBase(ipsi));
341  sumratio[ipsi] = 1.0;
342  }
343  int indexij(0);
344  RealType* rPtr = ratioIJ[iw];
345  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
346  {
347  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++)
348  {
349  RealType r = std::exp(2.0 * (logpsi[jpsi] - logpsi[ipsi]));
350  rPtr[indexij++] = r * avgNorm[ipsi] / avgNorm[jpsi];
351  sumratio[ipsi] += r;
352  sumratio[jpsi] += 1.0 / r;
353  }
354  }
355  //Re-use Multiplicity as the sumratio
356  thisWalker.Multiplicity = sumratio[0];
357  for (int ipsi = 0; ipsi < nPsi; ipsi++)
358  {
359  thisWalker.Properties(ipsi, WP::UMBRELLAWEIGHT) = invsumratio[ipsi] = 1.0 / sumratio[ipsi];
360  }
361  //DON't forget DRIFT!!!
362  /// thisWalker.Drift=0.0;
363  /// if(useDrift)
364  /// {
365  /// for(int ipsi=0; ipsi< nPsi; ipsi++)
366  /// PAOps<RealType,DIM>::axpy(invsumratio[ipsi],Psi1[ipsi]->G,thisWalker.Drift);
367  /// setScaledDrift(Tau,thisWalker.Drift);
368  /// }
369  ++it;
370  ++iw;
371  }
372 }
std::vector< RealType > sumratio
Definition: CSUpdateBase.h:40
MCWalkerConfiguration::Walker_t Walker_t
Definition: QMCUpdateBase.h:44
std::vector< TrialWaveFunction * > Psi1
a list of TrialWaveFunctions for multiple method
Definition: CSUpdateBase.h:57
PooledMemory< FullPrecRealType > WFBuffer_t
Definition: Walker.h:80
std::vector< RealType > logpsi
Definition: CSUpdateBase.h:39
std::vector< RealType > invsumratio
Definition: CSUpdateBase.h:41
ParticleGradient G
gradients of the particles
Definition: ParticleSet.h:83
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
MCWalkerConfiguration & W
walker ensemble
QMCTraits::RealType RealType
std::vector< RealType > avgNorm
Definition: CSUpdateBase.h:42
Matrix< RealType > ratioIJ
Definition: CSUpdateBase.h:48
std::vector< QMCHamiltonian * > H1
a list of QMCHamiltonians for multiple method
Definition: CSUpdateBase.h:55

◆ updateNorms()

void updateNorms ( )

Definition at line 73 of file CSUpdateBase.cpp.

References CSUpdateBase::avgNorm, CSUpdateBase::cumNorm, qmcplusplus::log(), CSUpdateBase::logNorm, and CSUpdateBase::nPsi.

74 {
75  //for(int ipsi=0; ipsi< nPsi; ipsi++)
76  // cumNorm[ipsi]+=multiEstimator->getUmbrellaWeight(ipsi);
77  //if(block==(equilBlocks-1) || block==(nBlocks-1)){
78  // app_log()<<"Inside UpdateNorm\n";
79  RealType winv = 1.0 / double(std::accumulate(cumNorm.begin(), cumNorm.end(), 0.0));
80  for (int ipsi = 0; ipsi < nPsi; ipsi++)
81  {
82  avgNorm[ipsi] = cumNorm[ipsi] * winv;
83  // avgNorm[ipsi]=0.5;
84  logNorm[ipsi] = std::log(avgNorm[ipsi]);
85  // app_log()<<ipsi<<" "<<avgNorm[ipsi]<<" "<<logNorm[ipsi]<<" "<<winv<< std::endl;
86  cumNorm[ipsi] = 0;
87  }
88 
89  //}
90 }
std::vector< RealType > logNorm
Definition: CSUpdateBase.h:44
std::vector< RealType > cumNorm
Definition: CSUpdateBase.h:45
MakeReturn< UnaryNode< FnLog, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t log(const Vector< T1, C1 > &l)
QMCTraits::RealType RealType
std::vector< RealType > avgNorm
Definition: CSUpdateBase.h:42

◆ updateRatioMatrix()

void updateRatioMatrix ( const std::vector< RealType > &  ratio_pbyp,
Matrix< RealType > &  ratioij 
)

Definition at line 164 of file CSUpdateBase.cpp.

References CSUpdateBase::nPsi.

Referenced by CSVMCUpdatePbyP::advanceWalker().

165 {
166  for (int ipsi = 0; ipsi < nPsi; ipsi++)
167  Ratioij[ipsi][ipsi] = 1.0;
168 
169  for (int ipsi = 0; ipsi < nPsi - 1; ipsi++)
170  {
171  for (int jpsi = ipsi + 1; jpsi < nPsi; jpsi++)
172  {
173  Ratioij[ipsi][jpsi] = Ratioij[ipsi][jpsi] * ratio_i[jpsi] / ratio_i[ipsi];
174  Ratioij[jpsi][ipsi] = 1.0 / Ratioij[ipsi][jpsi];
175  }
176  }
177 }

Member Data Documentation

◆ avgNorm

◆ avgWeight

std::vector<RealType> avgWeight

Definition at line 43 of file CSUpdateBase.h.

Referenced by CSUpdateBase::resizeWorkSpace(), and CSUpdateBase::updateAvgWeights().

◆ cumNorm

◆ G1

◆ g1_new

std::vector<GradType> g1_new

Definition at line 64 of file CSUpdateBase.h.

Referenced by CSUpdateBase::resizeWorkSpace().

◆ g1_old

std::vector<GradType> g1_old

Definition at line 63 of file CSUpdateBase.h.

Referenced by CSUpdateBase::resizeWorkSpace().

◆ H1

◆ instRij

std::vector<RealType> instRij

Definition at line 46 of file CSUpdateBase.h.

Referenced by CSUpdateBase::resizeWorkSpace().

◆ invsumratio

◆ L1

◆ logNorm

◆ logpsi

◆ multiEstimator

CSEnergyEstimator* multiEstimator

multiple estimator

Definition at line 53 of file CSUpdateBase.h.

◆ nPsi

◆ Psi1

◆ ratio

◆ ratioIJ

◆ RatioIJ

Matrix<RealType> RatioIJ

Definition at line 51 of file CSUpdateBase.h.

Referenced by CSVMCUpdatePbyP::advanceWalker(), and CSUpdateBase::resizeWorkSpace().

◆ sumratio

◆ useDrift

bool useDrift

Definition at line 38 of file CSUpdateBase.h.

Referenced by CSUpdateBase::initCSWalkers().

◆ useDriftOption

std::string useDriftOption

Definition at line 49 of file CSUpdateBase.h.

Referenced by CSUpdateBase::CSUpdateBase(), and CSUpdateBase::initCSWalkers().


The documentation for this class was generated from the following files: