51 template<
class Scalar, 
class ArrayScalar>
 
   54     this -> basisCardinality_  = 6;
 
   55     this -> basisDegree_       = 1;
 
   56     this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Tetrahedron<4> >() );
 
   57     this -> basisType_         = BASIS_FEM_DEFAULT;
 
   58     this -> basisCoordinates_  = COORDINATES_CARTESIAN;
 
   59     this -> basisTagsAreSet_   = 
false;
 
   62 template<
class Scalar, 
class ArrayScalar>
 
   81   Intrepid::setOrdinalTagData(
this -> tagToOrdinal_,
 
   82                               this -> ordinalToTag_,
 
   84                               this -> basisCardinality_,
 
   93 template<
class Scalar, 
class ArrayScalar>
 
   95                                                             const ArrayScalar &  inputPoints,
 
   96                                                             const EOperator      operatorType)
 const {
 
   99 #ifdef HAVE_INTREPID_DEBUG 
  100   Intrepid::getValues_HCURL_Args<Scalar, ArrayScalar>(outputValues,
 
  103                                                       this -> getBaseCellTopology(),
 
  104                                                       this -> getCardinality() );
 
  108   int dim0 = inputPoints.dimension(0);
 
  115   switch (operatorType) {
 
  117       for (
int i0 = 0; i0 < dim0; i0++) {
 
  118         x = inputPoints(i0, 0);
 
  119         y = inputPoints(i0, 1);
 
  120         z = inputPoints(i0, 2);
 
  123         outputValues(0, i0, 0) = 1.0 - y - z;
 
  124         outputValues(0, i0, 1) = x;
 
  125         outputValues(0, i0, 2) = x;
 
  127         outputValues(1, i0, 0) =-y;
 
  128         outputValues(1, i0, 1) = x;
 
  129         outputValues(1, i0, 2) = 0.0;
 
  131         outputValues(2, i0, 0) = -y;
 
  132         outputValues(2, i0, 1) = -1.0 + x + z;
 
  133         outputValues(2, i0, 2) = -y;
 
  135         outputValues(3, i0, 0) = z;
 
  136         outputValues(3, i0, 1) = z;
 
  137         outputValues(3, i0, 2) = 1.0 - x - y;
 
  139         outputValues(4, i0, 0) =-z;
 
  140         outputValues(4, i0, 1) = 0.0;
 
  141         outputValues(4, i0, 2) = x;
 
  143         outputValues(5, i0, 0) = 0.0;
 
  144         outputValues(5, i0, 1) =-z;
 
  145         outputValues(5, i0, 2) = y;
 
  150       for (
int i0 = 0; i0 < dim0; i0++) {
 
  151         x = inputPoints(i0, 0);
 
  152         y = inputPoints(i0, 1);
 
  153         z = inputPoints(i0, 2);
 
  156         outputValues(0, i0, 0) = 0.0;
 
  157         outputValues(0, i0, 1) =-2.0;
 
  158         outputValues(0, i0, 2) = 2.0;
 
  160         outputValues(1, i0, 0) = 0.0;
 
  161         outputValues(1, i0, 1) = 0.0;
 
  162         outputValues(1, i0, 2) = 2.0;
 
  164         outputValues(2, i0, 0) =-2.0;
 
  165         outputValues(2, i0, 1) = 0.0; 
 
  166         outputValues(2, i0, 2) = 2.0;
 
  168         outputValues(3, i0, 0) =-2.0;
 
  169         outputValues(3, i0, 1) = 2.0;
 
  170         outputValues(3, i0, 2) = 0.0;
 
  172         outputValues(4, i0, 0) = 0.0;
 
  173         outputValues(4, i0, 1) =-2.0;
 
  174         outputValues(4, i0, 2) = 0.0;
 
  176         outputValues(5, i0, 0) = 2.0;
 
  177         outputValues(5, i0, 1) = 0.0;
 
  178         outputValues(5, i0, 2) = 0.0;
 
  183        TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
 
  184                           ">>> ERROR (Basis_HCURL_TET_I1_FEM): DIV is invalid operator for HCURL Basis Functions");
 
  188        TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_GRAD), std::invalid_argument,
 
  189                           ">>> ERROR (Basis_HCURL_TET_I1_FEM): GRAD is invalid operator for HCURL Basis Functions");
 
  202       TEUCHOS_TEST_FOR_EXCEPTION( ( (operatorType == OPERATOR_D1)    ||
 
  203                             (operatorType == OPERATOR_D2)    ||
 
  204                             (operatorType == OPERATOR_D3)    ||
 
  205                             (operatorType == OPERATOR_D4)    ||
 
  206                             (operatorType == OPERATOR_D5)    ||
 
  207                             (operatorType == OPERATOR_D6)    ||
 
  208                             (operatorType == OPERATOR_D7)    ||
 
  209                             (operatorType == OPERATOR_D8)    ||
 
  210                             (operatorType == OPERATOR_D9)    ||
 
  211                             (operatorType == OPERATOR_D10) ),
 
  212                           std::invalid_argument,
 
  213                           ">>> ERROR (Basis_HCURL_TET_I1_FEM): Invalid operator type");
 
  217       TEUCHOS_TEST_FOR_EXCEPTION( ( (operatorType != OPERATOR_VALUE) &&
 
  218                             (operatorType != OPERATOR_GRAD)  &&
 
  219                             (operatorType != OPERATOR_CURL)  &&
 
  220                             (operatorType != OPERATOR_DIV)   &&
 
  221                             (operatorType != OPERATOR_D1)    &&
 
  222                             (operatorType != OPERATOR_D2)    &&
 
  223                             (operatorType != OPERATOR_D3)    &&
 
  224                             (operatorType != OPERATOR_D4)    &&
 
  225                             (operatorType != OPERATOR_D5)    &&
 
  226                             (operatorType != OPERATOR_D6)    &&
 
  227                             (operatorType != OPERATOR_D7)    &&
 
  228                             (operatorType != OPERATOR_D8)    &&
 
  229                             (operatorType != OPERATOR_D9)    &&
 
  230                             (operatorType != OPERATOR_D10) ),
 
  231                           std::invalid_argument,
 
  232                           ">>> ERROR (Basis_HCURL_TET_I1_FEM): Invalid operator type");
 
  238 template<
class Scalar, 
class ArrayScalar>
 
  240                                                             const ArrayScalar &    inputPoints,
 
  241                                                             const ArrayScalar &    cellVertices,
 
  242                                                             const EOperator        operatorType)
 const {
 
  243   TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::logic_error,
 
  244                       ">>> ERROR (Basis_HCURL_TET_I1_FEM): FEM Basis calling an FVD member function");
 
  247 template<
class Scalar, 
class ArrayScalar>
 
  249 #ifdef HAVE_INTREPID_DEBUG 
  251   TEUCHOS_TEST_FOR_EXCEPTION( !(DofCoords.rank() == 2), std::invalid_argument,
 
  252                       ">>> ERROR: (Intrepid::Basis_HCURL_TET_I1_FEM::getDofCoords) rank = 2 required for DofCoords array");
 
  254   TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(0) == 
this -> basisCardinality_ ), std::invalid_argument,
 
  255                       ">>> ERROR: (Intrepid::Basis_HCURL_TET_I1_FEM::getDofCoords) mismatch in number of DoF and 0th dimension of DofCoords array");
 
  257   TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(1) == (int)(
this -> basisCellTopology_.getDimension()) ), std::invalid_argument,
 
  258                       ">>> ERROR: (Intrepid::Basis_HCURL_TET_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in DofCoords array");
 
  261   DofCoords(0,0) = 0.5;   DofCoords(0,1) = 0.0; DofCoords(0,2) = 0.0;
 
  262   DofCoords(1,0) = 0.5;   DofCoords(1,1) = 0.5; DofCoords(1,2) = 0.0;
 
  263   DofCoords(2,0) = 0.0;   DofCoords(2,1) = 0.5; DofCoords(2,2) = 0.0;
 
  264   DofCoords(3,0) = 0.0;   DofCoords(3,1) = 0.0; DofCoords(3,2) = 0.5;
 
  265   DofCoords(4,0) = 0.5;   DofCoords(4,1) = 0.0; DofCoords(4,2) = 0.5;
 
  266   DofCoords(5,0) = 0.0;   DofCoords(5,1) = 0.5; DofCoords(5,2) = 0.5;
 
void getDofCoords(ArrayScalar &DofCoords) const 
Returns spatial locations (coordinates) of degrees of freedom on a reference Triangle. 
void getValues(ArrayScalar &outputValues, const ArrayScalar &inputPoints, const EOperator operatorType) const 
Evaluation of a FEM basis on a reference Tetrahedron cell. 
void initializeTags()
Initializes tagToOrdinal_ and ordinalToTag_ lookup arrays. 
Basis_HCURL_TET_I1_FEM()
Constructor.