#ifndef LMP_FIX_RIGID_NH_SMALL_H
#define LMP_FIX_RIGID_NH_SMALL_H
#include "fix_rigid_small.h"
namespace LAMMPS_NS {
class FixRigidNHSmall : public FixRigidSmall {
public:
FixRigidNHSmall(class LAMMPS *, int, char **);
virtual ~FixRigidNHSmall();
virtual int setmask();
virtual void init();
virtual void setup(int);
virtual void initial_integrate(int);
virtual void final_integrate();
virtual double compute_scalar();
int modify_param(int, char **);
void write_restart(FILE *);
void restart(char *buf);
void reset_target(double);
protected:
double boltz,nktv2p,mvv2e;
int dimension; int nf_t,nf_r; double onednft,onednfr; double *w,*wdti1,*wdti2,*wdti4; double *q_t,*q_r; double *eta_t,*eta_r; double *eta_dot_t,*eta_dot_r; double *f_eta_t,*f_eta_r;
double epsilon_mass[3], *q_b; double epsilon[3],*eta_b; double epsilon_dot[3],*eta_dot_b; double *f_eta_b; double akin_t,akin_r;
int kspace_flag; int nrigidfix; int *rfix;
double vol0; double t0; int pdim,g_f; double p_hydro; double p_freq_max;
double mtk_term1,mtk_term2;
double t_target,t_current;
double t_freq;
char *id_temp,*id_press;
class Compute *temperature,*pressure;
int tcomputeflag,pcomputeflag;
void couple();
void remap();
void nhc_temp_integrate();
void nhc_press_integrate();
virtual void compute_temp_target();
void compute_press_target();
void nh_epsilon_dot();
void compute_dof();
void allocate_chain();
void allocate_order();
void deallocate_chain();
void deallocate_order();
inline double maclaurin_series(double);
};
inline double FixRigidNHSmall::maclaurin_series(double x)
{
double x2,x4;
x2 = x * x;
x4 = x2 * x2;
return (1.0 + (1.0/6.0) * x2 + (1.0/120.0) * x4 + (1.0/5040.0) * x2 * x4 +
(1.0/362880.0) * x4 * x4);
}
}
#endif