#include"BF.h" static void BF_Tetrahedron_Nedelec_Order2(int numBF, double u, double v, double w, Eigen::Vector3d& o) { switch (numBF) { case 1: o(0) = v - 3 * u * v; o(1) = -u + 3 * u * u; o(2) = 0.; break; case 2: o(0) = v - 3 * v * v; o(1) = -u + 3 * u * v; o(2) = 0.; break; case 3: o(0) = w - 3 * u * w; o(1) = 0.; o(2) = -u + 3 * u * u; break; case 4: o(0) = w - 3 * w * w; o(1) = 0.; o(2) = -u + 3 * u * w; break; case 5: o(0) = 1 - 3 * u - v + 3 * u * v - w + 3 * u * w; o(1) = u - 3 * u * u; o(2) = u - 3 * u * u; break; case 6: o(0) = -2 + 3 * u + 5 * v - 3 * u * v - 3 * v * v + 5 * w - 3 * u * w - 6 * v * w - 3 * w * w; o(1) = -2 * u + 3 * u * u + 3 * u * v + 3 * u * w; o(2) = -2 * u + 3 * u * u + 3 * u * v + 3 * u * w; break; case 7: o(0) = 0.; o(1) = w - 3 * v * w; o(2) = -v + 3 * v * v; break; case 8: o(0) = 0.; o(1) = w - 3 * w * w; o(2) = -v + 3 * v * w; break; case 9: o(0) = v - 3 * v * v; o(1) = 1 - u - 3 * v + 3 * u * v - w + 3 * v * w; o(2) = v - 3 * v * v; break; case 10: o(0) = -2 * v + 3 * u * v + 3 * v * v + 3 * v * w; o(1) = -2 + 5 * u - 3 * u * u + 3 * v - 3 * u * v + 5 * w - 6 * u * w - 3 * v * w - 3 * w * w; o(2) = -2 * v + 3 * u * v + 3 * v * v + 3 * v * w; break; case 11: o(0) = w - 3 * w * w; o(1) = w - 3 * w * w; o(2) = 1 - u - v - 3 * w + 3 * u * w + 3 * v * w; break; case 12: o(0) = -2 * w + 3 * u * w + 3 * v * w + 3 * w * w; o(1) = -2 * w + 3 * u * w + 3 * v * w + 3 * w * w; o(2) = -2 + 5 * u - 3 * u * u + 5 * v - 6 * u * v - 3 * v * v + 3 * w - 3 * u * w - 3 * v * w; break; case 13: o(0) = -3 * v * w; o(1) = 3 * u * w; o(2) = 0.; break; case 14: o(0) = -3 * v * w; o(1) = 0.; o(2) = 3 * u * v; break; case 15: o(0) = -3 * v + 3 * u * v + 3 * v * v + 3 * v * w; o(1) = 3 * u - 3 * u * u - 3 * u * v - 3 * u * w; o(2) = 0.; break; case 16: o(0) = -3 * v + 3 * v * v + 3 * v * w; o(1) = -3 * u * v; o(2) = -3 * u * v; break; case 17: o(0) = -3 * w + 3 * u * w + 3 * v * w + 3 * w * w; o(1) = 0.; o(2) = 3 * u - 3 * u * u - 3 * u * v - 3 * u * w; break; case 18: o(0) = -3 * w + 3 * v * w + 3 * w * w; o(1) = -3 * u * w; o(2) = -3 * u * w; break; case 19: o(0) = 0.; o(1) = -3 * w + 3 * u * w + 3 * v * w + 3 * w * w; o(2) = 3 * v - 3 * u * v - 3 * v * v - 3 * v * w; break; case 20: o(0) = -3 * v * w; o(1) = -3 * w + 3 * u * w + 3 * w * w; o(2) = -3 * v * w; break; default: o.setZero(); break; } } static void BF_Tetrahedron_Curl_Nedelec_Order2(int numBF, double u, double v, double w, Eigen::Vector3d& o) { (void)u; (void)v; (void)w; switch (numBF) { case 1: o(0) = 0.; o(1) = 0.; o(2) = -2 + 9 * u; break; case 2: o(0) = 0.; o(1) = 0.; o(2) = -2 + 9 * v; break; case 3: o(0) = 0.; o(1) = 2 - 9 * u; o(2) = 0.; break; case 4: o(0) = 0.; o(1) = 2 - 9 * w; o(2) = 0.; break; case 5: o(0) = 0.; o(1) = -2 + 9 * u; o(2) = 2 - 9 * u; break; case 6: o(0) = 0.; o(1) = 7 - 9 * u - 9 * v - 9 * w; o(2) = -7 + 9 * u + 9 * v + 9 * w; break; case 7: o(0) = -2 + 9 * v; o(1) = 0.; o(2) = 0.; break; case 8: o(0) = -2 + 9 * w; o(1) = 0.; o(2) = 0.; break; case 9: o(0) = 2 - 9 * v; o(1) = 0.; o(2) = -2 + 9 * v; break; case 10: o(0) = -7 + 9 * u + 9 * v + 9 * w; o(1) = 0.; o(2) = 7 - 9 * u - 9 * v - 9 * w; break; case 11: o(0) = -2 + 9 * w; o(1) = 2 - 9 * w; o(2) = 0.; break; case 12: o(0) = 7 - 9 * u - 9 * v - 9 * w; o(1) = -7 + 9 * u + 9 * v + 9 * w; o(2) = 0.; break; case 13: o(0) = -3 * u; o(1) = -3 * v; o(2) = 6 * w; break; case 14: o(0) = 3 * u; o(1) = -6 * v; o(2) = 3 * w; break; case 15: o(0) = 3 * u; o(1) = 3 * v; o(2) = 6 - 9 * u - 9 * v - 6 * w; break; case 16: o(0) = -3 * u; o(1) = 6 * v; o(2) = 3 - 9 * v - 3 * w; break; case 17: o(0) = -3 * u; o(1) = -6 + 9 * u + 6 * v + 9 * w; o(2) = -3 * w; break; case 18: o(0) = 3 * u; o(1) = -3 + 3 * v + 9 * w; o(2) = -6 * w; break; case 19: o(0) = 6 - 6 * u - 9 * v - 9 * w; o(1) = 3 * v; o(2) = 3 * w; break; case 20: o(0) = 3 - 3 * u - 9 * w; o(1) = -3 * v; o(2) = 6 * w; break; default: o.setZero(); break; } } void BF_Tetrahedron_Nedelec(BF_INPUT) { switch (order) { case 1: switch (numBF) { case 1: o(0) = -v; o(1) = u; o(2) = 0.; break; case 2: o(0) = -w; o(1) = 0.; o(2) = u; break; case 3: o(0) = -1 + v + w; o(1) = -u; o(2) = -u; break; case 4: o(0) = 0.; o(1) = -w; o(2) = v; break; case 5: o(0) = -v; o(1) = -1 + u + w; o(2) = -v; break; case 6: o(0) = -w; o(1) = -w; o(2) = -1 + u + v; break; default: o.setZero(); break; } break; case 2: BF_Tetrahedron_Nedelec_Order2(numBF, u, v, w, o); break; default: o.setZero(); break; } } void BF_Tetrahedron_Curl_Nedelec(BF_INPUT) { switch (order) { case 1: switch (numBF) { case 1: o(0) = 0.; o(1) = 0.; o(2) = 2.; break; case 2: o(0) = 0.; o(1) = -2.; o(2) = 0.; break; case 3: o(0) = 0.; o(1) = 2.; o(2) = -2.; break; case 4: o(0) = 2.; o(1) = 0.; o(2) = 0.; break; case 5: o(0) = -2.; o(1) = 0.; o(2) = 2.; break; case 6: o(0) = 2.; o(1) = -2.; o(2) = 0.; break; default: o.setZero(); break; } break; case 2: BF_Tetrahedron_Curl_Nedelec_Order2(numBF, u, v, w, o); break; default: o.setZero(); break; } }