#ifndef LMP_MANIFOLD_GAUSSIAN_BUMP_H
#define LMP_MANIFOLD_GAUSSIAN_BUMP_H
#include "manifold.h"
namespace LAMMPS_NS {
namespace user_manifold {
class manifold_gaussian_bump : public manifold {
public:
enum { NPARAMS = 4 };
manifold_gaussian_bump(class LAMMPS*, int, char **);
virtual ~manifold_gaussian_bump();
virtual double g( const double * );
virtual void n( const double *, double * );
virtual double g_and_n( const double *x, double *nn );
static const char* type(){ return "gaussian_bump"; }
virtual const char *id() { return type(); }
virtual int nparams(){ return NPARAMS; }
virtual void post_param_init();
private:
double AA, ll, ll2, f_at_rc, fp_at_rc;
double rc1, rc2, rc12, rc22, dr, inv_dr;
double lut_x0, lut_x1;
int lut_Nbins;
double lut_dx;
double *lut_z;
double *lut_zp;
double gaussian_bump ( double ) const;
double gaussian_bump_x2 ( double ) const;
double gaussian_bump_der( double ) const;
void make_lut();
double lut_get_z ( double rr ) const;
double lut_get_zp( double rr ) const;
void lut_get_z_and_zp( double rr, double &zz, double &zzp ) const;
void test_lut();
double taper( double );
double taper_der( double );
};
}
}
#endif