Commit e538fd5c authored by Steve Plimpton's avatar Steve Plimpton
Browse files

added rendezvous alg to fix shake

parent 7c3d6dc0
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -414,9 +414,9 @@ FixRigidSmall::FixRigidSmall(LAMMPS *lmp, int narg, char **arg) :

  if (comm->me == 0) {
    if (screen)
      fprintf(screen,"  create_bodies CPU = %g secs\n",time2-time1);
      fprintf(screen,"  create bodies CPU = %g secs\n",time2-time1);
    if (logfile)
      fprintf(logfile,"  create_bodies CPU = %g secs\n",time2-time1);
      fprintf(logfile,"  create bodies CPU = %g secs\n",time2-time1);
  }

  // set nlocal_body and allocate bodies I own
@@ -1749,6 +1749,8 @@ int FixRigidSmall::rendezvous_body(int n, char *inbuf,
  memory->destroy(iclose);
  memory->destroy(rsqclose);

  // flag = 2: new outbuf

  rflag = 2;
  return nout;
}
+538 −249

File changed.

Preview size limit exceeded, changes collapsed.

+38 −5
Original line number Diff line number Diff line
@@ -120,6 +120,11 @@ class FixShake : public Fix {
  int nmol;

  void find_clusters();
  void atom_owners();
  void partner_info(int *, tagint **, int **, int **, int **, int **);
  void nshake_info(int *, tagint **, int **);
  void shake_info(int *, tagint **, int **);
  
  int masscheck(double);
  void unconstrained_update();
  void unconstrained_update_respa(int);
@@ -131,12 +136,40 @@ class FixShake : public Fix {
  int bondtype_findset(int, tagint, tagint, int);
  int angletype_findset(int, tagint, tagint, int);

  // static variable for ring communication callback to access class data
  // callback functions for ring communication
  // data used by rendezvous callback methods

  int nrvous;
  tagint *atomIDs;
  int *procowner;

  struct IDRvous {
    int me;
    tagint atomID;
  };

  struct PartnerInfo {
    tagint atomID,partnerID;
    int mask,type,massflag,bondtype;
  };

  struct NShakeInfo {
    tagint atomID,partnerID;
    int nshake;
  };

  struct ShakeInfo {
    tagint atomID;
    int shake_flag;
    int shake_atom[4];
    int shake_type[3];
  };

  // callback functions for rendezvous communication

  static void ring_bonds(int, char *, void *);
  static void ring_nshake(int, char *, void *);
  static void ring_shake(int, char *, void *);
  static int rendezvous_ids(int, char *, int &, int *&, char *&, void *);
  static int rendezvous_partners_info(int, char *, int &, int *&, char *&, void *);
  static int rendezvous_nshake(int, char *, int &, int *&, char *&, void *);
  static int rendezvous_shake(int, char *, int &, int *&, char *&, void *);
};

}
+319 −330

File changed.

Preview size limit exceeded, changes collapsed.

+4 −3
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@ class Special : protected Pointers {

  // data used by rendezvous callback methods

  int ncount;
  int nrvous;
  tagint *atomIDs;
  int *procowner;

@@ -44,6 +44,8 @@ class Special : protected Pointers {
    tagint atomID,partnerID;
  };

  // private methods
  
  void atom_owners();
  void onetwo_build_newton();
  void onetwo_build_newton_off();
@@ -60,8 +62,7 @@ class Special : protected Pointers {
  // callback functions for rendezvous communication

  static int rendezvous_ids(int, char *, int &, int *&, char *&, void *);
  static int rendezvous_1234(int, char *, int &, int *&, char *&, void *);
  static int rendezvous_trim(int, char *, int &, int *&, char *&, void *);
  static int rendezvous_pairs(int, char *, int &, int *&, char *&, void *);
};

}