30 std::vector<TrialWaveFunction*>& psipool,
31 std::vector<QMCHamiltonian*>& hpool,
33 :
QMCUpdateBase(w, *psipool[0], *hpool[0], rg), nPsi(0), useDriftOption(
"no"), H1(hpool), Psi1(psipool)
64 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
66 Psi1[ipsi]->G.resize(nptcls);
67 Psi1[ipsi]->L.resize(nptcls);
80 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
94 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
104 const std::vector<RealType>& avnorm,
105 std::vector<RealType>& sumrat)
107 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
110 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
112 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++)
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;
124 const std::vector<RealType>& avnorm,
126 std::vector<RealType>& sumrat)
128 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
131 Ratioij[ipsi][ipsi] = 1.0;
134 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
136 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++)
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];
149 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
152 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
154 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++)
156 sumrat[ipsi] += Ratioij[ipsi][jpsi];
157 sumrat[jpsi] += Ratioij[jpsi][ipsi];
166 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
167 Ratioij[ipsi][ipsi] = 1.0;
169 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
171 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++)
173 Ratioij[ipsi][jpsi] = Ratioij[ipsi][jpsi] * ratio_i[jpsi] / ratio_i[ipsi];
174 Ratioij[jpsi][ipsi] = 1.0 / Ratioij[ipsi][jpsi];
186 app_error() <<
" CSUpdateBase::initCSWalkers fails. Empyty Psi/H pairs" << std::endl;
189 int nw = it_end - it;
193 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
203 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
216 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
218 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++)
228 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
250 int nw = it_end - it;
258 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
261 for (; it != it_end; ++it)
273 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
278 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
281 Psi1[ipsi]->evaluateLog(
W);
289 awalker.
Properties(ipsi, WP::LOCALENERGY) =
H1[ipsi]->evaluate(
W);
299 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
301 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++, indexij++)
312 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
333 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
336 logpsi[ipsi] =
Psi1[ipsi]->updateBuffer(
W, (*it)->DataSet);
339 thisWalker.
Properties(ipsi, WP::LOCALENERGY) =
H1[ipsi]->evaluate(
W);
345 for (
int ipsi = 0; ipsi <
nPsi - 1; ipsi++)
347 for (
int jpsi = ipsi + 1; jpsi <
nPsi; jpsi++)
357 for (
int ipsi = 0; ipsi <
nPsi; ipsi++)
std::vector< RealType > logNorm
void initCSWalkers(WalkerIter_t it, WalkerIter_t it_end, bool resetNorms)
std::vector< RealType > sumratio
PropertyContainer_t Properties
scalar properties of a walker
Base class for update methods for each step.
std::vector< RealType > cumNorm
WFBuffer_t DataSet
buffer for the data for particle-by-particle update
A set of walkers that are to be advanced by Metropolis Monte Carlo.
MCWalkerConfiguration::iterator WalkerIter_t
void delete_iter(IT first, IT last)
delete the pointers in [first,last)
helper functions for EinsplineSetBuilder
void computeSumRatio(const std::vector< RealType > &logpsi, const std::vector< RealType > &avgNorm, std::vector< RealType > &sumratio)
CSUpdateBase(MCWalkerConfiguration &w, std::vector< TrialWaveFunction *> &psi, std::vector< QMCHamiltonian *> &h, RandomBase< FullPrecRealType > &rg)
size_t getTotalNum() const
std::ostream & app_error()
void updateRatioMatrix(const std::vector< RealType > &ratio_pbyp, Matrix< RealType > &ratioij)
void allocate()
allocate the data
void resize(size_type n, size_type m)
Resize the container.
void update(bool skipSK=false)
update the internal data
Attaches a unit to a Vector for IO.
ParticleLaplacian L
laplacians of the particles
Definition of CSVUpdateBase.
std::vector< RealType > avgWeight
std::vector< TrialWaveFunction * > Psi1
a list of TrialWaveFunctions for multiple method
void print_mem(const std::string &title, std::ostream &log)
void resizeWorkSpace(int nw, int nptcls)
std::vector< RealType > logpsi
WalkerProperties::Indexes WP
void updateCSWalkers(WalkerIter_t it, WalkerIter_t it_end)
std::vector< RealType > invsumratio
ParticleGradient G
gradients of the particles
std::vector< ParticleSet::ParticleGradient * > G1
Matrix< RealType > RatioIJ
MakeReturn< UnaryNode< FnExp, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t exp(const Vector< T1, C1 > &l)
std::vector< GradType > g1_old
void initCSWalkersForPbyP(WalkerIter_t it, WalkerIter_t it_end, bool resetNorms)
MCWalkerConfiguration & W
walker ensemble
std::string useDriftOption
std::vector< RealType > instRij
MakeReturn< UnaryNode< FnLog, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t log(const Vector< T1, C1 > &l)
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>
std::vector< GradType > g1_new
Indexes
an enum denoting index of physical properties
std::vector< RealType > ratio
std::vector< RealType > avgNorm
ParticleAttrib< QTFull::GradType > ParticleGradient
std::vector< ParticleSet::ParticleLaplacian * > L1
Matrix< RealType > ratioIJ
FullPrecRealType * getPropertyBase()
ParticleSet::ParticleGradient dG
FullPrecRealType Multiplicity
Number of copies for branching When Multiplicity = 0, this walker will be destroyed.
void clear()
clear the data and set Current=0
void rewind(size_type cur=0, size_type cur_scalar=0)
set the cursors
A container class to represent a walker.
ParameterSet myParams
parameters
std::vector< QMCHamiltonian * > H1
a list of QMCHamiltonians for multiple method
ParticleLaplacian L
^2_i d for the i-th particle
ParticlePos R
The configuration vector (3N-dimensional vector to store the positions of all the particles for a sin...
bool UpdatePbyP
update particle-by-particle