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... | |
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 1522 of file Polylib.cpp.
Referenced by zwlk(), and zwrk().
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 543 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 687 of file Polylib.cpp.
References gammaF(), 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 586 of file Polylib.cpp.
References gammaF(), 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 636 of file Polylib.cpp.
References gammaF(), and jacobd().
Referenced by Nektar::LibUtilities::GaussPoints::CalculateDerivMatrix(), and main().
double Polylib::gammaF | ( | const double | x | ) |
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 1158 of file Polylib.cpp.
Referenced by Dglj(), Dgrjm(), Dgrjp(), RecCoeff(), 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 749 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 855 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 784 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 820 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 1565 of file Polylib.cpp.
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 884 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 974 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 913 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 943 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 1131 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 1031 of file Polylib.cpp.
Referenced by Nektar::LibUtilities::Basis::GenBasis(), jacobd(), Jacobz(), main(), Nektar::MultiRegions::ExpList1D::PeriodicEval(), 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 1195 of file Polylib.cpp.
References EPS, jacobfd(), and STOP.
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 1250 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 1441 of file Polylib.cpp.
Referenced by zwgk(), zwlk(), and zwrk().
double Polylib::laginterp | ( | double | z, |
int | j, | ||
const double * | zj, | ||
int | np | ||
) |
Definition at line 43 of file Polylib.cpp.
References optdiff().
Referenced by hgj(), hglj(), hgrjm(), and hgrjp().
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 23 of file Polylib.cpp.
References L.
Referenced by laginterp().
|
static |
The routine finds the recurrence coefficients a and b of the orthogonal polynomials.
Definition at line 1281 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 1339 of file Polylib.cpp.
References CellMLToNektar.cellml_metadata::p, sign, 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 gammaF(), 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 237 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 193 of file Polylib.cpp.
References gammaF(), 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 gammaF(), 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 157 of file Polylib.cpp.
References gammaF(), 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 417 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 310 of file Polylib.cpp.
References chri1(), JKMatrix(), RecCoeff(), and TriQL().
Referenced by Nektar::LibUtilities::GaussPoints::CalculatePoints().