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.