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 6c4762a1bSJed Brown static PetscErrorCode TestInsertion() 7c4762a1bSJed Brown { 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; 13*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelCreate(PETSC_COMM_SELF, "Test Label", &label)); 14*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetDefaultValue(label, -100)); 15c4762a1bSJed Brown for (i = 0; i < N; ++i) { 16*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label, i, values[i%5])); 17c4762a1bSJed Brown } 18c4762a1bSJed Brown /* Test get in hash mode */ 19c4762a1bSJed Brown for (i = 0; i < N; ++i) { 20c4762a1bSJed Brown PetscInt val; 21c4762a1bSJed Brown 22*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label, i, &val)); 232c71b3e2SJacob Faibussowitsch PetscCheckFalse(val != values[i%5],PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Value %d for point %d should be %d", val, i, values[i%5]); 24c4762a1bSJed Brown } 25c4762a1bSJed Brown /* Test stratum */ 26c4762a1bSJed Brown for (v = 0; v < 5; ++v) { 27c4762a1bSJed Brown IS stratum; 28c4762a1bSJed Brown const PetscInt *points; 29c4762a1bSJed Brown PetscInt n; 30c4762a1bSJed Brown 31*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetStratumIS(label, values[v], &stratum)); 322c71b3e2SJacob Faibussowitsch PetscCheckFalse(!stratum,PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Stratum %d is empty!", v); 33*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISGetIndices(stratum, &points)); 34*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISGetLocalSize(stratum, &n)); 35c4762a1bSJed Brown for (i = 0; i < n; ++i) { 362c71b3e2SJacob Faibussowitsch PetscCheckFalse(points[i] != i*5+v,PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Point %d should be %d", points[i], i*5+v); 37c4762a1bSJed Brown } 38*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISRestoreIndices(stratum, &points)); 39*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISDestroy(&stratum)); 40c4762a1bSJed Brown } 41c4762a1bSJed Brown /* Test get in array mode */ 42c4762a1bSJed Brown for (i = 0; i < N; ++i) { 43c4762a1bSJed Brown PetscInt val; 44c4762a1bSJed Brown 45*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label, i, &val)); 462c71b3e2SJacob Faibussowitsch PetscCheckFalse(val != values[i%5],PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Value %d should be %d", val, values[i%5]); 47c4762a1bSJed Brown } 48c4762a1bSJed Brown /* Test Duplicate */ 49*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDuplicate(label, &label2)); 50c4762a1bSJed Brown for (i = 0; i < N; ++i) { 51c4762a1bSJed Brown PetscInt val; 52c4762a1bSJed Brown 53*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label2, i, &val)); 542c71b3e2SJacob Faibussowitsch PetscCheckFalse(val != values[i%5],PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Value %d should be %d", val, values[i%5]); 55c4762a1bSJed Brown } 56*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDestroy(&label2)); 57*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDestroy(&label)); 58c4762a1bSJed Brown PetscFunctionReturn(0); 59c4762a1bSJed Brown } 60c4762a1bSJed Brown 61c4762a1bSJed Brown static PetscErrorCode TestEmptyStrata(MPI_Comm comm) 62c4762a1bSJed Brown { 63c4762a1bSJed Brown DM dm, dmDist; 64c4762a1bSJed Brown PetscPartitioner part; 65c4762a1bSJed Brown PetscInt c0[6] = {2,3,6,7,9,11}; 66c4762a1bSJed Brown PetscInt c1[6] = {4,5,7,8,10,12}; 67c4762a1bSJed Brown PetscInt c2[4] = {13,15,19,21}; 68c4762a1bSJed Brown PetscInt c3[4] = {14,16,20,22}; 69c4762a1bSJed Brown PetscInt c4[4] = {15,17,21,23}; 70c4762a1bSJed Brown PetscInt c5[4] = {16,18,22,24}; 71c4762a1bSJed Brown PetscInt c6[4] = {13,14,19,20}; 72c4762a1bSJed Brown PetscInt c7[4] = {15,16,21,22}; 73c4762a1bSJed Brown PetscInt c8[4] = {17,18,23,24}; 74c4762a1bSJed Brown PetscInt c9[4] = {13,14,15,16}; 75c4762a1bSJed Brown PetscInt c10[4] = {15,16,17,18}; 76c4762a1bSJed Brown PetscInt c11[4] = {19,20,21,22}; 77c4762a1bSJed Brown PetscInt c12[4] = {21,22,23,24}; 78c4762a1bSJed Brown PetscInt dim = 3; 79c4762a1bSJed Brown PetscMPIInt rank; 80c4762a1bSJed Brown 81c4762a1bSJed Brown PetscFunctionBegin; 82*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(comm, &rank)); 83c4762a1bSJed Brown /* A 3D box with two adjacent cells, sharing one face and four vertices */ 84*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(comm, &dm)); 85*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dm, DMPLEX)); 86*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetDimension(dm, dim)); 87dd400576SPatrick Sanan if (rank == 0) { 88*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetChart(dm, 0, 25)); 89*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 0, 6)); 90*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 1, 6)); 91*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 2, 4)); 92*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 3, 4)); 93*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 4, 4)); 94*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 5, 4)); 95*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 6, 4)); 96*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 7, 4)); 97*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 8, 4)); 98*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 9, 4)); 99*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 10, 4)); 100*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 11, 4)); 101*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetConeSize(dm, 12, 4)); 102c4762a1bSJed Brown } 103*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetUp(dm)); 104dd400576SPatrick Sanan if (rank == 0) { 105*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 0, c0)); 106*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 1, c1)); 107*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 2, c2)); 108*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 3, c3)); 109*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 4, c4)); 110*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 5, c5)); 111*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 6, c6)); 112*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 7, c7)); 113*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 8, c8)); 114*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 9, c9)); 115*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 10, c10)); 116*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 11, c11)); 117*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSetCone(dm, 12, c12)); 118c4762a1bSJed Brown } 119*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexSymmetrize(dm)); 120c4762a1bSJed Brown /* Create a user managed depth label, so that we can leave out edges */ 121c4762a1bSJed Brown { 122c4762a1bSJed Brown DMLabel label; 123c4762a1bSJed Brown PetscInt numValues, maxValues = 0, v; 124c4762a1bSJed Brown 125*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateLabel(dm, "depth")); 126*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetDepthLabel(dm, &label)); 127dd400576SPatrick Sanan if (rank == 0) { 128c4762a1bSJed Brown PetscInt i; 129c4762a1bSJed Brown 130c4762a1bSJed Brown for (i = 0; i < 25; ++i) { 131*5f80ce2aSJacob Faibussowitsch if (i < 2) CHKERRQ(DMLabelSetValue(label, i, 3)); 132*5f80ce2aSJacob Faibussowitsch else if (i < 13) CHKERRQ(DMLabelSetValue(label, i, 2)); 133c4762a1bSJed Brown else { 134*5f80ce2aSJacob Faibussowitsch if (i==13) CHKERRQ(DMLabelAddStratum(label, 1)); 135*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label, i, 0)); 136c4762a1bSJed Brown } 137c4762a1bSJed Brown } 138c4762a1bSJed Brown } 139*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetNumValues(label, &numValues)); 140*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Allreduce(&numValues, &maxValues, 1, MPIU_INT, MPI_MAX, PetscObjectComm((PetscObject) dm))); 141*5f80ce2aSJacob Faibussowitsch for (v = numValues; v < maxValues; ++v) CHKERRQ(DMLabelAddStratum(label,v)); 142c4762a1bSJed Brown } 143c4762a1bSJed Brown { 144c4762a1bSJed Brown DMLabel label; 145*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetDepthLabel(dm, &label)); 146*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelView(label, PETSC_VIEWER_STDOUT_(comm))); 147c4762a1bSJed Brown } 148*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetPartitioner(dm,&part)); 149*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPartitionerSetFromOptions(part)); 150*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexDistribute(dm, 1, NULL, &dmDist)); 151c4762a1bSJed Brown if (dmDist) { 152*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 153c4762a1bSJed Brown dm = dmDist; 154c4762a1bSJed Brown } 155c4762a1bSJed Brown { 156c4762a1bSJed Brown DMLabel label; 157*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetDepthLabel(dm, &label)); 158*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelView(label, PETSC_VIEWER_STDOUT_(comm))); 159c4762a1bSJed Brown } 160c4762a1bSJed Brown /* Create a cell vector */ 161c4762a1bSJed Brown { 162c4762a1bSJed Brown Vec v; 163c4762a1bSJed Brown PetscSection s; 164c4762a1bSJed Brown PetscInt numComp[] = {1}; 165c4762a1bSJed Brown PetscInt dof[] = {0,0,0,1}; 166c4762a1bSJed Brown PetscInt N; 167c4762a1bSJed Brown 168*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetNumFields(dm, 1)); 169*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateSection(dm, NULL, numComp, dof, 0, NULL, NULL, NULL, NULL, &s)); 170*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetLocalSection(dm, s)); 171*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionDestroy(&s)); 172*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateGlobalVector(dm, &v)); 173*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecGetSize(v, &N)); 174c4762a1bSJed Brown if (N != 2) { 175*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMView(dm, PETSC_VIEWER_STDOUT_(comm))); 17698921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "FAIL: Vector size %d != 2", N); 177c4762a1bSJed Brown } 178*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&v)); 179c4762a1bSJed Brown } 180*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 181c4762a1bSJed Brown PetscFunctionReturn(0); 182c4762a1bSJed Brown } 183c4762a1bSJed Brown 184c4762a1bSJed Brown static PetscErrorCode TestDistribution(MPI_Comm comm) 185c4762a1bSJed Brown { 186c4762a1bSJed Brown DM dm, dmDist; 187c4762a1bSJed Brown PetscPartitioner part; 188c4762a1bSJed Brown DMLabel label; 1890fdc7489SMatthew Knepley char filename[PETSC_MAX_PATH_LEN]; 190c4762a1bSJed Brown const char *name = "test label"; 191c4762a1bSJed Brown PetscInt overlap = 0, cStart, cEnd, c; 192c4762a1bSJed Brown PetscMPIInt rank; 193c4762a1bSJed Brown PetscBool flg; 194c4762a1bSJed Brown 195c4762a1bSJed Brown PetscFunctionBegin; 196*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(comm, &rank)); 197*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetString(NULL, NULL, "-filename", filename, sizeof(filename), &flg)); 198c4762a1bSJed Brown if (!flg) PetscFunctionReturn(0); 199*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL, NULL, "-overlap", &overlap, NULL)); 200*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateFromFile(comm, filename, "ex11_plex", PETSC_TRUE, &dm)); 201*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetBasicAdjacency(dm, PETSC_TRUE, PETSC_FALSE)); 202*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateLabel(dm, name)); 203*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, name, &label)); 204*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd)); 205c4762a1bSJed Brown for (c = cStart; c < cEnd; ++c) { 206*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label, c, c)); 207c4762a1bSJed Brown } 208*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelView(label, PETSC_VIEWER_STDOUT_WORLD)); 209*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetPartitioner(dm,&part)); 210*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPartitionerSetFromOptions(part)); 211*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexDistribute(dm, overlap, NULL, &dmDist)); 212c4762a1bSJed Brown if (dmDist) { 213*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 214c4762a1bSJed Brown dm = dmDist; 215c4762a1bSJed Brown } 216*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject) dm, "Mesh")); 217*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMViewFromOptions(dm, NULL, "-dm_view")); 218*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, name, &label)); 219*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelView(label, PETSC_VIEWER_STDOUT_WORLD)); 220*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 221c4762a1bSJed Brown PetscFunctionReturn(0); 222c4762a1bSJed Brown } 223c4762a1bSJed Brown 2240fdc7489SMatthew Knepley static PetscErrorCode TestUniversalLabel(MPI_Comm comm) 2250fdc7489SMatthew Knepley { 2260fdc7489SMatthew Knepley DM dm1, dm2; 2270fdc7489SMatthew Knepley DMLabel bd1, bd2, ulabel; 2280fdc7489SMatthew Knepley DMUniversalLabel universal; 2290fdc7489SMatthew Knepley PetscInt pStart, pEnd, p; 23030602db0SMatthew G. Knepley PetscBool run = PETSC_FALSE, notFile; 2310fdc7489SMatthew Knepley 2320fdc7489SMatthew Knepley PetscFunctionBeginUser; 233*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetBool(NULL, NULL, "-universal", &run, NULL)); 2340fdc7489SMatthew Knepley if (!run) PetscFunctionReturn(0); 23530602db0SMatthew G. Knepley 23630602db0SMatthew G. Knepley char filename[PETSC_MAX_PATH_LEN]; 23730602db0SMatthew G. Knepley PetscBool flg; 23830602db0SMatthew G. Knepley 239*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetString(NULL, NULL, "-filename", filename, sizeof(filename), &flg)); 2400fdc7489SMatthew Knepley if (flg) { 241*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateFromFile(comm, filename, "ex11_plex", PETSC_TRUE, &dm1)); 2420fdc7489SMatthew Knepley } else { 243*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(comm, &dm1)); 244*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dm1, DMPLEX)); 245*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dm1)); 24630602db0SMatthew G. Knepley } 247*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMHasLabel(dm1, "marker", ¬File)); 24830602db0SMatthew G. Knepley if (notFile) { 249*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateLabel(dm1, "Boundary Faces")); 250*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm1, "Boundary Faces", &bd1)); 251*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexMarkBoundaryFaces(dm1, 13, bd1)); 252*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateLabel(dm1, "Boundary")); 253*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm1, "Boundary", &bd2)); 254*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexMarkBoundaryFaces(dm1, 121, bd2)); 255*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexLabelComplete(dm1, bd2)); 2560fdc7489SMatthew Knepley } 257*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject) dm1, "First Mesh")); 258*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMViewFromOptions(dm1, NULL, "-dm_view")); 2590fdc7489SMatthew Knepley 260*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMUniversalLabelCreate(dm1, &universal)); 261*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMUniversalLabelGetLabel(universal, &ulabel)); 262*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectViewFromOptions((PetscObject) ulabel, NULL, "-universal_view")); 2630fdc7489SMatthew Knepley 26430602db0SMatthew G. Knepley if (!notFile) { 2650fdc7489SMatthew Knepley PetscInt Nl, l; 2660fdc7489SMatthew Knepley 267*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMClone(dm1, &dm2)); 268*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetNumLabels(dm2, &Nl)); 2690fdc7489SMatthew Knepley for (l = Nl-1; l >= 0; --l) { 2700fdc7489SMatthew Knepley PetscBool isdepth, iscelltype; 2710fdc7489SMatthew Knepley const char *name; 2720fdc7489SMatthew Knepley 273*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabelName(dm2, l, &name)); 274*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrncmp(name, "depth", 6, &isdepth)); 275*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscStrncmp(name, "celltype", 9, &iscelltype)); 276*5f80ce2aSJacob Faibussowitsch if (!isdepth && !iscelltype) CHKERRQ(DMRemoveLabel(dm2, name, NULL)); 2770fdc7489SMatthew Knepley } 2780fdc7489SMatthew Knepley } else { 279*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(comm, &dm2)); 280*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dm2, DMPLEX)); 281*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dm2)); 2820fdc7489SMatthew Knepley } 283*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject) dm2, "Second Mesh")); 284*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMUniversalLabelCreateLabels(universal, PETSC_TRUE, dm2)); 285*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetChart(dm2, &pStart, &pEnd)); 2860fdc7489SMatthew Knepley for (p = pStart; p < pEnd; ++p) { 2870fdc7489SMatthew Knepley PetscInt val; 2880fdc7489SMatthew Knepley 289*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(ulabel, p, &val)); 2900fdc7489SMatthew Knepley if (val < 0) continue; 291*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMUniversalLabelSetLabelValue(universal, dm2, PETSC_TRUE, p, val)); 2920fdc7489SMatthew Knepley } 293*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMViewFromOptions(dm2, NULL, "-dm_view")); 2940fdc7489SMatthew Knepley 295*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMUniversalLabelDestroy(&universal)); 296*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm1)); 297*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm2)); 2980fdc7489SMatthew Knepley PetscFunctionReturn(0); 2990fdc7489SMatthew Knepley } 3000fdc7489SMatthew Knepley 301c4762a1bSJed Brown int main(int argc, char **argv) 302c4762a1bSJed Brown { 303c4762a1bSJed Brown PetscErrorCode ierr; 304c4762a1bSJed Brown 305c4762a1bSJed Brown ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 306*5f80ce2aSJacob Faibussowitsch /*CHKERRQ(ProcessOptions(PETSC_COMM_WORLD, &user));*/ 307*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestInsertion()); 308*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestEmptyStrata(PETSC_COMM_WORLD)); 309*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestDistribution(PETSC_COMM_WORLD)); 310*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestUniversalLabel(PETSC_COMM_WORLD)); 311c4762a1bSJed Brown ierr = PetscFinalize(); 312c4762a1bSJed Brown return ierr; 313c4762a1bSJed Brown } 314c4762a1bSJed Brown 315c4762a1bSJed Brown /*TEST 316c4762a1bSJed Brown 317c4762a1bSJed Brown test: 318c4762a1bSJed Brown suffix: 0 3190fdc7489SMatthew Knepley requires: triangle 320c4762a1bSJed Brown test: 321c4762a1bSJed Brown suffix: 1 3220fdc7489SMatthew Knepley requires: triangle 323c4762a1bSJed Brown nsize: 2 324c4762a1bSJed Brown args: -petscpartitioner_type simple 325c4762a1bSJed Brown 326c4762a1bSJed Brown testset: 327c4762a1bSJed Brown suffix: gmsh 328c4762a1bSJed Brown args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/square.msh -petscpartitioner_type simple 329c4762a1bSJed Brown test: 330c4762a1bSJed Brown suffix: 1 331c4762a1bSJed Brown nsize: 1 332c4762a1bSJed Brown test: 333c4762a1bSJed Brown suffix: 2 334c4762a1bSJed Brown nsize: 2 335c4762a1bSJed Brown 336c4762a1bSJed Brown testset: 337c4762a1bSJed Brown suffix: exodusii 338c4762a1bSJed Brown requires: exodusii 339c4762a1bSJed Brown args: -filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/2Dgrd.exo -petscpartitioner_type simple 340c4762a1bSJed Brown test: 341c4762a1bSJed Brown suffix: 1 342c4762a1bSJed Brown nsize: 1 343c4762a1bSJed Brown test: 344c4762a1bSJed Brown suffix: 2 345c4762a1bSJed Brown nsize: 2 346c4762a1bSJed Brown 3470fdc7489SMatthew Knepley test: 3480fdc7489SMatthew Knepley suffix: univ 3490fdc7489SMatthew Knepley requires: triangle 3500fdc7489SMatthew Knepley args: -universal -dm_view -universal_view 3510fdc7489SMatthew Knepley 3520fdc7489SMatthew Knepley test: 3530fdc7489SMatthew Knepley # Note that the labels differ because we have multiply-marked some points during EGADS creation 3540fdc7489SMatthew Knepley suffix: univ_egads_sphere 3550fdc7489SMatthew Knepley requires: egads 35630602db0SMatthew G. Knepley args: -universal -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/unit_sphere.egadslite -dm_view -universal_view 3570fdc7489SMatthew Knepley 3580fdc7489SMatthew Knepley test: 3590fdc7489SMatthew Knepley # Note that the labels differ because we have multiply-marked some points during EGADS creation 3600fdc7489SMatthew Knepley suffix: univ_egads_ball 3610fdc7489SMatthew Knepley requires: egads ctetgen 36230602db0SMatthew G. Knepley args: -universal -dm_plex_boundary_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/unit_sphere.egadslite -dm_view -universal_view 3630fdc7489SMatthew Knepley 364c4762a1bSJed Brown TEST*/ 365