1725 const unsigned int refinement_choice)
const
1730 if constexpr (dim == 3)
1735 switch (refinement_choice)
1741 {{{{{{6, 4}}, {{4, 7}}, {{7, 6}}, {{X, X}}}},
1742 {{{{4, 5}}, {{5, 8}}, {{8, 4}}, {{X, X}}}},
1743 {{{{5, 6}}, {{6, 9}}, {{9, 5}}, {{X, X}}}},
1744 {{{{7, 8}}, {{8, 9}}, {{9, 7}}, {{X, X}}}},
1745 {{{{4, 6}}, {{6, 8}}, {{8, 4}}, {{X, X}}}},
1746 {{{{6, 5}}, {{5, 8}}, {{8, 6}}, {{X, X}}}},
1747 {{{{8, 7}}, {{7, 6}}, {{6, 8}}, {{X, X}}}},
1748 {{{{9, 6}}, {{6, 8}}, {{8, 9}}, {{X, X}}}},
1749 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1750 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1751 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1752 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1753 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1760 {{{{{{6, 4}}, {{4, 7}}, {{7, 6}}, {{X, X}}}},
1761 {{{{4, 5}}, {{5, 8}}, {{8, 4}}, {{X, X}}}},
1762 {{{{5, 6}}, {{6, 9}}, {{9, 5}}, {{X, X}}}},
1763 {{{{7, 8}}, {{8, 9}}, {{9, 7}}, {{X, X}}}},
1764 {{{{5, 4}}, {{4, 7}}, {{7, 5}}, {{X, X}}}},
1765 {{{{6, 5}}, {{5, 7}}, {{7, 6}}, {{X, X}}}},
1766 {{{{8, 7}}, {{7, 5}}, {{5, 8}}, {{X, X}}}},
1767 {{{{7, 9}}, {{9, 5}}, {{5, 7}}, {{X, X}}}},
1768 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1769 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1770 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1771 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1772 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1779 {{{{{{6, 4}}, {{4, 7}}, {{7, 6}}, {{X, X}}}},
1780 {{{{4, 5}}, {{5, 8}}, {{8, 4}}, {{X, X}}}},
1781 {{{{5, 6}}, {{6, 9}}, {{9, 5}}, {{X, X}}}},
1782 {{{{7, 8}}, {{8, 9}}, {{9, 7}}, {{X, X}}}},
1783 {{{{5, 4}}, {{4, 9}}, {{9, 5}}, {{X, X}}}},
1784 {{{{4, 6}}, {{6, 9}}, {{9, 4}}, {{X, X}}}},
1785 {{{{7, 4}}, {{4, 9}}, {{9, 7}}, {{X, X}}}},
1786 {{{{4, 8}}, {{8, 9}}, {{9, 4}}, {{X, X}}}},
1787 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1788 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1789 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1790 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1791 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1801 quad_lines_vertices_pyramid = {
1803 {{{{13, 7}}, {{7, 9}}, {{9, 13}}, {{X, X}}}},
1804 {{{{5, 13}}, {{13, 9}}, {{9, 5}}, {{X, X}}}},
1806 {{{{7, 13}}, {{13, 10}}, {{10, 7}}, {{X, X}}}},
1807 {{{{13, 6}}, {{6, 10}}, {{10, 13}}, {{X, X}}}},
1809 {{{{8, 13}}, {{13, 11}}, {{11, 8}}, {{X, X}}}},
1810 {{{{13, 5}}, {{5, 11}}, {{11, 13}}, {{X, X}}}},
1812 {{{{13, 8}}, {{8, 12}}, {{12, 13}}, {{X, X}}}},
1813 {{{{6, 13}}, {{13, 12}}, {{12, 6}}, {{X, X}}}},
1815 {{{{9, 11}}, {{10, 12}}, {{9, 10}}, {{11, 12}}}},
1817 {{{{9, 10}}, {{10, 13}}, {{13, 9}}, {{X, X}}}},
1818 {{{{12, 11}}, {{11, 13}}, {{13, 12}}, {{X, X}}}},
1819 {{{{11, 9}}, {{9, 13}}, {{13, 11}}, {{X, X}}}},
1820 {{{{10, 12}}, {{12, 13}}, {{13, 10}}, {{X, X}}}}}};
1821 return quad_lines_vertices_pyramid;
1827 quad_lines_vertices_wedge = {
1829 {{{{12, 15}}, {{15, 17}}, {{17, 12}}, {{X, X}}}},
1830 {{{{15, 13}}, {{13, 16}}, {{16, 15}}, {{X, X}}}},
1831 {{{{17, 16}}, {{16, 14}}, {{14, 17}}, {{X, X}}}},
1832 {{{{15, 16}}, {{16, 17}}, {{17, 15}}, {{X, X}}}},
1834 {{{{7, 16}}, {{6, 15}}, {{7, 6}}, {{16, 15}}}},
1835 {{{{6, 15}}, {{8, 17}}, {{6, 8}}, {{15, 17}}}},
1836 {{{{8, 17}}, {{7, 16}}, {{8, 7}}, {{17, 16}}}},
1838 {{{{16, 10}}, {{15, 9}}, {{16, 15}}, {{10, 9}}}},
1839 {{{{15, 9}}, {{17, 11}}, {{15, 17}}, {{9, 11}}}},
1840 {{{{17, 11}}, {{16, 10}}, {{17, 16}}, {{11, 10}}}},
1841 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1842 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1843 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1844 return quad_lines_vertices_wedge;
1850 quad_lines_vertices_hex = {
1851 {{{{{10, 22}}, {{24, 26}}, {{10, 24}}, {{22, 26}}}},
1852 {{{{24, 26}}, {{11, 23}}, {{24, 11}}, {{26, 23}}}},
1853 {{{{22, 14}}, {{26, 25}}, {{22, 26}}, {{14, 25}}}},
1854 {{{{26, 25}}, {{23, 15}}, {{26, 23}}, {{25, 15}}}},
1855 {{{{8, 24}}, {{20, 26}}, {{8, 20}}, {{24, 26}}}},
1856 {{{{20, 26}}, {{12, 25}}, {{20, 12}}, {{26, 25}}}},
1857 {{{{24, 9}}, {{26, 21}}, {{24, 26}}, {{9, 21}}}},
1858 {{{{26, 21}}, {{25, 13}}, {{26, 25}}, {{21, 13}}}},
1859 {{{{16, 20}}, {{22, 26}}, {{16, 22}}, {{20, 26}}}},
1860 {{{{22, 26}}, {{17, 21}}, {{22, 17}}, {{26, 21}}}},
1861 {{{{20, 18}}, {{26, 23}}, {{20, 26}}, {{18, 23}}}},
1862 {{{{26, 23}}, {{21, 19}}, {{26, 21}}, {{23, 19}}}},
1863 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1864 return quad_lines_vertices_hex;
2026 const unsigned int refinement_choice)
const
2031 if constexpr (dim == 3)
2036 switch (refinement_choice)
2042 {{0, 4, 6, 7, X, X, X, X}},
2043 {{4, 1, 5, 8, X, X, X, X}},
2044 {{6, 5, 2, 9, X, X, X, X}},
2045 {{7, 8, 9, 3, X, X, X, X}},
2046 {{4, 5, 6, 8, X, X, X, X}},
2047 {{4, 7, 8, 6, X, X, X, X}},
2048 {{6, 9, 7, 8, X, X, X, X}},
2049 {{5, 8, 9, 6, X, X, X, X}},
2050 {{X, X, X, X, X, X, X, X}},
2051 {{X, X, X, X, X, X, X, X}},
2059 {{0, 4, 6, 7, X, X, X, X}},
2060 {{4, 1, 5, 8, X, X, X, X}},
2061 {{6, 5, 2, 9, X, X, X, X}},
2062 {{7, 8, 9, 3, X, X, X, X}},
2063 {{4, 5, 6, 7, X, X, X, X}},
2064 {{4, 7, 8, 5, X, X, X, X}},
2065 {{6, 9, 7, 5, X, X, X, X}},
2066 {{5, 8, 9, 7, X, X, X, X}},
2067 {{X, X, X, X, X, X, X, X}},
2068 {{X, X, X, X, X, X, X, X}},
2076 {{0, 4, 6, 7, X, X, X, X}},
2077 {{4, 1, 5, 8, X, X, X, X}},
2078 {{6, 5, 2, 9, X, X, X, X}},
2079 {{7, 8, 9, 3, X, X, X, X}},
2080 {{4, 5, 6, 9, X, X, X, X}},
2081 {{4, 7, 8, 9, X, X, X, X}},
2082 {{6, 9, 7, 4, X, X, X, X}},
2083 {{5, 8, 9, 4, X, X, X, X}},
2084 {{X, X, X, X, X, X, X, X}},
2085 {{X, X, X, X, X, X, X, X}},
2096 cell_vertices_pyramid = {{
2097 {{0, 7, 5, 13, 9, X, X, X}},
2098 {{7, 1, 13, 6, 10, X, X, X}},
2099 {{5, 13, 2, 8, 11, X, X, X}},
2100 {{13, 6, 8, 3, 12, X, X, X}},
2101 {{5, 13, 11, 9, X, X, X, X}},
2102 {{13, 6, 12, 10, X, X, X, X}},
2103 {{7, 13, 9, 10, X, X, X, X}},
2104 {{13, 8, 11, 12, X, X, X, X}},
2105 {{9, 11, 10, 12, 13, X, X, X}},
2106 {{9, 10, 11, 12, 4, X, X, X}},
2108 return cell_vertices_pyramid;
2114 cell_vertices_wedge = {{
2115 {{0, 6, 8, 12, 15, 17, X, X}},
2116 {{6, 1, 7, 15, 13, 16, X, X}},
2117 {{8, 7, 2, 17, 16, 14, X, X}},
2118 {{7, 8, 6, 16, 17, 15, X, X}},
2119 {{12, 15, 17, 3, 9, 11, X, X}},
2120 {{15, 13, 16, 9, 4, 10, X, X}},
2121 {{17, 16, 14, 11, 10, 5, X, X}},
2122 {{16, 17, 15, 10, 11, 9, X, X}},
2123 {{X, X, X, X, X, X, X, X}},
2124 {{X, X, X, X, X, X, X, X}},
2126 return cell_vertices_wedge;
2133 {{0, 10, 8, 24, 16, 22, 20, 26}},
2134 {{10, 1, 24, 9, 22, 17, 26, 21}},
2135 {{8, 24, 2, 11, 20, 26, 18, 23}},
2136 {{24, 9, 11, 3, 26, 21, 23, 19}},
2137 {{16, 22, 20, 26, 4, 14, 12, 25}},
2138 {{22, 17, 26, 21, 14, 5, 25, 13}},
2139 {{20, 26, 18, 23, 12, 25, 6, 15}},
2140 {{26, 21, 23, 19, 25, 13, 15, 7}},
2141 {{X, X, X, X, X, X, X, X}},
2142 {{X, X, X, X, X, X, X, X}},
2144 return cell_vertices_hex;
3344 const unsigned int face,
3345 const unsigned int line,
3346 const unsigned int vertex,
3355 if constexpr (dim == 0)
3359 else if constexpr (dim == 1)
3363 else if constexpr (dim == 2)
3366 return face_to_cell_vertices(face, vertex, combined_face_orientation);
3367 else if constexpr (dim == 3)
3373 Assert(combined_face_orientation ==
3377 const static ::ndarray<unsigned int, 4, 3, 2> table = {
3378 {{{{{0, 1}}, {{1, 2}}, {{2, 0}}}},
3379 {{{{1, 0}}, {{0, 3}}, {{3, 1}}}},
3380 {{{{0, 2}}, {{2, 3}}, {{3, 0}}}},
3381 {{{{2, 1}}, {{1, 3}}, {{3, 2}}}}}};
3383 return table[face][line][vertex];
3387 Assert(combined_face_orientation ==
3391 static const unsigned int X =
static_cast<unsigned int>(-1);
3392 const static ::ndarray<unsigned int, 5, 4, 2> table = {
3393 {{{{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}},
3394 {{{{0, 2}}, {{2, 4}}, {{4, 0}}, {{X, X}}}},
3395 {{{{3, 1}}, {{1, 4}}, {{4, 3}}, {{X, X}}}},
3396 {{{{1, 0}}, {{0, 4}}, {{4, 1}}, {{X, X}}}},
3397 {{{{2, 3}}, {{3, 4}}, {{4, 2}}, {{X, X}}}}}};
3399 return table[face][line][vertex];
3403 Assert(combined_face_orientation ==
3407 static const unsigned int X =
static_cast<unsigned int>(-1);
3408 const static ::ndarray<unsigned int, 5, 4, 2> table = {
3409 {{{{{1, 0}}, {{0, 2}}, {{2, 1}}, {{X, X}}}},
3410 {{{{3, 4}}, {{4, 5}}, {{5, 3}}, {{X, X}}}},
3411 {{{{0, 3}}, {{1, 4}}, {{0, 1}}, {{3, 4}}}},
3412 {{{{1, 4}}, {{2, 5}}, {{1, 2}}, {{4, 5}}}},
3413 {{{{2, 5}}, {{0, 3}}, {{2, 0}}, {{5, 3}}}}}};
3415 return table[face][line][vertex];
3419 Assert(combined_face_orientation ==
3423 const static ::ndarray<unsigned int, 6, 4, 2> table = {
3424 {{{{{0, 4}}, {{2, 6}}, {{0, 2}}, {{4, 6}}}},
3425 {{{{1, 5}}, {{3, 7}}, {{1, 3}}, {{5, 7}}}},
3426 {{{{0, 1}}, {{4, 5}}, {{0, 4}}, {{1, 5}}}},
3427 {{{{2, 3}}, {{6, 7}}, {{2, 6}}, {{3, 7}}}},
3428 {{{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}},
3429 {{{{4, 6}}, {{5, 7}}, {{4, 5}}, {{6, 7}}}}}};
3431 return table[face][line][vertex];