18 if (ref_fe ==
nullptr)
20 "Pointer to face element is not set");
22 const auto ref_ent = ref_fe->getFEEntityHandle();
25 const auto &ref_gauss_pts = ref_fe->gaussPts;
26 const auto nb_integration_points = ref_gauss_pts.size2();
28 auto set_integration_pts_for_edge = [&]() {
31 auto get_coords = [&](
const auto ent) {
35 std::array<double, 6> node_coords;
40 auto ref_node_coords = get_coords(ref_ent);
41 auto node_coords = get_coords(ent);
44 CHKERR Tools::shapeFunMBEDGE<1>(&ref_shapes(0, 0), &ref_gauss_pts(0, 0),
45 nb_integration_points);
48 if (ref_shapes.size1() * ref_shapes.size2() !=
49 nb_integration_points * ref_node_coords.size() / 3)
51 "Wrong number of shape functions");
54 auto get_glob_coords = [&]() {
58 &glob_coords(0, 0), &glob_coords(0, 1), &glob_coords(0, 2)};
62 for (
auto gg = 0; gg != nb_integration_points; ++gg) {
65 auto t_ref_node_coords =
67 &ref_node_coords[0], &ref_node_coords[1], &ref_node_coords[2]};
70 for (
int nn = 0; nn != ref_node_coords.size() / 3; ++nn) {
71 t_glob_coords(
i) += t_shape * t_ref_node_coords(
i);
81 auto glob_coords = get_glob_coords();
85 node_coords.data(), &glob_coords(0, 0), nb_integration_points,
88 gaussPts.resize(2, nb_integration_points,
false);
94 auto scale_quadarture = [&]() {
100 const auto sq = scale_quadarture();
102 for (
auto gg = 0; gg != nb_integration_points; ++gg) {
103 t_gauss_pts(0) = t_local_coords;
104 t_gauss_pts(1) = sq * ref_gauss_pts(1, gg);
115 CHKERR set_integration_pts_for_edge();
119 "Element type not implemented: %d",
type);