22 static LoggerPtr logger(Logger::getLogger(
"pz.topology.pzcube"));
32 static int FaceConnectLocId[6][9] = { {0,1,2,3,8,9,10,11,20},{0,1,5,4,8,13,16,12,21},
33 {1,2,6,5,9,14,17,13,22},{3,2,6,7,10,14,18,15,23},
34 {0,3,7,4,11,15,19,12,24},{4,5,6,7,16,17,18,19,25} };
37 int TPZCube::FaceNodes[6][4] = { {0,1,2,3},{0,1,5,4},{1,2,6,5},{3,2,6,7},{0,3,7,4},{4,5,6,7} };
40 int TPZCube::SideNodes[12][2] = { {0,1},{1,2},{2,3},{3,0},{0,4},{1,5},
41 {2,6},{3,7},{4,5},{5,6},{6,7},{7,4} };
44 int TPZCube::ShapeFaceId[6][2] = { {0,2},{0,5},{1,6},{3,6},{0,7},{4,6} };
47 int TPZCube::fPermutations[48][27] =
49 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26},
50 {0,1,5,4,3,2,6,7,8,13,16,12,11,9,17,19,10,14,18,15,21,20,22,25,24,23,26},
51 {0,3,2,1,4,7,6,5,11,10,9,8,12,15,14,13,19,18,17,16,20,24,23,22,21,25,26},
52 {0,3,7,4,1,2,6,5,11,15,19,12,8,10,18,16,9,14,17,13,24,20,23,25,21,22,26},
53 {0,4,5,1,3,7,6,2,12,16,13,8,11,19,17,9,15,18,14,10,21,24,25,22,20,23,26},
54 {0,4,7,3,1,5,6,2,12,19,15,11,8,16,18,10,13,17,14,9,24,21,25,23,20,22,26},
55 {1,0,3,2,5,4,7,6,8,11,10,9,13,12,15,14,16,19,18,17,20,21,24,23,22,25,26},
56 {1,0,4,5,2,3,7,6,8,12,16,13,9,11,19,17,10,15,18,14,21,20,24,25,22,23,26},
57 {1,2,3,0,5,6,7,4,9,10,11,8,13,14,15,12,17,18,19,16,20,22,23,24,21,25,26},
58 {1,2,6,5,0,3,7,4,9,14,17,13,8,10,18,16,11,15,19,12,22,20,23,25,21,24,26},
59 {1,5,4,0,2,6,7,3,13,16,12,8,9,17,19,11,14,18,15,10,21,22,25,24,20,23,26},
60 {1,5,6,2,0,4,7,3,13,17,14,9,8,16,18,10,12,19,15,11,22,21,25,23,20,24,26},
61 {2,1,0,3,6,5,4,7,9,8,11,10,14,13,12,15,17,16,19,18,20,22,21,24,23,25,26},
62 {2,1,5,6,3,0,4,7,9,13,17,14,10,8,16,18,11,12,19,15,22,20,21,25,23,24,26},
63 {2,3,0,1,6,7,4,5,10,11,8,9,14,15,12,13,18,19,16,17,20,23,24,21,22,25,26},
64 {2,3,7,6,1,0,4,5,10,15,18,14,9,11,19,17,8,12,16,13,23,20,24,25,22,21,26},
65 {2,6,5,1,3,7,4,0,14,17,13,9,10,18,16,8,15,19,12,11,22,23,25,21,20,24,26},
66 {2,6,7,3,1,5,4,0,14,18,15,10,9,17,19,11,13,16,12,8,23,22,25,24,20,21,26},
67 {3,0,1,2,7,4,5,6,11,8,9,10,15,12,13,14,19,16,17,18,20,24,21,22,23,25,26},
68 {3,0,4,7,2,1,5,6,11,12,19,15,10,8,16,18,9,13,17,14,24,20,21,25,23,22,26},
69 {3,2,1,0,7,6,5,4,10,9,8,11,15,14,13,12,18,17,16,19,20,23,22,21,24,25,26},
70 {3,2,6,7,0,1,5,4,10,14,18,15,11,9,17,19,8,13,16,12,23,20,22,25,24,21,26},
71 {3,7,4,0,2,6,5,1,15,19,12,11,10,18,16,8,14,17,13,9,24,23,25,21,20,22,26},
72 {3,7,6,2,0,4,5,1,15,18,14,10,11,19,17,9,12,16,13,8,23,24,25,22,20,21,26},
73 {4,0,1,5,7,3,2,6,12,8,13,16,19,11,9,17,15,10,14,18,21,24,20,22,25,23,26},
74 {4,0,3,7,5,1,2,6,12,11,15,19,16,8,10,18,13,9,14,17,24,21,20,23,25,22,26},
75 {4,5,1,0,7,6,2,3,16,13,8,12,19,17,9,11,18,14,10,15,21,25,22,20,24,23,26},
76 {4,5,6,7,0,1,2,3,16,17,18,19,12,13,14,15,8,9,10,11,25,21,22,23,24,20,26},
77 {4,7,3,0,5,6,2,1,19,15,11,12,16,18,10,8,17,14,9,13,24,25,23,20,21,22,26},
78 {4,7,6,5,0,3,2,1,19,18,17,16,12,15,14,13,11,10,9,8,25,24,23,22,21,20,26},
79 {5,1,0,4,6,2,3,7,13,8,12,16,17,9,11,19,14,10,15,18,21,22,20,24,25,23,26},
80 {5,1,2,6,4,0,3,7,13,9,14,17,16,8,10,18,12,11,15,19,22,21,20,23,25,24,26},
81 {5,4,0,1,6,7,3,2,16,12,8,13,17,19,11,9,18,15,10,14,21,25,24,20,22,23,26},
82 {5,4,7,6,1,0,3,2,16,19,18,17,13,12,15,14,8,11,10,9,25,21,24,23,22,20,26},
83 {5,6,2,1,4,7,3,0,17,14,9,13,16,18,10,8,19,15,11,12,22,25,23,20,21,24,26},
84 {5,6,7,4,1,2,3,0,17,18,19,16,13,14,15,12,9,10,11,8,25,22,23,24,21,20,26},
85 {6,2,1,5,7,3,0,4,14,9,13,17,18,10,8,16,15,11,12,19,22,23,20,21,25,24,26},
86 {6,2,3,7,5,1,0,4,14,10,15,18,17,9,11,19,13,8,12,16,23,22,20,24,25,21,26},
87 {6,5,1,2,7,4,0,3,17,13,9,14,18,16,8,10,19,12,11,15,22,25,21,20,23,24,26},
88 {6,5,4,7,2,1,0,3,17,16,19,18,14,13,12,15,9,8,11,10,25,22,21,24,23,20,26},
89 {6,7,3,2,5,4,0,1,18,15,10,14,17,19,11,9,16,12,8,13,23,25,24,20,22,21,26},
90 {6,7,4,5,2,3,0,1,18,19,16,17,14,15,12,13,10,11,8,9,25,23,24,21,22,20,26},
91 {7,3,0,4,6,2,1,5,15,11,12,19,18,10,8,16,14,9,13,17,24,23,20,21,25,22,26},
92 {7,3,2,6,4,0,1,5,15,10,14,18,19,11,9,17,12,8,13,16,23,24,20,22,25,21,26},
93 {7,4,0,3,6,5,1,2,19,12,11,15,18,16,8,10,17,13,9,14,24,25,21,20,23,22,26},
94 {7,4,5,6,3,0,1,2,19,16,17,18,15,12,13,14,11,8,9,10,25,24,21,22,23,20,26},
95 {7,6,2,3,4,5,1,0,18,14,10,15,19,17,9,11,16,13,8,12,23,25,22,20,24,21,26},
96 {7,6,5,4,3,2,1,0,18,17,16,19,15,14,13,12,10,9,8,11,25,23,22,21,24,20,26}
100 static int sidedimension[27] = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3};
104 2,2,2,2,2,2,2,2,2,2,2,2,
111 {8,11,12,20,21,24,26},
112 {8,9,13,20,21,22,26},
113 {9,10,14,20,22,23,26},
114 {10,11,15,20,23,24,26},
115 {12,16,19,21,24,25,26},
116 {13,16,17,21,22,25,26},
117 {14,17,18,22,23,25,26},
118 {15,18,19,23,24,25,26},
143 static int nhighdimsides[27] = {7,7,7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,0};
148 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
149 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
150 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
151 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
152 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
153 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
154 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-1}}
157 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
158 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
159 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
160 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
161 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
162 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
163 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-1}}
166 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
167 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
168 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
169 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
170 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
171 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
172 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-1}}
175 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
176 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
177 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
178 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
179 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
180 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
181 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-1}}
184 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
185 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
186 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
187 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
188 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
189 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
190 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,1}}
193 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
194 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
195 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
196 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
197 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
198 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
199 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,1}}
202 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
203 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
204 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
205 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
206 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
207 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
208 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,1}}
211 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
212 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
213 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
214 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
215 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
216 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
217 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,1}}
220 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
221 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
222 {{1,0,0},{-99,-99,-99},{-99,-99,-99},{0,-1,-1}}
225 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
226 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
227 {{0,1,0},{-99,-99,-99},{-99,-99,-99},{1,0,-1}}
230 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
231 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
232 {{-1,0,0},{-99,-99,-99},{-99,-99,-99},{0,1,-1}}
235 {{0,-1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
236 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
237 {{0,-1,0},{-99,-99,-99},{-99,-99,-99},{-1,0,-1}}
240 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
241 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
242 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{-1,-1,0}}
245 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
246 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
247 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{1,-1,0}}
250 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
251 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
252 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{1,1,0}}
255 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
256 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
257 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{-1,1,0}}
260 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
261 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
262 {{1,0,0},{-99,-99,-99},{-99,-99,-99},{0,-1,1}}
265 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
266 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
267 {{0,1,0},{-99,-99,-99},{-99,-99,-99},{1,0,1}}
270 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
271 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
272 {{-1,0,0},{-99,-99,-99},{-99,-99,-99},{0,1,1}}
275 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
276 {{0,-1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
277 {{0,-1,0},{-99,-99,-99},{-99,-99,-99},{-1,0,1}}
280 {{1,0,0},{0,1,0},{-99,-99,-99},{0,0,-1}}
283 {{1,0,0},{0,0,1},{-99,-99,-99},{0,-1,0}}
286 {{0,1,0},{0,0,1},{-99,-99,-99},{1,0,0}}
289 {{1,0,0},{0,0,1},{-99,-99,-99},{0,1,0}}
292 {{0,1,0},{0,0,1},{-99,-99,-99},{-1,0,0}}
295 {{1,0,0},{0,1,0},{-99,-99,-99},{0,0,1}}
298 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-99,-99,-99}}
304 {-1.,-1.,-1.},{1.,-1.,-1.},{1.,1.,-1.},{-1.,1.,-1.},
305 {-1.,-1., 1.},{1.,-1., 1.},{1.,1., 1.},{-1.,1., 1.},
306 { 0.,-1.,-1.},{1., 0.,-1.},{0.,1.,-1.},{-1.,0.,-1.},
307 {-1.,-1., 0.},{1.,-1., 0.},{1.,1., 0.},{-1.,1., 0.},
308 { 0.,-1., 1.},{1., 0., 1.},{0.,1., 1.},{-1.,0., 1.},
309 { 0., 0.,-1.},{0.,-1., 0.},{1.,0., 0.},{ 0.,1., 0.},
310 {-1., 0., 0.},{0., 0., 1.},{0.,0., 0.} };
314 {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1},
315 {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0},
316 {1,0,0} , {1,0,0} , {1,0,0} , {1,0,0} , {1,0,0} , {1,0,0} , {1,0,0} , {1,0,0} , {1,0,0} ,
317 {0,1,0} , {0,1,0} , {0,1,0} , {0,1,0} , {0,1,0} , {0,1,0} , {0,1,0} , {0,1,0} , {0,1,0} ,
318 {-1,0,0}, {-1,0,0}, {-1,0,0}, {-1,0,0}, {-1,0,0}, {-1,0,0}, {-1,0,0}, {-1,0,0}, {-1,0,0},
319 {0,0,1} , {0,0,1} , {0,0,1} , {0,0,1} , {0,0,1} , {0,0,1} , {0,0,1} , {0,0,1} , {0,0,1},
323 {1,0,0},{0,1,0},{-1,0,0},{0,-1,0}, {0,0,1},{0,0,1},{0,0,1},{0,0,1}, {1,0,0},{0,1,0},{-1,0,0},{0,-1,0},
338 {-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},{-1,0,0},
339 {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},
340 {0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},
341 {1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,
342 {0,0,1} ,{0,0,1} ,{0,0,1} ,{0,0,1} ,{0,0,1} ,{0,0,1} ,{0,0,1} ,{0,0,1} ,{0,0,1} ,
343 {1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0} ,{1,0,0},
346 {0,-1,0},{1,0,0},{0,1,0},{1,0,0}, {-1,0,0},{0,-1,0},{1,0,0},{0,1,0}, {0,0,1},{0,0,1},{0,0,1},{0,0,1},
363 {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0},
364 {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1},
365 {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0},
366 {0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},{0,0,-1},
367 {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0},
368 {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0},
371 {0,0,-1},{0,0,-1},{0,0,-1},{0,0,1}, {0,-1,0},{1,0,0},{0,1,0},{-1,0,0}, {0,-1,0},{1,0,0},{0,1,0},{-1,0,0},
386 0,1,2,3,8,9,10,11,20,
387 0,1,5,4,8,13,16,12,21,
388 1,2,6,5,9,14,17,13,22,
389 3,2,6,7,10,14,18,15,23,
391 0,3,7,4,11,15,19,12,24,
392 4,5,6,7,16,17,18,19,25,
406 0,0,0,0,0,0,0,0,0,0,
407 0,0,0,0,0,0,0,0,0,0,
408 0,0,0,0,0,0,0,0,0,0,
409 0,0,0,0,0,0,0,0,0,0,
410 0,0,0,0,0,0,0,0,0,0,
411 0,0,0,0,1,1,1,1,1,1,
412 1,1,1,1,1,1,1,1,1,1,
413 1,1,1,1,1,1,1,1,1,1,
418 0,0,0,0,0,0,0,0,0,0,
419 0,0,0,0,0,0,0,0,0,0,
420 0,0,0,0,0,0,0,0,0,0,
421 0,0,0,0,0,0,0,0,0,0,
422 0,0,0,0,0,0,0,0,0,0,
423 0,0,0,0,0,0,0,0,0,0,
425 0,1,0,1,0,1,0,1,0,1,0,1,
430 T qsi = loc[0], eta = loc[1] , zeta = loc[2];
432 T x[2],
dx[2],y[2],dy[2],z[2],dz[2];
446 phi(0,0) = x[0]*y[0]*z[0];
447 phi(1,0) = x[1]*y[0]*z[0];
448 phi(2,0) = x[1]*y[1]*z[0];
449 phi(3,0) = x[0]*y[1]*z[0];
450 phi(4,0) = x[0]*y[0]*z[1];
451 phi(5,0) = x[1]*y[0]*z[1];
452 phi(6,0) = x[1]*y[1]*z[1];
453 phi(7,0) = x[0]*y[1]*z[1];
454 dphi(0,0) = dx[0]*y[0]*z[0];
455 dphi(1,0) = x[0]*dy[0]*z[0];
456 dphi(2,0) = x[0]*y[0]*dz[0];
457 dphi(0,1) = dx[1]*y[0]*z[0];
458 dphi(1,1) = x[1]*dy[0]*z[0];
459 dphi(2,1) = x[1]*y[0]*dz[0];
460 dphi(0,2) = dx[1]*y[1]*z[0];
461 dphi(1,2) = x[1]*dy[1]*z[0];
462 dphi(2,2) = x[1]*y[1]*dz[0];
463 dphi(0,3) = dx[0]*y[1]*z[0];
464 dphi(1,3) = x[0]*dy[1]*z[0];
465 dphi(2,3) = x[0]*y[1]*dz[0];
466 dphi(0,4) = dx[0]*y[0]*z[1];
467 dphi(1,4) = x[0]*dy[0]*z[1];
468 dphi(2,4) = x[0]*y[0]*dz[1];
469 dphi(0,5) = dx[1]*y[0]*z[1];
470 dphi(1,5) = x[1]*dy[0]*z[1];
471 dphi(2,5) = x[1]*y[0]*dz[1];
472 dphi(0,6) = dx[1]*y[1]*z[1];
473 dphi(1,6) = x[1]*dy[1]*z[1];
474 dphi(2,6) = x[1]*y[1]*dz[1];
475 dphi(0,7) = dx[0]*y[1]*z[1];
476 dphi(1,7) = x[0]*dy[1]*z[1];
477 dphi(2,7) = x[0]*y[1]*dz[1];
482 void TPZCube::BlendFactorForSide(
const int &side,
const TPZVec<T> &xi, T &blendFactor,
485 std::ostringstream sout;
486 if(side < NCornerNodes || side >= NSides){
487 sout<<
"The side\t"<<side<<
"is invalid. Aborting..."<<std::endl;
489 PZError<<std::endl<<sout.str()<<std::endl;
494 if(!IsInParametricDomain(xi,tol)){
495 sout<<
"The method BlendFactorForSide expects the point xi to correspond to coordinates of a point";
496 sout<<
" inside the parametric domain. Aborting...";
497 PZError<<std::endl<<sout.str()<<std::endl;
504 corrFactorDxi.
Resize(TPZCube::Dimension,(T)0);
505 if(side < NSides - 1){
508 TPZCube::TShape(xi,phi,dphi);
510 for(
int i = 0; i < TPZCube::NSideNodes(side);i++){
511 const int currentNode = TPZCube::SideNodeLocId(side, i);
512 blendFactor += phi(currentNode,0);
513 corrFactorDxi[0] += dphi(0,currentNode);
514 corrFactorDxi[1] += dphi(1,currentNode);
515 corrFactorDxi[2] += dphi(2,currentNode);
523 int TPZCube::NBilinearSides()
538 int nsidecon = NContainedSides(side);
539 for(
int is = 0; is < nsidecon - 1; is++)
540 smallsides.
Push(ContainedSideLocId(side,is));
543 void TPZCube::LowerDimensionSides(
int side,
TPZStack<int> &smallsides,
int DimTarget)
546 int nsidecon = NContainedSides(side);
547 for(
int is = 0; is < nsidecon - 1; is++) {
548 if (SideDimension(ContainedSideLocId(side,is)) == DimTarget) smallsides.
Push(ContainedSideLocId(side,is));
554 if(side <0 || side >= NSides) {
555 PZError <<
"TPZCube::HigherDimensionSides side "<< side << endl;
558 for(is=0; is<nhighdimsides[side]; is++) high.
Push(highsides[side][is]);
562 int TPZCube::NSideNodes(
int side)
564 return nsidenodes[side];
567 int TPZCube::SideNodeLocId(
int side,
int node)
569 if(side<8 && node == 0)
return side;
570 if(side>=8 && side < 20 && node < 2)
return SideNodes[side-8][node];
571 if(side>=20 && side < 26 && node < 4)
return FaceNodes[side-20][node];
572 if(side == 26 && node < 8)
return node;
573 PZError <<
"TPZCube::SideNodeLocId inconsistent side or node " << side
574 <<
' ' << node << endl;
579 if (center.
size()!=Dimension) {
583 for(i=0; i<Dimension; i++) {
584 center[i] = MidSideNode[side][i];
588 int TPZCube::SideDimension(
int side) {
589 if(side<0 || side >= NSides) {
590 PZError <<
"TPZCube::SideDimension side " << side << endl;
593 return sidedimension[side];
598 if(sidefrom <0 || sidefrom >= NSides || sideto <0 || sideto >= NSides) {
599 PZError <<
"TPZCube::HigherDimensionSides sidefrom "<< sidefrom <<
600 ' ' << sideto << endl;
603 if(sidefrom == sideto) {
606 if(sidefrom == NSides-1) {
607 return TransformElementToSide(sideto);
609 if (sideto== NSides -1) {
610 return TransformSideToElement(sidefrom);
612 int nhigh = nhighdimsides[sidefrom];
614 for(is=0; is<nhigh; is++) {
615 if(highsides[sidefrom][is] == sideto) {
616 int dfr = sidedimension[sidefrom];
617 int dto = sidedimension[sideto];
620 for(i=0; i<dto; i++) {
621 for(j=0; j<dfr; j++) {
622 trans.
Mult()(i,j) = sidetosidetransforms[sidefrom][is][j][i];
624 trans.
Sum()(i,0) = sidetosidetransforms[sidefrom][is][3][i];
629 PZError <<
"TPZCube::SideToSideTransform highside not found sidefrom " 630 << sidefrom <<
' ' << sideto << endl;
637 for(
int i=0; i<3; i++)
639 REAL
val = -1. + 2.*(REAL) rand() / (RAND_MAX);
646 if(side<0 || side>26){
647 PZError <<
"TPZCube::TransformElementToSide called with side error\n";
680 t.
Mult()(0,0) = -1.0;
685 t.
Mult()(0,1) = -1.0;
723 if(side<0 || side>26){
724 PZError <<
"TPZCube::TransformSideToElement side out range\n";
783 t.
Mult()(0,0) = -1.0;
788 t.
Mult()(1,0) = -1.0;
823 t.
Mult()(0,0) = -1.0;
828 t.
Mult()(1,0) = -1.0;
874 if(side<0 || side>26) {
875 PZError <<
"TPZCube::CreateSideIntegrationRule. bad side number.\n";
879 if(side<20)
return new TPZInt1d(order);
936 int TPZCube::NumSides() {
941 int TPZCube::NContainedSides(
int side) {
942 if(side<0)
return -1;
944 if(side<20)
return 3;
945 if(side<26)
return 9;
946 if(side==26)
return 27;
953 if(dimension<0 || dimension> 3) {
954 PZError <<
"TPZCube::NumSides. Bad parameter i.\n";
957 if(dimension==0)
return 8;
958 if(dimension==1)
return 12;
959 if(dimension==2)
return 6;
960 if(dimension==3)
return 1;
965 int TPZCube::ContainedSideLocId(
int side,
int node) {
966 if(side<0 || side>26)
return -1;
968 if(node==0)
return side;
973 if(node==1)
return (s+1)%4;
974 if(node==2)
return side;
979 if(node==1)
return s+4;
980 if(node==2)
return side;
984 if(!node)
return s+4;
985 if(node==1)
return (s+1)%4+4;
986 if(node==2)
return side;
990 if(node<9)
return FaceConnectLocId[s][node];
995 PZError <<
"TPZShapeCube::ContainedSideLocId called for node = " 996 << node <<
" and side = " << side <<
"\n";
1001 const REAL qsi = pt[0];
1002 const REAL eta = pt[1];
1003 const REAL zeta = pt[2];
1004 if( (
fabs(qsi) <= 1. + tol ) && (
fabs(eta) <= 1. + tol ) && (
fabs(zeta) <= 1. + tol ) ){
1013 bool TPZCube::CheckProjectionForSingularity(
const int &side,
const TPZVec<T> &xiInterior) {
1022 SidePar.
Resize(SideDimension(side));
1023 Transf.
Apply(InternalPar,SidePar);
1029 for(
int i = 0; i < R; i++)
1031 for(
int j = 0; j < C; j++) JacToSide(i,j) = Transf.
Mult()(i,j);
1037 if(node > NCornerNodes)
1041 nodeCoord.
Resize(Dimension, 0.);
1116 LOGPZ_ERROR(logger,
"GetTransformId not implemented")
1151 int in1 = ContainedSideLocId(side,0);
1152 int in2 = ContainedSideLocId(side,1);
1153 return id[in1]<
id[in2] ? 0 : 1;
1165 for(i=0; i<4; i++) locid[i] =
id[ContainedSideLocId(side,i)];
1185 void TPZCube::GetSideHDivPermutation(
int transformationid,
TPZVec<int> &permgather)
1201 for (
int ivet=inicio; ivet<=fim; ivet++)
1205 for (
int ilin=0; ilin<3; ilin++)
1207 u[ilin] = t1vec(ilin,ivet);
1208 v[ilin] = t2vec(ilin,ivet);
1218 for (
int il=0; il<3; il++)
1220 for (
int i = 0 ; i<3; i++)
1222 dxt1[il] += gradx(il,i) * t1vec(i,ivet);
1223 dxt2[il] += gradx(il,i) * t2vec(i,ivet);
1225 Vvec[il] += gradx(il,i) * bvec(i,ivet);
1229 REAL normaX0xX1 = 0.0;
1232 for (
int pos=0; pos<3; pos++)
1234 normaX0xX1 += normal[pos]*normal[pos];
1239 REAL detgrad = gradx(0,0)*gradx(1,1)*gradx(2,2) + gradx(0,1)*gradx(1,2)*gradx(2,0) + gradx(0,2)*gradx(1,0)*gradx(2,1) - gradx(0,2)*gradx(1,1)*gradx(2,0) - gradx(0,0)*gradx(1,2)*gradx(2,1) - gradx(0,1)*gradx(1,0)*gradx(2,2);
1241 normaX0xX1 =
sqrt(normaX0xX1);
1248 for (
int il=0; il<3; il++)
1250 Wvec(il,0) = Vvec[il]*normaX0xX1/(detgrad);
1251 directions(il,cont) = Wvec(il,0);
1259 for (
int il=0; il<3; il++)
1261 for (
int i = 0 ; i<3; i++)
1263 Vvec[il] += gradx(il,i) * bvec(i,ivet);
1266 for (
int il=0; il<3; il++)
1268 directions(il,cont) = Vvec[il];
1370 template <
class TVar>
1376 for (
int i=0; i<3; i++) {
1399 for (
int i=0; i<3; i++) {
1407 for (
int i=0; i<3; i++) {
1408 for (
int iv=0; iv<9; iv++) {
1409 directions(i,iv) = -v3[i]*NormalScales[1];
1410 directions(i,iv+9) = -v2[i]*NormalScales[2];
1411 directions(i,iv+18) = v1[i]*NormalScales[1];
1412 directions(i,iv+27) = v2[i]*NormalScales[2];
1413 directions(i,iv+36) = -v1[i]*NormalScales[1];
1414 directions(i,iv+45) = v3[i]*NormalScales[1];
1416 directions(i,54) = v1[i]*NormalScales[1];
1417 directions(i,55) = v2[i]*NormalScales[2];
1418 directions(i,56) = -v1[i]*NormalScales[1];
1419 directions(i,57) = -v2[i]*NormalScales[2];
1421 directions(i,58) = v3[i]*NormalScales[1];
1422 directions(i,59) = v3[i]*NormalScales[1];
1423 directions(i,60) = v3[i]*NormalScales[1];
1424 directions(i,61) = v3[i]*NormalScales[1];
1426 directions(i,62) = v1[i]*NormalScales[1];
1427 directions(i,63) = v2[i]*NormalScales[2];
1428 directions(i,64) = -v1[i]*NormalScales[1];
1429 directions(i,65) = -v2[i]*NormalScales[2];
1431 directions(i,66) = v1[i]*NormalScales[1];
1432 directions(i,67) = v2[i]*NormalScales[2];
1434 directions(i,68) = v1[i]*NormalScales[1];
1435 directions(i,69) = v3[i]*NormalScales[1];
1436 directions(i,70) = v2[i]*NormalScales[2];
1437 directions(i,71) = v3[i]*NormalScales[1];
1438 directions(i,72) = v1[i]*NormalScales[1];
1439 directions(i,73) = v3[i]*NormalScales[1];
1440 directions(i,74) = v2[i]*NormalScales[2];
1441 directions(i,75) = v3[i]*NormalScales[1];
1443 directions(i,76) = v1[i]*NormalScales[1];
1444 directions(i,77) = v2[i]*NormalScales[2];
1446 directions(i,78) = v1[i]*NormalScales[1];
1447 directions(i,79) = v2[i]*NormalScales[2];
1448 directions(i,80) = v3[i]*NormalScales[1];
1458 { std::cout <<
"Gradient dimensions are not compatible with this topology" << std::endl;
1462 int numvec = bvec.
Cols();
1466 directions.
Redim(3, numvec);
1467 for (
int lin = 0; lin<numvec; lin++)
1469 for(
int col = 0;col<3;col++)
1471 bvec.
PutVal(col, lin, bCubo[lin][col]);
1472 t1vec.
PutVal(col, lin, t1Cubo[lin][col]);
1473 t2vec.
PutVal(col, lin, t2Cubo[lin][col]);
1484 int inicio = 0, fim = 8;
1486 for (
int ip = 0; ip < 9; ip++) {
1487 sidevectors[ip] = vectorsideorderC[ip+inicio];
1495 int inicio = 9, fim = 17;
1497 for (
int ip = 0; ip < 9; ip++) {
1498 sidevectors[ip] = vectorsideorderC[ip+inicio];
1506 int inicio = 18, fim = 26;
1508 for (
int ip = 0; ip < 9; ip++) {
1509 sidevectors[ip] = vectorsideorderC[ip+inicio];
1517 int inicio = 27, fim = 35;
1519 for (
int ip = 0; ip < 9; ip++) {
1520 sidevectors[ip] = vectorsideorderC[ip+inicio];
1528 int inicio = 36, fim = 44;
1530 for (
int ip = 0; ip < 9; ip++) {
1531 sidevectors[ip] = vectorsideorderC[ip+inicio];
1539 int inicio = 45, fim = 53;
1541 for (
int ip = 0; ip < 9; ip++) {
1542 sidevectors[ip] = vectorsideorderC[ip+inicio];
1548 directions.
Resize(3, 27);
1550 int inicio = 54, fim = 80;
1552 for (
int ip = 0; ip < 27; ip++) {
1553 sidevectors[ip] = vectorsideorderC[ip+inicio];
1563 if (SideDimension(side) == 2) {
1565 LowerDimensionSides(side, lowerdim);
1566 lowerdim.
Push(side);
1567 if (sidevectors.
size() != lowerdim.
size()) {
1571 for (
int i=0; i<lowerdim.
size(); i++) {
1572 if (lowerdim[i] != sidevectors[i]) {
1578 std::cout <<
"sidevectors = " << sidevectors <<
" lowerdim = " << lowerdim << std::endl;
1588 int nsides = NumSides()*3;
1594 for (
int is = 0; is<nsides; is++)
1596 sides[is] = vectorsideorderC[is];
1597 dir[is] = direcaoksioueta[is];
1598 bilounao[is] = bilinearounao[is];
1604 int nsides = NumSides()*3;
1610 for (
int is = 0; is<nsides; is++)
1612 sides[is] = vectorsideorderC[is];
1613 dir[is] = direcaoksioueta[is];
1614 bilounao[is] = bilinearounao[is];
1617 for (
int i=0; i<Dimension*NumSides(); i++) {
1618 sidevectors[i] = vectorsideorderC[i];
1622 template <
class TVar>
1627 for (
int i=0; i<3; i++) {
1632 constexpr
int nEdges = 12;
1633 constexpr REAL edgeLength[nEdges]{2,2,2,2,2,2,2,2,2,2,2,2};
1634 constexpr
int nFaces = 6;
1635 constexpr REAL faceArea[nFaces]{4,4,4,4,4,4};
1637 for(
auto iEdge = 0; iEdge < nEdges; iEdge++){
1638 edgeSign[iEdge] = transformationIds[iEdge] == 0 ? 1 : -1;
1640 for(
int iSide = 0; iSide < nEdges; iSide ++){
1641 int sign = (iSide < 4 || iSide > 7) ?
1642 ( (iSide%4) /2 ? -1 : 1)
1645 sign *= edgeSign[iSide];
1647 ( (iSide%4) % 2 ? v2 : v1)
1650 for (
int i=0; i<3; i++){
1654 directions(i,iSide * 2) =
1655 directions(i,iSide * 2 + 1) =
1657 directions(i,nEdges*2 + iSide) = sign * vec1[i] / edgeLength[iSide];
1660 for (
int i=0; i<3; i++) {
1664 directions(i, 36) = v2[i] * edgeSign[ 8-NCornerNodes] / faceArea[0];
1665 directions(i, 37) = -v1[i] * edgeSign[ 9-NCornerNodes] / faceArea[0];
1666 directions(i, 38) = -v2[i] * edgeSign[10-NCornerNodes] / faceArea[0];
1667 directions(i, 39) = v1[i] * edgeSign[11-NCornerNodes] / faceArea[0];
1669 directions(i, 40) = v3[i] * edgeSign[ 8-NCornerNodes] / faceArea[1];
1670 directions(i, 41) = -v1[i] * edgeSign[13-NCornerNodes] / faceArea[1];
1671 directions(i, 42) = v3[i] * edgeSign[16-NCornerNodes] / faceArea[1];
1672 directions(i, 43) = -v1[i] * edgeSign[12-NCornerNodes] / faceArea[1];
1674 directions(i, 44) = v3[i] * edgeSign[ 9-NCornerNodes] / faceArea[2];
1675 directions(i, 45) = -v2[i] * edgeSign[14-NCornerNodes] / faceArea[2];
1676 directions(i, 46) = v3[i] * edgeSign[17-NCornerNodes] / faceArea[2];
1677 directions(i, 47) = -v2[i] * edgeSign[13-NCornerNodes] / faceArea[2];
1679 directions(i, 48) = -v3[i] * edgeSign[10-NCornerNodes] / faceArea[3];
1680 directions(i, 49) = -v1[i] * edgeSign[14-NCornerNodes] / faceArea[3];
1681 directions(i, 50) = -v3[i] * edgeSign[18-NCornerNodes] / faceArea[3];
1682 directions(i, 51) = -v1[i] * edgeSign[15-NCornerNodes] / faceArea[3];
1684 directions(i, 52) = -v3[i] * edgeSign[11-NCornerNodes] / faceArea[4];
1685 directions(i, 53) = -v2[i] * edgeSign[15-NCornerNodes] / faceArea[4];
1686 directions(i, 54) = -v3[i] * edgeSign[19-NCornerNodes] / faceArea[4];
1687 directions(i, 55) = -v2[i] * edgeSign[12-NCornerNodes] / faceArea[4];
1689 directions(i, 56) = v2[i] * edgeSign[16-NCornerNodes] / faceArea[5];
1690 directions(i, 57) = -v1[i] * edgeSign[17-NCornerNodes] / faceArea[5];
1691 directions(i, 58) = -v2[i] * edgeSign[18-NCornerNodes] / faceArea[5];
1692 directions(i, 59) = v1[i] * edgeSign[19-NCornerNodes] / faceArea[5];
1697 directions(i, 72) = -v3[i];
1698 directions(i, 73) = -v2[i];
1699 directions(i, 74) = v1[i];
1700 directions(i, 75) = v2[i];
1701 directions(i, 76) = -v1[i];
1702 directions(i, 77) = v3[i];
1705 directions(i, 78) = v1[i];
1706 directions(i, 79) = v2[i];
1707 directions(i, 80) = v3[i];
1710 constexpr
auto firstVftVec = 60;
1712 for(
auto iFace = 0; iFace < nFaces; iFace ++){
1713 TPZQuadrilateral::ComputeHCurlFaceDirections(vft1,vft2,transformationIds[nEdges + iFace]);
1714 directions(0,firstVftVec+2*iFace) = 0;directions(1,firstVftVec+2*iFace) = 0;directions(2,firstVftVec+2*iFace) = 0;
1715 directions(0,firstVftVec+2*iFace+1) = 0;directions(1,firstVftVec+2*iFace+1) = 0;directions(2,firstVftVec+2*iFace+1) = 0;
1716 auto axes = TPZCube::TransformElementToSide(NCornerNodes+nEdges+iFace).Mult();
1718 for(
auto x = 0; x < Dimension; x++){
1719 for(
auto i = 0; i < 2; i++) {
1720 directions(x, firstVftVec + 2 * iFace) += axes(x,i) * vft1[i];
1721 directions(x, firstVftVec + 2 * iFace + 1) += axes(x,i) * vft2[i];
1727 int TPZCube::ClassId()
const{
1728 return Hash(
"TPZCube");
1735 void TPZCube::Write(
TPZStream& buf,
int withclassid)
const {
1746 template bool pztopology::TPZCube::CheckProjectionForSingularity<REAL>(
const int &side,
const TPZVec<REAL> &xiInterior);
1750 template void pztopology::TPZCube::BlendFactorForSide<REAL>(
const int &,
const TPZVec<REAL> &, REAL &, TPZVec<REAL> &);
1759 template bool pztopology::TPZCube::CheckProjectionForSingularity<Fad<REAL>>(
const int &side,
const TPZVec<Fad<REAL>> &xiInterior);
1764 TPZVec<Fad<REAL>> &);
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ fabs
static int bilinearounao[81]
Contains the TPZInt1d, TPZIntTriang, TPZIntQuad, TPZIntCube3D, TPZIntTetra3D, TPZIntPyram3D and TPZIn...
Contains definitions to LOGPZ_DEBUG, LOGPZ_INFO, LOGPZ_WARN, LOGPZ_ERROR and LOGPZ_FATAL, and the implementation of the inline InitializePZLOG(string) function using log4cxx library or not. It must to be called out of "#ifdef LOG4CXX" scope.
Implements a vector class which allows to use external storage provided by the user. Utility.
Handles the numerical integration for three-dimensional problems using cube elements. Numerical Integration.
clarg::argInt dimension("-d", "Matrices dimension M x M", 1000)
static int direcaoksioueta[81]
Defines enum MElementType and contains the implementation of MElementType_NNodes(...) functions.
This class implements a simple vector storage scheme for a templated class T. Utility.
REAL val(STATE &number)
Returns value of the variable.
virtual void Resize(const int64_t newsize, const T &object)
Resizes the vector object.
Handles the numerical integration for one-dimensional problems. Numerical Integration.
#define LOGPZ_FATAL(A, B)
Define log for fatal errors (cout)
Abstract class defining integration rules. Numerical Integration.
static void ProdVetorial(TPZVec< Tvar > &u, TPZVec< Tvar > &v, TPZVec< Tvar > &result)
Computes the vectorial product u x v.
static int highsides[27][7]
For each side was stored the sides connected with it but of the higher dimension. ...
static REAL t1Cubo[81][3]
int Zero() override
Makes Zero all the elements.
int64_t size() const
Returns the number of elements of the vector.
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...
Handles the numerical integration for two-dimensional problems using quadrilateral elements...
static int nhighdimsides[27]
For each side was stored the number of sides connected of the higher dimension than it self For examp...
Groups all classes defining the structure of the master element.
void Push(const T object)
Pushes a copy of the object on the stack.
expr_ dx(i) *cos(expr_.val())
static TPZTransform SideToSideTransform(int sidefrom, int sideto)
Returns the transformation which takes a point from the side sidefrom to the side sideto...
#define DebugStop()
Returns a message to user put a breakpoint in.
Free store vector implementation.
Contains the TPZQuadrilateral class which defines the topology of a quadrilateral element...
int64_t Rows() const
Returns number of rows.
expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ expr_ sqrt
static int vectorsideorderC[81]
#define LOGPZ_ERROR(A, B)
Define log for errors (cout)
int Redim(const int64_t newRows, const int64_t newCols) override
Redimension a matrix and ZERO your elements.
static int nsidenodes[27]
Vector with the number of vertices contained in the closure of the side.
static REAL MidSideNode[27][3]
For each side the vector related the coordinates of the point considered middle of the side...
int32_t Hash(std::string str)
static int FaceConnectLocId[6][9]
For each face (quadrilateral sides) was enumerated in sequence the sides contained in the closure of ...
static REAL t2Cubo[81][3]
static Tvar Norm(const TPZVec< Tvar > &vetor)
Returns the L2-norm of the vector.
static REAL sidetosidetransforms[27][7][4][3]
The transformations for each side over neighboard side with higher dimension.
Integration rule for one point. Numerical Integration.
MElementType
Define the element types.
static int sidedimension[27]
Vector of the dimension for each side.
int64_t Cols() const
Returns number of cols.
static int GetTransformId(TPZVec< int64_t > &id)
Method which identifies the transformation based on the IDs of the corner nodes.
int Resize(const int64_t newRows, const int64_t wCols) override
Redimension a matrix, but maintain your elements.
Defines the interface for saving and reading data. Persistency.
Contains the declaration of TPZFlopCounter class and TPZCounter struct.
void computedirectionsC(int inicio, int fim, TPZFMatrix< REAL > &bvec, TPZFMatrix< REAL > &t1vec, TPZFMatrix< REAL > &t2vec, TPZFMatrix< REAL > &gradx, TPZFMatrix< REAL > &directions)
Contains the TPZCube class which defines the topology of the hexahedron element.
int PutVal(const int64_t row, const int64_t col, const TVar &value) override
Put values without bounds checking This method is faster than "Put" if DEBUG is defined.
void Transpose(TPZMatrix< TVar > *const T) const override
It makes *T the transpose of current matrix.
Non abstract class which implements full matrices with preallocated storage with (N+1) entries...
#define PZError
Defines the output device to error messages and the DebugStop() function.