#ifdef FIX_CLASS
FixStyle(wall/body/polygon,FixWallBodyPolygon)
#else
#ifndef LMP_FIX_WALL_BODY_POLYGON_H
#define LMP_FIX_WALL_BODY_POLYGON_H
#include "fix.h"
namespace LAMMPS_NS {
class FixWallBodyPolygon : public Fix {
public:
FixWallBodyPolygon(class LAMMPS *, int, char **);
virtual ~FixWallBodyPolygon();
int setmask();
void init();
void setup(int);
virtual void post_force(int);
void reset_dt();
struct Contact {
int ibody, jbody; int vertex; int edge; double xv[3]; double xe[3]; double separation; };
protected:
int wallstyle,pairstyle,wiggle,axis;
double kn; double c_n; double c_t; double lo,hi,cylradius;
double amplitude,period,omega;
double dt;
int time_origin;
class AtomVecBody *avec;
class BodyRoundedPolygon *bptr;
double **discrete; int ndiscrete; int dmax; int *dnum; int *dfirst; int nmax;
double **edge; int nedge; int edmax; int *ednum; int *edfirst; int ednummax;
double *enclosing_radius; double *rounded_radius;
void body2space(int);
int vertex_against_wall(int ibody, double wall_pos, double** x,
double** f, double** torque, int side,
Contact* contact_list, int &num_contacts,
double* facc);
int compute_distance_to_wall(double* x0, double rradi, double wall_pos,
int side, double &d, double hi[3], int &contact);
double contact_separation(const Contact& c1, const Contact& c2);
void contact_forces(Contact& contact, double j_a, double** x,
double** v, double** angmom, double** f, double** torque,
double* vwall, double* facc);
void sum_torque(double* xm, double *x, double fx,
double fy, double fz, double* torque);
void total_velocity(double* p, double *xcm, double* vcm, double *angmom,
double *inertia, double *quat, double* vi);
void distance(const double* x2, const double* x1, double& r);
};
}
#endif
#endif