/*void StressPBCAA::acceptMove(int active) { if(is_active) { Return_t* restrict sr_ptr=SR2[active]; Return_t* restrict pr_ptr=SR2.data()+active; for(int iat=0; iat<NumCenters; ++iat, ++sr_ptr,pr_ptr+=NumCenters) *pr_ptr = *sr_ptr += dSR[iat]; Value=NewValue; } } */ void StressPBCAA::initBreakup(ParticleSet& P) { //SpeciesSet& tspecies(PtclRef->getSpeciesSet()); SpeciesSet& tspecies(P.getSpeciesSet()); //Things that don't change with lattice are done here instead of InitBreakup() ChargeAttribIndx = tspecies.addAttribute("charge"); MemberAttribIndx = tspecies.addAttribute("membersize"); NumCenters = P.getTotalNum(); NumSpecies = tspecies.TotalNum; // V_const.resize(NumCenters); Zat.resize(NumCenters); Zspec.resize(NumSpecies); NofSpecies.resize(NumSpecies); for(int spec=0; spec<NumSpecies; spec++) { Zspec[spec] = tspecies(ChargeAttribIndx,spec); NofSpecies[spec] = static_cast<int>(tspecies(MemberAttribIndx,spec)); } SpeciesID.resize(NumCenters); for(int iat=0; iat<NumCenters; iat++) { SpeciesID[iat]=P.GroupID[iat]; Zat[iat] = Zspec[P.GroupID[iat]]; } AA = LRCoulombSingleton::getDerivHandler(P); //AA->initBreakup(*PtclRef); myConst=evalConsts(); myRcut=AA->get_rc();//Basis.get_rc(); if(rVs==0) { rVs = LRCoulombSingleton::createSpline4RbyVs(AA,myRcut,myGrid); } }
void CoulombPBCAB::initBreakup(ParticleSet& P) { SpeciesSet& tspeciesA(PtclA.getSpeciesSet()); SpeciesSet& tspeciesB(P.getSpeciesSet()); int ChargeAttribIndxA = tspeciesA.addAttribute("charge"); int MemberAttribIndxA = tspeciesA.addAttribute("membersize"); int ChargeAttribIndxB = tspeciesB.addAttribute("charge"); int MemberAttribIndxB = tspeciesB.addAttribute("membersize"); NptclA = PtclA.getTotalNum(); NptclB = P.getTotalNum(); NumSpeciesA = tspeciesA.TotalNum; NumSpeciesB = tspeciesB.TotalNum; //Store information about charges and number of each species Zat.resize(NptclA); Zspec.resize(NumSpeciesA); Qat.resize(NptclB); Qspec.resize(NumSpeciesB); NofSpeciesA.resize(NumSpeciesA); NofSpeciesB.resize(NumSpeciesB); for(int spec=0; spec<NumSpeciesA; spec++) { Zspec[spec] = tspeciesA(ChargeAttribIndxA,spec); NofSpeciesA[spec] = static_cast<int>(tspeciesA(MemberAttribIndxA,spec)); } for(int spec=0; spec<NumSpeciesB; spec++) { Qspec[spec] = tspeciesB(ChargeAttribIndxB,spec); NofSpeciesB[spec] = static_cast<int>(tspeciesB(MemberAttribIndxB,spec)); } RealType totQ=0.0; for(int iat=0; iat<NptclA; iat++) totQ+=Zat[iat] = Zspec[PtclA.GroupID[iat]]; for(int iat=0; iat<NptclB; iat++) totQ+=Qat[iat] = Qspec[P.GroupID[iat]]; // if(totQ>numeric_limits<RealType>::epsilon()) // { // LOGMSG("PBCs not yet finished for non-neutral cells"); // OHMMS::Controller->abort(); // } ////Test if the box sizes are same (=> kcut same for fixed dimcut) kcdifferent = (std::abs(PtclA.Lattice.LR_kc - P.Lattice.LR_kc) > numeric_limits<RealType>::epsilon()); minkc = std::min(PtclA.Lattice.LR_kc,P.Lattice.LR_kc); //AB->initBreakup(*PtclB); //initBreakup is called only once //AB = LRCoulombSingleton::getHandler(*PtclB); AB = LRCoulombSingleton::getHandler(P); myConst=evalConsts(); myRcut=AB->get_rc();//Basis.get_rc(); // create the spline function for the short-range part assuming pure potential if(V0==0) { V0 = LRCoulombSingleton::createSpline4RbyVs(AB,myRcut,myGrid); if(Vat.size()) { app_log() << " Vat is not empty. Something is wrong" << endl; OHMMS::Controller->abort(); } Vat.resize(NptclA,V0); Vspec.resize(NumSpeciesA,0);//prepare for PP to overwrite it } }