Intrepid
|
An abstract base class that defines interface for concrete basis implementations for Finite Element (FEM) and Finite Volume/Finite Difference (FVD) discrete spaces. More...
#include <Intrepid_Basis.hpp>
Public Member Functions | |
virtual | ~Basis () |
Destructor. | |
virtual void | getValues (ArrayScalar &outputValues, const ArrayScalar &inputPoints, const EOperator operatorType) const =0 |
Evaluation of a FEM basis on a reference cell. More... | |
virtual void | getValues (ArrayScalar &outputValues, const ArrayScalar &inputPoints, const ArrayScalar &cellVertices, const EOperator operatorType=OPERATOR_VALUE) const =0 |
Evaluation of an FVD basis evaluation on a physical cell. More... | |
virtual int | getCardinality () const |
Returns cardinality of the basis. More... | |
virtual int | getDegree () const |
Returns the degree of the basis. More... | |
virtual const shards::CellTopology | getBaseCellTopology () const |
Returns the base cell topology for which the basis is defined. See Shards documentation http://trilinos.sandia.gov/packages/shards for definition of base cell topology. More... | |
virtual EBasis | getBasisType () const |
Returns the basis type. More... | |
virtual ECoordinates | getCoordinateSystem () const |
Returns the type of coordinate system for which the basis is defined. More... | |
virtual int | getDofOrdinal (const int subcDim, const int subcOrd, const int subcDofOrd) |
DoF tag to ordinal lookup. More... | |
virtual const std::vector < std::vector< std::vector < int > > > & | getDofOrdinalData () |
DoF tag to ordinal data structure. | |
virtual const std::vector< int > & | getDofTag (const int dofOrd) |
DoF ordinal to DoF tag lookup. More... | |
virtual const std::vector < std::vector< int > > & | getAllDofTags () |
Retrieves all DoF tags. More... | |
Protected Attributes | |
int | basisCardinality_ |
Cardinality of the basis, i.e., the number of basis functions/degrees-of-freedom. | |
int | basisDegree_ |
Degree of the largest complete polynomial space that can be represented by the basis. | |
shards::CellTopology | basisCellTopology_ |
Base topology of the cells for which the basis is defined. See the Shards package http://trilinos.sandia.gov/packages/shards for definition of base cell topology. | |
EBasis | basisType_ |
Type of the basis. | |
ECoordinates | basisCoordinates_ |
The coordinate system for which the basis is defined. | |
bool | basisTagsAreSet_ |
"true" if tagToOrdinal_ and ordinalToTag_ have been initialized | |
std::vector< std::vector< int > > | ordinalToTag_ |
DoF ordinal to tag lookup table. More... | |
std::vector< std::vector < std::vector< int > > > | tagToOrdinal_ |
DoF tag to ordinal lookup table. More... | |
Private Member Functions | |
virtual void | initializeTags ()=0 |
Initializes tagToOrdinal_ and ordinalToTag_ lookup arrays. | |
An abstract base class that defines interface for concrete basis implementations for Finite Element (FEM) and Finite Volume/Finite Difference (FVD) discrete spaces.
A FEM basis spans a discrete space whose type can be either COMPLETE or INCOMPLETE. FEM basis functions are always defined on a reference cell and are dual to a unisolvent set of degrees-of-freedom (DoF). FEM basis requires cell topology with a reference cell. An FVD basis spans a discrete space whose type is typically BROKEN. The basis functions are defined directly on the physical cell and are dual to a set of DoFs on that cell. As a result, FVD bases require the vertex coordinates of the physical cell but the cell itself is not required to have a reference cell. Every DoF and its corresponding basis function from a given FEM or FVD basis set is assigned an ordinal number which which specifies its numerical position in the DoF set, and a 4-field DoF tag whose first 3 fields establish association between the DoF and a subcell of particular dimension, and the last field gives the total number of basis functions associated with that subcell; see Section \ref basis_dof_tag_ord_sec for details.
Definition at line 89 of file Intrepid_Basis.hpp.
|
virtual |
Retrieves all DoF tags.
Definition at line 89 of file Intrepid_BasisDef.hpp.
Referenced by Intrepid::Basis_HGRAD_QUAD_Cn_FEM< Scalar, ArrayScalar >::initializeTags(), and Intrepid::Basis_HGRAD_HEX_Cn_FEM< Scalar, ArrayScalar >::initializeTags().
|
inlinevirtual |
Returns the base cell topology for which the basis is defined. See Shards documentation http://trilinos.sandia.gov/packages/shards for definition of base cell topology.
Definition at line 112 of file Intrepid_BasisDef.hpp.
Referenced by Intrepid::Basis_HCURL_TET_In_FEM< Scalar, ArrayScalar >::Basis_HCURL_TET_In_FEM(), Intrepid::Basis_HCURL_TRI_In_FEM< Scalar, ArrayScalar >::Basis_HCURL_TRI_In_FEM(), Intrepid::Basis_HDIV_TET_In_FEM< Scalar, ArrayScalar >::Basis_HDIV_TET_In_FEM(), Intrepid::Basis_HDIV_TRI_In_FEM< Scalar, ArrayScalar >::Basis_HDIV_TRI_In_FEM(), Intrepid::Basis_HGRAD_TET_Cn_FEM< Scalar, ArrayScalar >::Basis_HGRAD_TET_Cn_FEM(), and main().
|
inlinevirtual |
|
inlinevirtual |
Returns cardinality of the basis.
Definition at line 100 of file Intrepid_BasisDef.hpp.
Referenced by Intrepid::Basis_HGRAD_QUAD_Cn_FEM< Scalar, ArrayScalar >::getValues(), Intrepid::Basis_HGRAD_HEX_Cn_FEM< Scalar, ArrayScalar >::getValues(), Intrepid::Basis_HGRAD_QUAD_Cn_FEM< Scalar, ArrayScalar >::initializeTags(), Intrepid::Basis_HGRAD_HEX_Cn_FEM< Scalar, ArrayScalar >::initializeTags(), and main().
|
inlinevirtual |
Returns the type of coordinate system for which the basis is defined.
Definition at line 124 of file Intrepid_BasisDef.hpp.
|
inlinevirtual |
Returns the degree of the basis.
Definition at line 118 of file Intrepid_BasisDef.hpp.
|
virtual |
DoF tag to ordinal lookup.
subcDim | [in] - tag field 0: dimension of the subcell associated with the DoF |
subcOrd | [in] - tag field 1: ordinal of the subcell defined by cell topology |
subcDofOrd | [in] - tag field 2: ordinal of the DoF relative to the subcell. |
Definition at line 51 of file Intrepid_BasisDef.hpp.
|
virtual |
DoF ordinal to DoF tag lookup.
dofOrd | [in] - ordinal of the DoF whose tag is being retrieved |
Definition at line 78 of file Intrepid_BasisDef.hpp.
|
pure virtual |
Evaluation of a FEM basis on a reference cell.
Returns values of <var>operatorType</var> acting on FEM basis functions for a set of points in the <strong>reference cell</strong> for which the basis is defined.
outputValues | [out] - variable rank array with the basis values |
inputPoints | [in] - rank-2 array (P,D) with the evaluation points |
operatorType | [in] - the operator acting on the basis functions |
Implemented in Intrepid::Basis_HGRAD_HEX_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Cn_FEM_JACOBI< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Hermite_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Cn_FEM_JACOBI< Scalar, Intrepid::FieldContainer< Scalar > >, Intrepid::Basis_HGRAD_HEX_I2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_WEDGE_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_HEX_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_WEDGE_I2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_WEDGE_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_HEX_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_PYR_I2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TET_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_QUAD_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_WEDGE_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TET_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TET_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TRI_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_COMP12_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_QUAD_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TET_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TRI_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TRI_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_QUAD_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_QUAD_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_HEX_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_HEX_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_QUAD_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_HEX_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_HEX_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TRI_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_PYR_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_WEDGE_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_QUAD_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_QUAD_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_Cn_FEM_ORTH< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_Cn_FEM_ORTH< Scalar, Intrepid::FieldContainer< Scalar > >, Intrepid::Basis_HGRAD_TRI_Cn_FEM_ORTH< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_Cn_FEM_ORTH< Scalar, Intrepid::FieldContainer< Scalar > >, and Intrepid::Basis_HGRAD_POLY_C1_FEM< Scalar, ArrayScalar >.
Referenced by Intrepid::Basis_HGRAD_QUAD_Cn_FEM< Scalar, ArrayScalar >::getValues(), and Intrepid::Basis_HGRAD_HEX_Cn_FEM< Scalar, ArrayScalar >::getValues().
|
pure virtual |
Evaluation of an FVD basis evaluation on a physical cell.
Returns values of <var>operatorType</var> acting on FVD basis functions for a set of points in the <strong>physical cell</strong> for which the FVD basis is defined.
outputValues | [out] - variable rank array with the basis values |
inputPoints | [in] - rank-2 array (P,D) with the evaluation points |
cellVertices | [in] - rank-2 array (V,D) with the vertices of the physical cell |
operatorType | [in] - the operator acting on the basis functions |
Implemented in Intrepid::Basis_HGRAD_HEX_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Cn_FEM_JACOBI< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Hermite_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Cn_FEM_JACOBI< Scalar, Intrepid::FieldContainer< Scalar > >, Intrepid::Basis_HGRAD_HEX_I2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_WEDGE_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_HEX_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_WEDGE_I2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_WEDGE_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_HEX_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_PYR_I2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TET_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_QUAD_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_WEDGE_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TET_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TET_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TRI_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_COMP12_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_QUAD_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TET_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_TRI_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TRI_I1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_QUAD_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_QUAD_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HDIV_HEX_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_HEX_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_QUAD_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_HEX_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_HEX_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HCURL_TRI_In_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_C2_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_PYR_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_WEDGE_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_QUAD_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_LINE_C1_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_QUAD_Cn_FEM< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_Cn_FEM_ORTH< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TET_Cn_FEM_ORTH< Scalar, Intrepid::FieldContainer< Scalar > >, Intrepid::Basis_HGRAD_TRI_Cn_FEM_ORTH< Scalar, ArrayScalar >, Intrepid::Basis_HGRAD_TRI_Cn_FEM_ORTH< Scalar, Intrepid::FieldContainer< Scalar > >, and Intrepid::Basis_HGRAD_POLY_C1_FEM< Scalar, ArrayScalar >.
|
protected |
DoF ordinal to tag lookup table.
Rank-2 array with dimensions (basisCardinality_, 4) containing the DoF tags. This array is left empty at instantiation and filled by initializeTags() only when tag data is requested.
Definition at line 134 of file Intrepid_Basis.hpp.
|
protected |
DoF tag to ordinal lookup table.
Rank-3 array with dimensions (maxScDim + 1, maxScOrd + 1, maxDfOrd + 1), i.e., the columnwise maximums of the 1st three columns in the DoF tag table for the basis plus 1. For every triple (subscDim, subcOrd, subcDofOrd) that is valid DoF tag data this array stores the corresponding DoF ordinal. If the triple does not correspond to tag data, the array stores -1. This array is left empty at instantiation and filled by initializeTags() only when tag data is requested.
Definition at line 147 of file Intrepid_Basis.hpp.