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.