19#include "libmesh/libmesh_config.h"
21#ifdef LIBMESH_ENABLE_HIGHER_ORDER_SHAPES
24#include "libmesh/fe.h"
25#include "libmesh/elem.h"
26#include "libmesh/utility.h"
27#include "libmesh/enum_to_string.h"
38static const Real sqrt2 = std::sqrt(2.);
39static const Real sqrt6 = std::sqrt(6.);
40static const Real sqrt10 = std::sqrt(10.);
41static const Real sqrt14 = std::sqrt(14.);
42static const Real sqrt22 = std::sqrt(22.);
43static const Real sqrt26 = std::sqrt(26.);
49 const unsigned int totalorder,
52 libmesh_assert_less (i, (totalorder+1u)*(totalorder+1u));
55 if (i < 4 || i >= 4*totalorder)
58 const int edge = (i-4) / (totalorder-1);
59 libmesh_assert_less(edge, 4);
60 libmesh_assert_greater_equal(edge, 0);
62 const int edge_i = i - 4 - edge*(totalorder-1);
89 const bool add_p_level)
95 const Order totalorder = order + add_p_level*elem->
p_level();
115 const Real l1 = 1-p(0)-p(1);
116 const Real l2 = p(0);
117 const Real l3 = p(1);
119 libmesh_assert_less (i, 6);
127 case 3:
return l1*l2*(-4.*sqrt6);
128 case 4:
return l2*l3*(-4.*sqrt6);
129 case 5:
return l3*l1*(-4.*sqrt6);
132 libmesh_error_msg(
"Invalid i = " << i);
143 const Real xi = p(0);
144 const Real eta = p(1);
146 libmesh_assert_less (i, 9);
149 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
150 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
173 Real l1 = 1-p(0)-p(1);
179 libmesh_assert_less (i, 10);
195 case 3:
return l1*l2*(-4.*sqrt6);
196 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
198 case 5:
return l2*l3*(-4.*sqrt6);
199 case 6:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
201 case 7:
return l3*l1*(-4.*sqrt6);
202 case 8:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
205 case 9:
return l1*l2*l3;
208 libmesh_error_msg(
"Invalid i = " << i);
218 const Real xi = p(0);
219 const Real eta = p(1);
221 libmesh_assert_less (i, 16);
224 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
225 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
227 const Real f = quad_flip(elem, totalorder, i);
250 Real l1 = 1-p(0)-p(1);
256 libmesh_assert_less (i, 15);
272 case 3:
return l1*l2*(-4.*sqrt6);
273 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
274 case 5:
return l1*l2*(-sqrt14)*(5.*pow<2>(l2-l1)-1);
276 case 6:
return l2*l3*(-4.*sqrt6);
277 case 7:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
278 case 8:
return l2*l3*(-sqrt14)*(5.*pow<2>(l3-l2)-1);
280 case 9:
return l3*l1*(-4.*sqrt6);
281 case 10:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
282 case 11:
return l3*l1*(-sqrt14)*(5.*pow<2>(l1-l3)-1);
285 case 12:
return l1*l2*l3;
287 case 13:
return l1*l2*l3*(l2-l1);
288 case 14:
return l1*l2*l3*(2*l3-1);
291 libmesh_error_msg(
"Invalid i = " << i);
301 const Real xi = p(0);
302 const Real eta = p(1);
304 libmesh_assert_less (i, 25);
307 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4};
308 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4};
310 const Real f = quad_flip(elem, totalorder, i);
333 Real l1 = 1-p(0)-p(1);
338 const Real y=2.*l3-1;
342 libmesh_assert_less (i, 21);
358 case 3:
return l1*l2*(-4.*sqrt6);
359 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
360 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
361 case 6:
return f*(-sqrt2)*l1*l2*((9.-21.*l1*l1)*l1+(-9.+63.*l1*l1+(-63.*l1+21.*l2)*l2)*l2);
363 case 7:
return l2*l3*(-4.*sqrt6);
364 case 8:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
365 case 9:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
366 case 10:
return -f*sqrt2*l2*l3*((-9.0+21.0*l3*l3)*l3+(-63.0*l3*l3+9.0+(63.0*l3-21.0*l2)*l2)*l2);
368 case 11:
return l3*l1*(-4.*sqrt6);
369 case 12:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
370 case 13:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
371 case 14:
return f*(-sqrt2)*l3*l1*((9.0-21.0*l3*l3)*l3+(-9.0+63.0*l3*l3+(-63.0*l3+21.0*l1)*l1)*l1);
374 case 15:
return l1*l2*l3;
376 case 16:
return l1*l2*l3*x;
377 case 17:
return l1*l2*l3*y;
379 case 18:
return l1*l2*l3*(1.5*l1*l1-.5+(-3.0*l1+1.5*l2)*l2);
380 case 19:
return l1*l2*l3*x*y;
381 case 20:
return l1*l2*l3*(1.0+(-6.0+6.0*l3)*l3);
384 libmesh_error_msg(
"Invalid i = " << i);
393 const Real xi = p(0);
394 const Real eta = p(1);
396 libmesh_assert_less (i, 36);
399 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5};
400 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5};
402 const Real f = quad_flip(elem, totalorder, i);
425 Real l1 = 1-p(0)-p(1);
430 const Real y=2.*l3-1;
434 libmesh_assert_less (i, 28);
450 case 3:
return l1*l2*(-4.*sqrt6);
451 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
452 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
453 case 6:
return f*(-sqrt2)*l1*l2*((9.0-21.0*l1*l1)*l1+(-9.0+63.0*l1*l1+(-63.0*l1+21.0*l2)*l2)*l2);
454 case 7:
return -sqrt22*l1*l2*(0.5+(-7.0+0.105E2*l1*l1)*l1*l1+((14.0-0.42E2*l1*l1)*l1+(-7.0+0.63E2*l1*l1+(-0.42E2*l1+0.105E2*l2)*l2)*l2)*l2);
456 case 8:
return l2*l3*(-4.*sqrt6);
457 case 9:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
458 case 10:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
459 case 11:
return f*(-sqrt2)*l2*l3*((-9.0+21.0*l3*l3)*l3+(-63.0*l3*l3+9.0+(63.0*l3-21.0*l2)*l2)*l2);
460 case 12:
return -sqrt22*l2*l3*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l2)*l2)*l2)*l2);
462 case 13:
return l3*l1*(-4.*sqrt6);
463 case 14:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
464 case 15:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
465 case 16:
return f*(-sqrt2)*l3*l1*((9.0-21.0*l3*l3)*l3+(-9.0+63.0*l3*l3+(-63.0*l3+21.0*l1)*l1)*l1);
466 case 17:
return -sqrt22*l3*l1*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l1)*l1)*l1)*l1);
471 case 18:
return l1*l2*l3;
473 case 19:
return l1*l2*l3*x;
474 case 20:
return l1*l2*l3*y;
476 case 21:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2);
477 case 22:
return l1*l2*l3*(l2-l1)*(2.0*l3-1.0);
478 case 23:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3);
479 case 24:
return 0.5*l1*l2*l3*((3.0-5.0*l1*l1)*l1+(-3.0+15.0*l1*l1+(-15.0*l1+5.0*l2)*l2)*l2);
480 case 25:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2)*(2.0*l3-1.0);
481 case 26:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
482 case 27:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
486 libmesh_error_msg(
"Invalid i = " << i);
495 const Real xi = p(0);
496 const Real eta = p(1);
498 libmesh_assert_less (i, 49);
501 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6};
502 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6};
504 const Real f = quad_flip(elem, totalorder, i);
529 Real l1 = 1-p(0)-p(1);
534 const Real y=2.*l3-1.;
538 libmesh_assert_less (i, 36);
554 case 3:
return l1*l2*(-4.*sqrt6);
555 case 4:
return f*l1*l2*(-4.*sqrt10)*(l2-l1);
557 case 5:
return -sqrt14*l1*l2*(5.0*l1*l1-1.0+(-10.0*l1+5.0*l2)*l2);
558 case 6:
return f*-sqrt2*l1*l2*((9.0-21.0*l1*l1)*l1+(-9.0+63.0*l1*l1+(-63.0*l1+21.0*l2)*l2)*l2);
559 case 7:
return -sqrt22*l1*l2*(0.5+(-7.0+0.105E2*l1*l1)*l1*l1+((14.0-0.42E2*l1*l1)*l1+(-7.0+0.63E2*l1*l1+(-0.42E2*l1+0.105E2*l2)*l2)*l2)*l2);
560 case 8:
return f*-sqrt26*l1*l2*((-0.25E1+(15.0-0.165E2*l1*l1)*l1*l1)*l1+(0.25E1+(-45.0+0.825E2*l1*l1)*l1*l1+((45.0-0.165E3*l1*l1)*l1+(-15.0+0.165E3*l1*l1+(-0.825E2*l1+0.165E2*l2)*l2)*l2)*l2)*l2);
562 case 9:
return l2*l3*(-4.*sqrt6);
563 case 10:
return f*l2*l3*(-4.*sqrt10)*(l3-l2);
565 case 11:
return -sqrt14*l2*l3*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l2)*l2);
566 case 12:
return f*-sqrt2*l2*l3*((-9.0+21.0*l3*l3)*l3+(-63.0*l3*l3+9.0+(63.0*l3-21.0*l2)*l2)*l2);
567 case 13:
return -sqrt22*l2*l3*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l2)*l2)*l2)*l2);
568 case 14:
return f*-sqrt26*l2*l3*((0.25E1+(-15.0+0.165E2*l3*l3)*l3*l3)*l3+(-0.25E1+(45.0-0.825E2*l3*l3)*l3*l3+((-45.0+0.165E3*l3*l3)*l3+(15.0-0.165E3*l3*l3+(0.825E2*l3-0.165E2*l2)*l2)*l2)*l2)*l2);
570 case 15:
return l3*l1*(-4.*sqrt6);
571 case 16:
return f*l3*l1*(-4.*sqrt10)*(l1-l3);
573 case 17:
return -sqrt14*l3*l1*(5.0*l3*l3-1.0+(-10.0*l3+5.0*l1)*l1);
574 case 18:
return -f*sqrt2*l3*l1*((9.-21.*l3*l3)*l3+(-9.+63.*l3*l3+(-63.*l3+21.*l1)*l1)*l1);
575 case 19:
return -sqrt22*l3*l1*(0.5+(-7.0+0.105E2*l3*l3)*l3*l3+((14.0-0.42E2*l3*l3)*l3+(-7.0+0.63E2*l3*l3+(-0.42E2*l3+0.105E2*l1)*l1)*l1)*l1);
576 case 20:
return f*-sqrt26*l3*l1*((-0.25E1+(15.0-0.165E2*l3*l3)*l3*l3)*l3+(0.25E1+(-45.0+0.825E2*l3*l3)*l3*l3+((45.0-0.165E3*l3*l3)*l3+(-15.0+0.165E3*l3*l3+(-0.825E2*l3+0.165E2*l1)*l1)*l1)*l1)*l1);
580 case 21:
return l1*l2*l3;
582 case 22:
return l1*l2*l3*x;
583 case 23:
return l1*l2*l3*y;
585 case 24:
return l1*l2*l3*0.5*(3.*pow<2>(x)-1.);
586 case 25:
return l1*l2*l3*x*y;
587 case 26:
return l1*l2*l3*0.5*(3.*pow<2>(y)-1.);
589 case 27:
return 0.5*l1*l2*l3*((3.0-5.0*l1*l1)*l1+(-3.0+15.0*l1*l1+(-15.0*l1+5.0*l2)*l2)*l2);
590 case 28:
return 0.5*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2)*(2.0*l3-1.0);
591 case 29:
return 0.5*l1*l2*l3*(2.0+(-12.0+12.0*l3)*l3)*(l2-l1);
592 case 30:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3);
593 case 31:
return 0.125*l1*l2*l3*((-15.0+(70.0-63.0*l1*l1)*l1*l1)*l1+(15.0+(-210.0+315.0*l1*l1)*l1*l1+((210.0-630.0*l1*l1)*l1+(-70.0+630.0*l1*l1+(-315.0*l1+63.0*l2)*l2)*l2)*l2)*l2);
594 case 32:
return 0.5*l1*l2*l3*((3.0-5.0*l1*l1)*l1+(-3.0+15.0*l1*l1+(-15.0*l1+5.0*l2)*l2)*l2)*(2.0*l3-1.0);
595 case 33:
return 0.25*l1*l2*l3*(3.0*l1*l1-1.0+(-6.0*l1+3.0*l2)*l2)*(2.0+(-12.0+12.0*l3)*l3);
596 case 34:
return 0.5*l1*l2*l3*(-2.0+(24.0+(-60.0+40.0*l3)*l3)*l3)*(l2-l1);
597 case 35:
return 0.125*l1*l2*l3*(-8.0+(240.0+(-1680.0+(4480.0+(-5040.0+2016.0*l3)*l3)*l3)*l3)*l3);
600 libmesh_error_msg(
"Invalid i = " << i);
609 const Real xi = p(0);
610 const Real eta = p(1);
612 libmesh_assert_less (i, 64);
615 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7};
616 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7};
618 const Real f = quad_flip(elem, totalorder, i);
635 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
649 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
658 const unsigned int i,
660 const bool add_p_level)
672 const unsigned int i,
673 const unsigned int j,
675 const bool add_p_level)
681 const Order totalorder = order + add_p_level*elem->
p_level();
708 const Real xi = p(0);
709 const Real eta = p(1);
711 libmesh_assert_less (i, 9);
714 static const unsigned int i0[] = {0, 1, 1, 0, 2, 1, 2, 0, 2};
715 static const unsigned int i1[] = {0, 0, 1, 1, 0, 2, 1, 2, 2};
730 libmesh_error_msg(
"Invalid j = " << j);
759 const Real xi = p(0);
760 const Real eta = p(1);
762 libmesh_assert_less (i, 16);
765 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 1, 1, 2, 3, 0, 0, 2, 3, 2, 3};
766 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 2, 3, 1, 1, 2, 3, 2, 2, 3, 3};
768 const Real f = quad_flip(elem, totalorder, i);
783 libmesh_error_msg(
"Invalid j = " << j);
814 const Real xi = p(0);
815 const Real eta = p(1);
817 libmesh_assert_less (i, 25);
820 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 0, 0, 0, 2, 3, 4, 2, 3, 4, 2, 3, 4};
821 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 2, 3, 4, 1, 1, 1, 2, 3, 4, 2, 2, 2, 3, 3, 3, 4, 4, 4};
823 const Real f = quad_flip(elem, totalorder, i);
838 libmesh_error_msg(
"Invalid j = " << j);
869 const Real xi = p(0);
870 const Real eta = p(1);
872 libmesh_assert_less (i, 36);
875 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5};
876 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 2, 3, 4, 5, 1, 1, 1, 1, 2, 3, 4, 5, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5};
878 const Real f = quad_flip(elem, totalorder, i);
893 libmesh_error_msg(
"Invalid j = " << j);
922 const Real xi = p(0);
923 const Real eta = p(1);
925 libmesh_assert_less (i, 49);
928 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6};
929 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6};
931 const Real f = quad_flip(elem, totalorder, i);
946 libmesh_error_msg(
"Invalid j = " << j);
975 const Real xi = p(0);
976 const Real eta = p(1);
978 libmesh_assert_less (i, 64);
981 static const unsigned int i0[] = {0, 1, 1, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7, 2, 3, 4, 5, 6, 7};
982 static const unsigned int i1[] = {0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 1, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7};
984 const Real f = quad_flip(elem, totalorder, i);
999 libmesh_error_msg(
"Invalid j = " << j);
1012 libmesh_error_msg(
"ERROR: Unsupported polynomial order!");
1027 libmesh_error_msg(
"Szabo-Babuska polynomials require the element type \nbecause edge orientation is needed.");
1035 const unsigned int i,
1036 const unsigned int j,
1038 const bool add_p_level)
1046#ifdef LIBMESH_ENABLE_SECOND_DERIVATIVES
1055 static bool warning_given =
false;
1058 libMesh::err <<
"Second derivatives for Szabab elements "
1059 <<
" are not yet implemented!"
1062 warning_given =
true;
1076 static bool warning_given =
false;
1079 libMesh::err <<
"Second derivatives for Szabab elements "
1080 <<
" are not yet implemented!"
1083 warning_given =
true;
1096 static bool warning_given =
false;
1099 libMesh::err <<
"Second derivatives for Szabab elements "
1100 <<
" are not yet implemented!"
1103 warning_given =
true;
This is the base class from which all geometric element types are derived.
bool positive_edge_orientation(const unsigned int i) const
virtual ElemType type() const =0
unsigned int p_level() const
class FEType hides (possibly multiple) FEFamily and approximation orders, thereby enabling specialize...
OrderWrapper order
The approximation order of the element (at 0 p-refinement level).
A specific instantiation of the FEBase class.
static OutputShape shape(const ElemType t, const Order o, const unsigned int i, const Point &p)
static OutputShape shape_second_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
static OutputShape shape_deriv(const ElemType t, const Order o, const unsigned int i, const unsigned int j, const Point &p)
A Point defines a location in LIBMESH_DIM dimensional Real space.
std::string enum_to_string(const T e)
The libMesh namespace provides an interface to certain functionality in the library.
LIBMESH_DEFAULT_VECTORIZED_FE(template<>Real FE< 0, BERNSTEIN)
OutputShape fe_fdm_deriv(const Elem *elem, const Order order, const unsigned int i, const unsigned int j, const Point &p, const bool add_p_level, OutputShape(*shape_func)(const Elem *, const Order, const unsigned int, const Point &, const bool))
Helper functions for finite differenced derivatives in cases where analytical calculations haven't be...
ElemType
Defines an enum for geometric element types.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real