git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@11756 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -48,8 +48,8 @@ using namespace MathSpecial;
|
||||
|
||||
#define MAXORDER 7
|
||||
#define OFFSET 16384
|
||||
#define SMALL 0.00001
|
||||
#define LARGE 10000.0
|
||||
#define SMALL 0.00001
|
||||
#define EPS_HOC 1.0e-7
|
||||
|
||||
enum{REVERSE_RHO};
|
||||
@ -203,8 +203,6 @@ void PPPM::init()
|
||||
// extract short-range Coulombic cutoff from pair style
|
||||
|
||||
triclinic = domain->triclinic;
|
||||
scale = 1.0;
|
||||
|
||||
pair_check();
|
||||
|
||||
int itmp = 0;
|
||||
@ -250,26 +248,10 @@ void PPPM::init()
|
||||
|
||||
// compute qsum & qsqsum and warn if not charge-neutral
|
||||
|
||||
qsum = qsqsum = 0.0;
|
||||
for (int i = 0; i < atom->nlocal; i++) {
|
||||
qsum += atom->q[i];
|
||||
qsqsum += atom->q[i]*atom->q[i];
|
||||
}
|
||||
|
||||
double tmp;
|
||||
MPI_Allreduce(&qsum,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
|
||||
qsum = tmp;
|
||||
MPI_Allreduce(&qsqsum,&tmp,1,MPI_DOUBLE,MPI_SUM,world);
|
||||
qsqsum = tmp;
|
||||
q2 = qsqsum * force->qqrd2e;
|
||||
|
||||
if (qsqsum == 0.0)
|
||||
error->all(FLERR,"Cannot use kspace solver on system with no charge");
|
||||
if (fabs(qsum) > SMALL && me == 0) {
|
||||
char str[128];
|
||||
sprintf(str,"System is not charge neutral, net charge = %g",qsum);
|
||||
error->warning(FLERR,str);
|
||||
}
|
||||
scale = 1.0;
|
||||
qqrd2e = force->qqrd2e;
|
||||
qsum_qsq(0);
|
||||
natoms_original = atom->natoms;
|
||||
|
||||
// set accuracy (force units) from accuracy_relative or accuracy_absolute
|
||||
|
||||
@ -678,14 +660,20 @@ void PPPM::compute(int eflag, int vflag)
|
||||
if (evflag_atom) fieldforce_peratom();
|
||||
|
||||
// sum global energy across procs and add in volume-dependent term
|
||||
// reset qsum and qsqsum if atom count has changed
|
||||
|
||||
const double qscale = force->qqrd2e * scale;
|
||||
const double qscale = qqrd2e * scale;
|
||||
|
||||
if (eflag_global) {
|
||||
double energy_all;
|
||||
MPI_Allreduce(&energy,&energy_all,1,MPI_DOUBLE,MPI_SUM,world);
|
||||
energy = energy_all;
|
||||
|
||||
if (atom->natoms != natoms_original) {
|
||||
qsum_qsq(0);
|
||||
natoms_original = atom->natoms;
|
||||
}
|
||||
|
||||
energy *= 0.5*volume;
|
||||
energy -= g_ewald*qsqsum/MY_PIS +
|
||||
MY_PI2*qsum*qsum / (g_ewald*g_ewald*volume);
|
||||
@ -2460,7 +2448,7 @@ void PPPM::fieldforce_ik()
|
||||
|
||||
// convert E-field to force
|
||||
|
||||
const double qfactor = force->qqrd2e * scale * q[i];
|
||||
const double qfactor = qqrd2e * scale * q[i];
|
||||
f[i][0] += qfactor*ekx;
|
||||
f[i][1] += qfactor*eky;
|
||||
if (slabflag != 2) f[i][2] += qfactor*ekz;
|
||||
@ -2531,7 +2519,7 @@ void PPPM::fieldforce_ad()
|
||||
|
||||
// convert E-field to force and substract self forces
|
||||
|
||||
const double qfactor = force->qqrd2e * scale;
|
||||
const double qfactor = qqrd2e * scale;
|
||||
|
||||
s1 = x[i][0]*hx_inv;
|
||||
s2 = x[i][1]*hy_inv;
|
||||
@ -2954,7 +2942,7 @@ void PPPM::slabcorr()
|
||||
|
||||
const double e_slabcorr = MY_2PI*(dipole_all*dipole_all -
|
||||
qsum*dipole_r2 - qsum*qsum*zprd*zprd/12.0)/volume;
|
||||
const double qscale = force->qqrd2e * scale;
|
||||
const double qscale = qqrd2e * scale;
|
||||
|
||||
if (eflag_global) energy += qscale * e_slabcorr;
|
||||
|
||||
@ -3141,7 +3129,7 @@ void PPPM::compute_group_group(int groupbit_A, int groupbit_B, int AA_flag)
|
||||
|
||||
poisson_groups(AA_flag);
|
||||
|
||||
const double qscale = force->qqrd2e * scale;
|
||||
const double qscale = qqrd2e * scale;
|
||||
|
||||
// total group A <--> group B energy
|
||||
// self and boundary correction terms are in compute_group_group.cpp
|
||||
@ -3487,7 +3475,7 @@ void PPPM::slabcorr_groups(int groupbit_A, int groupbit_B, int AA_flag)
|
||||
|
||||
// compute corrections
|
||||
|
||||
const double qscale = force->qqrd2e * scale;
|
||||
const double qscale = qqrd2e * scale;
|
||||
const double efact = qscale * MY_2PI/volume;
|
||||
|
||||
e2group += efact * (dipole_A*dipole_B - 0.5*(qsum_A*dipole_r2_B +
|
||||
|
||||
Reference in New Issue
Block a user