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
5172f9f102SEric Chamberland /* Mixed mesh : quads and triangles (4 first quads above divided into triangles*/
5272f9f102SEric Chamberland /* Connectivity of a 2x5 rectangular mesh of quads : */
5372f9f102SEric Chamberland const PetscInt sConnectivityMixedTQMesh[14][4] = {
5472f9f102SEric Chamberland {0, 4, 6, -1},
5572f9f102SEric Chamberland {4, 14, 6, -1},
5672f9f102SEric Chamberland {6, 14, 7, -1},
5772f9f102SEric Chamberland {14, 15, 7, -1},
5872f9f102SEric Chamberland {7, 15, 8, -1},
5972f9f102SEric Chamberland {15, 16, 8, -1},
6072f9f102SEric Chamberland {8, 16, 9, -1},
6172f9f102SEric Chamberland {16, 17, 9, -1},
6272f9f102SEric Chamberland {9, 17, 5, 2 },
6372f9f102SEric Chamberland {4, 1, 10, 14},
6472f9f102SEric Chamberland {14, 10, 11, 15},
6572f9f102SEric Chamberland {15, 11, 12, 16},
6672f9f102SEric Chamberland {16, 12, 13, 17},
6772f9f102SEric Chamberland {17, 13, 3, 5 }
6872f9f102SEric Chamberland };
6972f9f102SEric Chamberland
7072f9f102SEric Chamberland /* Partitions for the rectangular mesh of quads and triangles: */
7172f9f102SEric Chamberland const PetscInt sInitialPartitionMixedTQMesh[2][7] = {
7272f9f102SEric Chamberland {0, 1, 4, 5, 8, 10, 12},
7372f9f102SEric Chamberland {2, 3, 6, 7, 9, 11, 13}
7472f9f102SEric Chamberland };
7572f9f102SEric Chamberland
7672f9f102SEric Chamberland const PetscInt sNLoclCellsMixedTQMesh = 7;
7772f9f102SEric Chamberland const PetscInt sNGlobVertsMixedTQMesh = 18;
7872f9f102SEric Chamberland
799f046c2dSEric Chamberland /* Prisms mesh */
809f046c2dSEric Chamberland PetscReal sCoordsPrismsMesh[125][3] = {
819f046c2dSEric Chamberland {2.24250931694056355e-01, 0.00000000000000000e+00, 0.00000000000000000e+00},
829f046c2dSEric Chamberland {2.20660660151932697e-01, 2.87419338850266937e-01, 0.00000000000000000e+00},
839f046c2dSEric Chamberland {0.00000000000000000e+00, 0.00000000000000000e+00, 2.70243537720639027e-01},
849f046c2dSEric Chamberland {2.32445727460992402e-01, 0.00000000000000000e+00, 2.60591845015572310e-01},
859f046c2dSEric Chamberland {2.41619971105419079e-01, 2.69894910706158231e-01, 2.42844781736072490e-01},
869f046c2dSEric Chamberland {0.00000000000000000e+00, 2.46523339883120779e-01, 2.69072907562752262e-01},
879f046c2dSEric Chamberland {0.00000000000000000e+00, 0.00000000000000000e+00, 0.00000000000000000e+00},
889f046c2dSEric Chamberland {1.00000000000000000e+00, 2.75433417601945563e-01, 0.00000000000000000e+00},
899f046c2dSEric Chamberland {1.00000000000000000e+00, 0.00000000000000000e+00, 2.33748605950385602e-01},
909f046c2dSEric Chamberland {7.32445727460992457e-01, 0.00000000000000000e+00, 2.42344379130445597e-01},
919f046c2dSEric Chamberland {1.00000000000000000e+00, 2.78258478013028610e-01, 2.57379172987105553e-01},
929f046c2dSEric Chamberland {1.00000000000000000e+00, 0.00000000000000000e+00, 0.00000000000000000e+00},
939f046c2dSEric Chamberland {7.49586880891153995e-01, 1.00000000000000000e+00, 0.00000000000000000e+00},
949f046c2dSEric Chamberland {1.00000000000000000e+00, 1.00000000000000000e+00, 2.51949651266657582e-01},
959f046c2dSEric Chamberland {7.41619971105419107e-01, 7.69894910706158120e-01, 2.33697838509081768e-01},
969f046c2dSEric Chamberland {1.00000000000000000e+00, 7.78258478013028610e-01, 2.66479695645241543e-01},
979f046c2dSEric Chamberland {7.55042653233710115e-01, 1.00000000000000000e+00, 2.58019637386860512e-01},
989f046c2dSEric Chamberland {1.00000000000000000e+00, 1.00000000000000000e+00, 0.00000000000000000e+00},
999f046c2dSEric Chamberland {0.00000000000000000e+00, 7.59235710423095789e-01, 0.00000000000000000e+00},
1009f046c2dSEric Chamberland {0.00000000000000000e+00, 1.00000000000000000e+00, 2.17232187874490473e-01},
1019f046c2dSEric Chamberland {0.00000000000000000e+00, 7.46523339883120807e-01, 2.42567232639677999e-01},
1029f046c2dSEric Chamberland {2.55042653233710115e-01, 1.00000000000000000e+00, 2.40660905690776916e-01},
1039f046c2dSEric Chamberland {0.00000000000000000e+00, 1.00000000000000000e+00, 0.00000000000000000e+00},
1049f046c2dSEric Chamberland {2.38934376044866809e-01, 0.00000000000000000e+00, 1.00000000000000000e+00},
1059f046c2dSEric Chamberland {2.18954188589218168e-01, 2.26916038449581692e-01, 1.00000000000000000e+00},
1069f046c2dSEric Chamberland {2.39787449636397643e-01, 0.00000000000000000e+00, 7.60591845015572310e-01},
1079f046c2dSEric Chamberland {2.40766735324061815e-01, 2.39643260505815608e-01, 7.42844781736072490e-01},
1089f046c2dSEric Chamberland {0.00000000000000000e+00, 2.57448248192627016e-01, 7.69072907562752262e-01},
1099f046c2dSEric Chamberland {0.00000000000000000e+00, 0.00000000000000000e+00, 1.00000000000000000e+00},
1109f046c2dSEric Chamberland {1.00000000000000000e+00, 2.38666970143638080e-01, 1.00000000000000000e+00},
1119f046c2dSEric Chamberland {7.39787449636397643e-01, 0.00000000000000000e+00, 7.42344379130445597e-01},
1129f046c2dSEric Chamberland {1.00000000000000000e+00, 2.59875254283874868e-01, 7.57379172987105553e-01},
1139f046c2dSEric Chamberland {1.00000000000000000e+00, 0.00000000000000000e+00, 1.00000000000000000e+00},
1149f046c2dSEric Chamberland {7.76318984007844159e-01, 1.00000000000000000e+00, 1.00000000000000000e+00},
1159f046c2dSEric Chamberland {7.40766735324061787e-01, 7.39643260505815636e-01, 7.33697838509081768e-01},
1169f046c2dSEric Chamberland {1.00000000000000000e+00, 7.59875254283874924e-01, 7.66479695645241543e-01},
1179f046c2dSEric Chamberland {7.68408704792055142e-01, 1.00000000000000000e+00, 7.58019637386860512e-01},
1189f046c2dSEric Chamberland {1.00000000000000000e+00, 1.00000000000000000e+00, 1.00000000000000000e+00},
1199f046c2dSEric Chamberland {0.00000000000000000e+00, 7.81085527042108207e-01, 1.00000000000000000e+00},
1209f046c2dSEric Chamberland {0.00000000000000000e+00, 7.57448248192627016e-01, 7.42567232639678054e-01},
1219f046c2dSEric Chamberland {2.68408704792055197e-01, 1.00000000000000000e+00, 7.40660905690776916e-01},
1229f046c2dSEric Chamberland {0.00000000000000000e+00, 1.00000000000000000e+00, 1.00000000000000000e+00},
1239f046c2dSEric Chamberland {7.24250931694056410e-01, 0.00000000000000000e+00, 0.00000000000000000e+00},
1249f046c2dSEric Chamberland {7.24250931694056410e-01, 2.75433417601945563e-01, 0.00000000000000000e+00},
1259f046c2dSEric Chamberland {4.44911591845989052e-01, 2.87419338850266937e-01, 0.00000000000000000e+00},
1269f046c2dSEric Chamberland {4.64891454921984804e-01, 0.00000000000000000e+00, 2.50940152310505593e-01},
1279f046c2dSEric Chamberland {4.74065698566411453e-01, 2.69894910706158231e-01, 2.33193089031005774e-01},
1289f046c2dSEric Chamberland {4.48501863388112709e-01, 0.00000000000000000e+00, 0.00000000000000000e+00},
1299f046c2dSEric Chamberland {7.20660660151932753e-01, 7.87419338850266937e-01, 0.00000000000000000e+00},
1309f046c2dSEric Chamberland {7.20660660151932753e-01, 5.62852756452212555e-01, 0.00000000000000000e+00},
1319f046c2dSEric Chamberland {2.20660660151932697e-01, 5.46655049273362614e-01, 0.00000000000000000e+00},
1329f046c2dSEric Chamberland {4.83239942210838158e-01, 5.39789821412316462e-01, 2.15446025751505982e-01},
1339f046c2dSEric Chamberland {7.41619971105419107e-01, 5.48153388719186951e-01, 2.48227882887665785e-01},
1349f046c2dSEric Chamberland {2.41619971105419079e-01, 5.16418250589278927e-01, 2.41674151578185781e-01},
1359f046c2dSEric Chamberland {4.41321320303865394e-01, 5.74838677700533873e-01, 0.00000000000000000e+00},
1369f046c2dSEric Chamberland {1.00000000000000000e+00, 7.75433417601945507e-01, 0.00000000000000000e+00},
1379f046c2dSEric Chamberland {1.00000000000000000e+00, 5.56516956026057219e-01, 2.81009740023825560e-01},
1389f046c2dSEric Chamberland {7.32445727460992457e-01, 2.78258478013028610e-01, 2.65974946167165549e-01},
1399f046c2dSEric Chamberland {1.00000000000000000e+00, 5.50866835203891125e-01, 0.00000000000000000e+00},
1409f046c2dSEric Chamberland {0.00000000000000000e+00, 2.59235710423095733e-01, 0.00000000000000000e+00},
1419f046c2dSEric Chamberland {0.00000000000000000e+00, 4.93046679766241558e-01, 2.67902277404865552e-01},
1429f046c2dSEric Chamberland {2.55042653233710115e-01, 7.46523339883120807e-01, 2.65995950455964469e-01},
1439f046c2dSEric Chamberland {0.00000000000000000e+00, 5.18471420846191466e-01, 0.00000000000000000e+00},
1449f046c2dSEric Chamberland {2.49586880891154023e-01, 1.00000000000000000e+00, 0.00000000000000000e+00},
1459f046c2dSEric Chamberland {2.49586880891154023e-01, 7.59235710423095789e-01, 0.00000000000000000e+00},
1469f046c2dSEric Chamberland {4.70247541043086748e-01, 7.87419338850266937e-01, 0.00000000000000000e+00},
1479f046c2dSEric Chamberland {5.10085306467420230e-01, 1.00000000000000000e+00, 2.64089623507063387e-01},
1489f046c2dSEric Chamberland {4.96662624339129222e-01, 7.69894910706158231e-01, 2.39767824629284698e-01},
1499f046c2dSEric Chamberland {4.99173761782308045e-01, 1.00000000000000000e+00, 0.00000000000000000e+00},
1509f046c2dSEric Chamberland {0.00000000000000000e+00, 0.00000000000000000e+00, 7.70243537720639027e-01},
1519f046c2dSEric Chamberland {2.40640523227928449e-01, 0.00000000000000000e+00, 5.21183690031144620e-01},
1529f046c2dSEric Chamberland {2.62579282058905461e-01, 2.52370482562049525e-01, 4.85689563472144981e-01},
1539f046c2dSEric Chamberland {0.00000000000000000e+00, 2.33810969343145825e-01, 5.38145815125504523e-01},
1549f046c2dSEric Chamberland {0.00000000000000000e+00, 0.00000000000000000e+00, 5.40487075441278053e-01},
1559f046c2dSEric Chamberland {1.00000000000000000e+00, 0.00000000000000000e+00, 7.33748605950385602e-01},
1569f046c2dSEric Chamberland {7.40640523227928504e-01, 0.00000000000000000e+00, 4.84688758260891195e-01},
1579f046c2dSEric Chamberland {1.00000000000000000e+00, 2.81083538424111656e-01, 5.14758345974211107e-01},
1589f046c2dSEric Chamberland {1.00000000000000000e+00, 0.00000000000000000e+00, 4.67497211900771203e-01},
1599f046c2dSEric Chamberland {7.38934376044866781e-01, 0.00000000000000000e+00, 1.00000000000000000e+00},
1609f046c2dSEric Chamberland {4.79574899272795285e-01, 0.00000000000000000e+00, 7.50940152310505593e-01},
1619f046c2dSEric Chamberland {4.77868752089733617e-01, 0.00000000000000000e+00, 1.00000000000000000e+00},
1629f046c2dSEric Chamberland {1.00000000000000000e+00, 1.00000000000000000e+00, 7.51949651266657582e-01},
1639f046c2dSEric Chamberland {7.62579282058905461e-01, 7.52370482562049525e-01, 4.67395677018163536e-01},
1649f046c2dSEric Chamberland {1.00000000000000000e+00, 7.81083538424111712e-01, 5.32959391290483087e-01},
1659f046c2dSEric Chamberland {7.60498425576266124e-01, 1.00000000000000000e+00, 5.16039274773721024e-01},
1669f046c2dSEric Chamberland {1.00000000000000000e+00, 1.00000000000000000e+00, 5.03899302533315163e-01},
1679f046c2dSEric Chamberland {7.18954188589218113e-01, 7.26916038449581636e-01, 1.00000000000000000e+00},
1689f046c2dSEric Chamberland {4.81533470648123629e-01, 4.79286521011631217e-01, 7.15446025751505954e-01},
1699f046c2dSEric Chamberland {4.57888564634085005e-01, 2.26916038449581692e-01, 1.00000000000000000e+00},
1709f046c2dSEric Chamberland {4.95273172597062383e-01, 7.26916038449581636e-01, 1.00000000000000000e+00},
1719f046c2dSEric Chamberland {4.37908377178436337e-01, 4.53832076899163384e-01, 1.00000000000000000e+00},
1729f046c2dSEric Chamberland {1.00000000000000000e+00, 7.38666970143638135e-01, 1.00000000000000000e+00},
1739f046c2dSEric Chamberland {1.00000000000000000e+00, 5.19750508567749736e-01, 7.81009740023825616e-01},
1749f046c2dSEric Chamberland {7.38934376044866781e-01, 2.38666970143638080e-01, 1.00000000000000000e+00},
1759f046c2dSEric Chamberland {7.18954188589218113e-01, 4.65583008593219771e-01, 1.00000000000000000e+00},
1769f046c2dSEric Chamberland {1.00000000000000000e+00, 4.77333940287276159e-01, 1.00000000000000000e+00},
1779f046c2dSEric Chamberland {0.00000000000000000e+00, 1.00000000000000000e+00, 7.17232187874490501e-01},
1789f046c2dSEric Chamberland {0.00000000000000000e+00, 7.33810969343145825e-01, 4.85134465279355998e-01},
1799f046c2dSEric Chamberland {2.60498425576266179e-01, 1.00000000000000000e+00, 4.81321811381553832e-01},
1809f046c2dSEric Chamberland {0.00000000000000000e+00, 1.00000000000000000e+00, 4.34464375748980947e-01},
1819f046c2dSEric Chamberland {0.00000000000000000e+00, 2.81085527042108152e-01, 1.00000000000000000e+00},
1829f046c2dSEric Chamberland {0.00000000000000000e+00, 5.14896496385254032e-01, 7.67902277404865607e-01},
1839f046c2dSEric Chamberland {2.76318984007844215e-01, 7.81085527042108207e-01, 1.00000000000000000e+00},
1849f046c2dSEric Chamberland {2.18954188589218168e-01, 5.08001565491689844e-01, 1.00000000000000000e+00},
1859f046c2dSEric Chamberland {0.00000000000000000e+00, 5.62171054084216304e-01, 1.00000000000000000e+00},
1869f046c2dSEric Chamberland {2.76318984007844215e-01, 1.00000000000000000e+00, 1.00000000000000000e+00},
1879f046c2dSEric Chamberland {5.36817409584110394e-01, 1.00000000000000000e+00, 7.64089623507063331e-01},
1889f046c2dSEric Chamberland {5.52637968015688430e-01, 1.00000000000000000e+00, 1.00000000000000000e+00},
1899f046c2dSEric Chamberland {5.03219805286833965e-01, 2.52370482562049525e-01, 4.66386178062011547e-01},
1909f046c2dSEric Chamberland {4.80554184960459430e-01, 2.39643260505815608e-01, 7.33193089031005774e-01},
1919f046c2dSEric Chamberland {4.81281046455856898e-01, 0.00000000000000000e+00, 5.01880304621011186e-01},
1929f046c2dSEric Chamberland {7.62579282058905461e-01, 5.33454020986161126e-01, 4.96455765775331570e-01},
1939f046c2dSEric Chamberland {2.62579282058905461e-01, 4.86181451905195350e-01, 4.83348303156371562e-01},
1949f046c2dSEric Chamberland {7.40766735324061787e-01, 4.99518514789690449e-01, 7.48227882887665841e-01},
1959f046c2dSEric Chamberland {2.40766735324061815e-01, 4.97091508698442541e-01, 7.41674151578185725e-01},
1969f046c2dSEric Chamberland {5.25158564117810922e-01, 5.04740965124099050e-01, 4.30892051503011964e-01},
1979f046c2dSEric Chamberland {7.40640523227928504e-01, 2.81083538424111656e-01, 5.31949892334331098e-01},
1989f046c2dSEric Chamberland {7.39787449636397643e-01, 2.59875254283874868e-01, 7.65974946167165549e-01},
1999f046c2dSEric Chamberland {1.00000000000000000e+00, 5.62167076848223313e-01, 5.62019480047651121e-01},
2009f046c2dSEric Chamberland {2.60498425576266179e-01, 7.33810969343145825e-01, 5.31991900911928939e-01},
2019f046c2dSEric Chamberland {2.68408704792055197e-01, 7.57448248192627016e-01, 7.65995950455964469e-01},
2029f046c2dSEric Chamberland {0.00000000000000000e+00, 4.67621938686291649e-01, 5.35804554809731104e-01},
2039f046c2dSEric Chamberland {5.23077707635171585e-01, 7.52370482562049525e-01, 4.79535649258569396e-01},
2049f046c2dSEric Chamberland {5.09175440116116929e-01, 7.39643260505815636e-01, 7.39767824629284698e-01},
2059f046c2dSEric Chamberland {5.20996851152532359e-01, 1.00000000000000000e+00, 5.28179247014126774e-01}
2069f046c2dSEric Chamberland };
2079f046c2dSEric Chamberland
2089f046c2dSEric Chamberland const PetscInt sConnectivityPrismsMesh[128][6] = {
2099f046c2dSEric Chamberland /* rank 0 */
2109f046c2dSEric Chamberland {11, 7, 42, 8, 10, 9 },
2119f046c2dSEric Chamberland {47, 42, 43, 45, 9, 57 },
2129f046c2dSEric Chamberland {8, 10, 9, 77, 76, 75 },
2139f046c2dSEric Chamberland {45, 9, 57, 110, 75, 116},
2149f046c2dSEric Chamberland {17, 48, 55, 13, 14, 15 },
2159f046c2dSEric Chamberland {58, 55, 49, 56, 15, 52 },
2169f046c2dSEric Chamberland {13, 14, 15, 85, 82, 83 },
2179f046c2dSEric Chamberland {56, 15, 52, 118, 83, 111},
2189f046c2dSEric Chamberland {6, 0, 1, 2, 3, 4 },
2199f046c2dSEric Chamberland {54, 1, 44, 51, 4, 46 },
2209f046c2dSEric Chamberland {2, 3, 4, 73, 70, 71 },
2219f046c2dSEric Chamberland {51, 4, 46, 115, 71, 108},
2229f046c2dSEric Chamberland {58, 49, 43, 56, 52, 57 },
2239f046c2dSEric Chamberland {47, 43, 44, 45, 57, 46 },
2249f046c2dSEric Chamberland {56, 52, 57, 118, 111, 116},
2259f046c2dSEric Chamberland {45, 57, 46, 110, 116, 108},
2269f046c2dSEric Chamberland {77, 76, 75, 74, 31, 30 },
2279f046c2dSEric Chamberland {110, 75, 116, 79, 30, 117},
2289f046c2dSEric Chamberland {74, 31, 30, 32, 29, 78 },
2299f046c2dSEric Chamberland {79, 30, 117, 80, 78, 93 },
2309f046c2dSEric Chamberland {85, 82, 83, 81, 34, 35 },
2319f046c2dSEric Chamberland {118, 83, 111, 92, 35, 113},
2329f046c2dSEric Chamberland {81, 34, 35, 37, 86, 91 },
2339f046c2dSEric Chamberland {92, 35, 113, 95, 91, 94 },
2349f046c2dSEric Chamberland {73, 70, 71, 69, 25, 26 },
2359f046c2dSEric Chamberland {115, 71, 108, 87, 26, 109},
2369f046c2dSEric Chamberland {69, 25, 26, 28, 23, 24 },
2379f046c2dSEric Chamberland {87, 26, 109, 90, 24, 88 },
2389f046c2dSEric Chamberland {118, 111, 116, 92, 113, 117},
2399f046c2dSEric Chamberland {110, 116, 108, 79, 117, 109},
2409f046c2dSEric Chamberland {92, 113, 117, 95, 94, 93 },
2419f046c2dSEric Chamberland {79, 117, 109, 80, 93, 88 },
2429f046c2dSEric Chamberland {22, 18, 63, 19, 20, 21 },
2439f046c2dSEric Chamberland {68, 63, 64, 66, 21, 61 },
2449f046c2dSEric Chamberland {19, 20, 21, 99, 97, 98 },
2459f046c2dSEric Chamberland {66, 21, 61, 124, 98, 119},
2469f046c2dSEric Chamberland {6, 1, 59, 2, 4, 5 },
2479f046c2dSEric Chamberland {62, 59, 50, 60, 5, 53 },
2489f046c2dSEric Chamberland {2, 4, 5, 73, 71, 72 },
2499f046c2dSEric Chamberland {60, 5, 53, 121, 72, 112},
2509f046c2dSEric Chamberland {17, 12, 48, 13, 16, 14 },
2519f046c2dSEric Chamberland {54, 48, 65, 51, 14, 67 },
2529f046c2dSEric Chamberland {13, 16, 14, 85, 84, 82 },
2539f046c2dSEric Chamberland {51, 14, 67, 115, 82, 122},
2549f046c2dSEric Chamberland {62, 50, 64, 60, 53, 61 },
2559f046c2dSEric Chamberland {68, 64, 65, 66, 61, 67 },
2569f046c2dSEric Chamberland {60, 53, 61, 121, 112, 119},
2579f046c2dSEric Chamberland {66, 61, 67, 124, 119, 122},
2589f046c2dSEric Chamberland {99, 97, 98, 96, 39, 40 },
2599f046c2dSEric Chamberland {124, 98, 119, 106, 40, 120},
2609f046c2dSEric Chamberland {96, 39, 40, 41, 38, 105},
2619f046c2dSEric Chamberland {106, 40, 120, 107, 105, 102},
2629f046c2dSEric Chamberland {73, 71, 72, 69, 26, 27 },
2639f046c2dSEric Chamberland {121, 72, 112, 101, 27, 114},
2649f046c2dSEric Chamberland {69, 26, 27, 28, 24, 100},
2659f046c2dSEric Chamberland {101, 27, 114, 104, 100, 103},
2669f046c2dSEric Chamberland {85, 84, 82, 81, 36, 34 },
2679f046c2dSEric Chamberland {115, 82, 122, 87, 34, 123},
2689f046c2dSEric Chamberland {81, 36, 34, 37, 33, 86 },
2699f046c2dSEric Chamberland {87, 34, 123, 90, 86, 89 },
2709f046c2dSEric Chamberland {121, 112, 119, 101, 114, 120},
2719f046c2dSEric Chamberland {124, 119, 122, 106, 120, 123},
2729f046c2dSEric Chamberland {101, 114, 120, 104, 103, 102},
2739f046c2dSEric Chamberland {106, 120, 123, 107, 102, 89 },
2749f046c2dSEric Chamberland /* rank 1 */
2759f046c2dSEric Chamberland {58, 43, 7, 56, 57, 10 },
2769f046c2dSEric Chamberland {7, 43, 42, 10, 57, 9 },
2779f046c2dSEric Chamberland {56, 57, 10, 118, 116, 76 },
2789f046c2dSEric Chamberland {10, 57, 9, 76, 116, 75 },
2799f046c2dSEric Chamberland {54, 49, 48, 51, 52, 14 },
2809f046c2dSEric Chamberland {48, 49, 55, 14, 52, 15 },
2819f046c2dSEric Chamberland {51, 52, 14, 115, 111, 82 },
2829f046c2dSEric Chamberland {14, 52, 15, 82, 111, 83 },
2839f046c2dSEric Chamberland {47, 44, 0, 45, 46, 3 },
2849f046c2dSEric Chamberland {0, 44, 1, 3, 46, 4 },
2859f046c2dSEric Chamberland {45, 46, 3, 110, 108, 70 },
2869f046c2dSEric Chamberland {3, 46, 4, 70, 108, 71 },
2879f046c2dSEric Chamberland {54, 44, 49, 51, 46, 52 },
2889f046c2dSEric Chamberland {49, 44, 43, 52, 46, 57 },
2899f046c2dSEric Chamberland {51, 46, 52, 115, 108, 111},
2909f046c2dSEric Chamberland {52, 46, 57, 111, 108, 116},
2919f046c2dSEric Chamberland {118, 116, 76, 92, 117, 31 },
2929f046c2dSEric Chamberland {76, 116, 75, 31, 117, 30 },
2939f046c2dSEric Chamberland {92, 117, 31, 95, 93, 29 },
2949f046c2dSEric Chamberland {31, 117, 30, 29, 93, 78 },
2959f046c2dSEric Chamberland {115, 111, 82, 87, 113, 34 },
2969f046c2dSEric Chamberland {82, 111, 83, 34, 113, 35 },
2979f046c2dSEric Chamberland {87, 113, 34, 90, 94, 86 },
2989f046c2dSEric Chamberland {34, 113, 35, 86, 94, 91 },
2999f046c2dSEric Chamberland {110, 108, 70, 79, 109, 25 },
3009f046c2dSEric Chamberland {70, 108, 71, 25, 109, 26 },
3019f046c2dSEric Chamberland {79, 109, 25, 80, 88, 23 },
3029f046c2dSEric Chamberland {25, 109, 26, 23, 88, 24 },
3039f046c2dSEric Chamberland {115, 108, 111, 87, 109, 113},
3049f046c2dSEric Chamberland {111, 108, 116, 113, 109, 117},
3059f046c2dSEric Chamberland {87, 109, 113, 90, 88, 94 },
3069f046c2dSEric Chamberland {113, 109, 117, 94, 88, 93 },
3079f046c2dSEric Chamberland {62, 64, 18, 60, 61, 20 },
3089f046c2dSEric Chamberland {18, 64, 63, 20, 61, 21 },
3099f046c2dSEric Chamberland {60, 61, 20, 121, 119, 97 },
3109f046c2dSEric Chamberland {20, 61, 21, 97, 119, 98 },
3119f046c2dSEric Chamberland {54, 50, 1, 51, 53, 4 },
3129f046c2dSEric Chamberland {1, 50, 59, 4, 53, 5 },
3139f046c2dSEric Chamberland {51, 53, 4, 115, 112, 71 },
3149f046c2dSEric Chamberland {4, 53, 5, 71, 112, 72 },
3159f046c2dSEric Chamberland {68, 65, 12, 66, 67, 16 },
3169f046c2dSEric Chamberland {12, 65, 48, 16, 67, 14 },
3179f046c2dSEric Chamberland {66, 67, 16, 124, 122, 84 },
3189f046c2dSEric Chamberland {16, 67, 14, 84, 122, 82 },
3199f046c2dSEric Chamberland {54, 65, 50, 51, 67, 53 },
3209f046c2dSEric Chamberland {50, 65, 64, 53, 67, 61 },
3219f046c2dSEric Chamberland {51, 67, 53, 115, 122, 112},
3229f046c2dSEric Chamberland {53, 67, 61, 112, 122, 119},
3239f046c2dSEric Chamberland {121, 119, 97, 101, 120, 39 },
3249f046c2dSEric Chamberland {97, 119, 98, 39, 120, 40 },
3259f046c2dSEric Chamberland {101, 120, 39, 104, 102, 38 },
3269f046c2dSEric Chamberland {39, 120, 40, 38, 102, 105},
3279f046c2dSEric Chamberland {115, 112, 71, 87, 114, 26 },
3289f046c2dSEric Chamberland {71, 112, 72, 26, 114, 27 },
3299f046c2dSEric Chamberland {87, 114, 26, 90, 103, 24 },
3309f046c2dSEric Chamberland {26, 114, 27, 24, 103, 100},
3319f046c2dSEric Chamberland {124, 122, 84, 106, 123, 36 },
3329f046c2dSEric Chamberland {84, 122, 82, 36, 123, 34 },
3339f046c2dSEric Chamberland {106, 123, 36, 107, 89, 33 },
3349f046c2dSEric Chamberland {36, 123, 34, 33, 89, 86 },
3359f046c2dSEric Chamberland {115, 122, 112, 87, 123, 114},
3369f046c2dSEric Chamberland {112, 122, 119, 114, 123, 120},
3379f046c2dSEric Chamberland {87, 123, 114, 90, 89, 103},
3389f046c2dSEric Chamberland {114, 123, 120, 103, 89, 102}
3399f046c2dSEric Chamberland };
3409f046c2dSEric Chamberland
3419f046c2dSEric Chamberland /* Partitions of prisms mesh : */
3429f046c2dSEric Chamberland const PetscInt sInitialPartitionPrismsMesh[2][64] = {
3439f046c2dSEric 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 },
3449f046c2dSEric 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,
3459f046c2dSEric 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}
3469f046c2dSEric Chamberland };
3479f046c2dSEric Chamberland
3489f046c2dSEric Chamberland const PetscInt sNLoclCellsPrismsMesh = 64;
3499f046c2dSEric Chamberland const PetscInt sNGlobVertsPrismsMesh = 125;
3509f046c2dSEric Chamberland
3513f52fa01SEric Chamberland /* Coordinates for hexa+prism mesh */
3523f52fa01SEric Chamberland PetscReal sCoordsHexPrismMesh[10][3] = {
3533f52fa01SEric Chamberland {2.00000000000000000e+00, 2.00000000000000000e+00, 0.00000000000000000e+00},
3543f52fa01SEric Chamberland {2.00000000000000000e+00, 0.00000000000000000e+00, 2.00000000000000000e+00},
3553f52fa01SEric Chamberland {2.00000000000000000e+00, 2.00000000000000000e+00, 2.00000000000000000e+00},
3563f52fa01SEric Chamberland {4.00000000000000000e+00, 2.00000000000000000e+00, 0.00000000000000000e+00},
3573f52fa01SEric Chamberland {4.00000000000000000e+00, 2.00000000000000000e+00, 2.00000000000000000e+00},
3583f52fa01SEric Chamberland {4.00000000000000000e+00, 0.00000000000000000e+00, 2.00000000000000000e+00},
3593f52fa01SEric Chamberland {4.00000000000000000e+00, 0.00000000000000000e+00, 4.00000000000000000e+00},
3603f52fa01SEric Chamberland {4.00000000000000000e+00, 2.00000000000000000e+00, 4.00000000000000000e+00},
3613f52fa01SEric Chamberland {2.00000000000000000e+00, 2.00000000000000000e+00, 4.00000000000000000e+00},
3623f52fa01SEric Chamberland {2.00000000000000000e+00, 0.00000000000000000e+00, 4.00000000000000000e+00}
3633f52fa01SEric Chamberland };
3643f52fa01SEric Chamberland
3653f52fa01SEric Chamberland const PetscInt sConnectivityHexPrismMesh[2][8] = {
3663f52fa01SEric Chamberland {1, 2, 8, 9, 5, 4, 7, 6 },
3673f52fa01SEric Chamberland {0, 2, 1, 3, 4, 5, -1, -1}
3683f52fa01SEric Chamberland };
3693f52fa01SEric Chamberland /* Partitions of prisms mesh : */
3703f52fa01SEric Chamberland const PetscInt sInitialPartitionHexPrismMesh[2][2] = {
3713f52fa01SEric Chamberland {-1, -1},
3723f52fa01SEric Chamberland {0, 1 }
3733f52fa01SEric Chamberland };
3743f52fa01SEric Chamberland
3753f52fa01SEric Chamberland const PetscInt sNLoclCellsHexPrismMesh[2] = {0, 2};
3763f52fa01SEric Chamberland const PetscInt sNGlobVertsHexPrismMesh = 10;
3773f52fa01SEric Chamberland
main(int argc,char ** argv)378d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
379d71ae5a4SJacob Faibussowitsch {
3809f046c2dSEric Chamberland PetscInt Nc = 0;
3819f046c2dSEric Chamberland const PetscInt *InitPartForRank[2];
382231de6a2SMatthew G. Knepley DM dm, idm, ddm;
383231de6a2SMatthew G. Knepley PetscSF sfVert, sfMig, sfPart;
384231de6a2SMatthew G. Knepley PetscPartitioner part;
385231de6a2SMatthew G. Knepley PetscSection s;
386231de6a2SMatthew G. Knepley PetscInt *cells, c;
387231de6a2SMatthew G. Knepley PetscMPIInt size, rank;
3883f52fa01SEric Chamberland PetscBool box = PETSC_FALSE, field = PETSC_FALSE, quadsmesh = PETSC_FALSE, trisquadsmesh = PETSC_FALSE, prismsmesh = PETSC_FALSE, hexprismmesh = PETSC_FALSE;
389231de6a2SMatthew G. Knepley
390327415f7SBarry Smith PetscFunctionBeginUser;
391231de6a2SMatthew G. Knepley PetscCall(PetscInitialize(&argc, &argv, NULL, help));
392231de6a2SMatthew G. Knepley PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
393231de6a2SMatthew G. Knepley PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
394231de6a2SMatthew G. Knepley PetscCheck(size == 2, PETSC_COMM_WORLD, PETSC_ERR_SUP, "This is a 2 processors example only");
395231de6a2SMatthew G. Knepley PetscCall(PetscOptionsGetBool(NULL, NULL, "-field", &field, NULL));
3969f046c2dSEric Chamberland PetscCall(PetscOptionsGetBool(NULL, NULL, "-box", &box, NULL));
3979f046c2dSEric Chamberland PetscCall(PetscOptionsGetBool(NULL, NULL, "-quadsmesh", &quadsmesh, NULL));
39872f9f102SEric Chamberland PetscCall(PetscOptionsGetBool(NULL, NULL, "-trisquadsmesh", &trisquadsmesh, NULL));
3999f046c2dSEric Chamberland PetscCall(PetscOptionsGetBool(NULL, NULL, "-prismsmesh", &prismsmesh, NULL));
4003f52fa01SEric Chamberland PetscCall(PetscOptionsGetBool(NULL, NULL, "-hexprismmesh", &hexprismmesh, NULL));
4013f52fa01SEric Chamberland PetscCheck(1 == (box ? 1 : 0) + (quadsmesh ? 1 : 0) + (trisquadsmesh ? 1 : 0) + (prismsmesh ? 1 : 0) + (hexprismmesh ? 1 : 0), PETSC_COMM_WORLD, PETSC_ERR_SUP, "Specify one and only one of -box, -quadsmesh or -prismsmesh");
402231de6a2SMatthew G. Knepley
403231de6a2SMatthew G. Knepley PetscCall(DMPlexCreate(PETSC_COMM_WORLD, &dm));
404231de6a2SMatthew G. Knepley if (box) {
405231de6a2SMatthew G. Knepley PetscCall(DMSetType(dm, DMPLEX));
406231de6a2SMatthew G. Knepley PetscCall(DMSetFromOptions(dm));
407231de6a2SMatthew G. Knepley } else {
4089f046c2dSEric Chamberland if (quadsmesh) {
4099f046c2dSEric Chamberland Nc = sNLoclCells2x5Mesh; //Same on each rank for this example...
4109f046c2dSEric Chamberland PetscInt Nv = sNGlobVerts2x5Mesh;
4119f046c2dSEric Chamberland InitPartForRank[0] = &sInitialPartition2x5Mesh[0][0];
4129f046c2dSEric Chamberland InitPartForRank[1] = &sInitialPartition2x5Mesh[1][0];
4139f046c2dSEric Chamberland const PetscInt (*Conn)[4] = sConnectivity2x5Mesh;
4149f046c2dSEric Chamberland
4159f046c2dSEric Chamberland const PetscInt Ncor = 4;
4169f046c2dSEric Chamberland const PetscInt dim = 2;
4179f046c2dSEric Chamberland
418231de6a2SMatthew G. Knepley PetscCall(PetscMalloc1(Nc * Ncor, &cells));
419231de6a2SMatthew G. Knepley for (c = 0; c < Nc; ++c) {
420231de6a2SMatthew G. Knepley PetscInt cell = (InitPartForRank[rank])[c], cor;
421231de6a2SMatthew G. Knepley
422ad540459SPierre Jolivet for (cor = 0; cor < Ncor; ++cor) cells[c * Ncor + cor] = Conn[cell][cor];
423231de6a2SMatthew G. Knepley }
424231de6a2SMatthew G. Knepley PetscCall(DMSetDimension(dm, dim));
425231de6a2SMatthew G. Knepley PetscCall(DMPlexBuildFromCellListParallel(dm, Nc, PETSC_DECIDE, Nv, Ncor, cells, &sfVert, NULL));
42672f9f102SEric Chamberland } else if (trisquadsmesh) {
42772f9f102SEric Chamberland Nc = sNLoclCellsMixedTQMesh; //Same on each rank for this example...
42872f9f102SEric Chamberland PetscInt Nv = sNGlobVertsMixedTQMesh;
42972f9f102SEric Chamberland InitPartForRank[0] = &sInitialPartitionMixedTQMesh[0][0];
43072f9f102SEric Chamberland InitPartForRank[1] = &sInitialPartitionMixedTQMesh[1][0];
43172f9f102SEric Chamberland const PetscInt (*Conn)[4] = sConnectivityMixedTQMesh;
43272f9f102SEric Chamberland
43372f9f102SEric Chamberland const PetscInt NcorMax = 4;
43472f9f102SEric Chamberland const PetscInt dim = 2;
43572f9f102SEric Chamberland
436d7c1f440SPierre Jolivet /* Create a PetscSection and taking care to exclude nodes with "-1" into element connectivity: */
43772f9f102SEric Chamberland PetscSection s;
43872f9f102SEric Chamberland PetscInt vStart = 0, vEnd = Nc;
43972f9f102SEric Chamberland PetscCall(PetscSectionCreate(PETSC_COMM_WORLD, &s));
44072f9f102SEric Chamberland PetscCall(PetscSectionSetNumFields(s, 1));
44172f9f102SEric Chamberland PetscCall(PetscSectionSetFieldComponents(s, 0, 1));
44272f9f102SEric Chamberland PetscCall(PetscSectionSetChart(s, vStart, vEnd));
44372f9f102SEric Chamberland
44472f9f102SEric Chamberland PetscCall(PetscMalloc1(Nc * NcorMax, &cells));
44572f9f102SEric Chamberland PetscInt count = 0;
44672f9f102SEric Chamberland for (c = 0; c < Nc; ++c) {
44772f9f102SEric Chamberland PetscInt cell = (InitPartForRank[rank])[c], cor;
44872f9f102SEric Chamberland PetscInt nbElemVertex = ((-1 == Conn[cell][NcorMax - 1]) ? 3 : 4);
44972f9f102SEric Chamberland for (cor = 0; cor < nbElemVertex; ++cor) {
45072f9f102SEric Chamberland cells[count] = Conn[cell][cor];
45172f9f102SEric Chamberland ++count;
45272f9f102SEric Chamberland }
45372f9f102SEric Chamberland PetscCall(PetscSectionSetDof(s, c, nbElemVertex));
45472f9f102SEric Chamberland PetscCall(PetscSectionSetFieldDof(s, c, 0, nbElemVertex));
45572f9f102SEric Chamberland }
45672f9f102SEric Chamberland PetscCall(PetscSectionSetUp(s));
45772f9f102SEric Chamberland PetscCall(DMSetDimension(dm, dim));
4583f52fa01SEric Chamberland PetscCall(PetscSectionView(s, PETSC_VIEWER_STDOUT_WORLD));
45972f9f102SEric Chamberland PetscCall(DMPlexBuildFromCellSectionParallel(dm, Nc, PETSC_DECIDE, Nv, s, cells, &sfVert, NULL));
46072f9f102SEric Chamberland PetscCall(PetscSectionDestroy(&s));
4619f046c2dSEric Chamberland } else if (prismsmesh) {
4629f046c2dSEric Chamberland Nc = sNLoclCellsPrismsMesh; //Same on each rank for this example...
4639f046c2dSEric Chamberland PetscInt Nv = sNGlobVertsPrismsMesh;
4649f046c2dSEric Chamberland InitPartForRank[0] = &sInitialPartitionPrismsMesh[0][0];
4659f046c2dSEric Chamberland InitPartForRank[1] = &sInitialPartitionPrismsMesh[1][0];
4669f046c2dSEric Chamberland const PetscInt (*Conn)[6] = sConnectivityPrismsMesh;
4679f046c2dSEric Chamberland
4689f046c2dSEric Chamberland const PetscInt Ncor = 6;
4699f046c2dSEric Chamberland const PetscInt dim = 3;
4709f046c2dSEric Chamberland
4719f046c2dSEric Chamberland PetscCall(PetscMalloc1(Nc * Ncor, &cells));
4729f046c2dSEric Chamberland for (c = 0; c < Nc; ++c) {
4739f046c2dSEric Chamberland PetscInt cell = (InitPartForRank[rank])[c], cor;
4749f046c2dSEric Chamberland
4759f046c2dSEric Chamberland for (cor = 0; cor < Ncor; ++cor) cells[c * Ncor + cor] = Conn[cell][cor];
4769f046c2dSEric Chamberland }
4779f046c2dSEric Chamberland PetscCall(DMSetDimension(dm, dim));
4789f046c2dSEric Chamberland PetscCall(DMPlexBuildFromCellListParallel(dm, Nc, PETSC_DECIDE, Nv, Ncor, cells, &sfVert, NULL));
4793f52fa01SEric Chamberland } else if (hexprismmesh) {
4803f52fa01SEric Chamberland Nc = sNLoclCellsHexPrismMesh[rank]; //Same on each rank for this example...
4813f52fa01SEric Chamberland PetscInt Nv = sNGlobVertsHexPrismMesh;
4823f52fa01SEric Chamberland InitPartForRank[0] = &sInitialPartitionHexPrismMesh[0][0];
4833f52fa01SEric Chamberland InitPartForRank[1] = &sInitialPartitionHexPrismMesh[1][0];
4843f52fa01SEric Chamberland const PetscInt (*Conn)[8] = sConnectivityHexPrismMesh;
4853f52fa01SEric Chamberland
4863f52fa01SEric Chamberland const PetscInt NcorMax = 8;
4873f52fa01SEric Chamberland const PetscInt dim = 3;
4883f52fa01SEric Chamberland
4893f52fa01SEric Chamberland /* Create a PetscSection and taking care to exclude nodes with "-1" into element connectivity: */
4903f52fa01SEric Chamberland PetscSection s;
4913f52fa01SEric Chamberland PetscInt vStart = 0, vEnd = Nc;
4923f52fa01SEric Chamberland PetscCall(PetscSectionCreate(PETSC_COMM_WORLD, &s));
4933f52fa01SEric Chamberland PetscCall(PetscSectionSetNumFields(s, 1));
4943f52fa01SEric Chamberland PetscCall(PetscSectionSetFieldComponents(s, 0, 1));
4953f52fa01SEric Chamberland PetscCall(PetscSectionSetChart(s, vStart, vEnd));
4963f52fa01SEric Chamberland
4973f52fa01SEric Chamberland PetscCall(PetscMalloc1(Nc * NcorMax, &cells));
4983f52fa01SEric Chamberland PetscInt count = 0;
4993f52fa01SEric Chamberland for (c = 0; c < Nc; ++c) {
5003f52fa01SEric Chamberland PetscInt cell = (InitPartForRank[rank])[c], cor;
5013f52fa01SEric Chamberland PetscInt nbElemVertex = ((-1 == Conn[cell][NcorMax - 1]) ? 6 : 8);
5023f52fa01SEric Chamberland for (cor = 0; cor < nbElemVertex; ++cor) {
5033f52fa01SEric Chamberland cells[count] = Conn[cell][cor];
5043f52fa01SEric Chamberland ++count;
5053f52fa01SEric Chamberland }
5063f52fa01SEric Chamberland PetscCall(PetscSectionSetDof(s, c, nbElemVertex));
5073f52fa01SEric Chamberland PetscCall(PetscSectionSetFieldDof(s, c, 0, nbElemVertex));
5083f52fa01SEric Chamberland }
5093f52fa01SEric Chamberland PetscCall(PetscSectionSetUp(s));
5103f52fa01SEric Chamberland PetscCall(DMSetDimension(dm, dim));
5113f52fa01SEric Chamberland PetscCall(PetscSectionView(s, PETSC_VIEWER_STDOUT_WORLD));
5123f52fa01SEric Chamberland PetscCall(DMPlexBuildFromCellSectionParallel(dm, Nc, PETSC_DECIDE, Nv, s, cells, &sfVert, NULL));
5133f52fa01SEric Chamberland PetscCall(PetscSectionDestroy(&s));
5149f046c2dSEric Chamberland }
515231de6a2SMatthew G. Knepley PetscCall(PetscSFDestroy(&sfVert));
516231de6a2SMatthew G. Knepley PetscCall(PetscFree(cells));
5173f52fa01SEric Chamberland PetscCall(DMPlexSetInterpolatePreferTensor(dm, PETSC_FALSE));
518231de6a2SMatthew G. Knepley PetscCall(DMPlexInterpolate(dm, &idm));
519231de6a2SMatthew G. Knepley PetscCall(DMDestroy(&dm));
520231de6a2SMatthew G. Knepley dm = idm;
521231de6a2SMatthew G. Knepley }
522231de6a2SMatthew G. Knepley PetscCall(DMSetUseNatural(dm, PETSC_TRUE));
523231de6a2SMatthew G. Knepley PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
524231de6a2SMatthew G. Knepley
525231de6a2SMatthew G. Knepley if (field) {
526231de6a2SMatthew G. Knepley const PetscInt Nf = 1;
527231de6a2SMatthew G. Knepley const PetscInt numBC = 0;
5289f046c2dSEric Chamberland const PetscInt numComp[1] = {1};
5299f046c2dSEric Chamberland PetscInt numDof[4] = {0, 0, 0, 0};
5309f046c2dSEric Chamberland PetscInt dim;
5319f046c2dSEric Chamberland
5329f046c2dSEric Chamberland PetscCall(DMGetDimension(dm, &dim));
5339f046c2dSEric Chamberland numDof[dim] = 1;
534231de6a2SMatthew G. Knepley
535231de6a2SMatthew G. Knepley PetscCall(DMSetNumFields(dm, Nf));
536231de6a2SMatthew G. Knepley PetscCall(DMPlexCreateSection(dm, NULL, numComp, numDof, numBC, NULL, NULL, NULL, NULL, &s));
537231de6a2SMatthew G. Knepley PetscCall(DMSetLocalSection(dm, s));
5383f52fa01SEric Chamberland /*PetscCall(PetscSectionView(s, PETSC_VIEWER_STDOUT_WORLD));*/
539231de6a2SMatthew G. Knepley PetscCall(PetscSectionDestroy(&s));
540231de6a2SMatthew G. Knepley }
541231de6a2SMatthew G. Knepley
542231de6a2SMatthew G. Knepley PetscCall(DMPlexGetPartitioner(dm, &part));
543231de6a2SMatthew G. Knepley PetscCall(PetscPartitionerSetFromOptions(part));
544231de6a2SMatthew G. Knepley
545231de6a2SMatthew G. Knepley PetscCall(DMPlexDistribute(dm, 0, &sfMig, &ddm));
546231de6a2SMatthew G. Knepley PetscCall(PetscSFView(sfMig, PETSC_VIEWER_STDOUT_WORLD));
547231de6a2SMatthew G. Knepley PetscCall(PetscSFCreateInverseSF(sfMig, &sfPart));
548231de6a2SMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)sfPart, "Inverse Migration SF"));
549231de6a2SMatthew G. Knepley PetscCall(PetscSFView(sfPart, PETSC_VIEWER_STDOUT_WORLD));
550231de6a2SMatthew G. Knepley
551231de6a2SMatthew G. Knepley Vec lGlobalVec, lNatVec;
552231de6a2SMatthew G. Knepley PetscScalar *lNatVecArray;
553231de6a2SMatthew G. Knepley
554231de6a2SMatthew G. Knepley {
555231de6a2SMatthew G. Knepley PetscSection s;
556231de6a2SMatthew G. Knepley
557231de6a2SMatthew G. Knepley PetscCall(DMGetGlobalSection(dm, &s));
558231de6a2SMatthew G. Knepley PetscCall(PetscSectionView(s, PETSC_VIEWER_STDOUT_WORLD));
559231de6a2SMatthew G. Knepley }
560231de6a2SMatthew G. Knepley PetscCall(DMGetGlobalVector(dm, &lNatVec));
561231de6a2SMatthew G. Knepley PetscCall(PetscObjectSetName((PetscObject)lNatVec, "Natural Vector (initial partition)"));
562231de6a2SMatthew G. Knepley
563231de6a2SMatthew G. Knepley //Copying the initial partition into the "natural" vector:
5649f046c2dSEric Chamberland PetscCall(VecZeroEntries(lNatVec));
565231de6a2SMatthew G. Knepley PetscCall(VecGetArray(lNatVec, &lNatVecArray));
566231de6a2SMatthew G. Knepley for (c = 0; c < Nc; ++c) lNatVecArray[c] = (InitPartForRank[rank])[c];
567231de6a2SMatthew G. Knepley PetscCall(VecRestoreArray(lNatVec, &lNatVecArray));
568231de6a2SMatthew G. Knepley
569231de6a2SMatthew G. Knepley PetscCall(DMGetGlobalVector(ddm, &lGlobalVec));
570*f0b74427SPierre Jolivet PetscCall(PetscObjectSetName((PetscObject)lGlobalVec, "Global Vector (reordered element numbers in the PETSc distributed order)"));
571231de6a2SMatthew G. Knepley PetscCall(VecZeroEntries(lGlobalVec));
572231de6a2SMatthew G. Knepley
573231de6a2SMatthew G. Knepley // The call to DMPlexNaturalToGlobalBegin/End does not produce our expected result...
574231de6a2SMatthew G. Knepley // In lGlobalVec, we expect to have:
575231de6a2SMatthew G. Knepley /*
576231de6a2SMatthew G. Knepley * Process [0]
577231de6a2SMatthew G. Knepley * 2.
578231de6a2SMatthew G. Knepley * 4.
579231de6a2SMatthew G. Knepley * 8.
580231de6a2SMatthew G. Knepley * 3.
581231de6a2SMatthew G. Knepley * 9.
582231de6a2SMatthew G. Knepley * Process [1]
583231de6a2SMatthew G. Knepley * 1.
584231de6a2SMatthew G. Knepley * 5.
585231de6a2SMatthew G. Knepley * 7.
586231de6a2SMatthew G. Knepley * 0.
587231de6a2SMatthew G. Knepley * 6.
588231de6a2SMatthew G. Knepley *
589231de6a2SMatthew G. Knepley * but we obtained:
590231de6a2SMatthew G. Knepley *
591231de6a2SMatthew G. Knepley * Process [0]
592231de6a2SMatthew G. Knepley * 2.
593231de6a2SMatthew G. Knepley * 4.
594231de6a2SMatthew G. Knepley * 8.
595231de6a2SMatthew G. Knepley * 0.
596231de6a2SMatthew G. Knepley * 0.
597231de6a2SMatthew G. Knepley * Process [1]
598231de6a2SMatthew G. Knepley * 0.
599231de6a2SMatthew G. Knepley * 0.
600231de6a2SMatthew G. Knepley * 0.
601231de6a2SMatthew G. Knepley * 0.
602231de6a2SMatthew G. Knepley * 0.
603231de6a2SMatthew G. Knepley */
604231de6a2SMatthew G. Knepley
605231de6a2SMatthew G. Knepley {
606231de6a2SMatthew G. Knepley PetscSF nsf;
607231de6a2SMatthew G. Knepley
608e535cce4SJames Wright PetscCall(DMGetNaturalSF(ddm, &nsf));
609231de6a2SMatthew G. Knepley PetscCall(PetscSFView(nsf, NULL));
610231de6a2SMatthew G. Knepley }
611231de6a2SMatthew G. Knepley PetscCall(DMPlexNaturalToGlobalBegin(ddm, lNatVec, lGlobalVec));
612231de6a2SMatthew G. Knepley PetscCall(DMPlexNaturalToGlobalEnd(ddm, lNatVec, lGlobalVec));
613231de6a2SMatthew G. Knepley
614231de6a2SMatthew G. Knepley PetscCall(VecView(lNatVec, PETSC_VIEWER_STDOUT_WORLD));
615231de6a2SMatthew G. Knepley PetscCall(VecView(lGlobalVec, PETSC_VIEWER_STDOUT_WORLD));
616231de6a2SMatthew G. Knepley
617231de6a2SMatthew G. Knepley PetscCall(DMRestoreGlobalVector(dm, &lNatVec));
618231de6a2SMatthew G. Knepley PetscCall(DMRestoreGlobalVector(ddm, &lGlobalVec));
619231de6a2SMatthew G. Knepley
6209f046c2dSEric Chamberland const PetscBool lUseCone = PETSC_FALSE;
6219f046c2dSEric Chamberland const PetscBool lUseClosure = PETSC_TRUE;
6229f046c2dSEric Chamberland PetscCall(DMSetBasicAdjacency(ddm, lUseCone, lUseClosure));
6239f046c2dSEric Chamberland const PetscInt lNbCellsInOverlap = 1;
6249f046c2dSEric Chamberland PetscSF lSFMigrationOvl;
6259f046c2dSEric Chamberland DM ddm_with_overlap;
6269f046c2dSEric Chamberland
6279f046c2dSEric Chamberland PetscCall(DMPlexDistributeOverlap(ddm, lNbCellsInOverlap, &lSFMigrationOvl, &ddm_with_overlap));
6289f046c2dSEric Chamberland
6299f046c2dSEric Chamberland IS lISCellWithOvl = 0;
6309f046c2dSEric Chamberland /* This is the buggy call with prisms since commit 5ae96e2b862 */
631e2b8d0fcSMatthew G. Knepley PetscCall(DMPlexCreateCellNumbering(ddm_with_overlap, PETSC_TRUE, &lISCellWithOvl));
6329f046c2dSEric Chamberland /* Here, we can see the elements in the overlap within the IS: they are the ones with negative indices */
6339f046c2dSEric Chamberland PetscCall(ISView(lISCellWithOvl, PETSC_VIEWER_STDOUT_WORLD));
634e2b8d0fcSMatthew G. Knepley PetscCall(ISDestroy(&lISCellWithOvl));
6359f046c2dSEric Chamberland
6369f046c2dSEric Chamberland PetscCall(PetscSFDestroy(&lSFMigrationOvl));
6379f046c2dSEric Chamberland PetscCall(DMDestroy(&ddm_with_overlap));
638231de6a2SMatthew G. Knepley PetscCall(PetscSFDestroy(&sfMig));
639231de6a2SMatthew G. Knepley PetscCall(PetscSFDestroy(&sfPart));
640231de6a2SMatthew G. Knepley PetscCall(DMDestroy(&dm));
641231de6a2SMatthew G. Knepley PetscCall(DMDestroy(&ddm));
642231de6a2SMatthew G. Knepley PetscCall(PetscFinalize());
643231de6a2SMatthew G. Knepley return 0;
644231de6a2SMatthew G. Knepley }
645231de6a2SMatthew G. Knepley
646231de6a2SMatthew G. Knepley /*TEST
647231de6a2SMatthew G. Knepley
648231de6a2SMatthew G. Knepley testset:
649231de6a2SMatthew G. Knepley args: -field -petscpartitioner_type simple
650231de6a2SMatthew G. Knepley nsize: 2
651231de6a2SMatthew G. Knepley
652231de6a2SMatthew G. Knepley test:
653231de6a2SMatthew G. Knepley suffix: 0
6549f046c2dSEric Chamberland args: -quadsmesh
6559f046c2dSEric Chamberland output_file: output/ex47_0.out
656231de6a2SMatthew G. Knepley
657231de6a2SMatthew G. Knepley test:
658231de6a2SMatthew G. Knepley suffix: 1
659231de6a2SMatthew G. Knepley args: -box -dm_plex_simplex 0 -dm_plex_box_faces 2,5 -dm_distribute
6609f046c2dSEric Chamberland output_file: output/ex47_1.out
6619f046c2dSEric Chamberland
6629f046c2dSEric Chamberland test:
6639f046c2dSEric Chamberland suffix: 2
6649f046c2dSEric Chamberland args: -prismsmesh
6659f046c2dSEric Chamberland output_file: output/ex47_2.out
666231de6a2SMatthew G. Knepley
66772f9f102SEric Chamberland test:
66872f9f102SEric Chamberland suffix: 3
66972f9f102SEric Chamberland args: -trisquadsmesh
67072f9f102SEric Chamberland output_file: output/ex47_3.out
67172f9f102SEric Chamberland
6723f52fa01SEric Chamberland test:
6733f52fa01SEric Chamberland suffix: 4
6743f52fa01SEric Chamberland args: -hexprismmesh
6753f52fa01SEric Chamberland output_file: output/ex47_4.out
6763f52fa01SEric Chamberland
677231de6a2SMatthew G. Knepley TEST*/
678