本文整理汇总了C++中ParticleSet::makeVirtualMoves方法的典型用法代码示例。如果您正苦于以下问题:C++ ParticleSet::makeVirtualMoves方法的具体用法?C++ ParticleSet::makeVirtualMoves怎么用?C++ ParticleSet::makeVirtualMoves使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ParticleSet
的用法示例。
在下文中一共展示了ParticleSet::makeVirtualMoves方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: evaluate
MomentumEstimator::Return_t MomentumEstimator::evaluate(ParticleSet& P)
{
const int np=P.getTotalNum();
nofK=0.0;
compQ=0.0;
//will use temp[i].r1 for the Compton profile
const vector<DistanceTableData::TempDistType>& temp(P.DistTables[0]->Temp);
Vector<RealType> tmpn_k(nofK);
for (int s=0; s<M; ++s)
{
PosType newpos;
for (int i=0; i<OHMMS_DIM; ++i) newpos[i]=myRNG();
//make it cartesian
newpos=Lattice.toCart(newpos);
P.makeVirtualMoves(newpos); //updated: temp[i].r1=|newpos-P.R[i]|, temp[i].dr1=newpos-P.R[i]
refPsi.get_ratios(P,psi_ratios);
// for (int i=0; i<np; ++i) app_log()<<i<<" "<<psi_ratios[i].real()<<" "<<psi_ratios[i].imag()<<endl;
P.rejectMove(0); //restore P.R[0] to the orginal position
for (int ik=0; ik < kPoints.size(); ++ik)
{
for (int i=0; i<np; ++i) kdotp[i]=dot(kPoints[ik],temp[i].dr1_nobox);
eval_e2iphi(np,kdotp.data(),phases.data());
RealType nofk_here(std::real(BLAS::dot(np,phases.data(),&psi_ratios[0])));//psi_ratios.data())));
nofK[ik]+= nofk_here;
tmpn_k[ik]=nofk_here;
}
for (int iq=0; iq < compQ.size(); ++iq)
for (int i=0; i<mappedQtonofK[iq].size(); ++i)
compQ[iq] += tmpn_k[mappedQtonofK[iq][i]];
}
for (int ik=0; ik<nofK.size(); ++ik) nofK[ik] *= norm_nofK;
for (int iq=0; iq<compQ.size(); ++iq) compQ[iq] *= mappedQnorms[iq];
if (hdf5_out)
{
int j=myIndex;
for (int ik=0; ik<nofK.size(); ++ik,++j) P.Collectables[j]+= nofK[ik];
for (int iq=0; iq<compQ.size(); ++iq,++j) P.Collectables[j]+= compQ[iq];
}
return 0.0;
}