xref: /petsc/src/dm/impls/plex/tests/ex69.c (revision 51b144c619aff302b570817d6f78637b8418d403)
16fc05355SMatthew G. Knepley static char help[] = "Tests for creation of cohesive meshes by transforms\n\n";
26fc05355SMatthew G. Knepley 
36fc05355SMatthew G. Knepley #include <petscdmplex.h>
46fc05355SMatthew G. Knepley #include <petscsf.h>
56fc05355SMatthew G. Knepley 
66fc05355SMatthew G. Knepley #include <petsc/private/dmpleximpl.h>
76fc05355SMatthew G. Knepley 
86fc05355SMatthew G. Knepley PETSC_EXTERN char tri_2_cv[];
96fc05355SMatthew G. Knepley char              tri_2_cv[] = "\
106fc05355SMatthew G. Knepley 2 4 6 3 1\n\
116fc05355SMatthew G. Knepley 0 2 1\n\
126fc05355SMatthew G. Knepley 1 2 3\n\
136fc05355SMatthew G. Knepley 4 1 5\n\
146fc05355SMatthew G. Knepley 4 0 1\n\
156fc05355SMatthew G. Knepley -1.0  0.0 0.0  1\n\
166fc05355SMatthew G. Knepley  0.0  1.0 0.0 -1\n\
176fc05355SMatthew G. Knepley  0.0 -1.0 0.0  1\n\
186fc05355SMatthew G. Knepley  1.0  0.0 0.0 -1\n\
196fc05355SMatthew G. Knepley -2.0  1.0 0.0  1\n\
206fc05355SMatthew G. Knepley -1.0  2.0 0.0 -1";
216fc05355SMatthew G. Knepley 
226fc05355SMatthew G. Knepley /* List of test meshes
236fc05355SMatthew G. Knepley 
246fc05355SMatthew G. Knepley Test tri_0: triangle
256fc05355SMatthew G. Knepley 
266fc05355SMatthew G. Knepley  4-10--5      8-16--7-14--4
276fc05355SMatthew G. Knepley  |\  1 |      |\     \  1 |
286fc05355SMatthew G. Knepley  | \   |      | \     \   |
296fc05355SMatthew G. Knepley  6  8  9  ->  9 12  2  11 13
306fc05355SMatthew G. Knepley  |   \ |      |   \     \ |
316fc05355SMatthew G. Knepley  | 0  \|      | 0  \     \|
326fc05355SMatthew G. Knepley  2--7--3      3-10--6-15--5
336fc05355SMatthew G. Knepley 
346fc05355SMatthew G. Knepley Test tri_1: triangle, not tensor
356fc05355SMatthew G. Knepley 
366fc05355SMatthew G. Knepley  4-10--5      8-10--7-16--4
376fc05355SMatthew G. Knepley  |\  1 |      |\     \  1 |
386fc05355SMatthew G. Knepley  | \   |      | \     \   |
396fc05355SMatthew G. Knepley  6  8  9  -> 11 14  2  13 15
406fc05355SMatthew G. Knepley  |   \ |      |   \     \ |
416fc05355SMatthew G. Knepley  | 0  \|      | 0  \     \|
426fc05355SMatthew G. Knepley  2--7--3      3-12--6--9--5
436fc05355SMatthew G. Knepley 
446fc05355SMatthew G. Knepley Test tri_2: 4 triangles, non-oriented surface
456fc05355SMatthew G. Knepley 
466fc05355SMatthew G. Knepley            9
476fc05355SMatthew G. Knepley           / \
486fc05355SMatthew G. Knepley          /   \
496fc05355SMatthew G. Knepley        17  2  16
506fc05355SMatthew G. Knepley        /       \
516fc05355SMatthew G. Knepley       /         \
526fc05355SMatthew G. Knepley      8-----15----5
536fc05355SMatthew G. Knepley       \         /|\
546fc05355SMatthew G. Knepley        \       / | \
556fc05355SMatthew G. Knepley        18  3  12 |  14
566fc05355SMatthew G. Knepley          \   /   |   \
576fc05355SMatthew G. Knepley           \ /    |    \
586fc05355SMatthew G. Knepley            4  0 11  1  7
596fc05355SMatthew G. Knepley             \    |    /
606fc05355SMatthew G. Knepley              \   |   /
616fc05355SMatthew G. Knepley              10  |  13
626fc05355SMatthew G. Knepley                \ | /
636fc05355SMatthew G. Knepley                 \|/
646fc05355SMatthew G. Knepley                  6
656fc05355SMatthew G. Knepley   becomes
666fc05355SMatthew G. Knepley            8
676fc05355SMatthew G. Knepley           / \
686fc05355SMatthew G. Knepley          /   \
696fc05355SMatthew G. Knepley         /     \
706fc05355SMatthew G. Knepley       25   2   24
716fc05355SMatthew G. Knepley       /         \
726fc05355SMatthew G. Knepley      /           \
736fc05355SMatthew G. Knepley    13-----18------9
746fc05355SMatthew G. Knepley 28  |     5    26/ \
756fc05355SMatthew G. Knepley    14----19----10   \
766fc05355SMatthew G. Knepley      \         /|   |\
776fc05355SMatthew G. Knepley       \       / |   | \
786fc05355SMatthew G. Knepley       21  3  20 |   |  23
796fc05355SMatthew G. Knepley         \   /   |   |   \
806fc05355SMatthew G. Knepley          \ /    |   |    \
816fc05355SMatthew G. Knepley           6  0 17 4 16 1  7
826fc05355SMatthew G. Knepley            \    |   |    /
836fc05355SMatthew G. Knepley             \   |   |   /
846fc05355SMatthew G. Knepley             15  |   |  22
856fc05355SMatthew G. Knepley               \ |   | /
866fc05355SMatthew G. Knepley                \|   |/
876fc05355SMatthew G. Knepley                12---11
886fc05355SMatthew G. Knepley                  27
896fc05355SMatthew G. Knepley 
906fc05355SMatthew G. Knepley Test tri_3: tri_2, in parallel
916fc05355SMatthew G. Knepley 
926fc05355SMatthew G. Knepley            6
936fc05355SMatthew G. Knepley           / \
946fc05355SMatthew G. Knepley          /   \
956fc05355SMatthew G. Knepley         /     \
966fc05355SMatthew G. Knepley       12   1   11
976fc05355SMatthew G. Knepley       /         \
986fc05355SMatthew G. Knepley      /           \
996fc05355SMatthew G. Knepley     5-----10------2
1006fc05355SMatthew G. Knepley                    \
1016fc05355SMatthew G. Knepley     5-----9-----3   2
1026fc05355SMatthew G. Knepley      \         /|   |\
1036fc05355SMatthew G. Knepley       \       / |   | \
1046fc05355SMatthew G. Knepley       10  1  8  |   |  9
1056fc05355SMatthew G. Knepley         \   /   |   |   \
1066fc05355SMatthew G. Knepley          \ /    |   |    \
1076fc05355SMatthew G. Knepley           2  0  7   7  0  4
1086fc05355SMatthew G. Knepley            \    |   |    /
1096fc05355SMatthew G. Knepley             \   |   |   /
1106fc05355SMatthew G. Knepley              6  |   |  8
1116fc05355SMatthew G. Knepley               \ |   | /
1126fc05355SMatthew G. Knepley                \|   |/
1136fc05355SMatthew G. Knepley                 4   3
1146fc05355SMatthew G. Knepley   becomes
1156fc05355SMatthew G. Knepley                  11
1166fc05355SMatthew G. Knepley                 / \
1176fc05355SMatthew G. Knepley                /   \
1186fc05355SMatthew G. Knepley               /     \
1196fc05355SMatthew G. Knepley             19   1   18
1206fc05355SMatthew G. Knepley             /         \
1216fc05355SMatthew G. Knepley            /           \
1226fc05355SMatthew G. Knepley           8-----14------4
1236fc05355SMatthew G. Knepley         22 \     3       |
1246fc05355SMatthew G. Knepley             9------15    |\
1256fc05355SMatthew G. Knepley                     \    | \
1266fc05355SMatthew G. Knepley     9------14-----5  \  20 |
1276fc05355SMatthew G. Knepley   20\    3     18/ \  \/   |
1286fc05355SMatthew G. Knepley    10----15-----6   |  5   |
1296fc05355SMatthew G. Knepley      \         /|   |  |   |\
1306fc05355SMatthew G. Knepley       \       / |   |  |   | \
1316fc05355SMatthew G. Knepley       17  1 16  |   |  |   |  17
1326fc05355SMatthew G. Knepley         \   /   | 2 |  | 2 |   \
1336fc05355SMatthew G. Knepley          \ /    |   |  |   |    \
1346fc05355SMatthew G. Knepley           4  0  13 12  13  12 0 10
1356fc05355SMatthew G. Knepley            \    |   |  |   |    /
1366fc05355SMatthew G. Knepley             \   |   |  |   |   /
1376fc05355SMatthew G. Knepley             11  |   |  |   |  16
1386fc05355SMatthew G. Knepley               \ |   |  |   | /
1396fc05355SMatthew G. Knepley                \|   |  |   |/
1406fc05355SMatthew G. Knepley                 8---7  7---6
1416fc05355SMatthew G. Knepley                  19      21
1426fc05355SMatthew G. Knepley 
1436fc05355SMatthew G. Knepley Test quad_0: quadrilateral
1446fc05355SMatthew G. Knepley 
1456fc05355SMatthew G. Knepley  5-10--6-11--7       5-12-10-20--9-14--6
1466fc05355SMatthew G. Knepley  |     |     |       |     |     |     |
1476fc05355SMatthew G. Knepley 12  0 13  1  14 --> 15  0 18  2 17  1  16
1486fc05355SMatthew G. Knepley  |     |     |       |     |     |     |
1496fc05355SMatthew G. Knepley  2--8--3--9--4       3-11--8-19--7-13--4
1506fc05355SMatthew G. Knepley 
1516fc05355SMatthew G. Knepley Test quad_1: quadrilateral, not tensor
1526fc05355SMatthew G. Knepley 
1536fc05355SMatthew G. Knepley  5-10--6-11--7       5-14-10-12--9-16--6
1546fc05355SMatthew G. Knepley  |     |     |       |     |     |     |
1556fc05355SMatthew G. Knepley 12  0 13  1  14 --> 17  0 20  2 19  1  18
1566fc05355SMatthew G. Knepley  |     |     |       |     |     |     |
1576fc05355SMatthew G. Knepley  2--8--3--9--4       3-13--8-11--7-15--4
1586fc05355SMatthew G. Knepley 
1596fc05355SMatthew G. Knepley Test quad_2: quadrilateral, 2 processes
1606fc05355SMatthew G. Knepley 
1616fc05355SMatthew G. Knepley  3--6--4  3--6--4       3--9--7-14--6   5-14--4--9--7
1626fc05355SMatthew G. Knepley  |     |  |     |       |     |     |   |     |     |
1636fc05355SMatthew G. Knepley  7  0  8  7  0  8  --> 10  0 12  1 11  12  1 11  0  10
1646fc05355SMatthew G. Knepley  |     |  |     |       |     |     |   |     |     |
1656fc05355SMatthew G. Knepley  1--5--2  1--5--2       2--8--5-13--4   3-13--2--8--6
1666fc05355SMatthew G. Knepley 
1676fc05355SMatthew G. Knepley Test quad_3: quadrilateral, 4 processes, non-oriented surface
1686fc05355SMatthew G. Knepley 
1696fc05355SMatthew G. Knepley  3--6--4  3--6--4      3--9--7-14--6   5-14--4--9--7
1706fc05355SMatthew G. Knepley  |     |  |     |      |     |     |   |     |     |
1716fc05355SMatthew G. Knepley  7  0  8  7  0  8     10  0  12 1  11 12  1 11  0  10
1726fc05355SMatthew G. Knepley  |     |  |     |      |     |     |   |     |     |
1736fc05355SMatthew G. Knepley  1--5--2  1--5--2      2--8--5-13--4   3-13--2--8--6
1746fc05355SMatthew G. Knepley                    -->
1756fc05355SMatthew G. Knepley  3--6--4  3--6--4      3--9--7-14--6   5-14--4--9--7
1766fc05355SMatthew G. Knepley  |     |  |     |      |     |     |   |     |     |
1776fc05355SMatthew G. Knepley  7  0  8  7  0  8     10  0  12 1  11 12  1 11  0  10
1786fc05355SMatthew G. Knepley  |     |  |     |      |     |     |   |     |     |
1796fc05355SMatthew G. Knepley  1--5--2  1--5--2      2--8--5-13--4   3-13--2--8--6
1806fc05355SMatthew G. Knepley 
1816fc05355SMatthew G. Knepley Test quad_4: embedded fault
1826fc05355SMatthew G. Knepley 
1836fc05355SMatthew G. Knepley 14-24-15-25-16-26--17
1846fc05355SMatthew G. Knepley  |     |     |     |
1856fc05355SMatthew G. Knepley 28  3 30  4 32  5  34
1866fc05355SMatthew G. Knepley  |     |     |     |
1876fc05355SMatthew G. Knepley 10-21-11-22-12-23--13
1886fc05355SMatthew G. Knepley  |     |     |     |
1896fc05355SMatthew G. Knepley 27  0 29  1 31  2  33
1906fc05355SMatthew G. Knepley  |     |     |     |
1916fc05355SMatthew G. Knepley  6-18--7-19--8-20--9
1926fc05355SMatthew G. Knepley 
1936fc05355SMatthew G. Knepley becomes
1946fc05355SMatthew G. Knepley 
1956fc05355SMatthew G. Knepley  13-26-14-27-15-28--16
1966fc05355SMatthew G. Knepley   |     |     |     |
1976fc05355SMatthew G. Knepley  30  3 32  4 39  5  40
1986fc05355SMatthew G. Knepley   |     |     |     |
1996fc05355SMatthew G. Knepley  12-25-17-36-19-38--21
2006fc05355SMatthew G. Knepley         |     |     |
2016fc05355SMatthew G. Knepley        41  6 42  7  43
2026fc05355SMatthew G. Knepley         |     |     |
2036fc05355SMatthew G. Knepley  12-25-17-35-18-37--20
2046fc05355SMatthew G. Knepley   |     |     |     |
2056fc05355SMatthew G. Knepley  29  0 31  1 33  2  34
2066fc05355SMatthew G. Knepley   |     |     |     |
2076fc05355SMatthew G. Knepley   8-22--9-23-10-24--11
2086fc05355SMatthew G. Knepley 
2096fc05355SMatthew G. Knepley Test quad_5: two faults
2106fc05355SMatthew G. Knepley 
2116fc05355SMatthew G. Knepley 14-24-15-25-16-26--17
2126fc05355SMatthew G. Knepley  |     |     |     |
2136fc05355SMatthew G. Knepley 28  3 30  4 32  5  34
2146fc05355SMatthew G. Knepley  |     |     |     |
2156fc05355SMatthew G. Knepley 10-21-11-22-12-23--13
2166fc05355SMatthew G. Knepley  |     |     |     |
2176fc05355SMatthew G. Knepley 27  0 29  1 31  2  33
2186fc05355SMatthew G. Knepley  |     |     |     |
2196fc05355SMatthew G. Knepley  6-18--7-19--8-20--9
2206fc05355SMatthew G. Knepley 
2216fc05355SMatthew G. Knepley becomes
2226fc05355SMatthew G. Knepley 
2236fc05355SMatthew G. Knepley 12-26-13-27-14-28--15
2246fc05355SMatthew G. Knepley  |     |     |     |
2256fc05355SMatthew G. Knepley 37  4 31  3 33  5  40
2266fc05355SMatthew G. Knepley  |     |     |     |
2276fc05355SMatthew G. Knepley 17-36-18-25-19-39--21
2286fc05355SMatthew G. Knepley  |     |     |     |
2296fc05355SMatthew G. Knepley 43  6  44   41  7  42
2306fc05355SMatthew G. Knepley  |     |     |     |
2316fc05355SMatthew G. Knepley 16-35-18-25-19-38--20
2326fc05355SMatthew G. Knepley  |     |     |     |
2336fc05355SMatthew G. Knepley 29  0 30  1 32  2  34
2346fc05355SMatthew G. Knepley  |     |     |     |
2356fc05355SMatthew G. Knepley  8-22--9-23-10-24--11
2366fc05355SMatthew G. Knepley 
2376fc05355SMatthew G. Knepley Test quad_6: T-junction
2386fc05355SMatthew G. Knepley 
2396fc05355SMatthew G. Knepley 14-24-15-25-16-26--17
2406fc05355SMatthew G. Knepley  |     |     |     |
2416fc05355SMatthew G. Knepley 28  3 30  4 32  5  34
2426fc05355SMatthew G. Knepley  |     |     |     |
2436fc05355SMatthew G. Knepley 10-21-11-22-12-23--13
2446fc05355SMatthew G. Knepley  |     |     |     |
2456fc05355SMatthew G. Knepley 27  0 29  1 31  2  33
2466fc05355SMatthew G. Knepley  |     |     |     |
2476fc05355SMatthew G. Knepley  6-18--7-19--8-20--9
2486fc05355SMatthew G. Knepley 
2496fc05355SMatthew G. Knepley becomes
2506fc05355SMatthew G. Knepley 
2516fc05355SMatthew G. Knepley  13-26-14-27-15-28--16
2526fc05355SMatthew G. Knepley   |     |     |     |
2536fc05355SMatthew G. Knepley  30  3 32  4 39  5  40
2546fc05355SMatthew G. Knepley   |     |     |     |
2556fc05355SMatthew G. Knepley  12-25-17-36-19-38--21
2566fc05355SMatthew G. Knepley         |     |     |
2576fc05355SMatthew G. Knepley        41  6 42  7  43
2586fc05355SMatthew G. Knepley         |     |     |
2596fc05355SMatthew G. Knepley  12-25-17-35-18-37--20
2606fc05355SMatthew G. Knepley   |     |     |     |
2616fc05355SMatthew G. Knepley  29  0 31  1 33  2  34
2626fc05355SMatthew G. Knepley   |     |     |     |
2636fc05355SMatthew G. Knepley   8-22--9-23-10-24--11
2646fc05355SMatthew G. Knepley 
2656fc05355SMatthew G. Knepley becomes
2666fc05355SMatthew G. Knepley 
2676fc05355SMatthew G. Knepley  14-28-15-41-21-44--20-29-16
2686fc05355SMatthew G. Knepley   |     |     |     |     |
2696fc05355SMatthew G. Knepley  31  3 33  5 43  8 42  4  40
2706fc05355SMatthew G. Knepley   |     |     |     |     |
2716fc05355SMatthew G. Knepley  13-27-17-37-23-46--23-39-19
2726fc05355SMatthew G. Knepley         |     |     |     |
2736fc05355SMatthew G. Knepley        47  6 48    48  7  49
2746fc05355SMatthew G. Knepley         |     |     |     |
2756fc05355SMatthew G. Knepley  13-27-17-36-22-45--22-38-18
2766fc05355SMatthew G. Knepley   |     |     |     |     |
2776fc05355SMatthew G. Knepley  30  0 32  1 34    34  2  35
2786fc05355SMatthew G. Knepley   |     |     |     |     |
2796fc05355SMatthew G. Knepley   9-24-10-25-11-----11-26-12
2806fc05355SMatthew G. Knepley 
281d926f305SMatthew G. Knepley Test tet_0: Two tets sharing a face
282d926f305SMatthew G. Knepley 
283d926f305SMatthew G. Knepley  cell   5 _______    cell
284d926f305SMatthew G. Knepley  0    / | \      \      1
285d926f305SMatthew G. Knepley     19  |  16     20
286d926f305SMatthew G. Knepley     /  15   \      \
287d926f305SMatthew G. Knepley    2-17------4--22--6
288d926f305SMatthew G. Knepley     \   |   /      /
289d926f305SMatthew G. Knepley     18  |  14     21
290d926f305SMatthew G. Knepley       \ | /      /
291d926f305SMatthew G. Knepley         3-------
292d926f305SMatthew G. Knepley 
293d926f305SMatthew G. Knepley becomes
294d926f305SMatthew G. Knepley 
295d926f305SMatthew G. Knepley  cell  10 ___36____9______    cell
296d926f305SMatthew G. Knepley  0    / | \        |\      \     1
297d926f305SMatthew G. Knepley     29  |  27      | 26     31
298d926f305SMatthew G. Knepley     /  25   \     24  \      \
299d926f305SMatthew G. Knepley    3-28------8--35-----7--33--4
300d926f305SMatthew G. Knepley     \   |   /      |  /      /
301d926f305SMatthew G. Knepley     30  |  23      | 22     32
302d926f305SMatthew G. Knepley       \ | /        |/      /
303d926f305SMatthew G. Knepley         6----34----5------
304d926f305SMatthew G. Knepley          cell 2
305d926f305SMatthew G. Knepley 
306d926f305SMatthew G. Knepley Test tet_1: Two tets sharing a face in parallel
307d926f305SMatthew G. Knepley 
308d926f305SMatthew G. Knepley  cell   4          3______    cell
309d926f305SMatthew G. Knepley  0    / | \        |\      \     0
310d926f305SMatthew G. Knepley     14  |  11      | 11     12
311d926f305SMatthew G. Knepley     /  10   \     10  \      \
312d926f305SMatthew G. Knepley    1-12------3     |   2--14--4
313d926f305SMatthew G. Knepley     \   |   /      |  /      /
314d926f305SMatthew G. Knepley     13  |  9       | 9      13
315d926f305SMatthew G. Knepley       \ | /        |/      /
316d926f305SMatthew G. Knepley         2          1------
317d926f305SMatthew G. Knepley 
318d926f305SMatthew G. Knepley becomes
319d926f305SMatthew G. Knepley            cell 1              cell 1
320d926f305SMatthew G. Knepley  cell   8---28---7           7---28---6______    cell
321d926f305SMatthew G. Knepley  0    / | \      |\          |\       |\      \     0
322d926f305SMatthew G. Knepley     24  |  22    | 21        | 22     | 21     23
323d926f305SMatthew G. Knepley     /  20   \    |   \       |  \    19  \      \
324d926f305SMatthew G. Knepley    2-23------6---27---5     20  5---27---4--25--8
325d926f305SMatthew G. Knepley     \   |   /   19   /       |  /     |  /      /
326d926f305SMatthew G. Knepley     25  |  18    | 17        | 18     | 17     24
327d926f305SMatthew G. Knepley       \ | /      |/          |/       |/      /
328d926f305SMatthew G. Knepley         4---26---3           3---26---2------
329d926f305SMatthew G. Knepley 
330d926f305SMatthew G. Knepley Test hex_0: Two hexes sharing a face
331d926f305SMatthew G. Knepley 
332d926f305SMatthew G. Knepley cell  11-----31-----12-----32------13 cell
333d926f305SMatthew G. Knepley 0     /|            /|            /|     1
334d926f305SMatthew G. Knepley     36 |   22      37|   24      38|
335d926f305SMatthew G. Knepley     /  |          /  |          /  |
336d926f305SMatthew G. Knepley    8-----29------9-----30------10  |
337d926f305SMatthew G. Knepley    |   |     18  |   |     20  |   |
338d926f305SMatthew G. Knepley    |  42         |  43         |   44
339d926f305SMatthew G. Knepley    |14 |         |15 |         |16 |
340d926f305SMatthew G. Knepley   39   |  17    40   |   19   41   |
341d926f305SMatthew G. Knepley    |   5-----27--|---6-----28--|---7
342d926f305SMatthew G. Knepley    |  /          |  /          |  /
343d926f305SMatthew G. Knepley    | 33   21     | 34    23    | 35
344d926f305SMatthew G. Knepley    |/            |/            |/
345d926f305SMatthew G. Knepley    2-----25------3-----26------4
346d926f305SMatthew G. Knepley 
347d926f305SMatthew G. Knepley becomes
348d926f305SMatthew G. Knepley 
349d926f305SMatthew G. Knepley                          cell 2
350d926f305SMatthew G. Knepley cell   9-----38-----18-----62------17----42------10 cell
351d926f305SMatthew G. Knepley 0     /|            /|            /|            /|     1
352d926f305SMatthew G. Knepley     45 |   30      54|  32       53|   24      46|
353d926f305SMatthew G. Knepley     /  |          /  |          /  |          /  |
354d926f305SMatthew G. Knepley    7-----37-----16-----61------15--|-41------8   |
355d926f305SMatthew G. Knepley    |   |     28  |   |         |   |     22  |   |
356d926f305SMatthew G. Knepley    |  49         |  58         |   57        |   50
357d926f305SMatthew G. Knepley    |19 |         |26 |         |25 |         |20 |
358d926f305SMatthew G. Knepley   47   |  27    56   |        55   |   21   48   |
359d926f305SMatthew G. Knepley    |   5-----36--|--14-----60--|---13----40--|---6
360d926f305SMatthew G. Knepley    |  /          |  /          |  /          |  /
361d926f305SMatthew G. Knepley    | 43   29     | 52   31     | 51    23    | 44
362d926f305SMatthew G. Knepley    |/            |/            |/            |/
363d926f305SMatthew G. Knepley    3-----35-----12-----59------11----39------4
364d926f305SMatthew G. Knepley 
365d926f305SMatthew G. Knepley Test hex_1: Two hexes sharing a face, in parallel
366d926f305SMatthew G. Knepley 
367d926f305SMatthew G. Knepley cell   7-----18------8             7-----18------8 cell
368d926f305SMatthew G. Knepley 0     /|            /|            /|            /|    0
369d926f305SMatthew G. Knepley     21 |   14      22|           21|   14      22|
370d926f305SMatthew G. Knepley     /  |          /  |          /  |          /  |
371d926f305SMatthew G. Knepley    5-----17------6   |         5---|-17------6   |
372d926f305SMatthew G. Knepley    |   |     12  |   |         |   |     12  |   |
373d926f305SMatthew G. Knepley    |  25         |  26         |  25         |  26
374d926f305SMatthew G. Knepley    | 9 |         |10 |         | 9 |         |10 |
375d926f305SMatthew G. Knepley   23   |  11    24   |        23   |   11   24   |
376d926f305SMatthew G. Knepley    |   3-----16--|---4         |   3-----16--|---4
377d926f305SMatthew G. Knepley    |  /          |  /          |  /          |  /
378d926f305SMatthew G. Knepley    | 19   13     | 20          | 19    13    | 20
379d926f305SMatthew G. Knepley    |/            |/            |/            |/
380d926f305SMatthew G. Knepley    1-----15------2             1-----15------2
381d926f305SMatthew G. Knepley 
382d926f305SMatthew G. Knepley becomes
383d926f305SMatthew G. Knepley                         cell 1                      cell 1
384d926f305SMatthew G. Knepley cell   5-----28-----13-----44-----12             9-----44-----8-----28------13 cell
385d926f305SMatthew G. Knepley 0     /|            /|           /|             /|           /|            /|     0
386d926f305SMatthew G. Knepley     30 |   20      36|   22     35|            36|   22     35|   20      30|
387d926f305SMatthew G. Knepley     /  |          /  |         /  |           /  |         /  |          /  |
388d926f305SMatthew G. Knepley    4-----27-----11-----43-----10  |          7-----43-----6-----27------12  |
389d926f305SMatthew G. Knepley    |   |     18  |   |        |   |          |   |        |   |     18  |   |
390d926f305SMatthew G. Knepley    |  32         |  40        |   39         |  40        |   39        |   32
391d926f305SMatthew G. Knepley    |14 |         |16 |        | 15|          |15 |        |14 |         |16 |
392d926f305SMatthew G. Knepley   31   |  17    38   |        37  |         38   |       37   |   17   31   |
393d926f305SMatthew G. Knepley    |   3-----26--|---9-----42-|---8          |   5----42--|---4-----26--|---11
394d926f305SMatthew G. Knepley    |  /          |  /         |  /           |  /         |  /          |  /
395d926f305SMatthew G. Knepley    | 29   19     | 34    21   | 33           | 34    21   | 33    19    | 29
396d926f305SMatthew G. Knepley    |/            |/           |/             |/           |/            |/
397d926f305SMatthew G. Knepley    2-----25------7-----41-----6              3-----41-----2-----25------10
398d926f305SMatthew G. Knepley 
399d926f305SMatthew G. Knepley Test hex_2: hexahedra, 4 processes, non-oriented surface
400d926f305SMatthew G. Knepley 
401d926f305SMatthew G. Knepley           cell 0                  cell 0
402d926f305SMatthew G. Knepley        7-----18------8       7-----18------8
403d926f305SMatthew G. Knepley       /|            /|      /|            /|
404d926f305SMatthew G. Knepley     21 |   14      22|    21 |   14      22|
405d926f305SMatthew G. Knepley     /  |          /  |    /  |          /  |
406d926f305SMatthew G. Knepley    5-----17------6   |   5-----17------6   |
407d926f305SMatthew G. Knepley    |   |     12  |   |   |   |     12  |   |
408d926f305SMatthew G. Knepley    |  25         |  26   |  25         |   26
409d926f305SMatthew G. Knepley    |9  |         |10 |   |9  |         |10 |
410d926f305SMatthew G. Knepley   23   |  11    24   |  23   |  11    24   |
411d926f305SMatthew G. Knepley    |   3-----16--|---4   |   3-----16--|---4
412d926f305SMatthew G. Knepley    |  /          |  /    |  /          |  /
413d926f305SMatthew G. Knepley    | 19    13    | 20    | 19    13    | 20
414d926f305SMatthew G. Knepley    |/            |/      |/            |/
415d926f305SMatthew G. Knepley    1-----15------2       1-----15------2
416d926f305SMatthew G. Knepley 
417d926f305SMatthew G. Knepley        7-----18------8       7-----18------8
418d926f305SMatthew G. Knepley       /|            /|      /|            /|
419d926f305SMatthew G. Knepley     21 |   14      22|    21 |   14      22|
420d926f305SMatthew G. Knepley     /  |          /  |    /  |          /  |
421d926f305SMatthew G. Knepley    5-----17------6   |   5-----17------6   |
422d926f305SMatthew G. Knepley    |   |     12  |   |   |   |     12  |   |
423d926f305SMatthew G. Knepley    |  25         |  26   |  25         |  26
424d926f305SMatthew G. Knepley    |9  |         |10 |   |9  |         |10 |
425d926f305SMatthew G. Knepley   23   |  11    24   |  23   |   11   24   |
426d926f305SMatthew G. Knepley    |   3-----16--|---4   |   3-----16--|---4
427d926f305SMatthew G. Knepley    |  /          |  /    |  /          |  /
428d926f305SMatthew G. Knepley    | 19   13     | 20    | 19    13    | 20
429d926f305SMatthew G. Knepley    |/            |/      |/            |/
430d926f305SMatthew G. Knepley    1-----15------2       1-----15------2
431d926f305SMatthew G. Knepley       cell 0                cell 0
432d926f305SMatthew G. Knepley 
433d926f305SMatthew G. Knepley becomes
434d926f305SMatthew G. Knepley 
435d926f305SMatthew G. Knepley           cell 0         cell 1                cell 1        cell 0
436d926f305SMatthew G. Knepley        5-----28------13----44------12      9-----44------8-----28------13
437d926f305SMatthew G. Knepley       /|            /|            /|      /|            /|            /|
438d926f305SMatthew G. Knepley     30 |   20      36|   22      35|     36|   22     35 |   20      30|
439d926f305SMatthew G. Knepley     /  |          /  |          /  |    /  |          /  |          /  |
440d926f305SMatthew G. Knepley    4-----27------11----43------10  |   7-----43------6-----27------12  |
441d926f305SMatthew G. Knepley    |   |     18  |   |         |   |   |   |         |   |     18  |   |
442d926f305SMatthew G. Knepley    |  32         |  40         |  39   |  40         |  39         |   32
443d926f305SMatthew G. Knepley    |14 |         |16 |         |15 |   |15 |         |14 |         |16 |
444d926f305SMatthew G. Knepley   31   |  17    38   |         37  |   38  |        37   |  17    31   |
445d926f305SMatthew G. Knepley    |   3-----26--|---9-----42--|---8   |   5-----42--|---4-----26--|---11
446d926f305SMatthew G. Knepley    |  /          |  /          |  /    |  /          |  /          |  /
447d926f305SMatthew G. Knepley    | 29    19    | 34    21    |33     | 34    21    | 33    19    | 29
448d926f305SMatthew G. Knepley    |/            |/            |/      |/            |/            |/
449d926f305SMatthew G. Knepley    2-----25------7-----41------6       3-----41------2-----25------10
450d926f305SMatthew G. Knepley 
451d926f305SMatthew G. Knepley        5-----28------13----44------12      9-----44------8-----28------13
452d926f305SMatthew G. Knepley       /|            /|            /|      /|            /|            /|
453d926f305SMatthew G. Knepley     30 |   20      36|   22      35|     36|    22     35|   20      30|
454d926f305SMatthew G. Knepley     /  |          /  |          /  |    /  |          /  |          /  |
455d926f305SMatthew G. Knepley    4-----27------11----43------10  |   7-----43------6-----27------12  |
456d926f305SMatthew G. Knepley    |   |     18  |   |         |   |   |   |         |   |     18  |   |
457d926f305SMatthew G. Knepley    |  32         |  40         |   39  |   40        |  39         |   32
458d926f305SMatthew G. Knepley    |14 |         |16 |         |15 |   |15 |         |14 |         |16 |
459d926f305SMatthew G. Knepley   31   |  17    38   |         37  |   38  |        37   |  17    31   |
460d926f305SMatthew G. Knepley    |   3-----26--|---9-----42--|---8   |   5-----42--|---4-----26--|---11
461d926f305SMatthew G. Knepley    |  /          |  /          |  /    |  /          |  /          |  /
462d926f305SMatthew G. Knepley    | 29    19    | 34    21    |33     | 34    21    | 33    19    | 29
463d926f305SMatthew G. Knepley    |/            |/            |/      |/            |/            |/
464d926f305SMatthew G. Knepley    2-----25------7-----41------6       3-----41------2-----25------10
465d926f305SMatthew G. Knepley       cell 0         cell 1                cell 1        cell 0
466d926f305SMatthew G. Knepley 
467d926f305SMatthew G. Knepley Test hex_3: T-junction
468d926f305SMatthew G. Knepley 
469d926f305SMatthew G. Knepley       19-----52-----20-----53------21
470d926f305SMatthew G. Knepley       /|            /|            /|
471d926f305SMatthew G. Knepley     60 |   38      61|   41      62|
472d926f305SMatthew G. Knepley     /  |          /  |          /  |
473d926f305SMatthew G. Knepley   16-----50-----17-----51------18  |
474d926f305SMatthew G. Knepley    |   |     33  |   |     35  |   |
475d926f305SMatthew G. Knepley    |  70         |  72         |   74
476d926f305SMatthew G. Knepley    |25 |         |26 |         |27 |
477d926f305SMatthew G. Knepley   64   |  32    66   |  34    68   |
478d926f305SMatthew G. Knepley    |  13-----48--|--14-----49--|---15
479d926f305SMatthew G. Knepley    |  /|         |  /|         |  /|
480d926f305SMatthew G. Knepley    |57 |   37    | 58|   40    | 59|
481d926f305SMatthew G. Knepley    |/  |         |/  |         |/  |
482d926f305SMatthew G. Knepley   10-----46-----11-----47------12  |
483d926f305SMatthew G. Knepley    |   |     29  |   |     31  |   |
484d926f305SMatthew G. Knepley    |  69         |  71         |   73
485d926f305SMatthew G. Knepley    |22 |         |23 |         |24 |
486d926f305SMatthew G. Knepley   63   |  28    65   |   30   67   |
487d926f305SMatthew G. Knepley    |   7-----44--|---8-----45--|---9
488d926f305SMatthew G. Knepley    |  /          |  /          |  /
489d926f305SMatthew G. Knepley    | 54   36     | 55    39    | 56
490d926f305SMatthew G. Knepley    |/            |/            |/
491d926f305SMatthew G. Knepley    4-----42------5-----43------6
492d926f305SMatthew G. Knepley       cell 0         cell 1
493d926f305SMatthew G. Knepley 
494d926f305SMatthew G. Knepley becomes
495d926f305SMatthew G. Knepley 
496d926f305SMatthew G. Knepley       15----102-----28---112----___27-----73------16
497d926f305SMatthew G. Knepley       /|            /|         /   /             /|
498d926f305SMatthew G. Knepley     77 |   55     104|      ---  103    46      78|
499d926f305SMatthew G. Knepley     /  |          /  |     /     /             /  |
500d926f305SMatthew G. Knepley   13----101-----26---111--/----25-----72------14  |
501d926f305SMatthew G. Knepley    |   |     54  |   |  107   /           43  |   |
502d926f305SMatthew G. Knepley    |  81         |  108 / 51 /                |   82
503d926f305SMatthew G. Knepley    |40 |         |52 | /   105                |41 |
504d926f305SMatthew G. Knepley   79   |  53    106  |/   /            42    80   |
505d926f305SMatthew G. Knepley    |  21-----87--|--31---/-89------23-------/----/
506d926f305SMatthew G. Knepley    |  /|         |  /|  /         /|       /
507d926f305SMatthew G. Knepley    |91 |   47    |109|-- 49      93|  -----
508d926f305SMatthew G. Knepley    |/  |         |/ /|          /  | /
509d926f305SMatthew G. Knepley   17-----83-----29-----85------19----
510d926f305SMatthew G. Knepley    |   |         |   |         |   |
511d926f305SMatthew G. Knepley    |  120        |  121        |  122
512d926f305SMatthew G. Knepley    |   |         |26 |         |   |
513d926f305SMatthew G. Knepley  117   |        118  |        119  |
514d926f305SMatthew G. Knepley    |  22-----88--|--32-----90--|---24
515d926f305SMatthew G. Knepley    |  /|         |  /|         |  /|
516d926f305SMatthew G. Knepley    |92 |   48    |110|   50    | 94|
517d926f305SMatthew G. Knepley    |/  |         |/  |         |/  |
518d926f305SMatthew G. Knepley   18-----84-----30-----86------20  |
519d926f305SMatthew G. Knepley    |   |     37  |   |     39  |   |
520d926f305SMatthew G. Knepley    |  98         |  99         |   100
521d926f305SMatthew G. Knepley    |33 |         |34 |         |35 |
522d926f305SMatthew G. Knepley   95   |  36    96   |   38   97   |
523d926f305SMatthew G. Knepley    |  10-----70--|--11-----71--|---12
524d926f305SMatthew G. Knepley    |  /          |  /          |  /
525d926f305SMatthew G. Knepley    | 74   44     | 75    45    | 76
526d926f305SMatthew G. Knepley    |/            |/            |/
527d926f305SMatthew G. Knepley    7-----68------8-----69------9
528d926f305SMatthew G. Knepley       cell 0         cell 1
529d926f305SMatthew G. Knepley 
530d926f305SMatthew G. Knepley Test hex_4: Two non-intersecting faults
531d926f305SMatthew G. Knepley 
532d926f305SMatthew G. Knepley           cell 4         cell 5         cell 6        cell 7
533d926f305SMatthew G. Knepley       33-----96-----34-----97-----35-----98-----36-----99------37
534d926f305SMatthew G. Knepley       /|            /|            /|            /|            /|
535d926f305SMatthew G. Knepley     110|   66     111|   69     112|   72     113|   75     114|
536d926f305SMatthew G. Knepley     /  |          /  |          /  |          /  |          /  |
537d926f305SMatthew G. Knepley   28-----92-----29-----93-----30-----94-----31-----95------32  |
538d926f305SMatthew G. Knepley    |   |     57  |   |     59  |   |     61  |   |     63  |   |
539d926f305SMatthew G. Knepley    |  126        |  128        |  130        |  132        |  134
540d926f305SMatthew G. Knepley    |43 |         |44 |         |45 |         |46 |         |47 |
541d926f305SMatthew G. Knepley   116  |  56    118  |  58    120  |  60    122  |  62    124  |
542d926f305SMatthew G. Knepley    |  23-----88--|--24-----89--|--25-----90--|--26-----91--|---27
543d926f305SMatthew G. Knepley    |  /|         |  /|         |  /|         |  /|         |  /|
544d926f305SMatthew G. Knepley    |105|   65    |106|   68    |107|   71    |108|   74    |109|
545d926f305SMatthew G. Knepley    |/  |         |/  |         |/  |         |/  |         |/  |
546d926f305SMatthew G. Knepley   18-----84-----19-----95-----20-----86-----21-----87------22  |
547d926f305SMatthew G. Knepley    |   |     49  |   |     51  |   |     53  |   |     55  |   |
548d926f305SMatthew G. Knepley    |  125        |  127        |  129        |  131        |  133
549d926f305SMatthew G. Knepley    |38 |         |39 |         |40 |         |41 |         |42 |
550d926f305SMatthew G. Knepley   115  |  48    117  |  50    119  |  52    121  |  54    123  |
551d926f305SMatthew G. Knepley    |  13-----80--|--14-----81--|--15-----82--|--16-----83--|---17
552d926f305SMatthew G. Knepley    |  /          |  /          |  /          |  /          |  /
553d926f305SMatthew G. Knepley    |100    64    |101    67    |102    70    |103    73    |104
554d926f305SMatthew G. Knepley    |/            |/            |/            |/            |/
555d926f305SMatthew G. Knepley    8-----76------9-----77-----10-----78-----11-----79------12
556d926f305SMatthew G. Knepley       cell 0         cell 1        cell 2        cell 3
557d926f305SMatthew G. Knepley 
558d926f305SMatthew G. Knepley becomes
559d926f305SMatthew G. Knepley 
560d926f305SMatthew G. Knepley           cell 4         cell 5        cell 7        cell 10       cell 6
561d926f305SMatthew G. Knepley       27-----114----28-----115----29-----159----46-----170----45------116----30
562d926f305SMatthew G. Knepley       /|            /|            /|            /|            /|            /|
563d926f305SMatthew G. Knepley     123|   71     124|   73     125|   87     162|          161|    78    126|
564d926f305SMatthew G. Knepley     /  |          /  |          /  |          /  |          /  |          /  |
565d926f305SMatthew G. Knepley   23-----111----24-----112----25-----158----44-----169----43-----113-----26  |
566d926f305SMatthew G. Knepley    |   |     65  |   |    67   |   |    86   |   |         |   |     69  |   |
567d926f305SMatthew G. Knepley    |  134        |  135        |  137        |  166        |  165        |  140
568d926f305SMatthew G. Knepley    |56 |         |57 |         |58 |         |84 |         |83 |         |59 |
569d926f305SMatthew G. Knepley   127  |  64    128  |  66    130  |  85    164  |        163  |  68    133  |
570d926f305SMatthew G. Knepley    |  35-----143-|--37-----151-|--40-----109-|--42-----168-|--42-----110-|---22
571d926f305SMatthew G. Knepley    |  /|         |  /|         |  /|         |  /          |  /          |  /
572d926f305SMatthew G. Knepley    |145|   79    |147|   81    |153|   75    |160          |160    77    |122
573d926f305SMatthew G. Knepley    |/ 173        |/ 174        |/ 176        |/            |/            |/
574d926f305SMatthew G. Knepley   31-----141----33-----149----39-----107----41-----167----41-----108-----21
575d926f305SMatthew G. Knepley cell   |         |   |         |   | cell 9
576d926f305SMatthew G. Knepley 8  |  36-----144-|--38-----152-|--40-----109----42-----110-----22
577d926f305SMatthew G. Knepley   171 /|        172 /|        175 /|            /|            /|
578d926f305SMatthew G. Knepley    |146|   80    |148|   82    |153|    75    160|   77     122|
579d926f305SMatthew G. Knepley    |/  |         |/  |         |/  |          /  |          /  |
580d926f305SMatthew G. Knepley   32-----142----34-----150----39-----107----41-----108-----21  |
581d926f305SMatthew G. Knepley    |   |     50  |   |    52   |   |    61   |   |     63  |   |
582d926f305SMatthew G. Knepley    |  156        |  157        |  136        |  138        |  139
583d926f305SMatthew G. Knepley    |47 |         |48 |         |53 |         |54 |         |55 |
584d926f305SMatthew G. Knepley   154  |  49    155  |  51    129  |  60    131  |  62    132  |
585d926f305SMatthew G. Knepley    |  16-----103-|--17-----104-|--18-----105-|--19-----106-|---20
586d926f305SMatthew G. Knepley    |  /          |  /          |  /          |  /          |  /
587d926f305SMatthew G. Knepley    |117    70    |118    72    |119    74    |120    76    |121
588d926f305SMatthew G. Knepley    |/            |/            |/            |/            |/
589d926f305SMatthew G. Knepley   11-----99-----12-----100----13-----101----14-----102-----15
590d926f305SMatthew G. Knepley       cell 0         cell 1        cell 2        cell 3
591d926f305SMatthew G. Knepley 
5926fc05355SMatthew G. Knepley */
5936fc05355SMatthew G. Knepley 
5946fc05355SMatthew G. Knepley typedef struct {
5956fc05355SMatthew G. Knepley   PetscInt testNum; // The mesh to test
5966fc05355SMatthew G. Knepley } AppCtx;
5976fc05355SMatthew G. Knepley 
ProcessOptions(MPI_Comm comm,AppCtx * options)5986fc05355SMatthew G. Knepley static PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
5996fc05355SMatthew G. Knepley {
6006fc05355SMatthew G. Knepley   PetscFunctionBegin;
6016fc05355SMatthew G. Knepley   options->testNum = 0;
6026fc05355SMatthew G. Knepley 
6036fc05355SMatthew G. Knepley   PetscOptionsBegin(comm, "", "Cohesive Meshing Options", "DMPLEX");
6046fc05355SMatthew G. Knepley   PetscCall(PetscOptionsBoundedInt("-test_num", "The particular mesh to test", "ex5.c", options->testNum, &options->testNum, NULL, 0));
6056fc05355SMatthew G. Knepley   PetscOptionsEnd();
6066fc05355SMatthew G. Knepley   PetscFunctionReturn(PETSC_SUCCESS);
6076fc05355SMatthew G. Knepley }
6086fc05355SMatthew G. Knepley 
CreateQuadMesh1(MPI_Comm comm,AppCtx * user,DM * dm)6096fc05355SMatthew G. Knepley static PetscErrorCode CreateQuadMesh1(MPI_Comm comm, AppCtx *user, DM *dm)
6106fc05355SMatthew G. Knepley {
6116fc05355SMatthew G. Knepley   const PetscInt faces[2] = {1, 1};
6126fc05355SMatthew G. Knepley   PetscReal      lower[2], upper[2];
6136fc05355SMatthew G. Knepley   DMLabel        label;
6146fc05355SMatthew G. Knepley   PetscMPIInt    rank;
6156fc05355SMatthew G. Knepley   void          *get_tmp;
6166fc05355SMatthew G. Knepley   PetscInt64    *cidx;
617*b8b5be36SMartin Diehl   PetscMPIInt    iflg;
6186fc05355SMatthew G. Knepley 
6196fc05355SMatthew G. Knepley   PetscFunctionBeginUser;
6206fc05355SMatthew G. Knepley   PetscCallMPI(MPI_Comm_rank(comm, &rank));
6216fc05355SMatthew G. Knepley   // Create serial mesh
6226fc05355SMatthew G. Knepley   lower[0] = (PetscReal)(rank % 2);
6236fc05355SMatthew G. Knepley   lower[1] = (PetscReal)(rank / 2);
6246fc05355SMatthew G. Knepley   upper[0] = (PetscReal)(rank % 2) + 1.;
6256fc05355SMatthew G. Knepley   upper[1] = (PetscReal)(rank / 2) + 1.;
62642108689Sksagiyam   PetscCall(DMPlexCreateBoxMesh(PETSC_COMM_SELF, 2, PETSC_FALSE, faces, lower, upper, NULL, PETSC_TRUE, 0, PETSC_TRUE, dm));
6276fc05355SMatthew G. Knepley   PetscCall(PetscObjectSetName((PetscObject)*dm, "box"));
6286fc05355SMatthew G. Knepley   // Flip edges to make fault non-oriented
6296fc05355SMatthew G. Knepley   switch (rank) {
6306fc05355SMatthew G. Knepley   case 2:
6316fc05355SMatthew G. Knepley     PetscCall(DMPlexOrientPoint(*dm, 8, -1));
6326fc05355SMatthew G. Knepley     break;
6336fc05355SMatthew G. Knepley   case 3:
6346fc05355SMatthew G. Knepley     PetscCall(DMPlexOrientPoint(*dm, 7, -1));
6356fc05355SMatthew G. Knepley     break;
6366fc05355SMatthew G. Knepley   default:
6376fc05355SMatthew G. Knepley     break;
6386fc05355SMatthew G. Knepley   }
6396fc05355SMatthew G. Knepley   // Need this so that all procs create the cell types
6406fc05355SMatthew G. Knepley   PetscCall(DMPlexGetCellTypeLabel(*dm, &label));
6416fc05355SMatthew G. Knepley   // Replace comm in object (copied from PetscHeaderCreate/Destroy())
6426fc05355SMatthew G. Knepley   PetscCall(PetscCommDestroy(&(*dm)->hdr.comm));
6436fc05355SMatthew G. Knepley   PetscCall(PetscCommDuplicate(comm, &(*dm)->hdr.comm, &(*dm)->hdr.tag));
644*b8b5be36SMartin Diehl   PetscCallMPI(MPI_Comm_get_attr((*dm)->hdr.comm, Petsc_CreationIdx_keyval, &get_tmp, &iflg));
645*b8b5be36SMartin Diehl   PetscCheck(iflg, (*dm)->hdr.comm, PETSC_ERR_ARG_CORRUPT, "MPI_Comm does not have an object creation index");
6466fc05355SMatthew G. Knepley   cidx            = (PetscInt64 *)get_tmp;
6476fc05355SMatthew G. Knepley   (*dm)->hdr.cidx = (*cidx)++;
6486fc05355SMatthew G. Knepley   // Create new pointSF
6496fc05355SMatthew G. Knepley   {
6506fc05355SMatthew G. Knepley     PetscSF      sf;
6516fc05355SMatthew G. Knepley     PetscInt    *local  = NULL;
6526fc05355SMatthew G. Knepley     PetscSFNode *remote = NULL;
6536fc05355SMatthew G. Knepley     PetscInt     Nl;
6546fc05355SMatthew G. Knepley 
6556fc05355SMatthew G. Knepley     PetscCall(PetscSFCreate(comm, &sf));
6566fc05355SMatthew G. Knepley     switch (rank) {
6576fc05355SMatthew G. Knepley     case 0:
6586fc05355SMatthew G. Knepley       Nl = 5;
6596fc05355SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &local));
6606fc05355SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &remote));
6616fc05355SMatthew G. Knepley       local[0]        = 2;
6626fc05355SMatthew G. Knepley       remote[0].index = 1;
6636fc05355SMatthew G. Knepley       remote[0].rank  = 1;
6646fc05355SMatthew G. Knepley       local[1]        = 3;
6656fc05355SMatthew G. Knepley       remote[1].index = 1;
6666fc05355SMatthew G. Knepley       remote[1].rank  = 2;
6676fc05355SMatthew G. Knepley       local[2]        = 4;
6686fc05355SMatthew G. Knepley       remote[2].index = 1;
6696fc05355SMatthew G. Knepley       remote[2].rank  = 3;
6706fc05355SMatthew G. Knepley       local[3]        = 6;
6716fc05355SMatthew G. Knepley       remote[3].index = 5;
6726fc05355SMatthew G. Knepley       remote[3].rank  = 2;
6736fc05355SMatthew G. Knepley       local[4]        = 8;
6746fc05355SMatthew G. Knepley       remote[4].index = 7;
6756fc05355SMatthew G. Knepley       remote[4].rank  = 1;
6766fc05355SMatthew G. Knepley       break;
6776fc05355SMatthew G. Knepley     case 1:
6786fc05355SMatthew G. Knepley       Nl = 3;
6796fc05355SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &local));
6806fc05355SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &remote));
6816fc05355SMatthew G. Knepley       local[0]        = 3;
6826fc05355SMatthew G. Knepley       remote[0].index = 1;
6836fc05355SMatthew G. Knepley       remote[0].rank  = 3;
6846fc05355SMatthew G. Knepley       local[1]        = 4;
6856fc05355SMatthew G. Knepley       remote[1].index = 2;
6866fc05355SMatthew G. Knepley       remote[1].rank  = 3;
6876fc05355SMatthew G. Knepley       local[2]        = 6;
6886fc05355SMatthew G. Knepley       remote[2].index = 5;
6896fc05355SMatthew G. Knepley       remote[2].rank  = 3;
6906fc05355SMatthew G. Knepley       break;
6916fc05355SMatthew G. Knepley     case 2:
6926fc05355SMatthew G. Knepley       Nl = 3;
6936fc05355SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &local));
6946fc05355SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &remote));
6956fc05355SMatthew G. Knepley       local[0]        = 2;
6966fc05355SMatthew G. Knepley       remote[0].index = 1;
6976fc05355SMatthew G. Knepley       remote[0].rank  = 3;
6986fc05355SMatthew G. Knepley       local[1]        = 4;
6996fc05355SMatthew G. Knepley       remote[1].index = 3;
7006fc05355SMatthew G. Knepley       remote[1].rank  = 3;
7016fc05355SMatthew G. Knepley       local[2]        = 8;
7026fc05355SMatthew G. Knepley       remote[2].index = 7;
7036fc05355SMatthew G. Knepley       remote[2].rank  = 3;
7046fc05355SMatthew G. Knepley       break;
7056fc05355SMatthew G. Knepley     case 3:
7066fc05355SMatthew G. Knepley       Nl = 0;
7076fc05355SMatthew G. Knepley       break;
7086fc05355SMatthew G. Knepley     default:
7096fc05355SMatthew G. Knepley       SETERRQ(comm, PETSC_ERR_SUP, "This example only supports 4 ranks");
7106fc05355SMatthew G. Knepley     }
7116fc05355SMatthew G. Knepley     PetscCall(PetscSFSetGraph(sf, 9, Nl, local, PETSC_OWN_POINTER, remote, PETSC_OWN_POINTER));
7126fc05355SMatthew G. Knepley     PetscCall(DMSetPointSF(*dm, sf));
7136fc05355SMatthew G. Knepley     PetscCall(PetscSFDestroy(&sf));
7146fc05355SMatthew G. Knepley   }
7156fc05355SMatthew G. Knepley   // Create fault label
7166fc05355SMatthew G. Knepley   PetscCall(DMCreateLabel(*dm, "fault"));
7176fc05355SMatthew G. Knepley   PetscCall(DMGetLabel(*dm, "fault", &label));
7186fc05355SMatthew G. Knepley   switch (rank) {
7196fc05355SMatthew G. Knepley   case 0:
7206fc05355SMatthew G. Knepley   case 2:
7216fc05355SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 8, 1));
7226fc05355SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 2, 0));
7236fc05355SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 4, 0));
7246fc05355SMatthew G. Knepley     break;
7256fc05355SMatthew G. Knepley   case 1:
7266fc05355SMatthew G. Knepley   case 3:
7276fc05355SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 7, 1));
7286fc05355SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 1, 0));
7296fc05355SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 3, 0));
7306fc05355SMatthew G. Knepley     break;
7316fc05355SMatthew G. Knepley   default:
7326fc05355SMatthew G. Knepley     break;
7336fc05355SMatthew G. Knepley   }
7346fc05355SMatthew G. Knepley   PetscCall(DMPlexOrientLabel(*dm, label));
7356fc05355SMatthew G. Knepley   PetscCall(DMPlexLabelCohesiveComplete(*dm, label, NULL, 1, PETSC_FALSE, PETSC_FALSE, NULL));
7366fc05355SMatthew G. Knepley   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
7376fc05355SMatthew G. Knepley   PetscFunctionReturn(PETSC_SUCCESS);
7386fc05355SMatthew G. Knepley }
7396fc05355SMatthew G. Knepley 
CreateHexMesh1(MPI_Comm comm,AppCtx * user,DM * dm)740d926f305SMatthew G. Knepley static PetscErrorCode CreateHexMesh1(MPI_Comm comm, AppCtx *user, DM *dm)
741d926f305SMatthew G. Knepley {
742d926f305SMatthew G. Knepley   const PetscInt faces[3] = {1, 1, 1};
743d926f305SMatthew G. Knepley   PetscReal      lower[3], upper[3];
744d926f305SMatthew G. Knepley   DMLabel        label;
745d926f305SMatthew G. Knepley   PetscMPIInt    rank;
746d926f305SMatthew G. Knepley   void          *get_tmp;
747d926f305SMatthew G. Knepley   PetscInt64    *cidx;
748*b8b5be36SMartin Diehl   PetscMPIInt    iflg;
749d926f305SMatthew G. Knepley 
750d926f305SMatthew G. Knepley   PetscFunctionBeginUser;
751d926f305SMatthew G. Knepley   PetscCallMPI(MPI_Comm_rank(comm, &rank));
752d926f305SMatthew G. Knepley   // Create serial mesh
753d926f305SMatthew G. Knepley   lower[0] = (PetscReal)(rank % 2);
754d926f305SMatthew G. Knepley   lower[1] = 0.;
755d926f305SMatthew G. Knepley   lower[2] = (PetscReal)(rank / 2);
756d926f305SMatthew G. Knepley   upper[0] = (PetscReal)(rank % 2) + 1.;
757d926f305SMatthew G. Knepley   upper[1] = 1.;
758d926f305SMatthew G. Knepley   upper[2] = (PetscReal)(rank / 2) + 1.;
75942108689Sksagiyam   PetscCall(DMPlexCreateBoxMesh(PETSC_COMM_SELF, 3, PETSC_FALSE, faces, lower, upper, NULL, PETSC_TRUE, 0, PETSC_TRUE, dm));
760d926f305SMatthew G. Knepley   PetscCall(PetscObjectSetName((PetscObject)*dm, "box"));
761d926f305SMatthew G. Knepley   // Flip edges to make fault non-oriented
762d926f305SMatthew G. Knepley   switch (rank) {
763d926f305SMatthew G. Knepley   case 2:
764d926f305SMatthew G. Knepley     PetscCall(DMPlexOrientPoint(*dm, 10, -1));
765d926f305SMatthew G. Knepley     break;
766d926f305SMatthew G. Knepley   case 3:
767d926f305SMatthew G. Knepley     PetscCall(DMPlexOrientPoint(*dm, 9, -1));
768d926f305SMatthew G. Knepley     break;
769d926f305SMatthew G. Knepley   default:
770d926f305SMatthew G. Knepley     break;
771d926f305SMatthew G. Knepley   }
772d926f305SMatthew G. Knepley   // Need this so that all procs create the cell types
773d926f305SMatthew G. Knepley   PetscCall(DMPlexGetCellTypeLabel(*dm, &label));
774d926f305SMatthew G. Knepley   // Replace comm in object (copied from PetscHeaderCreate/Destroy())
775d926f305SMatthew G. Knepley   PetscCall(PetscCommDestroy(&(*dm)->hdr.comm));
776d926f305SMatthew G. Knepley   PetscCall(PetscCommDuplicate(comm, &(*dm)->hdr.comm, &(*dm)->hdr.tag));
777*b8b5be36SMartin Diehl   PetscCallMPI(MPI_Comm_get_attr((*dm)->hdr.comm, Petsc_CreationIdx_keyval, &get_tmp, &iflg));
778*b8b5be36SMartin Diehl   PetscCheck(iflg, (*dm)->hdr.comm, PETSC_ERR_ARG_CORRUPT, "MPI_Comm does not have an object creation index");
779d926f305SMatthew G. Knepley   cidx            = (PetscInt64 *)get_tmp;
780d926f305SMatthew G. Knepley   (*dm)->hdr.cidx = (*cidx)++;
781d926f305SMatthew G. Knepley   // Create new pointSF
782d926f305SMatthew G. Knepley   {
783d926f305SMatthew G. Knepley     PetscSF      sf;
784d926f305SMatthew G. Knepley     PetscInt    *local  = NULL;
785d926f305SMatthew G. Knepley     PetscSFNode *remote = NULL;
786d926f305SMatthew G. Knepley     PetscInt     Nl;
787d926f305SMatthew G. Knepley 
788d926f305SMatthew G. Knepley     PetscCall(PetscSFCreate(comm, &sf));
789d926f305SMatthew G. Knepley     switch (rank) {
790d926f305SMatthew G. Knepley     case 0:
791d926f305SMatthew G. Knepley       Nl = 15;
792d926f305SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &local));
793d926f305SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &remote));
794d926f305SMatthew G. Knepley       local[0]         = 2;
795d926f305SMatthew G. Knepley       remote[0].index  = 1;
796d926f305SMatthew G. Knepley       remote[0].rank   = 1;
797d926f305SMatthew G. Knepley       local[1]         = 4;
798d926f305SMatthew G. Knepley       remote[1].index  = 3;
799d926f305SMatthew G. Knepley       remote[1].rank   = 1;
800d926f305SMatthew G. Knepley       local[2]         = 5;
801d926f305SMatthew G. Knepley       remote[2].index  = 1;
802d926f305SMatthew G. Knepley       remote[2].rank   = 2;
803d926f305SMatthew G. Knepley       local[3]         = 6;
804d926f305SMatthew G. Knepley       remote[3].index  = 1;
805d926f305SMatthew G. Knepley       remote[3].rank   = 3;
806d926f305SMatthew G. Knepley       local[4]         = 7;
807d926f305SMatthew G. Knepley       remote[4].index  = 3;
808d926f305SMatthew G. Knepley       remote[4].rank   = 2;
809d926f305SMatthew G. Knepley       local[5]         = 8;
810d926f305SMatthew G. Knepley       remote[5].index  = 3;
811d926f305SMatthew G. Knepley       remote[5].rank   = 3;
812d926f305SMatthew G. Knepley       local[6]         = 17;
813d926f305SMatthew G. Knepley       remote[6].index  = 15;
814d926f305SMatthew G. Knepley       remote[6].rank   = 2;
815d926f305SMatthew G. Knepley       local[7]         = 18;
816d926f305SMatthew G. Knepley       remote[7].index  = 16;
817d926f305SMatthew G. Knepley       remote[7].rank   = 2;
818d926f305SMatthew G. Knepley       local[8]         = 20;
819d926f305SMatthew G. Knepley       remote[8].index  = 19;
820d926f305SMatthew G. Knepley       remote[8].rank   = 1;
821d926f305SMatthew G. Knepley       local[9]         = 21;
822d926f305SMatthew G. Knepley       remote[9].index  = 19;
823d926f305SMatthew G. Knepley       remote[9].rank   = 2;
824d926f305SMatthew G. Knepley       local[10]        = 22;
825d926f305SMatthew G. Knepley       remote[10].index = 19;
826d926f305SMatthew G. Knepley       remote[10].rank  = 3;
827d926f305SMatthew G. Knepley       local[11]        = 24;
828d926f305SMatthew G. Knepley       remote[11].index = 23;
829d926f305SMatthew G. Knepley       remote[11].rank  = 1;
830d926f305SMatthew G. Knepley       local[12]        = 26;
831d926f305SMatthew G. Knepley       remote[12].index = 25;
832d926f305SMatthew G. Knepley       remote[12].rank  = 1;
833d926f305SMatthew G. Knepley       local[13]        = 10;
834d926f305SMatthew G. Knepley       remote[13].index = 9;
835d926f305SMatthew G. Knepley       remote[13].rank  = 1;
836d926f305SMatthew G. Knepley       local[14]        = 14;
837d926f305SMatthew G. Knepley       remote[14].index = 13;
838d926f305SMatthew G. Knepley       remote[14].rank  = 2;
839d926f305SMatthew G. Knepley       break;
840d926f305SMatthew G. Knepley     case 1:
841d926f305SMatthew G. Knepley       Nl = 9;
842d926f305SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &local));
843d926f305SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &remote));
844d926f305SMatthew G. Knepley       local[0]        = 5;
845d926f305SMatthew G. Knepley       remote[0].index = 1;
846d926f305SMatthew G. Knepley       remote[0].rank  = 3;
847d926f305SMatthew G. Knepley       local[1]        = 6;
848d926f305SMatthew G. Knepley       remote[1].index = 2;
849d926f305SMatthew G. Knepley       remote[1].rank  = 3;
850d926f305SMatthew G. Knepley       local[2]        = 7;
851d926f305SMatthew G. Knepley       remote[2].index = 3;
852d926f305SMatthew G. Knepley       remote[2].rank  = 3;
853d926f305SMatthew G. Knepley       local[3]        = 8;
854d926f305SMatthew G. Knepley       remote[3].index = 4;
855d926f305SMatthew G. Knepley       remote[3].rank  = 3;
856d926f305SMatthew G. Knepley       local[4]        = 17;
857d926f305SMatthew G. Knepley       remote[4].index = 15;
858d926f305SMatthew G. Knepley       remote[4].rank  = 3;
859d926f305SMatthew G. Knepley       local[5]        = 18;
860d926f305SMatthew G. Knepley       remote[5].index = 16;
861d926f305SMatthew G. Knepley       remote[5].rank  = 3;
862d926f305SMatthew G. Knepley       local[6]        = 21;
863d926f305SMatthew G. Knepley       remote[6].index = 19;
864d926f305SMatthew G. Knepley       remote[6].rank  = 3;
865d926f305SMatthew G. Knepley       local[7]        = 22;
866d926f305SMatthew G. Knepley       remote[7].index = 20;
867d926f305SMatthew G. Knepley       remote[7].rank  = 3;
868d926f305SMatthew G. Knepley       local[8]        = 14;
869d926f305SMatthew G. Knepley       remote[8].index = 13;
870d926f305SMatthew G. Knepley       remote[8].rank  = 3;
871d926f305SMatthew G. Knepley       break;
872d926f305SMatthew G. Knepley     case 2:
873d926f305SMatthew G. Knepley       Nl = 9;
874d926f305SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &local));
875d926f305SMatthew G. Knepley       PetscCall(PetscMalloc1(Nl, &remote));
876d926f305SMatthew G. Knepley       local[0]        = 2;
877d926f305SMatthew G. Knepley       remote[0].index = 1;
878d926f305SMatthew G. Knepley       remote[0].rank  = 3;
879d926f305SMatthew G. Knepley       local[1]        = 4;
880d926f305SMatthew G. Knepley       remote[1].index = 3;
881d926f305SMatthew G. Knepley       remote[1].rank  = 3;
882d926f305SMatthew G. Knepley       local[2]        = 6;
883d926f305SMatthew G. Knepley       remote[2].index = 5;
884d926f305SMatthew G. Knepley       remote[2].rank  = 3;
885d926f305SMatthew G. Knepley       local[3]        = 8;
886d926f305SMatthew G. Knepley       remote[3].index = 7;
887d926f305SMatthew G. Knepley       remote[3].rank  = 3;
888d926f305SMatthew G. Knepley       local[4]        = 20;
889d926f305SMatthew G. Knepley       remote[4].index = 19;
890d926f305SMatthew G. Knepley       remote[4].rank  = 3;
891d926f305SMatthew G. Knepley       local[5]        = 22;
892d926f305SMatthew G. Knepley       remote[5].index = 21;
893d926f305SMatthew G. Knepley       remote[5].rank  = 3;
894d926f305SMatthew G. Knepley       local[6]        = 24;
895d926f305SMatthew G. Knepley       remote[6].index = 23;
896d926f305SMatthew G. Knepley       remote[6].rank  = 3;
897d926f305SMatthew G. Knepley       local[7]        = 26;
898d926f305SMatthew G. Knepley       remote[7].index = 25;
899d926f305SMatthew G. Knepley       remote[7].rank  = 3;
900d926f305SMatthew G. Knepley       local[8]        = 10;
901d926f305SMatthew G. Knepley       remote[8].index = 9;
902d926f305SMatthew G. Knepley       remote[8].rank  = 3;
903d926f305SMatthew G. Knepley       break;
904d926f305SMatthew G. Knepley     case 3:
905d926f305SMatthew G. Knepley       Nl = 0;
906d926f305SMatthew G. Knepley       break;
907d926f305SMatthew G. Knepley     default:
908d926f305SMatthew G. Knepley       SETERRQ(comm, PETSC_ERR_SUP, "This example only supports 4 ranks");
909d926f305SMatthew G. Knepley     }
910d926f305SMatthew G. Knepley     PetscCall(PetscSFSetGraph(sf, 27, Nl, local, PETSC_OWN_POINTER, remote, PETSC_OWN_POINTER));
911d926f305SMatthew G. Knepley     PetscCall(DMSetPointSF(*dm, sf));
912d926f305SMatthew G. Knepley     PetscCall(PetscSFDestroy(&sf));
913d926f305SMatthew G. Knepley   }
914d926f305SMatthew G. Knepley   // Create fault label
915d926f305SMatthew G. Knepley   PetscCall(DMCreateLabel(*dm, "fault"));
916d926f305SMatthew G. Knepley   PetscCall(DMGetLabel(*dm, "fault", &label));
917d926f305SMatthew G. Knepley   switch (rank) {
918d926f305SMatthew G. Knepley   case 0:
919d926f305SMatthew G. Knepley   case 2:
920d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 10, 2));
921d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 20, 1));
922d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 22, 1));
923d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 24, 1));
924d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 26, 1));
925d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 2, 0));
926d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 4, 0));
927d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 6, 0));
928d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 8, 0));
929d926f305SMatthew G. Knepley     break;
930d926f305SMatthew G. Knepley   case 1:
931d926f305SMatthew G. Knepley   case 3:
932d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 9, 2));
933d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 19, 1));
934d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 21, 1));
935d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 23, 1));
936d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 25, 1));
937d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 1, 0));
938d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 3, 0));
939d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 5, 0));
940d926f305SMatthew G. Knepley     PetscCall(DMLabelSetValue(label, 7, 0));
941d926f305SMatthew G. Knepley     break;
942d926f305SMatthew G. Knepley   default:
943d926f305SMatthew G. Knepley     break;
944d926f305SMatthew G. Knepley   }
945d926f305SMatthew G. Knepley   PetscCall(DMPlexOrientLabel(*dm, label));
946d926f305SMatthew G. Knepley   PetscCall(DMPlexLabelCohesiveComplete(*dm, label, NULL, 1, PETSC_FALSE, PETSC_FALSE, NULL));
947d926f305SMatthew G. Knepley   PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
948d926f305SMatthew G. Knepley   PetscFunctionReturn(PETSC_SUCCESS);
949d926f305SMatthew G. Knepley }
950d926f305SMatthew G. Knepley 
CreateMesh(MPI_Comm comm,AppCtx * user,DM * dm)9516fc05355SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
9526fc05355SMatthew G. Knepley {
9536fc05355SMatthew G. Knepley   PetscFunctionBegin;
954d926f305SMatthew G. Knepley   switch (user->testNum) {
955d926f305SMatthew G. Knepley   case 1:
9566fc05355SMatthew G. Knepley     PetscCall(CreateQuadMesh1(comm, user, dm));
957d926f305SMatthew G. Knepley     break;
958d926f305SMatthew G. Knepley   case 2:
959d926f305SMatthew G. Knepley     PetscCall(CreateHexMesh1(comm, user, dm));
960d926f305SMatthew G. Knepley     break;
961d926f305SMatthew G. Knepley   default:
9626fc05355SMatthew G. Knepley     PetscCall(DMCreate(comm, dm));
9636fc05355SMatthew G. Knepley     PetscCall(DMSetType(*dm, DMPLEX));
964d926f305SMatthew G. Knepley     break;
9656fc05355SMatthew G. Knepley   }
9666fc05355SMatthew G. Knepley   PetscCall(DMSetFromOptions(*dm));
9676fc05355SMatthew G. Knepley   {
9686fc05355SMatthew G. Knepley     const char *prefix;
9696fc05355SMatthew G. Knepley 
9706fc05355SMatthew G. Knepley     // We cannot redistribute with cohesive cells in the SF
9716fc05355SMatthew G. Knepley     PetscCall(DMPlexDistributeSetDefault(*dm, PETSC_FALSE));
9726fc05355SMatthew G. Knepley     PetscCall(PetscObjectGetOptionsPrefix((PetscObject)*dm, &prefix));
9736fc05355SMatthew G. Knepley     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "f0_"));
9746fc05355SMatthew G. Knepley     PetscCall(DMSetFromOptions(*dm));
9756fc05355SMatthew G. Knepley     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, "f1_"));
9766fc05355SMatthew G. Knepley     PetscCall(DMSetFromOptions(*dm));
9776fc05355SMatthew G. Knepley     PetscCall(PetscObjectSetOptionsPrefix((PetscObject)*dm, prefix));
9786fc05355SMatthew G. Knepley   }
9796fc05355SMatthew G. Knepley   PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view"));
9806fc05355SMatthew G. Knepley   PetscFunctionReturn(PETSC_SUCCESS);
9816fc05355SMatthew G. Knepley }
9826fc05355SMatthew G. Knepley 
main(int argc,char ** argv)9836fc05355SMatthew G. Knepley int main(int argc, char **argv)
9846fc05355SMatthew G. Knepley {
9856fc05355SMatthew G. Knepley   DM     dm;
9866fc05355SMatthew G. Knepley   AppCtx user;
9876fc05355SMatthew G. Knepley 
9886fc05355SMatthew G. Knepley   PetscFunctionBeginUser;
9896fc05355SMatthew G. Knepley   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
9906fc05355SMatthew G. Knepley   PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));
9916fc05355SMatthew G. Knepley   PetscCall(CreateMesh(PETSC_COMM_WORLD, &user, &dm));
9926fc05355SMatthew G. Knepley   PetscCall(DMDestroy(&dm));
9936fc05355SMatthew G. Knepley   PetscCall(PetscFinalize());
9946fc05355SMatthew G. Knepley   return 0;
9956fc05355SMatthew G. Knepley }
9966fc05355SMatthew G. Knepley 
9976fc05355SMatthew G. Knepley /*TEST
9986fc05355SMatthew G. Knepley 
9996fc05355SMatthew G. Knepley   testset:
10006fc05355SMatthew G. Knepley     requires: triangle
10016fc05355SMatthew G. Knepley     args: -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
10026fc05355SMatthew G. Knepley             -dm_plex_transform_active fault \
10036fc05355SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail
10046fc05355SMatthew G. Knepley 
10056fc05355SMatthew G. Knepley     test:
10066fc05355SMatthew G. Knepley       suffix: tri_0
10076fc05355SMatthew G. Knepley       args: -dm_plex_box_faces 1,1 -dm_plex_cohesive_label_fault 8
10086fc05355SMatthew G. Knepley     test:
10096fc05355SMatthew G. Knepley       suffix: tri_1
10106fc05355SMatthew G. Knepley       args: -dm_plex_box_faces 1,1 -dm_plex_cohesive_label_fault 8 \
10116fc05355SMatthew G. Knepley               -dm_plex_transform_extrude_use_tensor 0
10126fc05355SMatthew G. Knepley     test:
10136fc05355SMatthew G. Knepley       suffix: tri_2
10146fc05355SMatthew G. Knepley       args: -dm_plex_file_contents dat:tri_2_cv -dm_plex_cohesive_label_fault 11,15
10156fc05355SMatthew G. Knepley     test:
10166fc05355SMatthew G. Knepley       suffix: tri_3
10176fc05355SMatthew G. Knepley       nsize: 2
10186fc05355SMatthew G. Knepley       args: -dm_plex_file_contents dat:tri_2_cv -dm_plex_cohesive_label_fault 11,15 \
10196fc05355SMatthew G. Knepley               -petscpartitioner_type shell -petscpartitioner_shell_sizes 2,2 \
10206fc05355SMatthew G. Knepley               -petscpartitioner_shell_points 0,3,1,2
10216fc05355SMatthew G. Knepley 
10226fc05355SMatthew G. Knepley   testset:
10236fc05355SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 2,1 \
10246fc05355SMatthew G. Knepley           -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
10256fc05355SMatthew G. Knepley             -dm_plex_transform_active fault -dm_plex_cohesive_label_fault 13 \
10266fc05355SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail
10276fc05355SMatthew G. Knepley 
10286fc05355SMatthew G. Knepley     test:
10296fc05355SMatthew G. Knepley       suffix: quad_0
10306fc05355SMatthew G. Knepley     test:
10316fc05355SMatthew G. Knepley       suffix: quad_1
10326fc05355SMatthew G. Knepley       args: -dm_plex_transform_extrude_use_tensor 0
10336fc05355SMatthew G. Knepley     test:
10346fc05355SMatthew G. Knepley       suffix: quad_2
10356fc05355SMatthew G. Knepley       nsize: 2
10366fc05355SMatthew G. Knepley       args: -petscpartitioner_type simple
10376fc05355SMatthew G. Knepley 
10386fc05355SMatthew G. Knepley   test:
10396fc05355SMatthew G. Knepley     suffix: quad_3
10406fc05355SMatthew G. Knepley     nsize: 4
10416fc05355SMatthew G. Knepley     args: -test_num 1 \
10426fc05355SMatthew G. Knepley           -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
10436fc05355SMatthew G. Knepley             -dm_plex_transform_active fault \
10446fc05355SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail \
10456fc05355SMatthew G. Knepley           -orientation_view -orientation_view_synchronized
10466fc05355SMatthew G. Knepley 
10476fc05355SMatthew G. Knepley   test:
10486fc05355SMatthew G. Knepley     suffix: quad_4
10496fc05355SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,2 \
10506fc05355SMatthew G. Knepley           -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
10516fc05355SMatthew G. Knepley             -dm_plex_transform_active fault -dm_plex_cohesive_label_fault 22,23 \
10526fc05355SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail
10536fc05355SMatthew G. Knepley 
10546fc05355SMatthew G. Knepley   test:
10556fc05355SMatthew G. Knepley     suffix: quad_5
10566fc05355SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,2 \
10576fc05355SMatthew G. Knepley             -dm_plex_cohesive_label_fault0 21 \
10586fc05355SMatthew G. Knepley             -dm_plex_cohesive_label_fault1 23 \
10596fc05355SMatthew G. Knepley           -f0_dm_refine 1 -f0_dm_plex_transform_type cohesive_extrude \
10606fc05355SMatthew G. Knepley             -f0_dm_plex_transform_active fault0  -f0_coarse_dm_view ::ascii_info_detail \
10616fc05355SMatthew G. Knepley           -f1_dm_refine 1 -f1_dm_plex_transform_type cohesive_extrude \
10626fc05355SMatthew G. Knepley             -f1_dm_plex_transform_active fault1  -f1_coarse_dm_view ::ascii_info_detail \
10636fc05355SMatthew G. Knepley           -dm_view ::ascii_info_detail
10646fc05355SMatthew G. Knepley 
10656fc05355SMatthew G. Knepley   test:
10666fc05355SMatthew G. Knepley     suffix: quad_6
10676fc05355SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,2 \
10686fc05355SMatthew G. Knepley             -dm_plex_cohesive_label_fault0 22,23 \
10696fc05355SMatthew G. Knepley             -dm_plex_cohesive_label_fault1 32 \
10706fc05355SMatthew G. Knepley           -f0_dm_refine 1 -f0_dm_plex_transform_type cohesive_extrude \
10716fc05355SMatthew G. Knepley             -f0_dm_plex_transform_active fault0  -f0_coarse_dm_view ::ascii_info_detail \
10726fc05355SMatthew G. Knepley           -f1_dm_refine 1 -f1_dm_plex_transform_type cohesive_extrude \
10736fc05355SMatthew G. Knepley             -f1_dm_plex_transform_active fault1  -f1_coarse_dm_view ::ascii_info_detail \
10746fc05355SMatthew G. Knepley           -dm_view ::ascii_info_detail
10756fc05355SMatthew G. Knepley 
10762b987297SMatthew G. Knepley   test:
10772b987297SMatthew G. Knepley     suffix: quad_6w
10782b987297SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,2 \
10792b987297SMatthew G. Knepley             -dm_plex_cohesive_label_fault0 22,23 \
10802b987297SMatthew G. Knepley             -dm_plex_cohesive_label_fault1 32 \
10812b987297SMatthew G. Knepley           -f0_dm_refine 1 -f0_dm_plex_transform_type cohesive_extrude \
10822b987297SMatthew G. Knepley             -f0_dm_plex_transform_active fault0  -f0_coarse_dm_view ::ascii_info_detail \
10832b987297SMatthew G. Knepley             -f0_dm_plex_transform_cohesive_width 0.05 \
10842b987297SMatthew G. Knepley           -f1_dm_refine 1 -f1_dm_plex_transform_type cohesive_extrude \
10852b987297SMatthew G. Knepley             -f1_dm_plex_transform_active fault1  -f1_coarse_dm_view ::ascii_info_detail \
10862b987297SMatthew G. Knepley             -f1_dm_plex_transform_cohesive_width 0.05 \
10872b987297SMatthew G. Knepley           -dm_view ::ascii_info_detail
10882b987297SMatthew G. Knepley 
1089d926f305SMatthew G. Knepley   testset:
1090d926f305SMatthew G. Knepley     args: -dm_plex_dim 3 -dm_plex_shape doublet \
1091d926f305SMatthew G. Knepley           -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
1092d926f305SMatthew G. Knepley             -dm_plex_transform_active fault -dm_plex_cohesive_label_fault 7 \
1093d926f305SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail
1094d926f305SMatthew G. Knepley 
1095d926f305SMatthew G. Knepley     test:
1096d926f305SMatthew G. Knepley       suffix: tet_0
1097d926f305SMatthew G. Knepley     test:
1098d926f305SMatthew G. Knepley       suffix: tet_1
1099d926f305SMatthew G. Knepley       nsize: 2
1100d926f305SMatthew G. Knepley       args: -petscpartitioner_type simple
1101d926f305SMatthew G. Knepley 
1102d926f305SMatthew G. Knepley   testset:
1103d926f305SMatthew G. Knepley     args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 2,1,1 -dm_plex_box_upper 2,1,1 \
1104d926f305SMatthew G. Knepley           -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
1105d926f305SMatthew G. Knepley             -dm_plex_transform_active fault -dm_plex_cohesive_label_fault 15 \
1106d926f305SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail
1107d926f305SMatthew G. Knepley 
1108d926f305SMatthew G. Knepley     test:
1109d926f305SMatthew G. Knepley       suffix: hex_0
1110d926f305SMatthew G. Knepley     test:
1111d926f305SMatthew G. Knepley       suffix: hex_1
1112d926f305SMatthew G. Knepley       nsize: 2
1113d926f305SMatthew G. Knepley       args: -petscpartitioner_type simple
1114d926f305SMatthew G. Knepley 
1115d926f305SMatthew G. Knepley   test:
1116d926f305SMatthew G. Knepley     suffix: hex_2
1117d926f305SMatthew G. Knepley     nsize: 4
1118d926f305SMatthew G. Knepley     args: -test_num 2 \
1119d926f305SMatthew G. Knepley           -dm_refine 1 -dm_plex_transform_type cohesive_extrude \
1120d926f305SMatthew G. Knepley             -dm_plex_transform_active fault \
1121d926f305SMatthew G. Knepley           -dm_view ::ascii_info_detail -coarse_dm_view ::ascii_info_detail \
1122d926f305SMatthew G. Knepley           -orientation_view -orientation_view_synchronized
1123d926f305SMatthew G. Knepley 
1124d926f305SMatthew G. Knepley   test:
1125d926f305SMatthew G. Knepley     suffix: hex_3
1126d926f305SMatthew G. Knepley     args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 2,1,2 -dm_plex_box_upper 2.,1.,2. \
1127d926f305SMatthew G. Knepley             -dm_plex_cohesive_label_fault0 37,40 \
1128d926f305SMatthew G. Knepley             -dm_plex_cohesive_label_fault1 26 \
1129d926f305SMatthew G. Knepley           -f0_dm_refine 1 -f0_dm_plex_transform_type cohesive_extrude \
1130d926f305SMatthew G. Knepley             -f0_dm_plex_transform_active fault0  -f0_coarse_dm_view ::ascii_info_detail \
1131d926f305SMatthew G. Knepley           -f1_dm_refine 1 -f1_dm_plex_transform_type cohesive_extrude \
1132d926f305SMatthew G. Knepley             -f1_dm_plex_transform_active fault1  -f1_coarse_dm_view ::ascii_info_detail \
1133d926f305SMatthew G. Knepley           -dm_view ::ascii_info_detail
1134d926f305SMatthew G. Knepley 
1135d926f305SMatthew G. Knepley   test:
1136d926f305SMatthew G. Knepley     suffix: hex_4
1137d926f305SMatthew G. Knepley     args: -dm_plex_dim 3 -dm_plex_simplex 0 -dm_plex_box_faces 4,1,2 -dm_plex_box_upper 4.,1.,2. \
1138d926f305SMatthew G. Knepley             -dm_plex_cohesive_label_fault0 65,68 \
1139d926f305SMatthew G. Knepley             -dm_plex_cohesive_label_fault1 46 \
1140d926f305SMatthew G. Knepley           -f0_dm_refine 1 -f0_dm_plex_transform_type cohesive_extrude \
1141d926f305SMatthew G. Knepley             -f0_dm_plex_transform_active fault0  -f0_coarse_dm_view ::ascii_info_detail \
1142d926f305SMatthew G. Knepley           -f1_dm_refine 1 -f1_dm_plex_transform_type cohesive_extrude \
1143d926f305SMatthew G. Knepley             -f1_dm_plex_transform_active fault1  -f1_coarse_dm_view ::ascii_info_detail \
1144d926f305SMatthew G. Knepley           -dm_view ::ascii_info_detail
1145d926f305SMatthew G. Knepley 
11466fc05355SMatthew G. Knepley TEST*/
1147