SSAGES  0.1
A MetaDynamics Package
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Groups Pages
PairwiseKernel.h
1 
21 #pragma once
22 
23 #include <cmath>
24 #include "json/json.h"
25 
26 namespace SSAGES
27 {
29 
45  {
46  public:
47 
49 
55  virtual double Evaluate(double rij, double& df) const = 0;
56 
58 
63  static PairwiseKernel* Build(const Json::Value& json, const std::string& path);
64  };
65 
67 
72  class GaussianPK : public PairwiseKernel
73  {
74  private:
75  double mu_;
76  double sigma_;
77 
78  public:
80 
87  GaussianPK(double mu, double sigma) :
88  mu_(mu), sigma_(sigma) {}
89 
91 
97  double Evaluate(double rij, double& df) const
98  {
99  const auto dx = (rij - mu_)/sigma_;
100  const auto f = exp( - dx*dx/2.);
101  const auto pre = - dx/sigma_;
102 
103  df = pre * f;
104  return f;
105  }
106 
108 
113  static GaussianPK* Build(const Json::Value& json, const std::string& path);
114  };
115 
117 
123  {
124  private:
125  double d0_;
126  double r0_;
127  int n_, m_;
128 
129  public:
131 
140  RationalSwitchPK(double d0, double r0, int n, int m) :
141  d0_(d0), r0_(r0), n_(n), m_(m) {}
142 
144 
150  double Evaluate(double rij, double& df) const override
151  {
152  const auto xarg = (rij - d0_)/r0_;
153  const auto xn = std::pow(xarg, n_);
154  const auto xm = std::pow(xarg, m_);
155  const auto f = (1.-xn)/(1.-xm);
156 
157  df = f/(d0_-rij)*(n_*xn/(1.-xn)+m_*xm/(xm-1.));
158  return f;
159  }
160 
162 
167  static RationalSwitchPK* Build(const Json::Value& json, const std::string& path);
168  };
169 }
double r0_
Cutoff distance.
double d0_
Minimum linear shift value.
static RationalSwitchPK * Build(const Json::Value &json, const std::string &path)
Build RationalSwitchPK from JSON value.
RationalSwitchPK(double d0, double r0, int n, int m)
Constructor.
virtual double Evaluate(double rij, double &df) const =0
Evaluate the pairwise kernel function.
double mu_
Center of Gaussian.
static GaussianPK * Build(const Json::Value &json, const std::string &path)
Build GaussianPK from JSON value.
double Evaluate(double rij, double &df) const override
Evaluate the switching function.
Pairwise kernel base class.
double sigma_
Width of Gaussian.
Gaussian Function.
GaussianPK(double mu, double sigma)
Constructor.
double Evaluate(double rij, double &df) const
Evaluate the Gaussian function.
Rational Switching Function.
int m_
Exponents of the switching function which control the stiffness.
static PairwiseKernel * Build(const Json::Value &json, const std::string &path)
Build PairwiseKernel from JSON value.