266 const UpdateFlags update_flags,
268 typename ::FiniteElement<dim, spacedim>::InternalDataBase> &data_ptr)
285 const unsigned int n_q_points = p_list.size();
287 const UpdateFlags flags(data.update_each);
290 data.sigma_imj_values.resize(
296 std::vector<std::vector<double>>(
316 std::vector<std::vector<double>> sigma(
n_q_points,
318 std::vector<std::vector<double>> lambda(
n_q_points,
327 sigma[q][0] = (1.0 - p_list[q][0]) + (1.0 - p_list[q][1]);
328 sigma[q][1] = p_list[q][0] + (1.0 - p_list[q][1]);
329 sigma[q][2] = (1.0 - p_list[q][0]) + p_list[q][1];
330 sigma[q][3] = p_list[q][0] + p_list[q][1];
332 lambda[q][0] = (1.0 - p_list[q][0]) * (1.0 - p_list[q][1]);
333 lambda[q][1] = p_list[q][0] * (1.0 - p_list[q][1]);
334 lambda[q][2] = (1.0 - p_list[q][0]) * p_list[q][1];
335 lambda[q][3] = p_list[q][0] * p_list[q][1];
338 data.sigma_imj_values[q][i][j] = sigma[q][i] - sigma[q][j];
349 {-1, -1}, {1, -1}, {-1, 1}, {1, 1}};
362 sigma_imj_sign[i][j] = (i < j) ? -1 : 1;
363 sigma_imj_sign[i][j] = (i == j) ? 0 : sigma_imj_sign[i][j];
367 sigma_imj_component[i][j] = 0;
368 for (
unsigned int d = 0; d < dim; ++d)
371 sigma_comp_signs[i][d] - sigma_comp_signs[j][d];
376 sigma_imj_component[i][j] = d;
383 data.sigma_imj_grads[i][j][sigma_imj_component[i][j]] =
384 2.0 * sigma_imj_sign[i][j];
394 std::vector<double>(dim));
407 std::vector<double>(dim));
414 const unsigned int e1(
416 const unsigned int e2(
420 data.edge_sigma_values[m][q] =
421 data.sigma_imj_values[q][e2][e1];
422 data.edge_lambda_values[m][q] = lambda[q][e1] + lambda[q][e2];
425 data.edge_sigma_grads[m][edge_sigma_direction[m]] = -2.0;
428 data.edge_lambda_grads_2d[0] = {-1.0, 0.0};
429 data.edge_lambda_grads_2d[1] = {1.0, 0.0};
430 data.edge_lambda_grads_2d[2] = {0.0, -1.0};
431 data.edge_lambda_grads_2d[3] = {0.0, 1.0};
497 const unsigned int cell_type1_offset = n_line_dofs;
504 const unsigned int cell_type2_offset =
513 const unsigned int cell_type3_offset1 =
515 const unsigned int cell_type3_offset2 = cell_type3_offset1 +
degree;
520 std::vector<Point<dim>> cell_points(
n_q_points);
522 for (
unsigned int d = 0; d < dim; ++d)
523 cell_points[q][d] = 2.0 * p_list[q][d] - 1.0;
538 const unsigned int poly_length =
543 std::vector<std::vector<double>> polyx(
544 degree, std::vector<double>(poly_length));
545 std::vector<std::vector<double>> polyy(
546 degree, std::vector<double>(poly_length));
547 for (
unsigned int i = 0; i <
degree; ++i)
553 cell_points[q][0], polyx[i]);
555 cell_points[q][1], polyy[i]);
560 for (
unsigned int j = 0; j <
degree; ++j)
562 const unsigned int shift_j(j *
degree);
563 for (
unsigned int i = 0; i <
degree; ++i)
565 const unsigned int shift_ij(i + shift_j);
568 const unsigned int dof_index1(cell_type1_offset +
570 data.shape_values[dof_index1][q][0] =
571 2.0 * polyx[i][1] * polyy[j][0];
572 data.shape_values[dof_index1][q][1] =
573 2.0 * polyx[i][0] * polyy[j][1];
576 const unsigned int dof_index2(cell_type2_offset +
578 data.shape_values[dof_index2][q][0] =
579 data.shape_values[dof_index1][q][0];
580 data.shape_values[dof_index2][q][1] =
581 -1.0 * data.shape_values[dof_index1][q][1];
584 const unsigned int dof_index3_1(cell_type3_offset1 +
586 data.shape_values[dof_index3_1][q][0] = polyy[j][0];
587 data.shape_values[dof_index3_1][q][1] = 0.0;
589 const unsigned int dof_index3_2(cell_type3_offset2 +
591 data.shape_values[dof_index3_2][q][0] = 0.0;
592 data.shape_values[dof_index3_2][q][1] = polyx[j][0];
597 for (
unsigned int j = 0; j <
degree; ++j)
599 const unsigned int shift_j(j *
degree);
600 for (
unsigned int i = 0; i <
degree; ++i)
602 const unsigned int shift_ij(i + shift_j);
605 const unsigned int dof_index1(cell_type1_offset +
607 data.shape_grads[dof_index1][q][0][0] =
608 4.0 * polyx[i][2] * polyy[j][0];
609 data.shape_grads[dof_index1][q][0][1] =
610 4.0 * polyx[i][1] * polyy[j][1];
611 data.shape_grads[dof_index1][q][1][0] =
612 data.shape_grads[dof_index1][q][0][1];
613 data.shape_grads[dof_index1][q][1][1] =
614 4.0 * polyx[i][0] * polyy[j][2];
617 const unsigned int dof_index2(cell_type2_offset +
619 data.shape_grads[dof_index2][q][0][0] =
620 data.shape_grads[dof_index1][q][0][0];
621 data.shape_grads[dof_index2][q][0][1] =
622 data.shape_grads[dof_index1][q][0][1];
623 data.shape_grads[dof_index2][q][1][0] =
624 -1.0 * data.shape_grads[dof_index1][q][1][0];
625 data.shape_grads[dof_index2][q][1][1] =
626 -1.0 * data.shape_grads[dof_index1][q][1][1];
629 const unsigned int dof_index3_1(cell_type3_offset1 +
631 data.shape_grads[dof_index3_1][q][0][0] = 0.0;
632 data.shape_grads[dof_index3_1][q][0][1] =
634 data.shape_grads[dof_index3_1][q][1][0] = 0.0;
635 data.shape_grads[dof_index3_1][q][1][1] = 0.0;
637 const unsigned int dof_index3_2(cell_type3_offset2 +
639 data.shape_grads[dof_index3_2][q][0][0] = 0.0;
640 data.shape_grads[dof_index3_2][q][0][1] = 0.0;
641 data.shape_grads[dof_index3_2][q][1][0] =
643 data.shape_grads[dof_index3_2][q][1][1] = 0.0;
648 for (
unsigned int j = 0; j <
degree; ++j)
650 const unsigned int shift_j(j *
degree);
651 for (
unsigned int i = 0; i <
degree; ++i)
653 const unsigned int shift_ij(i + shift_j);
656 const unsigned int dof_index1(cell_type1_offset +
658 data.shape_hessians[dof_index1][q][0][0][0] =
659 8.0 * polyx[i][3] * polyy[j][0];
660 data.shape_hessians[dof_index1][q][1][0][0] =
661 8.0 * polyx[i][2] * polyy[j][1];
663 data.shape_hessians[dof_index1][q][0][1][0] =
664 data.shape_hessians[dof_index1][q][1][0][0];
665 data.shape_hessians[dof_index1][q][1][1][0] =
666 8.0 * polyx[i][1] * polyy[j][2];
668 data.shape_hessians[dof_index1][q][0][0][1] =
669 data.shape_hessians[dof_index1][q][1][0][0];
670 data.shape_hessians[dof_index1][q][1][0][1] =
671 data.shape_hessians[dof_index1][q][1][1][0];
673 data.shape_hessians[dof_index1][q][0][1][1] =
674 data.shape_hessians[dof_index1][q][1][1][0];
675 data.shape_hessians[dof_index1][q][1][1][1] =
676 8.0 * polyx[i][0] * polyy[j][3];
681 const unsigned int dof_index2(cell_type2_offset +
683 for (
unsigned int d = 0; d < dim; ++d)
685 data.shape_hessians[dof_index2][q][0][0][d] =
686 data.shape_hessians[dof_index1][q][0][0][d];
687 data.shape_hessians[dof_index2][q][0][1][d] =
688 data.shape_hessians[dof_index1][q][0][1][d];
689 data.shape_hessians[dof_index2][q][1][0][d] =
691 data.shape_hessians[dof_index1][q][1][0][d];
692 data.shape_hessians[dof_index2][q][1][1][d] =
694 data.shape_hessians[dof_index1][q][1][1][d];
698 const unsigned int dof_index3_1(cell_type3_offset1 +
700 data.shape_hessians[dof_index3_1][q][0][0][0] = 0.0;
701 data.shape_hessians[dof_index3_1][q][0][0][1] = 0.0;
702 data.shape_hessians[dof_index3_1][q][0][1][0] = 0.0;
703 data.shape_hessians[dof_index3_1][q][0][1][1] =
705 data.shape_hessians[dof_index3_1][q][1][0][0] = 0.0;
706 data.shape_hessians[dof_index3_1][q][1][0][1] = 0.0;
707 data.shape_hessians[dof_index3_1][q][1][1][0] = 0.0;
708 data.shape_hessians[dof_index3_1][q][1][1][1] = 0.0;
710 const unsigned int dof_index3_2(cell_type3_offset2 +
712 data.shape_hessians[dof_index3_2][q][0][0][0] = 0.0;
713 data.shape_hessians[dof_index3_2][q][0][0][1] = 0.0;
714 data.shape_hessians[dof_index3_2][q][0][1][0] = 0.0;
715 data.shape_hessians[dof_index3_2][q][0][1][1] = 0.0;
716 data.shape_hessians[dof_index3_2][q][1][0][0] =
718 data.shape_hessians[dof_index3_2][q][1][0][1] = 0.0;
719 data.shape_hessians[dof_index3_2][q][1][1][0] = 0.0;
720 data.shape_hessians[dof_index3_2][q][1][1][1] = 0.0;
732 sigma[q][0] = (1.0 - p_list[q][0]) + (1.0 - p_list[q][1]) +
735 p_list[q][0] + (1.0 - p_list[q][1]) + (1 - p_list[q][2]);
737 (1.0 - p_list[q][0]) + p_list[q][1] + (1 - p_list[q][2]);
738 sigma[q][3] = p_list[q][0] + p_list[q][1] + (1 - p_list[q][2]);
740 (1.0 - p_list[q][0]) + (1.0 - p_list[q][1]) + p_list[q][2];
741 sigma[q][5] = p_list[q][0] + (1.0 - p_list[q][1]) + p_list[q][2];
742 sigma[q][6] = (1.0 - p_list[q][0]) + p_list[q][1] + p_list[q][2];
743 sigma[q][7] = p_list[q][0] + p_list[q][1] + p_list[q][2];
745 lambda[q][0] = (1.0 - p_list[q][0]) * (1.0 - p_list[q][1]) *
746 (1.0 - p_list[q][2]);
748 p_list[q][0] * (1.0 - p_list[q][1]) * (1.0 - p_list[q][2]);
750 (1.0 - p_list[q][0]) * p_list[q][1] * (1.0 - p_list[q][2]);
751 lambda[q][3] = p_list[q][0] * p_list[q][1] * (1.0 - p_list[q][2]);
753 (1.0 - p_list[q][0]) * (1.0 - p_list[q][1]) * p_list[q][2];
754 lambda[q][5] = p_list[q][0] * (1.0 - p_list[q][1]) * p_list[q][2];
755 lambda[q][6] = (1.0 - p_list[q][0]) * p_list[q][1] * p_list[q][2];
756 lambda[q][7] = p_list[q][0] * p_list[q][1] * p_list[q][2];
762 data.sigma_imj_values[q][i][j] = sigma[q][i] - sigma[q][j];
805 sigma_imj_sign[i][j] = (i < j) ? -1 : 1;
806 sigma_imj_sign[i][j] = (i == j) ? 0 : sigma_imj_sign[i][j];
810 sigma_imj_component[i][j] = 0;
811 for (
unsigned int d = 0; d < dim; ++d)
814 sigma_comp_signs[i][d] - sigma_comp_signs[j][d];
819 sigma_imj_component[i][j] = d;
826 data.sigma_imj_grads[i][j][sigma_imj_component[i][j]] =
827 2.0 * sigma_imj_sign[i][j];
839 std::vector<double>(dim));
840 data.edge_lambda_grads_3d.resize(
843 std::vector<double>(dim)));
844 data.edge_lambda_gradgrads_3d.resize(
846 std::vector<std::vector<double>>(dim, std::vector<double>(dim)));
851 1, 1, 0, 0, 1, 1, 0, 0, 2, 2, 2, 2};
858 const unsigned int e1(
860 const unsigned int e2(
865 data.edge_sigma_values[m][q] =
866 data.sigma_imj_values[q][e2][e1];
867 data.edge_lambda_values[m][q] = lambda[q][e1] + lambda[q][e2];
870 data.edge_sigma_grads[m][edge_sigma_direction[m]] = -2.0;
876 double x(p_list[q][0]);
877 double y(p_list[q][1]);
878 double z(p_list[q][2]);
879 data.edge_lambda_grads_3d[0][q] = {z - 1.0, 0.0, x - 1.0};
880 data.edge_lambda_grads_3d[1][q] = {1.0 - z, 0.0, -x};
881 data.edge_lambda_grads_3d[2][q] = {0.0, z - 1.0, y - 1.0};
882 data.edge_lambda_grads_3d[3][q] = {0.0, 1.0 - z, -y};
883 data.edge_lambda_grads_3d[4][q] = {-z, 0.0, 1.0 - x};
884 data.edge_lambda_grads_3d[5][q] = {z, 0.0, x};
885 data.edge_lambda_grads_3d[6][q] = {0.0, -z, 1.0 - y};
886 data.edge_lambda_grads_3d[7][q] = {0.0, z, y};
887 data.edge_lambda_grads_3d[8][q] = {y - 1.0, x - 1.0, 0.0};
888 data.edge_lambda_grads_3d[9][q] = {1.0 - y, -x, 0.0};
889 data.edge_lambda_grads_3d[10][q] = {-y, 1.0 - x, 0.0};
890 data.edge_lambda_grads_3d[11][q] = {y, x, 0.0};
895 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, 1};
916 data.edge_lambda_gradgrads_3d[m][edge_lambda_directions[m][0]]
917 [edge_lambda_directions[m][1]] =
919 data.edge_lambda_gradgrads_3d[m][edge_lambda_directions[m][1]]
920 [edge_lambda_directions[m][0]] =
932 std::vector<double>(dim));
937 double x(p_list[q][0]);
938 double y(p_list[q][1]);
939 double z(p_list[q][2]);
940 data.face_lambda_values[0][q] = 1.0 - x;
941 data.face_lambda_values[1][q] = x;
942 data.face_lambda_values[2][q] = 1.0 - y;
943 data.face_lambda_values[3][q] = y;
944 data.face_lambda_values[4][q] = 1.0 - z;
945 data.face_lambda_values[5][q] = z;
949 data.face_lambda_grads[0] = {-1.0, 0.0, 0.0};
950 data.face_lambda_grads[1] = {1.0, 0.0, 0.0};
951 data.face_lambda_grads[2] = {0.0, -1.0, 0.0};
952 data.face_lambda_grads[3] = {0.0, 1.0, 0.0};
953 data.face_lambda_grads[4] = {0.0, 0.0, -1.0};
954 data.face_lambda_grads[5] = {0.0, 0.0, 1.0};
967 const unsigned int cell_type1_offset(n_line_dofs + n_face_dofs);
979 const unsigned int cell_type2_offset1(cell_type1_offset +
981 const unsigned int cell_type2_offset2(cell_type2_offset1 +
992 const unsigned int cell_type3_offset1(cell_type2_offset2 +
994 const unsigned int cell_type3_offset2(cell_type3_offset1 +
996 const unsigned int cell_type3_offset3(cell_type3_offset2 +
1000 std::vector<Point<dim>> cell_points(
n_q_points);
1001 for (
unsigned int q = 0; q <
n_q_points; ++q)
1003 for (
unsigned int d = 0; d < dim; ++d)
1005 cell_points[q][d] = 2.0 * p_list[q][d] - 1.0;
1013 const unsigned int poly_length =
1019 for (
unsigned int q = 0; q <
n_q_points; ++q)
1027 std::vector<std::vector<double>> polyx(
1028 degree, std::vector<double>(poly_length));
1029 std::vector<std::vector<double>> polyy(
1030 degree, std::vector<double>(poly_length));
1031 std::vector<std::vector<double>> polyz(
1032 degree, std::vector<double>(poly_length));
1033 for (
unsigned int i = 0; i <
degree; ++i)
1037 cell_points[q][0], polyx[i]);
1039 cell_points[q][1], polyy[i]);
1041 cell_points[q][2], polyz[i]);
1046 for (
unsigned int k = 0; k <
degree; ++k)
1049 const unsigned int shift_j(
1052 for (
unsigned int j = 0; j <
degree; ++j)
1054 const unsigned int shift_jk(j *
degree + shift_k);
1055 for (
unsigned int i = 0; i <
degree; ++i)
1057 const unsigned int shift_ijk(shift_jk + i);
1060 const unsigned int dof_index1(
1061 cell_type1_offset + shift_ijk);
1063 data.shape_values[dof_index1][q][0] =
1064 2.0 * polyx[i][1] * polyy[j][0] *
1066 data.shape_values[dof_index1][q][1] =
1067 2.0 * polyx[i][0] * polyy[j][1] *
1069 data.shape_values[dof_index1][q][2] =
1070 2.0 * polyx[i][0] * polyy[j][0] *
1074 const unsigned int dof_index2_1(
1075 cell_type2_offset1 + shift_ijk);
1076 const unsigned int dof_index2_2(
1077 cell_type2_offset2 + shift_ijk);
1079 data.shape_values[dof_index2_1][q][0] =
1080 data.shape_values[dof_index1][q][0];
1081 data.shape_values[dof_index2_1][q][1] =
1082 -1.0 * data.shape_values[dof_index1][q][1];
1083 data.shape_values[dof_index2_1][q][2] =
1084 data.shape_values[dof_index1][q][2];
1086 data.shape_values[dof_index2_2][q][0] =
1087 data.shape_values[dof_index1][q][0];
1088 data.shape_values[dof_index2_2][q][1] =
1089 -1.0 * data.shape_values[dof_index1][q][1];
1090 data.shape_values[dof_index2_2][q][2] =
1091 -1.0 * data.shape_values[dof_index1][q][2];
1095 const unsigned int shift_ij(
1098 const unsigned int dof_index3_1(
1099 cell_type3_offset1 + shift_ij);
1100 const unsigned int dof_index3_2(
1101 cell_type3_offset2 + shift_ij);
1102 const unsigned int dof_index3_3(
1103 cell_type3_offset3 + shift_ij);
1105 data.shape_values[dof_index3_1][q][0] =
1106 polyy[j][0] * polyz[k][0];
1107 data.shape_values[dof_index3_1][q][1] = 0.0;
1108 data.shape_values[dof_index3_1][q][2] = 0.0;
1110 data.shape_values[dof_index3_2][q][0] = 0.0;
1111 data.shape_values[dof_index3_2][q][1] =
1112 polyx[j][0] * polyz[k][0];
1113 data.shape_values[dof_index3_2][q][2] = 0.0;
1115 data.shape_values[dof_index3_3][q][0] = 0.0;
1116 data.shape_values[dof_index3_3][q][1] = 0.0;
1117 data.shape_values[dof_index3_3][q][2] =
1118 polyx[j][0] * polyy[k][0];
1124 for (
unsigned int k = 0; k <
degree; ++k)
1127 const unsigned int shift_j(
1130 for (
unsigned int j = 0; j <
degree; ++j)
1132 const unsigned int shift_jk(j *
degree + shift_k);
1133 for (
unsigned int i = 0; i <
degree; ++i)
1135 const unsigned int shift_ijk(shift_jk + i);
1138 const unsigned int dof_index1(
1139 cell_type1_offset + shift_ijk);
1141 data.shape_grads[dof_index1][q][0][0] =
1142 4.0 * polyx[i][2] * polyy[j][0] *
1144 data.shape_grads[dof_index1][q][0][1] =
1145 4.0 * polyx[i][1] * polyy[j][1] *
1147 data.shape_grads[dof_index1][q][0][2] =
1148 4.0 * polyx[i][1] * polyy[j][0] *
1151 data.shape_grads[dof_index1][q][1][0] =
1152 data.shape_grads[dof_index1][q][0][1];
1153 data.shape_grads[dof_index1][q][1][1] =
1154 4.0 * polyx[i][0] * polyy[j][2] *
1156 data.shape_grads[dof_index1][q][1][2] =
1157 4.0 * polyx[i][0] * polyy[j][1] *
1160 data.shape_grads[dof_index1][q][2][0] =
1161 data.shape_grads[dof_index1][q][0][2];
1162 data.shape_grads[dof_index1][q][2][1] =
1163 data.shape_grads[dof_index1][q][1][2];
1164 data.shape_grads[dof_index1][q][2][2] =
1165 4.0 * polyx[i][0] * polyy[j][0] *
1169 const unsigned int dof_index2_1(
1170 cell_type2_offset1 + shift_ijk);
1171 const unsigned int dof_index2_2(
1172 cell_type2_offset2 + shift_ijk);
1174 for (
unsigned int d = 0; d < dim; ++d)
1176 data.shape_grads[dof_index2_1][q][0][d] =
1177 data.shape_grads[dof_index1][q][0][d];
1178 data.shape_grads[dof_index2_1][q][1][d] =
1180 data.shape_grads[dof_index1][q][1][d];
1181 data.shape_grads[dof_index2_1][q][2][d] =
1182 data.shape_grads[dof_index1][q][2][d];
1184 data.shape_grads[dof_index2_2][q][0][d] =
1185 data.shape_grads[dof_index1][q][0][d];
1186 data.shape_grads[dof_index2_2][q][1][d] =
1188 data.shape_grads[dof_index1][q][1][d];
1189 data.shape_grads[dof_index2_2][q][2][d] =
1191 data.shape_grads[dof_index1][q][2][d];
1196 const unsigned int shift_ij(
1199 const unsigned int dof_index3_1(
1200 cell_type3_offset1 + shift_ij);
1201 const unsigned int dof_index3_2(
1202 cell_type3_offset2 + shift_ij);
1203 const unsigned int dof_index3_3(
1204 cell_type3_offset3 + shift_ij);
1205 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1207 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1210 .shape_grads[dof_index3_1][q][d1][d2] =
1213 .shape_grads[dof_index3_2][q][d1][d2] =
1216 .shape_grads[dof_index3_3][q][d1][d2] =
1220 data.shape_grads[dof_index3_1][q][0][1] =
1221 2.0 * polyy[j][1] * polyz[k][0];
1222 data.shape_grads[dof_index3_1][q][0][2] =
1223 2.0 * polyy[j][0] * polyz[k][1];
1225 data.shape_grads[dof_index3_2][q][1][0] =
1226 2.0 * polyx[j][1] * polyz[k][0];
1227 data.shape_grads[dof_index3_2][q][1][2] =
1228 2.0 * polyx[j][0] * polyz[k][1];
1230 data.shape_grads[dof_index3_3][q][2][0] =
1231 2.0 * polyx[j][1] * polyy[k][0];
1232 data.shape_grads[dof_index3_3][q][2][1] =
1233 2.0 * polyx[j][0] * polyy[k][1];
1239 for (
unsigned int k = 0; k <
degree; ++k)
1242 const unsigned int shift_j(
1246 for (
unsigned int j = 0; j <
degree; ++j)
1248 const unsigned int shift_jk(j *
degree + shift_k);
1249 for (
unsigned int i = 0; i <
degree; ++i)
1251 const unsigned int shift_ijk(shift_jk + i);
1254 const unsigned int dof_index1(
1255 cell_type1_offset + shift_ijk);
1257 data.shape_hessians[dof_index1][q][0][0][0] =
1258 8.0 * polyx[i][3] * polyy[j][0] *
1260 data.shape_hessians[dof_index1][q][1][0][0] =
1261 8.0 * polyx[i][2] * polyy[j][1] *
1263 data.shape_hessians[dof_index1][q][2][0][0] =
1264 8.0 * polyx[i][2] * polyy[j][0] *
1267 data.shape_hessians[dof_index1][q][0][1][0] =
1268 data.shape_hessians[dof_index1][q][1][0][0];
1269 data.shape_hessians[dof_index1][q][1][1][0] =
1270 8.0 * polyx[i][1] * polyy[j][2] *
1272 data.shape_hessians[dof_index1][q][2][1][0] =
1273 8.0 * polyx[i][1] * polyy[j][1] *
1276 data.shape_hessians[dof_index1][q][0][2][0] =
1277 data.shape_hessians[dof_index1][q][2][0][0];
1278 data.shape_hessians[dof_index1][q][1][2][0] =
1279 data.shape_hessians[dof_index1][q][2][1][0];
1280 data.shape_hessians[dof_index1][q][2][2][0] =
1281 8.0 * polyx[i][1] * polyy[j][0] *
1285 data.shape_hessians[dof_index1][q][0][0][1] =
1286 data.shape_hessians[dof_index1][q][1][0][0];
1287 data.shape_hessians[dof_index1][q][1][0][1] =
1288 data.shape_hessians[dof_index1][q][1][1][0];
1289 data.shape_hessians[dof_index1][q][2][0][1] =
1290 data.shape_hessians[dof_index1][q][2][1][0];
1292 data.shape_hessians[dof_index1][q][0][1][1] =
1293 data.shape_hessians[dof_index1][q][1][1][0];
1294 data.shape_hessians[dof_index1][q][1][1][1] =
1295 8.0 * polyx[i][0] * polyy[j][3] *
1297 data.shape_hessians[dof_index1][q][2][1][1] =
1298 8.0 * polyx[i][0] * polyy[j][2] *
1301 data.shape_hessians[dof_index1][q][0][2][1] =
1302 data.shape_hessians[dof_index1][q][2][1][0];
1303 data.shape_hessians[dof_index1][q][1][2][1] =
1304 data.shape_hessians[dof_index1][q][2][1][1];
1305 data.shape_hessians[dof_index1][q][2][2][1] =
1306 8.0 * polyx[i][0] * polyy[j][1] *
1310 data.shape_hessians[dof_index1][q][0][0][2] =
1311 data.shape_hessians[dof_index1][q][2][0][0];
1312 data.shape_hessians[dof_index1][q][1][0][2] =
1313 data.shape_hessians[dof_index1][q][2][1][0];
1314 data.shape_hessians[dof_index1][q][2][0][2] =
1315 data.shape_hessians[dof_index1][q][2][2][0];
1317 data.shape_hessians[dof_index1][q][0][1][2] =
1318 data.shape_hessians[dof_index1][q][2][1][0];
1319 data.shape_hessians[dof_index1][q][1][1][2] =
1320 data.shape_hessians[dof_index1][q][2][1][1];
1321 data.shape_hessians[dof_index1][q][2][1][2] =
1322 data.shape_hessians[dof_index1][q][2][2][1];
1324 data.shape_hessians[dof_index1][q][0][2][2] =
1325 data.shape_hessians[dof_index1][q][2][2][0];
1326 data.shape_hessians[dof_index1][q][1][2][2] =
1327 data.shape_hessians[dof_index1][q][2][2][1];
1328 data.shape_hessians[dof_index1][q][2][2][2] =
1329 8.0 * polyx[i][0] * polyy[j][0] *
1334 const unsigned int dof_index2_1(
1335 cell_type2_offset1 + shift_ijk);
1336 const unsigned int dof_index2_2(
1337 cell_type2_offset2 + shift_ijk);
1339 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1341 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1343 data.shape_hessians[dof_index2_1][q]
1345 data.shape_hessians[dof_index1][q]
1347 data.shape_hessians[dof_index2_1][q]
1350 data.shape_hessians[dof_index1][q]
1352 data.shape_hessians[dof_index2_1][q]
1354 data.shape_hessians[dof_index1][q]
1357 data.shape_hessians[dof_index2_2][q]
1359 data.shape_hessians[dof_index1][q]
1361 data.shape_hessians[dof_index2_2][q]
1364 data.shape_hessians[dof_index1][q]
1366 data.shape_hessians[dof_index2_2][q]
1369 data.shape_hessians[dof_index1][q]
1376 const unsigned int shift_ij(
1379 const unsigned int dof_index3_1(
1380 cell_type3_offset1 + shift_ij);
1381 const unsigned int dof_index3_2(
1382 cell_type3_offset2 + shift_ij);
1383 const unsigned int dof_index3_3(
1384 cell_type3_offset3 + shift_ij);
1385 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1387 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1389 for (
unsigned int d3 = 0; d3 < dim; ++d3)
1391 data.shape_hessians[dof_index3_1][q]
1393 data.shape_hessians[dof_index3_2][q]
1395 data.shape_hessians[dof_index3_3][q]
1400 data.shape_hessians[dof_index3_1][q][0][1][1] =
1401 4.0 * polyy[j][2] * polyz[k][0];
1402 data.shape_hessians[dof_index3_1][q][0][1][2] =
1403 4.0 * polyy[j][1] * polyz[k][1];
1405 data.shape_hessians[dof_index3_1][q][0][2][1] =
1406 data.shape_hessians[dof_index3_1][q][0][1][2];
1407 data.shape_hessians[dof_index3_1][q][0][2][2] =
1408 4.0 * polyy[j][0] * polyz[k][2];
1411 data.shape_hessians[dof_index3_2][q][1][0][0] =
1412 4.0 * polyx[j][2] * polyz[k][0];
1413 data.shape_hessians[dof_index3_2][q][1][0][2] =
1414 4.0 * polyx[j][1] * polyz[k][1];
1416 data.shape_hessians[dof_index3_2][q][1][2][0] =
1417 data.shape_hessians[dof_index3_2][q][1][0][2];
1418 data.shape_hessians[dof_index3_2][q][1][2][2] =
1419 4.0 * polyx[j][0] * polyz[k][2];
1422 data.shape_hessians[dof_index3_3][q][2][0][0] =
1423 4.0 * polyx[j][2] * polyy[k][0];
1424 data.shape_hessians[dof_index3_3][q][2][0][1] =
1425 4.0 * polyx[j][1] * polyy[k][1];
1427 data.shape_hessians[dof_index3_3][q][2][1][0] =
1428 data.shape_hessians[dof_index3_3][q][2][0][1];
1429 data.shape_hessians[dof_index3_3][q][2][1][1] =
1430 4.0 * polyx[j][0] * polyy[k][2];
1498 fe_data.
shape_values.size() == this->n_dofs_per_cell(),
1500 this->n_dofs_per_cell()));
1506 const unsigned int degree(
1511 const unsigned int vertices_per_line(2);
1515 std::vector<std::vector<unsigned int>> edge_order(
1531 unsigned int v0_loc =
1533 unsigned int v1_loc =
1541 if (cell->
face(m)->at_boundary() ==
false)
1548 if (v0_glob > v1_glob)
1551 edge_sign[m] = -1.0;
1595 std::vector<std::vector<double>> edge_sigma_values(
1597 std::vector<std::vector<double>> edge_sigma_grads(
1600 std::vector<std::vector<double>> edge_lambda_values(
1602 std::vector<std::vector<double>> edge_lambda_grads(
1608 std::transform(edge_sigma_values[m].
begin(),
1609 edge_sigma_values[m].
end(),
1610 edge_sigma_values[m].
begin(),
1611 [&](
const double edge_sigma_value) {
1612 return edge_sign[m] * edge_sigma_value;
1615 std::transform(edge_sigma_grads[m].
begin(),
1616 edge_sigma_grads[m].
end(),
1617 edge_sigma_grads[m].
begin(),
1618 [&](
const double edge_sigma_grad) {
1619 return edge_sign[m] * edge_sigma_grad;
1626 const unsigned int poly_length =
1635 for (
unsigned int q = 0; q <
n_q_points; ++q)
1638 std::vector<std::vector<double>> poly(
1639 degree, std::vector<double>(poly_length));
1640 for (
unsigned int i = 1; i <
degree + 1; ++i)
1646 edge_sigma_values[m][q], poly[i - 1]);
1651 for (
unsigned int d = 0; d < dim; ++d)
1654 0.5 * edge_sigma_grads[m][d] *
1655 edge_lambda_values[m][q];
1658 for (
unsigned int i = 1; i <
degree + 1; ++i)
1660 const unsigned int poly_index = i - 1;
1661 const unsigned int dof_index(i + shift_m);
1662 for (
unsigned int d = 0; d < dim; ++d)
1665 edge_sigma_grads[m][d] *
1666 poly[poly_index][1] *
1667 edge_lambda_values[m][q] +
1668 poly[poly_index][0] *
1669 edge_lambda_grads[m][d];
1676 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1678 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1683 0.5 * edge_sigma_grads[m][d1] *
1684 edge_lambda_grads[m][d2];
1688 for (
unsigned int i = 1; i <
degree + 1; ++i)
1690 const unsigned int poly_index = i - 1;
1691 const unsigned int dof_index(i + shift_m);
1694 edge_sigma_grads[m][0] *
1695 edge_sigma_grads[m][0] *
1696 edge_lambda_values[m][q] * poly[poly_index][2];
1699 (edge_sigma_grads[m][0] *
1700 edge_lambda_grads[m][1] +
1701 edge_sigma_grads[m][1] *
1702 edge_lambda_grads[m][0]) *
1703 poly[poly_index][1];
1709 edge_sigma_grads[m][1] *
1710 edge_sigma_grads[m][1] *
1711 edge_lambda_values[m][q] * poly[poly_index][2];
1717 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1719 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1721 for (
unsigned int d3 = 0; d3 < dim; ++d3)
1730 for (
unsigned int i = 0; i <
degree; ++i)
1732 const unsigned int dof_index(i + 1 + shift_m);
1734 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1736 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1738 for (
unsigned int d3 = 0; d3 < dim; ++d3)
1742 edge_sigma_grads[m][d1] *
1743 edge_sigma_grads[m][d2] *
1744 edge_sigma_grads[m][d3] *
1746 edge_lambda_values[m][q] +
1748 (edge_sigma_grads[m][d1] *
1749 edge_sigma_grads[m][d2] *
1750 edge_lambda_grads[m][d3] +
1751 edge_sigma_grads[m][d3] *
1752 edge_sigma_grads[m][d1] *
1753 edge_lambda_grads[m][d2] +
1754 edge_sigma_grads[m][d3] *
1755 edge_sigma_grads[m][d2] *
1756 edge_lambda_grads[m][d1]);
1775 std::vector<bool> line_neighbor_is_coarser(
1781 if (!cell->
face(f)->at_boundary())
1783 for (
unsigned int m = 0;
1784 m < GeometryInfo<dim>::lines_per_face;
1786 line_neighbor_is_coarser
1823 if (line_neighbor_is_coarser[line])
1827 const int cell_level = cell->
level();
1828 for (
auto &neighbor_cell :
1830 if (neighbor_cell->level() != cell_level)
1832 line_neighbor_is_coarser[line] =
true;
1839 const unsigned int v0_loc =
1841 const unsigned int v1_loc =
1845 unsigned int v0_glob;
1846 unsigned int v1_glob;
1847 if (line_neighbor_is_coarser[line])
1861 if (v0_glob > v1_glob)
1864 edge_sign[line] = -1.0;
1869 edge_sign[line] = 1.0;
1910 std::vector<std::vector<double>> edge_sigma_values(
1912 std::vector<std::vector<double>> edge_lambda_values(
1914 std::vector<std::vector<double>> edge_sigma_grads(
1916 std::vector<std::vector<std::vector<double>>> edge_lambda_grads(
1918 std::vector<std::vector<std::vector<double>>>
1924 std::transform(edge_sigma_values[m].
begin(),
1925 edge_sigma_values[m].
end(),
1926 edge_sigma_values[m].
begin(),
1927 [&](
const double edge_sigma_value) {
1928 return edge_sign[m] * edge_sigma_value;
1930 std::transform(edge_sigma_grads[m].
begin(),
1931 edge_sigma_grads[m].
end(),
1932 edge_sigma_grads[m].
begin(),
1933 [&](
const double edge_sigma_grad) {
1934 return edge_sign[m] * edge_sigma_grad;
1942 const unsigned int poly_length =
1947 std::vector<std::vector<double>> poly(
1948 degree, std::vector<double>(poly_length));
1952 for (
unsigned int q = 0; q <
n_q_points; ++q)
1958 for (
unsigned int i = 0; i <
degree; ++i)
1961 edge_sigma_values[m][q], poly[i]);
1967 for (
unsigned int d = 0; d < dim; ++d)
1970 0.5 * edge_sigma_grads[m][d] *
1971 edge_lambda_values[m][q];
1976 for (
unsigned int i = 0; i <
degree; ++i)
1978 const unsigned int dof_index(i + 1 + shift_m);
1979 for (
unsigned int d = 0; d < dim; ++d)
1982 edge_sigma_grads[m][d] * poly[i][1] *
1983 edge_lambda_values[m][q] +
1984 poly[i][0] * edge_lambda_grads[m][q][d];
1992 for (
unsigned int d1 = 0; d1 < dim; ++d1)
1994 for (
unsigned int d2 = 0; d2 < dim; ++d2)
1997 0.5 * edge_sigma_grads[m][d1] *
1998 edge_lambda_grads[m][q][d2];
2004 for (
unsigned int i = 0; i <
degree; ++i)
2006 const unsigned int dof_index(i + 1 + shift_m);
2008 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2010 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2014 edge_sigma_grads[m][d1] *
2015 edge_sigma_grads[m][d2] *
2017 edge_lambda_values[m][q] +
2018 (edge_sigma_grads[m][d1] *
2019 edge_lambda_grads[m][q][d2] +
2020 edge_sigma_grads[m][d2] *
2021 edge_lambda_grads[m][q][d1]) *
2023 edge_lambda_gradgrads_3d[m][d1]
2034 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2036 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2038 for (
unsigned int d3 = 0; d3 < dim; ++d3)
2042 0.5 * edge_sigma_grads[m][d1] *
2043 edge_lambda_gradgrads_3d[m][d3][d2];
2051 for (
unsigned int i = 0; i <
degree; ++i)
2053 const unsigned int dof_index(i + 1 + shift_m);
2055 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2057 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2059 for (
unsigned int d3 = 0; d3 < dim;
2065 edge_sigma_grads[m][d1] *
2066 edge_sigma_grads[m][d2] *
2067 edge_sigma_grads[m][d3] *
2069 edge_lambda_values[m][q] +
2071 (edge_sigma_grads[m][d1] *
2072 edge_sigma_grads[m][d2] *
2073 edge_lambda_grads[m][q]
2075 edge_sigma_grads[m][d3] *
2076 edge_sigma_grads[m][d1] *
2077 edge_lambda_grads[m][q]
2079 edge_sigma_grads[m][d3] *
2080 edge_sigma_grads[m][d2] *
2081 edge_lambda_grads[m][q]
2084 (edge_sigma_grads[m][d1] *
2085 edge_lambda_gradgrads_3d
2087 edge_sigma_grads[m][d2] *
2088 edge_lambda_gradgrads_3d
2090 edge_sigma_grads[m][d3] *
2091 edge_lambda_gradgrads_3d
2133 const unsigned int degree(
2147 fe_data.
shape_values.size() == this->n_dofs_per_cell(),
2149 this->n_dofs_per_cell()));
2161 const unsigned int n_line_dofs =
2165 std::vector<std::vector<unsigned int>> face_orientation(
2176 {1, 2}, {0, 3}, {3, 0}, {2, 1}};
2181 bool cell_has_coarser_neighbor =
false;
2182 if (cell->
face(m)->at_boundary() ==
false)
2184 cell_has_coarser_neighbor =
true;
2188 unsigned int current_max = 0;
2193 if (cell_has_coarser_neighbor)
2228 face_orientation[m][0] =
2233 m, vertex_opposite_on_face[current_max]);
2241 if (cell_has_coarser_neighbor)
2245 m, vertices_adjacent_on_face[current_max][0])) >
2248 m, vertices_adjacent_on_face[current_max][1])))
2250 face_orientation[m][1] =
2252 m, vertices_adjacent_on_face[current_max][0]);
2253 face_orientation[m][3] =
2255 m, vertices_adjacent_on_face[current_max][1]);
2259 face_orientation[m][1] =
2261 m, vertices_adjacent_on_face[current_max][1]);
2262 face_orientation[m][3] =
2264 m, vertices_adjacent_on_face[current_max][0]);
2271 m, vertices_adjacent_on_face[current_max][0])) >
2274 m, vertices_adjacent_on_face[current_max][1])))
2276 face_orientation[m][1] =
2278 m, vertices_adjacent_on_face[current_max][0]);
2279 face_orientation[m][3] =
2281 m, vertices_adjacent_on_face[current_max][1]);
2285 face_orientation[m][1] =
2287 m, vertices_adjacent_on_face[current_max][1]);
2288 face_orientation[m][3] =
2290 m, vertices_adjacent_on_face[current_max][0]);
2296 std::vector<std::vector<double>> face_xi_values(
2298 std::vector<std::vector<double>> face_xi_grads(
2300 std::vector<std::vector<double>> face_eta_values(
2302 std::vector<std::vector<double>> face_eta_grads(
2305 std::vector<std::vector<double>> face_lambda_values(
2307 std::vector<std::vector<double>> face_lambda_grads(
2311 for (
unsigned int q = 0; q <
n_q_points; ++q)
2313 face_xi_values[m][q] =
2315 [face_orientation[m][1]];
2316 face_eta_values[m][q] =
2318 [face_orientation[m][3]];
2321 for (
unsigned int d = 0; d < dim; ++d)
2323 face_xi_grads[m][d] =
2325 [face_orientation[m][1]][d];
2326 face_eta_grads[m][d] =
2328 [face_orientation[m][3]][d];
2334 const unsigned int poly_length =
2339 std::vector<std::vector<double>> polyxi(
2340 degree, std::vector<double>(poly_length));
2341 std::vector<std::vector<double>> polyeta(
2342 degree, std::vector<double>(poly_length));
2356 const unsigned int face_type1_offset(n_line_dofs + shift_m);
2366 const unsigned int face_type2_offset(face_type1_offset +
2379 const unsigned int face_type3_offset1(face_type2_offset +
2381 const unsigned int face_type3_offset2(face_type3_offset1 +
2385 for (
unsigned int q = 0; q <
n_q_points; ++q)
2394 for (
unsigned int i = 0; i <
degree; ++i)
2398 face_xi_values[m][q], polyxi[i]);
2400 face_eta_values[m][q], polyeta[i]);
2405 for (
unsigned int j = 0; j <
degree; ++j)
2407 const unsigned int shift_j(j *
degree);
2408 for (
unsigned int i = 0; i <
degree; ++i)
2410 const unsigned int shift_ij(shift_j + i);
2412 const unsigned int dof_index1(face_type1_offset +
2414 for (
unsigned int d = 0; d < dim; ++d)
2417 (face_xi_grads[m][d] * polyxi[i][1] *
2419 face_eta_grads[m][d] * polyxi[i][0] *
2421 face_lambda_values[m][q] +
2422 face_lambda_grads[m][d] * polyxi[i][0] *
2426 const unsigned int dof_index2(face_type2_offset +
2428 for (
unsigned int d = 0; d < dim; ++d)
2431 (face_xi_grads[m][d] * polyxi[i][1] *
2433 face_eta_grads[m][d] * polyxi[i][0] *
2435 face_lambda_values[m][q];
2439 const unsigned int dof_index3_1(face_type3_offset1 +
2441 const unsigned int dof_index3_2(face_type3_offset2 +
2443 for (
unsigned int d = 0; d < dim; ++d)
2446 face_xi_grads[m][d] * polyeta[j][0] *
2447 face_lambda_values[m][q];
2450 face_eta_grads[m][d] * polyxi[j][0] *
2451 face_lambda_values[m][q];
2457 for (
unsigned int j = 0; j <
degree; ++j)
2459 const unsigned int shift_j(j *
degree);
2460 for (
unsigned int i = 0; i <
degree; ++i)
2462 const unsigned int shift_ij(shift_j + i);
2464 const unsigned int dof_index1(face_type1_offset +
2466 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2468 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2472 (face_xi_grads[m][d1] *
2473 face_xi_grads[m][d2] * polyxi[i][2] *
2475 (face_xi_grads[m][d1] *
2476 face_eta_grads[m][d2] +
2477 face_xi_grads[m][d2] *
2478 face_eta_grads[m][d1]) *
2479 polyxi[i][1] * polyeta[j][1] +
2480 face_eta_grads[m][d1] *
2481 face_eta_grads[m][d2] *
2482 polyxi[i][0] * polyeta[j][2]) *
2483 face_lambda_values[m][q] +
2484 (face_xi_grads[m][d2] * polyxi[i][1] *
2486 face_eta_grads[m][d2] * polyxi[i][0] *
2488 face_lambda_grads[m][d1] +
2489 (face_xi_grads[m][d1] * polyxi[i][1] *
2491 face_eta_grads[m][d1] * polyxi[i][0] *
2493 face_lambda_grads[m][d2];
2497 const unsigned int dof_index2(face_type2_offset +
2499 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2501 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2505 (face_xi_grads[m][d1] *
2506 face_xi_grads[m][d2] * polyxi[i][2] *
2508 (face_xi_grads[m][d1] *
2509 face_eta_grads[m][d2] -
2510 face_xi_grads[m][d2] *
2511 face_eta_grads[m][d1]) *
2512 polyxi[i][1] * polyeta[j][1] -
2513 face_eta_grads[m][d1] *
2514 face_eta_grads[m][d2] *
2515 polyxi[i][0] * polyeta[j][2]) *
2516 face_lambda_values[m][q] +
2517 (face_xi_grads[m][d1] * polyxi[i][1] *
2519 face_eta_grads[m][d1] * polyxi[i][0] *
2521 face_lambda_grads[m][d2];
2526 const unsigned int dof_index3_1(face_type3_offset1 +
2528 const unsigned int dof_index3_2(face_type3_offset2 +
2530 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2532 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2535 face_xi_grads[m][d1] *
2536 (face_eta_grads[m][d2] * polyeta[j][1] *
2537 face_lambda_values[m][q] +
2538 face_lambda_grads[m][d2] * polyeta[j][0]);
2541 face_eta_grads[m][d1] *
2542 (face_xi_grads[m][d2] * polyxi[j][1] *
2543 face_lambda_values[m][q] +
2544 face_lambda_grads[m][d2] * polyxi[j][0]);
2551 for (
unsigned int j = 0; j <
degree; ++j)
2553 const unsigned int shift_j(j *
degree);
2554 for (
unsigned int i = 0; i <
degree; ++i)
2556 const unsigned int shift_ij(shift_j + i);
2559 const unsigned int dof_index1(face_type1_offset +
2561 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2563 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2565 for (
unsigned int d3 = 0; d3 < dim; ++d3)
2570 face_xi_grads[m][d3] *
2571 (face_eta_grads[m][d1] *
2573 face_eta_grads[m][d2] *
2574 face_lambda_values[m][q] +
2576 face_lambda_grads[m][d2]) +
2578 face_eta_grads[m][d2] *
2579 face_lambda_grads[m][d1]) +
2582 face_eta_grads[m][d1] *
2583 face_eta_grads[m][d2] *
2584 face_eta_grads[m][d3] *
2585 face_lambda_values[m][q] +
2587 (face_eta_grads[m][d1] *
2588 face_eta_grads[m][d2] *
2589 face_lambda_grads[m][d3] +
2590 face_eta_grads[m][d3] *
2591 (face_eta_grads[m][d1] *
2592 face_lambda_grads[m]
2594 face_eta_grads[m][d2] *
2597 (polyxi[i][1] * polyeta[j][1] *
2598 face_eta_grads[m][d3] +
2599 polyxi[i][2] * polyeta[j][0] *
2600 face_xi_grads[m][d3]) *
2601 (face_xi_grads[m][d1] *
2602 face_lambda_grads[m][d2] +
2603 face_xi_grads[m][d2] *
2604 face_lambda_grads[m][d1]) +
2605 face_lambda_grads[m][d3] *
2606 (polyxi[i][2] * polyeta[j][0] *
2607 face_xi_grads[m][d1] *
2608 face_xi_grads[m][d2] +
2609 polyxi[i][1] * polyeta[j][1] *
2610 (face_xi_grads[m][d1] *
2611 face_eta_grads[m][d2] +
2612 face_xi_grads[m][d2] *
2613 face_eta_grads[m][d1])) +
2614 face_lambda_values[m][q] *
2615 (polyxi[i][3] * polyeta[j][0] *
2616 face_xi_grads[m][d1] *
2617 face_xi_grads[m][d2] *
2618 face_xi_grads[m][d3] +
2619 polyxi[i][1] * polyeta[j][2] *
2620 face_eta_grads[m][d3] *
2621 (face_xi_grads[m][d1] *
2622 face_eta_grads[m][d2] +
2623 face_xi_grads[m][d2] *
2624 face_eta_grads[m][d1]) +
2625 polyxi[i][2] * polyeta[j][1] *
2626 (face_xi_grads[m][d3] *
2627 face_xi_grads[m][d2] *
2628 face_eta_grads[m][d1] +
2629 face_xi_grads[m][d1] *
2630 (face_xi_grads[m][d2] *
2631 face_eta_grads[m][d3] +
2632 face_xi_grads[m][d3] *
2633 face_eta_grads[m][d2])));
2639 const unsigned int dof_index2(face_type2_offset +
2641 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2643 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2645 for (
unsigned int d3 = 0; d3 < dim; ++d3)
2649 face_xi_grads[m][d1] *
2650 (polyxi[i][1] * polyeta[j][1] *
2651 (face_eta_grads[m][d2] *
2652 face_lambda_grads[m][d3] +
2653 face_eta_grads[m][d3] *
2654 face_lambda_grads[m][d2]) +
2655 polyxi[i][2] * polyeta[j][0] *
2656 (face_xi_grads[m][d2] *
2657 face_lambda_grads[m][d3] +
2658 face_xi_grads[m][d3] *
2659 face_lambda_grads[m][d2]) +
2660 face_lambda_values[m][q] *
2661 (face_eta_grads[m][d2] *
2664 face_eta_grads[m][d3] +
2667 face_xi_grads[m][d3]) +
2668 face_xi_grads[m][d2] *
2671 face_eta_grads[m][d3] +
2674 face_xi_grads[m][d3]))) -
2676 face_eta_grads[m][d1] *
2677 (face_eta_grads[m][d2] *
2679 face_eta_grads[m][d3] *
2680 face_lambda_values[m][q] +
2682 face_lambda_grads[m][d3]) +
2684 face_eta_grads[m][d3] *
2685 face_lambda_grads[m][d2]) -
2686 face_eta_grads[m][d1] *
2688 face_xi_grads[m][d3] *
2690 face_eta_grads[m][d2] *
2691 face_lambda_values[m][q] +
2693 face_lambda_grads[m][d2]) +
2694 face_xi_grads[m][d2] *
2697 face_eta_grads[m][d3] *
2698 face_lambda_values[m]
2701 face_lambda_grads[m]
2703 polyxi[i][2] * polyeta[j][1] *
2704 face_xi_grads[m][d3] *
2705 face_lambda_values[m][q]));
2711 const unsigned int dof_index3_1(face_type3_offset1 +
2713 const unsigned int dof_index3_2(face_type3_offset2 +
2715 for (
unsigned int d1 = 0; d1 < dim; ++d1)
2717 for (
unsigned int d2 = 0; d2 < dim; ++d2)
2719 for (
unsigned int d3 = 0; d3 < dim; ++d3)
2723 face_xi_grads[m][d1] *
2724 (face_eta_grads[m][d2] *
2726 face_eta_grads[m][d3] *
2727 face_lambda_values[m][q] +
2729 face_lambda_grads[m][d3]) +
2730 face_lambda_grads[m][d2] *
2732 face_eta_grads[m][d3]);
2736 face_eta_grads[m][d1] *
2737 (face_xi_grads[m][d2] *
2739 face_xi_grads[m][d3] *
2740 face_lambda_values[m][q] +
2742 face_lambda_grads[m][d3]) +
2743 face_lambda_grads[m][d2] *
2744 polyxi[j][1] * face_xi_grads[m][d3]);