13 #include "libmesh/fe_type.h" 29 libmesh_assert_less(i, 2);
34 return .5 * (1. - xi);
37 return .5 * (1. + xi);
40 mooseError(
"Invalid shape function index i = ", i);
47 libmesh_assert_less(i, 3);
52 return .5 * xi * (xi - 1.);
55 return .5 * xi * (xi + 1);
58 return (1. - xi * xi);
61 mooseError(
"Invalid shape function index i = ", i);
68 libmesh_assert_less(i, 4);
73 return 9. / 16. * (1. / 9. - xi * xi) * (xi - 1.);
76 return -9. / 16. * (1. / 9. - xi * xi) * (xi + 1.);
79 return 27. / 16. * (1. - xi * xi) * (1. / 3. - xi);
82 return 27. / 16. * (1. - xi * xi) * (1. / 3. + xi);
85 mooseError(
"Invalid shape function index i = ", i);
103 libmesh_assert_less(i, 2);
114 mooseError(
"Invalid shape function index i = ", i);
121 libmesh_assert_less(i, 3);
135 mooseError(
"Invalid shape function index i = ", i);
142 libmesh_assert_less(i, 4);
147 return -9. / 16. * (3. * xi * xi - 2. * xi - 1. / 9.);
150 return -9. / 16. * (-3. * xi * xi - 2. * xi + 1. / 9.);
153 return 27. / 16. * (3. * xi * xi - 2. / 3. * xi - 1.);
156 return 27. / 16. * (-3. * xi * xi - 2. / 3. * xi + 1.);
159 mooseError(
"Invalid shape function index i = ", i);
169 template <
typename T,
template <
typename>
class VectorType>
173 const unsigned int i,
174 const VectorType<T> & p)
193 libmesh_assert_less(i, 4);
196 static const unsigned int i0[] = {0, 1, 1, 0};
197 static const unsigned int i1[] = {0, 0, 1, 1};
207 const T zeta1 = p(0);
208 const T zeta2 = p(1);
209 const T zeta0 = 1. - zeta1 - zeta2;
211 libmesh_assert_less(i, 3);
225 mooseError(
"Invalid shape function index i = ", i);
230 mooseError(
"Unsupported element type:", type);
245 libmesh_assert_less(i, 8);
250 return .25 * (1. - xi) * (1. - eta) * (-1. - xi - eta);
252 return .25 * (1. + xi) * (1. - eta) * (-1. + xi - eta);
254 return .25 * (1. + xi) * (eta + 1.) * (-1. + xi + eta);
256 return .25 * (1. - xi) * (eta + 1.) * (-1. - xi + eta);
258 return .5 * (1. - xi * xi) * (1. - eta);
260 return .5 * (1. + xi) * (1. - eta * eta);
262 return .5 * (1. - xi * xi) * (1. + eta);
264 return .5 * (1. - xi) * (1. - eta * eta);
266 mooseError(
"Invalid shape function index i = ", i);
275 libmesh_assert_less(i, 9);
278 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
279 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
287 const T zeta1 = p(0);
288 const T zeta2 = p(1);
289 const T zeta0 = 1. - zeta1 - zeta2;
291 libmesh_assert_less(i, 6);
296 return 2. * zeta0 * (zeta0 - 0.5);
299 return 2. * zeta1 * (zeta1 - 0.5);
302 return 2. * zeta2 * (zeta2 - 0.5);
305 return 4. * zeta0 * zeta1;
308 return 4. * zeta1 * zeta2;
311 return 4. * zeta2 * zeta0;
314 mooseError(
"Invalid shape function index i = ", i);
330 const T zeta1 = p(0);
331 const T zeta2 = p(1);
332 const T zeta0 = 1. - zeta1 - zeta2;
333 const T bubble_27th = zeta0 * zeta1 * zeta2;
335 libmesh_assert_less(i, 7);
340 return 2. * zeta0 * (zeta0 - 0.5) + 3. * bubble_27th;
343 return 2. * zeta1 * (zeta1 - 0.5) + 3. * bubble_27th;
346 return 2. * zeta2 * (zeta2 - 0.5) + 3. * bubble_27th;
349 return 4. * zeta0 * zeta1 - 12. * bubble_27th;
352 return 4. * zeta1 * zeta2 - 12. * bubble_27th;
355 return 4. * zeta2 * zeta0 - 12. * bubble_27th;
358 return 27. * bubble_27th;
361 mooseError(
"Invalid shape function index i = ", i);
376 template <
typename T,
template <
typename>
class VectorType>
380 const unsigned int i,
381 const unsigned int j,
382 const VectorType<T> & p)
384 libmesh_assert_less(j, 2);
403 libmesh_assert_less(i, 4);
406 static const unsigned int i0[] = {0, 1, 1, 0};
407 static const unsigned int i1[] = {0, 0, 1, 1};
422 mooseError(
"Invalid derivative index j = ", j);
431 libmesh_assert_less(i, 3);
433 const T dzeta0dxi = -1.;
434 const T dzeta1dxi = 1.;
435 const T dzeta2dxi = 0.;
437 const T dzeta0deta = -1.;
438 const T dzeta1deta = 0.;
439 const T dzeta2deta = 1.;
458 mooseError(
"Invalid shape function index i = ", i);
476 mooseError(
"Invalid shape function index i = ", i);
480 mooseError(
"Invalid derivative index j = ", j);
500 libmesh_assert_less(i, 8);
509 return .25 * (1. - eta) * ((1. - xi) * (-1.) + (-1.) * (-1. - xi - eta));
512 return .25 * (1. - eta) * ((1. + xi) * (1.) + (1.) * (-1. + xi - eta));
515 return .25 * (1. + eta) * ((1. + xi) * (1.) + (1.) * (-1. + xi + eta));
518 return .25 * (1. + eta) * ((1. - xi) * (-1.) + (-1.) * (-1. - xi + eta));
521 return .5 * (-2. * xi) * (1. - eta);
524 return .5 * (1.) * (1. - eta * eta);
527 return .5 * (-2. * xi) * (1. + eta);
530 return .5 * (-1.) * (1. - eta * eta);
533 mooseError(
"Invalid shape function index i = ", i);
541 return .25 * (1. - xi) * ((1. - eta) * (-1.) + (-1.) * (-1. - xi - eta));
544 return .25 * (1. + xi) * ((1. - eta) * (-1.) + (-1.) * (-1. + xi - eta));
547 return .25 * (1. + xi) * ((1. + eta) * (1.) + (1.) * (-1. + xi + eta));
550 return .25 * (1. - xi) * ((1. + eta) * (1.) + (1.) * (-1. - xi + eta));
553 return .5 * (1. - xi * xi) * (-1.);
556 return .5 * (1. + xi) * (-2. * eta);
559 return .5 * (1. - xi * xi) * (1.);
562 return .5 * (1. - xi) * (-2. * eta);
565 mooseError(
"Invalid shape function index i = ", i);
569 mooseError(
"ERROR: Invalid derivative index j = ", j);
579 libmesh_assert_less(i, 9);
582 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
583 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
598 mooseError(
"Invalid derivative index j = ", j);
605 libmesh_assert_less(i, 6);
607 const T zeta1 = p(0);
608 const T zeta2 = p(1);
609 const T zeta0 = 1. - zeta1 - zeta2;
611 const T dzeta0dxi = -1.;
612 const T dzeta1dxi = 1.;
613 const T dzeta2dxi = 0.;
615 const T dzeta0deta = -1.;
616 const T dzeta1deta = 0.;
617 const T dzeta2deta = 1.;
626 return (4. * zeta0 - 1.) * dzeta0dxi;
629 return (4. * zeta1 - 1.) * dzeta1dxi;
632 return (4. * zeta2 - 1.) * dzeta2dxi;
635 return 4. * zeta1 * dzeta0dxi + 4. * zeta0 * dzeta1dxi;
638 return 4. * zeta2 * dzeta1dxi + 4. * zeta1 * dzeta2dxi;
641 return 4. * zeta2 * dzeta0dxi + 4 * zeta0 * dzeta2dxi;
644 mooseError(
"Invalid shape function index i = ", i);
653 return (4. * zeta0 - 1.) * dzeta0deta;
656 return (4. * zeta1 - 1.) * dzeta1deta;
659 return (4. * zeta2 - 1.) * dzeta2deta;
662 return 4. * zeta1 * dzeta0deta + 4. * zeta0 * dzeta1deta;
665 return 4. * zeta2 * dzeta1deta + 4. * zeta1 * dzeta2deta;
668 return 4. * zeta2 * dzeta0deta + 4 * zeta0 * dzeta2deta;
671 mooseError(
"Invalid shape function index i = ", i);
675 mooseError(
"ERROR: Invalid derivative index j = ", j);
680 mooseError(
"ERROR: Unsupported 2D element type");
691 libmesh_assert_less(i, 7);
693 const T zeta1 = p(0);
694 const T zeta2 = p(1);
695 const T zeta0 = 1. - zeta1 - zeta2;
697 const T dzeta0dxi = -1.;
698 const T dzeta1dxi = 1.;
699 const T dzeta2dxi = 0.;
700 const T dbubbledxi = zeta2 * (1. - 2. * zeta1 - zeta2);
702 const T dzeta0deta = -1.;
703 const T dzeta1deta = 0.;
704 const T dzeta2deta = 1.;
705 const T dbubbledeta = zeta1 * (1. - zeta1 - 2. * zeta2);
714 return (4. * zeta0 - 1.) * dzeta0dxi + 3. * dbubbledxi;
717 return (4. * zeta1 - 1.) * dzeta1dxi + 3. * dbubbledxi;
720 return (4. * zeta2 - 1.) * dzeta2dxi + 3. * dbubbledxi;
723 return 4. * zeta1 * dzeta0dxi + 4. * zeta0 * dzeta1dxi - 12. * dbubbledxi;
726 return 4. * zeta2 * dzeta1dxi + 4. * zeta1 * dzeta2dxi - 12. * dbubbledxi;
729 return 4. * zeta2 * dzeta0dxi + 4 * zeta0 * dzeta2dxi - 12. * dbubbledxi;
732 return 27. * dbubbledxi;
735 mooseError(
"Invalid shape function index i = ", i);
744 return (4. * zeta0 - 1.) * dzeta0deta + 3. * dbubbledeta;
747 return (4. * zeta1 - 1.) * dzeta1deta + 3. * dbubbledeta;
750 return (4. * zeta2 - 1.) * dzeta2deta + 3. * dbubbledeta;
753 return 4. * zeta1 * dzeta0deta + 4. * zeta0 * dzeta1deta - 12. * dbubbledeta;
756 return 4. * zeta2 * dzeta1deta + 4. * zeta1 * dzeta2deta - 12. * dbubbledeta;
759 return 4. * zeta2 * dzeta0deta + 4 * zeta0 * dzeta2deta - 12. * dbubbledeta;
762 return 27. * dbubbledeta;
765 mooseError(
"Invalid shape function index i = ", i);
769 mooseError(
"ERROR: Invalid derivative index j = ", j);
774 mooseError(
"ERROR: Unsupported 2D element type");
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
T fe_lagrange_1D_shape_deriv(const Order order, const unsigned int i, const T &xi)
T fe_lagrange_2D_shape_deriv(const ElemType type, const Order order, const unsigned int i, const unsigned int j, const VectorType< T > &p)
T fe_lagrange_1D_shape(const Order order, const unsigned int i, const T &xi)
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
T fe_lagrange_2D_shape(const ElemType type, const Order order, const unsigned int i, const VectorType< T > &p)