#ifdef FIX_CLASS
FixStyle(rigid,FixRigid)
#else
#ifndef LMP_FIX_RIGID_H
#define LMP_FIX_RIGID_H
#include "fix.h"
namespace LAMMPS_NS {
class FixRigid : public Fix {
public:
FixRigid(class LAMMPS *, int, char **);
virtual ~FixRigid();
virtual int setmask();
virtual void init();
virtual void setup(int);
virtual void initial_integrate(int);
void post_force(int);
virtual void final_integrate();
void initial_integrate_respa(int, int, int);
void final_integrate_respa(int, int);
void write_restart_file(char *);
virtual double compute_scalar();
double memory_usage();
void grow_arrays(int);
void copy_arrays(int, int, int);
void set_arrays(int);
int pack_exchange(int, double *);
int unpack_exchange(int, double *);
void setup_pre_neighbor();
void pre_neighbor();
int dof(int);
void deform(int);
void enforce2d();
void reset_dt();
void zero_momentum();
void zero_rotation();
virtual int modify_param(int, char **);
virtual void *extract(const char*, int &);
double extract_ke();
double extract_erotational();
double compute_array(int, int);
protected:
int me,nprocs;
double dtv,dtf,dtq;
double *step_respa;
int triclinic;
double MINUSPI,TWOPI;
char *inpfile; int rstyle; int setupflag; int earlyflag;
int dimension; int nbody; int nlinear; int *nrigid; int *mol2body; int *body2mol; int maxmol;
int *body; double **displace;
double *masstotal; double **xcm; double **vcm; double **fcm; double **inertia; double **ex_space,**ey_space,**ez_space;
double **angmom; double **omega; double **torque; double **quat; imageint *imagebody; double **fflag; double **tflag; double **langextra;
double **sum,**all; int **remapflag;
int extended; int orientflag; int dorientflag; int reinitflag;
imageint *xcmimage; int *eflags; double **orient; double **dorient;
double tfactor; int langflag;
int tstat_flag; double t_start,t_stop,t_target;
double t_period,t_freq;
int t_chain,t_iter,t_order;
int pstat_flag; double p_start[3],p_stop[3];
double p_period[3],p_freq[3];
int p_flag[3];
int pcouple,pstyle;
int p_chain;
int allremap; int dilate_group_bit; char *id_dilate;
class RanMars *random;
class AtomVecEllipsoid *avec_ellipsoid;
class AtomVecLine *avec_line;
class AtomVecTri *avec_tri;
int POINT,SPHERE,ELLIPSOID,LINE,TRIANGLE,DIPOLE; int OMEGA,ANGMOM,TORQUE;
void image_shift();
void set_xv();
void set_v();
void setup_bodies_static();
void setup_bodies_dynamic();
void apply_langevin_thermostat();
void compute_forces_and_torques();
void readfile(int, double *, double **, double **, double **,
imageint *, int *);
};
}
#endif
#endif