QMCPACK
cubicBSpline Class Reference
+ Collaboration diagram for cubicBSpline:

Public Member Functions

 cubicBSpline (double rcut, double cusp_val, const std::vector< double > &coeffs)
 
double getVal (double x) const
 
double parmDeriv (const int ip, double x)
 
void setCoeff (int i, double newcoeff)
 
double getCoeff (int i) const
 

Private Attributes

std::vector< double > coeffs_
 
std::vector< double > knots_
 
const int degree_ = 3
 
double delta_
 
double cusp_val_
 

Detailed Description

Definition at line 54 of file soecp_eval_reference.cpp.

Constructor & Destructor Documentation

◆ cubicBSpline()

cubicBSpline ( double  rcut,
double  cusp_val,
const std::vector< double > &  coeffs 
)
inline

Definition at line 57 of file soecp_eval_reference.cpp.

References coeffs_, copy(), cusp_val_, delta_, and knots_.

58  {
59  int numknots = coeffs.size();
60  coeffs_.resize(numknots + 6);
61  knots_.resize(numknots + 6);
62  cusp_val_ = cusp_val;
63 
64  delta_ = rcut / (numknots + 1);
65  coeffs_[0] = -2 * cusp_val_ * delta_ + coeffs[1];
66  coeffs_[1] = coeffs[0];
67  coeffs_[2] = coeffs[1];
68  std::copy(coeffs.begin() + 2, coeffs.end(), coeffs_.begin() + 3);
69  for (int i = 0; i < knots_.size(); i++)
70  knots_[i] = (i - 3) * delta_;
71  }
std::vector< double > knots_
void copy(const Array< T1, 3 > &src, Array< T2, 3 > &dest)
Definition: Blitz.h:639
std::vector< double > coeffs_

Member Function Documentation

◆ getCoeff()

double getCoeff ( int  i) const
inline

Definition at line 103 of file soecp_eval_reference.cpp.

References coeffs_.

Referenced by parmDeriv().

103 { return coeffs_[i]; }
std::vector< double > coeffs_

◆ getVal()

double getVal ( double  x) const
inline

Definition at line 73 of file soecp_eval_reference.cpp.

References bspline(), coeffs_, degree_, and knots_.

Referenced by parmDeriv(), testJastrow(), and TWF().

73 { return bspline(x, knots_, coeffs_, degree_); }
double bspline(double x, const std::vector< double > &t, const std::vector< double > &c, int k)
std::vector< double > knots_
std::vector< double > coeffs_

◆ parmDeriv()

double parmDeriv ( const int  ip,
double  x 
)
inline

Definition at line 75 of file soecp_eval_reference.cpp.

References getCoeff(), getVal(), and setCoeff().

Referenced by dratioTWF().

76  {
77  //changing parameter 0 means changing coefficient 1, and so on
78  const int ic = ip + 1;
79  double dp = 0.0001;
80  std::vector<double> finite_diff_coeffs = {-1. / 60, 3. / 20, -3. / 4, 0, 3. / 4, -3. / 20, 1. / 60};
81  std::vector<double> values(finite_diff_coeffs.size());
82  double inital_value = getCoeff(ic);
83  int offset = (finite_diff_coeffs.size() - 1) / 2;
84  for (int id = 0; id < finite_diff_coeffs.size(); id++)
85  {
86  double newval = inital_value + (id - offset) * dp;
87  setCoeff(ic, newval);
88  values[id] = getVal(x);
89  }
90  setCoeff(ic, inital_value);
91 
92  double deriv = 0.0;
93  for (int id = 0; id < finite_diff_coeffs.size(); id++)
94  deriv += finite_diff_coeffs[id] * values[id] / dp;
95  return deriv;
96  }
void setCoeff(int i, double newcoeff)
double getVal(double x) const
double getCoeff(int i) const

◆ setCoeff()

void setCoeff ( int  i,
double  newcoeff 
)
inline

Definition at line 97 of file soecp_eval_reference.cpp.

References coeffs_, cusp_val_, and delta_.

Referenced by parmDeriv().

98  {
99  coeffs_[i] = newcoeff;
100  if (i == 2)
101  coeffs_[0] = -2 * cusp_val_ * delta_ + newcoeff;
102  }
std::vector< double > coeffs_

Member Data Documentation

◆ coeffs_

std::vector<double> coeffs_
private

Definition at line 106 of file soecp_eval_reference.cpp.

Referenced by cubicBSpline(), getCoeff(), getVal(), and setCoeff().

◆ cusp_val_

double cusp_val_
private

Definition at line 110 of file soecp_eval_reference.cpp.

Referenced by cubicBSpline(), and setCoeff().

◆ degree_

const int degree_ = 3
private

Definition at line 108 of file soecp_eval_reference.cpp.

Referenced by getVal().

◆ delta_

double delta_
private

Definition at line 109 of file soecp_eval_reference.cpp.

Referenced by cubicBSpline(), and setCoeff().

◆ knots_

std::vector<double> knots_
private

Definition at line 107 of file soecp_eval_reference.cpp.

Referenced by cubicBSpline(), and getVal().


The documentation for this class was generated from the following file: