-----------------------------------------------------------------------------
| 66 | } |
| 67 | //----------------------------------------------------------------------------- |
| 68 | std::vector<std::uint16_t> vtk_triangle(int num_nodes) |
| 69 | { |
| 70 | std::vector<std::uint16_t> map; |
| 71 | map.reserve(num_nodes); |
| 72 | |
| 73 | // Vertices |
| 74 | map.insert(map.begin(), {0, 1, 2}); |
| 75 | |
| 76 | int degree = io::cells::cell_degree(mesh::CellType::triangle, num_nodes); |
| 77 | for (int k = 1; k < degree; ++k) |
| 78 | map.push_back(3 + 2 * (degree - 1) + k - 1); |
| 79 | for (int k = 1; k < degree; ++k) |
| 80 | map.push_back(3 + k - 1); |
| 81 | for (int k = 1; k < degree; ++k) |
| 82 | map.push_back(2 * degree - (k - 1)); |
| 83 | |
| 84 | if (degree < 3) |
| 85 | return map; |
| 86 | |
| 87 | // Interior VTK is ordered as a lower-order triangle, while DOLFINx |
| 88 | // orders them lexicographically |
| 89 | std::vector<std::uint16_t> rem(num_nodes - map.size()); |
| 90 | std::iota(rem.begin(), rem.end(), 3 * degree); |
| 91 | std::ranges::copy(vtk_triangle_remainders(rem), std::back_inserter(map)); |
| 92 | |
| 93 | return map; |
| 94 | } |
| 95 | //----------------------------------------------------------------------------- |
| 96 | std::vector<std::uint16_t> |
| 97 | vtk_tetrahedron_remainders(std::vector<std::uint16_t> remainders) |
no test coverage detected