escript  Revision_
ReferenceElements.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2020 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 
19 /****************************************************************************
20 
21  Finley: Reference elements
22 
23 *****************************************************************************/
24 
25 #ifndef __FINLEY_REFERENCEELEMENTS_H__
26 #define __FINLEY_REFERENCEELEMENTS_H__
27 
28 #include "Finley.h"
29 #include "ShapeFunctions.h"
30 #include "Quadrature.h"
31 
32 // The ids of the allowed reference elements:
33 #define MAX_numNodes 64
34 #define MAX_numSubElements 8
35 #define MAX_numSides 2
36 
37 namespace finley {
38 
39 typedef enum {
115  Hex27Macro,
116  NoRef // marks end of list
117 } ElementTypeId;
118 
119 
125  const char* Name;
127  int numNodes;
129  int numSubElements;
132  int numSides;
135  int offsets[MAX_numSides+1];
136 
147 
152 
156 
159  int numNodesOnFace;
160 
161  // the following lists are only used for face elements defined by
162  // numNodesOnFace>0:
163 
165  int faceNodes[MAX_numNodes];
166 
167  // shiftNodes={-1} or reverseNodes={-1} are ignored.
173 };
174 
175 
177 struct ReferenceElement {
179  ReferenceElement(ElementTypeId id, int order);
180 
183 
185  static const ReferenceElementInfo* getInfo(ElementTypeId id);
186 
188  static ElementTypeId getTypeId(const char*);
189 
191  int getNumNodes() const { return Type->numNodes; }
192 
199  int numNodes;
207  double* DBasisFunctionDv;
211 };
212 
213 typedef boost::shared_ptr<ReferenceElement> ReferenceElement_ptr;
214 typedef boost::shared_ptr<const ReferenceElement> const_ReferenceElement_ptr;
215 
216 } // namespace finley
217 
218 #endif // __FINLEY_REFERENCEELEMENTS_H__
219 
finley::ReferenceElementInfo::Parametrization
ShapeFunctionTypeId Parametrization
shape function for parametrization of the element
Definition: ReferenceElements.h:142
finley::QuadInfo
Definition: Quadrature.h:52
finley::ReferenceElementInfo::offsets
int offsets[2+1]
Definition: ReferenceElements.h:133
finley::ReferenceElement::numNodes
int numNodes
Definition: ReferenceElements.h:197
finley::ShapeFunction
this struct holds the evaluation of a shape function on a quadrature scheme
Definition: ShapeFunctions.h:76
finley::RecQuad
Definition: Quadrature.h:37
finley::Rec4_Contact
Definition: ReferenceElements.h:85
finley::Hex27Face_Contact
Definition: ReferenceElements.h:107
finley::Rec9Shape
Definition: ShapeFunctions.h:40
finley::Line3
Definition: ReferenceElements.h:40
escript::DataTypes::real_t
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:76
finley::ReferenceElementInfo::numNodesOnFace
int numNodesOnFace
Definition: ReferenceElements.h:157
speckley::Rectangle::reduction_order10
void reduction_order10(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:214
finley::ReferenceElementInfo::TypeId
ElementTypeId TypeId
the type
Definition: ReferenceElements.h:121
finley::ReferenceElement_ptr
boost::shared_ptr< ReferenceElement > ReferenceElement_ptr
Definition: ReferenceElements.h:211
finley::Rec9
Definition: ReferenceElements.h:48
escript::Data::requireWrite
void requireWrite()
Ensures data is ready for write access. This means that the data will be resolved if lazy and will be...
Definition: Data.cpp:1243
finley::Line2Shape
Definition: ShapeFunctions.h:31
speckley::Rectangle::integral_order4
void integral_order4(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:88
finley::Rec8Face_Contact
Definition: ReferenceElements.h:98
finley::Hex32
Definition: ReferenceElements.h:57
INDEX4
#define INDEX4(_X1_, _X2_, _X3_, _X4_, _N1_, _N2_, _N3_)
Definition: index.h:26
finley::Hex20Face_Contact
Definition: ReferenceElements.h:106
finley::Tri10Face_Contact
Definition: ReferenceElements.h:96
finley::Rec9Face_Contact
Definition: ReferenceElements.h:99
speckley::Rectangle::reduction_order8
void reduction_order8(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:170
Quadrature.h
finley::ReferenceElementInfo::BasisFunctions
ShapeFunctionTypeId BasisFunctions
shape function for the basis functions
Definition: ReferenceElements.h:144
finley::Tri9
Definition: ReferenceElements.h:44
finley::ReferenceElement::LinearType
const ReferenceElementInfo * LinearType
type of the linear reference element
Definition: ReferenceElements.h:194
speckley::Rectangle::reduction_order3
void reduction_order3(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:60
INDEX2
#define INDEX2(_X1_, _X2_, _N1_)
Definition: index.h:22
finley::ReferenceElementInfo::subElementNodes
int subElementNodes[64 *2 *8]
Definition: ReferenceElements.h:149
finley::Tet16Face
Definition: ReferenceElements.h:72
finley::Hex27Face
Definition: ReferenceElements.h:75
finley::Tet4Face_Contact
Definition: ReferenceElements.h:102
escript::Data::getSampleDataRO
const DataTypes::real_t * getSampleDataRO(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0) const
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1988
finley::Line3_Contact
Definition: ReferenceElements.h:79
speckley::Rectangle::gradient_order8
void gradient_order8(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:335
finley::ReferenceElement::getTypeId
static ElementTypeId getTypeId(const char *)
returns the element type id from its textual representation
Definition: ReferenceElements.cpp:666
finley::Tet10
Definition: ReferenceElements.h:52
finley::NoQuad
Definition: Quadrature.h:40
finley::ReferenceElement_InfoList
const ReferenceElementInfo ReferenceElement_InfoList[]
this list has been generated by generateReferenceElementList.py
Definition: ReferenceElements.cpp:47
finley::ShapeFunctionTypeId
ShapeFunctionTypeId
Definition: ShapeFunctions.h:29
speckley::Rectangle::reduction_order5
void reduction_order5(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:104
finley::Tet10Macro
Definition: ReferenceElements.h:112
finley::Line3Shape
Definition: ShapeFunctions.h:32
speckley::Rectangle::integral_order3
void integral_order3(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:63
finley::Tri6Face
Definition: ReferenceElements.h:62
finley::Tet4Face
Definition: ReferenceElements.h:70
finley::Line3Face
Definition: ReferenceElements.h:59
finley::ReferenceElement::numLocalDim
int numLocalDim
Definition: ReferenceElements.h:198
finley::ReferenceElementInfo::LinearTypeId
ElementTypeId LinearTypeId
type id of the linear version of the element
Definition: ReferenceElements.h:136
finley::ShapeFunctionInfo
this struct holds the definition of the shape functions on an element
Definition: ShapeFunctions.h:57
finley::const_ReferenceElement_ptr
boost::shared_ptr< const ReferenceElement > const_ReferenceElement_ptr
Definition: ReferenceElements.h:212
finley::ShapeFunctionInfo::TypeId
ShapeFunctionTypeId TypeId
shape function type
Definition: ShapeFunctions.h:59
finley::QuadInfo::numDim
int numDim
number of spatial dimensions
Definition: Quadrature.h:58
speckley::Rectangle::gradient_order3
void gradient_order3(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:85
finley::ShapeFunctionInfo::numDim
int numDim
number of spatial dimensions
Definition: ShapeFunctions.h:63
finley::Tet10Face
Definition: ReferenceElements.h:71
finley::ReferenceElement::Parametrization
const_ShapeFunction_ptr Parametrization
Definition: ReferenceElements.h:200
finley::Tri6Face_Contact
Definition: ReferenceElements.h:94
finley::Rec8Face
Definition: ReferenceElements.h:66
escript::Data::getDataPointSize
int getDataPointSize() const
Return the size of the data point. It is the product of the data point shape dimensions.
Definition: Data.cpp:1364
finley::Rec16Face_Contact
Definition: ReferenceElements.h:101
finley::NoShape
Definition: ShapeFunctions.h:50
finley::Rec8_Contact
Definition: ReferenceElements.h:86
finley::Tet16
Definition: ReferenceElements.h:53
speckley::Rectangle::integral_order6
void integral_order6(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:138
finley::ReferenceElement::DBasisFunctionDv
double * DBasisFunctionDv
Definition: ReferenceElements.h:205
finley::Tri3
Definition: ReferenceElements.h:42
speckley::Rectangle::gradient_order7
void gradient_order7(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:283
finley::Rec9Macro
Definition: ReferenceElements.h:111
finley::Line2Face
Definition: ReferenceElements.h:58
finley::Hex27
Definition: ReferenceElements.h:56
finley::Rec9_Contact
Definition: ReferenceElements.h:87
finley::Tri10
Definition: ReferenceElements.h:45
finley::Point1_Contact
Definition: ReferenceElements.h:77
speckley
Definition: AbstractAssembler.cpp:18
finley::Hex32Face
Definition: ReferenceElements.h:76
finley::Line4Face
Definition: ReferenceElements.h:60
MAX_numSides
#define MAX_numSides
Definition: ReferenceElements.h:33
finley::ReferenceElement::integrationOrder
int integrationOrder
used integration order
Definition: ReferenceElements.h:196
finley::Tri6Shape
Definition: ShapeFunctions.h:35
escript::Data
Data represents a collection of datapoints.
Definition: Data.h:63
finley::Rec12Face_Contact
Definition: ReferenceElements.h:100
finley::Rec9Face
Definition: ReferenceElements.h:67
finley::Tri9Face_Contact
Definition: ReferenceElements.h:95
INDEX3
#define INDEX3(_X1_, _X2_, _X3_, _N1_, _N2_)
Definition: index.h:24
speckley::Rectangle::integral_order9
void integral_order9(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:213
finley::ShapeFunction::getInfo
static const ShapeFunctionInfo * getInfo(ShapeFunctionTypeId id)
Definition: ShapeFunctions.cpp:119
finley::PointQuad
Definition: Quadrature.h:34
finley::Tri6Macro
Definition: ReferenceElements.h:110
finley::Hex8Shape
Definition: ShapeFunctions.h:46
finley::ReferenceElement::Type
const ReferenceElementInfo * Type
type of the reference element
Definition: ReferenceElements.h:192
escript::Data::getSampleDataRW
DataTypes::real_t * getSampleDataRW(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0)
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1953
finley::Hex27Macro
Definition: ReferenceElements.h:113
finley::Rec4Shape
Definition: ShapeFunctions.h:38
finley::Rec8
Definition: ReferenceElements.h:47
finley::Hex32Shape
Definition: ShapeFunctions.h:49
speckley::Rectangle::reduction_order6
void reduction_order6(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:126
speckley::Rectangle::gradient_order9
void gradient_order9(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:388
finley::ReferenceElementInfo::numRelevantGeoNodes
int numRelevantGeoNodes
deprecated
Definition: ReferenceElements.h:152
finley::Point1Shape
Definition: ShapeFunctions.h:30
finley::NoRef
Definition: ReferenceElements.h:114
finley::ReferenceElementInfo::numSubElements
int numSubElements
number of subelements (>1 if macro elements are used)
Definition: ReferenceElements.h:127
finley::Rec4Face
Definition: ReferenceElements.h:65
finley::Tri9Face
Definition: ReferenceElements.h:63
finley::Tri10_Contact
Definition: ReferenceElements.h:84
finley::Hex8Face_Contact
Definition: ReferenceElements.h:105
finley::Line4_Contact
Definition: ReferenceElements.h:80
finley::Point1
Definition: ReferenceElements.h:38
finley::Rec16_Contact
Definition: ReferenceElements.h:89
speckley::Rectangle::m_dx
double m_dx[2]
grid spacings / cell sizes of domain
Definition: speckley/src/Rectangle.h:397
finley::Line4Face_Contact
Definition: ReferenceElements.h:92
finley::ReferenceElement::LinearBasisFunctions
const_ShapeFunction_ptr LinearBasisFunctions
Definition: ReferenceElements.h:202
finley::ReferenceElementInfo
this struct holds the definition of the reference element
Definition: ReferenceElements.h:119
finley::Hex20
Definition: ReferenceElements.h:55
finley::ReferenceElementInfo::reverseNodes
int reverseNodes[64]
Definition: ReferenceElements.h:170
finley::Line3Face_Contact
Definition: ReferenceElements.h:91
finley::ReferenceElement::~ReferenceElement
~ReferenceElement()
destructor
Definition: ReferenceElements.cpp:660
finley::LineQuad
Definition: Quadrature.h:35
finley::Tri3Face
Definition: ReferenceElements.h:61
finley::ShapeFunctionInfo::numOrder
int numOrder
order of the shape functions
Definition: ShapeFunctions.h:67
finley::Tri9Shape
Definition: ShapeFunctions.h:36
speckley::Rectangle::integral_order8
void integral_order8(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:188
finley::ReferenceElementInfo::Quadrature
QuadTypeId Quadrature
quadrature scheme
Definition: ReferenceElements.h:140
finley::Tri6_Contact
Definition: ReferenceElements.h:82
finley::Line4Shape
Definition: ShapeFunctions.h:33
finley::Tet16Face_Contact
Definition: ReferenceElements.h:104
finley::Tri10Face
Definition: ReferenceElements.h:64
finley::Tri10Shape
Definition: ShapeFunctions.h:37
speckley::Rectangle::reduction_order2
void reduction_order2(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:37
finley::Tet10Shape
Definition: ShapeFunctions.h:44
finley::ReferenceElementInfo::shiftNodes
int shiftNodes[64]
defines a permutation of the nodes which rotates the nodes on the face
Definition: ReferenceElements.h:167
finley::Rec8Shape
Definition: ShapeFunctions.h:39
MAX_numSubElements
#define MAX_numSubElements
Definition: ReferenceElements.h:32
finley::Rec4Face_Contact
Definition: ReferenceElements.h:97
finley::Tet16Shape
Definition: ShapeFunctions.h:45
speckley::Rectangle::integral_order7
void integral_order7(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:163
finley::Hex8Face
Definition: ReferenceElements.h:73
finley::Rec12
Definition: ReferenceElements.h:49
finley::HexQuad
Definition: Quadrature.h:39
finley::Hex8
Definition: ReferenceElements.h:54
finley::Tri6
Definition: ReferenceElements.h:43
finley::Tri3_Contact
Definition: ReferenceElements.h:81
finley::QuadInfo_getInfo
const QuadInfo * QuadInfo_getInfo(QuadTypeId id)
Definition: Quadrature.cpp:42
finley::Line2Face_Contact
Definition: ReferenceElements.h:90
finley::Line2
Definition: ReferenceElements.h:39
finley::ElementTypeId
ElementTypeId
Definition: ReferenceElements.h:37
finley::Hex20Shape
Definition: ShapeFunctions.h:47
finley::Tri3Shape
Definition: ShapeFunctions.h:34
ShapeFunctions.h
escript::DataTypes::index_t
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:85
finley::Line3Macro
Definition: ReferenceElements.h:109
finley::Tet4
Definition: ReferenceElements.h:51
finley::ReferenceElement::getInfo
static const ReferenceElementInfo * getInfo(ElementTypeId id)
returns the element information structure for the given type id
Definition: ReferenceElements.cpp:678
finley::ReferenceElementInfo::numSides
int numSides
Definition: ReferenceElements.h:130
speckley::Rectangle::gradient_order5
void gradient_order5(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:182
speckley::Rectangle::gradient_order10
void gradient_order10(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:442
finley::TriQuad
Definition: Quadrature.h:36
speckley::Rectangle::integral_order5
void integral_order5(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:113
finley::QuadInfo::getNumQuadNodes
Quad_getNumNodes * getNumQuadNodes
Definition: Quadrature.h:65
finley::Hex32Face_Contact
Definition: ReferenceElements.h:108
finley::QuadInfo::getQuadNodes
Quad_getNodes * getQuadNodes
function that returns the quadrature points for a given order
Definition: Quadrature.h:62
finley::Hex20Face
Definition: ReferenceElements.h:74
finley::ShapeFunctionInfo::numShapes
int numShapes
number of shape functions
Definition: ShapeFunctions.h:65
speckley::Rectangle::gradient_order4
void gradient_order4(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:133
speckley::Rectangle::reduction_order4
void reduction_order4(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:82
finley::ReferenceElementInfo::linearNodes
int linearNodes[64 *2]
stores the list of nodes defining the linear or macro element
Definition: ReferenceElements.h:138
Finley.h
finley::Rec12Face
Definition: ReferenceElements.h:68
finley::ReferenceElement::getNumNodes
int getNumNodes() const
Definition: ReferenceElements.h:189
finley::Rec12_Contact
Definition: ReferenceElements.h:88
speckley::Rectangle::integral_order2
void integral_order2(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:37
finley::TetQuad
Definition: Quadrature.h:38
finley::Line4
Definition: ReferenceElements.h:41
finley::Rec16
Definition: ReferenceElements.h:50
finley::const_ShapeFunction_ptr
boost::shared_ptr< const ShapeFunction > const_ShapeFunction_ptr
Definition: ShapeFunctions.h:99
finley::QuadInfo::getMacro
Quad_getMacro * getMacro
transfers a given quadrature scheme to a macro element structure
Definition: Quadrature.h:67
escript::Data::actsExpanded
bool actsExpanded() const
Return true if this Data is expanded or resolves to expanded. That is, if it has a separate value for...
Definition: Data.cpp:1122
speckley::Rectangle::m_NE
dim_t m_NE[2]
number of elements for this rank in each dimension including shared
Definition: speckley/src/Rectangle.h:403
finley::ReferenceElement::BasisFunctions
const_ShapeFunction_ptr BasisFunctions
Definition: ReferenceElements.h:201
finley::ReferenceElementInfo::numNodes
int numNodes
number of nodes defining the element
Definition: ReferenceElements.h:125
finley::Rec12Shape
Definition: ShapeFunctions.h:41
MAX_numNodes
#define MAX_numNodes
Definition: ReferenceElements.h:31
ReferenceElements.h
escript::Scalar
Data Scalar(double value, const FunctionSpace &what, bool expanded)
A collection of factory functions for creating Data objects which contain data points of various shap...
Definition: DataFactory.cpp:62
speckley::Rectangle::gradient_order2
void gradient_order2(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:37
finley::Rec16Shape
Definition: ShapeFunctions.h:42
finley::ReferenceElementInfo::faceNodes
int faceNodes[64]
list of the nodes defining the face
Definition: ReferenceElements.h:163
finley
A suite of factory methods for creating various finley domains.
Definition: finley/src/Assemble.h:32
finley::Rec16Face
Definition: ReferenceElements.h:69
finley::ReferenceElement::numLinearNodes
int numLinearNodes
Definition: ReferenceElements.h:199
finley::Hex27Shape
Definition: ShapeFunctions.h:48
speckley::Rectangle::reduction_order7
void reduction_order7(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:148
finley::Tri3Face_Contact
Definition: ReferenceElements.h:93
escript::ValueError
An exception class that signals an invalid argument value.
Definition: EsysException.h:101
dudley::ElementTypeId
ElementTypeId
Definition: ElementType.h:37
finley::Line2_Contact
Definition: ReferenceElements.h:78
finley::Tet10Face_Contact
Definition: ReferenceElements.h:103
speckley::Rectangle::reduction_order9
void reduction_order9(const escript::Data &, escript::Data &) const
Definition: RectangleReductions.cpp:192
speckley::Rectangle::integral_order10
void integral_order10(std::vector< Scalar > &, const escript::Data &) const
Definition: RectangleIntegrals.cpp:238
finley::Tet4Shape
Definition: ShapeFunctions.h:43
finley::QuadTypeId
QuadTypeId
Definition: Quadrature.h:33
finley::Rec4
Definition: ReferenceElements.h:46
finley::ReferenceElement::ReferenceElement
ReferenceElement(ElementTypeId id, int order)
constructor with type ID and integration order
Definition: ReferenceElements.cpp:591
speckley::Rectangle::gradient_order6
void gradient_order6(escript::Data &, const escript::Data &) const
Definition: RectangleGradients.cpp:232
finley::ReferenceElement
this struct holds the realization of a reference element
Definition: ReferenceElements.h:175
finley::ReferenceElementInfo::Name
const char * Name
the name in text form e.g. "Line1", "Rec12", ...
Definition: ReferenceElements.h:123
finley::ReferenceElementInfo::relevantGeoNodes
int relevantGeoNodes[64]
Definition: ReferenceElements.h:153
finley::ReferenceElement::DBasisFunctionDvShared
bool DBasisFunctionDvShared
Definition: ReferenceElements.h:208
finley::Tri9_Contact
Definition: ReferenceElements.h:83