Intrepid2
|
Implementation file for the abstract base class Intrepid2::Basis. More...
#include <stdexcept>
Go to the source code of this file.
Functions | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getFieldRank (const EFunctionSpace spaceType) |
Returns the rank of fields in a function space of the specified type. More... | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getOperatorRank (const EFunctionSpace spaceType, const EOperator operatorType, const ordinal_type spaceDim) |
Returns rank of an operator. More... | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getOperatorOrder (const EOperator operatorType) |
Returns order of an operator. More... | |
template<EOperator operatorType> | |
KOKKOS_INLINE_FUNCTION constexpr ordinal_type | Intrepid2::getOperatorOrder () |
template<ordinal_type spaceDim> | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getDkEnumeration (const ordinal_type xMult, const ordinal_type yMult=-1, const ordinal_type zMult=-1) |
Returns the ordinal of a partial derivative of order k based on the multiplicities of the partials dx, dy, and dz. More... | |
template<ordinal_type spaceDim> | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getPnEnumeration (const ordinal_type p, const ordinal_type q=0, const ordinal_type r=0) |
Returns the index of the term x^p y^q z^r of a polynomial of degree n (p+q+r <= n). In 2D, the terms of a polynomial of degree 2 are ordered as 1, x, y, x^2, xy, y^2. So if p=q=1, the term x^p y^q has index 4 (counting from 0), while p=2, q=0 has index 3. Enumeration goes from 0 to ( (n+spaceDim) choose (spaceDim) )-1. More... | |
template<typename value_type > | |
KOKKOS_INLINE_FUNCTION void | Intrepid2::getJacobyRecurrenceCoeffs (value_type &an, value_type &bn, value_type &cn, const ordinal_type alpha, const ordinal_type beta, const ordinal_type n) |
function for computing the Jacobi recurrence coefficients so that More... | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getDkCardinality (const EOperator operatorType, const ordinal_type spaceDim) |
Returns multiplicities of dx, dy, and dz based on the enumeration of the partial derivative, its order and the space dimension. Inverse of the getDkEnumeration() method. More... | |
template<EOperator operatorType, ordinal_type spaceDim> | |
KOKKOS_INLINE_FUNCTION constexpr ordinal_type | Intrepid2::getDkCardinality () |
template<ordinal_type spaceDim> | |
KOKKOS_INLINE_FUNCTION ordinal_type | Intrepid2::getPnCardinality (ordinal_type n) |
Returns cardinality of Polynomials of order n (P^n). More... | |
template<ordinal_type spaceDim, ordinal_type n> | |
KOKKOS_INLINE_FUNCTION constexpr ordinal_type | Intrepid2::getPnCardinality () |
template<typename outputValueViewType , typename inputPointViewType > | |
void | Intrepid2::getValues_HGRAD_Args (const outputValueViewType outputValues, const inputPointViewType inputPoints, const EOperator operatorType, const shards::CellTopology cellTopo, const ordinal_type basisCard) |
Runtime check of the arguments for the getValues method in an HGRAD-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType. More... | |
template<typename outputValueViewType , typename inputPointViewType > | |
void | Intrepid2::getValues_HCURL_Args (const outputValueViewType outputValues, const inputPointViewType inputPoints, const EOperator operatorType, const shards::CellTopology cellTopo, const ordinal_type basisCard) |
Runtime check of the arguments for the getValues method in an HCURL-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType. More... | |
template<typename outputValueViewType , typename inputPointViewType > | |
void | Intrepid2::getValues_HDIV_Args (const outputValueViewType outputValues, const inputPointViewType inputPoints, const EOperator operatorType, const shards::CellTopology cellTopo, const ordinal_type basisCard) |
Runtime check of the arguments for the getValues method in an HDIV-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType. More... | |
template<typename outputValueViewType , typename inputPointViewType > | |
void | Intrepid2::getValues_HVOL_Args (const outputValueViewType outputValues, const inputPointViewType inputPoints, const EOperator operatorType, const shards::CellTopology cellTopo, const ordinal_type basisCard) |
Runtime check of the arguments for the getValues method in an HVOL-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType. More... | |
Implementation file for the abstract base class Intrepid2::Basis.
Definition in file Intrepid2_BasisDef.hpp.
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getDkCardinality | ( | const EOperator | operatorType, |
const ordinal_type | spaceDim | ||
) |
Returns multiplicities of dx, dy, and dz based on the enumeration of the partial derivative, its order and the space dimension. Inverse of the getDkEnumeration() method.
partialMult | [out] - array with the multiplicities f dx, dy and dz |
derivativeEnum | [in] - enumeration of the partial derivative |
operatorType | [in] - k-th partial derivative Dk |
spaceDim | [in] - space dimensionReturns cardinality of Dk, i.e., the number of all derivatives of order k. |
The set of all partial derivatives of order k is isomorphic to the set of all multisets of cardinality k with elements taken from the sets {x}, {x,y}, and {x,y,z} in 1D, 2D, and 3D respectively. For example, the partial derivative maps to the multiset
with multiplicities
. The number of all such multisets is given by the binomial coefficient
Therefore:
operatorType | [in] - k-th derivative operator Dk |
spaceDim | [in] - space dimension |
Definition at line 410 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getDkCardinality().
Referenced by Intrepid2::getDkCardinality().
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getDkEnumeration | ( | const ordinal_type | xMult, |
const ordinal_type | yMult = -1 , |
||
const ordinal_type | zMult = -1 |
||
) |
Returns the ordinal of a partial derivative of order k based on the multiplicities of the partials dx, dy, and dz.
By default, any implementation of Intrepid2::Basis method returns partials of order k (specified by OPERATOR_Dk) as a multiset ordered by the lexicographical order of the partial derivatives multiplicities. For example, the 10 derivatives of order 3 in 3D are enumerated as:
D3={(3,0,0),(2,1,0),(2,0,1),(1,2,0),(1,1,1),(1,0,2),(0,3,0),(0,2,1),(0,1,2),(0,0,3)}
The enumeration formula for this lexicographical order is
![]() | in 1D (only 1 derivative) |
![]() | in 2D |
![]() | in 3D |
where the order k of Dk is defined by xMult + yMult + zMult. However, xMult is not really needed needed. Enumeration goes from 0 to ( (k+spaceDim-1) choose (spaceDim-1) )-1.
yMult | [in] - multiplicity of dy (default = -1) |
zMult | [in] - multiplicity of dz (default = -1) |
Definition at line 240 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getDkEnumeration().
Referenced by Intrepid2::getDkEnumeration().
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getFieldRank | ( | const EFunctionSpace | spaceType | ) |
Returns the rank of fields in a function space of the specified type.
Field rank is defined as the number of indices needed to specify function value and equals 0, 1,or 2 for scalars, vectors and tensors, respectively. The scalar field spaces in Intrepid are FUNCTION_SPACE_HGRAD and FUNCTION_SPACE_HVOL. The vector field spaces are FUNCTION_SPACE_HCURL, FUNCTION_SPACE_HDIV and FUNCTION_SPACE_VECTOR_HGRAD. FUNCTION_SPACE_TENSOR_HGRAD contains rank-2 tensors.
spaceType | [in] - function space type |
Definition at line 67 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getFieldRank().
Referenced by Intrepid2::getFieldRank(), and Intrepid2::getOperatorRank().
KOKKOS_INLINE_FUNCTION void Intrepid2::getJacobyRecurrenceCoeffs | ( | value_type & | an, |
value_type & | bn, | ||
value_type & | cn, | ||
const ordinal_type | alpha, | ||
const ordinal_type | beta, | ||
const ordinal_type | n | ||
) |
function for computing the Jacobi recurrence coefficients so that
an | [out] - the a weight for recurrence |
bn | [out] - the b weight for recurrence |
cn | [out] - the c weight for recurrence |
alpha | [in] - the first Jacobi weight |
beta | [in] - the second Jacobi weight |
n | [n] - the polynomial degree |
The recurrence is
, where
Definition at line 284 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getJacobyRecurrenceCoeffs().
Referenced by Intrepid2::getJacobyRecurrenceCoeffs().
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getOperatorOrder | ( | const EOperator | operatorType | ) |
Returns order of an operator.
operatorType | [in] - type of the operator whose order we want to know |
Definition at line 194 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getOperatorOrder().
Referenced by Intrepid2::getOperatorOrder().
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getOperatorRank | ( | const EFunctionSpace | spaceType, |
const EOperator | operatorType, | ||
const ordinal_type | spaceDim | ||
) |
Returns rank of an operator.
When an operator acts on a field of a certain rank, the result can be a field with the same or a different rank. Operator rank is defined the difference between the ranks of the output field and the input field:
Rank(OPERATOR) = Rank(OPERATOR(FIELD)) - Rank(FIELD)
Therefore, operator rank allows us to figure out the rank of the result:
Rank(OPERATOR(FIELD)) = Rank(FIELD) + Rank(OPERATOR)
and provides means to size properly arrays for output results. The following table summarizes operator ranks (~ denotes undefined, below slash means 3D). By default, in 1D any operator other than VALUE has rank 1, i.e., GRAD, CURL and DIV reduce to d/dx and Dk are the higher-order derivatives d^k/dx^k. Only scalar functions are allowed in 1D.
|========|======|============================|=========|==========|==========|==========| | field | rank | FUNCTION_SPACE_[type] | VALUE | GRAD, Dk | CURL | DIV | |--------|------|----------------------------|---------|----------|----------|----------| | scalar | 0 | HGRAD, HVOL | 0 | 1 | 3-dim/~ | ~ | | vector | 1 | HCURL, HDIV, VECTOR_HGRAD | 0 | 1 | dim - 3 | -1 | | tensor | 2 | TENSOR_HGRAD | 0 | 1 | dim - 3 | -1 | |--------|------|----------------------------|---------|----------|----------|----------| | 1D | 0 | HGRAD, HVOL only | 0 | 1 | 1 | 1 | |=======================================================================================|
spaceType | [in] - function space type |
operatorType | [in] - the operator acting on the specified function space |
spaceDim | [in] - spatial dimension |
Definition at line 96 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getFieldRank(), and Intrepid2::getOperatorRank().
Referenced by Intrepid2::getOperatorRank().
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getPnCardinality | ( | ordinal_type | n | ) |
Returns cardinality of Polynomials of order n (P^n).
n | [in] - polynomial order |
Definition at line 449 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getPnCardinality().
Referenced by Intrepid2::getPnCardinality().
KOKKOS_INLINE_FUNCTION ordinal_type Intrepid2::getPnEnumeration | ( | const ordinal_type | p, |
const ordinal_type | q = 0 , |
||
const ordinal_type | r = 0 |
||
) |
Returns the index of the term x^p y^q z^r of a polynomial of degree n (p+q+r <= n). In 2D, the terms of a polynomial of degree 2 are ordered as 1, x, y, x^2, xy, y^2. So if p=q=1, the term x^p y^q has index 4 (counting from 0), while p=2, q=0 has index 3. Enumeration goes from 0 to ( (n+spaceDim) choose (spaceDim) )-1.
p | [in] - exponent of x in the polynomial term x^p y^q z^r |
q | [in] - exponent of y in the polynomial term x^p y^q z^r (default = 0) |
r | [in] - exponent of z in the polynomial term x^p y^q z^r (default = 0) |
Definition at line 273 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getPnEnumeration().
Referenced by Intrepid2::getPnEnumeration().
void Intrepid2::getValues_HCURL_Args | ( | const outputValueViewType | outputValues, |
const inputPointViewType | inputPoints, | ||
const EOperator | operatorType, | ||
const shards::CellTopology | cellTopo, | ||
const ordinal_type | basisCard | ||
) |
Runtime check of the arguments for the getValues method in an HCURL-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType.
outputValues | [in] - array of variable rank for the output basis values |
inputPoints | [in] - rank-2 array with dimensions (P,D) containing the points |
operatorType | [in] - operator applied to basis functions |
cellTopo | [in] - base cell topology on which the basis is defined |
basisCard | [in] - cardinality of the basis |
Definition at line 603 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getValues_HCURL_Args().
Referenced by Intrepid2::getValues_HCURL_Args().
void Intrepid2::getValues_HDIV_Args | ( | const outputValueViewType | outputValues, |
const inputPointViewType | inputPoints, | ||
const EOperator | operatorType, | ||
const shards::CellTopology | cellTopo, | ||
const ordinal_type | basisCard | ||
) |
Runtime check of the arguments for the getValues method in an HDIV-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType.
outputValues | [in] - array of variable rank for the output basis values |
inputPoints | [in] - rank-2 array with dimensions (P,D) containing the points |
operatorType | [in] - operator applied to basis functions |
cellTopo | [in] - base cell topology on which the basis is defined |
basisCard | [in] - cardinality of the basis |
Definition at line 688 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getValues_HDIV_Args().
Referenced by Intrepid2::getValues_HDIV_Args().
void Intrepid2::getValues_HGRAD_Args | ( | const outputValueViewType | outputValues, |
const inputPointViewType | inputPoints, | ||
const EOperator | operatorType, | ||
const shards::CellTopology | cellTopo, | ||
const ordinal_type | basisCard | ||
) |
Runtime check of the arguments for the getValues method in an HGRAD-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType.
outputValues | [in] - array of variable rank for the output basis values |
inputPoints | [in] - rank-2 array with dimensions (P,D) containing the points |
operatorType | [in] - operator applied to basis functions |
cellTopo | [in] - base cell topology on which the basis is defined |
basisCard | [in] - cardinality of the basis |
Definition at line 484 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getValues_HGRAD_Args().
Referenced by Intrepid2::getValues_HGRAD_Args().
void Intrepid2::getValues_HVOL_Args | ( | const outputValueViewType | outputValues, |
const inputPointViewType | inputPoints, | ||
const EOperator | operatorType, | ||
const shards::CellTopology | cellTopo, | ||
const ordinal_type | basisCard | ||
) |
Runtime check of the arguments for the getValues method in an HVOL-conforming FEM basis. Verifies that ranks and dimensions of ViewType input and output arrays are consistent with the specified operatorType.
outputValues | [in] - array of variable rank for the output basis values |
inputPoints | [in] - rank-2 array with dimensions (P,D) containing the points |
operatorType | [in] - operator applied to basis functions |
cellTopo | [in] - base cell topology on which the basis is defined |
basisCard | [in] - cardinality of the basis |
Definition at line 749 of file Intrepid2_BasisDef.hpp.
References Intrepid2::getValues_HVOL_Args().
Referenced by Intrepid2::getValues_HVOL_Args().