509 const unsigned int dofs_1d =
510 2 * this->n_dofs_per_vertex() + this->n_dofs_per_line();
512 this->interface_constraints.TableBase<2, double>::reinit(
513 this->interface_constraints_size());
526 for (
unsigned int i = 0; i < dofs_1d; ++i)
527 this->interface_constraints(0, i) = dofs_subcell[0](1, i);
529 for (
unsigned int c = 0; c < GeometryInfo<1>::max_children_per_cell;
531 for (
unsigned int i = 0; i < dofs_1d; ++i)
532 for (
unsigned int j = 2; j < dofs_1d; ++j)
533 this->interface_constraints(1 + c * (this->degree - 1) + j - 2,
534 i) = dofs_subcell[c](j, i);
540 for (
unsigned int i = 0; i < dofs_1d * dofs_1d; ++i)
543 this->interface_constraints(0, face_renumber[i]) =
544 dofs_subcell[0](1, i % dofs_1d) *
545 dofs_subcell[0](1, (i - (i % dofs_1d)) / dofs_1d);
548 this->interface_constraints(1, face_renumber[i]) =
549 dofs_subcell[0](0, i % dofs_1d) *
550 dofs_subcell[0](1, (i - (i % dofs_1d)) / dofs_1d);
551 this->interface_constraints(2, face_renumber[i]) =
552 dofs_subcell[1](1, i % dofs_1d) *
553 dofs_subcell[0](1, (i - (i % dofs_1d)) / dofs_1d);
554 this->interface_constraints(3, face_renumber[i]) =
555 dofs_subcell[0](1, i % dofs_1d) *
556 dofs_subcell[0](0, (i - (i % dofs_1d)) / dofs_1d);
557 this->interface_constraints(4, face_renumber[i]) =
558 dofs_subcell[1](0, i % dofs_1d) *
559 dofs_subcell[1](1, (i - (i % dofs_1d)) / dofs_1d);
562 for (
unsigned int j = 0; j < (this->degree - 1); ++j)
564 this->interface_constraints(5 + j, face_renumber[i]) =
565 dofs_subcell[0](1, i % dofs_1d) *
566 dofs_subcell[0](2 + j, (i - (i % dofs_1d)) / dofs_1d);
567 this->interface_constraints(5 + (this->degree - 1) + j,
569 dofs_subcell[0](1, i % dofs_1d) *
570 dofs_subcell[1](2 + j, (i - (i % dofs_1d)) / dofs_1d);
571 this->interface_constraints(5 + 2 * (this->degree - 1) + j,
573 dofs_subcell[0](2 + j, i % dofs_1d) *
574 dofs_subcell[1](0, (i - (i % dofs_1d)) / dofs_1d);
575 this->interface_constraints(5 + 3 * (this->degree - 1) + j,
577 dofs_subcell[1](2 + j, i % dofs_1d) *
578 dofs_subcell[0](1, (i - (i % dofs_1d)) / dofs_1d);
582 for (
unsigned int j = 0; j < (this->degree - 1); ++j)
585 this->interface_constraints(5 + 4 * (this->degree - 1) + j,
587 dofs_subcell[0](0, i % dofs_1d) *
588 dofs_subcell[0](2 + j, (i - (i % dofs_1d)) / dofs_1d);
589 this->interface_constraints(5 + 4 * (this->degree - 1) +
590 (this->degree - 1) + j,
592 dofs_subcell[0](0, i % dofs_1d) *
593 dofs_subcell[1](2 + j, (i - (i % dofs_1d)) / dofs_1d);
595 this->interface_constraints(5 + 4 * (this->degree - 1) +
596 2 * (this->degree - 1) + j,
598 dofs_subcell[1](1, i % dofs_1d) *
599 dofs_subcell[0](2 + j, (i - (i % dofs_1d)) / dofs_1d);
600 this->interface_constraints(5 + 4 * (this->degree - 1) +
601 3 * (this->degree - 1) + j,
603 dofs_subcell[1](1, i % dofs_1d) *
604 dofs_subcell[1](2 + j, (i - (i % dofs_1d)) / dofs_1d);
606 this->interface_constraints(5 + 4 * (this->degree - 1) +
607 4 * (this->degree - 1) + j,
609 dofs_subcell[0](2 + j, i % dofs_1d) *
610 dofs_subcell[0](0, (i - (i % dofs_1d)) / dofs_1d);
611 this->interface_constraints(5 + 4 * (this->degree - 1) +
612 5 * (this->degree - 1) + j,
614 dofs_subcell[1](2 + j, i % dofs_1d) *
615 dofs_subcell[0](0, (i - (i % dofs_1d)) / dofs_1d);
617 this->interface_constraints(5 + 4 * (this->degree - 1) +
618 6 * (this->degree - 1) + j,
620 dofs_subcell[0](2 + j, i % dofs_1d) *
621 dofs_subcell[1](1, (i - (i % dofs_1d)) / dofs_1d);
622 this->interface_constraints(5 + 4 * (this->degree - 1) +
623 7 * (this->degree - 1) + j,
625 dofs_subcell[1](2 + j, i % dofs_1d) *
626 dofs_subcell[1](1, (i - (i % dofs_1d)) / dofs_1d);
630 for (
unsigned int j = 0; j < (this->degree - 1); ++j)
631 for (
unsigned int k = 0; k < (this->degree - 1); ++k)
634 this->interface_constraints(5 + 12 * (this->degree - 1) +
635 j + k * (this->degree - 1),
637 dofs_subcell[0](2 + j, i % dofs_1d) *
638 dofs_subcell[0](2 + k, (i - (i % dofs_1d)) / dofs_1d);
640 this->interface_constraints(5 + 12 * (this->degree - 1) +
641 j + k * (this->degree - 1) +
645 dofs_subcell[1](2 + j, i % dofs_1d) *
646 dofs_subcell[0](2 + k, (i - (i % dofs_1d)) / dofs_1d);
648 this->interface_constraints(5 + 12 * (this->degree - 1) +
649 j + k * (this->degree - 1) +
650 2 * (this->degree - 1) *
653 dofs_subcell[0](2 + j, i % dofs_1d) *
654 dofs_subcell[1](2 + k, (i - (i % dofs_1d)) / dofs_1d);
656 this->interface_constraints(5 + 12 * (this->degree - 1) +
657 j + k * (this->degree - 1) +
658 3 * (this->degree - 1) *
661 dofs_subcell[1](2 + j, i % dofs_1d) *
662 dofs_subcell[1](2 + k, (i - (i % dofs_1d)) / dofs_1d);
1017 const unsigned int subface,
1019 const unsigned int face_no)
const
1026 (
dynamic_cast<const FEQHierarchical *
>(&x_source_fe) !=
1030 Assert(interpolation_matrix.
n() == this->n_dofs_per_face(face_no),
1032 this->n_dofs_per_face(face_no)));
1064 interpolation_matrix(0, 0) = 1.0;
1065 interpolation_matrix(1, 0) = 0.5;
1066 interpolation_matrix(1, 1) = 0.5;
1068 for (
unsigned int dof = 2;
1069 dof < this->n_dofs_per_face(face_no);)
1071 interpolation_matrix(1, dof) = -1.0;
1075 int factorial_i = 1;
1077 for (
unsigned int i = 2; i < this->n_dofs_per_face(face_no);
1082 int factorial_j = factorial_i;
1083 int factorial_ij = 1;
1085 for (
unsigned int j = i + 1;
1086 j < this->n_dofs_per_face(face_no);
1089 factorial_ij *= j - i;
1092 if (((i + j) & 1) != 0u)
1093 interpolation_matrix(i, j) =
1095 (factorial_i * factorial_ij);
1098 interpolation_matrix(i, j) =
1100 (factorial_i * factorial_ij);
1109 interpolation_matrix(0, 0) = 0.5;
1110 interpolation_matrix(0, 1) = 0.5;
1112 for (
unsigned int dof = 2;
1113 dof < this->n_dofs_per_face(face_no);)
1115 interpolation_matrix(0, dof) = -1.0;
1119 interpolation_matrix(1, 1) = 1.0;
1121 int factorial_i = 1;
1123 for (
unsigned int i = 2; i < this->n_dofs_per_face(face_no);
1128 int factorial_j = factorial_i;
1129 int factorial_ij = 1;
1131 for (
unsigned int j = i + 1;
1132 j < this->n_dofs_per_face(face_no);
1135 factorial_ij *= j - i;
1137 interpolation_matrix(i, j) =
1139 (factorial_i * factorial_ij);
1154 interpolation_matrix(0, 0) = 1.0;
1155 interpolation_matrix(1, 0) = 0.5;
1156 interpolation_matrix(1, 1) = 0.5;
1157 interpolation_matrix(2, 0) = 0.5;
1158 interpolation_matrix(2, 2) = 0.5;
1160 for (
unsigned int i = 0; i < this->degree - 1;)
1162 for (
unsigned int line = 0;
1163 line < GeometryInfo<3>::lines_per_face;
1165 interpolation_matrix(3,
1166 i + line * (this->degree - 1) +
1169 for (
unsigned int j = 0; j < this->degree - 1;)
1171 interpolation_matrix(3,
1172 i + (j + 4) * this->degree - j) =
1177 interpolation_matrix(1, i + 2 * (this->degree + 1)) =
1179 interpolation_matrix(2, i + 4) = -1.0;
1183 for (
unsigned int vertex = 0;
1184 vertex < GeometryInfo<3>::vertices_per_face;
1186 interpolation_matrix(3, vertex) = 0.25;
1188 int factorial_i = 1;
1190 for (
unsigned int i = 2; i <= this->degree; ++i)
1193 interpolation_matrix(i + 2, i + 2) = tmp;
1194 interpolation_matrix(i + 2 * source_fe.
degree,
1195 i + 2 * this->degree) = tmp;
1197 interpolation_matrix(i + source_fe.
degree + 1, i + 2) =
1199 interpolation_matrix(i + source_fe.
degree + 1,
1200 i + this->degree + 1) = tmp;
1201 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1202 i + 2 * this->degree) = tmp;
1203 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1204 i + 3 * this->degree - 1) = tmp;
1207 for (
unsigned int j = 0; j < this->degree - 1;)
1209 interpolation_matrix(i + source_fe.
degree + 1,
1210 (i + 2) * this->degree + j + 2 -
1212 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1213 i + (j + 4) * this->degree - j -
1218 int factorial_k = 1;
1220 for (
unsigned int j = 2; j <= this->degree; ++j)
1222 interpolation_matrix(i + (j + 2) * source_fe.
degree -
1224 i + (j + 2) * this->degree - j) =
1227 int factorial_kl = 1;
1228 int factorial_l = factorial_k;
1230 for (
unsigned int k = j + 1; k < this->degree; ++k)
1232 factorial_kl *= k - j;
1235 if (((j + k) & 1) != 0u)
1236 interpolation_matrix(
1237 i + (j + 2) * source_fe.
degree - j,
1238 i + (k + 2) * this->degree - k) =
1240 factorial_l / (factorial_k * factorial_kl);
1243 interpolation_matrix(
1244 i + (j + 2) * source_fe.
degree - j,
1245 i + (k + 2) * this->degree - k) =
1247 (factorial_k * factorial_kl);
1252 int factorial_j = factorial_i;
1253 int factorial_ij = 1;
1255 for (
unsigned int j = i + 1; j <= this->degree; ++j)
1257 factorial_ij *= j - i;
1260 if (((i + j) & 1) != 0u)
1263 factorial_j / (factorial_i * factorial_ij);
1264 interpolation_matrix(i + 2, j + 2) = tmp;
1265 interpolation_matrix(i + 2 * source_fe.
degree,
1266 j + 2 * this->degree) = tmp;
1269 for (
unsigned int k = 2; k <= this->degree; ++k)
1271 interpolation_matrix(
1272 i + (k + 2) * source_fe.
degree - k,
1273 j + (k + 2) * this->degree - k) =
1276 int factorial_l = factorial_k;
1277 int factorial_kl = 1;
1279 for (
unsigned int l = k + 1;
1283 factorial_kl *= l - k;
1286 if (((k + l) & 1) != 0u)
1287 interpolation_matrix(
1288 i + (k + 2) * source_fe.
degree - k,
1289 j + (l + 2) * this->degree - l) =
1292 (factorial_k * factorial_kl);
1295 interpolation_matrix(
1296 i + (k + 2) * source_fe.
degree - k,
1297 j + (l + 2) * this->degree - l) =
1300 (factorial_k * factorial_kl);
1305 interpolation_matrix(i + source_fe.
degree + 1,
1307 interpolation_matrix(i + source_fe.
degree + 1,
1308 j + this->degree + 1) = tmp;
1309 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1310 j + 2 * this->degree) = tmp;
1311 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1312 j + 3 * this->degree - 1) =
1316 for (
unsigned int k = 0; k < this->degree - 1;)
1318 interpolation_matrix(i + source_fe.
degree + 1,
1319 (j + 2) * this->degree +
1321 interpolation_matrix(
1322 i + 3 * source_fe.
degree - 1,
1323 j + (k + 4) * this->degree - k - 2) = tmp;
1330 (factorial_i * factorial_ij);
1331 interpolation_matrix(i + 2, j + 2) = tmp;
1332 interpolation_matrix(i + 2 * source_fe.
degree,
1333 j + 2 * this->degree) = tmp;
1336 for (
unsigned int k = 2; k <= this->degree; ++k)
1338 interpolation_matrix(
1339 i + (k + 2) * source_fe.
degree - k,
1340 j + (k + 2) * this->degree - k) =
1343 int factorial_l = factorial_k;
1344 int factorial_kl = 1;
1346 for (
unsigned int l = k + 1;
1350 factorial_kl *= l - k;
1353 if (((k + l) & 1) != 0u)
1354 interpolation_matrix(
1355 i + (k + 2) * source_fe.
degree - k,
1356 j + (l + 2) * this->degree - l) =
1359 (factorial_k * factorial_kl);
1362 interpolation_matrix(
1363 i + (k + 2) * source_fe.
degree - k,
1364 j + (l + 2) * this->degree - l) =
1367 (factorial_k * factorial_kl);
1372 interpolation_matrix(i + source_fe.
degree + 1,
1374 interpolation_matrix(i + source_fe.
degree + 1,
1375 j + this->degree + 1) = tmp;
1376 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1377 j + 2 * this->degree) = tmp;
1378 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1379 j + 3 * this->degree - 1) =
1383 for (
unsigned int k = 0; k < this->degree - 1;)
1385 interpolation_matrix(i + source_fe.
degree + 1,
1386 (j + 2) * this->degree +
1388 interpolation_matrix(
1389 i + 3 * source_fe.
degree - 1,
1390 j + (k + 4) * this->degree - k - 2) = tmp;
1402 interpolation_matrix(0, 0) = 0.5;
1403 interpolation_matrix(0, 1) = 0.5;
1404 interpolation_matrix(1, 1) = 1.0;
1405 interpolation_matrix(3, 1) = 0.5;
1406 interpolation_matrix(3, 3) = 0.5;
1408 for (
unsigned int i = 0; i < this->degree - 1;)
1410 for (
unsigned int line = 0;
1411 line < GeometryInfo<3>::lines_per_face;
1413 interpolation_matrix(2,
1414 i + line * (this->degree - 1) +
1417 for (
unsigned int j = 0; j < this->degree - 1;)
1419 interpolation_matrix(2,
1420 i + (j + 4) * this->degree - j) =
1425 interpolation_matrix(0, i + 2 * (this->degree + 1)) =
1427 interpolation_matrix(3, i + this->degree + 3) = -1.0;
1431 for (
unsigned int vertex = 0;
1432 vertex < GeometryInfo<3>::vertices_per_face;
1434 interpolation_matrix(2, vertex) = 0.25;
1436 int factorial_i = 1;
1438 for (
unsigned int i = 2; i <= this->degree; ++i)
1441 interpolation_matrix(i + 2, i + 2) = tmp;
1442 interpolation_matrix(i + 2, i + this->degree + 1) = tmp;
1443 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1444 i + 2 * this->degree) = tmp;
1445 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1446 i + 3 * this->degree - 1) = tmp;
1449 for (
unsigned int j = 0; j < this->degree - 1;)
1451 interpolation_matrix(i + 2,
1452 j + (i + 2) * this->degree + 2 -
1454 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1455 i + (j + 4) * this->degree - j -
1461 interpolation_matrix(i + source_fe.
degree + 1,
1462 i + this->degree + 1) = tmp;
1463 interpolation_matrix(i + 2 * source_fe.
degree,
1464 i + 2 * this->degree) = tmp;
1466 int factorial_j = factorial_i;
1467 int factorial_ij = 1;
1469 for (
unsigned int j = i + 1; j <= this->degree; ++j)
1471 factorial_ij *= j - i;
1474 (factorial_i * factorial_ij);
1475 interpolation_matrix(i + 2 * source_fe.
degree,
1476 j + 2 * this->degree) = tmp;
1477 int factorial_k = 1;
1479 for (
unsigned int k = 2; k <= this->degree; ++k)
1481 interpolation_matrix(
1482 i + (k + 2) * source_fe.
degree - k,
1483 j + (k + 2) * this->degree - k) =
1486 int factorial_l = factorial_k;
1487 int factorial_kl = 1;
1489 for (
unsigned int l = k + 1; l <= this->degree;
1492 factorial_kl *= l - k;
1495 if (((k + l) & 1) != 0u)
1496 interpolation_matrix(
1497 i + (k + 2) * source_fe.
degree - k,
1498 j + (l + 2) * this->degree - l) =
1501 (factorial_k * factorial_kl);
1504 interpolation_matrix(
1505 i + (k + 2) * source_fe.
degree - k,
1506 j + (l + 2) * this->degree - l) =
1509 (factorial_k * factorial_kl);
1515 for (
unsigned int k = 0; k < this->degree - 1;)
1517 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1518 j + (k + 4) * this->degree -
1524 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1525 j + 2 * this->degree) = tmp;
1526 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1527 j + 3 * this->degree - 1) = tmp;
1529 if (((i + j) & 1) != 0u)
1532 interpolation_matrix(i + 2, j + 2) = tmp;
1533 interpolation_matrix(i + 2, j + this->degree + 1) =
1535 interpolation_matrix(i + source_fe.
degree + 1,
1536 j + this->degree + 1) =
1540 for (
unsigned int k = 0; k < this->degree - 1;)
1542 interpolation_matrix(i + 2,
1543 k + (j + 2) * this->degree +
1549 int factorial_k = 1;
1551 for (
unsigned int j = 2; j <= this->degree; ++j)
1553 interpolation_matrix(i + (j + 2) * source_fe.
degree -
1555 i + (j + 2) * this->degree - j) =
1558 int factorial_l = factorial_k;
1559 int factorial_kl = 1;
1561 for (
unsigned int k = j + 1; k <= this->degree; ++k)
1563 factorial_kl *= k - j;
1566 if (((j + k) & 1) != 0u)
1567 interpolation_matrix(
1568 i + (j + 2) * source_fe.
degree - j,
1569 i + (k + 2) * this->degree - k) =
1571 factorial_l / (factorial_k * factorial_kl);
1574 interpolation_matrix(
1575 i + (j + 2) * source_fe.
degree - j,
1576 i + (k + 2) * this->degree - k) =
1578 (factorial_k * factorial_kl);
1588 interpolation_matrix(0, 0) = 0.5;
1589 interpolation_matrix(0, 2) = 0.5;
1590 interpolation_matrix(2, 2) = 1.0;
1591 interpolation_matrix(3, 2) = 0.5;
1592 interpolation_matrix(3, 3) = 0.5;
1594 for (
unsigned int i = 0; i < this->degree - 1;)
1596 for (
unsigned int line = 0;
1597 line < GeometryInfo<3>::lines_per_face;
1599 interpolation_matrix(1,
1600 i + line * (this->degree - 1) +
1603 for (
unsigned int j = 0; j < this->degree - 1;)
1605 interpolation_matrix(1,
1606 i + (j + 4) * this->degree - j) =
1611 interpolation_matrix(0, i + 4) = -1.0;
1612 interpolation_matrix(3, i + 3 * this->degree + 1) = -1.0;
1616 for (
unsigned int vertex = 0;
1617 vertex < GeometryInfo<3>::vertices_per_face;
1619 interpolation_matrix(1, vertex) = 0.25;
1621 int factorial_i = 1;
1623 for (
unsigned int i = 2; i <= this->degree; ++i)
1626 interpolation_matrix(i + 2, i + 2) = tmp;
1627 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1628 i + 3 * this->degree - 1) = tmp;
1630 interpolation_matrix(i + source_fe.
degree + 1, i + 2) =
1632 interpolation_matrix(i + source_fe.
degree + 1,
1633 i + this->degree + 1) = tmp;
1634 interpolation_matrix(i + 2 * source_fe.
degree,
1635 i + 2 * this->degree) = tmp;
1636 interpolation_matrix(i + 2 * source_fe.
degree,
1637 i + 3 * this->degree - 1) = tmp;
1640 for (
unsigned int j = 0; j < this->degree - 1;)
1642 interpolation_matrix(i + source_fe.
degree + 1,
1643 j + (i + 2) * this->degree + 2 -
1645 interpolation_matrix(i + 2 * source_fe.
degree,
1646 i + (j + 4) * this->degree - j -
1651 int factorial_k = 1;
1653 for (
unsigned int j = 2; j <= this->degree; ++j)
1655 interpolation_matrix(i + (j + 2) * source_fe.
degree -
1657 i + (j + 2) * this->degree - j) =
1660 int factorial_kl = 1;
1661 int factorial_l = factorial_k;
1663 for (
unsigned int k = j + 1; k <= this->degree; ++k)
1665 factorial_kl *= k - j;
1667 interpolation_matrix(
1668 i + (j + 2) * source_fe.
degree - j,
1669 i + (k + 2) * this->degree - k) =
1671 (factorial_k * factorial_kl);
1676 int factorial_j = factorial_i;
1677 int factorial_ij = 1;
1679 for (
unsigned int j = i + 1; j <= this->degree; ++j)
1681 factorial_ij *= j - i;
1684 (factorial_i * factorial_ij);
1685 interpolation_matrix(i + 2, j + 2) = tmp;
1688 for (
unsigned int k = 0; k < this->degree - 1;)
1690 interpolation_matrix(i + source_fe.
degree + 1,
1691 k + (j + 2) * this->degree +
1697 interpolation_matrix(i + source_fe.
degree + 1,
1699 interpolation_matrix(i + source_fe.
degree + 1,
1700 j + this->degree + 1) = tmp;
1702 if (((i + j) & 1) != 0u)
1705 interpolation_matrix(i + 2 * source_fe.
degree,
1706 j + 2 * this->degree) = tmp;
1707 interpolation_matrix(i + 2 * source_fe.
degree,
1708 j + 3 * this->degree - 1) = tmp;
1710 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1711 j + 3 * this->degree - 1) = tmp;
1712 int factorial_k = 1;
1714 for (
unsigned int k = 2; k <= this->degree; ++k)
1716 interpolation_matrix(
1717 i + (k + 2) * source_fe.
degree - k,
1718 j + (k + 2) * this->degree - k) =
1721 int factorial_l = factorial_k;
1722 int factorial_kl = 1;
1724 for (
unsigned int l = k + 1; l <= this->degree;
1727 factorial_kl *= l - k;
1729 interpolation_matrix(
1730 i + (k + 2) * source_fe.
degree - k,
1731 j + (l + 2) * this->degree - l) =
1733 (factorial_k * factorial_kl);
1739 for (
unsigned int k = 0; k < this->degree - 1;)
1741 interpolation_matrix(i + 2 * source_fe.
degree,
1742 j + (k + 4) * this->degree -
1754 for (
unsigned int vertex = 0;
1755 vertex < GeometryInfo<3>::vertices_per_face;
1757 interpolation_matrix(0, vertex) = 0.25;
1759 for (
unsigned int i = 0; i < this->degree - 1;)
1761 for (
unsigned int line = 0;
1762 line < GeometryInfo<3>::lines_per_face;
1764 interpolation_matrix(0,
1765 i + line * (this->degree - 1) +
1768 for (
unsigned int j = 0; j < this->degree - 1;)
1770 interpolation_matrix(0,
1771 i + (j + 4) * this->degree - j) =
1776 interpolation_matrix(1, i + 4) = -1.0;
1777 interpolation_matrix(2, i + 3 * this->degree + 1) = -1.0;
1781 interpolation_matrix(1, 0) = 0.5;
1782 interpolation_matrix(1, 1) = 0.5;
1783 interpolation_matrix(2, 2) = 0.5;
1784 interpolation_matrix(2, 3) = 0.5;
1785 interpolation_matrix(3, 3) = 1.0;
1787 int factorial_i = 1;
1789 for (
unsigned int i = 2; i <= this->degree; ++i)
1792 interpolation_matrix(i + 2, i + 2) = tmp;
1793 interpolation_matrix(i + 2, i + this->degree + 1) = tmp;
1794 interpolation_matrix(i + 2 * source_fe.
degree,
1795 i + 2 * this->degree) = tmp;
1796 interpolation_matrix(i + 2 * source_fe.
degree,
1797 i + 3 * this->degree - 1) = tmp;
1800 for (
unsigned int j = 0; j < this->degree - 1;)
1802 interpolation_matrix(i + 2,
1803 j + (i + 2) * this->degree + 2 -
1805 interpolation_matrix(i + 2 * source_fe.
degree,
1806 i + (j + 4) * this->degree - 2) =
1812 interpolation_matrix(i + source_fe.
degree + 1,
1813 i + this->degree + 1) = tmp;
1814 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1815 i + 3 * this->degree - 1) = tmp;
1816 int factorial_k = 1;
1818 for (
unsigned int j = 2; j <= this->degree; ++j)
1820 interpolation_matrix(i + (j + 2) * source_fe.
degree -
1822 i + (j + 2) * this->degree - j) =
1825 int factorial_l = factorial_k;
1826 int factorial_kl = 1;
1828 for (
unsigned int k = j + 1; k <= this->degree; ++k)
1830 factorial_kl *= k - j;
1832 interpolation_matrix(
1833 i + (j + 2) * source_fe.
degree - j,
1834 i + (k + 2) * this->degree - k) =
1836 (factorial_k * factorial_kl);
1841 int factorial_j = factorial_i;
1842 int factorial_ij = 1;
1844 for (
unsigned int j = i + 1; j <= this->degree; ++j)
1846 factorial_ij *= j - i;
1849 (factorial_i * factorial_ij);
1850 interpolation_matrix(i + 2, j + 2) = tmp;
1851 interpolation_matrix(i + 2, j + this->degree + 1) =
1853 interpolation_matrix(i + 2 * source_fe.
degree,
1854 j + 2 * this->degree) = tmp;
1855 interpolation_matrix(i + 2 * source_fe.
degree,
1856 j + 3 * this->degree - 1) = tmp;
1858 interpolation_matrix(i + source_fe.
degree + 1,
1859 j + this->degree + 1) = tmp;
1860 interpolation_matrix(i + 3 * source_fe.
degree - 1,
1861 j + 3 * this->degree - 1) = tmp;
1862 int factorial_k = 1;
1864 for (
unsigned int k = 2; k <= this->degree; ++k)
1866 interpolation_matrix(
1867 i + (k + 2) * source_fe.
degree - k,
1868 j + (k + 2) * this->degree - k) =
1871 int factorial_l = factorial_k;
1872 int factorial_kl = 1;
1874 for (
unsigned int l = k + 1; l <= this->degree;
1877 factorial_kl *= l - k;
1879 interpolation_matrix(
1880 i + (k + 2) * source_fe.
degree - k,
1881 j + (l + 2) * this->degree - l) =
1883 (factorial_k * factorial_kl);
1889 for (
unsigned int k = 0; k < this->degree - 1;)
1891 interpolation_matrix(i + 2,
1892 k + (j + 2) * this->degree +
1894 interpolation_matrix(i + 2 * source_fe.
degree,
1895 j + (k + 4) * this->degree -