Commit bf9f084d authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

update rigid fix styles in USER-OMP for changes in RIGID package

parent 08bdc4e4
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -51,9 +51,7 @@ class FixRigid : public Fix {
  void pre_neighbor();
  int dof(int);
  void deform(int);
  void apply_langevin_thermostat();
  void enforce2d();
  void compute_forces_and_torques();
  void reset_dt();
  void zero_momentum();
  void zero_rotation();
@@ -147,6 +145,8 @@ class FixRigid : public Fix {
  void set_v();
  void setup_bodies_static();
  void setup_bodies_dynamic();
  void apply_langevin_thermostat();
  virtual void compute_forces_and_torques();
  void readfile(int, double *, double **, double **, double **,
                imageint *, int *);
};
+2 −2
Original line number Diff line number Diff line
@@ -60,9 +60,7 @@ class FixRigidSmall : public Fix {
  void pre_neighbor();
  int dof(int);
  void deform(int);
  void apply_langevin_thermostat();
  void enforce2d();
  void compute_forces_and_torques();
  void reset_dt();
  void zero_momentum();
  void zero_rotation();
@@ -194,6 +192,8 @@ class FixRigidSmall : public Fix {
  void create_bodies();
  void setup_bodies_static();
  void setup_bodies_dynamic();
  void apply_langevin_thermostat();
  virtual void compute_forces_and_torques();
  void readfile(int, double **, int *);
  void grow_body();
  void reset_atom2body();
+145 −132
Original line number Diff line number Diff line
@@ -235,30 +235,9 @@ void FixRigidNHOMP::initial_integrate(int vflag)

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

void FixRigidNHOMP::final_integrate()
void FixRigidNHOMP::compute_forces_and_torques()
{
  double scale_t[3],scale_r;

  // compute scale variables

  scale_t[0] = scale_t[1] = scale_t[2] = 1.0;
  scale_r = 1.0;

  if (tstat_flag) {
    double tmp = exp(-1.0 * dtq * eta_dot_t[0]);
    scale_t[0] = scale_t[1] = scale_t[2] = tmp;
    scale_r = exp(-1.0 * dtq * eta_dot_r[0]);
  }

  if (pstat_flag) {
    scale_t[0] *= exp(-dtq * (epsilon_dot[0] + mtk_term2));
    scale_t[1] *= exp(-dtq * (epsilon_dot[1] + mtk_term2));
    scale_t[2] *= exp(-dtq * (epsilon_dot[2] + mtk_term2));
    scale_r *= exp(-dtq * (pdim * mtk_term2));

    akin_t = akin_r = 0.0;
  }

  int ibody;
  double * const * _noalias const x = atom->x;
  const dbl3_t * _noalias const f = (dbl3_t *) atom->f[0];
  const double * const * const torque_one = atom->torque;
@@ -395,12 +374,53 @@ void FixRigidNHOMP::final_integrate()

  MPI_Allreduce(sum[0],all[0],6*nbody,MPI_DOUBLE,MPI_SUM,world);

#if defined(_OPENMP)
#pragma omp parallel for default(none) private(ibody) schedule(static)
#endif
  for (ibody = 0; ibody < nbody; ibody++) {
    fcm[ibody][0] = all[ibody][0] + langextra[ibody][0];
    fcm[ibody][1] = all[ibody][1] + langextra[ibody][1];
    fcm[ibody][2] = all[ibody][2] + langextra[ibody][2];
    torque[ibody][0] = all[ibody][3] + langextra[ibody][3];
    torque[ibody][1] = all[ibody][4] + langextra[ibody][4];
    torque[ibody][2] = all[ibody][5] + langextra[ibody][5];
  }
}

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

void FixRigidNHOMP::final_integrate()
{
  int ibody;
  double scale_t[3],scale_r;

  // compute scale variables

  scale_t[0] = scale_t[1] = scale_t[2] = 1.0;
  scale_r = 1.0;

  if (tstat_flag) {
    double tmp = exp(-1.0 * dtq * eta_dot_t[0]);
    scale_t[0] = scale_t[1] = scale_t[2] = tmp;
    scale_r = exp(-1.0 * dtq * eta_dot_r[0]);
  }

  if (pstat_flag) {
    scale_t[0] *= exp(-dtq * (epsilon_dot[0] + mtk_term2));
    scale_t[1] *= exp(-dtq * (epsilon_dot[1] + mtk_term2));
    scale_t[2] *= exp(-dtq * (epsilon_dot[2] + mtk_term2));
    scale_r *= exp(-dtq * (pdim * mtk_term2));

    akin_t = akin_r = 0.0;
  }

  if (!earlyflag) compute_forces_and_torques();

  // update vcm and angmom
  // include Langevin thermostat forces
  // fflag,tflag = 0 for some dimensions in 2d
  double akt=0.0,akr=0.0;
  const double dtf2 = dtf * 2.0;
  int ibody;

#if defined(_OPENMP)
#pragma omp parallel for default(none) private(ibody) shared(scale_t,scale_r) schedule(static) reduction(+:akt,akr)
@@ -408,13 +428,6 @@ void FixRigidNHOMP::final_integrate()
  for (ibody = 0; ibody < nbody; ibody++) {
    double mbody[3],tbody[3],fquat[4];

    fcm[ibody][0] = all[ibody][0] + langextra[ibody][0];
    fcm[ibody][1] = all[ibody][1] + langextra[ibody][1];
    fcm[ibody][2] = all[ibody][2] + langextra[ibody][2];
    torque[ibody][0] = all[ibody][3] + langextra[ibody][3];
    torque[ibody][1] = all[ibody][4] + langextra[ibody][4];
    torque[ibody][2] = all[ibody][5] + langextra[ibody][5];

    // update vcm by 1/2 step

    const double dtfm = dtf / masstotal[ibody];
+3 −0
Original line number Diff line number Diff line
@@ -28,6 +28,9 @@ class FixRigidNHOMP : public FixRigidNH {
  virtual void final_integrate();
  virtual void remap();

 protected:
  virtual void compute_forces_and_torques();

 private: // copied from FixRigidOMP
  template <int, int> void set_xv_thr();
  template <int, int> void set_v_thr();
+144 −128
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ void FixRigidOMP::initial_integrate(int vflag)

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

void FixRigidOMP::final_integrate()
void FixRigidOMP::compute_forces_and_torques()
{
  double * const * _noalias const x = atom->x;
  const dbl3_t * _noalias const f = (dbl3_t *) atom->f[0];
@@ -246,7 +246,6 @@ void FixRigidOMP::final_integrate()

  MPI_Allreduce(sum[0],all[0],6*nbody,MPI_DOUBLE,MPI_SUM,world);

  // update vcm and angmom
  // include Langevin thermostat forces
  // fflag,tflag = 0 for some dimensions in 2d
  int ibody;
@@ -261,6 +260,23 @@ void FixRigidOMP::final_integrate()
    torque[ibody][0] = all[ibody][3] + langextra[ibody][3];
    torque[ibody][1] = all[ibody][4] + langextra[ibody][4];
    torque[ibody][2] = all[ibody][5] + langextra[ibody][5];
  }
}

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

void FixRigidOMP::final_integrate()
{
  int ibody;

  if (!earlyflag) compute_forces_and_torques();

  // update vcm and angmom

#if defined(_OPENMP)
#pragma omp parallel for default(none) private(ibody) schedule(static)
#endif
  for (ibody = 0; ibody < nbody; ibody++) {

    // update vcm by 1/2 step

Loading