1746 const unsigned int refinement_choice)
const
1750 if constexpr (dim == 3)
1758 switch (refinement_choice)
1762 return {{{{{{6, 4}}, {{4, 7}}, {{7, 6}}, {{X, X}}}},
1763 {{{{4, 5}}, {{5, 8}}, {{8, 4}}, {{X, X}}}},
1764 {{{{5, 6}}, {{6, 9}}, {{9, 5}}, {{X, X}}}},
1765 {{{{7, 8}}, {{8, 9}}, {{9, 7}}, {{X, X}}}},
1766 {{{{4, 6}}, {{6, 8}}, {{8, 4}}, {{X, X}}}},
1767 {{{{6, 5}}, {{5, 8}}, {{8, 6}}, {{X, X}}}},
1768 {{{{8, 7}}, {{7, 6}}, {{6, 8}}, {{X, X}}}},
1769 {{{{9, 6}}, {{6, 8}}, {{8, 9}}, {{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}}}},
1773 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1774 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1777 return {{{{{{6, 4}}, {{4, 7}}, {{7, 6}}, {{X, X}}}},
1778 {{{{4, 5}}, {{5, 8}}, {{8, 4}}, {{X, X}}}},
1779 {{{{5, 6}}, {{6, 9}}, {{9, 5}}, {{X, X}}}},
1780 {{{{7, 8}}, {{8, 9}}, {{9, 7}}, {{X, X}}}},
1781 {{{{5, 4}}, {{4, 7}}, {{7, 5}}, {{X, X}}}},
1782 {{{{6, 5}}, {{5, 7}}, {{7, 6}}, {{X, X}}}},
1783 {{{{8, 7}}, {{7, 5}}, {{5, 8}}, {{X, X}}}},
1784 {{{{7, 9}}, {{9, 5}}, {{5, 7}}, {{X, X}}}},
1785 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1786 {{{{X, X}}, {{X, X}}, {{X, X}}, {{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}}}}}};
1792 return {{{{{{6, 4}}, {{4, 7}}, {{7, 6}}, {{X, X}}}},
1793 {{{{4, 5}}, {{5, 8}}, {{8, 4}}, {{X, X}}}},
1794 {{{{5, 6}}, {{6, 9}}, {{9, 5}}, {{X, X}}}},
1795 {{{{7, 8}}, {{8, 9}}, {{9, 7}}, {{X, X}}}},
1796 {{{{5, 4}}, {{4, 9}}, {{9, 5}}, {{X, X}}}},
1797 {{{{4, 6}}, {{6, 9}}, {{9, 4}}, {{X, X}}}},
1798 {{{{7, 4}}, {{4, 9}}, {{9, 7}}, {{X, X}}}},
1799 {{{{4, 8}}, {{8, 9}}, {{9, 4}}, {{X, X}}}},
1800 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1801 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1802 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1803 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1804 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1812 constexpr ::ndarray<unsigned int, 13, 4, 2>
1813 quad_lines_vertices_pyramid = {
1815 {{{{13, 7}}, {{7, 9}}, {{9, 13}}, {{X, X}}}},
1816 {{{{5, 13}}, {{13, 9}}, {{9, 5}}, {{X, X}}}},
1818 {{{{7, 13}}, {{13, 10}}, {{10, 7}}, {{X, X}}}},
1819 {{{{13, 6}}, {{6, 10}}, {{10, 13}}, {{X, X}}}},
1821 {{{{8, 13}}, {{13, 11}}, {{11, 8}}, {{X, X}}}},
1822 {{{{13, 5}}, {{5, 11}}, {{11, 13}}, {{X, X}}}},
1824 {{{{13, 8}}, {{8, 12}}, {{12, 13}}, {{X, X}}}},
1825 {{{{6, 13}}, {{13, 12}}, {{12, 6}}, {{X, X}}}},
1827 {{{{9, 11}}, {{10, 12}}, {{9, 10}}, {{11, 12}}}},
1829 {{{{9, 10}}, {{10, 13}}, {{13, 9}}, {{X, X}}}},
1830 {{{{12, 11}}, {{11, 13}}, {{13, 12}}, {{X, X}}}},
1831 {{{{11, 9}}, {{9, 13}}, {{13, 11}}, {{X, X}}}},
1832 {{{{10, 12}}, {{12, 13}}, {{13, 10}}, {{X, X}}}}}};
1833 return quad_lines_vertices_pyramid;
1838 constexpr ::ndarray<unsigned int, 13, 4, 2>
1839 quad_lines_vertices_wedge = {
1841 {{{{12, 15}}, {{15, 17}}, {{17, 12}}, {{X, X}}}},
1842 {{{{15, 13}}, {{13, 16}}, {{16, 15}}, {{X, X}}}},
1843 {{{{17, 16}}, {{16, 14}}, {{14, 17}}, {{X, X}}}},
1844 {{{{15, 16}}, {{16, 17}}, {{17, 15}}, {{X, X}}}},
1846 {{{{7, 16}}, {{6, 15}}, {{7, 6}}, {{16, 15}}}},
1847 {{{{6, 15}}, {{8, 17}}, {{6, 8}}, {{15, 17}}}},
1848 {{{{8, 17}}, {{7, 16}}, {{8, 7}}, {{17, 16}}}},
1850 {{{{16, 10}}, {{15, 9}}, {{16, 15}}, {{10, 9}}}},
1851 {{{{15, 9}}, {{17, 11}}, {{15, 17}}, {{9, 11}}}},
1852 {{{{17, 11}}, {{16, 10}}, {{17, 16}}, {{11, 10}}}},
1853 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1854 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}},
1855 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1856 return quad_lines_vertices_wedge;
1861 constexpr ::ndarray<unsigned int, 13, 4, 2>
1862 quad_lines_vertices_hex = {
1863 {{{{{10, 22}}, {{24, 26}}, {{10, 24}}, {{22, 26}}}},
1864 {{{{24, 26}}, {{11, 23}}, {{24, 11}}, {{26, 23}}}},
1865 {{{{22, 14}}, {{26, 25}}, {{22, 26}}, {{14, 25}}}},
1866 {{{{26, 25}}, {{23, 15}}, {{26, 23}}, {{25, 15}}}},
1867 {{{{8, 24}}, {{20, 26}}, {{8, 20}}, {{24, 26}}}},
1868 {{{{20, 26}}, {{12, 25}}, {{20, 12}}, {{26, 25}}}},
1869 {{{{24, 9}}, {{26, 21}}, {{24, 26}}, {{9, 21}}}},
1870 {{{{26, 21}}, {{25, 13}}, {{26, 25}}, {{21, 13}}}},
1871 {{{{16, 20}}, {{22, 26}}, {{16, 22}}, {{20, 26}}}},
1872 {{{{22, 26}}, {{17, 21}}, {{22, 17}}, {{26, 21}}}},
1873 {{{{20, 18}}, {{26, 23}}, {{20, 26}}, {{18, 23}}}},
1874 {{{{26, 23}}, {{21, 19}}, {{26, 21}}, {{23, 19}}}},
1875 {{{{X, X}}, {{X, X}}, {{X, X}}, {{X, X}}}}}};
1876 return quad_lines_vertices_hex;
2028 const unsigned int refinement_choice)
const
2032 if constexpr (dim == 3)
2040 switch (refinement_choice)
2045 {{0, 4, 6, 7, X, X, X, X}},
2046 {{4, 1, 5, 8, X, X, X, X}},
2047 {{6, 5, 2, 9, X, X, X, X}},
2048 {{7, 8, 9, 3, X, X, X, X}},
2049 {{4, 5, 6, 8, X, X, X, X}},
2050 {{4, 7, 8, 6, X, X, X, X}},
2051 {{6, 9, 7, 8, X, X, X, X}},
2052 {{5, 8, 9, 6, X, X, X, X}},
2053 {{X, X, X, X, X, X, X, X}},
2054 {{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}},
2073 {{0, 4, 6, 7, X, X, X, X}},
2074 {{4, 1, 5, 8, X, X, X, X}},
2075 {{6, 5, 2, 9, X, X, X, X}},
2076 {{7, 8, 9, 3, X, X, X, X}},
2077 {{4, 5, 6, 9, X, X, X, X}},
2078 {{4, 7, 8, 9, X, X, X, X}},
2079 {{6, 9, 7, 4, X, X, X, X}},
2080 {{5, 8, 9, 4, X, X, X, X}},
2081 {{X, X, X, X, X, X, X, X}},
2082 {{X, X, X, X, X, X, X, X}},
2091 constexpr ::ndarray<unsigned int, 10, 8>
2092 cell_vertices_pyramid = {{
2093 {{0, 7, 5, 13, 9, X, X, X}},
2094 {{7, 1, 13, 6, 10, X, X, X}},
2095 {{5, 13, 2, 8, 11, X, X, X}},
2096 {{13, 6, 8, 3, 12, X, X, X}},
2097 {{5, 13, 11, 9, X, X, X, X}},
2098 {{13, 6, 12, 10, X, X, X, X}},
2099 {{7, 13, 9, 10, X, X, X, X}},
2100 {{13, 8, 11, 12, X, X, X, X}},
2101 {{9, 11, 10, 12, 13, X, X, X}},
2102 {{9, 10, 11, 12, 4, X, X, X}},
2104 return cell_vertices_pyramid;
2109 constexpr ::ndarray<unsigned int, 10, 8>
2110 cell_vertices_wedge = {{
2111 {{0, 6, 8, 12, 15, 17, X, X}},
2112 {{6, 1, 7, 15, 13, 16, X, X}},
2113 {{8, 7, 2, 17, 16, 14, X, X}},
2114 {{7, 8, 6, 16, 17, 15, X, X}},
2115 {{12, 15, 17, 3, 9, 11, X, X}},
2116 {{15, 13, 16, 9, 4, 10, X, X}},
2117 {{17, 16, 14, 11, 10, 5, X, X}},
2118 {{16, 17, 15, 10, 11, 9, X, X}},
2119 {{X, X, X, X, X, X, X, X}},
2120 {{X, X, X, X, X, X, X, X}},
2122 return cell_vertices_wedge;
2127 constexpr ::ndarray<unsigned int, 10, 8> cell_vertices_hex =
2129 {{0, 10, 8, 24, 16, 22, 20, 26}},
2130 {{10, 1, 24, 9, 22, 17, 26, 21}},
2131 {{8, 24, 2, 11, 20, 26, 18, 23}},
2132 {{24, 9, 11, 3, 26, 21, 23, 19}},
2133 {{16, 22, 20, 26, 4, 14, 12, 25}},
2134 {{22, 17, 26, 21, 14, 5, 25, 13}},
2135 {{20, 26, 18, 23, 12, 25, 6, 15}},
2136 {{26, 21, 23, 19, 25, 13, 15, 7}},
2137 {{X, X, X, X, X, X, X, X}},
2138 {{X, X, X, X, X, X, X, X}},
2140 return cell_vertices_hex;
3302 const unsigned int face,
3303 const unsigned int line,
3304 const unsigned int vertex,
3337 Assert(combined_face_orientation ==
3341 const static ::ndarray<unsigned int, 4, 3, 2> table = {
3342 {{{{{0, 1}}, {{1, 2}}, {{2, 0}}}},
3343 {{{{1, 0}}, {{0, 3}}, {{3, 1}}}},
3344 {{{{0, 2}}, {{2, 3}}, {{3, 0}}}},
3345 {{{{2, 1}}, {{1, 3}}, {{3, 2}}}}}};
3347 return table[face][line][
vertex];
3351 Assert(combined_face_orientation ==
3355 static const unsigned int X =
static_cast<unsigned int>(-1);
3356 const static ::ndarray<unsigned int, 5, 4, 2> table = {
3357 {{{{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}},
3358 {{{{0, 2}}, {{2, 4}}, {{4, 0}}, {{X, X}}}},
3359 {{{{3, 1}}, {{1, 4}}, {{4, 3}}, {{X, X}}}},
3360 {{{{1, 0}}, {{0, 4}}, {{4, 1}}, {{X, X}}}},
3361 {{{{2, 3}}, {{3, 4}}, {{4, 2}}, {{X, X}}}}}};
3363 return table[face][line][
vertex];
3367 Assert(combined_face_orientation ==
3371 static const unsigned int X =
static_cast<unsigned int>(-1);
3372 const static ::ndarray<unsigned int, 5, 4, 2> table = {
3373 {{{{{1, 0}}, {{0, 2}}, {{2, 1}}, {{X, X}}}},
3374 {{{{3, 4}}, {{4, 5}}, {{5, 3}}, {{X, X}}}},
3375 {{{{0, 3}}, {{1, 4}}, {{0, 1}}, {{3, 4}}}},
3376 {{{{1, 4}}, {{2, 5}}, {{1, 2}}, {{4, 5}}}},
3377 {{{{2, 5}}, {{0, 3}}, {{2, 0}}, {{5, 3}}}}}};
3379 return table[face][line][
vertex];
3383 Assert(combined_face_orientation ==
3387 const static ::ndarray<unsigned int, 6, 4, 2> table = {
3388 {{{{{0, 4}}, {{2, 6}}, {{0, 2}}, {{4, 6}}}},
3389 {{{{1, 5}}, {{3, 7}}, {{1, 3}}, {{5, 7}}}},
3390 {{{{0, 1}}, {{4, 5}}, {{0, 4}}, {{1, 5}}}},
3391 {{{{2, 3}}, {{6, 7}}, {{2, 6}}, {{3, 7}}}},
3392 {{{{0, 2}}, {{1, 3}}, {{0, 1}}, {{2, 3}}}},
3393 {{{{4, 6}}, {{5, 7}}, {{4, 5}}, {{6, 7}}}}}};
3395 return table[face][line][
vertex];