21 const auto refEl = geom.
RefEl();
22 const Eigen::MatrixXd &nodeCoords = refEl.
NodeCoords();
25 for (
size_t codim = 0; codim <= geom.
RefEl().Dimension(); ++codim) {
27 const auto numSubEntities = refEl.NumSubEntities(codim);
28 for (
size_t subEntity = 0; subEntity < numSubEntities; ++subEntity) {
31 auto subRefEl = subGeom->RefEl();
32 const Eigen::MatrixXd &subNodeCoords = subRefEl.NodeCoords();
35 for (
size_t subNode = 0; subNode < subRefEl.NumNodes(); ++subNode) {
37 auto globalCoordsFromSub = subGeom->Global(subNodeCoords.col(subNode));
39 int subSubIdx = refEl.SubSubEntity2SubEntity(
40 codim, subEntity, geom.
DimLocal() - codim, subNode);
42 auto globalCoords = geom.
Global(nodeCoords.col(subSubIdx));
44 EXPECT_TRUE(globalCoordsFromSub.isApprox(globalCoords))
45 <<
"Global mapping of subNode " << subNode <<
" of subEntity "
46 << subEntity <<
" in relative codim " << codim
47 <<
" differs from global mapping of node " << subSubIdx;
53 Eigen::MatrixXd mapNodeCoords(nodeCoords.rows(), subRefEl.NumNodes());
54 for (
size_t subNode = 0; subNode < subRefEl.NumNodes(); ++subNode) {
55 const auto subSubIdx = refEl.SubSubEntity2SubEntity(
56 codim, subEntity, geom.
DimLocal() - codim, subNode);
57 mapNodeCoords.col(subNode) = nodeCoords.col(subSubIdx);
60 auto points = qrProvider(subRefEl).Points();
63 Eigen::MatrixXd paddedSubNodeCoords = Eigen::MatrixXd::Ones(
64 subNodeCoords.rows() + 1, subNodeCoords.cols());
65 paddedSubNodeCoords.block(0, 0, subNodeCoords.rows(),
66 subNodeCoords.cols()) = subNodeCoords;
67 Eigen::MatrixXd alphaBeta = paddedSubNodeCoords.transpose()
69 .solve(mapNodeCoords.transpose())
73 Eigen::MatrixXd paddedPoints =
74 Eigen::MatrixXd::Ones(points.rows() + 1, points.cols());
75 paddedPoints.block(0, 0, points.rows(), points.cols()) = points;
76 const Eigen::MatrixXd mappedPoints = alphaBeta * paddedPoints;
79 auto globalPointsFromSub = subGeom->Global(points);
81 auto globalPoints = geom.
Global(mappedPoints);
83 EXPECT_TRUE(globalPoints.isApprox(globalPointsFromSub))
84 <<
"Global mapping of points " << points <<
" from subEntity "
85 << subEntity <<
" in relative codim " << codim
86 <<
" differs from global mapping";