Fix issue with KSpace slab correction energy with non-neutral systems

This commit is contained in:
Stan Gerald Moore
2022-10-11 09:43:18 -06:00
parent 967c84cb69
commit 877f4e7e29
11 changed files with 24 additions and 24 deletions

View File

@ -442,7 +442,7 @@ void PPPMDielectric::slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = qqrd2e * scale; const double qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -453,7 +453,7 @@ void PPPMDielectric::slabcorr()
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * eps[i]*q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * eps[i]*q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections

View File

@ -793,7 +793,7 @@ void PPPMDispDielectric::slabcorr(int /*eflag*/)
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = qqrd2e * scale; const double qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -804,7 +804,7 @@ void PPPMDispDielectric::slabcorr(int /*eflag*/)
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * eps[i]*q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * eps[i]*q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections

View File

@ -65,7 +65,7 @@ void SlabDipole::compute_corr(double qsum, int eflag_atom, int eflag_global, dou
// compute corrections // compute corrections
double const e_slabcorr = MY_2PI * double const e_slabcorr = MY_2PI *
(dipole_all * dipole_all - qsum * dipole_r2 - qsum * qsum * zprd * zprd / 12.0) / volume; (dipole_all * dipole_all - qsum * dipole_r2 - qsum * qsum * zprd_slab * zprd_slab / 12.0) / volume;
double const qscale = qqrd2e * scale; double const qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -75,7 +75,7 @@ void SlabDipole::compute_corr(double qsum, int eflag_atom, int eflag_global, dou
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i] * eatom[i] += efact * q[i] *
(x[i][2] * dipole_all - 0.5 * (dipole_r2 + qsum * x[i][2] * x[i][2]) - (x[i][2] * dipole_all - 0.5 * (dipole_r2 + qsum * x[i][2] * x[i][2]) -
qsum * zprd * zprd / 12.0); qsum * zprd_slab * zprd_slab / 12.0);
} }
// add on force corrections // add on force corrections

View File

@ -2791,7 +2791,7 @@ void PPPMKokkos<DeviceType>::slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
qscale = qqrd2e * scale; qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -2833,7 +2833,7 @@ KOKKOS_INLINE_FUNCTION
void PPPMKokkos<DeviceType>::operator()(TagPPPM_slabcorr3, const int &i) const void PPPMKokkos<DeviceType>::operator()(TagPPPM_slabcorr3, const int &i) const
{ {
d_eatom[i] += efact * q[i]*(x(i,2)*dipole_all - 0.5*(dipole_r2 + d_eatom[i] += efact * q[i]*(x(i,2)*dipole_all - 0.5*(dipole_r2 +
qsum*x(i,2)*x(i,2)) - qsum*zprd*zprd/12.0); qsum*x(i,2)*x(i,2)) - qsum*zprd_slab*zprd_slab/12.0);
} }
template<class DeviceType> template<class DeviceType>

View File

@ -1200,7 +1200,7 @@ void Ewald::slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = qqrd2e * scale; const double qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -1211,7 +1211,7 @@ void Ewald::slabcorr()
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections
@ -1436,7 +1436,7 @@ void Ewald::slabcorr_groups(int groupbit_A, int groupbit_B, int AA_flag)
const double efact = qscale * MY_2PI/volume; const double efact = qscale * MY_2PI/volume;
e2group += efact * (dipole_A*dipole_B - 0.5*(qsum_A*dipole_r2_B + e2group += efact * (dipole_A*dipole_B - 0.5*(qsum_A*dipole_r2_B +
qsum_B*dipole_r2_A) - qsum_A*qsum_B*zprd*zprd/12.0); qsum_B*dipole_r2_A) - qsum_A*qsum_B*zprd_slab*zprd_slab/12.0);
// add on force corrections // add on force corrections

View File

@ -1465,7 +1465,7 @@ void EwaldDisp::compute_slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = force->qqrd2e * scale; const double qscale = force->qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -1476,7 +1476,7 @@ void EwaldDisp::compute_slabcorr()
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections

View File

@ -2944,7 +2944,7 @@ void PPPM::slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = qqrd2e * scale; const double qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -2955,7 +2955,7 @@ void PPPM::slabcorr()
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections
@ -3487,7 +3487,7 @@ void PPPM::slabcorr_groups(int groupbit_A, int groupbit_B, int AA_flag)
const double efact = qscale * MY_2PI/volume; const double efact = qscale * MY_2PI/volume;
e2group += efact * (dipole_A*dipole_B - 0.5*(qsum_A*dipole_r2_B + e2group += efact * (dipole_A*dipole_B - 0.5*(qsum_A*dipole_r2_B +
qsum_B*dipole_r2_A) - qsum_A*qsum_B*zprd*zprd/12.0); qsum_B*dipole_r2_A) - qsum_A*qsum_B*zprd_slab*zprd_slab/12.0);
// add on force corrections // add on force corrections

View File

@ -629,7 +629,7 @@ void PPPMCG::slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = qqrd2e * scale; const double qscale = qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr; if (eflag_global) energy += qscale * e_slabcorr;
@ -641,7 +641,7 @@ void PPPMCG::slabcorr()
for (j = 0; j < num_charged; j++) { for (j = 0; j < num_charged; j++) {
i = is_charged[j]; i = is_charged[j];
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
} }

View File

@ -8139,7 +8139,7 @@ void PPPMDisp::slabcorr(int /*eflag*/)
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = force->qqrd2e * scale; const double qscale = force->qqrd2e * scale;
if (eflag_global) energy_1 += qscale * e_slabcorr; if (eflag_global) energy_1 += qscale * e_slabcorr;
@ -8150,7 +8150,7 @@ void PPPMDisp::slabcorr(int /*eflag*/)
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections

View File

@ -534,7 +534,7 @@ void PPPMDispTIP4P::slabcorr(int /*eflag*/)
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = force->qqrd2e * scale; const double qscale = force->qqrd2e * scale;
if (eflag_global) energy_1 += qscale * e_slabcorr; if (eflag_global) energy_1 += qscale * e_slabcorr;
@ -545,7 +545,7 @@ void PPPMDispTIP4P::slabcorr(int /*eflag*/)
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections

View File

@ -526,7 +526,7 @@ void PPPMTIP4P::slabcorr()
// compute corrections // compute corrections
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all - const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume; qsum*dipole_r2 - qsum*qsum*zprd_slab*zprd_slab/12.0)/volume;
const double qscale = force->qqrd2e * scale; const double qscale = force->qqrd2e * scale;
if (eflag_global) energy_1 += qscale * e_slabcorr; if (eflag_global) energy_1 += qscale * e_slabcorr;
@ -537,7 +537,7 @@ void PPPMTIP4P::slabcorr()
double efact = qscale * MY_2PI/volume; double efact = qscale * MY_2PI/volume;
for (int i = 0; i < nlocal; i++) for (int i = 0; i < nlocal; i++)
eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 + eatom[i] += efact * q[i]*(x[i][2]*dipole_all - 0.5*(dipole_r2 +
qsum*x[i][2]*x[i][2]) - qsum*zprd*zprd/12.0); qsum*x[i][2]*x[i][2]) - qsum*zprd_slab*zprd_slab/12.0);
} }
// add on force corrections // add on force corrections