QMCPACK
LPQHI_BasisClass Class Reference

Locally Piecewise Quintic Hermite Interpolant. More...

+ Inheritance diagram for LPQHI_BasisClass:
+ Collaboration diagram for LPQHI_BasisClass:

Public Member Functions

std::complex< double > Eplus (int i, double k, int n)
 The following are helpers to calculate the Fourier transform of the basis functions. More...
 
std::complex< double > Eminus (int i, double k, int n)
 
double Dplus (int i, double k, int n)
 
double Dminus (int i, double k, int n)
 
std::complex< double > dEplus_dk (int i, double k, int n)
 
std::complex< double > dEminus_dk (int i, double k, int n)
 
double dDplus_dk (int i, double k, int n)
 
double dDminus_dk (int i, double k, int n)
 
double GetDelta ()
 
void SetNumKnots (int n)
 
void Set_rc (double rc)
 Set the cutoff radius. More...
 
int NumElements ()
 Returns the number of basis elements. More...
 
double h (int n, double r)
 Returns the basis element n evaluated in real space at r. More...
 
double c (int n, double k)
 Returns the basis element n evaluated in k space at k. More...
 
double dc_dk (int n, double k)
 
 LPQHI_BasisClass ()
 
- Public Member Functions inherited from BasisClass
double Get_rc ()
 
void SetBox (TinyVector< double, 3 > box)
 
TinyVector< double, 3 > GetBox ()
 
double c_numerical (int n, double k)
 
 BasisClass ()
 This returns the coefficient of the nth basis function. More...
 

Public Attributes

int NumKnots
 public is HACK More...
 
double delta
 
double deltaInv
 
TinyMatrix< double, 3, 6 > S
 
Array< double, 1 > tvec
 
- Public Attributes inherited from BasisClass
double r_c
 
TinyVector< double, 3 > Box
 
double Omega
 

Detailed Description

Locally Piecewise Quintic Hermite Interpolant.

Definition at line 91 of file OptimizedBreakup.h.

Constructor & Destructor Documentation

◆ LPQHI_BasisClass()

LPQHI_BasisClass ( )
inline

Definition at line 120 of file OptimizedBreakup.h.

References S.

120  : NumKnots(0), delta(0.0)
121  {
122  S = 1.0, 0.0, 0.0, -10.0, 15.0, -6.0, 0.0, 1.0, 0.0, -6.0, 8.0, -3.0, 0.0, 0.0, 0.5, -1.5, 1.5, -0.5;
123  }
TinyMatrix< double, 3, 6 > S
int NumKnots
public is HACK

Member Function Documentation

◆ c()

double c ( int  n,
double  k 
)
virtual

Returns the basis element n evaluated in k space at k.

Implements BasisClass.

◆ dc_dk()

double dc_dk ( int  n,
double  k 
)
virtual

Implements BasisClass.

◆ dDminus_dk()

double dDminus_dk ( int  i,
double  k,
int  n 
)
inline

Definition at line 244 of file OptimizedBreakup.h.

References delta, dEminus_dk(), Eminus(), qmcplusplus::n, and BasisClass::Omega.

245 {
246  std::complex<double> eye(0.0, 1.0);
247  std::complex<double> Z1 = Eminus(i, k, n + 1);
248  std::complex<double> dZ1 = dEminus_dk(i, k, n + 1);
249  std::complex<double> Z2 = Eminus(i, k, n);
250  std::complex<double> dZ2 = dEminus_dk(i, k, n);
251  return 4.0 * M_PI / (k * k * Omega) * (delta * Z1.imag() + i * delta * Z2.imag()) -
252  4.0 * M_PI / (k * Omega) * (delta * dZ1.imag() + i * delta * dZ2.imag());
253 }
std::complex< double > Eminus(int i, double k, int n)
std::complex< double > dEminus_dk(int i, double k, int n)

◆ dDplus_dk()

double dDplus_dk ( int  i,
double  k,
int  n 
)
inline

Definition at line 225 of file OptimizedBreakup.h.

References delta, dEplus_dk(), Eplus(), qmcplusplus::n, and BasisClass::Omega.

226 {
227  std::complex<double> eye(0.0, 1.0);
228  std::complex<double> Z1 = Eplus(i, k, n + 1);
229  std::complex<double> Z2 = Eplus(i, k, n);
230  std::complex<double> dZ1 = dEplus_dk(i, k, n + 1);
231  std::complex<double> dZ2 = dEplus_dk(i, k, n);
232  return -4.0 * M_PI / (k * k * Omega) * (delta * Z1.imag() + i * delta * Z2.imag()) +
233  4.0 * M_PI / (k * Omega) * (delta * dZ1.imag() + i * delta * dZ2.imag());
234 }
std::complex< double > dEplus_dk(int i, double k, int n)
std::complex< double > Eplus(int i, double k, int n)
The following are helpers to calculate the Fourier transform of the basis functions.

◆ dEminus_dk()

std::complex< double > dEminus_dk ( int  i,
double  k,
int  n 
)
inline

Definition at line 191 of file OptimizedBreakup.h.

References qmcplusplus::cos(), delta, Eminus(), qmcplusplus::n, sign(), and qmcplusplus::sin().

Referenced by dDminus_dk().

192 {
193  std::complex<double> eye(0.0, 1.0);
194 
195  if (n == 0)
196  {
197  std::complex<double> e1(cos(k * delta) - 1.0, -sin(k * delta));
198  std::complex<double> de1(-delta * sin(k * delta), -delta * cos(k * delta));
199  std::complex<double> e2(cos(k * delta * i), sin(k * delta * i));
200  std::complex<double> de2(-delta * i * sin(k * delta * i), delta * i * cos(k * delta * i));
201  return ((eye / (k * k)) * e1 * e2 - (eye / k) * (de1 * e2 + e1 * de2));
202  }
203  else
204  {
205  std::complex<double> t1, t2, dt1, dt2;
206  double sign = (n & 1) ? -1.0 : 1.0;
207  t1 = sign * std::complex<double>(cos(k * delta * (i - 1)), sin(k * delta * (i - 1)));
208  dt1 = sign *
209  std::complex<double>(-delta * (i - 1) * sin(k * delta * (i - 1)), delta * (i - 1) * cos(k * delta * (i - 1)));
210  t2 = -(double)n / delta * Eminus(i, k, n - 1);
211  dt2 = -(double)n / delta * dEminus_dk(i, k, n - 1);
212  return ((eye / (k * k)) * (t1 + t2) - (eye / k) * (dt1 + dt2));
213  }
214 }
MakeReturn< UnaryNode< FnSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sin(const Vector< T1, C1 > &l)
std::complex< double > Eminus(int i, double k, int n)
MakeReturn< UnaryNode< FnCos, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t cos(const Vector< T1, C1 > &l)
double sign(double x)
Definition: Standard.h:73
std::complex< double > dEminus_dk(int i, double k, int n)

◆ dEplus_dk()

std::complex< double > dEplus_dk ( int  i,
double  k,
int  n 
)
inline

Definition at line 147 of file OptimizedBreakup.h.

References qmcplusplus::cos(), delta, Eplus(), qmcplusplus::n, sign(), and qmcplusplus::sin().

Referenced by dDplus_dk().

148 {
149  std::complex<double> eye(0.0, 1.0);
150 
151  if (n == 0)
152  {
153  std::complex<double> e1(cos(k * delta) - 1.0, sin(k * delta));
154  std::complex<double> de1(-delta * sin(k * delta), delta * cos(k * delta));
155  std::complex<double> e2(cos(k * delta * i), sin(k * delta * i));
156  std::complex<double> de2(-delta * i * sin(k * delta * i), delta * i * cos(k * delta * i));
157  return ((eye / (k * k)) * e1 * e2 - (eye / k) * (de1 * e2 + e1 * de2));
158  }
159  else
160  {
161  std::complex<double> t1, t2, dt1, dt2;
162  double sign = 1.0;
163  t1 = std::complex<double>(cos(k * delta * (i + 1)), sin(k * delta * (i + 1)));
164  dt1 = std::complex<double>(-delta * (i + 1) * sin(k * delta * (i + 1)), delta * (i + 1) * cos(k * delta * (i + 1)));
165  t2 = -(double)n / delta * Eplus(i, k, n - 1);
166  dt2 = -(double)n / delta * dEplus_dk(i, k, n - 1);
167  return ((eye / (k * k)) * (t1 + t2) - (eye / k) * (dt1 + dt2));
168  }
169 }
MakeReturn< UnaryNode< FnSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sin(const Vector< T1, C1 > &l)
std::complex< double > dEplus_dk(int i, double k, int n)
MakeReturn< UnaryNode< FnCos, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t cos(const Vector< T1, C1 > &l)
double sign(double x)
Definition: Standard.h:73
std::complex< double > Eplus(int i, double k, int n)
The following are helpers to calculate the Fourier transform of the basis functions.

◆ Dminus()

double Dminus ( int  i,
double  k,
int  n 
)
inline

Definition at line 236 of file OptimizedBreakup.h.

References delta, Eminus(), qmcplusplus::n, and BasisClass::Omega.

237 {
238  std::complex<double> eye(0.0, 1.0);
239  std::complex<double> Z1 = Eminus(i, k, n + 1);
240  std::complex<double> Z2 = Eminus(i, k, n);
241  return -4.0 * M_PI / (k * Omega) * (delta * Z1.imag() + i * delta * Z2.imag());
242 }
std::complex< double > Eminus(int i, double k, int n)

◆ Dplus()

double Dplus ( int  i,
double  k,
int  n 
)
inline

Definition at line 217 of file OptimizedBreakup.h.

References delta, Eplus(), qmcplusplus::n, and BasisClass::Omega.

218 {
219  std::complex<double> eye(0.0, 1.0);
220  std::complex<double> Z1 = Eplus(i, k, n + 1);
221  std::complex<double> Z2 = Eplus(i, k, n);
222  return 4.0 * M_PI / (k * Omega) * (delta * Z1.imag() + i * delta * Z2.imag());
223 }
std::complex< double > Eplus(int i, double k, int n)
The following are helpers to calculate the Fourier transform of the basis functions.

◆ Eminus()

std::complex< double > Eminus ( int  i,
double  k,
int  n 
)
inline

Definition at line 171 of file OptimizedBreakup.h.

References qmcplusplus::cos(), delta, qmcplusplus::n, sign(), and qmcplusplus::sin().

Referenced by dDminus_dk(), dEminus_dk(), and Dminus().

172 {
173  std::complex<double> eye(0.0, 1.0);
174 
175  if (n == 0)
176  {
177  std::complex<double> e1(cos(k * delta) - 1.0, -sin(k * delta));
178  std::complex<double> e2(cos(k * delta * i), sin(k * delta * i));
179  return (-(eye / k) * e1 * e2);
180  }
181  else
182  {
183  std::complex<double> t1, t2;
184  double sign = (n & 1) ? -1.0 : 1.0;
185  t1 = sign * std::complex<double>(cos(k * delta * (i - 1)), sin(k * delta * (i - 1)));
186  t2 = -(double)n / delta * Eminus(i, k, n - 1);
187  return (-(eye / k) * (t1 + t2));
188  }
189 }
MakeReturn< UnaryNode< FnSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sin(const Vector< T1, C1 > &l)
std::complex< double > Eminus(int i, double k, int n)
MakeReturn< UnaryNode< FnCos, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t cos(const Vector< T1, C1 > &l)
double sign(double x)
Definition: Standard.h:73

◆ Eplus()

std::complex< double > Eplus ( int  i,
double  k,
int  n 
)
inline

The following are helpers to calculate the Fourier transform of the basis functions.

Definition at line 126 of file OptimizedBreakup.h.

References qmcplusplus::cos(), delta, qmcplusplus::n, sign(), and qmcplusplus::sin().

Referenced by dDplus_dk(), dEplus_dk(), and Dplus().

127 {
128  std::complex<double> eye(0.0, 1.0);
129 
130  if (n == 0)
131  {
132  std::complex<double> e1(cos(k * delta) - 1.0, sin(k * delta));
133  std::complex<double> e2(cos(k * delta * i), sin(k * delta * i));
134  return (-(eye / k) * e1 * e2);
135  }
136  else
137  {
138  std::complex<double> t1, t2;
139  double sign = 1.0;
140  t1 = std::complex<double>(cos(k * delta * (i + 1)), sin(k * delta * (i + 1)));
141  t2 = -(double)n / delta * Eplus(i, k, n - 1);
142  ;
143  return (-(eye / k) * (t1 + t2));
144  }
145 }
MakeReturn< UnaryNode< FnSin, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sin(const Vector< T1, C1 > &l)
MakeReturn< UnaryNode< FnCos, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t cos(const Vector< T1, C1 > &l)
double sign(double x)
Definition: Standard.h:73
std::complex< double > Eplus(int i, double k, int n)
The following are helpers to calculate the Fourier transform of the basis functions.

◆ GetDelta()

double GetDelta ( )
inline

Definition at line 112 of file OptimizedBreakup.h.

References delta.

112 { return delta; }

◆ h()

double h ( int  n,
double  r 
)
virtual

Returns the basis element n evaluated in real space at r.

Implements BasisClass.

◆ NumElements()

int NumElements ( )
virtual

Returns the number of basis elements.

Implements BasisClass.

◆ Set_rc()

void Set_rc ( double  rc)
virtual

Set the cutoff radius.

Implements BasisClass.

◆ SetNumKnots()

void SetNumKnots ( int  n)

Member Data Documentation

◆ delta

double delta

◆ deltaInv

double deltaInv

Definition at line 97 of file OptimizedBreakup.h.

◆ NumKnots

int NumKnots

public is HACK

Definition at line 96 of file OptimizedBreakup.h.

◆ S

TinyMatrix<double, 3, 6> S

Definition at line 98 of file OptimizedBreakup.h.

Referenced by LPQHI_BasisClass().

◆ tvec

Array<double, 1> tvec

Definition at line 109 of file OptimizedBreakup.h.


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