Nektar++
|
The namespace associated with the the Polylib library (Polylib introduction) More...
Functions | |
double | optdiff (double xl, double xr) |
The following function is used to circumvent/reduce "Subtractive Cancellation" The expression 1/dz is replaced by optinvsub(.,.) Added on 26 April 2017. More... | |
double | laginterp (double z, int j, const double *zj, int np) |
static void | Jacobz (const int n, double *z, const double alpha, const double beta) |
Calculate the n zeros, z, of the Jacobi polynomial, i.e. \( P_n^{\alpha,\beta}(z) = 0 \). More... | |
static void | TriQL (const int n, double *d, double *e, double **z) |
QL algorithm for symmetric tridiagonal matrix. More... | |
double | gammaF (const double x) |
Calculate the Gamma function , \( \Gamma(n)\), for integer values and halves. More... | |
double | gammaFracGammaF (const int x, const double alpha, const int y, const double beta) |
Calculate fraction of two Gamma functions, \( \Gamma(x+\alpha)/\Gamma(y+\beta) \), for integer values and halves. More... | |
static void | RecCoeff (const int n, double *a, double *b, const double alpha, const double beta) |
The routine finds the recurrence coefficients a and b of the orthogonal polynomials. More... | |
void | JKMatrix (int n, double *a, double *b) |
Calcualtes the Jacobi-kronrod matrix by determining the a and coefficients. More... | |
void | chri1 (int n, double *a, double *b, double *a0, double *b0, double z) |
Given a weight function \(w(t)\) through the first n+1 coefficients a and b of its orthogonal polynomials this routine generates the first n recurrence coefficients for the orthogonal polynomials relative to the modified weight function \((t-z)w(t)\). More... | |
void | zwgj (double *z, double *w, const int np, const double alpha, const double beta) |
Gauss-Jacobi zeros and weights. More... | |
void | zwgrjm (double *z, double *w, const int np, const double alpha, const double beta) |
Gauss-Radau-Jacobi zeros and weights with end point at z=-1. More... | |
void | zwgrjp (double *z, double *w, const int np, const double alpha, const double beta) |
Gauss-Radau-Jacobi zeros and weights with end point at z=1. More... | |
void | zwglj (double *z, double *w, const int np, const double alpha, const double beta) |
Gauss-Lobatto-Jacobi zeros and weights with end point at z=-1,1. More... | |
void | zwgk (double *z, double *w, const int npt, const double alpha, const double beta) |
Gauss-Kronrod-Jacobi zeros and weights. More... | |
void | zwrk (double *z, double *w, const int npt, const double alpha, const double beta) |
Gauss-Radau-Kronrod-Jacobi zeros and weights. More... | |
void | zwlk (double *z, double *w, const int npt, const double alpha, const double beta) |
Gauss-Lobatto-Kronrod-Jacobi zeros and weights. More... | |
void | Dgj (double *D, const double *z, const int np, const double alpha, const double beta) |
Compute the Derivative Matrix and its transpose associated with the Gauss-Jacobi zeros. More... | |
void | Dgrjm (double *D, const double *z, const int np, const double alpha, const double beta) |
Compute the Derivative Matrix and its transpose associated with the Gauss-Radau-Jacobi zeros with a zero at z=-1. More... | |
void | Dgrjp (double *D, const double *z, const int np, const double alpha, const double beta) |
Compute the Derivative Matrix associated with the Gauss-Radau-Jacobi zeros with a zero at z=1. More... | |
void | Dglj (double *D, const double *z, const int np, const double alpha, const double beta) |
Compute the Derivative Matrix associated with the Gauss-Lobatto-Jacobi zeros. More... | |
double | hgj (const int i, const double z, const double *zgj, const int np, const double alpha, const double beta) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Jacobi points zgj at the arbitrary location z. More... | |
double | hgrjm (const int i, const double z, const double *zgrj, const int np, const double alpha, const double beta) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Radau-Jacobi points zgrj at the arbitrary location z. This routine assumes zgrj includes the point -1. More... | |
double | hgrjp (const int i, const double z, const double *zgrj, const int np, const double alpha, const double beta) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Radau-Jacobi points zgrj at the arbitrary location z. This routine assumes zgrj includes the point +1. More... | |
double | hglj (const int i, const double z, const double *zglj, const int np, const double alpha, const double beta) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Lobatto-Jacobi points zgrj at the arbitrary location z. More... | |
void | Imgj (double *im, const double *zgj, const double *zm, const int nz, const int mz, const double alpha, const double beta) |
Interpolation Operator from Gauss-Jacobi points to an arbitrary distribution at points zm. More... | |
void | Imgrjm (double *im, const double *zgrj, const double *zm, const int nz, const int mz, const double alpha, const double beta) |
Interpolation Operator from Gauss-Radau-Jacobi points (including z=-1) to an arbitrary distrubtion at points zm. More... | |
void | Imgrjp (double *im, const double *zgrj, const double *zm, const int nz, const int mz, const double alpha, const double beta) |
Interpolation Operator from Gauss-Radau-Jacobi points (including z=1) to an arbitrary distrubtion at points zm. More... | |
void | Imglj (double *im, const double *zglj, const double *zm, const int nz, const int mz, const double alpha, const double beta) |
Interpolation Operator from Gauss-Lobatto-Jacobi points to an arbitrary distrubtion at points zm. More... | |
void | jacobfd (const int np, const double *z, double *poly_in, double *polyd, const int n, const double alpha, const double beta) |
Routine to calculate Jacobi polynomials, \( P^{\alpha,\beta}_n(z) \), and their first derivative, \( \frac{d}{dz} P^{\alpha,\beta}_n(z) \). More... | |
void | jacobd (const int np, const double *z, double *polyd, const int n, const double alpha, const double beta) |
Calculate the derivative of Jacobi polynomials. More... | |
void | JacZeros (const int n, double *a, double *b, const double alpha, const double beta) |
Zero and Weight determination through the eigenvalues and eigenvectors of a tridiagonal matrix from the three term recurrence relationship. More... | |
std::complex< Nektar::NekDouble > | ImagBesselComp (int n, std::complex< Nektar::NekDouble > y) |
Calcualte the bessel function of the first kind with complex double input y. Taken from Numerical Recipies in C. More... | |
The namespace associated with the the Polylib library (Polylib introduction)
void Polylib::chri1 | ( | int | n, |
double * | a, | ||
double * | b, | ||
double * | a0, | ||
double * | b0, | ||
double | z | ||
) |
Given a weight function \(w(t)\) through the first n+1 coefficients a and b of its orthogonal polynomials this routine generates the first n recurrence coefficients for the orthogonal polynomials relative to the modified weight function \((t-z)w(t)\).
The result will be placed in the array a0 and b0.
Definition at line 1608 of file Polylib.cpp.
void Polylib::Dgj | ( | double * | D, |
const double * | z, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the Derivative Matrix and its transpose associated with the Gauss-Jacobi zeros.
Definition at line 546 of file Polylib.cpp.
References jacobd().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateDerivMatrix(), and main().
void Polylib::Dglj | ( | double * | D, |
const double * | z, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the Derivative Matrix associated with the Gauss-Lobatto-Jacobi zeros.
Definition at line 690 of file Polylib.cpp.
References gammaF(), gammaFracGammaF(), and jacobd().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateDerivMatrix(), and main().
void Polylib::Dgrjm | ( | double * | D, |
const double * | z, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the Derivative Matrix and its transpose associated with the Gauss-Radau-Jacobi zeros with a zero at z=-1.
Definition at line 589 of file Polylib.cpp.
References gammaF(), gammaFracGammaF(), and jacobd().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateDerivMatrix(), and main().
void Polylib::Dgrjp | ( | double * | D, |
const double * | z, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the Derivative Matrix associated with the Gauss-Radau-Jacobi zeros with a zero at z=1.
Definition at line 639 of file Polylib.cpp.
References gammaF(), gammaFracGammaF(), and jacobd().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateDerivMatrix(), and main().
double Polylib::gammaF | ( | const double | ) |
Calculate the Gamma function , \( \Gamma(n)\), for integer values and halves.
Determine the value of \(\Gamma(n)\) using:
\( \Gamma(n) = (n-1)! \mbox{ or } \Gamma(n+1/2) = (n-1/2)\Gamma(n-1/2)\)
where \( \Gamma(1/2) = \sqrt(\pi)\)
Definition at line 1161 of file Polylib.cpp.
References tinysimd::sqrt().
Referenced by Dglj(), Dgrjm(), Dgrjp(), RecCoeff(), and test_gamma_fraction().
double Polylib::gammaFracGammaF | ( | const int | , |
const double | , | ||
const int | , | ||
const double | |||
) |
Calculate fraction of two Gamma functions, \( \Gamma(x+\alpha)/\Gamma(y+\beta) \), for integer values and halves.
Determine the value of \(\Gamma(n)\) using:
\( \Gamma(n) = (n-1)! \mbox{ or } \Gamma(n+1/2) = (n-1/2)\Gamma(n-1/2)\)
where \( \Gamma(1/2) = \sqrt(\pi)\)
Attempts simplification in cases like \( \Gamma(x+1)/\Gamma(x-1) = x*(x-1) \)
Definition at line 1203 of file Polylib.cpp.
References tinysimd::sqrt().
Referenced by Dglj(), Dgrjm(), Dgrjp(), test_gamma_fraction(), zwgj(), zwglj(), zwgrjm(), and zwgrjp().
double Polylib::hgj | ( | const int | i, |
const double | z, | ||
const double * | zgj, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Jacobi points zgj at the arbitrary location z.
Definition at line 752 of file Polylib.cpp.
References EPS, and laginterp().
Referenced by Nektar::LibUtilities::Basis::GenBasis(), and Imgj().
double Polylib::hglj | ( | const int | i, |
const double | z, | ||
const double * | zglj, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Lobatto-Jacobi points zgrj at the arbitrary location z.
Definition at line 858 of file Polylib.cpp.
References EPS, and laginterp().
Referenced by Nektar::LibUtilities::Basis::GenBasis(), and Imglj().
double Polylib::hgrjm | ( | const int | i, |
const double | z, | ||
const double * | zgrj, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Radau-Jacobi points zgrj at the arbitrary location z. This routine assumes zgrj includes the point -1.
Definition at line 787 of file Polylib.cpp.
References EPS, and laginterp().
Referenced by Imgrjm().
double Polylib::hgrjp | ( | const int | i, |
const double | z, | ||
const double * | zgrj, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Compute the value of the i th Lagrangian interpolant through the np Gauss-Radau-Jacobi points zgrj at the arbitrary location z. This routine assumes zgrj includes the point +1.
Definition at line 823 of file Polylib.cpp.
References EPS, and laginterp().
Referenced by Imgrjp().
std::complex< Nektar::NekDouble > Polylib::ImagBesselComp | ( | int | n, |
std::complex< Nektar::NekDouble > | y | ||
) |
Calcualte the bessel function of the first kind with complex double input y. Taken from Numerical Recipies in C.
Returns a complex double
Definition at line 1651 of file Polylib.cpp.
References tinysimd::abs().
Referenced by Nektar::IncNavierStokes::SetUpWomersley().
void Polylib::Imgj | ( | double * | im, |
const double * | zgj, | ||
const double * | zm, | ||
const int | nz, | ||
const int | mz, | ||
const double | alpha, | ||
const double | beta | ||
) |
Interpolation Operator from Gauss-Jacobi points to an arbitrary distribution at points zm.
Definition at line 887 of file Polylib.cpp.
References hgj().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateInterpMatrix(), and main().
void Polylib::Imglj | ( | double * | im, |
const double * | zglj, | ||
const double * | zm, | ||
const int | nz, | ||
const int | mz, | ||
const double | alpha, | ||
const double | beta | ||
) |
Interpolation Operator from Gauss-Lobatto-Jacobi points to an arbitrary distrubtion at points zm.
Definition at line 977 of file Polylib.cpp.
References hglj().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateInterpMatrix(), and main().
void Polylib::Imgrjm | ( | double * | im, |
const double * | zgrj, | ||
const double * | zm, | ||
const int | nz, | ||
const int | mz, | ||
const double | alpha, | ||
const double | beta | ||
) |
Interpolation Operator from Gauss-Radau-Jacobi points (including z=-1) to an arbitrary distrubtion at points zm.
Definition at line 916 of file Polylib.cpp.
References hgrjm().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateInterpMatrix(), and main().
void Polylib::Imgrjp | ( | double * | im, |
const double * | zgrj, | ||
const double * | zm, | ||
const int | nz, | ||
const int | mz, | ||
const double | alpha, | ||
const double | beta | ||
) |
Interpolation Operator from Gauss-Radau-Jacobi points (including z=1) to an arbitrary distrubtion at points zm.
Definition at line 946 of file Polylib.cpp.
References hgrjp().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateInterpMatrix(), and main().
void Polylib::jacobd | ( | const int | np, |
const double * | z, | ||
double * | polyd, | ||
const int | n, | ||
const double | alpha, | ||
const double | beta | ||
) |
Calculate the derivative of Jacobi polynomials.
Definition at line 1134 of file Polylib.cpp.
References jacobfd().
Referenced by Dgj(), Dglj(), Dgrjm(), Dgrjp(), Nektar::LibUtilities::NodalUtilTriangle::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilTetrahedron::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilPrism::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilQuad::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilHex::v_OrthoBasisDeriv(), Nektar::SolverUtils::AdvectionFR::v_SetupCFunctions(), Nektar::SolverUtils::DiffusionLFR::v_SetupCFunctions(), Nektar::SolverUtils::DiffusionLFRNS::v_SetupCFunctions(), and zwgj().
void Polylib::jacobfd | ( | const int | np, |
const double * | z, | ||
double * | poly_in, | ||
double * | polyd, | ||
const int | n, | ||
const double | alpha, | ||
const double | beta | ||
) |
Routine to calculate Jacobi polynomials, \( P^{\alpha,\beta}_n(z) \), and their first derivative, \( \frac{d}{dz} P^{\alpha,\beta}_n(z) \).
Definition at line 1034 of file Polylib.cpp.
Referenced by Nektar::LibUtilities::Basis::GenBasis(), jacobd(), Jacobz(), main(), Nektar::LibUtilities::NodalUtilTriangle::v_OrthoBasis(), Nektar::LibUtilities::NodalUtilTetrahedron::v_OrthoBasis(), Nektar::LibUtilities::NodalUtilPrism::v_OrthoBasis(), Nektar::LibUtilities::NodalUtilQuad::v_OrthoBasis(), Nektar::LibUtilities::NodalUtilHex::v_OrthoBasis(), Nektar::LibUtilities::NodalUtilTriangle::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilTetrahedron::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilPrism::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilQuad::v_OrthoBasisDeriv(), Nektar::LibUtilities::NodalUtilHex::v_OrthoBasisDeriv(), zwglj(), zwgrjm(), and zwgrjp().
|
static |
Calculate the n zeros, z, of the Jacobi polynomial, i.e. \( P_n^{\alpha,\beta}(z) = 0 \).
This routine is only value for \(( \alpha > -1, \beta > -1)\) and uses polynomial deflation in a Newton iteration
Definition at line 1281 of file Polylib.cpp.
void Polylib::JacZeros | ( | const int | n, |
double * | a, | ||
double * | b, | ||
const double | alpha, | ||
const double | beta | ||
) |
Zero and Weight determination through the eigenvalues and eigenvectors of a tridiagonal matrix from the three term recurrence relationship.
Set up a symmetric tridiagonal matrix
\( \left [ \begin{array}{ccccc} a[0] & b[0] & & & \\ b[0] & a[1] & b[1] & & \\ 0 & \ddots & \ddots & \ddots & \\ & & \ddots & \ddots & b[n-2] \\ & & & b[n-2] & a[n-1] \end{array} \right ] \)
Where the coefficients a[n], b[n] come from the recurrence relation
\( b_j p_j(z) = (z - a_j ) p_{j-1}(z) - b_{j-1} p_{j-2}(z) \)
where \( j=n+1\) and \(p_j(z)\) are the Jacobi (normalized) orthogonal polynomials \( \alpha,\beta > -1\)( integer values and halves). Since the polynomials are orthonormalized, the tridiagonal matrix is guaranteed to be symmetric. The eigenvalues of this matrix are the zeros of the Jacobi polynomial.
Definition at line 1336 of file Polylib.cpp.
References RecCoeff(), and TriQL().
void Polylib::JKMatrix | ( | int | n, |
double * | a, | ||
double * | b | ||
) |
Calcualtes the Jacobi-kronrod matrix by determining the a and coefficients.
The first 3n+1 coefficients are already known
For more information refer to: "Dirk P. Laurie, Calcualtion of Gauss-Kronrod quadrature rules"
Definition at line 1527 of file Polylib.cpp.
double Polylib::laginterp | ( | double | z, |
int | j, | ||
const double * | zj, | ||
int | np | ||
) |
Definition at line 42 of file Polylib.cpp.
References optdiff().
double Polylib::optdiff | ( | double | xl, |
double | xr | ||
) |
The following function is used to circumvent/reduce "Subtractive Cancellation" The expression 1/dz is replaced by optinvsub(.,.) Added on 26 April 2017.
Definition at line 22 of file Polylib.cpp.
Referenced by laginterp().
|
static |
The routine finds the recurrence coefficients a and b of the orthogonal polynomials.
Definition at line 1367 of file Polylib.cpp.
References gammaF().
Referenced by JacZeros(), zwgk(), zwlk(), and zwrk().
|
static |
QL algorithm for symmetric tridiagonal matrix.
This subroutine is a translation of an algol procedure, num. math. 12, 377-383(1968) by martin and wilkinson, as modified in num. math. 15, 450(1970) by dubrulle. Handbook for auto. comp., vol.ii-linear algebra, 241-248(1971). This is a modified version from numerical recipes.
This subroutine finds the eigenvalues and first components of the eigenvectors of a symmetric tridiagonal matrix by the implicit QL method.
on input:
on output:
Definition at line 1425 of file Polylib.cpp.
References CellMLToNektar.cellml_metadata::p, sign, tinysimd::sqrt(), and STOP.
Referenced by JacZeros(), zwgk(), zwlk(), and zwrk().
void Polylib::zwgj | ( | double * | z, |
double * | w, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Jacobi zeros and weights.
Definition at line 91 of file Polylib.cpp.
References gammaFracGammaF(), jacobd(), and jacobz.
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints(), and main().
void Polylib::zwgk | ( | double * | z, |
double * | w, | ||
const int | npt, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Kronrod-Jacobi zeros and weights.
Definition at line 240 of file Polylib.cpp.
References JKMatrix(), RecCoeff(), and TriQL().
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints().
void Polylib::zwglj | ( | double * | z, |
double * | w, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Lobatto-Jacobi zeros and weights with end point at z=-1,1.
Definition at line 195 of file Polylib.cpp.
References gammaFracGammaF(), jacobfd(), and jacobz.
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints(), and main().
void Polylib::zwgrjm | ( | double * | z, |
double * | w, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Radau-Jacobi zeros and weights with end point at z=-1.
Definition at line 119 of file Polylib.cpp.
References gammaFracGammaF(), jacobfd(), and jacobz.
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints(), and main().
void Polylib::zwgrjp | ( | double * | z, |
double * | w, | ||
const int | np, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Radau-Jacobi zeros and weights with end point at z=1.
Definition at line 158 of file Polylib.cpp.
References gammaFracGammaF(), jacobfd(), and jacobz.
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints(), and main().
void Polylib::zwlk | ( | double * | z, |
double * | w, | ||
const int | npt, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Lobatto-Kronrod-Jacobi zeros and weights.
Definition at line 420 of file Polylib.cpp.
References chri1(), JKMatrix(), RecCoeff(), and TriQL().
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints().
void Polylib::zwrk | ( | double * | z, |
double * | w, | ||
const int | npt, | ||
const double | alpha, | ||
const double | beta | ||
) |
Gauss-Radau-Kronrod-Jacobi zeros and weights.
Definition at line 313 of file Polylib.cpp.
References chri1(), JKMatrix(), RecCoeff(), and TriQL().
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints().