452 fe_data.shape_values.size()[0] == this->n_dofs_per_cell(),
454 this->n_dofs_per_cell()));
456 fe_data.shape_values.size()[1] == n_q_points,
464 std::fill(fe_data.dof_sign_change.begin(),
465 fe_data.dof_sign_change.end(),
467 internal::FE_PolyTensor::get_dof_sign_change_nedelec(cell,
470 fe_data.dof_sign_change);
476 internal::FE_PolyTensor::get_dof_sign_change_h_div(cell,
479 fe_data.dof_sign_change);
482 const unsigned int first_quad_index = this->get_first_quad_index();
484 const unsigned int n_dofs_per_quad = this->n_dofs_per_quad();
485 const unsigned int n_quad_dofs =
488 for (
unsigned int dof_index = 0; dof_index < this->n_dofs_per_cell();
495 const bool is_quad_dof =
497 (first_quad_index <= dof_index) &&
498 (dof_index < first_quad_index + n_quad_dofs));
508 double dof_sign = 1.0;
511 dof_sign = fe_data.dof_sign_change[dof_index];
519 const unsigned int face_index_from_dof_index =
520 (dof_index - first_quad_index) / (n_dofs_per_quad);
522 const unsigned int local_quad_dof_index = dof_index % n_dofs_per_quad;
525 if (adjust_quad_dof_sign_for_face_orientation(
526 local_quad_dof_index,
527 face_index_from_dof_index,
528 cell->face_orientation(face_index_from_dof_index),
529 cell->face_flip(face_index_from_dof_index),
530 cell->face_rotation(face_index_from_dof_index)))
534 const MappingKind mapping_kind = get_mapping_kind(dof_index);
536 const unsigned int first =
537 output_data.shape_function_to_row_table
538 [dof_index * this->n_components() +
539 this->get_nonzero_components(dof_index).first_selected_component()];
553 switch (mapping_kind)
557 for (
unsigned int k = 0; k < n_q_points; ++k)
558 for (
unsigned int d = 0; d < dim; ++d)
559 output_data.shape_values(
first + d, k) =
560 fe_data.shape_values[dof_index][k][d];
573 for (
unsigned int k = 0; k < n_q_points; ++k)
574 for (
unsigned int d = 0;
d < dim; ++
d)
575 output_data.shape_values(
first + d, k) =
576 fe_data.transformed_shape_values[k][
d];
589 for (
unsigned int k = 0; k < n_q_points; ++k)
590 for (
unsigned int d = 0;
d < dim; ++
d)
591 output_data.shape_values(
first + d, k) =
592 dof_sign * fe_data.transformed_shape_values[k][
d];
604 for (
unsigned int k = 0; k < n_q_points; ++k)
605 for (
unsigned int d = 0;
d < dim; ++
d)
606 output_data.shape_values(
first + d, k) =
607 dof_sign * fe_data.transformed_shape_values[k][
d];
625 switch (mapping_kind)
634 for (
unsigned int k = 0; k < n_q_points; ++k)
635 for (
unsigned int d = 0;
d < dim; ++
d)
636 output_data.shape_gradients[
first + d][k] =
637 fe_data.transformed_shape_grads[k][d];
648 for (
unsigned int k = 0; k < n_q_points; ++k)
649 for (
unsigned int d = 0;
d < spacedim; ++
d)
650 for (
unsigned int n = 0; n < spacedim; ++n)
651 fe_data.transformed_shape_grads[k][d] -=
652 output_data.shape_values(
first + n, k) *
655 for (
unsigned int k = 0; k < n_q_points; ++k)
656 for (
unsigned int d = 0;
d < dim; ++
d)
657 output_data.shape_gradients[
first + d][k] =
658 fe_data.transformed_shape_grads[k][d];
664 for (
unsigned int k = 0; k < n_q_points; ++k)
665 fe_data.untransformed_shape_grads[k] =
666 fe_data.shape_grads[dof_index][k];
673 for (
unsigned int k = 0; k < n_q_points; ++k)
674 for (
unsigned int d = 0;
d < spacedim; ++
d)
675 for (
unsigned int n = 0; n < spacedim; ++n)
676 fe_data.transformed_shape_grads[k][d] +=
677 output_data.shape_values(
first + n, k) *
681 for (
unsigned int k = 0; k < n_q_points; ++k)
682 for (
unsigned int d = 0;
d < dim; ++
d)
683 output_data.shape_gradients[
first + d][k] =
684 fe_data.transformed_shape_grads[k][d];
691 for (
unsigned int k = 0; k < n_q_points; ++k)
692 fe_data.untransformed_shape_grads[k] =
693 fe_data.shape_grads[dof_index][k];
700 for (
unsigned int k = 0; k < n_q_points; ++k)
701 for (
unsigned int d = 0;
d < spacedim; ++
d)
702 for (
unsigned int n = 0; n < spacedim; ++n)
703 fe_data.transformed_shape_grads[k][d] +=
704 (output_data.shape_values(
first + n, k) *
707 (output_data.shape_values(
first + d, k) *
710 for (
unsigned int k = 0; k < n_q_points; ++k)
711 for (
unsigned int d = 0;
d < dim; ++
d)
712 output_data.shape_gradients[
first + d][k] =
713 dof_sign * fe_data.transformed_shape_grads[k][d];
730 for (
unsigned int k = 0; k < n_q_points; ++k)
731 fe_data.untransformed_shape_grads[k] =
732 fe_data.shape_grads[dof_index][k];
740 for (
unsigned int k = 0; k < n_q_points; ++k)
741 for (
unsigned int d = 0;
d < spacedim; ++
d)
742 for (
unsigned int n = 0; n < spacedim; ++n)
743 fe_data.transformed_shape_grads[k][d] -=
744 output_data.shape_values(
first + n, k) *
747 for (
unsigned int k = 0; k < n_q_points; ++k)
748 for (
unsigned int d = 0;
d < dim; ++
d)
749 output_data.shape_gradients[
first + d][k] =
750 dof_sign * fe_data.transformed_shape_grads[k][d];
768 switch (mapping_kind)
778 for (
unsigned int k = 0; k < n_q_points; ++k)
779 for (
unsigned int d = 0;
d < spacedim; ++
d)
780 for (
unsigned int n = 0; n < spacedim; ++n)
781 fe_data.transformed_shape_hessians[k][d] -=
782 output_data.shape_gradients[
first + d][k][n] *
785 for (
unsigned int k = 0; k < n_q_points; ++k)
786 for (
unsigned int d = 0;
d < dim; ++
d)
787 output_data.shape_hessians[
first + d][k] =
788 fe_data.transformed_shape_hessians[k][d];
794 for (
unsigned int k = 0; k < n_q_points; ++k)
795 fe_data.untransformed_shape_hessian_tensors[k] =
796 fe_data.shape_grad_grads[dof_index][k];
800 fe_data.untransformed_shape_hessian_tensors),
805 for (
unsigned int k = 0; k < n_q_points; ++k)
806 for (
unsigned int d = 0;
d < spacedim; ++
d)
807 for (
unsigned int n = 0; n < spacedim; ++n)
808 for (
unsigned int i = 0; i < spacedim; ++i)
809 for (
unsigned int j = 0; j < spacedim; ++j)
811 fe_data.transformed_shape_hessians[k][
d][i][j] -=
812 (output_data.shape_values(
first + n, k) *
814 .jacobian_pushed_forward_2nd_derivatives
816 (output_data.shape_gradients[
first +
d][k][n] *
819 (output_data.shape_gradients[
first + n][k][i] *
822 (output_data.shape_gradients[
first + n][k][j] *
827 for (
unsigned int k = 0; k < n_q_points; ++k)
828 for (
unsigned int d = 0;
d < dim; ++
d)
829 output_data.shape_hessians[
first + d][k] =
830 fe_data.transformed_shape_hessians[k][d];
836 for (
unsigned int k = 0; k < n_q_points; ++k)
837 fe_data.untransformed_shape_hessian_tensors[k] =
838 fe_data.shape_grad_grads[dof_index][k];
842 fe_data.untransformed_shape_hessian_tensors),
847 for (
unsigned int k = 0; k < n_q_points; ++k)
848 for (
unsigned int d = 0;
d < spacedim; ++
d)
849 for (
unsigned int n = 0; n < spacedim; ++n)
850 for (
unsigned int i = 0; i < spacedim; ++i)
851 for (
unsigned int j = 0; j < spacedim; ++j)
853 fe_data.transformed_shape_hessians[k][
d][i][j] +=
854 (output_data.shape_values(
first + n, k) *
856 .jacobian_pushed_forward_2nd_derivatives
858 (output_data.shape_gradients[
first + n][k][i] *
861 (output_data.shape_gradients[
first + n][k][j] *
864 (output_data.shape_gradients[
first +
d][k][n] *
867 for (
unsigned int m = 0; m < spacedim; ++m)
869 .transformed_shape_hessians[k][d][i][j] -=
871 .jacobian_pushed_forward_grads[k][d][i]
874 .jacobian_pushed_forward_grads[k][m][n]
876 output_data.shape_values(
first + n, k)) +
883 output_data.shape_values(
first + n, k));
886 for (
unsigned int k = 0; k < n_q_points; ++k)
887 for (
unsigned int d = 0;
d < dim; ++
d)
888 output_data.shape_hessians[
first + d][k] =
889 fe_data.transformed_shape_hessians[k][d];
896 for (
unsigned int k = 0; k < n_q_points; ++k)
897 fe_data.untransformed_shape_hessian_tensors[k] =
898 fe_data.shape_grad_grads[dof_index][k];
902 fe_data.untransformed_shape_hessian_tensors),
907 for (
unsigned int k = 0; k < n_q_points; ++k)
908 for (
unsigned int d = 0;
d < spacedim; ++
d)
909 for (
unsigned int n = 0; n < spacedim; ++n)
910 for (
unsigned int i = 0; i < spacedim; ++i)
911 for (
unsigned int j = 0; j < spacedim; ++j)
913 fe_data.transformed_shape_hessians[k][
d][i][j] +=
914 (output_data.shape_values(
first + n, k) *
916 .jacobian_pushed_forward_2nd_derivatives
918 (output_data.shape_gradients[
first + n][k][i] *
921 (output_data.shape_gradients[
first + n][k][j] *
924 (output_data.shape_gradients[
first +
d][k][n] *
928 fe_data.transformed_shape_hessians[k][
d][i][j] -=
929 (output_data.shape_values(
first + d, k) *
931 .jacobian_pushed_forward_2nd_derivatives
933 (output_data.shape_gradients[
first +
d][k][i] *
936 (output_data.shape_gradients[
first + d][k][j] *
940 for (
unsigned int m = 0; m < spacedim; ++m)
943 .transformed_shape_hessians[k][
d][i][j] -=
950 output_data.shape_values(
first + n, k)) +
957 output_data.shape_values(
first + n, k));
960 .transformed_shape_hessians[k][
d][i][j] +=
967 output_data.shape_values(
first + d, k)) +
974 output_data.shape_values(
first + d, k));
978 for (
unsigned int k = 0; k < n_q_points; ++k)
979 for (
unsigned int d = 0;
d < dim; ++
d)
980 output_data.shape_hessians[
first + d][k] =
981 dof_sign * fe_data.transformed_shape_hessians[k][d];
988 for (
unsigned int k = 0; k < n_q_points; ++k)
989 fe_data.untransformed_shape_hessian_tensors[k] =
990 fe_data.shape_grad_grads[dof_index][k];
994 fe_data.untransformed_shape_hessian_tensors),
999 for (
unsigned int k = 0; k < n_q_points; ++k)
1000 for (
unsigned int d = 0;
d < spacedim; ++
d)
1001 for (
unsigned int n = 0; n < spacedim; ++n)
1002 for (
unsigned int i = 0; i < spacedim; ++i)
1003 for (
unsigned int j = 0; j < spacedim; ++j)
1005 fe_data.transformed_shape_hessians[k][
d][i][j] -=
1006 (output_data.shape_values(
first + n, k) *
1008 .jacobian_pushed_forward_2nd_derivatives
1010 (output_data.shape_gradients[
first +
d][k][n] *
1013 (output_data.shape_gradients[
first + n][k][i] *
1016 (output_data.shape_gradients[
first + n][k][j] *
1021 for (
unsigned int k = 0; k < n_q_points; ++k)
1022 for (
unsigned int d = 0;
d < dim; ++
d)
1023 output_data.shape_hessians[
first + d][k] =
1024 dof_sign * fe_data.transformed_shape_hessians[k][d];
1048template <
int dim,
int spacedim>
1052 const unsigned int face_no,
1073 const unsigned int n_q_points = quadrature[0].
size();
1081 cell->face_orientation(face_no),
1082 cell->face_flip(face_no),
1083 cell->face_rotation(face_no),
1096 internal::FE_PolyTensor::get_dof_sign_change_nedelec(cell,
1105 internal::FE_PolyTensor::get_dof_sign_change_h_div(cell,
1111 const unsigned int first_quad_index = this->get_first_quad_index();
1113 const unsigned int n_dofs_per_quad = this->n_dofs_per_quad();
1114 const unsigned int n_quad_dofs =
1117 for (
unsigned int dof_index = 0; dof_index < this->n_dofs_per_cell();
1124 const bool is_quad_dof =
1126 (first_quad_index <= dof_index) &&
1127 (dof_index < first_quad_index + n_quad_dofs));
1137 double dof_sign = 1.0;
1148 unsigned int face_index_from_dof_index =
1149 (dof_index - first_quad_index) / (n_dofs_per_quad);
1151 unsigned int local_quad_dof_index = dof_index % n_dofs_per_quad;
1154 if (adjust_quad_dof_sign_for_face_orientation(
1155 local_quad_dof_index,
1156 face_index_from_dof_index,
1157 cell->face_orientation(face_index_from_dof_index),
1158 cell->face_flip(face_index_from_dof_index),
1159 cell->face_rotation(face_index_from_dof_index)))
1163 const MappingKind mapping_kind = get_mapping_kind(dof_index);
1165 const unsigned int first =
1166 output_data.shape_function_to_row_table
1167 [dof_index * this->n_components() +
1168 this->get_nonzero_components(dof_index).first_selected_component()];
1172 switch (mapping_kind)
1176 for (
unsigned int k = 0; k < n_q_points; ++k)
1177 for (
unsigned int d = 0; d < dim; ++d)
1178 output_data.shape_values(
first + d, k) =
1187 transformed_shape_values =
1197 transformed_shape_values);
1199 for (
unsigned int k = 0; k < n_q_points; ++k)
1200 for (
unsigned int d = 0; d < dim; ++d)
1201 output_data.shape_values(
first + d, k) =
1202 transformed_shape_values[k][d];
1210 transformed_shape_values =
1220 transformed_shape_values);
1221 for (
unsigned int k = 0; k < n_q_points; ++k)
1222 for (
unsigned int d = 0; d < dim; ++d)
1223 output_data.shape_values(
first + d, k) =
1224 dof_sign * transformed_shape_values[k][d];
1231 transformed_shape_values =
1241 transformed_shape_values);
1243 for (
unsigned int k = 0; k < n_q_points; ++k)
1244 for (
unsigned int d = 0; d < dim; ++d)
1245 output_data.shape_values(
first + d, k) =
1246 dof_sign * transformed_shape_values[k][d];
1258 switch (mapping_kind)
1272 transformed_shape_grads);
1273 for (
unsigned int k = 0; k < n_q_points; ++k)
1274 for (
unsigned int d = 0; d < dim; ++d)
1275 output_data.shape_gradients[
first + d][k] =
1276 transformed_shape_grads[k][d];
1292 transformed_shape_grads);
1294 for (
unsigned int k = 0; k < n_q_points; ++k)
1295 for (
unsigned int d = 0; d < spacedim; ++d)
1296 for (
unsigned int n = 0; n < spacedim; ++n)
1297 transformed_shape_grads[k][d] -=
1298 output_data.shape_values(
first + n, k) *
1301 for (
unsigned int k = 0; k < n_q_points; ++k)
1302 for (
unsigned int d = 0; d < dim; ++d)
1303 output_data.shape_gradients[
first + d][k] =
1304 transformed_shape_grads[k][d];
1314 for (
unsigned int k = 0; k < n_q_points; ++k)
1323 transformed_shape_grads);
1325 for (
unsigned int k = 0; k < n_q_points; ++k)
1326 for (
unsigned int d = 0; d < spacedim; ++d)
1327 for (
unsigned int n = 0; n < spacedim; ++n)
1328 transformed_shape_grads[k][d] +=
1329 output_data.shape_values(
first + n, k) *
1332 for (
unsigned int k = 0; k < n_q_points; ++k)
1333 for (
unsigned int d = 0; d < dim; ++d)
1334 output_data.shape_gradients[
first + d][k] =
1335 transformed_shape_grads[k][d];
1347 for (
unsigned int k = 0; k < n_q_points; ++k)
1356 transformed_shape_grads);
1358 for (
unsigned int k = 0; k < n_q_points; ++k)
1359 for (
unsigned int d = 0; d < spacedim; ++d)
1360 for (
unsigned int n = 0; n < spacedim; ++n)
1361 transformed_shape_grads[k][d] +=
1362 (output_data.shape_values(
first + n, k) *
1365 (output_data.shape_values(
first + d, k) *
1368 for (
unsigned int k = 0; k < n_q_points; ++k)
1369 for (
unsigned int d = 0; d < dim; ++d)
1370 output_data.shape_gradients[
first + d][k] =
1371 dof_sign * transformed_shape_grads[k][d];
1388 for (
unsigned int k = 0; k < n_q_points; ++k)
1402 transformed_shape_grads);
1404 for (
unsigned int k = 0; k < n_q_points; ++k)
1405 for (
unsigned int d = 0; d < spacedim; ++d)
1406 for (
unsigned int n = 0; n < spacedim; ++n)
1407 transformed_shape_grads[k][d] -=
1408 output_data.shape_values(
first + n, k) *
1411 for (
unsigned int k = 0; k < n_q_points; ++k)
1412 for (
unsigned int d = 0; d < dim; ++d)
1413 output_data.shape_gradients[
first + d][k] =
1414 dof_sign * transformed_shape_grads[k][d];
1426 switch (mapping_kind)
1431 transformed_shape_hessians =
1441 transformed_shape_hessians);
1443 for (
unsigned int k = 0; k < n_q_points; ++k)
1444 for (
unsigned int d = 0; d < spacedim; ++d)
1445 for (
unsigned int n = 0; n < spacedim; ++n)
1446 transformed_shape_hessians[k][d] -=
1447 output_data.shape_gradients[
first + d][k][n] *
1450 for (
unsigned int k = 0; k < n_q_points; ++k)
1451 for (
unsigned int d = 0; d < dim; ++d)
1452 output_data.shape_hessians[
first + d][k] =
1453 transformed_shape_hessians[k][d];
1459 for (
unsigned int k = 0; k < n_q_points; ++k)
1464 transformed_shape_hessians =
1474 transformed_shape_hessians);
1476 for (
unsigned int k = 0; k < n_q_points; ++k)
1477 for (
unsigned int d = 0; d < spacedim; ++d)
1478 for (
unsigned int n = 0; n < spacedim; ++n)
1479 for (
unsigned int i = 0; i < spacedim; ++i)
1480 for (
unsigned int j = 0; j < spacedim; ++j)
1482 transformed_shape_hessians[k][d][i][j] -=
1483 (output_data.shape_values(
first + n, k) *
1485 .jacobian_pushed_forward_2nd_derivatives
1487 (output_data.shape_gradients[
first + d][k][n] *
1490 (output_data.shape_gradients[
first + n][k][i] *
1493 (output_data.shape_gradients[
first + n][k][j] *
1498 for (
unsigned int k = 0; k < n_q_points; ++k)
1499 for (
unsigned int d = 0; d < dim; ++d)
1500 output_data.shape_hessians[
first + d][k] =
1501 transformed_shape_hessians[k][d];
1508 for (
unsigned int k = 0; k < n_q_points; ++k)
1513 transformed_shape_hessians =
1523 transformed_shape_hessians);
1525 for (
unsigned int k = 0; k < n_q_points; ++k)
1526 for (
unsigned int d = 0; d < spacedim; ++d)
1527 for (
unsigned int n = 0; n < spacedim; ++n)
1528 for (
unsigned int i = 0; i < spacedim; ++i)
1529 for (
unsigned int j = 0; j < spacedim; ++j)
1531 transformed_shape_hessians[k][d][i][j] +=
1532 (output_data.shape_values(
first + n, k) *
1534 .jacobian_pushed_forward_2nd_derivatives
1536 (output_data.shape_gradients[
first + n][k][i] *
1539 (output_data.shape_gradients[
first + n][k][j] *
1542 (output_data.shape_gradients[
first + d][k][n] *
1545 for (
unsigned int m = 0; m < spacedim; ++m)
1546 transformed_shape_hessians[k][d][i][j] -=
1548 .jacobian_pushed_forward_grads[k][d][i]
1551 .jacobian_pushed_forward_grads[k][m][n]
1553 output_data.shape_values(
first + n, k)) +
1560 output_data.shape_values(
first + n, k));
1563 for (
unsigned int k = 0; k < n_q_points; ++k)
1564 for (
unsigned int d = 0; d < dim; ++d)
1565 output_data.shape_hessians[
first + d][k] =
1566 transformed_shape_hessians[k][d];
1574 for (
unsigned int k = 0; k < n_q_points; ++k)
1579 transformed_shape_hessians =
1589 transformed_shape_hessians);
1591 for (
unsigned int k = 0; k < n_q_points; ++k)
1592 for (
unsigned int d = 0; d < spacedim; ++d)
1593 for (
unsigned int n = 0; n < spacedim; ++n)
1594 for (
unsigned int i = 0; i < spacedim; ++i)
1595 for (
unsigned int j = 0; j < spacedim; ++j)
1597 transformed_shape_hessians[k][d][i][j] +=
1598 (output_data.shape_values(
first + n, k) *
1600 .jacobian_pushed_forward_2nd_derivatives
1602 (output_data.shape_gradients[
first + n][k][i] *
1605 (output_data.shape_gradients[
first + n][k][j] *
1608 (output_data.shape_gradients[
first + d][k][n] *
1612 transformed_shape_hessians[k][d][i][j] -=
1613 (output_data.shape_values(
first + d, k) *
1615 .jacobian_pushed_forward_2nd_derivatives
1617 (output_data.shape_gradients[
first + d][k][i] *
1620 (output_data.shape_gradients[
first + d][k][j] *
1624 for (
unsigned int m = 0; m < spacedim; ++m)
1626 transformed_shape_hessians[k][d][i][j] -=
1633 output_data.shape_values(
first + n, k)) +
1640 output_data.shape_values(
first + n, k));
1642 transformed_shape_hessians[k][d][i][j] +=
1649 output_data.shape_values(
first + d, k)) +
1656 output_data.shape_values(
first + d, k));
1660 for (
unsigned int k = 0; k < n_q_points; ++k)
1661 for (
unsigned int d = 0; d < dim; ++d)
1662 output_data.shape_hessians[
first + d][k] =
1663 dof_sign * transformed_shape_hessians[k][d];
1670 for (
unsigned int k = 0; k < n_q_points; ++k)
1675 transformed_shape_hessians =
1685 transformed_shape_hessians);
1687 for (
unsigned int k = 0; k < n_q_points; ++k)
1688 for (
unsigned int d = 0; d < spacedim; ++d)
1689 for (
unsigned int n = 0; n < spacedim; ++n)
1690 for (
unsigned int i = 0; i < spacedim; ++i)
1691 for (
unsigned int j = 0; j < spacedim; ++j)
1693 transformed_shape_hessians[k][d][i][j] -=
1694 (output_data.shape_values(
first + n, k) *
1696 .jacobian_pushed_forward_2nd_derivatives
1698 (output_data.shape_gradients[
first + d][k][n] *
1701 (output_data.shape_gradients[
first + n][k][i] *
1704 (output_data.shape_gradients[
first + n][k][j] *
1709 for (
unsigned int k = 0; k < n_q_points; ++k)
1710 for (
unsigned int d = 0; d < dim; ++d)
1711 output_data.shape_hessians[
first + d][k] =
1712 dof_sign * transformed_shape_hessians[k][d];
1732template <
int dim,
int spacedim>
1736 const unsigned int face_no,
1737 const unsigned int sub_no,
1756 const unsigned int n_q_points = quadrature.
size();
1765 cell->face_orientation(face_no),
1766 cell->face_flip(face_no),
1767 cell->face_rotation(face_no),
1769 cell->subface_case(face_no));
1781 internal::FE_PolyTensor::get_dof_sign_change_nedelec(cell,
1790 internal::FE_PolyTensor::get_dof_sign_change_h_div(cell,
1796 const unsigned int first_quad_index = this->get_first_quad_index();
1798 const unsigned int n_dofs_per_quad = this->n_dofs_per_quad();
1799 const unsigned int n_quad_dofs =
1802 for (
unsigned int dof_index = 0; dof_index < this->n_dofs_per_cell();
1809 const bool is_quad_dof =
1811 (first_quad_index <= dof_index) &&
1812 (dof_index < first_quad_index + n_quad_dofs));
1822 double dof_sign = 1.0;
1833 unsigned int face_index_from_dof_index =
1834 (dof_index - first_quad_index) / (n_dofs_per_quad);
1836 unsigned int local_quad_dof_index = dof_index % n_dofs_per_quad;
1839 if (adjust_quad_dof_sign_for_face_orientation(
1840 local_quad_dof_index,
1841 face_index_from_dof_index,
1842 cell->face_orientation(face_index_from_dof_index),
1843 cell->face_flip(face_index_from_dof_index),
1844 cell->face_rotation(face_index_from_dof_index)))
1848 const MappingKind mapping_kind = get_mapping_kind(dof_index);
1850 const unsigned int first =
1851 output_data.shape_function_to_row_table
1852 [dof_index * this->n_components() +
1853 this->get_nonzero_components(dof_index).first_selected_component()];
1857 switch (mapping_kind)
1861 for (
unsigned int k = 0; k < n_q_points; ++k)
1862 for (
unsigned int d = 0; d < dim; ++d)
1863 output_data.shape_values(
first + d, k) =
1872 transformed_shape_values =
1882 transformed_shape_values);
1884 for (
unsigned int k = 0; k < n_q_points; ++k)
1885 for (
unsigned int d = 0; d < dim; ++d)
1886 output_data.shape_values(
first + d, k) =
1887 transformed_shape_values[k][d];
1896 transformed_shape_values =
1907 transformed_shape_values);
1908 for (
unsigned int k = 0; k < n_q_points; ++k)
1909 for (
unsigned int d = 0; d < dim; ++d)
1910 output_data.shape_values(
first + d, k) =
1911 dof_sign * transformed_shape_values[k][d];
1918 transformed_shape_values =
1929 transformed_shape_values);
1931 for (
unsigned int k = 0; k < n_q_points; ++k)
1932 for (
unsigned int d = 0; d < dim; ++d)
1933 output_data.shape_values(
first + d, k) =
1934 dof_sign * transformed_shape_values[k][d];
1950 switch (mapping_kind)
1960 transformed_shape_grads);
1961 for (
unsigned int k = 0; k < n_q_points; ++k)
1962 for (
unsigned int d = 0; d < dim; ++d)
1963 output_data.shape_gradients[
first + d][k] =
1964 transformed_shape_grads[k][d];
1976 transformed_shape_grads);
1978 for (
unsigned int k = 0; k < n_q_points; ++k)
1979 for (
unsigned int d = 0; d < spacedim; ++d)
1980 for (
unsigned int n = 0; n < spacedim; ++n)
1981 transformed_shape_grads[k][d] -=
1982 output_data.shape_values(
first + n, k) *
1985 for (
unsigned int k = 0; k < n_q_points; ++k)
1986 for (
unsigned int d = 0; d < dim; ++d)
1987 output_data.shape_gradients[
first + d][k] =
1988 transformed_shape_grads[k][d];
1995 for (
unsigned int k = 0; k < n_q_points; ++k)
2005 transformed_shape_grads);
2007 for (
unsigned int k = 0; k < n_q_points; ++k)
2008 for (
unsigned int d = 0; d < spacedim; ++d)
2009 for (
unsigned int n = 0; n < spacedim; ++n)
2010 transformed_shape_grads[k][d] +=
2011 output_data.shape_values(
first + n, k) *
2014 for (
unsigned int k = 0; k < n_q_points; ++k)
2015 for (
unsigned int d = 0; d < dim; ++d)
2016 output_data.shape_gradients[
first + d][k] =
2017 transformed_shape_grads[k][d];
2025 for (
unsigned int k = 0; k < n_q_points; ++k)
2035 transformed_shape_grads);
2037 for (
unsigned int k = 0; k < n_q_points; ++k)
2038 for (
unsigned int d = 0; d < spacedim; ++d)
2039 for (
unsigned int n = 0; n < spacedim; ++n)
2040 transformed_shape_grads[k][d] +=
2041 (output_data.shape_values(
first + n, k) *
2044 (output_data.shape_values(
first + d, k) *
2047 for (
unsigned int k = 0; k < n_q_points; ++k)
2048 for (
unsigned int d = 0; d < dim; ++d)
2049 output_data.shape_gradients[
first + d][k] =
2050 dof_sign * transformed_shape_grads[k][d];
2066 for (
unsigned int k = 0; k < n_q_points; ++k)
2076 transformed_shape_grads);
2078 for (
unsigned int k = 0; k < n_q_points; ++k)
2079 for (
unsigned int d = 0; d < spacedim; ++d)
2080 for (
unsigned int n = 0; n < spacedim; ++n)
2081 transformed_shape_grads[k][d] -=
2082 output_data.shape_values(
first + n, k) *
2085 for (
unsigned int k = 0; k < n_q_points; ++k)
2086 for (
unsigned int d = 0; d < dim; ++d)
2087 output_data.shape_gradients[
first + d][k] =
2088 dof_sign * transformed_shape_grads[k][d];
2100 switch (mapping_kind)
2105 transformed_shape_hessians =
2115 transformed_shape_hessians);
2117 for (
unsigned int k = 0; k < n_q_points; ++k)
2118 for (
unsigned int d = 0; d < spacedim; ++d)
2119 for (
unsigned int n = 0; n < spacedim; ++n)
2120 transformed_shape_hessians[k][d] -=
2121 output_data.shape_gradients[
first + d][k][n] *
2124 for (
unsigned int k = 0; k < n_q_points; ++k)
2125 for (
unsigned int d = 0; d < dim; ++d)
2126 output_data.shape_hessians[
first + d][k] =
2127 transformed_shape_hessians[k][d];
2133 for (
unsigned int k = 0; k < n_q_points; ++k)
2138 transformed_shape_hessians =
2148 transformed_shape_hessians);
2150 for (
unsigned int k = 0; k < n_q_points; ++k)
2151 for (
unsigned int d = 0; d < spacedim; ++d)
2152 for (
unsigned int n = 0; n < spacedim; ++n)
2153 for (
unsigned int i = 0; i < spacedim; ++i)
2154 for (
unsigned int j = 0; j < spacedim; ++j)
2156 transformed_shape_hessians[k][d][i][j] -=
2157 (output_data.shape_values(
first + n, k) *
2159 .jacobian_pushed_forward_2nd_derivatives
2161 (output_data.shape_gradients[
first + d][k][n] *
2164 (output_data.shape_gradients[
first + n][k][i] *
2167 (output_data.shape_gradients[
first + n][k][j] *
2172 for (
unsigned int k = 0; k < n_q_points; ++k)
2173 for (
unsigned int d = 0; d < dim; ++d)
2174 output_data.shape_hessians[
first + d][k] =
2175 transformed_shape_hessians[k][d];
2182 for (
unsigned int k = 0; k < n_q_points; ++k)
2187 transformed_shape_hessians =
2197 transformed_shape_hessians);
2199 for (
unsigned int k = 0; k < n_q_points; ++k)
2200 for (
unsigned int d = 0; d < spacedim; ++d)
2201 for (
unsigned int n = 0; n < spacedim; ++n)
2202 for (
unsigned int i = 0; i < spacedim; ++i)
2203 for (
unsigned int j = 0; j < spacedim; ++j)
2205 transformed_shape_hessians[k][d][i][j] +=
2206 (output_data.shape_values(
first + n, k) *
2208 .jacobian_pushed_forward_2nd_derivatives
2210 (output_data.shape_gradients[
first + n][k][i] *
2213 (output_data.shape_gradients[
first + n][k][j] *
2216 (output_data.shape_gradients[
first + d][k][n] *
2219 for (
unsigned int m = 0; m < spacedim; ++m)
2220 transformed_shape_hessians[k][d][i][j] -=
2222 .jacobian_pushed_forward_grads[k][d][i]
2225 .jacobian_pushed_forward_grads[k][m][n]
2227 output_data.shape_values(
first + n, k)) +
2234 output_data.shape_values(
first + n, k));
2237 for (
unsigned int k = 0; k < n_q_points; ++k)
2238 for (
unsigned int d = 0; d < dim; ++d)
2239 output_data.shape_hessians[
first + d][k] =
2240 transformed_shape_hessians[k][d];
2248 for (
unsigned int k = 0; k < n_q_points; ++k)
2253 transformed_shape_hessians =
2263 transformed_shape_hessians);
2265 for (
unsigned int k = 0; k < n_q_points; ++k)
2266 for (
unsigned int d = 0; d < spacedim; ++d)
2267 for (
unsigned int n = 0; n < spacedim; ++n)
2268 for (
unsigned int i = 0; i < spacedim; ++i)
2269 for (
unsigned int j = 0; j < spacedim; ++j)
2271 transformed_shape_hessians[k][d][i][j] +=
2272 (output_data.shape_values(
first + n, k) *
2274 .jacobian_pushed_forward_2nd_derivatives
2276 (output_data.shape_gradients[
first + n][k][i] *
2279 (output_data.shape_gradients[
first + n][k][j] *
2282 (output_data.shape_gradients[
first + d][k][n] *
2286 transformed_shape_hessians[k][d][i][j] -=
2287 (output_data.shape_values(
first + d, k) *
2289 .jacobian_pushed_forward_2nd_derivatives
2291 (output_data.shape_gradients[
first + d][k][i] *
2294 (output_data.shape_gradients[
first + d][k][j] *
2297 for (
unsigned int m = 0; m < spacedim; ++m)
2299 transformed_shape_hessians[k][d][i][j] -=
2306 output_data.shape_values(
first + n, k)) +
2313 output_data.shape_values(
first + n, k));
2315 transformed_shape_hessians[k][d][i][j] +=
2322 output_data.shape_values(
first + d, k)) +
2329 output_data.shape_values(
first + d, k));
2333 for (
unsigned int k = 0; k < n_q_points; ++k)
2334 for (
unsigned int d = 0; d < dim; ++d)
2335 output_data.shape_hessians[
first + d][k] =
2336 dof_sign * transformed_shape_hessians[k][d];
2343 for (
unsigned int k = 0; k < n_q_points; ++k)
2348 transformed_shape_hessians =
2358 transformed_shape_hessians);
2360 for (
unsigned int k = 0; k < n_q_points; ++k)
2361 for (
unsigned int d = 0; d < spacedim; ++d)
2362 for (
unsigned int n = 0; n < spacedim; ++n)
2363 for (
unsigned int i = 0; i < spacedim; ++i)
2364 for (
unsigned int j = 0; j < spacedim; ++j)
2366 transformed_shape_hessians[k][d][i][j] -=
2367 (output_data.shape_values(
first + n, k) *
2369 .jacobian_pushed_forward_2nd_derivatives
2371 (output_data.shape_gradients[
first + d][k][n] *
2374 (output_data.shape_gradients[
first + n][k][i] *
2377 (output_data.shape_gradients[
first + n][k][j] *
2382 for (
unsigned int k = 0; k < n_q_points; ++k)
2383 for (
unsigned int d = 0; d < dim; ++d)
2384 output_data.shape_hessians[
first + d][k] =
2385 dof_sign * transformed_shape_hessians[k][d];