3.5.12. horton/grid/cubic_spline.h
– One-dimensional cubic splines (on uniform grids)¶
Functions
-
void
tridiagsym_solve
(double *diag_mid, double *diag_up, double *right, double *solution, int n)¶
-
void
solve_cubic_spline_system
(double *y, double *d, int npoint)¶
-
void
compute_cubic_spline_int_weights
(double *weights, int npoint)¶
-
class
CubicSpline
¶ - #include <cubic_spline.h>
Construct and use cubic splines, with optional transformation of x-axis and extrapolation rules beyond spline range.
Public Functions
-
CubicSpline
(double *y, double *dt, Extrapolation *extrapolation, RTransform *rtf, int n)¶ Create a CubicSpline object.
- Parameters
y
-An array with y-values on the grid.
dt
-An array with derivatives of y toward the uniform x-axis (thus t-axis).
extrapolation
-An instance of an Extrapolation subclass that describes the function outside the spline range.
rtf
-The transformation from the t-axis to the x-axis.
n
-The number of grid points.
-
void
eval
(double *new_x, double *new_y, int new_n)¶ Evaluate the cubic spline in a set of new x values.
- Parameters
new_x
-An array with new x values.
new_y
-An output array with the corresponding y values.
new_n
-The number of values in new_x.
-
void
eval_deriv
(double *new_x, double *new_dx, int new_n)¶ Evaluate the derivative of the cubic spline (dy/dx) in a set of new x values.
- Parameters
new_x
-An array with new x values.
new_dx
-An output array with the corresponding dy/dx values.
new_n
-The number of values in new_x.
-
RTransform *
get_rtransform
()¶ Return the transformation of the x-axis.
-
double
get_first_x
()¶ Return the first grid point on the x-axis (transformed coordinates).
-
double
get_last_x
()¶ Return the last grid point on the x-axis (transformed coordinates).
-
Extrapolation *
get_extrapolation
()¶ Return the extrapolation function used outside the spline range.
Public Members
-
double *
y
¶ The y-values of the spline at each grid point.
-
double *
dt
¶ The derivative towards the t-axis (uniform x-axis).
-
int
n
¶ The number of grid points.
Private Members
-
Extrapolation *
extrapolation
¶ Describes how function goes outside spline range.
-
RTransform *
rtf
¶ Transformation of the x-axis.
-
double
first_x
¶ Transformed first grid point.
-
double
last_x
¶ Transformed last grid point.
-
-
class
Extrapolation
¶ - #include <cubic_spline.h>
Base class for extrapolation of cubic splines outside their range.
Public Functions
-
Extrapolation
()¶ Constructor.
-
virtual
~Extrapolation
()¶ Destructor.
-
virtual void
prepare
(CubicSpline *cs) = 0¶ Derive parameters from spline.
-
virtual double
eval_left
(double x) = 0¶ Compute extrapolation for low x.
-
virtual double
eval_right
(double x) = 0¶ Derivative of extrapolation for low x.
-
virtual double
deriv_left
(double x) = 0¶ Compute extrapolation for high x.
-
virtual double
deriv_right
(double x) = 0¶ Derivative of extrapolation for high x.
-
virtual bool
has_tail
() = 0¶ Returns true if right extrapolation is nonzero.
-
-
class
ZeroExtrapolation
¶ - #include <cubic_spline.h>
No extrapolation at all. Returns zero outside the spline range.
Public Functions
-
virtual void
prepare
(CubicSpline *cs)¶ Derive parameters from spline.
-
virtual double
eval_left
(double x)¶ Compute extrapolation for low x.
-
virtual double
eval_right
(double x)¶ Derivative of extrapolation for low x.
-
virtual double
deriv_left
(double x)¶ Compute extrapolation for high x.
-
virtual double
deriv_right
(double x)¶ Derivative of extrapolation for high x.
-
virtual bool
has_tail
()¶ Returns false because tail is zero.
-
virtual void
-
class
CuspExtrapolation
¶ - #include <cubic_spline.h>
An extrapolation suitable for electronic densities. It uses a 1s Slater-type density function close to the nucleus.
Public Functions
-
CuspExtrapolation
()¶ Constructor.
-
virtual void
prepare
(CubicSpline *cs)¶ Derive parameters from spline.
-
virtual double
eval_left
(double x)¶ Compute extrapolation for low x.
-
virtual double
eval_right
(double x)¶ Derivative of extrapolation for low x.
-
virtual double
deriv_left
(double x)¶ Compute extrapolation for high x.
-
virtual double
deriv_right
(double x)¶ Derivative of extrapolation for high x.
-
virtual bool
has_tail
()¶ Returns false because tail is zero.
-
-
class
PowerExtrapolation
¶ - #include <cubic_spline.h>
An extrapolation with a polynomial of arbitrary order for high x values.
The prefactor of the polynomial is such that the function remains continuous at the last grid point of the spline.
Public Functions
-
PowerExtrapolation
(double power)¶ Construct a PowerExtrapolation.
- Parameters
power
-The power of the polynomial tail, i.e. extrapolation on the right.
-
virtual void
prepare
(CubicSpline *cs)¶ Derive parameters from spline.
-
virtual double
eval_left
(double x)¶ Compute extrapolation for low x.
-
virtual double
eval_right
(double x)¶ Derivative of extrapolation for low x.
-
virtual double
deriv_left
(double x)¶ Compute extrapolation for high x.
-
virtual double
deriv_right
(double x)¶ Derivative of extrapolation for high x.
-
virtual bool
has_tail
()¶ Returns true because if R**power tail.
-
double
get_power
()¶ The power of the polynomial tail.
-
-
class
PotentialExtrapolation
¶ - #include <cubic_spline.h>
An extrapolation suitable for solutions of the Poisson equation.
The prefactor of the left and right polynomial are such that the function remains continuous at the last grid point of the spline. The power of R on the left and right side is consistent with the boundary conditions of the solutions of the Poisson equation.
Public Functions
-
PotentialExtrapolation
(int64_t l)¶ Construct a PotentialExtrapolation.
- Parameters
l
-The angular momentum for which the Coulomb potential is generated.
-
virtual void
prepare
(CubicSpline *cs)¶ Derive parameters from spline.
-
virtual double
eval_left
(double x)¶ Compute extrapolation for low x.
-
virtual double
eval_right
(double x)¶ Derivative of extrapolation for low x.
-
virtual double
deriv_left
(double x)¶ Compute extrapolation for high x.
-
virtual double
deriv_right
(double x)¶ Derivative of extrapolation for high x.
-
virtual bool
has_tail
()¶ Returns true because if 1/R**(l+1) tail.
-
int64_t
get_l
()¶ The angular momentum of the Coulomb potential spline.
-
double
get_amp_left
()¶ The prefactor for the polynomial for low x.
-
double
get_amp_right
()¶ The prefactor for the polynomial for high x.
-