#ifdef FIX_CLASS
FixStyle(rigid/small,FixRigidSmall)
#else
#ifndef LMP_FIX_RIGID_SMALL_H
#define LMP_FIX_RIGID_SMALL_H
#include "fix.h"
namespace LAMMPS_NS {
class FixRigidSmall : public Fix {
friend class ComputeRigidLocal;
public:
FixRigidSmall(class LAMMPS *, int, char **);
virtual ~FixRigidSmall();
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 *);
void grow_arrays(int);
void copy_arrays(int, int, int);
void set_arrays(int);
void set_molecule(int, tagint, int, double *, double *, double *);
int pack_exchange(int, double *);
int unpack_exchange(int, double *);
int pack_forward_comm(int, int *, double *, int, int *);
void unpack_forward_comm(int, int, double *);
int pack_reverse_comm(int, int, double *);
void unpack_reverse_comm(int, 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();
int modify_param(int, char **);
void *extract(const char*, int &);
double extract_ke();
double extract_erotational();
double compute_scalar();
double memory_usage();
protected:
int me,nprocs;
double dtv,dtf,dtq;
double *step_respa;
int triclinic;
double MINUSPI,TWOPI;
char *inpfile; int setupflag; int earlyflag; int commflag; int customflag; int nbody; int nlinear; tagint maxmol; double maxextent;
struct Body {
double mass; double xcm[3]; double vcm[3]; double fcm[3]; double torque[3]; double quat[4]; double inertia[3]; double ex_space[3]; double ey_space[3];
double ez_space[3];
double angmom[3]; double omega[3]; double conjqm[4]; imageint image; int remapflag[4]; int ilocal; };
Body *body; int nlocal_body; int nghost_body; int nmax_body; int bodysize;
int *bodyown; tagint *bodytag; int *atom2body; imageint *xcmimage; double **displace; int *eflags; double **orient; double **dorient;
int extended; int orientflag; int dorientflag; int reinitflag;
int POINT,SPHERE,ELLIPSOID,LINE,TRIANGLE,DIPOLE; int OMEGA,ANGMOM,TORQUE;
class AtomVecEllipsoid *avec_ellipsoid;
class AtomVecLine *avec_line;
class AtomVecTri *avec_tri;
int **counts; double **itensor;
double *mass_body;
int nmax_mass;
int langflag; double t_start,t_stop,t_period; double **langextra; int maxlang; class RanMars *random;
int tstat_flag,pstat_flag;
int t_chain,t_iter,t_order;
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;
double p_current[3],p_target[3];
class Molecule **onemols;
int nmol;
double rsqfar;
struct InRvous {
int me,ilocal;
tagint atomID,bodyID;
double x[3];
};
struct OutRvous {
int ilocal;
tagint atomID;
};
void image_shift();
void set_xv();
void set_v();
void create_bodies(tagint *);
void setup_bodies_static();
void setup_bodies_dynamic();
void apply_langevin_thermostat();
void compute_forces_and_torques();
void readfile(int, double **, int *);
void grow_body();
void reset_atom2body();
static int rendezvous_body(int, char *, int &, int *&, char *&, void *);
};
}
#endif
#endif