diff --git a/src/QMCHamiltonians/NonLocalECPotential.cpp b/src/QMCHamiltonians/NonLocalECPotential.cpp index f58485ac7..7dfda8ae4 100644 --- a/src/QMCHamiltonians/NonLocalECPotential.cpp +++ b/src/QMCHamiltonians/NonLocalECPotential.cpp @@ -633,12 +633,11 @@ int NonLocalECPotential::makeNonLocalMovesPbyP(ParticleSet& P) //make a non-local move if (oneTMove) { - int iat = oneTMove->PID; + const int iat = oneTMove->PID; Psi.prepareGroup(P, P.getGroupID(iat)); - if (P.makeMoveAndCheck(iat, oneTMove->Delta)) + GradType grad_iat; + if (P.makeMoveAndCheck(iat, oneTMove->Delta) && Psi.calcRatioGrad(P, iat, grad_iat) != ValueType(0)) { - GradType grad_iat; - Psi.calcRatioGrad(P, iat, grad_iat); Psi.acceptMove(P, iat, true); P.acceptMove(iat); NonLocalMoveAccepted++; @@ -658,9 +657,8 @@ int NonLocalECPotential::makeNonLocalMovesPbyP(ParticleSet& P) const NonLocalData* oneTMove = nonLocalOps.selectMove(RandomGen(), tmove_xy_); if (oneTMove) { - if (P.makeMoveAndCheck(iat, oneTMove->Delta)) + if (P.makeMoveAndCheck(iat, oneTMove->Delta) && Psi.calcRatioGrad(P, iat, grad_iat) != ValueType(0)) { - Psi.calcRatioGrad(P, iat, grad_iat); Psi.acceptMove(P, iat, true); P.acceptMove(iat); NonLocalMoveAccepted++; @@ -691,9 +689,8 @@ int NonLocalECPotential::makeNonLocalMovesPbyP(ParticleSet& P) oneTMove = nonLocalOps.selectMove(RandomGen(), iat); if (oneTMove) { - if (P.makeMoveAndCheck(iat, oneTMove->Delta)) + if (P.makeMoveAndCheck(iat, oneTMove->Delta) && Psi.calcRatioGrad(P, iat, grad_iat) != ValueType(0)) { - Psi.calcRatioGrad(P, iat, grad_iat); Psi.acceptMove(P, iat, true); // mark all affected electrons markAffectedElecs(P.getDistTableAB(myTableIndex), iat); diff --git a/src/QMCWaveFunctions/TrialWaveFunction.cpp b/src/QMCWaveFunctions/TrialWaveFunction.cpp index 4a4336c1d..8d3465d68 100644 --- a/src/QMCWaveFunctions/TrialWaveFunction.cpp +++ b/src/QMCWaveFunctions/TrialWaveFunction.cpp @@ -618,7 +618,8 @@ TrialWaveFunction::ValueType TrialWaveFunction::calcRatioGrad(ParticleSet& P, in r *= Z[i]->ratioGrad(P, iat, grad_iat); } - checkOneParticleGradientsNaN(iat, grad_iat, "TWF::calcRatioGrad"); + if(r != PsiValueType(0)) // grad_iat is meaningful only when r is strictly non-zero + checkOneParticleGradientsNaN(iat, grad_iat, "TWF::calcRatioGrad"); LogValueType logratio = convertValueToLog(r); PhaseDiff = std::imag(logratio); return static_cast(r); @@ -694,10 +695,11 @@ void TrialWaveFunction::mw_calcRatioGrad(const RefVectorWithLeader