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 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 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 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 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 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