xref: /petsc/src/dm/impls/plex/tests/ex47.c (revision e2b8d0fc37c770dc1e8c6fc3c68925307d037a77)
1231de6a2SMatthew G. Knepley static char help[] = "The main goal of this code is to retrieve the original element numbers as found in the "
2231de6a2SMatthew G. Knepley                      "initial partitions (sInitialPartition)... but after the call to DMPlexDistribute";
3231de6a2SMatthew G. Knepley 
4231de6a2SMatthew G. Knepley #include <petsc.h>
5231de6a2SMatthew G. Knepley 
69f046c2dSEric Chamberland /* Coordinates of a 2x5 rectangular mesh of quads : */
7231de6a2SMatthew G. Knepley PetscReal sCoords2x5Mesh[18][2] = {
8231de6a2SMatthew G. Knepley   {0.00000000000000000e+00, 0.00000000000000000e+00},
9231de6a2SMatthew G. Knepley   {2.00000000000000000e+00, 0.00000000000000000e+00},
10231de6a2SMatthew G. Knepley   {0.00000000000000000e+00, 1.00000000000000000e+00},
11231de6a2SMatthew G. Knepley   {2.00000000000000000e+00, 1.00000000000000000e+00},
12231de6a2SMatthew G. Knepley   {9.99999999997387978e-01, 0.00000000000000000e+00},
13231de6a2SMatthew G. Knepley   {9.99999999997387978e-01, 1.00000000000000000e+00},
14231de6a2SMatthew G. Knepley   {0.00000000000000000e+00, 2.00000000000000011e-01},
15231de6a2SMatthew G. Knepley   {0.00000000000000000e+00, 4.00000000000000022e-01},
16231de6a2SMatthew G. Knepley   {0.00000000000000000e+00, 5.99999999999999978e-01},
17231de6a2SMatthew G. Knepley   {0.00000000000000000e+00, 8.00000000000000044e-01},
18231de6a2SMatthew G. Knepley   {2.00000000000000000e+00, 2.00000000000000011e-01},
19231de6a2SMatthew G. Knepley   {2.00000000000000000e+00, 4.00000000000000022e-01},
20231de6a2SMatthew G. Knepley   {2.00000000000000000e+00, 5.99999999999999978e-01},
21231de6a2SMatthew G. Knepley   {2.00000000000000000e+00, 8.00000000000000044e-01},
22231de6a2SMatthew G. Knepley   {9.99999999997387756e-01, 2.00000000000000011e-01},
23231de6a2SMatthew G. Knepley   {9.99999999997387978e-01, 4.00000000000000022e-01},
24231de6a2SMatthew G. Knepley   {9.99999999997387978e-01, 6.00000000000000089e-01},
259371c9d4SSatish Balay   {9.99999999997388089e-01, 8.00000000000000044e-01}
269371c9d4SSatish Balay };
27231de6a2SMatthew G. Knepley 
289f046c2dSEric Chamberland /* Connectivity of a 2x5 rectangular mesh of quads : */
29231de6a2SMatthew G. Knepley const PetscInt sConnectivity2x5Mesh[10][4] = {
30231de6a2SMatthew G. Knepley   {0,  4,  14, 6 },
31231de6a2SMatthew G. Knepley   {6,  14, 15, 7 },
32231de6a2SMatthew G. Knepley   {7,  15, 16, 8 },
33231de6a2SMatthew G. Knepley   {8,  16, 17, 9 },
34231de6a2SMatthew G. Knepley   {9,  17, 5,  2 },
35231de6a2SMatthew G. Knepley   {4,  1,  10, 14},
36231de6a2SMatthew G. Knepley   {14, 10, 11, 15},
37231de6a2SMatthew G. Knepley   {15, 11, 12, 16},
38231de6a2SMatthew G. Knepley   {16, 12, 13, 17},
399371c9d4SSatish Balay   {17, 13, 3,  5 }
409371c9d4SSatish Balay };
41231de6a2SMatthew G. Knepley 
429f046c2dSEric Chamberland /* Partitions of a 2x5 rectangular mesh of quads : */
43231de6a2SMatthew G. Knepley const PetscInt sInitialPartition2x5Mesh[2][5] = {
44231de6a2SMatthew G. Knepley   {0, 2, 4, 6, 8},
45231de6a2SMatthew G. Knepley   {1, 3, 5, 7, 9}
46231de6a2SMatthew G. Knepley };
47231de6a2SMatthew G. Knepley 
48231de6a2SMatthew G. Knepley const PetscInt sNLoclCells2x5Mesh = 5;
49231de6a2SMatthew G. Knepley const PetscInt sNGlobVerts2x5Mesh = 18;
50231de6a2SMatthew G. Knepley 
519f046c2dSEric Chamberland /* Prisms mesh */
529f046c2dSEric Chamberland PetscReal sCoordsPrismsMesh[125][3] = {
539f046c2dSEric Chamberland   {2.24250931694056355e-01, 0.00000000000000000e+00, 0.00000000000000000e+00},
549f046c2dSEric Chamberland   {2.20660660151932697e-01, 2.87419338850266937e-01, 0.00000000000000000e+00},
559f046c2dSEric Chamberland   {0.00000000000000000e+00, 0.00000000000000000e+00, 2.70243537720639027e-01},
569f046c2dSEric Chamberland   {2.32445727460992402e-01, 0.00000000000000000e+00, 2.60591845015572310e-01},
579f046c2dSEric Chamberland   {2.41619971105419079e-01, 2.69894910706158231e-01, 2.42844781736072490e-01},
589f046c2dSEric Chamberland   {0.00000000000000000e+00, 2.46523339883120779e-01, 2.69072907562752262e-01},
599f046c2dSEric Chamberland   {0.00000000000000000e+00, 0.00000000000000000e+00, 0.00000000000000000e+00},
609f046c2dSEric Chamberland   {1.00000000000000000e+00, 2.75433417601945563e-01, 0.00000000000000000e+00},
619f046c2dSEric Chamberland   {1.00000000000000000e+00, 0.00000000000000000e+00, 2.33748605950385602e-01},
629f046c2dSEric Chamberland   {7.32445727460992457e-01, 0.00000000000000000e+00, 2.42344379130445597e-01},
639f046c2dSEric Chamberland   {1.00000000000000000e+00, 2.78258478013028610e-01, 2.57379172987105553e-01},
649f046c2dSEric Chamberland   {1.00000000000000000e+00, 0.00000000000000000e+00, 0.00000000000000000e+00},
659f046c2dSEric Chamberland   {7.49586880891153995e-01, 1.00000000000000000e+00, 0.00000000000000000e+00},
669f046c2dSEric Chamberland   {1.00000000000000000e+00, 1.00000000000000000e+00, 2.51949651266657582e-01},
679f046c2dSEric Chamberland   {7.41619971105419107e-01, 7.69894910706158120e-01, 2.33697838509081768e-01},
689f046c2dSEric Chamberland   {1.00000000000000000e+00, 7.78258478013028610e-01, 2.66479695645241543e-01},
699f046c2dSEric Chamberland   {7.55042653233710115e-01, 1.00000000000000000e+00, 2.58019637386860512e-01},
709f046c2dSEric Chamberland   {1.00000000000000000e+00, 1.00000000000000000e+00, 0.00000000000000000e+00},
719f046c2dSEric Chamberland   {0.00000000000000000e+00, 7.59235710423095789e-01, 0.00000000000000000e+00},
729f046c2dSEric Chamberland   {0.00000000000000000e+00, 1.00000000000000000e+00, 2.17232187874490473e-01},
739f046c2dSEric Chamberland   {0.00000000000000000e+00, 7.46523339883120807e-01, 2.42567232639677999e-01},
749f046c2dSEric Chamberland   {2.55042653233710115e-01, 1.00000000000000000e+00, 2.40660905690776916e-01},
759f046c2dSEric Chamberland   {0.00000000000000000e+00, 1.00000000000000000e+00, 0.00000000000000000e+00},
769f046c2dSEric Chamberland   {2.38934376044866809e-01, 0.00000000000000000e+00, 1.00000000000000000e+00},
779f046c2dSEric Chamberland   {2.18954188589218168e-01, 2.26916038449581692e-01, 1.00000000000000000e+00},
789f046c2dSEric Chamberland   {2.39787449636397643e-01, 0.00000000000000000e+00, 7.60591845015572310e-01},
799f046c2dSEric Chamberland   {2.40766735324061815e-01, 2.39643260505815608e-01, 7.42844781736072490e-01},
809f046c2dSEric Chamberland   {0.00000000000000000e+00, 2.57448248192627016e-01, 7.69072907562752262e-01},
819f046c2dSEric Chamberland   {0.00000000000000000e+00, 0.00000000000000000e+00, 1.00000000000000000e+00},
829f046c2dSEric Chamberland   {1.00000000000000000e+00, 2.38666970143638080e-01, 1.00000000000000000e+00},
839f046c2dSEric Chamberland   {7.39787449636397643e-01, 0.00000000000000000e+00, 7.42344379130445597e-01},
849f046c2dSEric Chamberland   {1.00000000000000000e+00, 2.59875254283874868e-01, 7.57379172987105553e-01},
859f046c2dSEric Chamberland   {1.00000000000000000e+00, 0.00000000000000000e+00, 1.00000000000000000e+00},
869f046c2dSEric Chamberland   {7.76318984007844159e-01, 1.00000000000000000e+00, 1.00000000000000000e+00},
879f046c2dSEric Chamberland   {7.40766735324061787e-01, 7.39643260505815636e-01, 7.33697838509081768e-01},
889f046c2dSEric Chamberland   {1.00000000000000000e+00, 7.59875254283874924e-01, 7.66479695645241543e-01},
899f046c2dSEric Chamberland   {7.68408704792055142e-01, 1.00000000000000000e+00, 7.58019637386860512e-01},
909f046c2dSEric Chamberland   {1.00000000000000000e+00, 1.00000000000000000e+00, 1.00000000000000000e+00},
919f046c2dSEric Chamberland   {0.00000000000000000e+00, 7.81085527042108207e-01, 1.00000000000000000e+00},
929f046c2dSEric Chamberland   {0.00000000000000000e+00, 7.57448248192627016e-01, 7.42567232639678054e-01},
939f046c2dSEric Chamberland   {2.68408704792055197e-01, 1.00000000000000000e+00, 7.40660905690776916e-01},
949f046c2dSEric Chamberland   {0.00000000000000000e+00, 1.00000000000000000e+00, 1.00000000000000000e+00},
959f046c2dSEric Chamberland   {7.24250931694056410e-01, 0.00000000000000000e+00, 0.00000000000000000e+00},
969f046c2dSEric Chamberland   {7.24250931694056410e-01, 2.75433417601945563e-01, 0.00000000000000000e+00},
979f046c2dSEric Chamberland   {4.44911591845989052e-01, 2.87419338850266937e-01, 0.00000000000000000e+00},
989f046c2dSEric Chamberland   {4.64891454921984804e-01, 0.00000000000000000e+00, 2.50940152310505593e-01},
999f046c2dSEric Chamberland   {4.74065698566411453e-01, 2.69894910706158231e-01, 2.33193089031005774e-01},
1009f046c2dSEric Chamberland   {4.48501863388112709e-01, 0.00000000000000000e+00, 0.00000000000000000e+00},
1019f046c2dSEric Chamberland   {7.20660660151932753e-01, 7.87419338850266937e-01, 0.00000000000000000e+00},
1029f046c2dSEric Chamberland   {7.20660660151932753e-01, 5.62852756452212555e-01, 0.00000000000000000e+00},
1039f046c2dSEric Chamberland   {2.20660660151932697e-01, 5.46655049273362614e-01, 0.00000000000000000e+00},
1049f046c2dSEric Chamberland   {4.83239942210838158e-01, 5.39789821412316462e-01, 2.15446025751505982e-01},
1059f046c2dSEric Chamberland   {7.41619971105419107e-01, 5.48153388719186951e-01, 2.48227882887665785e-01},
1069f046c2dSEric Chamberland   {2.41619971105419079e-01, 5.16418250589278927e-01, 2.41674151578185781e-01},
1079f046c2dSEric Chamberland   {4.41321320303865394e-01, 5.74838677700533873e-01, 0.00000000000000000e+00},
1089f046c2dSEric Chamberland   {1.00000000000000000e+00, 7.75433417601945507e-01, 0.00000000000000000e+00},
1099f046c2dSEric Chamberland   {1.00000000000000000e+00, 5.56516956026057219e-01, 2.81009740023825560e-01},
1109f046c2dSEric Chamberland   {7.32445727460992457e-01, 2.78258478013028610e-01, 2.65974946167165549e-01},
1119f046c2dSEric Chamberland   {1.00000000000000000e+00, 5.50866835203891125e-01, 0.00000000000000000e+00},
1129f046c2dSEric Chamberland   {0.00000000000000000e+00, 2.59235710423095733e-01, 0.00000000000000000e+00},
1139f046c2dSEric Chamberland   {0.00000000000000000e+00, 4.93046679766241558e-01, 2.67902277404865552e-01},
1149f046c2dSEric Chamberland   {2.55042653233710115e-01, 7.46523339883120807e-01, 2.65995950455964469e-01},
1159f046c2dSEric Chamberland   {0.00000000000000000e+00, 5.18471420846191466e-01, 0.00000000000000000e+00},
1169f046c2dSEric Chamberland   {2.49586880891154023e-01, 1.00000000000000000e+00, 0.00000000000000000e+00},
1179f046c2dSEric Chamberland   {2.49586880891154023e-01, 7.59235710423095789e-01, 0.00000000000000000e+00},
1189f046c2dSEric Chamberland   {4.70247541043086748e-01, 7.87419338850266937e-01, 0.00000000000000000e+00},
1199f046c2dSEric Chamberland   {5.10085306467420230e-01, 1.00000000000000000e+00, 2.64089623507063387e-01},
1209f046c2dSEric Chamberland   {4.96662624339129222e-01, 7.69894910706158231e-01, 2.39767824629284698e-01},
1219f046c2dSEric Chamberland   {4.99173761782308045e-01, 1.00000000000000000e+00, 0.00000000000000000e+00},
1229f046c2dSEric Chamberland   {0.00000000000000000e+00, 0.00000000000000000e+00, 7.70243537720639027e-01},
1239f046c2dSEric Chamberland   {2.40640523227928449e-01, 0.00000000000000000e+00, 5.21183690031144620e-01},
1249f046c2dSEric Chamberland   {2.62579282058905461e-01, 2.52370482562049525e-01, 4.85689563472144981e-01},
1259f046c2dSEric Chamberland   {0.00000000000000000e+00, 2.33810969343145825e-01, 5.38145815125504523e-01},
1269f046c2dSEric Chamberland   {0.00000000000000000e+00, 0.00000000000000000e+00, 5.40487075441278053e-01},
1279f046c2dSEric Chamberland   {1.00000000000000000e+00, 0.00000000000000000e+00, 7.33748605950385602e-01},
1289f046c2dSEric Chamberland   {7.40640523227928504e-01, 0.00000000000000000e+00, 4.84688758260891195e-01},
1299f046c2dSEric Chamberland   {1.00000000000000000e+00, 2.81083538424111656e-01, 5.14758345974211107e-01},
1309f046c2dSEric Chamberland   {1.00000000000000000e+00, 0.00000000000000000e+00, 4.67497211900771203e-01},
1319f046c2dSEric Chamberland   {7.38934376044866781e-01, 0.00000000000000000e+00, 1.00000000000000000e+00},
1329f046c2dSEric Chamberland   {4.79574899272795285e-01, 0.00000000000000000e+00, 7.50940152310505593e-01},
1339f046c2dSEric Chamberland   {4.77868752089733617e-01, 0.00000000000000000e+00, 1.00000000000000000e+00},
1349f046c2dSEric Chamberland   {1.00000000000000000e+00, 1.00000000000000000e+00, 7.51949651266657582e-01},
1359f046c2dSEric Chamberland   {7.62579282058905461e-01, 7.52370482562049525e-01, 4.67395677018163536e-01},
1369f046c2dSEric Chamberland   {1.00000000000000000e+00, 7.81083538424111712e-01, 5.32959391290483087e-01},
1379f046c2dSEric Chamberland   {7.60498425576266124e-01, 1.00000000000000000e+00, 5.16039274773721024e-01},
1389f046c2dSEric Chamberland   {1.00000000000000000e+00, 1.00000000000000000e+00, 5.03899302533315163e-01},
1399f046c2dSEric Chamberland   {7.18954188589218113e-01, 7.26916038449581636e-01, 1.00000000000000000e+00},
1409f046c2dSEric Chamberland   {4.81533470648123629e-01, 4.79286521011631217e-01, 7.15446025751505954e-01},
1419f046c2dSEric Chamberland   {4.57888564634085005e-01, 2.26916038449581692e-01, 1.00000000000000000e+00},
1429f046c2dSEric Chamberland   {4.95273172597062383e-01, 7.26916038449581636e-01, 1.00000000000000000e+00},
1439f046c2dSEric Chamberland   {4.37908377178436337e-01, 4.53832076899163384e-01, 1.00000000000000000e+00},
1449f046c2dSEric Chamberland   {1.00000000000000000e+00, 7.38666970143638135e-01, 1.00000000000000000e+00},
1459f046c2dSEric Chamberland   {1.00000000000000000e+00, 5.19750508567749736e-01, 7.81009740023825616e-01},
1469f046c2dSEric Chamberland   {7.38934376044866781e-01, 2.38666970143638080e-01, 1.00000000000000000e+00},
1479f046c2dSEric Chamberland   {7.18954188589218113e-01, 4.65583008593219771e-01, 1.00000000000000000e+00},
1489f046c2dSEric Chamberland   {1.00000000000000000e+00, 4.77333940287276159e-01, 1.00000000000000000e+00},
1499f046c2dSEric Chamberland   {0.00000000000000000e+00, 1.00000000000000000e+00, 7.17232187874490501e-01},
1509f046c2dSEric Chamberland   {0.00000000000000000e+00, 7.33810969343145825e-01, 4.85134465279355998e-01},
1519f046c2dSEric Chamberland   {2.60498425576266179e-01, 1.00000000000000000e+00, 4.81321811381553832e-01},
1529f046c2dSEric Chamberland   {0.00000000000000000e+00, 1.00000000000000000e+00, 4.34464375748980947e-01},
1539f046c2dSEric Chamberland   {0.00000000000000000e+00, 2.81085527042108152e-01, 1.00000000000000000e+00},
1549f046c2dSEric Chamberland   {0.00000000000000000e+00, 5.14896496385254032e-01, 7.67902277404865607e-01},
1559f046c2dSEric Chamberland   {2.76318984007844215e-01, 7.81085527042108207e-01, 1.00000000000000000e+00},
1569f046c2dSEric Chamberland   {2.18954188589218168e-01, 5.08001565491689844e-01, 1.00000000000000000e+00},
1579f046c2dSEric Chamberland   {0.00000000000000000e+00, 5.62171054084216304e-01, 1.00000000000000000e+00},
1589f046c2dSEric Chamberland   {2.76318984007844215e-01, 1.00000000000000000e+00, 1.00000000000000000e+00},
1599f046c2dSEric Chamberland   {5.36817409584110394e-01, 1.00000000000000000e+00, 7.64089623507063331e-01},
1609f046c2dSEric Chamberland   {5.52637968015688430e-01, 1.00000000000000000e+00, 1.00000000000000000e+00},
1619f046c2dSEric Chamberland   {5.03219805286833965e-01, 2.52370482562049525e-01, 4.66386178062011547e-01},
1629f046c2dSEric Chamberland   {4.80554184960459430e-01, 2.39643260505815608e-01, 7.33193089031005774e-01},
1639f046c2dSEric Chamberland   {4.81281046455856898e-01, 0.00000000000000000e+00, 5.01880304621011186e-01},
1649f046c2dSEric Chamberland   {7.62579282058905461e-01, 5.33454020986161126e-01, 4.96455765775331570e-01},
1659f046c2dSEric Chamberland   {2.62579282058905461e-01, 4.86181451905195350e-01, 4.83348303156371562e-01},
1669f046c2dSEric Chamberland   {7.40766735324061787e-01, 4.99518514789690449e-01, 7.48227882887665841e-01},
1679f046c2dSEric Chamberland   {2.40766735324061815e-01, 4.97091508698442541e-01, 7.41674151578185725e-01},
1689f046c2dSEric Chamberland   {5.25158564117810922e-01, 5.04740965124099050e-01, 4.30892051503011964e-01},
1699f046c2dSEric Chamberland   {7.40640523227928504e-01, 2.81083538424111656e-01, 5.31949892334331098e-01},
1709f046c2dSEric Chamberland   {7.39787449636397643e-01, 2.59875254283874868e-01, 7.65974946167165549e-01},
1719f046c2dSEric Chamberland   {1.00000000000000000e+00, 5.62167076848223313e-01, 5.62019480047651121e-01},
1729f046c2dSEric Chamberland   {2.60498425576266179e-01, 7.33810969343145825e-01, 5.31991900911928939e-01},
1739f046c2dSEric Chamberland   {2.68408704792055197e-01, 7.57448248192627016e-01, 7.65995950455964469e-01},
1749f046c2dSEric Chamberland   {0.00000000000000000e+00, 4.67621938686291649e-01, 5.35804554809731104e-01},
1759f046c2dSEric Chamberland   {5.23077707635171585e-01, 7.52370482562049525e-01, 4.79535649258569396e-01},
1769f046c2dSEric Chamberland   {5.09175440116116929e-01, 7.39643260505815636e-01, 7.39767824629284698e-01},
1779f046c2dSEric Chamberland   {5.20996851152532359e-01, 1.00000000000000000e+00, 5.28179247014126774e-01}
1789f046c2dSEric Chamberland };
1799f046c2dSEric Chamberland 
1809f046c2dSEric Chamberland const PetscInt sConnectivityPrismsMesh[128][6] = {
1819f046c2dSEric Chamberland   /* rank 0 */
1829f046c2dSEric Chamberland   {11,  7,   42,  8,   10,  9  },
1839f046c2dSEric Chamberland   {47,  42,  43,  45,  9,   57 },
1849f046c2dSEric Chamberland   {8,   10,  9,   77,  76,  75 },
1859f046c2dSEric Chamberland   {45,  9,   57,  110, 75,  116},
1869f046c2dSEric Chamberland   {17,  48,  55,  13,  14,  15 },
1879f046c2dSEric Chamberland   {58,  55,  49,  56,  15,  52 },
1889f046c2dSEric Chamberland   {13,  14,  15,  85,  82,  83 },
1899f046c2dSEric Chamberland   {56,  15,  52,  118, 83,  111},
1909f046c2dSEric Chamberland   {6,   0,   1,   2,   3,   4  },
1919f046c2dSEric Chamberland   {54,  1,   44,  51,  4,   46 },
1929f046c2dSEric Chamberland   {2,   3,   4,   73,  70,  71 },
1939f046c2dSEric Chamberland   {51,  4,   46,  115, 71,  108},
1949f046c2dSEric Chamberland   {58,  49,  43,  56,  52,  57 },
1959f046c2dSEric Chamberland   {47,  43,  44,  45,  57,  46 },
1969f046c2dSEric Chamberland   {56,  52,  57,  118, 111, 116},
1979f046c2dSEric Chamberland   {45,  57,  46,  110, 116, 108},
1989f046c2dSEric Chamberland   {77,  76,  75,  74,  31,  30 },
1999f046c2dSEric Chamberland   {110, 75,  116, 79,  30,  117},
2009f046c2dSEric Chamberland   {74,  31,  30,  32,  29,  78 },
2019f046c2dSEric Chamberland   {79,  30,  117, 80,  78,  93 },
2029f046c2dSEric Chamberland   {85,  82,  83,  81,  34,  35 },
2039f046c2dSEric Chamberland   {118, 83,  111, 92,  35,  113},
2049f046c2dSEric Chamberland   {81,  34,  35,  37,  86,  91 },
2059f046c2dSEric Chamberland   {92,  35,  113, 95,  91,  94 },
2069f046c2dSEric Chamberland   {73,  70,  71,  69,  25,  26 },
2079f046c2dSEric Chamberland   {115, 71,  108, 87,  26,  109},
2089f046c2dSEric Chamberland   {69,  25,  26,  28,  23,  24 },
2099f046c2dSEric Chamberland   {87,  26,  109, 90,  24,  88 },
2109f046c2dSEric Chamberland   {118, 111, 116, 92,  113, 117},
2119f046c2dSEric Chamberland   {110, 116, 108, 79,  117, 109},
2129f046c2dSEric Chamberland   {92,  113, 117, 95,  94,  93 },
2139f046c2dSEric Chamberland   {79,  117, 109, 80,  93,  88 },
2149f046c2dSEric Chamberland   {22,  18,  63,  19,  20,  21 },
2159f046c2dSEric Chamberland   {68,  63,  64,  66,  21,  61 },
2169f046c2dSEric Chamberland   {19,  20,  21,  99,  97,  98 },
2179f046c2dSEric Chamberland   {66,  21,  61,  124, 98,  119},
2189f046c2dSEric Chamberland   {6,   1,   59,  2,   4,   5  },
2199f046c2dSEric Chamberland   {62,  59,  50,  60,  5,   53 },
2209f046c2dSEric Chamberland   {2,   4,   5,   73,  71,  72 },
2219f046c2dSEric Chamberland   {60,  5,   53,  121, 72,  112},
2229f046c2dSEric Chamberland   {17,  12,  48,  13,  16,  14 },
2239f046c2dSEric Chamberland   {54,  48,  65,  51,  14,  67 },
2249f046c2dSEric Chamberland   {13,  16,  14,  85,  84,  82 },
2259f046c2dSEric Chamberland   {51,  14,  67,  115, 82,  122},
2269f046c2dSEric Chamberland   {62,  50,  64,  60,  53,  61 },
2279f046c2dSEric Chamberland   {68,  64,  65,  66,  61,  67 },
2289f046c2dSEric Chamberland   {60,  53,  61,  121, 112, 119},
2299f046c2dSEric Chamberland   {66,  61,  67,  124, 119, 122},
2309f046c2dSEric Chamberland   {99,  97,  98,  96,  39,  40 },
2319f046c2dSEric Chamberland   {124, 98,  119, 106, 40,  120},
2329f046c2dSEric Chamberland   {96,  39,  40,  41,  38,  105},
2339f046c2dSEric Chamberland   {106, 40,  120, 107, 105, 102},
2349f046c2dSEric Chamberland   {73,  71,  72,  69,  26,  27 },
2359f046c2dSEric Chamberland   {121, 72,  112, 101, 27,  114},
2369f046c2dSEric Chamberland   {69,  26,  27,  28,  24,  100},
2379f046c2dSEric Chamberland   {101, 27,  114, 104, 100, 103},
2389f046c2dSEric Chamberland   {85,  84,  82,  81,  36,  34 },
2399f046c2dSEric Chamberland   {115, 82,  122, 87,  34,  123},
2409f046c2dSEric Chamberland   {81,  36,  34,  37,  33,  86 },
2419f046c2dSEric Chamberland   {87,  34,  123, 90,  86,  89 },
2429f046c2dSEric Chamberland   {121, 112, 119, 101, 114, 120},
2439f046c2dSEric Chamberland   {124, 119, 122, 106, 120, 123},
2449f046c2dSEric Chamberland   {101, 114, 120, 104, 103, 102},
2459f046c2dSEric Chamberland   {106, 120, 123, 107, 102, 89 },
2469f046c2dSEric Chamberland   /* rank 1 */
2479f046c2dSEric Chamberland   {58,  43,  7,   56,  57,  10 },
2489f046c2dSEric Chamberland   {7,   43,  42,  10,  57,  9  },
2499f046c2dSEric Chamberland   {56,  57,  10,  118, 116, 76 },
2509f046c2dSEric Chamberland   {10,  57,  9,   76,  116, 75 },
2519f046c2dSEric Chamberland   {54,  49,  48,  51,  52,  14 },
2529f046c2dSEric Chamberland   {48,  49,  55,  14,  52,  15 },
2539f046c2dSEric Chamberland   {51,  52,  14,  115, 111, 82 },
2549f046c2dSEric Chamberland   {14,  52,  15,  82,  111, 83 },
2559f046c2dSEric Chamberland   {47,  44,  0,   45,  46,  3  },
2569f046c2dSEric Chamberland   {0,   44,  1,   3,   46,  4  },
2579f046c2dSEric Chamberland   {45,  46,  3,   110, 108, 70 },
2589f046c2dSEric Chamberland   {3,   46,  4,   70,  108, 71 },
2599f046c2dSEric Chamberland   {54,  44,  49,  51,  46,  52 },
2609f046c2dSEric Chamberland   {49,  44,  43,  52,  46,  57 },
2619f046c2dSEric Chamberland   {51,  46,  52,  115, 108, 111},
2629f046c2dSEric Chamberland   {52,  46,  57,  111, 108, 116},
2639f046c2dSEric Chamberland   {118, 116, 76,  92,  117, 31 },
2649f046c2dSEric Chamberland   {76,  116, 75,  31,  117, 30 },
2659f046c2dSEric Chamberland   {92,  117, 31,  95,  93,  29 },
2669f046c2dSEric Chamberland   {31,  117, 30,  29,  93,  78 },
2679f046c2dSEric Chamberland   {115, 111, 82,  87,  113, 34 },
2689f046c2dSEric Chamberland   {82,  111, 83,  34,  113, 35 },
2699f046c2dSEric Chamberland   {87,  113, 34,  90,  94,  86 },
2709f046c2dSEric Chamberland   {34,  113, 35,  86,  94,  91 },
2719f046c2dSEric Chamberland   {110, 108, 70,  79,  109, 25 },
2729f046c2dSEric Chamberland   {70,  108, 71,  25,  109, 26 },
2739f046c2dSEric Chamberland   {79,  109, 25,  80,  88,  23 },
2749f046c2dSEric Chamberland   {25,  109, 26,  23,  88,  24 },
2759f046c2dSEric Chamberland   {115, 108, 111, 87,  109, 113},
2769f046c2dSEric Chamberland   {111, 108, 116, 113, 109, 117},
2779f046c2dSEric Chamberland   {87,  109, 113, 90,  88,  94 },
2789f046c2dSEric Chamberland   {113, 109, 117, 94,  88,  93 },
2799f046c2dSEric Chamberland   {62,  64,  18,  60,  61,  20 },
2809f046c2dSEric Chamberland   {18,  64,  63,  20,  61,  21 },
2819f046c2dSEric Chamberland   {60,  61,  20,  121, 119, 97 },
2829f046c2dSEric Chamberland   {20,  61,  21,  97,  119, 98 },
2839f046c2dSEric Chamberland   {54,  50,  1,   51,  53,  4  },
2849f046c2dSEric Chamberland   {1,   50,  59,  4,   53,  5  },
2859f046c2dSEric Chamberland   {51,  53,  4,   115, 112, 71 },
2869f046c2dSEric Chamberland   {4,   53,  5,   71,  112, 72 },
2879f046c2dSEric Chamberland   {68,  65,  12,  66,  67,  16 },
2889f046c2dSEric Chamberland   {12,  65,  48,  16,  67,  14 },
2899f046c2dSEric Chamberland   {66,  67,  16,  124, 122, 84 },
2909f046c2dSEric Chamberland   {16,  67,  14,  84,  122, 82 },
2919f046c2dSEric Chamberland   {54,  65,  50,  51,  67,  53 },
2929f046c2dSEric Chamberland   {50,  65,  64,  53,  67,  61 },
2939f046c2dSEric Chamberland   {51,  67,  53,  115, 122, 112},
2949f046c2dSEric Chamberland   {53,  67,  61,  112, 122, 119},
2959f046c2dSEric Chamberland   {121, 119, 97,  101, 120, 39 },
2969f046c2dSEric Chamberland   {97,  119, 98,  39,  120, 40 },
2979f046c2dSEric Chamberland   {101, 120, 39,  104, 102, 38 },
2989f046c2dSEric Chamberland   {39,  120, 40,  38,  102, 105},
2999f046c2dSEric Chamberland   {115, 112, 71,  87,  114, 26 },
3009f046c2dSEric Chamberland   {71,  112, 72,  26,  114, 27 },
3019f046c2dSEric Chamberland   {87,  114, 26,  90,  103, 24 },
3029f046c2dSEric Chamberland   {26,  114, 27,  24,  103, 100},
3039f046c2dSEric Chamberland   {124, 122, 84,  106, 123, 36 },
3049f046c2dSEric Chamberland   {84,  122, 82,  36,  123, 34 },
3059f046c2dSEric Chamberland   {106, 123, 36,  107, 89,  33 },
3069f046c2dSEric Chamberland   {36,  123, 34,  33,  89,  86 },
3079f046c2dSEric Chamberland   {115, 122, 112, 87,  123, 114},
3089f046c2dSEric Chamberland   {112, 122, 119, 114, 123, 120},
3099f046c2dSEric Chamberland   {87,  123, 114, 90,  89,  103},
3109f046c2dSEric Chamberland   {114, 123, 120, 103, 89,  102}
3119f046c2dSEric Chamberland };
3129f046c2dSEric Chamberland 
3139f046c2dSEric Chamberland /* Partitions of prisms mesh : */
3149f046c2dSEric Chamberland const PetscInt sInitialPartitionPrismsMesh[2][64] = {
3159f046c2dSEric Chamberland   {0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,  37,  38,  39,  40,  41,  42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,  56,  57,  58,  59,  60,  61,  62,  63 },
3169f046c2dSEric Chamberland   {64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
3179f046c2dSEric Chamberland    96,                                                                                                                                 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127}
3189f046c2dSEric Chamberland };
3199f046c2dSEric Chamberland 
3209f046c2dSEric Chamberland const PetscInt sNLoclCellsPrismsMesh = 64;
3219f046c2dSEric Chamberland const PetscInt sNGlobVertsPrismsMesh = 125;
3229f046c2dSEric Chamberland 
323d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
324d71ae5a4SJacob Faibussowitsch {
3259f046c2dSEric Chamberland   PetscInt         Nc = 0;
3269f046c2dSEric Chamberland   const PetscInt  *InitPartForRank[2];
327231de6a2SMatthew G. Knepley   DM               dm, idm, ddm;
328231de6a2SMatthew G. Knepley   PetscSF          sfVert, sfMig, sfPart;
329231de6a2SMatthew G. Knepley   PetscPartitioner part;
330231de6a2SMatthew G. Knepley   PetscSection     s;
331231de6a2SMatthew G. Knepley   PetscInt        *cells, c;
332231de6a2SMatthew G. Knepley   PetscMPIInt      size, rank;
3339f046c2dSEric Chamberland   PetscBool        box = PETSC_FALSE, field = PETSC_FALSE, quadsmesh = PETSC_FALSE, prismsmesh = PETSC_FALSE;
334231de6a2SMatthew G. Knepley 
335327415f7SBarry Smith   PetscFunctionBeginUser;
336231de6a2SMatthew G. Knepley   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
337231de6a2SMatthew G. Knepley   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
338231de6a2SMatthew G. Knepley   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
339231de6a2SMatthew G. Knepley   PetscCheck(size == 2, PETSC_COMM_WORLD, PETSC_ERR_SUP, "This is a 2 processors example only");
340231de6a2SMatthew G. Knepley   PetscCall(PetscOptionsGetBool(NULL, NULL, "-field", &field, NULL));
3419f046c2dSEric Chamberland   PetscCall(PetscOptionsGetBool(NULL, NULL, "-box", &box, NULL));
3429f046c2dSEric Chamberland   PetscCall(PetscOptionsGetBool(NULL, NULL, "-quadsmesh", &quadsmesh, NULL));
3439f046c2dSEric Chamberland   PetscCall(PetscOptionsGetBool(NULL, NULL, "-prismsmesh", &prismsmesh, NULL));
3449f046c2dSEric Chamberland   PetscCheck(1 == (box ? 1 : 0) + (quadsmesh ? 1 : 0) + (prismsmesh ? 1 : 0), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Specify one and only one of -box, -quadsmesh or -prismsmesh");
345231de6a2SMatthew G. Knepley 
346231de6a2SMatthew G. Knepley   PetscCall(DMPlexCreate(PETSC_COMM_WORLD, &dm));
347231de6a2SMatthew G. Knepley   if (box) {
348231de6a2SMatthew G. Knepley     PetscCall(DMSetType(dm, DMPLEX));
349231de6a2SMatthew G. Knepley     PetscCall(DMSetFromOptions(dm));
350231de6a2SMatthew G. Knepley   } else {
3519f046c2dSEric Chamberland     if (quadsmesh) {
3529f046c2dSEric Chamberland       Nc                       = sNLoclCells2x5Mesh; //Same on each rank for this example...
3539f046c2dSEric Chamberland       PetscInt Nv              = sNGlobVerts2x5Mesh;
3549f046c2dSEric Chamberland       InitPartForRank[0]       = &sInitialPartition2x5Mesh[0][0];
3559f046c2dSEric Chamberland       InitPartForRank[1]       = &sInitialPartition2x5Mesh[1][0];
3569f046c2dSEric Chamberland       const PetscInt(*Conn)[4] = sConnectivity2x5Mesh;
3579f046c2dSEric Chamberland 
3589f046c2dSEric Chamberland       const PetscInt Ncor = 4;
3599f046c2dSEric Chamberland       const PetscInt dim  = 2;
3609f046c2dSEric Chamberland 
361231de6a2SMatthew G. Knepley       PetscCall(PetscMalloc1(Nc * Ncor, &cells));
362231de6a2SMatthew G. Knepley       for (c = 0; c < Nc; ++c) {
363231de6a2SMatthew G. Knepley         PetscInt cell = (InitPartForRank[rank])[c], cor;
364231de6a2SMatthew G. Knepley 
365ad540459SPierre Jolivet         for (cor = 0; cor < Ncor; ++cor) cells[c * Ncor + cor] = Conn[cell][cor];
366231de6a2SMatthew G. Knepley       }
367231de6a2SMatthew G. Knepley       PetscCall(DMSetDimension(dm, dim));
368231de6a2SMatthew G. Knepley       PetscCall(DMPlexBuildFromCellListParallel(dm, Nc, PETSC_DECIDE, Nv, Ncor, cells, &sfVert, NULL));
3699f046c2dSEric Chamberland     } else if (prismsmesh) {
3709f046c2dSEric Chamberland       Nc                       = sNLoclCellsPrismsMesh; //Same on each rank for this example...
3719f046c2dSEric Chamberland       PetscInt Nv              = sNGlobVertsPrismsMesh;
3729f046c2dSEric Chamberland       InitPartForRank[0]       = &sInitialPartitionPrismsMesh[0][0];
3739f046c2dSEric Chamberland       InitPartForRank[1]       = &sInitialPartitionPrismsMesh[1][0];
3749f046c2dSEric Chamberland       const PetscInt(*Conn)[6] = sConnectivityPrismsMesh;
3759f046c2dSEric Chamberland 
3769f046c2dSEric Chamberland       const PetscInt Ncor = 6;
3779f046c2dSEric Chamberland       const PetscInt dim  = 3;
3789f046c2dSEric Chamberland 
3799f046c2dSEric Chamberland       PetscCall(PetscMalloc1(Nc * Ncor, &cells));
3809f046c2dSEric Chamberland       for (c = 0; c < Nc; ++c) {
3819f046c2dSEric Chamberland         PetscInt cell = (InitPartForRank[rank])[c], cor;
3829f046c2dSEric Chamberland 
3839f046c2dSEric Chamberland         for (cor = 0; cor < Ncor; ++cor) cells[c * Ncor + cor] = Conn[cell][cor];
3849f046c2dSEric Chamberland       }
3859f046c2dSEric Chamberland       PetscCall(DMSetDimension(dm, dim));
3869f046c2dSEric Chamberland       PetscCall(DMPlexBuildFromCellListParallel(dm, Nc, PETSC_DECIDE, Nv, Ncor, cells, &sfVert, NULL));
3879f046c2dSEric Chamberland     }
388231de6a2SMatthew G. Knepley     PetscCall(PetscSFDestroy(&sfVert));
389231de6a2SMatthew G. Knepley     PetscCall(PetscFree(cells));
390231de6a2SMatthew G. Knepley     PetscCall(DMPlexInterpolate(dm, &idm));
391231de6a2SMatthew G. Knepley     PetscCall(DMDestroy(&dm));
392231de6a2SMatthew G. Knepley     dm = idm;
393231de6a2SMatthew G. Knepley   }
394231de6a2SMatthew G. Knepley   PetscCall(DMSetUseNatural(dm, PETSC_TRUE));
395231de6a2SMatthew G. Knepley   PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
396231de6a2SMatthew G. Knepley 
397231de6a2SMatthew G. Knepley   if (field) {
398231de6a2SMatthew G. Knepley     const PetscInt Nf         = 1;
399231de6a2SMatthew G. Knepley     const PetscInt numBC      = 0;
4009f046c2dSEric Chamberland     const PetscInt numComp[1] = {1};
4019f046c2dSEric Chamberland     PetscInt       numDof[4]  = {0, 0, 0, 0};
4029f046c2dSEric Chamberland     PetscInt       dim;
4039f046c2dSEric Chamberland 
4049f046c2dSEric Chamberland     PetscCall(DMGetDimension(dm, &dim));
4059f046c2dSEric Chamberland     numDof[dim] = 1;
406231de6a2SMatthew G. Knepley 
407231de6a2SMatthew G. Knepley     PetscCall(DMSetNumFields(dm, Nf));
408231de6a2SMatthew G. Knepley     PetscCall(DMPlexCreateSection(dm, NULL, numComp, numDof, numBC, NULL, NULL, NULL, NULL, &s));
409231de6a2SMatthew G. Knepley     PetscCall(DMSetLocalSection(dm, s));
410231de6a2SMatthew G. Knepley     PetscCall(PetscSectionView(s, PETSC_VIEWER_STDOUT_WORLD));
411231de6a2SMatthew G. Knepley     PetscCall(PetscSectionDestroy(&s));
412231de6a2SMatthew G. Knepley   }
413231de6a2SMatthew G. Knepley 
414231de6a2SMatthew G. Knepley   PetscCall(DMPlexGetPartitioner(dm, &part));
415231de6a2SMatthew G. Knepley   PetscCall(PetscPartitionerSetFromOptions(part));
416231de6a2SMatthew G. Knepley 
417231de6a2SMatthew G. Knepley   PetscCall(DMPlexDistribute(dm, 0, &sfMig, &ddm));
418231de6a2SMatthew G. Knepley   PetscCall(PetscSFView(sfMig, PETSC_VIEWER_STDOUT_WORLD));
419231de6a2SMatthew G. Knepley   PetscCall(PetscSFCreateInverseSF(sfMig, &sfPart));
420231de6a2SMatthew G. Knepley   PetscCall(PetscObjectSetName((PetscObject)sfPart, "Inverse Migration SF"));
421231de6a2SMatthew G. Knepley   PetscCall(PetscSFView(sfPart, PETSC_VIEWER_STDOUT_WORLD));
422231de6a2SMatthew G. Knepley 
423231de6a2SMatthew G. Knepley   Vec          lGlobalVec, lNatVec;
424231de6a2SMatthew G. Knepley   PetscScalar *lNatVecArray;
425231de6a2SMatthew G. Knepley 
426231de6a2SMatthew G. Knepley   {
427231de6a2SMatthew G. Knepley     PetscSection s;
428231de6a2SMatthew G. Knepley 
429231de6a2SMatthew G. Knepley     PetscCall(DMGetGlobalSection(dm, &s));
430231de6a2SMatthew G. Knepley     PetscCall(PetscSectionView(s, PETSC_VIEWER_STDOUT_WORLD));
431231de6a2SMatthew G. Knepley   }
432231de6a2SMatthew G. Knepley   PetscCall(DMGetGlobalVector(dm, &lNatVec));
433231de6a2SMatthew G. Knepley   PetscCall(PetscObjectSetName((PetscObject)lNatVec, "Natural Vector (initial partition)"));
434231de6a2SMatthew G. Knepley 
435231de6a2SMatthew G. Knepley   //Copying the initial partition into the "natural" vector:
4369f046c2dSEric Chamberland   PetscCall(VecZeroEntries(lNatVec));
437231de6a2SMatthew G. Knepley   PetscCall(VecGetArray(lNatVec, &lNatVecArray));
438231de6a2SMatthew G. Knepley   for (c = 0; c < Nc; ++c) lNatVecArray[c] = (InitPartForRank[rank])[c];
439231de6a2SMatthew G. Knepley   PetscCall(VecRestoreArray(lNatVec, &lNatVecArray));
440231de6a2SMatthew G. Knepley 
441231de6a2SMatthew G. Knepley   PetscCall(DMGetGlobalVector(ddm, &lGlobalVec));
442231de6a2SMatthew G. Knepley   PetscCall(PetscObjectSetName((PetscObject)lGlobalVec, "Global Vector (reordered element numbers in the petsc distributed order)"));
443231de6a2SMatthew G. Knepley   PetscCall(VecZeroEntries(lGlobalVec));
444231de6a2SMatthew G. Knepley 
445231de6a2SMatthew G. Knepley   // The call to DMPlexNaturalToGlobalBegin/End does not produce our expected result...
446231de6a2SMatthew G. Knepley   // In lGlobalVec, we expect to have:
447231de6a2SMatthew G. Knepley   /*
448231de6a2SMatthew G. Knepley    * Process [0]
449231de6a2SMatthew G. Knepley    * 2.
450231de6a2SMatthew G. Knepley    * 4.
451231de6a2SMatthew G. Knepley    * 8.
452231de6a2SMatthew G. Knepley    * 3.
453231de6a2SMatthew G. Knepley    * 9.
454231de6a2SMatthew G. Knepley    * Process [1]
455231de6a2SMatthew G. Knepley    * 1.
456231de6a2SMatthew G. Knepley    * 5.
457231de6a2SMatthew G. Knepley    * 7.
458231de6a2SMatthew G. Knepley    * 0.
459231de6a2SMatthew G. Knepley    * 6.
460231de6a2SMatthew G. Knepley    *
461231de6a2SMatthew G. Knepley    * but we obtained:
462231de6a2SMatthew G. Knepley    *
463231de6a2SMatthew G. Knepley    * Process [0]
464231de6a2SMatthew G. Knepley    * 2.
465231de6a2SMatthew G. Knepley    * 4.
466231de6a2SMatthew G. Knepley    * 8.
467231de6a2SMatthew G. Knepley    * 0.
468231de6a2SMatthew G. Knepley    * 0.
469231de6a2SMatthew G. Knepley    * Process [1]
470231de6a2SMatthew G. Knepley    * 0.
471231de6a2SMatthew G. Knepley    * 0.
472231de6a2SMatthew G. Knepley    * 0.
473231de6a2SMatthew G. Knepley    * 0.
474231de6a2SMatthew G. Knepley    * 0.
475231de6a2SMatthew G. Knepley    */
476231de6a2SMatthew G. Knepley 
477231de6a2SMatthew G. Knepley   {
478231de6a2SMatthew G. Knepley     PetscSF nsf;
479231de6a2SMatthew G. Knepley 
480231de6a2SMatthew G. Knepley     PetscCall(DMPlexGetGlobalToNaturalSF(ddm, &nsf));
481231de6a2SMatthew G. Knepley     PetscCall(PetscSFView(nsf, NULL));
482231de6a2SMatthew G. Knepley   }
483231de6a2SMatthew G. Knepley   PetscCall(DMPlexNaturalToGlobalBegin(ddm, lNatVec, lGlobalVec));
484231de6a2SMatthew G. Knepley   PetscCall(DMPlexNaturalToGlobalEnd(ddm, lNatVec, lGlobalVec));
485231de6a2SMatthew G. Knepley 
486231de6a2SMatthew G. Knepley   PetscCall(VecView(lNatVec, PETSC_VIEWER_STDOUT_WORLD));
487231de6a2SMatthew G. Knepley   PetscCall(VecView(lGlobalVec, PETSC_VIEWER_STDOUT_WORLD));
488231de6a2SMatthew G. Knepley 
489231de6a2SMatthew G. Knepley   PetscCall(DMRestoreGlobalVector(dm, &lNatVec));
490231de6a2SMatthew G. Knepley   PetscCall(DMRestoreGlobalVector(ddm, &lGlobalVec));
491231de6a2SMatthew G. Knepley 
4929f046c2dSEric Chamberland   const PetscBool lUseCone    = PETSC_FALSE;
4939f046c2dSEric Chamberland   const PetscBool lUseClosure = PETSC_TRUE;
4949f046c2dSEric Chamberland   PetscCall(DMSetBasicAdjacency(ddm, lUseCone, lUseClosure));
4959f046c2dSEric Chamberland   const PetscInt lNbCellsInOverlap = 1;
4969f046c2dSEric Chamberland   PetscSF        lSFMigrationOvl;
4979f046c2dSEric Chamberland   DM             ddm_with_overlap;
4989f046c2dSEric Chamberland 
4999f046c2dSEric Chamberland   PetscCall(DMPlexDistributeOverlap(ddm, lNbCellsInOverlap, &lSFMigrationOvl, &ddm_with_overlap));
5009f046c2dSEric Chamberland 
5019f046c2dSEric Chamberland   IS lISCellWithOvl = 0;
5029f046c2dSEric Chamberland   /* This is the buggy call with prisms since commit 5ae96e2b862 */
503*e2b8d0fcSMatthew G. Knepley   PetscCall(DMPlexCreateCellNumbering(ddm_with_overlap, PETSC_TRUE, &lISCellWithOvl));
5049f046c2dSEric Chamberland   /* Here, we can see the elements in the overlap within the IS: they are the ones with negative indices */
5059f046c2dSEric Chamberland   PetscCall(ISView(lISCellWithOvl, PETSC_VIEWER_STDOUT_WORLD));
506*e2b8d0fcSMatthew G. Knepley   PetscCall(ISDestroy(&lISCellWithOvl));
5079f046c2dSEric Chamberland 
5089f046c2dSEric Chamberland   PetscCall(PetscSFDestroy(&lSFMigrationOvl));
5099f046c2dSEric Chamberland   PetscCall(DMDestroy(&ddm_with_overlap));
510231de6a2SMatthew G. Knepley   PetscCall(PetscSFDestroy(&sfMig));
511231de6a2SMatthew G. Knepley   PetscCall(PetscSFDestroy(&sfPart));
512231de6a2SMatthew G. Knepley   PetscCall(DMDestroy(&dm));
513231de6a2SMatthew G. Knepley   PetscCall(DMDestroy(&ddm));
514231de6a2SMatthew G. Knepley   PetscCall(PetscFinalize());
515231de6a2SMatthew G. Knepley   return 0;
516231de6a2SMatthew G. Knepley }
517231de6a2SMatthew G. Knepley 
518231de6a2SMatthew G. Knepley /*TEST
519231de6a2SMatthew G. Knepley 
520231de6a2SMatthew G. Knepley   testset:
521231de6a2SMatthew G. Knepley     args: -field -petscpartitioner_type simple
522231de6a2SMatthew G. Knepley     nsize: 2
523231de6a2SMatthew G. Knepley 
524231de6a2SMatthew G. Knepley     test:
525231de6a2SMatthew G. Knepley       suffix: 0
5269f046c2dSEric Chamberland       args: -quadsmesh
5279f046c2dSEric Chamberland       output_file: output/ex47_0.out
528231de6a2SMatthew G. Knepley 
529231de6a2SMatthew G. Knepley     test:
530231de6a2SMatthew G. Knepley       suffix: 1
531231de6a2SMatthew G. Knepley       args: -box -dm_plex_simplex 0 -dm_plex_box_faces 2,5 -dm_distribute
5329f046c2dSEric Chamberland       output_file: output/ex47_1.out
5339f046c2dSEric Chamberland 
5349f046c2dSEric Chamberland     test:
5359f046c2dSEric Chamberland       suffix: 2
5369f046c2dSEric Chamberland       args: -prismsmesh
5379f046c2dSEric Chamberland       output_file: output/ex47_2.out
538231de6a2SMatthew G. Knepley 
539231de6a2SMatthew G. Knepley TEST*/
540