OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType > Class Template Reference

This is class represents the Gauss-Jacobi quadrature rule on a reference element. More...

#include <GaussJacobiQuadrature.h>

Inheritance diagram for ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >:
Inheritance graph
Collaboration diagram for ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >:
Collaboration graph

Public Types

using scalar_t = double
 

Public Member Functions

 GaussJacobiQuadrature (const ElementType &ref_element, const T &alpha, const T &beta, const size_t &max_newton_itersations=10, const size_t &min_newton_iterations=1)
 Construct a new Gauss Jacobi Quadrature rule object. More...
 
void computeNodesAndWeights () override
 Computes the quadrature nodes and weights and stores them in the quadrature nodes and weights arrays. More...
 
scalar_t getChebyshevNodes (const size_t &i) const
 Returns the i-th Chebyshev node, used as initial guess for the Newton iterations. More...
 
size_t getOrder () const
 Returns the order of the quadrature rule. More...
 
size_t getDegree () const
 Returns the degree of exactness of the quadrature rule. More...
 
Vector< T, numElementNodesgetWeightsForRefElement () const
 Get the quadrature weights for the reference element. More...
 
Vector< Vector< T, dim >, numElementNodesgetIntegrationNodesForRefElement () const
 Get the integration (quadrature) nodes for the reference element. More...
 
Vector< T, NumNodes1D > getIntegrationNodes1D (const T &a, const T &b) const
 Get the quadrature nodes for one dimension. More...
 
Vector< T, NumNodes1D > getWeights1D (const T &a, const T &b) const
 Get the quadrature weights for one dimension. More...
 

Static Public Attributes

static constexpr unsigned numNodes1D = NumNodes1D
 
static constexpr unsigned dim = ElementType::dim
 
static constexpr unsigned numElementNodes
 

Protected Attributes

unsigned degree_m
 
const ElementTyperef_element_m
 
Vector< T, NumNodes1D > integration_nodes_m
 
Vector< T, NumNodes1D > weights_m
 
T a_m
 
T b_m
 

Private Member Functions

scalar_t getLehrFEMInitialGuess (const size_t &i, const Vector< scalar_t, NumNodes1D > &integration_nodes) const
 Computes the initial guess for the Newton iterations, the way they are computed in the implementation from LehrFEM++. More...
 

Private Attributes

const T alpha_m
 
const T beta_m
 
const size_t max_newton_iterations_m
 
const size_t min_newton_iterations_m
 

Detailed Description

template<typename T, unsigned NumNodes1D, typename ElementType>
class ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >

This is class represents the Gauss-Jacobi quadrature rule on a reference element.

Template Parameters
Tfloating point number type of the quadrature nodes and weights
NumNodes1Dnumber of quadrature nodes for one dimension
ElementTypeelement type for which the quadrature rule is defined

Definition at line 27 of file GaussJacobiQuadrature.h.

Member Typedef Documentation

◆ scalar_t

template<typename T , unsigned NumNodes1D, typename ElementType >
using ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::scalar_t = double

Definition at line 31 of file GaussJacobiQuadrature.h.

Constructor & Destructor Documentation

◆ GaussJacobiQuadrature()

template<typename T , unsigned NumNodes1D, typename ElementType >
ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::GaussJacobiQuadrature ( const ElementType ref_element,
const T alpha,
const T beta,
const size_t &  max_newton_itersations = 10,
const size_t &  min_newton_iterations = 1 
)

Construct a new Gauss Jacobi Quadrature rule object.

Parameters
ref_elementreference element to compute the quadrature nodes on
alphafirst Jacobi parameter alpha
betasecond Jacobi parameter beta
max_newton_itersationsmaximum number of Newton iterations (default 10)
min_newton_iterationsminimum number of Newton iterations (default 1)

Definition at line 6 of file GaussJacobiQuadrature.hpp.

References ippl::Quadrature< T, NumNodes1D, ElementType >::a_m, Physics::alpha, ippl::Quadrature< T, NumNodes1D, ElementType >::b_m, ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::computeNodesAndWeights(), ippl::Quadrature< T, NumNodes1D, ElementType >::degree_m, ippl::Quadrature< T, NumNodes1D, ElementType >::integration_nodes_m, ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::max_newton_iterations_m, ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::min_newton_iterations_m, and ippl::Quadrature< T, NumNodes1D, ElementType >::weights_m.

Here is the call graph for this function:

Member Function Documentation

◆ computeNodesAndWeights()

template<typename T , unsigned NumNodes1D, typename ElementType >
void ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::computeNodesAndWeights
overridevirtual

Computes the quadrature nodes and weights and stores them in the quadrature nodes and weights arrays.

the following algorithm for computing the roots and weights for the Gauss-Jacobi quadrature has been taken from LehrFEM++ (MIT License) https://craffael.github.io/lehrfempp/gauss__quadrature_8cc_source.html

Implements ippl::Quadrature< T, NumNodes1D, ElementType >.

Definition at line 91 of file GaussJacobiQuadrature.hpp.

References Physics::alpha, Physics::c, ippl::Chebyshev, Physics::e, endl(), and ippl::LehrFEM.

Referenced by ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::GaussJacobiQuadrature().

Here is the call graph for this function:

◆ getChebyshevNodes()

template<typename T , unsigned NumNodes1D, typename ElementType >
GaussJacobiQuadrature< T, NumNodes1D, ElementType >::scalar_t ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::getChebyshevNodes ( const size_t &  i) const

Returns the i-th Chebyshev node, used as initial guess for the Newton iterations.

Parameters
iindex of the Chebyshev node
Returns
scalar_t - i-th Chebyshev node

Definition at line 34 of file GaussJacobiQuadrature.hpp.

◆ getDegree()

template<typename T , unsigned NumNodes1D, typename ElementType >
size_t ippl::Quadrature< T, NumNodes1D, ElementType >::getDegree
inherited

Returns the degree of exactness of the quadrature rule.

Returns
unsigned - degree

Definition at line 13 of file Quadrature.hpp.

◆ getIntegrationNodes1D()

template<typename T , unsigned NumNodes1D, typename ElementType >
Vector< T, NumNodes1D > ippl::Quadrature< T, NumNodes1D, ElementType >::getIntegrationNodes1D ( const T a,
const T b 
) const
inherited

Get the quadrature nodes for one dimension.

(With respect to the given domain [a, b])

Parameters
alocal domain start
blocal domain end
Returns
Vector<T, NumNodes1D>

Definition at line 72 of file Quadrature.hpp.

◆ getIntegrationNodesForRefElement()

template<typename T , unsigned NumNodes1D, typename ElementType >
Vector< Vector< T, Quadrature< T, NumNodes1D, ElementType >::dim >, Quadrature< T, NumNodes1D, ElementType >::numElementNodes > ippl::Quadrature< T, NumNodes1D, ElementType >::getIntegrationNodesForRefElement
inherited

Get the integration (quadrature) nodes for the reference element.

Returns
Vector<Vector<T, Dim>, numElementNodes>

Definition at line 47 of file Quadrature.hpp.

◆ getLehrFEMInitialGuess()

template<typename T , unsigned NumNodes1D, typename ElementType >
GaussJacobiQuadrature< T, NumNodes1D, ElementType >::scalar_t ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::getLehrFEMInitialGuess ( const size_t &  i,
const Vector< scalar_t, NumNodes1D > &  integration_nodes 
) const
private

Computes the initial guess for the Newton iterations, the way they are computed in the implementation from LehrFEM++.

Parameters
iindex of the initial guess (corresponding to the i-th quadrature node)
integration_nodesthe integration nodes
Returns
scalar_t - initial guess

Definition at line 41 of file GaussJacobiQuadrature.hpp.

◆ getOrder()

template<typename T , unsigned NumNodes1D, typename ElementType >
size_t ippl::Quadrature< T, NumNodes1D, ElementType >::getOrder
inherited

Returns the order of the quadrature rule.

(order = degree + 1)

Returns
unsigned - order

Definition at line 8 of file Quadrature.hpp.

◆ getWeights1D()

template<typename T , unsigned NumNodes1D, typename ElementType >
Vector< T, NumNodes1D > ippl::Quadrature< T, NumNodes1D, ElementType >::getWeights1D ( const T a,
const T b 
) const
inherited

Get the quadrature weights for one dimension.

(With respect to the given domain [a, b])

Parameters
alocal domain start
blocal domain end
Returns
Vector<T, NumNodes1D>

Definition at line 81 of file Quadrature.hpp.

◆ getWeightsForRefElement()

template<typename T , unsigned NumNodes1D, typename ElementType >
Vector< T, Quadrature< T, NumNodes1D, ElementType >::numElementNodes > ippl::Quadrature< T, NumNodes1D, ElementType >::getWeightsForRefElement
inherited

Get the quadrature weights for the reference element.

Returns
Vector<T, numElementNodes>

Definition at line 19 of file Quadrature.hpp.

Member Data Documentation

◆ a_m

template<typename T , unsigned NumNodes1D, typename ElementType >
T ippl::Quadrature< T, NumNodes1D, ElementType >::a_m
protectedinherited

◆ alpha_m

template<typename T , unsigned NumNodes1D, typename ElementType >
const T ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::alpha_m
private

Definition at line 74 of file GaussJacobiQuadrature.h.

◆ b_m

template<typename T , unsigned NumNodes1D, typename ElementType >
T ippl::Quadrature< T, NumNodes1D, ElementType >::b_m
protectedinherited

◆ beta_m

template<typename T , unsigned NumNodes1D, typename ElementType >
const T ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::beta_m
private

Definition at line 75 of file GaussJacobiQuadrature.h.

◆ degree_m

template<typename T , unsigned NumNodes1D, typename ElementType >
unsigned ippl::Quadrature< T, NumNodes1D, ElementType >::degree_m
protectedinherited

◆ dim

template<typename T , unsigned NumNodes1D, typename ElementType >
constexpr unsigned ippl::Quadrature< T, NumNodes1D, ElementType >::dim = ElementType::dim
staticconstexprinherited

Definition at line 41 of file Quadrature.h.

◆ integration_nodes_m

template<typename T , unsigned NumNodes1D, typename ElementType >
Vector<T, NumNodes1D> ippl::Quadrature< T, NumNodes1D, ElementType >::integration_nodes_m
protectedinherited

◆ max_newton_iterations_m

template<typename T , unsigned NumNodes1D, typename ElementType >
const size_t ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::max_newton_iterations_m
private

◆ min_newton_iterations_m

template<typename T , unsigned NumNodes1D, typename ElementType >
const size_t ippl::GaussJacobiQuadrature< T, NumNodes1D, ElementType >::min_newton_iterations_m
private

◆ numElementNodes

template<typename T , unsigned NumNodes1D, typename ElementType >
constexpr unsigned ippl::Quadrature< T, NumNodes1D, ElementType >::numElementNodes
staticconstexprinherited
Initial value:
=
getNumElementNodes(NumNodes1D, ElementType::dim)
constexpr unsigned getNumElementNodes(unsigned NumNodes1D, unsigned Dim)
Definition: Quadrature.h:21

Definition at line 44 of file Quadrature.h.

◆ numNodes1D

template<typename T , unsigned NumNodes1D, typename ElementType >
constexpr unsigned ippl::Quadrature< T, NumNodes1D, ElementType >::numNodes1D = NumNodes1D
staticconstexprinherited

Definition at line 38 of file Quadrature.h.

◆ ref_element_m

template<typename T , unsigned NumNodes1D, typename ElementType >
const ElementType& ippl::Quadrature< T, NumNodes1D, ElementType >::ref_element_m
protectedinherited

Definition at line 112 of file Quadrature.h.

◆ weights_m

template<typename T , unsigned NumNodes1D, typename ElementType >
Vector<T, NumNodes1D> ippl::Quadrature< T, NumNodes1D, ElementType >::weights_m
protectedinherited

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