24 static LoggerPtr logger(Logger::getLogger(
"pz.topology.pzprism"));
31 static int FaceConnectLocId[5][9] = { {0,1,2,6,7,8,15,-1,-1},{0,1,4,3,6,10,12,9,16},
32 {1,2,5,4,7,11,13,10,17},{0,2,5,3,8,11,14,9,18},{3,4,5,12,13,14,19,-1,-1} };
35 int TPZPrism::FaceNodes[5][4] = { {0,1,2,-1},{0,1,4,3},{1,2,5,4},{0,2,5,3},{3,4,5,-1} };
38 int TPZPrism::SideNodes[9][2] = { {0,1},{1,2},{2,0},{0,3},{1,4},{2,5},{3,4},{4,5},{5,3} };
41 int TPZPrism::ShapeFaceId[5][4] = { {0,1,2,-1},{0,1,4,3},{1,2,5,4},{0,2,5,3},{3,4,5,-1} };
43 int TPZPrism::fPermutations[12][21] =
45 {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},
46 {0,2,1,3,5,4,8,7,6,9,11,10,14,13,12,15,18,17,16,19,20},
47 {1,0,2,4,3,5,6,8,7,10,9,11,12,14,13,15,16,18,17,19,20},
48 {1,2,0,4,5,3,7,8,6,10,11,9,13,14,12,15,17,18,16,19,20},
49 {2,0,1,5,3,4,8,6,7,11,9,10,14,12,13,15,18,16,17,19,20},
50 {2,1,0,5,4,3,7,6,8,11,10,9,13,12,14,15,17,16,18,19,20},
51 {3,4,5,0,1,2,12,13,14,9,10,11,6,7,8,19,16,17,18,15,20},
52 {3,5,4,0,2,1,14,13,12,9,11,10,8,7,6,19,18,17,16,15,20},
53 {4,3,5,1,0,2,12,14,13,10,9,11,6,8,7,19,16,18,17,15,20},
54 {4,5,3,1,2,0,13,14,12,10,11,9,7,8,6,19,17,18,16,15,20},
55 {5,3,4,2,0,1,14,12,13,11,9,10,8,6,7,19,18,16,17,15,20},
56 {5,4,3,2,1,0,13,12,14,11,10,9,7,6,8,19,17,16,18,15,20}
59 static int sidedimension[21] = {0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3};
61 static int nhighdimsides[21] = {7,7,7,7,7,7,3,3,3,3,3,3,3,3,3,1,1,1,1,1,0};
67 {9,12,14,16,18,19,20},
68 {10,12,13,16,17,19,20},
69 {11,13,14,17,18,19,20},
90 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
91 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
92 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
93 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,0,-99}},
94 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
95 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
96 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,0,-1}}
100 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
101 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
102 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
103 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
104 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
106 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-1,-99}},
107 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-1}}
111 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
112 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
113 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
114 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
115 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
116 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-1,-99}},
117 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-1}}
121 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
122 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
123 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
124 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
125 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
126 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,0,-99}},
127 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,0,1}}
131 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
132 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
133 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
134 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
135 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,1,-99}},
136 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
137 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,0,1}}
141 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
142 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,-99,-99}},
143 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-1,-99,-99}},
144 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
145 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{1,1,-99}},
146 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
147 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{0,1,1}}
151 {{0.5,0,-99},{-99,-99,-99},{-99,-99,-99},{0.5,0,-99}},
152 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
153 {{0.5,0,0},{-99,-99,-99},{-99,-99,-99},{0.5,0,-1}}
157 {{-0.5,0.5,-99},{-99,-99,-99},{-99,-99,-99},{0.5,0.5,-99}},
158 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
159 {{-0.5,0.5,0},{-99,-99,-99},{-99,-99,-99},{0.5,0.5,-1}}
163 {{0,-0.5,-99},{-99,-99,-99},{-99,-99,-99},{0,0.5,-99}},
164 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,-1,-99}},
165 {{0,-0.5,0},{-99,-99,-99},{-99,-99,-99},{0,0.5,-1}}
169 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
170 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
171 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{0,0,0}}
175 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
176 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{-1,0,-99}},
177 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{1,0,0}}
181 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
182 {{0,1,-99},{-99,-99,-99},{-99,-99,-99},{1,0,-99}},
183 {{0,0,1},{-99,-99,-99},{-99,-99,-99},{0,1,0}}
187 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
188 {{0.5,0,-99},{-99,-99,-99},{-99,-99,-99},{0.5,0,-99}},
189 {{0.5,0,0},{-99,-99,-99},{-99,-99,-99},{0.5,0,1}}
193 {{1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
194 {{-0.5,0.5,-99},{-99,-99,-99},{-99,-99,-99},{0.5,0.5,-99}},
195 {{-0.5,0.5,0},{-99,-99,-99},{-99,-99,-99},{0.5,0.5,1}}
199 {{-1,0,-99},{-99,-99,-99},{-99,-99,-99},{0,1,-99}},
200 {{0,-0.5,-99},{-99,-99,-99},{-99,-99,-99},{0,0.5,-99}},
201 {{0,-0.5,0},{-99,-99,-99},{-99,-99,-99},{0,0.5,1}}
205 {{1,0,0},{0,1,0},{-99,-99,-99},{0,0,-1}}
209 {{0.5,0,0},{0,0,1},{-99,-99,-99},{0.5,0,0}}
213 {{-0.5,0.5,0},{0,0,1},{-99,-99,-99},{0.5,0.5,0}}
217 {{0,0.5,0},{0,0,1},{-99,-99,-99},{0,0.5,0}}
221 {{1,0,0},{0,1,0},{-99,-99,-99},{0,0,1}}
225 {{-99,-99,-99},{-99,-99,-99},{-99,-99,-99},{-99,-99,-99}}
230 {0.,.0,-1.},{1.,0.,-1.},{.0,1.,-1.},{.0,.0, 1.},
231 {1.,.0, 1.},{0.,1., 1.},{.5,.0,-1.},{.5,.5,-1.},
232 {.0,.5,-1.},{0.,.0, 0.},{1.,.0, 0.},{.0,1., 0.},
233 {.5,.0, 1.},{.5,.5, 1.},{.0,.5, 1.},{1./3.,1./3.,-1.},
234 {.5,.0, 0.},{.5,.5, 0.},{0.,.5, 0.},{1./3.,1./3., 1.},
239 {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1}, {0,0,-1},
240 {0,-1,0}, {1,-1,0}, {1,-1,0}, {0,-1,0}, {0,-1,0}, {1,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0},
241 {1,0,0}, {0,1,0}, {0,1,0}, {1,0,0}, {1,1,0}, {0,1,0}, {1,1,0}, {1,0,0}, {1,1,0},
242 {-1,0,0}, {-1,1,0}, {-1,1,0}, {-1,0,0}, {-1,0,0}, {-1,1,0}, {-1,0,0}, {-1,0,0}, {-1,0,0},
243 {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1}, {0,0,1},
246 {1,0,0},{-1,1,0},{0,-1,0}, {0,0,1},{0,0,1},{0,0,1}, {1,0,0},{-1,1,0},{0,-1,0},
260 {1,0,0},{1,0,0},{1,0,0},{1,0,0},{1,0,0},{1,0,0},{1,0,0},
261 {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},
262 {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},
263 {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},
264 {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {1,0,0},{1,0,0},{1,0,0},
267 {0,1,0},{-1,-1,0},{1,0,0}, {-1,0,0},{0,-1,0},{1,1,0}, {0,1,0},{-1,-1,0},{1,0,0},
283 {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0}, {0,-1,0},
284 {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},
285 {-1,1,0}, {-1,1,0}, {-1,1,0}, {-1,1,0}, {-1,1,0}, {-1,1,0}, {-1,1,0},{-1,1,0},{-1,1,0},
286 {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},
287 {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0}, {0,1,0},{0,1,0},{0,1,0},
290 {0,0,1},{0,0,1},{0,0,1}, {0,-1,0},{1,1,0},{-1,0,0}, {0,0,1},{0,0,1},{0,0,1},
306 0,1,4,3,6,10,12,9,16,
307 1,2,5,4,7,11,13,10,17,
308 0,2,5,3,8,11,14,9,18,
310 6,7,8,9,10,11,12,13,14,
329 0,0,0,0,0,0,0,0,0,0,
330 0,0,0,0,0,0,0,0,0,0,
331 0,0,0,0,0,0,0,0,0,0,
332 0,0,0,0,0,0,0,0,0,0,
333 0,1,1,1,1,1,1,1,1,1,
334 1,1,1,1,1,1,1,1,1,1,
339 0,0,0,0,0,0,0,0,0,0,
340 0,0,0,0,0,0,0,0,0,0,
341 0,0,0,0,0,0,0,0,0,0,
342 0,0,0,0,0,0,0,0,0,0,
343 0,0,0,0,0,0,0,0,0,0,
344 0,1,0,1,0,1,0,1,0,1,
349 T qsi = loc[0], eta = loc[1] , zeta = loc[2];
351 phi(0,0) = .5*(1.-qsi-eta)*(1.-zeta);
352 phi(1,0) = .5*qsi*(1.-zeta);
353 phi(2,0) = .5*eta*(1.-zeta);
354 phi(3,0) = .5*(1.-qsi-eta)*(1.+zeta);
355 phi(4,0) = .5*qsi*(1.+zeta);
356 phi(5,0) = .5*eta*(1.+zeta);
358 dphi(0,0) = -.5*(1.-zeta);
359 dphi(1,0) = -.5*(1.-zeta);
360 dphi(2,0) = -.5*(1.-qsi-eta);
361 dphi(0,1) = .5*(1.-zeta);
365 dphi(1,2) = .5*(1.-zeta);
367 dphi(0,3) = -.5*(1.+zeta);
368 dphi(1,3) = -.5*(1.+zeta);
369 dphi(2,3) = .5*(1.-qsi-eta);
370 dphi(0,4) = .5*(1.+zeta);
374 dphi(1,5) = .5*(1.+zeta);
380 void TPZPrism::BlendFactorForSide(
const int &side,
const TPZVec<T> &xiVec, T &blendFactor,
382 blendFactorDxi.
Resize(TPZPrism::Dimension, (T) 0);
386 std::ostringstream sout;
387 if(side < NCornerNodes || side >= NSides){
388 sout<<
"The side\t"<<side<<
"is invalid. Aborting..."<<std::endl;
392 sout<<
"The method BlendFactorForSide expects the point xi to correspond to coordinates of a point";
393 sout<<
" inside the parametric domain. Aborting...";
396 if(!sout.str().empty()){
397 PZError<<std::endl<<sout.str()<<std::endl;
405 if(!CheckProjectionForSingularity(side,xiVec)){
406 std::cout<<
"Side projection is not regular and it should have been checked earlier. Aborting.."<<std::endl;
409 for(
int i = 0; i < blendFactorDxi.
size(); i++) blendFactorDxi[i] = 0;
412 blendFactorDxi.
Resize(TPZPrism::Dimension, (T) 0);
413 const T &xi = xiVec[0];
414 const T &eta = xiVec[1];
415 const T &zeta = xiVec[2];
426 blendFactor = 0.5*(1.-zeta)*(1.-eta)*(1.-eta);
427 blendFactorDxi[0] = 0;
428 blendFactorDxi[1] = -1.*(1 - eta)*(1 - zeta);
429 blendFactorDxi[2] = -0.5*((1 - eta)*(1 - eta));
432 blendFactor = 0.5*(1.-zeta)*(xi+eta)*(xi+eta);
433 blendFactorDxi[0] =1.*(eta + xi)*(1 - zeta);
434 blendFactorDxi[1] =1.*(eta + xi)*(1 - zeta);
435 blendFactorDxi[2] =-0.5*((eta + xi)*(eta + xi));
438 blendFactor = 0.5*(1.-zeta)*(1.-xi)*(1.-xi);
439 blendFactorDxi[0] =-1.*(1 - xi)*(1 - zeta);
440 blendFactorDxi[1] =0;
441 blendFactorDxi[2] =-0.5*((1 - xi)*(1 - xi));
444 blendFactor = 1. - xi - eta;
445 blendFactorDxi[0] = -1;
446 blendFactorDxi[1] = -1;
447 blendFactorDxi[2] = 0;
451 blendFactorDxi[0] = 1;
452 blendFactorDxi[1] = 0;
453 blendFactorDxi[2] = 0;
457 blendFactorDxi[0] = 0;
458 blendFactorDxi[1] = 1;
459 blendFactorDxi[2] = 0;
462 blendFactor = 0.5*(1.+zeta)*(1.-eta)*(1.-eta);
463 blendFactorDxi[0] = 0;
464 blendFactorDxi[1] = -1.*(1 - eta)*(1 + zeta);
465 blendFactorDxi[2] = 0.5*((1 - eta)*(1 - eta));
468 blendFactor = 0.5*(1.+zeta)*(xi+eta)*(xi+eta);
469 blendFactorDxi[0] = 1.*(eta + xi)*(1 + zeta);
470 blendFactorDxi[1] = 1.*(eta + xi)*(1 + zeta);
471 blendFactorDxi[2] = 0.5*((eta + xi)*(eta + xi));
474 blendFactor = 0.5*(1.+zeta)*(1.-xi)*(1.-xi);
475 blendFactorDxi[0] = -1.*(1 - xi)*(1 + zeta);
476 blendFactorDxi[1] = 0;
477 blendFactorDxi[2] = 0.5*((1 - xi)*(1 - xi));
480 blendFactor = 0.5*(1.-zeta);
481 blendFactorDxi[0] = 0;
482 blendFactorDxi[1] = 0;
483 blendFactorDxi[2] = -0.5;
486 blendFactor = 1.-eta;
487 blendFactorDxi[0] = 0;
488 blendFactorDxi[1] = -1;
489 blendFactorDxi[2] = 0;
492 blendFactor = xi+eta;
493 blendFactorDxi[0] = 1;
494 blendFactorDxi[1] = 1;
495 blendFactorDxi[2] = 0;
499 blendFactorDxi[0] = -1;
500 blendFactorDxi[1] = 0;
501 blendFactorDxi[2] = 0;
504 blendFactor = 0.5*(1.+zeta);
505 blendFactorDxi[0] = 0;
506 blendFactorDxi[1] = 0;
507 blendFactorDxi[2] = 0.5;
512 int TPZPrism:: NBilinearSides()
521 int nsidecon = NContainedSides(side);
523 for(is=0; is<nsidecon-1; is++)
524 smallsides.
Push(ContainedSideLocId(side,is));
527 void TPZPrism::LowerDimensionSides(
int side,
TPZStack<int> &smallsides,
int DimTarget)
530 int nsidecon = NContainedSides(side);
531 for(
int is = 0; is < nsidecon - 1; is++) {
532 if (SideDimension(ContainedSideLocId(side,is)) == DimTarget) smallsides.
Push(ContainedSideLocId(side,is));
538 if(side <0 || side >= NSides) {
539 PZError <<
"TPZPrism::HigherDimensionSides side "<< side << endl;
542 for(is=0; is<nhighdimsides[side]; is++) high.
Push(highsides[side][is]);
552 int TPZPrism::NSideNodes(
int side)
554 return nsidenodes[side];
558 if(dimension<0 || dimension> 3) {
559 PZError <<
"TPZPrism::NumSides. Bad parameter i.\n";
562 if(dimension==0)
return 6;
563 if(dimension==1)
return 9;
564 if(dimension==2)
return 5;
565 if(dimension==3)
return 1;
569 int TPZPrism::SideNodeLocId(
int side,
int node)
571 if(side<6 && node == 0)
return side;
572 if(side>= 6 && side < 15 && node<2)
return SideNodes[side-6][node];
574 if(node < 3)
return FaceNodes[side-15][node];
575 else if(node == 3)
return -1;
577 if(side>15 && side <19 && node <4)
return FaceNodes[side-15][node];
579 if(node<3)
return FaceNodes[side-15][node];
580 else if(node == 3)
return -1;
583 if(side==20 && node<6)
return node;
584 PZError <<
"TPZPrism::SideNodeLocId inconsistent side or node " << side <<
' ' << node << endl;
589 if (center.
size()!=Dimension) {
593 for(i=0; i<Dimension; i++) {
594 center[i] = MidSideNode[side][i];
598 int TPZPrism::SideDimension(
int side) {
599 if(side<0 || side >= NSides) {
600 PZError <<
"TPZPrism::SideDimension side " << side << endl;
603 return sidedimension[side];
608 if(sidefrom <0 || sidefrom >= NSides || sideto <0 || sideto >= NSides) {
609 PZError <<
"TPZPrism::HigherDimensionSides sidefrom "<< sidefrom <<
610 ' ' << sideto << endl;
613 if(sidefrom == sideto) {
616 if(sidefrom == NSides-1) {
617 return TransformElementToSide(sideto);
619 if (sideto==NSides-1) {
620 return TransformSideToElement(sidefrom);
622 int nhigh = nhighdimsides[sidefrom];
624 for(is=0; is<nhigh; is++) {
625 if(highsides[sidefrom][is] == sideto) {
626 int dfr = sidedimension[sidefrom];
627 int dto = sidedimension[sideto];
630 for(i=0; i<dto; i++) {
631 for(j=0; j<dfr; j++) {
632 trans.
Mult()(i,j) = sidetosidetransforms[sidefrom][is][j][i];
634 trans.
Sum()(i,0) = sidetosidetransforms[sidefrom][is][3][i];
639 PZError <<
"TPZPrism::SideToSideTransform highside not found sidefrom " 640 << sidefrom <<
' ' << sideto << endl;
647 if(side<0 || side>20){
648 PZError <<
"TPZPrism::TransformElementToSide called with side error\n";
652 if(side<0 || side>20){
653 PZError <<
"TPZPrism::TransformElementToSide called with side error\n";
679 t.
Mult()(0,0) = -1.0;
685 t.
Mult()(0,0) = -1.0;
686 t.
Mult()(0,1) = -2.0;
715 t.
Mult()(0,0) = -1.0;
751 if(side<0 || side>20){
752 PZError <<
"TPZPrism::TransformSideToElement side out range\n";
793 t.
Sum() (2,0) = -1.0;
796 t.
Mult()(0,0) = -0.5;
800 t.
Sum() (2,0) = -1.0;
803 t.
Mult()(1,0) = -0.5;
805 t.
Sum() (2,0) = -1.0;
824 t.
Mult()(0,0) = -0.5;
831 t.
Mult()(1,0) = -0.5;
841 t.
Sum() (2,0) = -1.0;
849 t.
Mult()(0,0) = -0.5;
878 TPZIntPoints * TPZPrism::CreateSideIntegrationRule(
int side,
int order){
879 if(side<0 || side>20) {
880 PZError <<
"TPZPrism::CreateSideIntegrationRule. bad side number.\n";
884 if(side<15)
return new TPZInt1d(order);
885 if(side==15 || side==19)
return new TPZIntTriang(order);
936 int TPZPrism::NumSides() {
941 int TPZPrism::NContainedSides(
int side) {
942 if(side<0)
return -1;
944 if(side<15)
return 3;
945 if(side==15 || side==19)
return 7;
946 if(side<19)
return 9;
947 if(side==20)
return 21;
951 int TPZPrism::ContainedSideLocId(
int side,
int node) {
952 if(side<0 || side>20 || node < 0)
return -1;
954 if(node==0)
return side;
959 if(node==1)
return (s+1)%3;
960 if(node==2)
return side;
965 if(node==1)
return s+3;
966 if(node==2)
return side;
971 if(node==1)
return (s+1)%3+3;
972 if(node==2)
return side;
974 if(side==15 || side==19) {
976 if(side==15 && node<7)
return FaceConnectLocId[s][node];
977 if(side==19 && node<7)
return FaceConnectLocId[s][node];
981 if(node<9)
return FaceConnectLocId[s][node];
983 if(side==20 && node<21){
986 PZError <<
"TPZShapePrism::ContainedSideLocId called for node = " 987 << node <<
" and side = " << side <<
"\n";
992 const REAL qsi = pt[0];
993 const REAL eta = pt[1];
994 const REAL zeta = pt[2];
995 if( ( qsi <= 1. + tol ) && ( qsi >= 0. - tol ) &&
996 ( eta <= 1. + tol ) && ( eta >= 0. - tol ) &&
997 ( eta <= 1. - qsi + tol ) &&
998 ( zeta <= 1. + tol ) && ( zeta >= -1. - tol) ){
1010 REAL
val = (REAL) rand() / (RAND_MAX);
1012 val = (1.-pt[0]) * (REAL) rand() / (RAND_MAX);
1014 val = -1. + 2. * (REAL) rand() / (RAND_MAX);
1019 bool TPZPrism::CheckProjectionForSingularity(
const int &side,
const TPZVec<T> &xiInterior) {
1022 T qsi = xiInterior[0];
1023 T eta = xiInterior[1];
1024 T zeta = xiInterior[2];
1026 bool regularmap =
true;
1038 if(
fabs((T)(eta-1.)) < zero) regularmap =
false;
1041 if(
fabs((T)(qsi+eta)) < zero) regularmap =
false;
1044 if(
fabs((T)(qsi-1.)) < zero) regularmap =
false;
1052 if(
fabs((T)(eta-1.)) < zero) regularmap =
false;
1055 if(
fabs((T)(qsi+eta)) < zero) regularmap =
false;
1058 if(
fabs((T)(qsi-1.)) < zero) regularmap =
false;
1064 if(
fabs((T)(eta-1.)) < zero) regularmap =
false;
1067 if(
fabs((T)(qsi+eta)) < zero) regularmap =
false;
1070 if(
fabs((T)(qsi-1.)) < zero) regularmap =
false;
1078 cout <<
"Cant compute CheckProjectionForSingularity method in TPZPrism class!\nParameter (SIDE) must be between 6 and 19!\nMethod Aborted!\n";
1088 T qsi = InternalPar[0];
1089 T eta = InternalPar[1];
1090 T zeta = InternalPar[2];
1092 if(!CheckProjectionForSingularity(side,InternalPar)){
1093 std::cout<<
"Side projection is not regular and it should have been checked earlier. Aborting.."<<std::endl;
1112 SidePar[0] = -1 - (2*qsi)/den;
1113 JacToSide(0,0) = -2/den;
1114 JacToSide(0,1) = (2*qsi)/(den*den);
1123 SidePar[0] = -1 + (2*eta)/den;
1124 JacToSide(0,0) = (-2*eta)/(den*den);
1125 JacToSide(0,1) = (2*qsi)/(den*den);
1134 SidePar[0] = 1 + (2*eta)/den;
1135 JacToSide(0,0) = (-2*eta)/(den*den);
1136 JacToSide(0,1) = 2/den;
1169 SidePar[0] = -1 +(2*qsi)/den;
1170 JacToSide(0,0) = 2/den;
1171 JacToSide(0,1) = (2*qsi)/(den*den);
1179 SidePar[0] = -1 + (2*eta)/(eta + qsi);
1180 JacToSide(0,0) = (-2*eta)/((eta + qsi)*(eta + qsi));
1181 JacToSide(0,1) = (2*qsi)/((eta + qsi)*(eta + qsi));
1189 SidePar[0] = 1 + (2*eta)/(-1 + qsi);
1190 JacToSide(0,0) = (-2*eta)/((-1 + qsi)*(-1 + qsi));
1191 JacToSide(0,1) = 2/(-1 + qsi);
1211 SidePar[0] = -1 - (2*qsi)/(-1 + eta);
1213 JacToSide(0,0) = -2/(-1 + eta);
1214 JacToSide(0,1) = (2*qsi)/((-1 + eta)*(-1 + eta));
1225 SidePar[0] = -1 + (2*eta)/(eta + qsi);
1227 JacToSide(0,0) = (-2*eta)/((eta + qsi)*(eta + qsi));
1228 JacToSide(0,1) = (2*qsi)/((eta + qsi)*(eta + qsi));
1239 SidePar[0] = -1 - (2*eta)/(-1 + qsi);
1241 JacToSide(0,0) = (2*eta)/((-1 + qsi)*(-1 + qsi));
1242 JacToSide(0,1) = -2/(-1 + qsi);
1262 SidePar = InternalPar;
1269 cout <<
"Cant compute MapToSide method in TPZPrism class!\nParameter (SIDE) must be between 6 and 19!\nMethod Aborted!\n";
1270 cout <<
"This should have been caught earlier in the execution, there is something wrong.\n";
1271 cout <<
"Check method TPZTetrahedron::CheckProjectionForSingularity<T>\n";
1276 void TPZPrism::ParametricDomainNodeCoord(
int node,
TPZVec<REAL> &nodeCoord)
1278 if(node > NCornerNodes)
1282 nodeCoord.
Resize(Dimension, 0.);
1374 int in1 = ContainedSideLocId(side,0);
1375 int in2 = ContainedSideLocId(side,1);
1376 return id[in1]<
id[in2] ? 0 : 1;
1385 for(i=0; i<3; i++) locid[i] =
id[ContainedSideLocId(side,i)];
1396 for(i=0; i<4; i++) locid[i] =
id[ContainedSideLocId(side,i)];
1420 void TPZPrism::GetSideHDivPermutation(
int transformationid,
TPZVec<int> &permgather)
1427 for(iel=0; iel<nel; iel++)
1428 permgather[iel]=iel;
1443 for (
int ivet=inicio; ivet<=fim; ivet++)
1447 for (
int ilin=0; ilin<3; ilin++)
1449 u[ilin] = t1vec(ilin,ivet);
1450 v[ilin] = t2vec(ilin,ivet);
1454 REAL normaX0xX1 = 0.0;
1468 for (
int il=0; il<3; il++)
1470 for (
int i = 0 ; i<3; i++)
1472 dxt1[il] += gradx(il,i) * t1vec(i,ivet);
1473 dxt2[il] += gradx(il,i) * t2vec(i,ivet);
1475 Vvec[il] += gradx(il,i) * bvec(i,ivet);
1485 for (
int pos=0; pos<3; pos++)
1488 normaX0xX1 += normal[pos]*normal[pos];
1492 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);
1495 normaX0xX1 =
sqrt(normaX0xX1);
1501 for (
int il=0; il<3; il++)
1503 Wvec(il,0) = Vvec[il]*normaX0xX1/(detgrad);
1504 directions(il,cont) = Wvec(il,0);
1512 for (
int il=0; il<3; il++)
1514 for (
int i = 0 ; i<3; i++)
1516 Vvec[il] += gradx(il,i) * bvec(i,ivet);
1519 for (
int il=0; il<3; il++)
1521 directions(il,cont) = Vvec[il];
1534 { std::cout <<
"Gradient dimensions are not compatible with this topology" << std::endl;
1538 int numvec = bvec.
Cols();
1542 directions.
Redim(3, numvec);
1543 for (
int lin = 0; lin<numvec; lin++)
1545 for(
int col = 0;col<3;col++)
1547 bvec.
PutVal(col, lin, bPrism[lin][col]);
1548 t1vec.
PutVal(col, lin, t1Prism[lin][col]);
1549 t2vec.
PutVal(col, lin, t2Prism[lin][col]);
1559 int inicio = 0, fim = 6;
1561 int diff = fim-inicio+1;
1562 for (
int ip = 0; ip < diff; ip++) {
1563 sidevectors[ip] = vectorsideorderPr[ip+inicio];
1571 int inicio = 7, fim = 15;
1573 int diff = fim-inicio+1;
1574 for (
int ip = 0; ip < diff; ip++) {
1575 sidevectors[ip] = vectorsideorderPr[ip+inicio];
1583 int inicio = 16, fim = 24;
1585 int diff = fim-inicio+1;
1586 for (
int ip = 0; ip < diff; ip++) {
1587 sidevectors[ip] = vectorsideorderPr[ip+inicio];
1595 int inicio = 25, fim = 33;
1597 int diff = fim-inicio+1;
1598 for (
int ip = 0; ip < diff; ip++) {
1599 sidevectors[ip] = vectorsideorderPr[ip+inicio];
1607 int inicio = 34, fim = 40;
1609 int diff = fim-inicio+1;
1610 for (
int ip = 0; ip < diff; ip++) {
1611 sidevectors[ip] = vectorsideorderPr[ip+inicio];
1617 directions.
Resize(3, 22);
1619 int inicio = 41, fim = 62;
1621 int diff = fim-inicio+1;
1622 for (
int ip = 0; ip < diff; ip++) {
1623 sidevectors[ip] = vectorsideorderPr[ip+inicio];
1635 template <
class TVar>
1640 TPZManVector<TVar,3> v1(3),v2(3),v3(3),v1v2(3),v3v1(3),v2v3(3),vec1(3),vec2(3),vec3(3), vdiag(3), v3vdiag(3);
1641 for (
int i=0; i<3; i++) {
1645 vdiag[i] = (gradx(i,0)-gradx(i,1));
1675 for (
int i=0; i<3; i++) {
1680 for (
int i=0; i<3; i++)
1682 for (
int iv=0; iv<7; iv++)
1684 directions(i,iv) = -v3[i]*Nv1v2*NormalScales[0];
1685 directions(i,iv+34) = v3[i]*Nv1v2*NormalScales[0];
1688 directions(i,7) = -v2[i]*Nv3v1*NormalScales[2];
1689 directions(i,8) = (v1[i]-v2[i])*Nv3v1*NormalScales[2];
1690 directions(i,9) = (v1[i]-v2[i])*Nv3v1*NormalScales[2];
1691 directions(i,10) = -v2[i]*Nv3v1*NormalScales[2];
1692 directions(i,11) = ( directions(i,7)+directions(i,8) )/2.;
1693 directions(i,12) = (v1[i]-v2[i])*Nv3v1*NormalScales[2];
1694 directions(i,13) = ( directions(i,9)+directions(i,10) )/2.;
1695 directions(i,14) = -v2[i]*Nv3v1*NormalScales[2];
1696 directions(i,15) = ( directions(i,12)+directions(i,14) )/2.;
1698 directions(i,16) = v1[i]*Nv3vdiag*NormalScales[3];
1699 directions(i,17) = v2[i]*Nv3vdiag*NormalScales[3];
1700 directions(i,18) = v2[i]*Nv3vdiag*NormalScales[3];
1701 directions(i,19) = v1[i]*Nv3vdiag*NormalScales[3];
1702 directions(i,20) = (directions(i,16) + directions(i,17))/2.;
1703 directions(i,21) = v2[i]*Nv3vdiag*NormalScales[3];
1704 directions(i,22) = (directions(i,18) + directions(i,19))/2.;
1705 directions(i,23) = v1[i]*Nv3vdiag*NormalScales[3];
1706 directions(i,24) = (directions(i,21) + directions(i,23))/2.;
1708 directions(i,25) = -v1[i]*Nv2v3*NormalScales[1];
1709 directions(i,26) = (v2[i]-v1[i])*Nv2v3*NormalScales[1];
1710 directions(i,27) = (v2[i]-v1[i])*Nv2v3*NormalScales[1];
1711 directions(i,28) = -v1[i]*Nv2v3*NormalScales[1];
1712 directions(i,29) = ( directions(i,25)+directions(i,26) )/2.;
1713 directions(i,30) = (v2[i]-v1[i])*Nv2v3*NormalScales[1];
1714 directions(i,31) = ( directions(i,27)+directions(i,28) )/2.;
1715 directions(i,32) = -v1[i]*Nv2v3*NormalScales[1];
1716 directions(i,33) = ( directions(i,30)+directions(i,32) )/2.;
1719 directions(i,41) = v1[i]*Nv2v3*NormalScales[1];
1720 directions(i,42) = (v2[i]-v1[i])/2.;
1721 directions(i,43) = -v2[i]*Nv3v1*NormalScales[2];
1723 directions(i,44) = v3[i]*Nv1v2*NormalScales[0];
1724 directions(i,45) = v3[i]*Nv1v2*NormalScales[0];
1725 directions(i,46) = v3[i]*Nv1v2*NormalScales[0];
1727 directions(i,47) = v1[i]*Nv2v3*NormalScales[1];
1728 directions(i,48) = (v2[i]-v1[i])/2.;
1729 directions(i,49) = -v2[i]*Nv3v1*NormalScales[2];
1732 directions(i,50) = v1[i]*Nv2v3*NormalScales[1];
1733 directions(i,51) = v2[i]*Nv3v1*NormalScales[2];
1734 directions(i,52) = v1[i]*Nv2v3*NormalScales[1]/2.;
1735 directions(i,53) = v3[i]*Nv1v2*NormalScales[0];
1736 directions(i,54) = (v2[i]-v1[i])/2.;
1737 directions(i,55) = v3[i]*Nv1v2*NormalScales[0];
1738 directions(i,56) = v2[i]*Nv3v1*NormalScales[2]/2.;
1739 directions(i,57) = v3[i]*Nv1v2*NormalScales[0];
1740 directions(i,58) = v1[i]*Nv2v3*NormalScales[1];
1741 directions(i,59) = v2[i]*Nv3v1*NormalScales[2];
1744 directions(i,60) = v1[i]*Nv2v3*NormalScales[1];
1745 directions(i,61) = v2[i]*Nv3v1*NormalScales[2];
1746 directions(i,62) = v3[i]*Nv1v2*NormalScales[0];
1754 int nsides = NumSides()*3;
1760 for (
int is = 0; is<nsides; is++)
1762 sides[is] = vectorsideorderPr[is];
1763 dir[is] = direcaoksioueta[is];
1764 bilounao[is] = bilinearounao[is];
1770 int nsides = NumSides()*3;
1776 for (
int is = 0; is<nsides; is++)
1778 sides[is] = vectorsideorderPr[is];
1779 dir[is] = direcaoksioueta[is];
1780 bilounao[is] = bilinearounao[is];
1782 for (
int i=0; i<Dimension*NumSides(); i++) {
1783 sidevectors[i] = vectorsideorderPr[i];
1787 template <
class TVar>
1792 for (
int i=0; i<3; i++) {
1797 constexpr
auto nEdges = 9;
1798 constexpr
auto nFaces = 5;
1800 constexpr REAL edgeLength[nEdges]{1,M_SQRT2,1,2, 2, 2, 1,M_SQRT2,1};
1802 constexpr REAL faceArea[nFaces]{0.5,2,2*M_SQRT2,2,0.5};
1804 for(
auto iEdge = 0; iEdge < nEdges; iEdge++){
1805 edgeSign[iEdge] = transformationIds[iEdge] == 0 ? 1 : -1;
1807 for (
int i=0; i<3; i++) {
1812 directions(i, 0) = (v1[i]) * edgeSign[0] / edgeLength[0];
1813 directions(i, 1) = (v1[i] + v2[i]) * edgeSign[0] / edgeLength[0];
1814 directions(i, 2) = (v2[i] * M_SQRT2) * edgeSign[1] / edgeLength[1];
1815 directions(i, 3) = (-v1[i] * M_SQRT2) * edgeSign[1] / edgeLength[1];
1816 directions(i, 4) = (v1[i] + v2[i]) * -1 * edgeSign[2] / edgeLength[2];
1817 directions(i, 5) = (-v2[i]) * edgeSign[2] / edgeLength[2];
1819 directions(i, 6) = v3[i] * edgeSign[3] / edgeLength[3];
1820 directions(i, 7) = v3[i] * edgeSign[3] / edgeLength[3];
1821 directions(i, 8) = v3[i] * edgeSign[4] / edgeLength[4];
1822 directions(i, 9) = v3[i] * edgeSign[4] / edgeLength[4];
1823 directions(i, 10) = v3[i] * edgeSign[5] / edgeLength[5];
1824 directions(i, 11) = v3[i] * edgeSign[5] / edgeLength[5];
1826 directions(i, 12) = (v1[i]) * edgeSign[6] / edgeLength[6];
1827 directions(i, 13) = (v1[i] + v2[i]) * edgeSign[6] / edgeLength[6];
1828 directions(i, 14) = (v2[i] * M_SQRT2) * edgeSign[7] / edgeLength[7];
1829 directions(i, 15) = (-v1[i] * M_SQRT2) * edgeSign[7] / edgeLength[7];
1830 directions(i, 16) = (v1[i] + v2[i]) * -1 * edgeSign[8] / edgeLength[8];
1831 directions(i, 17) = (-v2[i]) * edgeSign[8] / edgeLength[8];
1834 directions(i, 18) = (v1[i]) * edgeSign[0] / edgeLength[0];
1835 directions(i, 19) = ((v2[i] - v1[i]) * M_SQRT1_2) * edgeSign[1] / edgeLength[1];
1836 directions(i, 20) = (-v2[i]) * edgeSign[2] / edgeLength[2];
1838 directions(i, 21) = v3[i] * edgeSign[3] / edgeLength[3];
1839 directions(i, 22) = v3[i] * edgeSign[4] / edgeLength[4];
1840 directions(i, 23) = v3[i] * edgeSign[5] / edgeLength[5];
1842 directions(i, 24) = (v1[i]) * edgeSign[6] / edgeLength[6];
1843 directions(i, 25) = ((v2[i] - v1[i]) * M_SQRT1_2) * edgeSign[7] / edgeLength[7];
1844 directions(i, 26) = (-v2[i]) * edgeSign[8] / edgeLength[8];
1849 directions(i, 27) = v2[i] * edgeSign[6 - NCornerNodes] / faceArea[0];
1850 directions(i, 28) = -1 * (v1[i] + v2[i]) * M_SQRT1_2 * edgeSign[7 - NCornerNodes] / faceArea[0];
1851 directions(i, 29) = v1[i] * edgeSign[8 - NCornerNodes] / faceArea[0];
1853 directions(i, 30) = 0.5 * v3[i]* edgeSign[6 - NCornerNodes] / faceArea[1];
1854 directions(i, 31) = -1 * (v1[i]+v2[i])* edgeSign[10 - NCornerNodes] / faceArea[1];
1855 directions(i, 32) = 0.5 * v3[i]* edgeSign[12 - NCornerNodes] / faceArea[1];;
1856 directions(i, 33) = -v1[i]* edgeSign[9 - NCornerNodes] / faceArea[1];
1858 directions(i, 34) = M_SQRT1_2 * v3[i]* edgeSign[7 - NCornerNodes] / faceArea[2];
1859 directions(i, 35) = M_SQRT2 * v1[i]* edgeSign[11 - NCornerNodes] / faceArea[2];
1860 directions(i, 36) = M_SQRT1_2 * v3[i]* edgeSign[13 - NCornerNodes] / faceArea[2];
1861 directions(i, 37) = -M_SQRT2 * v2[i]* edgeSign[10 - NCornerNodes] / faceArea[2];
1863 directions(i, 38) = -0.5 * v3[i]* edgeSign[8 - NCornerNodes] / faceArea[3];
1864 directions(i, 39) = -1 * (v1[i] + v2[i])* edgeSign[11 - NCornerNodes] / faceArea[3];
1865 directions(i, 40) = -0.5 * v3[i]* edgeSign[14 - NCornerNodes] / faceArea[3];
1866 directions(i, 41) = -v2[i]* edgeSign[9 - NCornerNodes] / faceArea[3];
1868 directions(i, 42) = v2[i] * edgeSign[12 - NCornerNodes] / faceArea[4];
1869 directions(i, 43) = -1 * (v1[i] + v2[i] ) * M_SQRT1_2 * edgeSign[13 - NCornerNodes] / faceArea[4];
1870 directions(i, 44) = v1[i] * edgeSign[14 - NCornerNodes] / faceArea[4];
1875 directions(i, 55) = -v3[i];
1876 directions(i, 56) = -v2[i];
1877 directions(i, 57) = (v1[i] + v2[i]) * M_SQRT1_2;
1878 directions(i, 58) = -v1[i];
1879 directions(i, 59) = v3[i];
1882 directions(i, 60) = v1[i];
1883 directions(i, 61) = v2[i];
1884 directions(i, 62) = v3[i];
1888 constexpr
auto firstVftVec = 45;
1890 for(
auto iFace = 0; iFace < nFaces; iFace ++){
1894 TPZTriangle::ComputeHCurlFaceDirections(vft1,vft2,transformationIds[nEdges + iFace]);
1899 TPZQuadrilateral::ComputeHCurlFaceDirections(vft1,vft2,transformationIds[nEdges + iFace]);
1902 directions(0,firstVftVec+2*iFace) = 0;directions(1,firstVftVec+2*iFace) = 0;directions(2,firstVftVec+2*iFace) = 0;
1903 directions(0,firstVftVec+2*iFace+1) = 0;directions(1,firstVftVec+2*iFace+1) = 0;directions(2,firstVftVec+2*iFace+1) = 0;
1904 auto axes = TPZPrism::TransformElementToSide(NCornerNodes+nEdges+iFace).Mult();
1906 for(
auto x = 0; x < Dimension; x++){
1907 for(
auto i = 0; i < 2; i++) {
1908 directions(x, firstVftVec + 2 * iFace) += axes(x,i) * vft1[i];
1909 directions(x, firstVftVec + 2 * iFace + 1) += axes(x,i) * vft2[i];
1915 int TPZPrism::ClassId()
const{
1916 return Hash(
"TPZPrism");
1923 void TPZPrism::Write(
TPZStream& buf,
int withclassid)
const {
1934 template bool pztopology::TPZPrism::CheckProjectionForSingularity<REAL>(
const int &side,
const TPZVec<REAL> &xiInterior);
1938 template void pztopology::TPZPrism::BlendFactorForSide<REAL>(
const int &,
const TPZVec<REAL> &, REAL &, TPZVec<REAL> &);
1947 template bool pztopology::TPZPrism::CheckProjectionForSingularity<Fad<REAL>>(
const int &side,
const TPZVec<Fad<REAL>> &xiInterior);
1952 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 bool IsInParametricDomain(const TPZVec< REAL > &pt, REAL tol=pztopology::gTolerance)
Verifies if the parametric point pt is in the element parametric domain.
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.
static REAL MidSideNode[21][3]
Handles the numerical integration for two-dimensional problems using triangular elements. Numerical Integration.
static int nsidenodes[21]
clarg::argInt dimension("-d", "Matrices dimension M x M", 1000)
static REAL sidetosidetransforms[21][7][4][3]
virtual void Identity()
Converts the matrix in an identity matrix.
static int direcaoksioueta[63]
static int sidedimension[21]
static REAL t1Prism[63][3]
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.
Contains the TPZTriangle class which defines the topology of a triangle.
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 REAL bPrism[63][3]
static void ProdVetorial(TPZVec< Tvar > &u, TPZVec< Tvar > &v, TPZVec< Tvar > &result)
Computes the vectorial product u x v.
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 vectorsideorderPr[63]
Groups all classes defining the structure of the master element.
void Push(const T object)
Pushes a copy of the object on the stack.
Handles the numerical integration for three-dimensional problems using prism elements. Numerical Integration This cubature rule uses a cubature rule for one dimension (zeta) and a cubature rule for triangle (base).
#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...
static int bilinearounao[63]
static int GetTransformId(TPZVec< int64_t > &id)
Method which identifies the transformation based on the IDs of the corner nodes.
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 nhighdimsides[21]
#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.
int32_t Hash(std::string str)
static Tvar Norm(const TPZVec< Tvar > &vetor)
Returns the L2-norm of the vector.
Integration rule for one point. Numerical Integration.
MElementType
Define the element types.
static int FaceConnectLocId[5][9]
static REAL t2Prism[63][3]
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.
int64_t NElements() const
Returns the number of elements of the vector.
Contains the declaration of TPZFlopCounter class and TPZCounter struct.
Contains the TPZPrism class which defines the topology of a Prism.
void computedirectionsPr(int inicio, int fim, TPZFMatrix< REAL > &bvec, TPZFMatrix< REAL > &t1vec, TPZFMatrix< REAL > &t2vec, TPZFMatrix< REAL > &gradx, TPZFMatrix< REAL > &directions)
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.
static int highsides[21][7]
#define PZError
Defines the output device to error messages and the DebugStop() function.