Commit 3c3bc8a0 authored by sjplimp's avatar sjplimp
Browse files

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@2014 f3b2605a-c512-4ea7-a41b-209d697bcdaa
parent 6dad21f7
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -28,9 +28,11 @@ FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) :
{
  if (narg != 6) error->all("Illegal fix addforce command");

  scalar_flag = 1;
  vector_flag = 1;
  size_vector = 3;
  scalar_vector_freq = 1;
  extscalar = 1;
  extvector = 1;

  xvalue = atof(arg[3]);
@@ -38,7 +40,7 @@ FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) :
  zvalue = atof(arg[5]);

  force_flag = 0;
  foriginal[0] = foriginal[1] = foriginal[2] = 0.0;
  foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
}

/* ---------------------------------------------------------------------- */
@@ -47,6 +49,7 @@ int FixAddForce::setmask()
{
  int mask = 0;
  mask |= POST_FORCE;
  mask |= THERMO_ENERGY;
  mask |= POST_FORCE_RESPA;
  mask |= MIN_POST_FORCE;
  return mask;
@@ -84,18 +87,22 @@ void FixAddForce::min_setup(int vflag)

void FixAddForce::post_force(int vflag)
{
  double **x = atom->x;
  double **f = atom->f;
  int *mask = atom->mask;
  int nlocal = atom->nlocal;

  foriginal[0] = foriginal[1] = foriginal[2] = 0.0;
  foriginal[0] = foriginal[1] = foriginal[2] = foriginal[3] = 0.0;
  force_flag = 0;

  // foriginal[0] = - x dot f = "potential" for added force

  for (int i = 0; i < nlocal; i++)
    if (mask[i] & groupbit) {
      foriginal[0] += f[i][0];
      foriginal[1] += f[i][1];
      foriginal[2] += f[i][2];
      foriginal[0] -= xvalue*x[i][0] + yvalue*x[i][1] + zvalue[i][2];
      foriginal[1] += f[i][0];
      foriginal[2] += f[i][1];
      foriginal[3] += f[i][2];
      f[i][0] += xvalue;
      f[i][1] += yvalue;
      f[i][2] += zvalue;
@@ -116,6 +123,21 @@ void FixAddForce::min_post_force(int vflag)
  post_force(vflag);
}

/* ----------------------------------------------------------------------
   potential energy of added force
------------------------------------------------------------------------- */

double FixAddForce::compute_scalar()
{
  // only sum across procs one time

  if (force_flag == 0) {
    MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
    force_flag = 1;
  }
  return foriginal_all[0];
}

/* ----------------------------------------------------------------------
   return components of total force on fix group before force was changed
------------------------------------------------------------------------- */
@@ -125,8 +147,8 @@ double FixAddForce::compute_vector(int n)
  // only sum across procs one time

  if (force_flag == 0) {
    MPI_Allreduce(foriginal,foriginal_all,3,MPI_DOUBLE,MPI_SUM,world);
    MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
    force_flag = 1;
  }
  return foriginal_all[n];
  return foriginal_all[n+1];
}
+2 −1
Original line number Diff line number Diff line
@@ -28,11 +28,12 @@ class FixAddForce : public Fix {
  void post_force(int);
  void post_force_respa(int, int, int);
  void min_post_force(int);
  double compute_scalar();
  double compute_vector(int);

 private:
  double xvalue,yvalue,zvalue;
  double foriginal[3],foriginal_all[3];
  double foriginal[4],foriginal_all[4];
  int force_flag;
  int nlevels_respa;
};
+11 −2
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ int FixSpringSelf::setmask()
{
  int mask = 0;
  mask |= POST_FORCE;
  mask |= THERMO_ENERGY;
  mask |= POST_FORCE_RESPA;
  mask |= MIN_POST_FORCE;
  return mask;
@@ -122,6 +123,13 @@ void FixSpringSelf::setup(int vflag)

/* ---------------------------------------------------------------------- */

void FixSpringSelf::min_setup(int vflag)
{
  post_force(vflag);
}

/* ---------------------------------------------------------------------- */

void FixSpringSelf::post_force(int vflag)
{
  double **x = atom->x;
@@ -135,7 +143,7 @@ void FixSpringSelf::post_force(int vflag)
  double zprd = domain->zprd;
  int xbox,ybox,zbox;
  double dx,dy,dz;
  double espring = 0.0;
  espring = 0.0;

  for (int i = 0; i < nlocal; i++)
    if (mask[i] & groupbit) {
@@ -150,6 +158,8 @@ void FixSpringSelf::post_force(int vflag)
      f[i][2] -= k*dz;
      espring += k * (dx*dx + dy*dy + dz*dz);
    }

  espring *= 0.5;
}

/* ---------------------------------------------------------------------- */
@@ -165,7 +175,6 @@ void FixSpringSelf::post_force_respa(int vflag, int ilevel, int iloop)

double FixSpringSelf::compute_scalar()
{
  espring *= 0.5;
  double all;
  MPI_Allreduce(&espring,&all,1,MPI_DOUBLE,MPI_SUM,world);
  return all;
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ class FixSpringSelf : public Fix {
  int setmask();
  void init();
  void setup(int);
  void min_setup(int);
  void post_force(int);
  void post_force_respa(int, int, int);
  void min_post_force(int);