1 #ifndef INTREPID_HGRAD_TET_COMP12_FEMDEF_HPP
2 #define INTREPID_HGRAD_TET_COMP12_FEMDEF_HPP
54 template<
class Scalar,
class ArrayScalar>
57 this -> basisCardinality_ = 10;
58 this -> basisDegree_ = 1;
59 this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Tetrahedron<11> >() );
60 this -> basisType_ = BASIS_FEM_DEFAULT;
61 this -> basisCoordinates_ = COORDINATES_CARTESIAN;
62 this -> basisTagsAreSet_ =
false;
66 template<
class Scalar,
class ArrayScalar>
76 int tags[] = { 0, 0, 0, 1,
89 Intrepid::setOrdinalTagData(
this -> tagToOrdinal_,
90 this -> ordinalToTag_,
92 this -> basisCardinality_,
101 template<
class Scalar,
class ArrayScalar>
103 const ArrayScalar & inputPoints,
104 const EOperator operatorType)
const {
107 #ifdef HAVE_INTREPID_DEBUG
108 Intrepid::getValues_HGRAD_Args<Scalar, ArrayScalar>(outputValues,
111 this -> getBaseCellTopology(),
112 this -> getCardinality() );
116 int dim0 = inputPoints.dimension(0);
127 Teuchos::Array<int> pt_tets;
130 switch (operatorType) {
133 for (
int i0 = 0; i0 < dim0; i0++) {
134 r = inputPoints(i0, 0);
135 s = inputPoints(i0, 1);
136 t = inputPoints(i0, 2);
138 pt_tets = getLocalSubTetrahedra(r,s,t);
144 if (pt_tets[0] != -1) {
145 int subtet = pt_tets[0];
150 outputValues(0, i0) = 1. - 2. * (r + s + t);
151 outputValues(4, i0) = 2. * r;
152 outputValues(6, i0) = 2. * s;
153 outputValues(7, i0) = 2. * t;
156 outputValues(1, i0) = 2. * r - 1.;
157 outputValues(4, i0) = 2. - 2. * (r + s + t);
158 outputValues(5, i0) = 2. * s;
159 outputValues(8, i0) = 2. * t;
162 outputValues(2, i0) = 2. * s - 1.;
163 outputValues(5, i0) = 2. * r;
164 outputValues(6, i0) = 2. - 2. * (r + s + t);
165 outputValues(9, i0) = 2. * t;
168 outputValues(3, i0) = 2. * t - 1.;
169 outputValues(7, i0) = 2. - 2. * (r + s + t);
170 outputValues(8, i0) = 2. * r;
171 outputValues(9, i0) = 2. * s;
174 outputValues(4, i0) = 1. - 2. * (s + t);
175 outputValues(5, i0) = 2. * (r + s) - 1.;
176 outputValues(8, i0) = 2. * (r + t) - 1.;
180 outputValues(5, i0) = 2. * (r + s) - 1.;
181 outputValues(8, i0) = 2. * (r + t) - 1.;
182 outputValues(9, i0) = 2. * (s + t) - 1.;
183 aux = 4. - 4. * (r + s + t);
186 outputValues(7, i0) = 1. - 2. * (r + s);
187 outputValues(8, i0) = 2. * (r + t) - 1.;
188 outputValues(9, i0) = 2. * (s + t) - 1.;
192 outputValues(4, i0) = 1. - 2. * (s + t);
193 outputValues(7, i0) = 1. - 2. * (r + s);
194 outputValues(8, i0) = 2. * (r + t) - 1.;
198 outputValues(4, i0) = 1. - 2. * (s + t);
199 outputValues(5, i0) = 2. * (r + s) - 1.;
200 outputValues(6, i0) = 1. - 2. * (r + t);
204 outputValues(5, i0) = 2. * (r + s) - 1.;
205 outputValues(6, i0) = 1. - 2. * (r + t);
206 outputValues(9, i0) = 2. * (s + t) - 1.;
210 outputValues(6, i0) = 1. - 2. * (r + t);
211 outputValues(7, i0) = 1. - 2. * (r + s);
212 outputValues(9, i0) = 2. * (s + t) - 1.;
216 outputValues(4, i0) = 1. - 2. * (s + t);
217 outputValues(6, i0) = 1. - 2. * (r + t);
218 outputValues(7, i0) = 1. - 2. * (r + s);
219 aux = 4. * (r + s + t) - 2.;
222 outputValues(4, i0) += aux/6.0;
223 outputValues(5, i0) += aux/6.0;
224 outputValues(6, i0) += aux/6.0;
225 outputValues(7, i0) += aux/6.0;
226 outputValues(8, i0) += aux/6.0;
227 outputValues(9, i0) += aux/6.0;
236 outputValues.initialize(0.0);
239 for (
int pt=0; pt < dim0; ++pt) {
241 r = inputPoints(pt, 0);
242 s = inputPoints(pt, 1);
243 t = inputPoints(pt, 2);
245 Lopt(0,0) = (-17 + 20*r + 20*s + 20*t)/8.;
246 Lopt(0,1) = (-17 + 20*r + 20*s + 20*t)/8.;
247 Lopt(0,2) = (-17 + 20*r + 20*s + 20*t)/8.;
248 Lopt(1,0) = -0.375 + (5*r)/2.;
252 Lopt(2,1) = -0.375 + (5*s)/2.;
256 Lopt(3,2) = -0.375 + (5*t)/2.;
257 Lopt(4,0) = (-35*(-1 + 2*r + s + t))/12.;
258 Lopt(4,1) = (-4 - 35*r + 5*s + 10*t)/12.;
259 Lopt(4,2) = (-4 - 35*r + 10*s + 5*t)/12.;
260 Lopt(5,0) = (-1 + 5*r + 40*s - 5*t)/12.;
261 Lopt(5,1) = (-1 + 40*r + 5*s - 5*t)/12.;
262 Lopt(5,2) = (-5*(-1 + r + s + 2*t))/12.;
263 Lopt(6,0) = (-4 + 5*r - 35*s + 10*t)/12.;
264 Lopt(6,1) = (-35*(-1 + r + 2*s + t))/12.;
265 Lopt(6,2) = (-4 + 10*r - 35*s + 5*t)/12.;
266 Lopt(7,0) = (-4 + 5*r + 10*s - 35*t)/12.;
267 Lopt(7,1) = (-4 + 10*r + 5*s - 35*t)/12.;
268 Lopt(7,2) = (-35*(-1 + r + s + 2*t))/12.;
269 Lopt(8,0) = (-1 + 5*r - 5*s + 40*t)/12.;
270 Lopt(8,1) = (-5*(-1 + r + 2*s + t))/12.;
271 Lopt(8,2) = (-1 + 40*r - 5*s + 5*t)/12.;
272 Lopt(9,0) = (-5*(-1 + 2*r + s + t))/12.;
273 Lopt(9,1) = (-1 - 5*r + 5*s + 40*t)/12.;
274 Lopt(9,2) = (-1 - 5*r + 40*s + 5*t)/12.;
276 for (
int node=0; node < 10; ++node) {
277 for (
int dim=0; dim < 3; ++dim) {
278 outputValues(node,pt,dim) = Lopt(node,dim);
286 TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_CURL), std::invalid_argument,
287 ">>> ERROR (Basis_HGRAD_TET_COMP12_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
291 TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
292 ">>> ERROR (Basis_HGRAD_TET_COMP12_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
306 int DkCardinality = Intrepid::getDkCardinality(operatorType,
307 this -> basisCellTopology_.getDimension() );
308 for(
int dofOrd = 0; dofOrd <
this -> basisCardinality_; dofOrd++) {
309 for (
int i0 = 0; i0 < dim0; i0++) {
310 for(
int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
311 outputValues(dofOrd, i0, dkOrd) = 0.0;
318 TEUCHOS_TEST_FOR_EXCEPTION( !( Intrepid::isValidOperator(operatorType) ), std::invalid_argument,
319 ">>> ERROR (Basis_HGRAD_TET_COMP12_FEM): Invalid operator type");
325 template<
class Scalar,
class ArrayScalar>
327 const ArrayScalar & inputPoints,
328 const ArrayScalar & cellVertices,
329 const EOperator operatorType)
const {
330 TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::logic_error,
331 ">>> ERROR (Basis_HGRAD_TET_COMP12_FEM): FEM Basis calling an FVD member function");
335 template<
class Scalar,
class ArrayScalar>
337 #ifdef HAVE_INTREPID_DEBUG
339 TEUCHOS_TEST_FOR_EXCEPTION( !(DofCoords.rank() == 2), std::invalid_argument,
340 ">>> ERROR: (Intrepid::Basis_HGRAD_TET_COMP12_FEM::getDofCoords) rank = 2 required for DofCoords array");
342 TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(0) ==
this -> basisCardinality_ ), std::invalid_argument,
343 ">>> ERROR: (Intrepid::Basis_HGRAD_TET_COMP12_FEM::getDofCoords) mismatch in number of DoF and 0th dimension of DofCoords array");
345 TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(1) == (int)(
this -> basisCellTopology_.getDimension()) ), std::invalid_argument,
346 ">>> ERROR: (Intrepid::Basis_HGRAD_TET_COMP12_FEM::getDofCoords) incorrect reference cell (1st) dimension in DofCoords array");
349 DofCoords(0,0) = 0.0; DofCoords(0,1) = 0.0; DofCoords(0,2) = 0.0;
350 DofCoords(1,0) = 1.0; DofCoords(1,1) = 0.0; DofCoords(1,2) = 0.0;
351 DofCoords(2,0) = 0.0; DofCoords(2,1) = 1.0; DofCoords(2,2) = 0.0;
352 DofCoords(3,0) = 0.0; DofCoords(3,1) = 0.0; DofCoords(3,2) = 1.0;
353 DofCoords(4,0) = 0.5; DofCoords(4,1) = 0.0; DofCoords(4,2) = 0.0;
354 DofCoords(5,0) = 0.5; DofCoords(5,1) = 0.5; DofCoords(5,2) = 0.0;
355 DofCoords(6,0) = 0.0; DofCoords(6,1) = 0.5; DofCoords(6,2) = 0.0;
356 DofCoords(7,0) = 0.0; DofCoords(7,1) = 0.0; DofCoords(7,2) = 0.5;
357 DofCoords(8,0) = 0.5; DofCoords(8,1) = 0.0; DofCoords(8,2) = 0.5;
358 DofCoords(9,0) = 0.0; DofCoords(9,1) = 0.5; DofCoords(9,2) = 0.5;
361 template<
class Scalar,
class ArrayScalar>
366 Teuchos::Array<int> subTets;
370 Scalar xyz = x + y + z;
378 if ( (0.0 <= xyz && xyz <= 0.5) && (0.0 <= x && x <= 0.5) && (0.0 <= y && y <= 0.5) && (0.0 <= z && z <= 0.5) ) {
380 subTets.push_back(0);
384 if ( (0.5 <= xyz && xyz <= 1.0) && (0.5 <= x && x <= 1.0) && (0.0 <= y && y <= 0.5) && (0.0 <= z && z <= 0.5) ) {
386 subTets.push_back(1);
390 if ( (0.5 <= xyz && xyz <= 1.0) && (0.0 <= x && x <= 0.5) && (0.5 <= y && y <= 1.0) && (0.0 <= z && z<= 0.5) ) {
392 subTets.push_back(2);
396 if ( (0.5 <= xyz && xyz <= 1.0) && (0.0 <= x && x <= 0.5) && (0.0 <= y && y <= 0.5) && (0.5 <= z && z <= 1.0) ) {
398 subTets.push_back(3);
402 if ( (0.0 <= yz && yz <= 0.5) && (0.5 <= xy && xy <= 1.0) && (0.5 <= xz && xz <= 1.0) && (0.0 <= x && x <= 0.5) ) {
404 subTets.push_back(4);
408 if ( (0.5 <= xy && xy <= 1.0) && (0.5 <= yz && yz <= 1.0) && (0.5 <= xz && xz <= 1.0) && (0.75 <= xyz && xyz <= 1.0) ) {
410 subTets.push_back(5);
414 if ( (0.5 <= yz && yz <= 1.0) && (0.0 <= xy && xy <= 0.5) && (0.5 <= xz && xz <= 1.0) && (0.0 <= z && z <= 0.5) ) {
416 subTets.push_back(6);
420 if ( (0.0 <= yz && yz <= 0.5) && (0.0 <= xy && xy <= 0.5) && (0.5 <= xz && xz <= 1.0) && (0.0 <= y && y <= 0.25) ) {
422 subTets.push_back(7);
426 if ( (0.0 <= xz && xz <= 0.5) && (0.0 <= yz && yz <= 0.5) && (0.5 <= xy && xy <= 1.0) && (0.0 <= z && z <= 0.25) ) {
428 subTets.push_back(8);
432 if ( (0.0 <= xz && xz <= 0.5) && (0.5 <= xy && xy <= 1.0) && (0.5 <= yz && yz <= 1.0) && (0.0 <= y && y <= 0.5) ) {
434 subTets.push_back(9);
438 if ( (0.0 <= xz && xz <= 0.5) && (0.5 <= yz && yz <= 1.0) && (0.0 <= xy && xy <= 0.5) && (0.0 <= x && x <= 0.25) ) {
440 subTets.push_back(10);
444 if ( (0.5 <= xyz && xyz <= 0.75) && (0.0 <= xz && xz <= 0.5) && (0.0 <= yz && yz <= 0.5) && (0.0 <= xy && xy <= 0.5) ) {
446 subTets.push_back(11);
451 subTets.push_back(-1);
458 template<
class Scalar,
class ArrayScalar>
465 Teuchos::Array< Teuchos::Array<int> > pt_tets;
467 for (
int pt = 0; pt < numPoints; ++pt)
468 pt_tets.push_back(getLocalSubTetrahedra(inPts(pt,0), inPts(pt,1), inPts(pt,2)));
470 Teuchos::Array<int> flat;
473 for (
int pt = 0; pt < numPoints; ++pt)
474 for (
int i = 0; i < pt_tets[pt].size(); ++i)
475 flat.push_back(pt_tets[pt][i]);
477 for (
int i = 0; i < flat.size(); ++i)
480 for (
int pt = 0; pt < numPoints; ++pt)
481 for (
int i = 0; i < pt_tets[pt].size(); ++i)
482 w(pt, pt_tets[pt][i]) = 1.0/count(pt_tets[pt][i]);
489 template<
class Scalar,
class ArrayScalar>
496 for (
int pt = 0; pt < numPoints; ++pt)
498 lambda(pt,0) = 1. - inPts(pt,0) - inPts(pt,1) - inPts(pt,2);
499 lambda(pt,1) = inPts(pt,0);
500 lambda(pt,2) = inPts(pt,1);
501 lambda(pt,3) = inPts(pt,2);
507 template<
class Scalar,
class ArrayScalar>
511 Scalar det = a(0,3) * a(1,2) * a(2,1) * a(3,0)
512 - a(0,2) * a(1,3) * a(2,1) * a(3,0)
513 - a(0,3) * a(1,1) * a(2,2) * a(3,0)
514 + a(0,1) * a(1,3) * a(2,2) * a(3,0)
515 + a(0,2) * a(1,1) * a(2,3) * a(3,0)
516 - a(0,1) * a(1,2) * a(2,3) * a(3,0)
517 - a(0,3) * a(1,2) * a(2,0) * a(3,1)
518 + a(0,2) * a(1,3) * a(2,0) * a(3,1)
519 + a(0,3) * a(1,0) * a(2,2) * a(3,1)
520 - a(0,0) * a(1,3) * a(2,2) * a(3,1)
521 - a(0,2) * a(1,0) * a(2,3) * a(3,1)
522 + a(0,0) * a(1,2) * a(2,3) * a(3,1)
523 + a(0,3) * a(1,1) * a(2,0) * a(3,2)
524 - a(0,1) * a(1,3) * a(2,0) * a(3,2)
525 - a(0,3) * a(1,0) * a(2,1) * a(3,2)
526 + a(0,0) * a(1,3) * a(2,1) * a(3,2)
527 + a(0,1) * a(1,0) * a(2,3) * a(3,2)
528 - a(0,0) * a(1,1) * a(2,3) * a(3,2)
529 - a(0,2) * a(1,1) * a(2,0) * a(3,3)
530 + a(0,1) * a(1,2) * a(2,0) * a(3,3)
531 + a(0,2) * a(1,0) * a(2,1) * a(3,3)
532 - a(0,0) * a(1,2) * a(2,1) * a(3,3)
533 - a(0,1) * a(1,0) * a(2,2) * a(3,3)
534 + a(0,0) * a(1,1) * a(2,2) * a(3,3);
539 template<
class Scalar,
class ArrayScalar>
544 Scalar xj = det44(a);
546 ai(0,0) = (1/xj) * (-a(1,3) * a(2,2) * a(3,1) + a(1,2) * a(2,3) * a(3,1) + a(1,3) * a(2,1) * a(3,2) - a(1,1) * a(2,3) * a(3,2) - a(1,2) * a(2,1) * a(3,3) + a(1,1) * a(2,2) * a(3,3));
547 ai(0,1) = (1/xj) * ( a(0,3) * a(2,2) * a(3,1) - a(0,2) * a(2,3) * a(3,1) - a(0,3) * a(2,1) * a(3,2) + a(0,1) * a(2,3) * a(3,2) + a(0,2) * a(2,1) * a(3,3) - a(0,1) * a(2,2) * a(3,3));
548 ai(0,2) = (1/xj) * (-a(0,3) * a(1,2) * a(3,1) + a(0,2) * a(1,3) * a(3,1) + a(0,3) * a(1,1) * a(3,2) - a(0,1) * a(1,3) * a(3,2) - a(0,2) * a(1,1) * a(3,3) + a(0,1) * a(1,2) * a(3,3));
549 ai(0,3) = (1/xj) * ( a(0,3) * a(1,2) * a(2,1) - a(0,2) * a(1,3) * a(2,1) - a(0,3) * a(1,1) * a(2,2) + a(0,1) * a(1,3) * a(2,2) + a(0,2) * a(1,1) * a(2,3) - a(0,1) * a(1,2) * a(2,3));
551 ai(1,0) = (1/xj) * ( a(1,3) * a(2,2) * a(3,0) - a(1,2) * a(2,3) * a(3,0) - a(1,3) * a(2,0) * a(3,2) + a(1,0) * a(2,3) * a(3,2) + a(1,2) * a(2,0) * a(3,3) - a(1,0) * a(2,2) * a(3,3));
552 ai(1,1) = (1/xj) * (-a(0,3) * a(2,2) * a(3,0) + a(0,2) * a(2,3) * a(3,0) + a(0,3) * a(2,0) * a(3,2) - a(0,0) * a(2,3) * a(3,2) - a(0,2) * a(2,0) * a(3,3) + a(0,0) * a(2,2) * a(3,3));
553 ai(1,2) = (1/xj) * ( a(0,3) * a(1,2) * a(3,0) - a(0,2) * a(1,3) * a(3,0) - a(0,3) * a(1,0) * a(3,2) + a(0,0) * a(1,3) * a(3,2) + a(0,2) * a(1,0) * a(3,3) - a(0,0) * a(1,2) * a(3,3));
554 ai(1,3) = (1/xj) * (-a(0,3) * a(1,2) * a(2,0) + a(0,2) * a(1,3) * a(2,0) + a(0,3) * a(1,0) * a(2,2) - a(0,0) * a(1,3) * a(2,2) - a(0,2) * a(1,0) * a(2,3) + a(0,0) * a(1,2) * a(2,3));
556 ai(2,0) = (1/xj) * (-a(1,3) * a(2,1) * a(3,0) + a(1,1) * a(2,3) * a(3,0) + a(1,3) * a(2,0) * a(3,1) - a(1,0) * a(2,3) * a(3,1) - a(1,1) * a(2,0) * a(3,3) + a(1,0) * a(2,1) * a(3,3));
557 ai(2,1) = (1/xj) * ( a(0,3) * a(2,1) * a(3,0) - a(0,1) * a(2,3) * a(3,0) - a(0,3) * a(2,0) * a(3,1) + a(0,0) * a(2,3) * a(3,1) + a(0,1) * a(2,0) * a(3,3) - a(0,0) * a(2,1) * a(3,3));
558 ai(2,2) = (1/xj) * (-a(0,3) * a(1,1) * a(3,0) + a(0,1) * a(1,3) * a(3,0) + a(0,3) * a(1,0) * a(3,1) - a(0,0) * a(1,3) * a(3,1) - a(0,1) * a(1,0) * a(3,3) + a(0,0) * a(1,1) * a(3,3));
559 ai(2,3) = (1/xj) * ( a(0,3) * a(1,1) * a(2,0) - a(0,1) * a(1,3) * a(2,0) - a(0,3) * a(1,0) * a(2,1) + a(0,0) * a(1,3) * a(2,1) + a(0,1) * a(1,0) * a(2,3) - a(0,0) * a(1,1) * a(2,3));
561 ai(3,0) = (1/xj) * ( a(1,2) * a(2,1) * a(3,0) - a(1,1) * a(2,2) * a(3,0) - a(1,2) * a(2,0) * a(3,1) + a(1,0) * a(2,2) * a(3,1) + a(1,1) * a(2,0) * a(3,2) - a(1,0) * a(2,1) * a(3,2));
562 ai(3,1) = (1/xj) * (-a(0,2) * a(2,1) * a(3,0) + a(0,1) * a(2,2) * a(3,0) + a(0,2) * a(2,0) * a(3,1) - a(0,0) * a(2,2) * a(3,1) - a(0,1) * a(2,0) * a(3,2) + a(0,0) * a(2,1) * a(3,2));
563 ai(3,2) = (1/xj) * ( a(0,2) * a(1,1) * a(3,0) - a(0,1) * a(1,2) * a(3,0) - a(0,2) * a(1,0) * a(3,1) + a(0,0) * a(1,2) * a(3,1) + a(0,1) * a(1,0) * a(3,2) - a(0,0) * a(1,1) * a(3,2));
564 ai(3,3) = (1/xj) * (-a(0,2) * a(1,1) * a(2,0) + a(0,1) * a(1,2) * a(2,0) + a(0,2) * a(1,0) * a(2,1) - a(0,0) * a(1,2) * a(2,1) - a(0,1) * a(1,0) * a(2,2) + a(0,0) * a(1,1) * a(2,2));
569 template<
class Scalar,
class ArrayScalar>
668 template<
class Scalar,
class ArrayScalar>
674 xJ(0) = 1./48.; xJ(1) = 1./48.; xJ(2) = 1./48.; xJ(3) = 1./48.;
675 xJ(4) = 1./96.; xJ(5) = 1./96.; xJ(6) = 1./96.; xJ(7) = 1./96.;
676 xJ(8) = 1./96.; xJ(9) = 1./96.; xJ(10) = 1./96.; xJ(11) = 1./96.;
int dimension(const int whichDim) const
Returns the specified dimension.
Intrepid::FieldContainer< Scalar > inverse44(const Intrepid::FieldContainer< Scalar >) const
Returns FieldContainer of Barycentric Coordinates for the input points.
void initializeTags()
Initializes tagToOrdinal_ and ordinalToTag_ lookup arrays.
Intrepid::FieldContainer< Scalar > getSubTetDetF() const
Returns FieldContainer of local sub-tet detF.
void getValues(ArrayScalar &outputValues, const ArrayScalar &inputPoints, const EOperator operatorType) const
FEM basis evaluation on a reference Tetrahedron cell.
Basis_HGRAD_TET_COMP12_FEM()
Constructor.
void initialize(const Scalar value=0)
Initializes a field container by assigning value to all its elements.
Intrepid::FieldContainer< Scalar > getSubTetGrads() const
Returns FieldContainer of local sub-tet gradients.
Teuchos::Array< int > getLocalSubTetrahedra(Scalar, Scalar, Scalar) const
Returns array of local sub-tetrahdera that the given point resides in.
Scalar det44(const Intrepid::FieldContainer< Scalar >) const
Returns FieldContainer of Barycentric Coordinates for the input points.
Intrepid::FieldContainer< Scalar > getWeights(const ArrayScalar &) const
Returns FieldContainer of local integration weights.
void getDofCoords(ArrayScalar &DofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on a reference Tetrahedron.
Intrepid::FieldContainer< Scalar > getBarycentricCoords(const ArrayScalar &) const
Returns FieldContainer of Barycentric Coordinates for the input points.