1c4762a1bSJed Brown static char help[] = "Tests for DMLabel\n\n";
2c4762a1bSJed Brown
3c4762a1bSJed Brown #include <petscdmplex.h>
40fdc7489SMatthew Knepley #include <petsc/private/dmimpl.h>
5c4762a1bSJed Brown
TestInsertion()6d71ae5a4SJacob Faibussowitsch static PetscErrorCode TestInsertion()
7d71ae5a4SJacob Faibussowitsch {
8c4762a1bSJed Brown DMLabel label, label2;
9c4762a1bSJed Brown const PetscInt values[5] = {0, 3, 4, -1, 176}, N = 10000;
10c4762a1bSJed Brown PetscInt i, v;
11c4762a1bSJed Brown
12c4762a1bSJed Brown PetscFunctionBegin;
139566063dSJacob Faibussowitsch PetscCall(DMLabelCreate(PETSC_COMM_SELF, "Test Label", &label));
149566063dSJacob Faibussowitsch PetscCall(DMLabelSetDefaultValue(label, -100));
1548a46eb9SPierre Jolivet for (i = 0; i < N; ++i) PetscCall(DMLabelSetValue(label, i, values[i % 5]));
16c4762a1bSJed Brown /* Test get in hash mode */
17c4762a1bSJed Brown for (i = 0; i < N; ++i) {
18c4762a1bSJed Brown PetscInt val;
19c4762a1bSJed Brown
209566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label, i, &val));
2163a3b9bcSJacob Faibussowitsch PetscCheck(val == values[i % 5], PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Value %" PetscInt_FMT " for point %" PetscInt_FMT " should be %" PetscInt_FMT, val, i, values[i % 5]);
22c4762a1bSJed Brown }
23c4762a1bSJed Brown /* Test stratum */
24c4762a1bSJed Brown for (v = 0; v < 5; ++v) {
25c4762a1bSJed Brown IS stratum;
26c4762a1bSJed Brown const PetscInt *points;
27c4762a1bSJed Brown PetscInt n;
28c4762a1bSJed Brown
299566063dSJacob Faibussowitsch PetscCall(DMLabelGetStratumIS(label, values[v], &stratum));
3063a3b9bcSJacob Faibussowitsch PetscCheck(stratum, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Stratum %" PetscInt_FMT " is empty!", v);
319566063dSJacob Faibussowitsch PetscCall(ISGetIndices(stratum, &points));
329566063dSJacob Faibussowitsch PetscCall(ISGetLocalSize(stratum, &n));
33ad540459SPierre Jolivet for (i = 0; i < n; ++i) PetscCheck(points[i] == i * 5 + v, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Point %" PetscInt_FMT " should be %" PetscInt_FMT, points[i], i * 5 + v);
349566063dSJacob Faibussowitsch PetscCall(ISRestoreIndices(stratum, &points));
359566063dSJacob Faibussowitsch PetscCall(ISDestroy(&stratum));
36c4762a1bSJed Brown }
37c4762a1bSJed Brown /* Test get in array mode */
38c4762a1bSJed Brown for (i = 0; i < N; ++i) {
39c4762a1bSJed Brown PetscInt val;
40c4762a1bSJed Brown
419566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label, i, &val));
4263a3b9bcSJacob Faibussowitsch PetscCheck(val == values[i % 5], PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Value %" PetscInt_FMT " should be %" PetscInt_FMT, val, values[i % 5]);
43c4762a1bSJed Brown }
44c4762a1bSJed Brown /* Test Duplicate */
459566063dSJacob Faibussowitsch PetscCall(DMLabelDuplicate(label, &label2));
46c4762a1bSJed Brown for (i = 0; i < N; ++i) {
47c4762a1bSJed Brown PetscInt val;
48c4762a1bSJed Brown
499566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label2, i, &val));
5063a3b9bcSJacob Faibussowitsch PetscCheck(val == values[i % 5], PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Value %" PetscInt_FMT " should be %" PetscInt_FMT, val, values[i % 5]);
51c4762a1bSJed Brown }
529566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label2));
539566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label));
543ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
55c4762a1bSJed Brown }
56c4762a1bSJed Brown
TestEmptyStrata(MPI_Comm comm)57d71ae5a4SJacob Faibussowitsch static PetscErrorCode TestEmptyStrata(MPI_Comm comm)
58d71ae5a4SJacob Faibussowitsch {
59c4762a1bSJed Brown DM dm, dmDist;
60c4762a1bSJed Brown PetscPartitioner part;
61c4762a1bSJed Brown PetscInt c0[6] = {2, 3, 6, 7, 9, 11};
62c4762a1bSJed Brown PetscInt c1[6] = {4, 5, 7, 8, 10, 12};
63c4762a1bSJed Brown PetscInt c2[4] = {13, 15, 19, 21};
64c4762a1bSJed Brown PetscInt c3[4] = {14, 16, 20, 22};
65c4762a1bSJed Brown PetscInt c4[4] = {15, 17, 21, 23};
66c4762a1bSJed Brown PetscInt c5[4] = {16, 18, 22, 24};
67c4762a1bSJed Brown PetscInt c6[4] = {13, 14, 19, 20};
68c4762a1bSJed Brown PetscInt c7[4] = {15, 16, 21, 22};
69c4762a1bSJed Brown PetscInt c8[4] = {17, 18, 23, 24};
70c4762a1bSJed Brown PetscInt c9[4] = {13, 14, 15, 16};
71c4762a1bSJed Brown PetscInt c10[4] = {15, 16, 17, 18};
72c4762a1bSJed Brown PetscInt c11[4] = {19, 20, 21, 22};
73c4762a1bSJed Brown PetscInt c12[4] = {21, 22, 23, 24};
74c4762a1bSJed Brown PetscInt dim = 3;
75c4762a1bSJed Brown PetscMPIInt rank;
76c4762a1bSJed Brown
77c4762a1bSJed Brown PetscFunctionBegin;
789566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(comm, &rank));
79c4762a1bSJed Brown /* A 3D box with two adjacent cells, sharing one face and four vertices */
809566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, &dm));
819566063dSJacob Faibussowitsch PetscCall(DMSetType(dm, DMPLEX));
829566063dSJacob Faibussowitsch PetscCall(DMSetDimension(dm, dim));
83dd400576SPatrick Sanan if (rank == 0) {
849566063dSJacob Faibussowitsch PetscCall(DMPlexSetChart(dm, 0, 25));
859566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 0, 6));
869566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 1, 6));
879566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 2, 4));
889566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 3, 4));
899566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 4, 4));
909566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 5, 4));
919566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 6, 4));
929566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 7, 4));
939566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 8, 4));
949566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 9, 4));
959566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 10, 4));
969566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 11, 4));
979566063dSJacob Faibussowitsch PetscCall(DMPlexSetConeSize(dm, 12, 4));
98c4762a1bSJed Brown }
999566063dSJacob Faibussowitsch PetscCall(DMSetUp(dm));
100dd400576SPatrick Sanan if (rank == 0) {
1019566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 0, c0));
1029566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 1, c1));
1039566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 2, c2));
1049566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 3, c3));
1059566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 4, c4));
1069566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 5, c5));
1079566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 6, c6));
1089566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 7, c7));
1099566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 8, c8));
1109566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 9, c9));
1119566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 10, c10));
1129566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 11, c11));
1139566063dSJacob Faibussowitsch PetscCall(DMPlexSetCone(dm, 12, c12));
114c4762a1bSJed Brown }
1159566063dSJacob Faibussowitsch PetscCall(DMPlexSymmetrize(dm));
116c4762a1bSJed Brown /* Create a user managed depth label, so that we can leave out edges */
117c4762a1bSJed Brown {
118c4762a1bSJed Brown DMLabel label;
119c4762a1bSJed Brown PetscInt numValues, maxValues = 0, v;
120c4762a1bSJed Brown
1219566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm, "depth"));
1229566063dSJacob Faibussowitsch PetscCall(DMPlexGetDepthLabel(dm, &label));
123dd400576SPatrick Sanan if (rank == 0) {
124c4762a1bSJed Brown PetscInt i;
125c4762a1bSJed Brown
126c4762a1bSJed Brown for (i = 0; i < 25; ++i) {
1279566063dSJacob Faibussowitsch if (i < 2) PetscCall(DMLabelSetValue(label, i, 3));
1289566063dSJacob Faibussowitsch else if (i < 13) PetscCall(DMLabelSetValue(label, i, 2));
129c4762a1bSJed Brown else {
1309566063dSJacob Faibussowitsch if (i == 13) PetscCall(DMLabelAddStratum(label, 1));
1319566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label, i, 0));
132c4762a1bSJed Brown }
133c4762a1bSJed Brown }
134c4762a1bSJed Brown }
1359566063dSJacob Faibussowitsch PetscCall(DMLabelGetNumValues(label, &numValues));
136462c564dSBarry Smith PetscCallMPI(MPIU_Allreduce(&numValues, &maxValues, 1, MPIU_INT, MPI_MAX, PetscObjectComm((PetscObject)dm)));
1379566063dSJacob Faibussowitsch for (v = numValues; v < maxValues; ++v) PetscCall(DMLabelAddStratum(label, v));
138c4762a1bSJed Brown }
139c4762a1bSJed Brown {
140c4762a1bSJed Brown DMLabel label;
1419566063dSJacob Faibussowitsch PetscCall(DMPlexGetDepthLabel(dm, &label));
1429566063dSJacob Faibussowitsch PetscCall(DMLabelView(label, PETSC_VIEWER_STDOUT_(comm)));
143c4762a1bSJed Brown }
1449566063dSJacob Faibussowitsch PetscCall(DMPlexGetPartitioner(dm, &part));
1459566063dSJacob Faibussowitsch PetscCall(PetscPartitionerSetFromOptions(part));
1469566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(dm, 1, NULL, &dmDist));
147c4762a1bSJed Brown if (dmDist) {
1489566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm));
149c4762a1bSJed Brown dm = dmDist;
150c4762a1bSJed Brown }
151c4762a1bSJed Brown {
152c4762a1bSJed Brown DMLabel label;
1539566063dSJacob Faibussowitsch PetscCall(DMPlexGetDepthLabel(dm, &label));
1549566063dSJacob Faibussowitsch PetscCall(DMLabelView(label, PETSC_VIEWER_STDOUT_(comm)));
155c4762a1bSJed Brown }
156c4762a1bSJed Brown /* Create a cell vector */
157c4762a1bSJed Brown {
158c4762a1bSJed Brown Vec v;
159c4762a1bSJed Brown PetscSection s;
160c4762a1bSJed Brown PetscInt numComp[] = {1};
161c4762a1bSJed Brown PetscInt dof[] = {0, 0, 0, 1};
162c4762a1bSJed Brown PetscInt N;
163c4762a1bSJed Brown
1649566063dSJacob Faibussowitsch PetscCall(DMSetNumFields(dm, 1));
1659566063dSJacob Faibussowitsch PetscCall(DMPlexCreateSection(dm, NULL, numComp, dof, 0, NULL, NULL, NULL, NULL, &s));
1669566063dSJacob Faibussowitsch PetscCall(DMSetLocalSection(dm, s));
1679566063dSJacob Faibussowitsch PetscCall(PetscSectionDestroy(&s));
1689566063dSJacob Faibussowitsch PetscCall(DMCreateGlobalVector(dm, &v));
1699566063dSJacob Faibussowitsch PetscCall(VecGetSize(v, &N));
170c4762a1bSJed Brown if (N != 2) {
1719566063dSJacob Faibussowitsch PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_(comm)));
17263a3b9bcSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "FAIL: Vector size %" PetscInt_FMT " != 2", N);
173c4762a1bSJed Brown }
1749566063dSJacob Faibussowitsch PetscCall(VecDestroy(&v));
175c4762a1bSJed Brown }
1769566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm));
1773ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
178c4762a1bSJed Brown }
179c4762a1bSJed Brown
TestDistribution(MPI_Comm comm)180d71ae5a4SJacob Faibussowitsch static PetscErrorCode TestDistribution(MPI_Comm comm)
181d71ae5a4SJacob Faibussowitsch {
182c4762a1bSJed Brown DM dm, dmDist;
183c4762a1bSJed Brown PetscPartitioner part;
184c4762a1bSJed Brown DMLabel label;
1850fdc7489SMatthew Knepley char filename[PETSC_MAX_PATH_LEN];
186c4762a1bSJed Brown const char *name = "test label";
187c4762a1bSJed Brown PetscInt overlap = 0, cStart, cEnd, c;
188c4762a1bSJed Brown PetscMPIInt rank;
189c4762a1bSJed Brown PetscBool flg;
190c4762a1bSJed Brown
191c4762a1bSJed Brown PetscFunctionBegin;
1929566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(comm, &rank));
1939566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-filename", filename, sizeof(filename), &flg));
1943ba16761SJacob Faibussowitsch if (!flg) PetscFunctionReturn(PETSC_SUCCESS);
1959566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-overlap", &overlap, NULL));
1969566063dSJacob Faibussowitsch PetscCall(DMPlexCreateFromFile(comm, filename, "ex11_plex", PETSC_TRUE, &dm));
1979566063dSJacob Faibussowitsch PetscCall(DMSetBasicAdjacency(dm, PETSC_TRUE, PETSC_FALSE));
1989566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm, name));
1999566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, name, &label));
2009566063dSJacob Faibussowitsch PetscCall(DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd));
20148a46eb9SPierre Jolivet for (c = cStart; c < cEnd; ++c) PetscCall(DMLabelSetValue(label, c, c));
2029566063dSJacob Faibussowitsch PetscCall(DMLabelView(label, PETSC_VIEWER_STDOUT_WORLD));
2039566063dSJacob Faibussowitsch PetscCall(DMPlexGetPartitioner(dm, &part));
2049566063dSJacob Faibussowitsch PetscCall(PetscPartitionerSetFromOptions(part));
2059566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(dm, overlap, NULL, &dmDist));
206c4762a1bSJed Brown if (dmDist) {
2079566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm));
208c4762a1bSJed Brown dm = dmDist;
209c4762a1bSJed Brown }
2109566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm, "Mesh"));
2119566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(dm, NULL, "-dm_view"));
2129566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, name, &label));
2139566063dSJacob Faibussowitsch PetscCall(DMLabelView(label, PETSC_VIEWER_STDOUT_WORLD));
2149566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm));
2153ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
216c4762a1bSJed Brown }
217c4762a1bSJed Brown
TestUniversalLabel(MPI_Comm comm)218d71ae5a4SJacob Faibussowitsch static PetscErrorCode TestUniversalLabel(MPI_Comm comm)
219d71ae5a4SJacob Faibussowitsch {
2200fdc7489SMatthew Knepley DM dm1, dm2;
2210fdc7489SMatthew Knepley DMLabel bd1, bd2, ulabel;
2220fdc7489SMatthew Knepley DMUniversalLabel universal;
2230fdc7489SMatthew Knepley PetscInt pStart, pEnd, p;
22430602db0SMatthew G. Knepley PetscBool run = PETSC_FALSE, notFile;
2250fdc7489SMatthew Knepley
2260fdc7489SMatthew Knepley PetscFunctionBeginUser;
2279566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetBool(NULL, NULL, "-universal", &run, NULL));
2283ba16761SJacob Faibussowitsch if (!run) PetscFunctionReturn(PETSC_SUCCESS);
22930602db0SMatthew G. Knepley
23030602db0SMatthew G. Knepley char filename[PETSC_MAX_PATH_LEN];
23130602db0SMatthew G. Knepley PetscBool flg;
23230602db0SMatthew G. Knepley
2339566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-filename", filename, sizeof(filename), &flg));
2340fdc7489SMatthew Knepley if (flg) {
2359566063dSJacob Faibussowitsch PetscCall(DMPlexCreateFromFile(comm, filename, "ex11_plex", PETSC_TRUE, &dm1));
2360fdc7489SMatthew Knepley } else {
2379566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, &dm1));
2389566063dSJacob Faibussowitsch PetscCall(DMSetType(dm1, DMPLEX));
2399566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm1));
24030602db0SMatthew G. Knepley }
2419566063dSJacob Faibussowitsch PetscCall(DMHasLabel(dm1, "marker", ¬File));
24230602db0SMatthew G. Knepley if (notFile) {
2439566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm1, "Boundary Faces"));
2449566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm1, "Boundary Faces", &bd1));
2459566063dSJacob Faibussowitsch PetscCall(DMPlexMarkBoundaryFaces(dm1, 13, bd1));
2469566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm1, "Boundary"));
2479566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm1, "Boundary", &bd2));
2489566063dSJacob Faibussowitsch PetscCall(DMPlexMarkBoundaryFaces(dm1, 121, bd2));
2499566063dSJacob Faibussowitsch PetscCall(DMPlexLabelComplete(dm1, bd2));
2500fdc7489SMatthew Knepley }
2519566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm1, "First Mesh"));
2529566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(dm1, NULL, "-dm_view"));
2530fdc7489SMatthew Knepley
2549566063dSJacob Faibussowitsch PetscCall(DMUniversalLabelCreate(dm1, &universal));
2559566063dSJacob Faibussowitsch PetscCall(DMUniversalLabelGetLabel(universal, &ulabel));
2569566063dSJacob Faibussowitsch PetscCall(PetscObjectViewFromOptions((PetscObject)ulabel, NULL, "-universal_view"));
2570fdc7489SMatthew Knepley
25830602db0SMatthew G. Knepley if (!notFile) {
2590fdc7489SMatthew Knepley PetscInt Nl, l;
2600fdc7489SMatthew Knepley
2619566063dSJacob Faibussowitsch PetscCall(DMClone(dm1, &dm2));
2629566063dSJacob Faibussowitsch PetscCall(DMGetNumLabels(dm2, &Nl));
2630fdc7489SMatthew Knepley for (l = Nl - 1; l >= 0; --l) {
2640fdc7489SMatthew Knepley PetscBool isdepth, iscelltype;
2650fdc7489SMatthew Knepley const char *name;
2660fdc7489SMatthew Knepley
2679566063dSJacob Faibussowitsch PetscCall(DMGetLabelName(dm2, l, &name));
2689566063dSJacob Faibussowitsch PetscCall(PetscStrncmp(name, "depth", 6, &isdepth));
2699566063dSJacob Faibussowitsch PetscCall(PetscStrncmp(name, "celltype", 9, &iscelltype));
2709566063dSJacob Faibussowitsch if (!isdepth && !iscelltype) PetscCall(DMRemoveLabel(dm2, name, NULL));
2710fdc7489SMatthew Knepley }
2720fdc7489SMatthew Knepley } else {
2739566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, &dm2));
2749566063dSJacob Faibussowitsch PetscCall(DMSetType(dm2, DMPLEX));
2759566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm2));
2760fdc7489SMatthew Knepley }
2779566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm2, "Second Mesh"));
2789566063dSJacob Faibussowitsch PetscCall(DMUniversalLabelCreateLabels(universal, PETSC_TRUE, dm2));
2799566063dSJacob Faibussowitsch PetscCall(DMPlexGetChart(dm2, &pStart, &pEnd));
2800fdc7489SMatthew Knepley for (p = pStart; p < pEnd; ++p) {
2810fdc7489SMatthew Knepley PetscInt val;
2820fdc7489SMatthew Knepley
2839566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(ulabel, p, &val));
2840fdc7489SMatthew Knepley if (val < 0) continue;
2859566063dSJacob Faibussowitsch PetscCall(DMUniversalLabelSetLabelValue(universal, dm2, PETSC_TRUE, p, val));
2860fdc7489SMatthew Knepley }
2879566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(dm2, NULL, "-dm_view"));
2880fdc7489SMatthew Knepley
2899566063dSJacob Faibussowitsch PetscCall(DMUniversalLabelDestroy(&universal));
2909566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm1));
2919566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm2));
2923ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
2930fdc7489SMatthew Knepley }
2940fdc7489SMatthew Knepley
main(int argc,char ** argv)295d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
296d71ae5a4SJacob Faibussowitsch {
297327415f7SBarry Smith PetscFunctionBeginUser;
2989566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help));
2999566063dSJacob Faibussowitsch /*PetscCall(ProcessOptions(PETSC_COMM_WORLD, &user));*/
3009566063dSJacob Faibussowitsch PetscCall(TestInsertion());
3019566063dSJacob Faibussowitsch PetscCall(TestEmptyStrata(PETSC_COMM_WORLD));
3029566063dSJacob Faibussowitsch PetscCall(TestDistribution(PETSC_COMM_WORLD));
3039566063dSJacob Faibussowitsch PetscCall(TestUniversalLabel(PETSC_COMM_WORLD));
3049566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
305b122ec5aSJacob Faibussowitsch return 0;
306c4762a1bSJed Brown }
307c4762a1bSJed Brown
308c4762a1bSJed Brown /*TEST
309c4762a1bSJed Brown
310c4762a1bSJed Brown test:
311c4762a1bSJed Brown suffix: 0
3120fdc7489SMatthew Knepley requires: triangle
313c4762a1bSJed Brown test:
314c4762a1bSJed Brown suffix: 1
3150fdc7489SMatthew Knepley requires: triangle
316c4762a1bSJed Brown nsize: 2
317c4762a1bSJed Brown args: -petscpartitioner_type simple
318c4762a1bSJed Brown
319c4762a1bSJed Brown testset:
320c4762a1bSJed Brown suffix: gmsh
321c4762a1bSJed Brown args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -petscpartitioner_type simple
322c4762a1bSJed Brown test:
323c4762a1bSJed Brown suffix: 1
324c4762a1bSJed Brown nsize: 1
325c4762a1bSJed Brown test:
326c4762a1bSJed Brown suffix: 2
327c4762a1bSJed Brown nsize: 2
328c4762a1bSJed Brown
329c4762a1bSJed Brown testset:
330c4762a1bSJed Brown suffix: exodusii
331c4762a1bSJed Brown requires: exodusii
332c4762a1bSJed Brown args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/2Dgrd.exo -petscpartitioner_type simple
333c4762a1bSJed Brown test:
334c4762a1bSJed Brown suffix: 1
335c4762a1bSJed Brown nsize: 1
336c4762a1bSJed Brown test:
337c4762a1bSJed Brown suffix: 2
338c4762a1bSJed Brown nsize: 2
339c4762a1bSJed Brown
3400fdc7489SMatthew Knepley test:
3410fdc7489SMatthew Knepley suffix: univ
3420fdc7489SMatthew Knepley requires: triangle
3430fdc7489SMatthew Knepley args: -universal -dm_view -universal_view
3440fdc7489SMatthew Knepley
3450fdc7489SMatthew Knepley test:
3460fdc7489SMatthew Knepley # Note that the labels differ because we have multiply-marked some points during EGADS creation
3470fdc7489SMatthew Knepley suffix: univ_egads_sphere
348*5552b385SBrandon requires: egads datafilespath
349*5552b385SBrandon args: -universal -dm_plex_filename ${DATAFILESPATH}/meshes/cad/sphere_example.egadslite -dm_view -universal_view
3500fdc7489SMatthew Knepley
3510fdc7489SMatthew Knepley test:
3520fdc7489SMatthew Knepley # Note that the labels differ because we have multiply-marked some points during EGADS creation
3530fdc7489SMatthew Knepley suffix: univ_egads_ball
354*5552b385SBrandon requires: egads ctetgen datafilespath
355*5552b385SBrandon args: -universal -dm_plex_boundary_filename ${DATAFILESPATH}/meshes/cad/sphere_example.egadslite -dm_view -universal_view
3560fdc7489SMatthew Knepley
357c4762a1bSJed Brown TEST*/
358