#ifdef FIX_CLASS
FixStyle(shake,FixShake)
#else
#ifndef LMP_FIX_SHAKE_H
#define LMP_FIX_SHAKE_H
#include "fix.h"
namespace LAMMPS_NS {
class FixShake : public Fix {
friend class FixEHEX;
public:
FixShake(class LAMMPS *, int, char **);
virtual ~FixShake();
virtual int setmask();
virtual void init();
void setup(int);
void pre_neighbor();
virtual void post_force(int);
virtual void post_force_respa(int, int, int);
virtual double memory_usage();
virtual void grow_arrays(int);
virtual void copy_arrays(int, int, int);
void set_arrays(int);
virtual void update_arrays(int, int);
void set_molecule(int, tagint, int, double *, double *, double *);
virtual int pack_exchange(int, double *);
virtual int unpack_exchange(int, double *);
virtual int pack_forward_comm(int, int *, double *, int, int *);
virtual void unpack_forward_comm(int, int, double *);
virtual void shake_end_of_step(int vflag);
virtual void correct_coordinates(int vflag);
virtual void correct_velocities();
int dof(int);
virtual void reset_dt();
void *extract(const char *, int &);
protected:
int vflag_post_force; int respa; int me,nprocs;
int rattle; double tolerance; int max_iter; int output_every; bigint next_output;
int *bond_flag,*angle_flag; int *type_flag; double *mass_list; int nmass;
int molecular; double *bond_distance,*angle_distance;
int ifix_respa; int nlevels_respa; int *loop_respa;
double *step_respa;
double **x,**v,**f; double **ftmp,**vtmp;
double *mass,*rmass;
int *type;
int nlocal;
int *shake_flag; tagint **shake_atom; int **shake_type; double **xshake; int *nshake;
double dtv,dtfsq; double dtf_inner,dtf_innerhalf;
int *list; int nlist,maxlist;
int *b_count,*b_count_all; double *b_ave,*b_max,*b_min; double *b_ave_all,*b_max_all,*b_min_all; int *a_count,*a_count_all; double *a_ave,*a_max,*a_min;
double *a_ave_all,*a_max_all,*a_min_all;
class Molecule **atommols; class Molecule **onemols; 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);
void shake(int);
void shake3(int);
void shake4(int);
void shake3angle(int);
void stats();
int bondtype_findset(int, tagint, tagint, int);
int angletype_findset(int, tagint, tagint, int);
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;
tagint shake_atom[4];
int shake_flag;
int shake_type[3];
};
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 *);
};
}
#endif
#endif