forked from lijiext/lammps
128 lines
3.4 KiB
C++
128 lines
3.4 KiB
C++
/** ATC_HardyKernel: Hardy smoothing */
|
|
#ifndef ATC_HARDY_KERNEL_H
|
|
#define ATC_HARDY_KERNEL_H
|
|
|
|
#include "LammpsInterface.h"
|
|
#include "MatrixLibrary.h"
|
|
|
|
|
|
namespace ATC {
|
|
|
|
|
|
class ATC_HardyKernel {
|
|
|
|
public:
|
|
|
|
// constructor
|
|
ATC_HardyKernel(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernel() {};
|
|
// function value
|
|
virtual double value(DENS_VEC& x_atom)=0;
|
|
// bond function value via quadrature
|
|
virtual double bond(DENS_VEC& xa, DENS_VEC&xb, double lam1, double lam2);
|
|
// localization-volume intercepts for bond calculation
|
|
virtual void bond_intercepts(DENS_VEC& xa,
|
|
DENS_VEC& xb, double &lam1, double &lam2);
|
|
double inv_vol(void) { return invVol_; }
|
|
|
|
protected:
|
|
double invVol_; // normalization factor
|
|
double Rc_, invRc_; // cutoff radius
|
|
int nsd_ ; // number of dimensions
|
|
|
|
/** pointer to lammps interface class */
|
|
LammpsInterface * lammpsInterface_;
|
|
|
|
/** periodicity flags and lengths */
|
|
int periodicity[3];
|
|
double box_bounds[2][3];
|
|
double box_length[3];
|
|
|
|
};
|
|
|
|
/** a step with spherical support */
|
|
class ATC_HardyKernelStep : public ATC_HardyKernel {
|
|
|
|
public:
|
|
// constructor
|
|
ATC_HardyKernelStep(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernelStep() {};
|
|
// function value
|
|
double value(DENS_VEC& x_atom);
|
|
// bond function value
|
|
virtual double bond(DENS_VEC& xa, DENS_VEC&xb, double lam1, double lam2)
|
|
{return lam2 -lam1;}
|
|
};
|
|
|
|
/** a step with rectangular support suitable for a rectangular grid */
|
|
class ATC_HardyKernelCell : public ATC_HardyKernel {
|
|
|
|
public:
|
|
// constructor
|
|
ATC_HardyKernelCell(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernelCell() {};
|
|
// function value
|
|
virtual double value(DENS_VEC& x_atom);
|
|
// bond function value
|
|
virtual double bond(DENS_VEC& xa, DENS_VEC&xb, double lam1, double lam2)
|
|
{return lam2 -lam1;}
|
|
// bond intercept values : origin is the node position
|
|
void bond_intercepts(DENS_VEC& xa,
|
|
DENS_VEC& xb, double &lam1, double &lam2);
|
|
|
|
protected:
|
|
double hx, hy, hz;
|
|
DENS_VEC cellBounds_;
|
|
};
|
|
|
|
class ATC_HardyKernelCubicSphere : public ATC_HardyKernel {
|
|
|
|
public:
|
|
// constructor
|
|
ATC_HardyKernelCubicSphere(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernelCubicSphere() {};
|
|
// function value
|
|
virtual double value(DENS_VEC& x_atom);
|
|
};
|
|
|
|
class ATC_HardyKernelQuarticSphere : public ATC_HardyKernel {
|
|
|
|
public:
|
|
// constructor
|
|
ATC_HardyKernelQuarticSphere(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernelQuarticSphere() {};
|
|
// function value
|
|
virtual double value(DENS_VEC& x_atom);
|
|
};
|
|
|
|
|
|
class ATC_HardyKernelCubicCyl : public ATC_HardyKernel {
|
|
|
|
public:
|
|
// constructor
|
|
ATC_HardyKernelCubicCyl(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernelCubicCyl() {};
|
|
// function value
|
|
virtual double value(DENS_VEC& x_atom) ;
|
|
};
|
|
|
|
class ATC_HardyKernelQuarticCyl : public ATC_HardyKernel {
|
|
|
|
public:
|
|
|
|
// constructor
|
|
ATC_HardyKernelQuarticCyl(int nparameters, double* parameters);
|
|
// destructor
|
|
virtual ~ATC_HardyKernelQuarticCyl() {};
|
|
// function value
|
|
virtual double value(DENS_VEC& x_atom);
|
|
};
|
|
};
|
|
#endif
|