1 #ifndef INTREPID_HGRAD_HEX_I2_FEMDEF_HPP
2 #define INTREPID_HGRAD_HEX_I2_FEMDEF_HPP
54 template<
class Scalar,
class ArrayScalar>
57 this -> basisCardinality_ = 20;
58 this -> basisDegree_ = 2;
59 this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Hexahedron<8> >() );
60 this -> basisType_ = BASIS_FEM_DEFAULT;
61 this -> basisCoordinates_ = COORDINATES_CARTESIAN;
62 this -> basisTagsAreSet_ =
false;
67 template<
class Scalar,
class ArrayScalar>
77 int tags[] = { 0, 0, 0, 1,
100 Intrepid::setOrdinalTagData(
this -> tagToOrdinal_,
101 this -> ordinalToTag_,
103 this -> basisCardinality_,
112 template<
class Scalar,
class ArrayScalar>
114 const ArrayScalar & inputPoints,
115 const EOperator operatorType)
const {
118 #ifdef HAVE_INTREPID_DEBUG
119 Intrepid::getValues_HGRAD_Args<Scalar, ArrayScalar>(outputValues,
122 this -> getBaseCellTopology(),
123 this -> getCardinality() );
127 int dim0 = inputPoints.dimension(0);
134 switch (operatorType) {
137 for (
int i0 = 0; i0 < dim0; i0++) {
138 x = inputPoints(i0, 0);
139 y = inputPoints(i0, 1);
140 z = inputPoints(i0, 2);
143 outputValues( 0, i0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 - z)*(-x - y - z - 2.0);
144 outputValues( 1, i0) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 - z)*( x - y - z - 2.0);
145 outputValues( 2, i0) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 - z)*( x + y - z - 2.0);
146 outputValues( 3, i0) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 - z)*(-x + y - z - 2.0);
147 outputValues( 4, i0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 + z)*(-x - y + z - 2.0);
148 outputValues( 5, i0) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 + z)*( x - y + z - 2.0);
149 outputValues( 6, i0) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 + z)*( x + y + z - 2.0);
150 outputValues( 7, i0) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 + z)*(-x + y + z - 2.0);
152 outputValues( 8, i0) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 - z);
153 outputValues( 9, i0) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 - z);
154 outputValues(10, i0) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 - z);
155 outputValues(11, i0) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 - z);
157 outputValues(12, i0) = 0.25*(1.0 - x)*(1.0 - y)*(1.0 - z*z);
158 outputValues(13, i0) = 0.25*(1.0 + x)*(1.0 - y)*(1.0 - z*z);
159 outputValues(14, i0) = 0.25*(1.0 + x)*(1.0 + y)*(1.0 - z*z);
160 outputValues(15, i0) = 0.25*(1.0 - x)*(1.0 + y)*(1.0 - z*z);
162 outputValues(16, i0) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 + z);
163 outputValues(17, i0) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 + z);
164 outputValues(18, i0) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 + z);
165 outputValues(19, i0) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 + z);
171 for (
int i0 = 0; i0 < dim0; i0++) {
172 x = inputPoints(i0,0);
173 y = inputPoints(i0,1);
174 z = inputPoints(i0,2);
177 outputValues(0, i0, 0) = -0.125*(1.0-y)*(1.0-z)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
178 outputValues(0, i0, 1) = -0.125*(1.0-x)*(1.0-z)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
179 outputValues(0, i0, 2) = -0.125*(1.0-x)*(1.0-y)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
181 outputValues(1, i0, 0) = 0.125*(1.0-y)*(1.0-z)*( x-y-z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0-z);
182 outputValues(1, i0, 1) = -0.125*(1.0+x)*(1.0-z)*( x-y-z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0-z);
183 outputValues(1, i0, 2) = -0.125*(1.0+x)*(1.0-y)*( x-y-z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0-z);
185 outputValues(2, i0, 0) = 0.125*(1.0+y)*(1.0-z)*( x+y-z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0-z);
186 outputValues(2, i0, 1) = 0.125*(1.0+x)*(1.0-z)*( x+y-z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0-z);
187 outputValues(2, i0, 2) = -0.125*(1.0+x)*(1.0+y)*( x+y-z-2.0) - 0.125*(1.0+x)*(1.0+y)*(1.0-z);
189 outputValues(3, i0, 0) = -0.125*(1.0+y)*(1.0-z)*(-x+y-z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0-z);
190 outputValues(3, i0, 1) = 0.125*(1.0-x)*(1.0-z)*(-x+y-z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0-z);
191 outputValues(3, i0, 2) = -0.125*(1.0-x)*(1.0+y)*(-x+y-z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0-z);
193 outputValues(4, i0, 0) = -0.125*(1.0-y)*(1.0+z)*(-x-y+z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0+z);
194 outputValues(4, i0, 1) = -0.125*(1.0-x)*(1.0+z)*(-x-y+z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0+z);
195 outputValues(4, i0, 2) = 0.125*(1.0-x)*(1.0-y)*(-x-y+z-2.0) + 0.125*(1.0-x)*(1.0-y)*(1.0+z);
197 outputValues(5, i0, 0) = 0.125*(1.0-y)*(1.0+z)*( x-y+z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0+z);
198 outputValues(5, i0, 1) = -0.125*(1.0+x)*(1.0+z)*( x-y+z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0+z);
199 outputValues(5, i0, 2) = 0.125*(1.0+x)*(1.0-y)*( x-y+z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0+z);
201 outputValues(6, i0, 0) = 0.125*(1.0+y)*(1.0+z)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
202 outputValues(6, i0, 1) = 0.125*(1.0+x)*(1.0+z)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
203 outputValues(6, i0, 2) = 0.125*(1.0+x)*(1.0+y)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
205 outputValues(7, i0, 0) = -0.125*(1.0+y)*(1.0+z)*(-x+y+z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0+z);
206 outputValues(7, i0, 1) = 0.125*(1.0-x)*(1.0+z)*(-x+y+z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0+z);
207 outputValues(7, i0, 2) = 0.125*(1.0-x)*(1.0+y)*(-x+y+z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0+z);
209 outputValues(8, i0, 0) = -0.5*x*(1.0-y)*(1.0-z);
210 outputValues(8, i0, 1) = -0.25*(1.0-x*x)*(1.0-z);
211 outputValues(8, i0, 2) = -0.25*(1.0-x*x)*(1.0-y);
213 outputValues(9, i0, 0) = 0.25*(1.0-y*y)*(1.0-z);
214 outputValues(9, i0, 1) = -0.5*y*(1.0+x)*(1.0-z);
215 outputValues(9, i0, 2) = -0.25*(1.0+x)*(1.0-y*y);
217 outputValues(10, i0, 0) = -0.5*x*(1.0+y)*(1.0-z);
218 outputValues(10, i0, 1) = 0.25*(1.0-x*x)*(1.0-z);
219 outputValues(10, i0, 2) = -0.25*(1.0-x*x)*(1.0+y);
221 outputValues(11, i0, 0) = -0.25*(1.0-y*y)*(1.0-z);
222 outputValues(11, i0, 1) = -0.5*y*(1.0-x)*(1.0-z);
223 outputValues(11, i0, 2) = -0.25*(1.0-x)*(1.0-y*y);
225 outputValues(12, i0, 0) = -0.25*(1.0-y)*(1.0-z*z);
226 outputValues(12, i0, 1) = -0.25*(1.0-x)*(1.0-z*z);
227 outputValues(12, i0, 2) = -0.5*z*(1.0-x)*(1.0-y);
229 outputValues(13, i0, 0) = 0.25*(1.0-y)*(1.0-z*z);
230 outputValues(13, i0, 1) = -0.25*(1.0+x)*(1.0-z*z);
231 outputValues(13, i0, 2) = -0.5*z*(1.0+x)*(1.0-y);
233 outputValues(14, i0, 0) = 0.25*(1.0+y)*(1.0-z*z);
234 outputValues(14, i0, 1) = 0.25*(1.0+x)*(1.0-z*z);
235 outputValues(14, i0, 2) = -0.5*z*(1.0+x)*(1.0+y);
237 outputValues(15, i0, 0) = -0.25*(1.0+y)*(1.0-z*z);
238 outputValues(15, i0, 1) = 0.25*(1.0-x)*(1.0-z*z);
239 outputValues(15, i0, 2) = -0.5*z*(1.0-x)*(1.0+y);
241 outputValues(16, i0, 0) = -0.5*x*(1.0-y)*(1.0+z);
242 outputValues(16, i0, 1) = -0.25*(1.0-x*x)*(1.0+z);
243 outputValues(16, i0, 2) = 0.25*(1.0-x*x)*(1.0-y);
245 outputValues(17, i0, 0) = 0.25*(1.0-y*y)*(1.0+z);
246 outputValues(17, i0, 1) = -0.5*y*(1.0+x)*(1.0+z);
247 outputValues(17, i0, 2) = 0.25*(1.0+x)*(1.0-y*y);
249 outputValues(18, i0, 0) = -0.5*x*(1.0+y)*(1.0+z);
250 outputValues(18, i0, 1) = 0.25*(1.0-x*x)*(1.0+z);
251 outputValues(18, i0, 2) = 0.25*(1.0-x*x)*(1.0+y);
253 outputValues(19, i0, 0) = -0.25*(1.0-y*y)*(1.0+z);
254 outputValues(19, i0, 1) = -0.5*y*(1.0-x)*(1.0+z);
255 outputValues(19, i0, 2) = 0.25*(1.0-x)*(1.0-y*y);
261 TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_CURL), std::invalid_argument,
262 ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
266 TEUCHOS_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
267 ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
271 for (
int i0 = 0; i0 < dim0; i0++) {
272 x = inputPoints(i0,0);
273 y = inputPoints(i0,1);
274 z = inputPoints(i0,2);
277 outputValues(0, i0, 0) = 0.25*(1.0 - y)*(1.0 - z);
278 outputValues(0, i0, 1) = 0.125*(1.0 - z)*(-2.0*x - 2.0*y - z);
279 outputValues(0, i0, 2) = 0.125*(1.0 - y)*(-2.0*x - y - 2.0*z);
280 outputValues(0, i0, 3) = 0.25*(1.0 - x)*(1.0 - z);
281 outputValues(0, i0, 4) = 0.125*(1.0 - x)*(-x - 2.0*y - 2.0*z);
282 outputValues(0, i0, 5) = 0.25*(1.0 - x)*(1.0 - y);
284 outputValues(1, i0, 0) = 0.25*(1.0 - y)*(1.0 - z);
285 outputValues(1, i0, 1) = -0.125*(1.0 - z)*(2.0*x - 2.0*y - z);
286 outputValues(1, i0, 2) = -0.125*(1.0 - y)*(2.0*x - y - 2.0*z);
287 outputValues(1, i0, 3) = 0.25*(1.0 + x)*(1.0 - z);
288 outputValues(1, i0, 4) = 0.125*(1.0 + x)*(x - 2.0*y - 2.0*z);
289 outputValues(1, i0, 5) = 0.25*(1.0 + x)*(1.0 - y);
291 outputValues(2, i0, 0) = 0.25*(1.0 + y)*(1.0 - z);
292 outputValues(2, i0, 1) = 0.125*(1.0 - z)*(2.0*x + 2.0*y - z);
293 outputValues(2, i0, 2) = -0.125*(1.0 + y)*(2.0*x + y - 2.0*z);
294 outputValues(2, i0, 3) = 0.25*(1.0 + x)*(1.0 - z);
295 outputValues(2, i0, 4) = -0.125*(1.0 + x)*(x + 2.0*y - 2.0*z);
296 outputValues(2, i0, 5) = 0.25*(1.0 + x)*(1.0 + y);
298 outputValues(3, i0, 0) = 0.25*(1.0 + y)*(1.0 - z);
299 outputValues(3, i0, 1) = -0.125*(1.0 - z)*(-2.0*x + 2.0*y - z);
300 outputValues(3, i0, 2) = 0.125*(1.0 + y)*(-2.0*x + y - 2.0*z);
301 outputValues(3, i0, 3) = 0.25*(1.0 - x)*(1.0 - z);
302 outputValues(3, i0, 4) = -0.125*(1.0 - x)*(-x + 2.0*y - 2.0*z);
303 outputValues(3, i0, 5) = 0.25*(1.0 - x)*(1.0 + y);
305 outputValues(4, i0, 0) = 0.25*(1.0 - y)*(1.0 + z);
306 outputValues(4, i0, 1) = 0.125*(1.0 + z)*(-2.0*x - 2.0*y + z);
307 outputValues(4, i0, 2) = -0.125*(1.0 - y)*(-2.0*x - y + 2.0*z);
308 outputValues(4, i0, 3) = 0.25*(1.0 - x)*(1.0 + z);
309 outputValues(4, i0, 4) = -0.125*(1.0 - x)*(-x - 2.0*y + 2.0*z);
310 outputValues(4, i0, 5) = 0.25*(1.0 - x)*(1.0 - y);
312 outputValues(5, i0, 0) = 0.25*(1.0 - y)*(1.0 + z);
313 outputValues(5, i0, 1) = -0.125*(1.0 + z)*(2.0*x - 2.0*y + z);
314 outputValues(5, i0, 2) = 0.125*(1.0 - y)*(2.0*x - y + 2.0*z);
315 outputValues(5, i0, 3) = 0.25*(1.0 + x)*(1.0 + z);
316 outputValues(5, i0, 4) = -0.125*(1.0 + x)*(x - 2.0*y + 2.0*z);
317 outputValues(5, i0, 5) = 0.25*(1.0 + x)*(1.0 - y);
319 outputValues(6, i0, 0) = 0.25*(1.0 + y)*(1.0 + z);
320 outputValues(6, i0, 1) = 0.125*(1.0 + z)*(2.0*x + 2.0*y + z);
321 outputValues(6, i0, 2) = 0.125*(1.0 + y)*(2.0*x + y + 2.0*z);
322 outputValues(6, i0, 3) = 0.25*(1.0 + x)*(1.0 + z);
323 outputValues(6, i0, 4) = 0.125*(1.0 + x)*(x + 2.0*y + 2.0*z);
324 outputValues(6, i0, 5) = 0.25*(1.0 + x)*(1.0 + y);
326 outputValues(7, i0, 0) = 0.25*(1.0 + y)*(1.0 + z);
327 outputValues(7, i0, 1) = -0.125*(1.0 + z)*(-2.0*x + 2.0*y + z);
328 outputValues(7, i0, 2) = -0.125*(1.0 + y)*(-2.0*x + y + 2.0*z);
329 outputValues(7, i0, 3) = 0.25*(1.0 - x)*(1.0 + z);
330 outputValues(7, i0, 4) = 0.125*(1.0 - x)*(-x + 2.0*y + 2.0*z);
331 outputValues(7, i0, 5) = 0.25*(1.0 - x)*(1.0 + y);
333 outputValues(8, i0, 0) = -0.5*(1.0 - y)*(1.0 - z);
334 outputValues(8, i0, 1) = 0.5*x*(1.0 - z);
335 outputValues(8, i0, 2) = 0.5*x*(1.0 - y);
336 outputValues(8, i0, 3) = 0.0;
337 outputValues(8, i0, 4) = 0.25*(1.0 - x*x);
338 outputValues(8, i0, 5) = 0.0;
340 outputValues(9, i0, 0) = 0.0;
341 outputValues(9, i0, 1) = -0.5*y*(1.0 - z);
342 outputValues(9, i0, 2) = -0.25*(1.0 - y*y);
343 outputValues(9, i0, 3) = -0.5*(1.0 + x)*(1.0 - z);
344 outputValues(9, i0, 4) = 0.5*y*(1.0 + x);
345 outputValues(9, i0, 5) = 0.0;
347 outputValues(10, i0, 0) = -0.5*(1.0 + y)*(1.0 - z);
348 outputValues(10, i0, 1) = -0.5*x*(1.0 - z);
349 outputValues(10, i0, 2) = 0.5*x*(1.0 + y);
350 outputValues(10, i0, 3) = 0.0;
351 outputValues(10, i0, 4) = -0.25*(1.0 - x*x);
352 outputValues(10, i0, 5) = 0.0;
354 outputValues(11, i0, 0) = 0.0;
355 outputValues(11, i0, 1) = 0.5*y*(1.0 - z);
356 outputValues(11, i0, 2) = 0.25*(1.0 - y*y);
357 outputValues(11, i0, 3) = -0.5*(1.0 - x)*(1.0 - z);
358 outputValues(11, i0, 4) = 0.5*y*(1.0 - x);
359 outputValues(11, i0, 5) = 0.0;
361 outputValues(12, i0, 0) = 0.0;
362 outputValues(12, i0, 1) = 0.25*(1.0 - z*z);
363 outputValues(12, i0, 2) = 0.5*z*(1.0 - y);
364 outputValues(12, i0, 3) = 0.0;
365 outputValues(12, i0, 4) = 0.5*z*(1.0 - x);
366 outputValues(12, i0, 5) = -0.5*(1.0 - x)*(1.0 - y);
368 outputValues(13, i0, 0) = 0.0;
369 outputValues(13, i0, 1) = -0.25*(1.0 - z*z);
370 outputValues(13, i0, 2) = -0.5*z*(1.0 - y);
371 outputValues(13, i0, 3) = 0.0;
372 outputValues(13, i0, 4) = 0.5*z*(1.0 + x);
373 outputValues(13, i0, 5) = -0.5*(1.0 + x)*(1.0 - y);
375 outputValues(14, i0, 0) = 0.0;
376 outputValues(14, i0, 1) = 0.25*(1.0 - z*z);
377 outputValues(14, i0, 2) = -0.5*z*(1.0 + y);
378 outputValues(14, i0, 3) = 0.0;
379 outputValues(14, i0, 4) = -0.5*z*(1.0 + x);
380 outputValues(14, i0, 5) = -0.5*(1.0 + x)*(1.0 + y);
382 outputValues(15, i0, 0) = 0.0;
383 outputValues(15, i0, 1) = -0.25*(1.0 - z*z);
384 outputValues(15, i0, 2) = 0.5*z*(1.0 + y);
385 outputValues(15, i0, 3) = 0.0;
386 outputValues(15, i0, 4) = -0.5*z*(1.0 - x);
387 outputValues(14, i0, 5) = -0.5*(1.0 - x)*(1.0 + y);
389 outputValues(16, i0, 0) = -0.5*(1.0 - y)*(1.0 + z);
390 outputValues(16, i0, 1) = 0.5*x*(1.0 + z);
391 outputValues(16, i0, 2) = -0.5*x*(1.0 - y);
392 outputValues(16, i0, 3) = 0.0;
393 outputValues(16, i0, 4) = -0.25*(1.0 - x*x);
394 outputValues(16, i0, 5) = 0.0;
396 outputValues(17, i0, 0) = 0.0;
397 outputValues(17, i0, 1) = -0.5*y*(1.0 + z);
398 outputValues(17, i0, 2) = 0.25*(1.0 - y*y);
399 outputValues(17, i0, 3) = -0.5*(1.0 + x)*(1.0 + z);
400 outputValues(17, i0, 4) = -0.5*y*(1.0 + x);
401 outputValues(17, i0, 5) = 0.0;
403 outputValues(18, i0, 0) = -0.5*(1.0 + y)*(1.0 + z);
404 outputValues(18, i0, 1) = -0.5*x*(1.0 + z);
405 outputValues(18, i0, 2) = -0.5*x*(1.0 + y);
406 outputValues(18, i0, 3) = 0.0;
407 outputValues(18, i0, 4) = 0.25*(1.0 - x*x);
408 outputValues(18, i0, 5) = 0.0;
410 outputValues(19, i0, 0) = 0.0;
411 outputValues(19, i0, 1) = 0.5*y*(1.0 + z);
412 outputValues(19, i0, 2) = -0.25*(1.0 - y*y);
413 outputValues(19, i0, 3) = -0.5*(1.0 - x)*(1.0 + z);
414 outputValues(19, i0, 4) = -0.5*y*(1.0 - x);
415 outputValues(19, i0, 5) = 0.0;
421 for (
int i0 = 0; i0 < dim0; i0++) {
422 x = inputPoints(i0,0);
423 y = inputPoints(i0,1);
424 z = inputPoints(i0,2);
426 outputValues(0,i0, 0) = 0.0;
427 outputValues(0,i0, 1) = -0.25*(1.0 - z);
428 outputValues(0,i0, 2) = -0.25*(1.0 - y);
429 outputValues(0,i0, 3) = -0.25*(1.0 - z);
430 outputValues(0,i0, 4) = -0.125*(-2.0*x - 2.0*y - 2.0*z + 1.0);
431 outputValues(0,i0, 5) = -0.25*(1.0 - y);
432 outputValues(0,i0, 6) = 0.0;
433 outputValues(0,i0, 7) = -0.25*(1.0 - x);
434 outputValues(0,i0, 8) = -0.25*(1.0 - x);
435 outputValues(0,i0, 9) = 0.0;
437 outputValues(1,i0, 0) = 0.0;
438 outputValues(1,i0, 1) = -0.25*(1.0 - z);
439 outputValues(1,i0, 2) = -0.25*(1.0 - y);
440 outputValues(1,i0, 3) = 0.25*(1.0 - z);
441 outputValues(1,i0, 4) = 0.125*(2.0*x - 2.0*y - 2.0*z + 1.0);
442 outputValues(1,i0, 5) = 0.25*(1.0 - y);
443 outputValues(1,i0, 6) = 0.0;
444 outputValues(1,i0, 7) = -0.25*(1.0 + x);
445 outputValues(1,i0, 8) = -0.25*(1.0 + x);
446 outputValues(1,i0, 9) = 0.0;
448 outputValues(2,i0, 0) = 0.0;
449 outputValues(2,i0, 1) = 0.25*(1.0 - z);
450 outputValues(2,i0, 2) = -0.25*(1.0 + y);
451 outputValues(2,i0, 3) = 0.25*(1.0 - z);
452 outputValues(2,i0, 4) = -0.125*(2.0*x + 2.0*y - 2.0*z + 1.0);
453 outputValues(2,i0, 5) = 0.25*(1.0 + y);
454 outputValues(2,i0, 6) = 0.0;
455 outputValues(2,i0, 7) = -0.25*(1.0 + x);
456 outputValues(2,i0, 8) = 0.25*(1.0 + x);
457 outputValues(2,i0, 9) = 0.0;
459 outputValues(3,i0, 0) = 0.0;
460 outputValues(3,i0, 1) = 0.25*(1.0 - z);
461 outputValues(3,i0, 2) = -0.25*(1.0 + y);
462 outputValues(3,i0, 3) = -0.25*(1.0 - z);
463 outputValues(3,i0, 4) = 0.125*(-2.0*x + 2.0*y - 2.0*z + 1.0);
464 outputValues(3,i0, 5) = -0.25*(1.0 + y);
465 outputValues(3,i0, 6) = 0.0;
466 outputValues(3,i0, 7) = -0.25*(1.0 - x);
467 outputValues(3,i0, 8) = 0.25*(1.0 - x);
468 outputValues(3,i0, 9) = 0.0;
470 outputValues(4,i0, 0) = 0.0;
471 outputValues(4,i0, 1) = -0.25*(1.0 + z);
472 outputValues(4,i0, 2) = 0.25*(1.0 - y);
473 outputValues(4,i0, 3) = -0.25*(1.0 + z);
474 outputValues(4,i0, 4) = 0.125*(-2.0*x - 2.0*y + 2.0*z + 1.0);
475 outputValues(4,i0, 5) = -0.25*(1.0 - y);
476 outputValues(4,i0, 6) = 0.0;
477 outputValues(4,i0, 7) = 0.25*(1.0 - x);
478 outputValues(4,i0, 8) = -0.25*(1.0 - x);
479 outputValues(4,i0, 9) = 0.0;
481 outputValues(5,i0, 0) = 0.0;
482 outputValues(5,i0, 1) = -0.25*(1.0 + z);
483 outputValues(5,i0, 2) = 0.25*(1.0 - y);
484 outputValues(5,i0, 3) = 0.25*(1.0 + z);
485 outputValues(5,i0, 4) = -0.125*(2.0*x - 2.0*y + 2.0*z + 1.0);
486 outputValues(5,i0, 5) = 0.25*(1.0 - y);
487 outputValues(5,i0, 6) = 0.0;
488 outputValues(5,i0, 7) = 0.25*(1.0 + x);
489 outputValues(5,i0, 8) = -0.25*(1.0 + x);
490 outputValues(5,i0, 9) = 0.0;
492 outputValues(6,i0, 0) = 0.0;
493 outputValues(6,i0, 1) = 0.25*(1.0 + z);
494 outputValues(6,i0, 2) = 0.25*(1.0 + y);
495 outputValues(6,i0, 3) = 0.25*(1.0 + z);
496 outputValues(6,i0, 4) = 0.125*(2.0*x + 2.0*y + 2.0*z + 1.0);
497 outputValues(6,i0, 5) = 0.25*(1.0 + y);
498 outputValues(6,i0, 6) = 0.0;
499 outputValues(6,i0, 7) = 0.25*(1.0 + x);
500 outputValues(6,i0, 8) = 0.25*(1.0 + x);
501 outputValues(6,i0, 9) = 0.0;
503 outputValues(7,i0, 0) = 0.0;
504 outputValues(7,i0, 1) = 0.25*(1.0 + z);
505 outputValues(7,i0, 2) = 0.25*(1.0 + y);
506 outputValues(7,i0, 3) = -0.25*(1.0 + z);
507 outputValues(7,i0, 4) = -0.125*(-2.0*x + 2.0*y + 2.0*z + 1.0);
508 outputValues(7,i0, 5) = -0.25*(1.0 + y);
509 outputValues(7,i0, 6) = 0.0;
510 outputValues(7,i0, 7) = 0.25*(1.0 - x);
511 outputValues(7,i0, 8) = 0.25*(1.0 - x);
512 outputValues(7,i0, 9) = 0.0;
514 outputValues(8,i0, 0) = 0.0;
515 outputValues(8,i0, 1) = 0.5*(1.0 - z);
516 outputValues(8,i0, 2) = 0.5*(1.0 - y);
517 outputValues(8,i0, 3) = 0.0;
518 outputValues(8,i0, 4) = -0.5*x;
519 outputValues(8,i0, 5) = 0.0;
520 outputValues(8,i0, 6) = 0.0;
521 outputValues(8,i0, 7) = 0.0;
522 outputValues(8,i0, 8) = 0.0;
523 outputValues(8,i0, 9) = 0.0;
525 outputValues(9,i0, 0) = 0.0;
526 outputValues(9,i0, 1) = 0.0;
527 outputValues(9,i0, 2) = 0.0;
528 outputValues(9,i0, 3) = -0.5*(1.0 - z);
529 outputValues(9,i0, 4) = 0.5*y;
530 outputValues(9,i0, 5) = 0.0;
531 outputValues(9,i0, 6) = 0.0;
532 outputValues(9,i0, 7) = 0.5*(1.0 + x);
533 outputValues(9,i0, 8) = 0.0;
534 outputValues(9,i0, 9) = 0.0;
536 outputValues(10,i0, 0) = 0.0;
537 outputValues(10,i0, 1) = -0.5*(1.0 - z);
538 outputValues(10,i0, 2) = 0.5*(1.0 + y);
539 outputValues(10,i0, 3) = 0.0;
540 outputValues(10,i0, 4) = 0.5*x;
541 outputValues(10,i0, 5) = 0.0;
542 outputValues(10,i0, 6) = 0.0;
543 outputValues(10,i0, 7) = 0.0;
544 outputValues(10,i0, 8) = 0.0;
545 outputValues(10,i0, 9) = 0.0;
547 outputValues(11,i0, 0) = 0.0;
548 outputValues(11,i0, 1) = 0.0;
549 outputValues(11,i0, 2) = 0.0;
550 outputValues(11,i0, 3) = 0.5*(1.0 - z);
551 outputValues(11,i0, 4) = -0.5*y;
552 outputValues(11,i0, 5) = 0.0;
553 outputValues(11,i0, 6) = 0.0;
554 outputValues(11,i0, 7) = 0.5*(1.0 - x);
555 outputValues(11,i0, 8) = 0.0;
556 outputValues(11,i0, 9) = 0.0;
558 outputValues(12,i0, 0) = 0.0;
559 outputValues(12,i0, 1) = 0.0;
560 outputValues(12,i0, 2) = 0.0;
561 outputValues(12,i0, 3) = 0.0;
562 outputValues(12,i0, 4) = -0.5*z;
563 outputValues(12,i0, 5) = 0.5*(1.0 - y);
564 outputValues(12,i0, 6) = 0.0;
565 outputValues(12,i0, 7) = 0.0;
566 outputValues(12,i0, 8) = 0.5*(1.0 - x);
567 outputValues(12,i0, 9) = 0.0;
569 outputValues(13,i0, 0) = 0.0;
570 outputValues(13,i0, 1) = 0.0;
571 outputValues(13,i0, 2) = 0.0;
572 outputValues(13,i0, 3) = 0.0;
573 outputValues(13,i0, 4) = 0.5*z;
574 outputValues(13,i0, 5) = -0.5*(1.0 - y);
575 outputValues(13,i0, 6) = 0.0;
576 outputValues(13,i0, 7) = 0.0;
577 outputValues(13,i0, 8) = 0.5*(1.0 + x);
578 outputValues(13,i0, 9) = 0.0;
580 outputValues(14,i0, 0) = 0.0;
581 outputValues(14,i0, 1) = 0.0;
582 outputValues(14,i0, 2) = 0.0;
583 outputValues(14,i0, 3) = 0.0;
584 outputValues(14,i0, 4) = -0.5*z;
585 outputValues(14,i0, 5) = -0.5*(1.0 + y);
586 outputValues(14,i0, 6) = 0.0;
587 outputValues(14,i0, 7) = 0.0;
588 outputValues(14,i0, 8) = -0.5*(1.0 + x);
589 outputValues(14,i0, 9) = 0.0;
591 outputValues(15,i0, 0) = 0.0;
592 outputValues(15,i0, 1) = 0.0;
593 outputValues(15,i0, 2) = 0.0;
594 outputValues(15,i0, 3) = 0.0;
595 outputValues(15,i0, 4) = 0.5*z;
596 outputValues(15,i0, 5) = 0.5*(1.0 + y);
597 outputValues(15,i0, 6) = 0.0;
598 outputValues(15,i0, 7) = 0.0;
599 outputValues(15,i0, 8) = -0.5*(1.0 - x);
600 outputValues(15,i0, 9) = 0.0;
602 outputValues(16,i0, 0) = 0.0;
603 outputValues(16,i0, 1) = 0.5*(1.0 + z);
604 outputValues(16,i0, 2) = -0.5*(1.0 - y);
605 outputValues(16,i0, 3) = 0.0;
606 outputValues(16,i0, 4) = 0.5*x;
607 outputValues(16,i0, 5) = 0.0;
608 outputValues(16,i0, 6) = 0.0;
609 outputValues(16,i0, 7) = 0.0;
610 outputValues(16,i0, 8) = 0.0;
611 outputValues(16,i0, 9) = 0.0;
613 outputValues(17,i0, 0) = 0.0;
614 outputValues(17,i0, 1) = 0.0;
615 outputValues(17,i0, 2) = 0.0;
616 outputValues(17,i0, 3) = -0.5*(1.0 + z);
617 outputValues(17,i0, 4) = -0.5*y;
618 outputValues(17,i0, 5) = 0.0;
619 outputValues(17,i0, 6) = 0.0;
620 outputValues(17,i0, 7) = -0.5*(1.0 + x);
621 outputValues(17,i0, 8) = 0.0;
622 outputValues(17,i0, 9) = 0.0;
624 outputValues(18,i0, 0) = 0.0;
625 outputValues(18,i0, 1) = -0.5*(1.0 + z);
626 outputValues(18,i0, 2) = -0.5*(1.0 + y);
627 outputValues(18,i0, 3) = 0.0;
628 outputValues(18,i0, 4) = -0.5*x;
629 outputValues(18,i0, 5) = 0.0;
630 outputValues(18,i0, 6) = 0.0;
631 outputValues(18,i0, 7) = 0.0;
632 outputValues(18,i0, 8) = 0.0;
633 outputValues(18,i0, 9) = 0.0;
635 outputValues(19,i0, 0) = 0.0;
636 outputValues(19,i0, 1) = 0.0;
637 outputValues(19,i0, 2) = 0.0;
638 outputValues(19,i0, 3) = 0.5*(1.0 + z);
639 outputValues(19,i0, 4) = 0.5*y;
640 outputValues(19,i0, 5) = 0.0;
641 outputValues(19,i0, 6) = 0.0;
642 outputValues(19,i0, 7) = -0.5*(1.0 - x);
643 outputValues(19,i0, 8) = 0.0;
644 outputValues(19,i0, 9) = 0.0;
652 int DkCardinality = Intrepid::getDkCardinality(operatorType,
this -> basisCellTopology_.getDimension() );
653 for(
int dofOrd = 0; dofOrd <
this -> basisCardinality_; dofOrd++) {
654 for (
int i0 = 0; i0 < dim0; i0++) {
655 for(
int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
656 outputValues(dofOrd, i0, dkOrd) = 0.0;
661 for (
int i0 = 0; i0 < dim0; i0++) {
662 x = inputPoints(i0,0);
663 y = inputPoints(i0,1);
664 z = inputPoints(i0,2);
666 outputValues( 0, i0, 4) = 0.25;
667 outputValues( 0, i0, 7) = 0.25;
668 outputValues( 0, i0, 8) = 0.25;
670 outputValues( 1, i0, 4) = 0.25;
671 outputValues( 1, i0, 7) = -0.25;
672 outputValues( 1, i0, 8) = -0.25;
674 outputValues( 2, i0, 4) = -0.25;
675 outputValues( 2, i0, 7) = -0.25;
676 outputValues( 2, i0, 8) = 0.25;
678 outputValues( 3, i0, 4) = -0.25;
679 outputValues( 3, i0, 7) = 0.25;
680 outputValues( 3, i0, 8) = -0.25;
682 outputValues( 4, i0, 4) = -0.25;
683 outputValues( 4, i0, 7) = -0.25;
684 outputValues( 4, i0, 8) = 0.25;
686 outputValues( 5, i0, 4) = -0.25;
687 outputValues( 5, i0, 7) = 0.25;
688 outputValues( 5, i0, 8) = -0.25;
690 outputValues( 6, i0, 4) = 0.25;
691 outputValues( 6, i0, 7) = 0.25;
692 outputValues( 6, i0, 8) = 0.25;
694 outputValues( 7, i0, 4) = 0.25;
695 outputValues( 7, i0, 7) = -0.25;
696 outputValues( 7, i0, 8) = -0.25;
698 outputValues( 8, i0, 4) = -0.5;
699 outputValues( 9, i0, 7) = 0.5;
700 outputValues(10, i0, 4) = 0.5;
701 outputValues(11, i0, 7) = -0.5;
702 outputValues(12, i0, 8) = -0.5;
703 outputValues(13, i0, 8) = 0.5;
704 outputValues(14, i0, 8) = -0.5;
705 outputValues(15, i0, 8) = 0.5;
706 outputValues(16, i0, 4) = 0.5;
707 outputValues(17, i0, 7) = -0.5;
708 outputValues(18, i0, 4) = -0.5;
709 outputValues(19, i0, 7) = 0.5;
722 int DkCardinality = Intrepid::getDkCardinality(operatorType,
723 this -> basisCellTopology_.getDimension() );
724 for(
int dofOrd = 0; dofOrd <
this -> basisCardinality_; dofOrd++) {
725 for (
int i0 = 0; i0 < dim0; i0++) {
726 for(
int dkOrd = 0; dkOrd < DkCardinality; dkOrd++){
727 outputValues(dofOrd, i0, dkOrd) = 0.0;
735 TEUCHOS_TEST_FOR_EXCEPTION( !( Intrepid::isValidOperator(operatorType) ), std::invalid_argument,
736 ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): Invalid operator type");
742 template<
class Scalar,
class ArrayScalar>
744 const ArrayScalar & inputPoints,
745 const ArrayScalar & cellVertices,
746 const EOperator operatorType)
const {
747 TEUCHOS_TEST_FOR_EXCEPTION( (
true), std::logic_error,
748 ">>> ERROR (Basis_HGRAD_HEX_I2_FEM): FEM Basis calling an FVD member function");
751 template<
class Scalar,
class ArrayScalar>
753 #ifdef HAVE_INTREPID_DEBUG
755 TEUCHOS_TEST_FOR_EXCEPTION( !(DofCoords.rank() == 2), std::invalid_argument,
756 ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) rank = 2 required for DofCoords array");
758 TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(0) ==
this -> basisCardinality_ ), std::invalid_argument,
759 ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) mismatch in number of DoF and 0th dimension of DofCoords array");
761 TEUCHOS_TEST_FOR_EXCEPTION( !( DofCoords.dimension(1) == (int)(
this -> basisCellTopology_.getDimension()) ), std::invalid_argument,
762 ">>> ERROR: (Intrepid::Basis_HGRAD_HEX_I2_FEM::getDofCoords) incorrect reference cell (1st) dimension in DofCoords array");
765 DofCoords(0,0) = -1.0; DofCoords(0,1) = -1.0; DofCoords(0,2) = -1.0;
766 DofCoords(1,0) = 1.0; DofCoords(1,1) = -1.0; DofCoords(1,2) = -1.0;
767 DofCoords(2,0) = 1.0; DofCoords(2,1) = 1.0; DofCoords(2,2) = -1.0;
768 DofCoords(3,0) = -1.0; DofCoords(3,1) = 1.0; DofCoords(3,2) = -1.0;
769 DofCoords(4,0) = -1.0; DofCoords(4,1) = -1.0; DofCoords(4,2) = 1.0;
770 DofCoords(5,0) = 1.0; DofCoords(5,1) = -1.0; DofCoords(5,2) = 1.0;
771 DofCoords(6,0) = 1.0; DofCoords(6,1) = 1.0; DofCoords(6,2) = 1.0;
772 DofCoords(7,0) = -1.0; DofCoords(7,1) = 1.0; DofCoords(7,2) = 1.0;
774 DofCoords(8,0) = 0.0; DofCoords(8,1) = -1.0; DofCoords(8,2) = -1.0;
775 DofCoords(9,0) = 1.0; DofCoords(9,1) = 0.0; DofCoords(9,2) = -1.0;
776 DofCoords(10,0) = 0.0; DofCoords(10,1) = 1.0; DofCoords(10,2) = -1.0;
777 DofCoords(11,0) = -1.0; DofCoords(11,1) = 0.0; DofCoords(11,2) = -1.0;
778 DofCoords(12,0) = -1.0; DofCoords(12,1) = -1.0; DofCoords(12,2) = 0.0;
779 DofCoords(13,0) = 1.0; DofCoords(13,1) = -1.0; DofCoords(13,2) = 0.0;
780 DofCoords(14,0) = 1.0; DofCoords(14,1) = 1.0; DofCoords(14,2) = 0.0;
781 DofCoords(15,0) = -1.0; DofCoords(15,1) = 1.0; DofCoords(15,2) = 0.0;
782 DofCoords(16,0) = 0.0; DofCoords(16,1) = -1.0; DofCoords(16,2) = 1.0;
783 DofCoords(17,0) = 1.0; DofCoords(17,1) = 0.0; DofCoords(17,2) = 1.0;
784 DofCoords(18,0) = 0.0; DofCoords(18,1) = 1.0; DofCoords(18,2) = 1.0;
785 DofCoords(19,0) = -1.0; DofCoords(19,1) = 0.0; DofCoords(19,2) = 1.0;
void initializeTags()
Initializes tagToOrdinal_ and ordinalToTag_ lookup arrays.
void getDofCoords(ArrayScalar &DofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on a reference Quadrilateral.
void getValues(ArrayScalar &outputValues, const ArrayScalar &inputPoints, const EOperator operatorType) const
Evaluation of a FEM basis on a reference Hexahedron cell.
Basis_HGRAD_HEX_I2_FEM()
Constructor.