Interchange the ion and eletron loops in NLPP.

This commit is contained in:
Ye Luo 2018-07-28 21:56:10 -05:00
parent 98ca2cc7b5
commit 08b0988d39
1 changed files with 11 additions and 22 deletions

View File

@ -153,20 +153,16 @@ NonLocalECPotential::evaluate(ParticleSet& P, bool Tmove)
}
else
{
const DistanceTableData* myTable = P.DistTables[myTableIndex];
const auto &myTable = P.DistTables[myTableIndex];
if(myTable->DTType == DT_SOA)
{
for(int iat=0; iat<NumIons; iat++)
for(int jel=0; jel<P.getTotalNum(); jel++)
{
if(PP[iat]==nullptr) continue;
const int* restrict J=myTable->J2[iat];
const RealType* restrict dist=myTable->r_m2[iat];
const PosType* restrict displ=myTable->dr_m2[iat];
for(size_t nj=0; nj<myTable->M[iat]; ++nj)
{
if(dist[nj]<PP[iat]->Rmax)
Value += PP[iat]->evaluateOne(P,iat,Psi,J[nj],dist[nj],displ[nj],Tmove,Txy);
}
const auto &dist = myTable->Distances[jel];
const auto &displ = myTable->Displacements[jel];
for(int iat=0; iat<NumIons; iat++)
if(dist[iat]<PP[iat]->Rmax && PP[iat]!=nullptr)
Value += PP[iat]->evaluateOne(P,iat,Psi,jel,dist[iat],displ[iat],Tmove,Txy);
}
}
else
@ -215,18 +211,11 @@ NonLocalECPotential::computeOneElectronTxy(ParticleSet& P, const int ref_elec)
const DistanceTableData* myTable = P.DistTables[myTableIndex];
if(myTable->DTType == DT_SOA)
{
const auto &dist = myTable->Distances[ref_elec];
const auto &displ = myTable->Displacements[ref_elec];
for(int iat=0; iat<NumIons; iat++)
{
if(PP[iat]==nullptr) continue;
const int* restrict J=myTable->J2[iat];
const RealType* restrict dist=myTable->r_m2[iat];
const PosType* restrict displ=myTable->dr_m2[iat];
for(size_t nj=0; nj<myTable->M[iat]; ++nj)
{
if(dist[nj]<PP[iat]->Rmax && J[nj]==ref_elec)
PP[iat]->evaluateOne(P,iat,Psi,J[nj],dist[nj],displ[nj],true,Txy);
}
}
if(dist[iat]<PP[iat]->Rmax && PP[iat]!=nullptr)
PP[iat]->evaluateOne(P,iat,Psi,ref_elec,dist[iat],displ[iat],true,Txy);
}
else
{