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 "system_dep.h"
29 
30 #include "Finley.h"
31 #include "ShapeFunctions.h"
32 #include "Quadrature.h"
33 
34 // The ids of the allowed reference elements:
35 #define MAX_numNodes 64
36 #define MAX_numSubElements 8
37 #define MAX_numSides 2
38 
39 namespace finley {
40 
41 typedef enum {
118  NoRef // marks end of list
120 
121 
127  const char* Name;
129  int numNodes;
134  int numSides;
137  int offsets[MAX_numSides+1];
138 
142  int linearNodes[MAX_numNodes*MAX_numSides];
149 
154 
157  int relevantGeoNodes[MAX_numNodes];
158 
162 
163  // the following lists are only used for face elements defined by
164  // numNodesOnFace>0:
165 
167  int faceNodes[MAX_numNodes];
168 
169  // shiftNodes={-1} or reverseNodes={-1} are ignored.
171  int shiftNodes[MAX_numNodes];
174  int reverseNodes[MAX_numNodes];
175 };
176 
177 
181  ReferenceElement(ElementTypeId id, int order);
182 
184  ~ReferenceElement();
185 
187  static const ReferenceElementInfo* getInfo(ElementTypeId id);
188 
190  static ElementTypeId getTypeId(const char*);
191 
193  int getNumNodes() const { return Type->numNodes; }
194 
201  int numNodes;
213 };
214 
215 typedef boost::shared_ptr<ReferenceElement> ReferenceElement_ptr;
216 typedef boost::shared_ptr<const ReferenceElement> const_ReferenceElement_ptr;
217 
218 } // namespace finley
219 
220 #endif // __FINLEY_REFERENCEELEMENTS_H__
221 
#define MAX_numSubElements
Definition: ReferenceElements.h:36
#define MAX_numSides
Definition: ReferenceElements.h:37
#define MAX_numNodes
Definition: ReferenceElements.h:35
#define FINLEY_DLL_API
Definition: finley/src/system_dep.h:29
A suite of factory methods for creating various finley domains.
Definition: finley/src/Assemble.h:32
ShapeFunctionTypeId
Definition: ShapeFunctions.h:32
boost::shared_ptr< const ReferenceElement > const_ReferenceElement_ptr
Definition: ReferenceElements.h:216
boost::shared_ptr< const ShapeFunction > const_ShapeFunction_ptr
Definition: ShapeFunctions.h:102
boost::shared_ptr< ReferenceElement > ReferenceElement_ptr
Definition: ReferenceElements.h:215
ElementTypeId
Definition: ReferenceElements.h:41
@ Tet10Face
Definition: ReferenceElements.h:75
@ Hex32Face
Definition: ReferenceElements.h:80
@ Tri10Face
Definition: ReferenceElements.h:68
@ Tri10
Definition: ReferenceElements.h:49
@ Hex32
Definition: ReferenceElements.h:61
@ Tri6_Contact
Definition: ReferenceElements.h:86
@ Tri9Face
Definition: ReferenceElements.h:67
@ Line4
Definition: ReferenceElements.h:45
@ Rec8_Contact
Definition: ReferenceElements.h:90
@ Tet10Macro
Definition: ReferenceElements.h:116
@ Rec4_Contact
Definition: ReferenceElements.h:89
@ Tet16Face
Definition: ReferenceElements.h:76
@ Tri3_Contact
Definition: ReferenceElements.h:85
@ Line2
Definition: ReferenceElements.h:43
@ Rec9Face_Contact
Definition: ReferenceElements.h:103
@ Rec4Face_Contact
Definition: ReferenceElements.h:101
@ Rec12Face_Contact
Definition: ReferenceElements.h:104
@ Hex27Macro
Definition: ReferenceElements.h:117
@ Tri6Face_Contact
Definition: ReferenceElements.h:98
@ Rec9
Definition: ReferenceElements.h:52
@ Hex20Face_Contact
Definition: ReferenceElements.h:110
@ Hex8
Definition: ReferenceElements.h:58
@ Hex8Face_Contact
Definition: ReferenceElements.h:109
@ Hex27
Definition: ReferenceElements.h:60
@ Tri3
Definition: ReferenceElements.h:46
@ Line4Face_Contact
Definition: ReferenceElements.h:96
@ Rec9Face
Definition: ReferenceElements.h:71
@ Tri9
Definition: ReferenceElements.h:48
@ Rec8Face
Definition: ReferenceElements.h:70
@ Tet10Face_Contact
Definition: ReferenceElements.h:107
@ Line2Face_Contact
Definition: ReferenceElements.h:94
@ Tri6
Definition: ReferenceElements.h:47
@ Tri10_Contact
Definition: ReferenceElements.h:88
@ Rec16Face_Contact
Definition: ReferenceElements.h:105
@ Hex20
Definition: ReferenceElements.h:59
@ Tet4
Definition: ReferenceElements.h:55
@ Tri10Face_Contact
Definition: ReferenceElements.h:100
@ Line3Face
Definition: ReferenceElements.h:63
@ NoRef
Definition: ReferenceElements.h:118
@ Hex27Face
Definition: ReferenceElements.h:79
@ Hex32Face_Contact
Definition: ReferenceElements.h:112
@ Tri6Face
Definition: ReferenceElements.h:66
@ Hex20Face
Definition: ReferenceElements.h:78
@ Tet10
Definition: ReferenceElements.h:56
@ Line3_Contact
Definition: ReferenceElements.h:83
@ Line2Face
Definition: ReferenceElements.h:62
@ Rec9_Contact
Definition: ReferenceElements.h:91
@ Rec9Macro
Definition: ReferenceElements.h:115
@ Line4_Contact
Definition: ReferenceElements.h:84
@ Line3
Definition: ReferenceElements.h:44
@ Tri9_Contact
Definition: ReferenceElements.h:87
@ Rec16Face
Definition: ReferenceElements.h:73
@ Rec12Face
Definition: ReferenceElements.h:72
@ Rec4
Definition: ReferenceElements.h:50
@ Tet4Face
Definition: ReferenceElements.h:74
@ Line3Face_Contact
Definition: ReferenceElements.h:95
@ Tri3Face
Definition: ReferenceElements.h:65
@ Line3Macro
Definition: ReferenceElements.h:113
@ Hex8Face
Definition: ReferenceElements.h:77
@ Rec8Face_Contact
Definition: ReferenceElements.h:102
@ Tri6Macro
Definition: ReferenceElements.h:114
@ Line2_Contact
Definition: ReferenceElements.h:82
@ Rec12
Definition: ReferenceElements.h:53
@ Rec8
Definition: ReferenceElements.h:51
@ Tet16Face_Contact
Definition: ReferenceElements.h:108
@ Rec16
Definition: ReferenceElements.h:54
@ Tet16
Definition: ReferenceElements.h:57
@ Hex27Face_Contact
Definition: ReferenceElements.h:111
@ Rec16_Contact
Definition: ReferenceElements.h:93
@ Rec4Face
Definition: ReferenceElements.h:69
@ Point1
Definition: ReferenceElements.h:42
@ Line4Face
Definition: ReferenceElements.h:64
@ Tet4Face_Contact
Definition: ReferenceElements.h:106
@ Rec12_Contact
Definition: ReferenceElements.h:92
@ Tri3Face_Contact
Definition: ReferenceElements.h:97
@ Point1_Contact
Definition: ReferenceElements.h:81
@ Tri9Face_Contact
Definition: ReferenceElements.h:99
QuadTypeId
Definition: Quadrature.h:35
this struct holds the definition of the reference element
Definition: ReferenceElements.h:123
int numNodes
number of nodes defining the element
Definition: ReferenceElements.h:129
QuadTypeId Quadrature
quadrature scheme
Definition: ReferenceElements.h:144
ElementTypeId LinearTypeId
type id of the linear version of the element
Definition: ReferenceElements.h:140
ShapeFunctionTypeId Parametrization
shape function for parametrization of the element
Definition: ReferenceElements.h:146
int numSubElements
number of subelements (>1 if macro elements are used)
Definition: ReferenceElements.h:131
int numRelevantGeoNodes
deprecated
Definition: ReferenceElements.h:156
const char * Name
the name in text form e.g. "Line1", "Rec12", ...
Definition: ReferenceElements.h:127
int numSides
Definition: ReferenceElements.h:134
ShapeFunctionTypeId BasisFunctions
shape function for the basis functions
Definition: ReferenceElements.h:148
ElementTypeId TypeId
the type
Definition: ReferenceElements.h:125
int numNodesOnFace
Definition: ReferenceElements.h:161
this struct holds the realization of a reference element
Definition: ReferenceElements.h:179
const_ShapeFunction_ptr Parametrization
Definition: ReferenceElements.h:204
int numLocalDim
Definition: ReferenceElements.h:202
bool DBasisFunctionDvShared
Definition: ReferenceElements.h:212
const_ShapeFunction_ptr LinearBasisFunctions
Definition: ReferenceElements.h:206
double * DBasisFunctionDv
Definition: ReferenceElements.h:209
int getNumNodes() const
Definition: ReferenceElements.h:193
int numLinearNodes
Definition: ReferenceElements.h:203
const ReferenceElementInfo * Type
type of the reference element
Definition: ReferenceElements.h:196
const_ShapeFunction_ptr BasisFunctions
Definition: ReferenceElements.h:205
int integrationOrder
used integration order
Definition: ReferenceElements.h:200
const ReferenceElementInfo * LinearType
type of the linear reference element
Definition: ReferenceElements.h:198
int numNodes
Definition: ReferenceElements.h:201