#ifdef FIX_CLASS
FixStyle(rattle,FixRattle)
#else
#ifndef LMP_FIX_RATTLE_H
#define LMP_FIX_RATTLE_H
#include "fix_shake.h"
namespace LAMMPS_NS {
class FixRattle : public FixShake {
public:
double **vp; int comm_mode; double derr_max; double verr_max;
FixRattle(class LAMMPS *, int, char **);
~FixRattle();
int setmask();
virtual void init();
virtual void post_force(int);
virtual void post_force_respa(int, int, int);
virtual void final_integrate();
virtual void final_integrate_respa(int,int);
virtual void correct_coordinates(int vflag);
virtual void correct_velocities();
virtual void shake_end_of_step(int vflag);
virtual double memory_usage();
virtual void grow_arrays(int);
virtual int pack_forward_comm(int, int *, double *, int, int *);
virtual void unpack_forward_comm(int, int, double *);
virtual void reset_dt();
private:
void update_v_half_nocons();
void update_v_half_nocons_respa(int);
void vrattle2(int m);
void vrattle3(int m);
void vrattle4(int m);
void vrattle3angle(int m);
void solve3x3exactly(const double a[][3], const double c[], double l[]);
void solve2x2exactly(const double a[][2], const double c[], double l[]);
bool check3angle(double ** v, int m, bool checkr, bool checkv);
bool check2(double **v, int m, bool checkr, bool checkv);
bool check3(double **v, int m, bool checkr, bool checkv);
bool check4(double **v, int m, bool checkr, bool checkv);
bool check_constraints(double **v, bool checkr, bool checkv);
void end_of_step();
};
}
#endif
#endif