Commit 62e09ef5 authored by sjplimp's avatar sjplimp
Browse files

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@2881 f3b2605a-c512-4ea7-a41b-209d697bcdaa
parent 23fd81c2
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -31,6 +31,14 @@ FixFreeze::FixFreeze(LAMMPS *lmp, int narg, char **arg) :

  if (!atom->torque_flag)
    error->all("Fix freeze requires atom attribute torque");

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

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

/* ---------------------------------------------------------------------- */
@@ -82,8 +90,14 @@ void FixFreeze::post_force(int vflag)
  int nlocal = atom->nlocal;
  if (igroup == atom->firstgroup) nlocal = atom->nfirst;

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

  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];
      f[i][0] = 0.0;
      f[i][1] = 0.0;
      f[i][2] = 0.0;
@@ -100,3 +114,17 @@ void FixFreeze::post_force_respa(int vflag, int ilevel, int iloop)
  post_force(vflag);
}

/* ----------------------------------------------------------------------
   return components of total force on fix group before force was changed
------------------------------------------------------------------------- */

double FixFreeze::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);
    force_flag = 1;
  }
  return foriginal_all[n];
}
+5 −0
Original line number Diff line number Diff line
@@ -26,6 +26,11 @@ class FixFreeze : public Fix {
  void setup(int);
  void post_force(int);
  void post_force_respa(int, int, int);
  double compute_vector(int);

 private:
  int force_flag;
  double foriginal[3],foriginal_all[3];
};

}