22 static int nsubeldata[15] = {1,1,1,1,3,3,3,3,3,3,7,7,7,7,11};
36 {{0,5},{1,6},{2,4},{0,10},{1,10},{2,10},{5,15}},
37 {{0,8},{1,7},{3,4},{0,11},{1,11},{3,11},{4,14}},
38 {{1,9},{2,8},{3,5},{1,12},{2,12},{3,12},{5,17}},
39 {{0,9},{2,7},{3,6},{0,13},{2,13},{3,13},{4,16}},
40 {{0,14},{1,14},{2,14},{3,14},{4,18},{5,18},{4,13},{0,12},{1,13},{2,11},{3,10}}
68 {{1,1,0},{2,4,3},{3,4,4},{5,5,6},{8,4,9},{9,4,12},{12,4,17},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
69 {{0,5,1},{2,2,1},{3,3,1},{6,5,10},{7,5,5},{9,5,9},{13,5,14},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
70 {{0,0,2},{1,5,4},{3,3,2},{4,5,11},{7,4,7},{8,5,12},{11,5,16},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
71 {{0,0,3},{1,4,1},{2,4,2},{4,4,10},{5,4,6},{6,4,11},{10,4,15},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1},{-1,-1,-1}},
72 {{0,0,1},{1,5,0},{2,5,3},{3,5,2},{4,3,0},{5,1,7},{6,5,8},{7,5,7},{8,0,5},{9,0,8},{10,3,4},{11,3,6},{12,0,9},{13,5,13},{15,3,10},{17,0,12}},
73 {{0,1,3},{1,4,0},{2,2,0},{3,2,3},{4,1,2},{5,4,5},{6,4,8},{7,2,7},{8,3,5},{9,1,9},{10,1,6},{11,2,4},{12,2,8},{13,4,13},{14,1,13},{16,2,11}}
90 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
91 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
92 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
93 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
94 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
95 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
96 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
97 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
98 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
99 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
100 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.}},
101 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.}},
102 {{-0.5,0.5,0},{-0.5,0,0.5},{0.,0.,0.},{0.5,0,0}},
103 {{0.5,0,0.},{0,0.5,0.},{0.,0.,0.},{0,0,0.}},
104 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{0.,0.,0.}},
105 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
106 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
107 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
108 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
110 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
111 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{1,0.,0.}},
112 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
113 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
114 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
115 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
116 {{0.,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
117 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
118 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
119 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
120 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
121 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
122 {{0.5,0,0.},{0,0.5,0.},{0.,0.,0.},{0,0,0.}},
123 {{0,0.5,0},{0,0,0.5},{0.,0.,0.},{0.5,0,0}},
124 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{.5,0.,0.}},
125 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
126 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
127 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
128 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
130 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
131 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
132 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,1,0.}},
133 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
134 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
135 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
136 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
137 {{0,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
138 {{0,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
139 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{-.5,0.,0.}},
140 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
141 {{0.5,0.,0.},{0.,0.,0.5},{0.,0.,0.},{0.,0.5,0.}},
142 {{0.5,0,0.},{0,0.5,0.},{0.,0.,0.},{0.5,0,0.}},
143 {{0.5,0,0.},{0,0.5,0.},{0.,0.,0.},{0.5,0,0.}},
144 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{0.,.5,0.}},
145 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
146 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
147 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
148 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
150 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
151 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
152 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
153 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,1}},
154 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
155 {{0.25,0,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
156 {{-0.25,0,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
157 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
158 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
159 {{.5,0.,0.},{0.,0.,0.},{0.,0.,0.},{.5,0.,0.}},
160 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.,0.5}},
161 {{0.5,0.,0.},{0.,0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
162 {{0.5,0,0.},{0,0.5,0.},{0.,0.,0.},{0,0.5,0.}},
163 {{0.5,0,0.},{0,0.5,0.},{0.,0.,0.},{0,0.5,0.}},
164 {{.5,0.,0.},{0.,.5,0.},{0.,0.,.5},{0.,0.,.5}},
165 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
166 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
167 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
168 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}}},
170 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
171 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
172 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
173 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
174 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
175 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
176 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
177 {{0.,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
178 {{0.25,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
179 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
180 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
181 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
182 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
183 {{0.,0.,0.25},{-0.25,0.25,0.},{0.,0.,0.},{0.25,0.25,0.25}},
184 {{0.,0.5,0.},{-0.5,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
185 {{-0.5,0.5,0.},{-0.5,0.,0.},{0.,0.,0.},{0.5,0.,0.5}},
186 {{0.,0.5,0.},{-0.5,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
187 {{-0.5,0.5,0.},{-0.5,0.,0.5},{0.,0.,0.},{0.5,0.,0.}},
188 {{0.,0.,.25},{-.25,.25,0.},{-.25,-.25,.25},{.25,.25,.25}}},
190 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
191 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
192 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
193 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
194 {{0.,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.,0.,0.}},
195 {{0.,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
196 {{-0.25,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
197 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
198 {{-0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
199 {{0.25,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.25,0.}},
200 {{0.,0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
201 {{0.25,0.,0.},{0.,0.,0.},{0.,0.,0.},{0.25,0.5,0.}},
202 {{0.,-0.25,0.},{0.,0.,0.},{0.,0.,0.},{0.5,0.25,0.}},
203 {{0.,0.,-0.25},{-0.25,0.25,0.},{0.,0.,0.},{0.25,0.25,0.25}},
204 {{0.,0.,-0.5},{0.,0.5,-0.5},{0.,0.,0.},{0.5,0.,0.5}},
205 {{-0.5,0.5,0.},{0.,0.5,0.},{0.,0.,0.},{0.5,0.,0.}},
206 {{0.,0.,-0.5},{0.5,0.,-0.5},{0.,0.,0.},{0.,0.5,0.5}},
207 {{0.5,0.,0.},{0.5,-0.5,0.},{0.,0.,0.},{0.,0.5,0.}},
208 {{0.,0.,-.25},{-.25,.25,0.},{.25,.25,-.25},{.25,.25,.25}}}
216 for(i=0;i<NSubEl;i++) SubElVec[i] = geo->
SubElement(i);
223 for(sub=TPZShapeTetra::NCornerNodes;sub<10;sub++) {
224 NewMidSideNode(geo,sub,index);
240 cornerindexes[j] = np[CornerSons[i][j]];
245 SubElVec[i] = pi3sub;
247 for(i=0;i<NSubEl;i++) {
249 int elside = InNeigh[i][j][0];
250 if(elside == -1)
break;
257 void TPZRefTetrahedra::NewMidSideNode(
TPZGeoEl *gel,
int side,int64_t &index) {
259 MidSideNodeIndex(gel,side,index);
263 while(gelside.
Element() != gel) {
265 if(index!=-1)
return;
277 par[0] = MidCoord[side][0];
278 par[1] = MidCoord[side][1];
279 par[2] = MidCoord[side][2];
286 void TPZRefTetrahedra::MidSideNodeIndex(
const TPZGeoEl *gel,
int side,int64_t &index) {
289 PZError <<
"TPZRefTetrahedra::MidSideNodeIndex. Bad parameter side = " << side << endl;
294 index = (gel)->NodeIndex(side);
302 index=(gel->
SubElement(MidSideNodes[side][0]))->NodeIndex(MidSideNodes[side][1]);
310 PZError <<
"TPZRefTetrahedra::GetSubelements2 called with error arguments\n";
313 int nsub = NSideSubElements(side);
314 for(
int i=0;i<
nsub;i++)
316 subeldata[side][i][1]));
319 int TPZRefTetrahedra::NSideSubElements(
int side) {
321 PZError <<
"TPZRefTetrahedra::NSideSubelements2 called with error arguments\n";
324 return nsubeldata[side];
330 PZError <<
"TPZRefTetrahedra::GetTransform side out of range or father null\n";
340 for(i=0; i<largedim; i++) {
341 for(j=0; j<smalldim; j++) {
342 trans.
Mult()(i,j) = buildt[whichsubel][side][j][i];
344 trans.
Sum() (i,0) = buildt[whichsubel][side][3][i];
350 {0,4,6,7,4,10,6,7,11,13,10,11,14,13,14,-1,-1,-1,-1},
351 {4,1,5,8,4,5,10,11,8,12,10,11,12,14,14,-1,-1,-1,-1},
352 {6,5,2,9,10,5,6,13,12,9,10,14,12,13,14,-1,-1,-1,-1},
353 {7,8,9,3,11,12,13,7,8,9,14,11,12,13,14,-1,-1,-1,-1},
354 {4,8,9,6,7,11,12,13,10,11,11,13,13,14,11,14,13,14,14},
355 {8,4,6,9,5,11,10,13,12,12,10,10,12,14,14,10,14,12,14},
358 int TPZRefTetrahedra::FatherSide(
int side,
int whichsubel){
360 return fatherside[whichsubel][side];
363 int TPZRefTetrahedra::ClassId()
const{
364 return Hash(
"TPZRefTetrahedra");
Contains TPZShapeTetra class which implements the shape functions of a tetrahedral element...
int AllocateNewElement()
Makes more room for new elements.
Contains declaration of TPZGeoElSide class which represents an element and its side, and TPZGeoElSideIndex class which represents an TPZGeoElSide index.
int MaterialId() const
Returns the material index of the element.
virtual void SetNeighbour(int side, const TPZGeoElSide &neighbour)=0
Fill in the data structure for the neighbouring information.
clarg::argInt nsub("-nsub", "number of substructs", 4)
static int SideDimension(int side)
Returns the dimension of the side.
groups all classes dedicated to the computation of shape functions
Utility class which represents an element with its side. The Geometric approximation classes Geometry...
This class implements a simple vector storage scheme for a templated class T. Utility.
TPZGeoElSide Neighbour() const
TPZGeoMesh * Mesh() const
Returns the mesh to which the element belongs.
virtual int64_t NodeIndex(int i) const =0
Returns the index of the ith node the index is the location of the node in the nodevector of the mesh...
Contains the TPZRefPyramid class which implements the uniform refinement of a geometric hexahedral el...
static int InNeigh[6][NumInNeigh][3]
static int MidSideNodes[6][2]
virtual TPZGeoEl * SubElement(int is) const =0
Returns a pointer to the subelement is.
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object reallocating the necessary storage, copying the existing objects to the new...
Contains declaration of TPZMesh class which defines a geometrical mesh and contains a corresponding l...
void Push(const T object)
Pushes a copy of the object on the stack.
Defines the behaviour of all geometric elements. GeometryTPZGeoEl is the common denominator for all g...
static int nsubeldata[15]
virtual void SetFatherIndex(int64_t fatherindex)
Sets the father element index This method is not called SetFather in order to avoid implicit conversi...
int64_t Index() const
Returns the index of the element within the element vector of the mesh.
Contains the TPZGeoTetrahedra class which implements the geometry of a tetrahedral element...
static int SideDimension(int side)
Returns the dimension of the side.
TPZAdmChunkVector< TPZGeoNode > & NodeVec()
static int subeldata[15][11][2]
virtual TPZGeoEl * CreateGeoElement(MElementType type, TPZVec< int64_t > &nodeindexes, int matid, int64_t &index)=0
Creates a geometric element according to the type of the father element.
Groups all classes which model the h refinement These classes are used as template arguments of...
virtual TPZGeoElSide Neighbour(int side)=0
Returns a pointer to the neighbour and the neighbourside along side of the current element...
int32_t Hash(std::string str)
virtual void SetSubElement(int i, TPZGeoEl *gel)=0
Sets the subelement of index i.
virtual int HasSubElement() const =0
Return 1 if the element has subelements.
TPZGeoEl * Element() const
static REAL MidCoord[6][3]
static int CornerSons[6][5]
static REAL buildt[6][19][4][3]
Contains the TPZRefTetrahedra class which implements the uniform refinement of a geometric tetrahedra...
static int fatherside[6][19]
virtual void X(TPZVec< REAL > &qsi, TPZVec< REAL > &result) const =0
Return the coordinate in real space of the point coordinate in the master element space...
This class implements a stack object. Utility.
void SetFather(TPZGeoEl *father)
Sets the father element.
Contains TPZShapePiram class which implements the shape functions of a pyramid element.
Contains the TPZGeoPyramid class which implements the geometry of pyramid element.
virtual void SetSubElementConnectivities()
Initializes the external connectivities of the subelements.
#define PZError
Defines the output device to error messages and the DebugStop() function.
virtual void MidSideNodeIndex(int side, int64_t &index) const =0
Returns the midside node index along a side of the element.