git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@6835 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2011-08-27 20:01:42 +00:00
parent 1a4f998b04
commit 3179014485
11 changed files with 141 additions and 12 deletions

View File

@ -34,6 +34,9 @@ FixGravity::FixGravity(LAMMPS *lmp, int narg, char **arg) :
if (narg < 5) error->all("Illegal fix gravity command");
time_depend = 1;
scalar_flag = 1;
global_freq = 1;
extscalar = 1;
magnitude = atof(arg[3]);
@ -90,6 +93,9 @@ FixGravity::FixGravity(LAMMPS *lmp, int narg, char **arg) :
}
time_origin = update->ntimestep;
eflag = 0;
egrav = 0.0;
}
/* ---------------------------------------------------------------------- */
@ -98,6 +104,7 @@ int FixGravity::setmask()
{
int mask = 0;
mask |= POST_FORCE;
mask |= THERMO_ENERGY;
mask |= POST_FORCE_RESPA;
return mask;
}
@ -155,6 +162,7 @@ void FixGravity::post_force(int vflag)
zacc = magnitude*zgrav;
}
double **x = atom->x;
double **f = atom->f;
double *rmass = atom->rmass;
double *mass = atom->mass;
@ -163,6 +171,9 @@ void FixGravity::post_force(int vflag)
int nlocal = atom->nlocal;
double massone;
eflag = 0;
egrav = 0.0;
if (rmass) {
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
@ -170,6 +181,7 @@ void FixGravity::post_force(int vflag)
f[i][0] += massone*xacc;
f[i][1] += massone*yacc;
f[i][2] += massone*zacc;
egrav -= massone * (xacc*x[i][0] + yacc*x[i][1] + zacc*x[i][2]);
}
} else {
for (int i = 0; i < nlocal; i++)
@ -178,6 +190,7 @@ void FixGravity::post_force(int vflag)
f[i][0] += massone*xacc;
f[i][1] += massone*yacc;
f[i][2] += massone*zacc;
egrav -= massone * (xacc*x[i][0] + yacc*x[i][1] + zacc*x[i][2]);
}
}
}
@ -188,3 +201,18 @@ void FixGravity::post_force_respa(int vflag, int ilevel, int iloop)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
}
/* ----------------------------------------------------------------------
potential energy in gravity field
------------------------------------------------------------------------- */
double FixGravity::compute_scalar()
{
// only sum across procs one time
if (eflag == 0) {
MPI_Allreduce(&egrav,&egrav_all,1,MPI_DOUBLE,MPI_SUM,world);
eflag = 1;
}
return egrav_all;
}