#ifdef PAIR_CLASS
PairStyle(lcbop,PairLCBOP)
#else
#ifndef LMP_PAIR_LCBOP_H
#define LMP_PAIR_LCBOP_H
#include "pair.h"
#include <cmath>
#include "math_const.h"
namespace LAMMPS_NS {
class PairLCBOP : public Pair {
public:
PairLCBOP(class LAMMPS *);
virtual ~PairLCBOP();
virtual void compute(int, int);
virtual void settings(int, char **);
void coeff(int, char **);
void init_style();
double init_one(int, int);
double memory_usage();
protected:
int **pages; int *map;
int me;
double cutLR;
double cutLRsq; double cut3rebo;
int maxlocal; int maxpage; int pgsize; int oneatom; MyPage<int> *ipage; int *SR_numneigh; int **SR_firstneigh;
double *N; double *M;
double
r_1, r_2, gamma_1, A, B_1, B_2, alpha, beta_1, beta_2,
d, C_1, C_4, C_6, L, kappa, R_0, R_1,
r_0, r_1_LR, r_2_LR,
v_1, v_2, eps_1, eps_2, lambda_1, lambda_2, eps, delta;
double r_2_sq;
struct TF_conj_field {
double
f_00,
f_01,
f_10,
f_11,
f_x_00,
f_x_01,
f_x_10,
f_x_11,
f_y_00,
f_y_01,
f_y_10,
f_y_11;
} F_conj_field[3][3][2];
double F_conj_data[4][4][2][3]; double gX[6]; double gC[5+1][6-1];
void SR_neigh();
void FSR(int, int);
void FLR(int, int);
void FNij( int, int, double, double**, int );
void FMij( int, int, double, double**, int );
double bondorder( int, int, double*, double, double, double**, int );
double b ( int, int, double*, double, double, double**, int );
double gSpline( double, double* );
double hSpline( double, double* );
void g_decompose_x( double, size_t*, double* );
double F_conj( double, double, double, double*, double*, double* );
void read_file( char * );
void spline_init();
void allocate();
inline double f_c(double Xij, double Xmin, double Xmax, double *dX) const {
double cutoff;
double t = (Xij-Xmin) / (Xmax-Xmin);
if (t <= 0.0) {
cutoff = 1.0;
*dX = 0.0;
} else if (t >= 1.0) {
cutoff = 0.0;
*dX = 0.0;
} else {
double z = t*t*t-1;
cutoff = exp( gamma_1*t*t*t/z );
*dX = cutoff * (-3*gamma_1*t*t)/z/z / (Xmax-Xmin);
}
return cutoff;
};
inline double f_c_LR(double Xij, double Xmin, double Xmax, double *dX) const {
double cutoff;
double t = (Xij-Xmin) / (Xmax-Xmin);
if (t <= 0.0) {
cutoff = 1.0;
} else if (t >= 1.0) {
cutoff = 0.0;
*dX = 0.0;
} else {
cutoff = ( 1.0+cos(MathConst::MY_PI*t) )/2.0;
*dX = -MathConst::MY_PI*sin(MathConst::MY_PI*t)/2/(Xmax-Xmin);
}
return cutoff;
};
};
}
#endif
#endif