1c4762a1bSJed Brown static char help[] = "Tests DMLabel operations.\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdm.h> 4c4762a1bSJed Brown #include <petscdmplex.h> 5c4762a1bSJed Brown 6c4762a1bSJed Brown PetscErrorCode ViewLabels(DM dm, PetscViewer viewer) 7c4762a1bSJed Brown { 8c4762a1bSJed Brown DMLabel label; 9c4762a1bSJed Brown const char *labelName; 10c4762a1bSJed Brown PetscInt numLabels, l; 11c4762a1bSJed Brown PetscErrorCode ierr; 12c4762a1bSJed Brown 13c4762a1bSJed Brown PetscFunctionBegin; 14c4762a1bSJed Brown /* query the number and name of labels*/ 15c4762a1bSJed Brown ierr = DMGetNumLabels(dm, &numLabels);CHKERRQ(ierr); 16c4762a1bSJed Brown ierr = PetscViewerASCIIPrintf(viewer, "Number of labels: %d\n", numLabels);CHKERRQ(ierr); 17c4762a1bSJed Brown for (l = 0; l < numLabels; ++l) { 18*74d235b2SVaclav Hapla IS labelIS, tmpIS; 19*74d235b2SVaclav Hapla 20c4762a1bSJed Brown ierr = DMGetLabelName(dm, l, &labelName);CHKERRQ(ierr); 21c4762a1bSJed Brown ierr = PetscViewerASCIIPrintf(viewer, "Label %d: name: %s\n", l, labelName);CHKERRQ(ierr); 22c4762a1bSJed Brown ierr = PetscViewerASCIIPrintf(viewer, "IS of values\n");CHKERRQ(ierr); 23c4762a1bSJed Brown ierr = DMGetLabel(dm, labelName, &label);CHKERRQ(ierr); 24c4762a1bSJed Brown ierr = DMLabelGetValueIS(label, &labelIS);CHKERRQ(ierr); 25*74d235b2SVaclav Hapla ierr = ISOnComm(labelIS, PetscObjectComm((PetscObject)viewer), PETSC_USE_POINTER, &tmpIS);CHKERRQ(ierr); 26c4762a1bSJed Brown ierr = PetscViewerASCIIPushTab(viewer);CHKERRQ(ierr); 27*74d235b2SVaclav Hapla ierr = ISView(tmpIS, viewer);CHKERRQ(ierr); 28c4762a1bSJed Brown ierr = PetscViewerASCIIPopTab(viewer);CHKERRQ(ierr); 29*74d235b2SVaclav Hapla ierr = ISDestroy(&tmpIS);CHKERRQ(ierr); 30c4762a1bSJed Brown ierr = ISDestroy(&labelIS);CHKERRQ(ierr); 31c4762a1bSJed Brown ierr = PetscViewerASCIIPrintf(viewer, "\n");CHKERRQ(ierr); 32c4762a1bSJed Brown } 33c4762a1bSJed Brown /* Making sure that string literals work */ 34c4762a1bSJed Brown ierr = PetscViewerASCIIPrintf(viewer,"\n\nCell Set label IS\n");CHKERRQ(ierr); 35c4762a1bSJed Brown ierr = DMGetLabel(dm, "Cell Sets", &label);CHKERRQ(ierr); 36c4762a1bSJed Brown if (label) { 37*74d235b2SVaclav Hapla IS labelIS, tmpIS; 38*74d235b2SVaclav Hapla 39c4762a1bSJed Brown ierr = DMLabelGetValueIS(label, &labelIS);CHKERRQ(ierr); 40*74d235b2SVaclav Hapla ierr = ISOnComm(labelIS, PetscObjectComm((PetscObject)viewer), PETSC_USE_POINTER, &tmpIS);CHKERRQ(ierr); 41*74d235b2SVaclav Hapla ierr = ISView(tmpIS, viewer);CHKERRQ(ierr); 42*74d235b2SVaclav Hapla ierr = ISDestroy(&tmpIS);CHKERRQ(ierr); 43c4762a1bSJed Brown ierr = ISDestroy(&labelIS);CHKERRQ(ierr); 44c4762a1bSJed Brown } 45c4762a1bSJed Brown PetscFunctionReturn(0); 46c4762a1bSJed Brown } 47c4762a1bSJed Brown 48*74d235b2SVaclav Hapla PetscErrorCode CheckLabelsSame(DMLabel label0, DMLabel label1) 49*74d235b2SVaclav Hapla { 50*74d235b2SVaclav Hapla const char *name0, *name1; 51*74d235b2SVaclav Hapla PetscBool same; 52*74d235b2SVaclav Hapla char *msg; 53*74d235b2SVaclav Hapla PetscErrorCode ierr; 54*74d235b2SVaclav Hapla 55*74d235b2SVaclav Hapla PetscFunctionBegin; 56*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)label0, &name0);CHKERRQ(ierr); 57*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)label1, &name1);CHKERRQ(ierr); 58*74d235b2SVaclav Hapla ierr = DMLabelCompare(label0, label1, &same, &msg);CHKERRQ(ierr); 59*74d235b2SVaclav Hapla if (same != (PetscBool) !msg) SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMLabelCompare returns inconsistent same=%d msg=\"%s\"", same, msg); 60*74d235b2SVaclav Hapla if (!same) SETERRQ3(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels \"%s\" and \"%s\" should not differ! Message:\n%s", name0, name1, msg); 61*74d235b2SVaclav Hapla /* Test passing NULL, must not fail */ 62*74d235b2SVaclav Hapla ierr = DMLabelCompare(label0, label1, NULL, NULL);CHKERRQ(ierr); 63*74d235b2SVaclav Hapla ierr = PetscFree(msg);CHKERRQ(ierr); 64*74d235b2SVaclav Hapla PetscFunctionReturn(0); 65*74d235b2SVaclav Hapla } 66*74d235b2SVaclav Hapla 67*74d235b2SVaclav Hapla PetscErrorCode CheckLabelsNotSame(DMLabel label0, DMLabel label1) 68*74d235b2SVaclav Hapla { 69*74d235b2SVaclav Hapla const char *name0, *name1; 70*74d235b2SVaclav Hapla PetscBool same; 71*74d235b2SVaclav Hapla char *msg; 72*74d235b2SVaclav Hapla PetscErrorCode ierr; 73*74d235b2SVaclav Hapla 74*74d235b2SVaclav Hapla PetscFunctionBegin; 75*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)label0, &name0);CHKERRQ(ierr); 76*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)label1, &name1);CHKERRQ(ierr); 77*74d235b2SVaclav Hapla ierr = DMLabelCompare(label0, label1, &same, &msg);CHKERRQ(ierr); 78*74d235b2SVaclav Hapla if (same != (PetscBool) !msg) SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMLabelCompare returns inconsistent same=%d msg=\"%s\"", same, msg); 79*74d235b2SVaclav Hapla if (same) SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels \"%s\" and \"%s\" should differ!", name0, name1); 80*74d235b2SVaclav Hapla ierr = PetscPrintf(PETSC_COMM_WORLD, "Compare label \"%s\" with \"%s\": %s\n", name0, name1, msg);CHKERRQ(ierr); 81*74d235b2SVaclav Hapla ierr = PetscFree(msg);CHKERRQ(ierr); 82*74d235b2SVaclav Hapla PetscFunctionReturn(0); 83*74d235b2SVaclav Hapla } 84*74d235b2SVaclav Hapla 85*74d235b2SVaclav Hapla PetscErrorCode CheckDMLabelsSame(DM dm0, DM dm1) 86*74d235b2SVaclav Hapla { 87*74d235b2SVaclav Hapla const char *name0, *name1; 88*74d235b2SVaclav Hapla PetscBool same; 89*74d235b2SVaclav Hapla char *msg; 90*74d235b2SVaclav Hapla PetscErrorCode ierr; 91*74d235b2SVaclav Hapla 92*74d235b2SVaclav Hapla PetscFunctionBegin; 93*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)dm0, &name0);CHKERRQ(ierr); 94*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)dm1, &name1);CHKERRQ(ierr); 95*74d235b2SVaclav Hapla ierr = DMCompareLabels(dm0, dm1, &same, &msg);CHKERRQ(ierr); 96*74d235b2SVaclav Hapla if (same != (PetscBool) !msg) SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMCompareLabels returns inconsistent same=%d msg=\"%s\"", same, msg); 97*74d235b2SVaclav Hapla if (!same) SETERRQ3(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels of DMs \"%s\" and \"%s\" should not differ! Message:\n%s", name0, name1, msg); 98*74d235b2SVaclav Hapla /* Test passing NULL, must not fail */ 99*74d235b2SVaclav Hapla ierr = DMCompareLabels(dm0, dm1, NULL, NULL);CHKERRQ(ierr); 100*74d235b2SVaclav Hapla ierr = PetscFree(msg);CHKERRQ(ierr); 101*74d235b2SVaclav Hapla PetscFunctionReturn(0); 102*74d235b2SVaclav Hapla } 103*74d235b2SVaclav Hapla 104*74d235b2SVaclav Hapla PetscErrorCode CheckDMLabelsNotSame(DM dm0, DM dm1) 105*74d235b2SVaclav Hapla { 106*74d235b2SVaclav Hapla const char *name0, *name1; 107*74d235b2SVaclav Hapla PetscBool same; 108*74d235b2SVaclav Hapla char *msg; 109*74d235b2SVaclav Hapla PetscErrorCode ierr; 110*74d235b2SVaclav Hapla 111*74d235b2SVaclav Hapla PetscFunctionBegin; 112*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)dm0, &name0);CHKERRQ(ierr); 113*74d235b2SVaclav Hapla ierr = PetscObjectGetName((PetscObject)dm1, &name1);CHKERRQ(ierr); 114*74d235b2SVaclav Hapla ierr = DMCompareLabels(dm0, dm1, &same, &msg);CHKERRQ(ierr); 115*74d235b2SVaclav Hapla if (same != (PetscBool) !msg) SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMCompareLabels returns inconsistent same=%d msg=\"%s\"", same, msg); 116*74d235b2SVaclav Hapla if (same) SETERRQ2(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels of DMs \"%s\" and \"%s\" should differ!", name0, name1); 117*74d235b2SVaclav Hapla ierr = PetscPrintf(PETSC_COMM_WORLD, "Labels of DMs \"%s\" and \"%s\" differ: %s\n", name0, name1, msg);CHKERRQ(ierr); 118*74d235b2SVaclav Hapla ierr = PetscFree(msg);CHKERRQ(ierr); 119*74d235b2SVaclav Hapla PetscFunctionReturn(0); 120*74d235b2SVaclav Hapla } 121*74d235b2SVaclav Hapla 122*74d235b2SVaclav Hapla PetscErrorCode CreateMesh(const char name[], DM *newdm) 123c4762a1bSJed Brown { 124c4762a1bSJed Brown DM dm, dmDist; 125c4762a1bSJed Brown char filename[PETSC_MAX_PATH_LEN]=""; 126c4762a1bSJed Brown PetscBool interpolate = PETSC_FALSE; 127c4762a1bSJed Brown PetscErrorCode ierr; 128c4762a1bSJed Brown 129*74d235b2SVaclav Hapla PetscFunctionBegin; 130c4762a1bSJed Brown /* initialize and get options */ 131c4762a1bSJed Brown ierr = PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "DMLabel ex1 Options", "DMLabel");CHKERRQ(ierr); 132c4762a1bSJed Brown ierr = PetscOptionsString("-i", "filename to read", "ex1.c", filename, filename, sizeof(filename), NULL);CHKERRQ(ierr); 133c4762a1bSJed Brown ierr = PetscOptionsBool("-interpolate", "Generate intermediate mesh elements", "ex1.c", interpolate, &interpolate, NULL);CHKERRQ(ierr); 134c4762a1bSJed Brown ierr = PetscOptionsEnd();CHKERRQ(ierr); 135c4762a1bSJed Brown 136c4762a1bSJed Brown /* create and distribute DM */ 137c4762a1bSJed Brown ierr = DMPlexCreateFromFile(PETSC_COMM_WORLD, filename, interpolate, &dm);CHKERRQ(ierr); 138c4762a1bSJed Brown ierr = DMPlexDistribute(dm, 0, NULL, &dmDist);CHKERRQ(ierr); 139c4762a1bSJed Brown if (dmDist) { 140c4762a1bSJed Brown ierr = DMDestroy(&dm);CHKERRQ(ierr); 141c4762a1bSJed Brown dm = dmDist; 142c4762a1bSJed Brown } 143c4762a1bSJed Brown ierr = DMSetFromOptions(dm);CHKERRQ(ierr); 144*74d235b2SVaclav Hapla ierr = PetscObjectSetName((PetscObject)dm, name);CHKERRQ(ierr); 145*74d235b2SVaclav Hapla *newdm = dm; 146*74d235b2SVaclav Hapla PetscFunctionReturn(0); 147*74d235b2SVaclav Hapla } 148c4762a1bSJed Brown 149*74d235b2SVaclav Hapla int main(int argc, char **argv) 150*74d235b2SVaclav Hapla { 151*74d235b2SVaclav Hapla DM dm; 152*74d235b2SVaclav Hapla PetscErrorCode ierr; 153*74d235b2SVaclav Hapla 154*74d235b2SVaclav Hapla ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 155*74d235b2SVaclav Hapla ierr = CreateMesh("plex0", &dm);CHKERRQ(ierr); 156c4762a1bSJed Brown /* add custom labels to test adding/removal */ 157c4762a1bSJed Brown { 158c4762a1bSJed Brown DMLabel label0, label1, label2, label3; 159c4762a1bSJed Brown PetscInt p, pStart, pEnd; 160c4762a1bSJed Brown ierr = DMPlexGetChart(dm, &pStart, &pEnd);CHKERRQ(ierr); 161c4762a1bSJed Brown /* create label in DM and get from DM */ 162c4762a1bSJed Brown ierr = DMCreateLabel(dm, "label0");CHKERRQ(ierr); 163c4762a1bSJed Brown ierr = DMGetLabel(dm, "label0", &label0);CHKERRQ(ierr); 164c4762a1bSJed Brown /* alternative: create standalone label and add to DM; needs to be destroyed */ 165c4762a1bSJed Brown ierr = DMLabelCreate(PETSC_COMM_SELF, "label1", &label1);CHKERRQ(ierr); 166c4762a1bSJed Brown ierr = DMAddLabel(dm, label1);CHKERRQ(ierr); 167c4762a1bSJed Brown 168*74d235b2SVaclav Hapla pEnd = PetscMin(pEnd, pStart + 5); 169c4762a1bSJed Brown for (p=pStart; p < pEnd; p++) { 170c4762a1bSJed Brown ierr = DMLabelSetValue(label0, p, 1);CHKERRQ(ierr); 171c4762a1bSJed Brown ierr = DMLabelSetValue(label1, p, 2);CHKERRQ(ierr); 172c4762a1bSJed Brown } 173c4762a1bSJed Brown /* duplicate label */ 174c4762a1bSJed Brown ierr = DMLabelDuplicate(label0, &label2);CHKERRQ(ierr); 175c4762a1bSJed Brown ierr = DMLabelDuplicate(label1, &label3);CHKERRQ(ierr); 176c4762a1bSJed Brown ierr = PetscObjectSetName((PetscObject)label2, "label2");CHKERRQ(ierr); 177c4762a1bSJed Brown ierr = PetscObjectSetName((PetscObject)label3, "label3");CHKERRQ(ierr); 178c4762a1bSJed Brown ierr = DMAddLabel(dm, label2);CHKERRQ(ierr); 179c4762a1bSJed Brown ierr = DMAddLabel(dm, label3);CHKERRQ(ierr); 180c4762a1bSJed Brown /* remove the labels in this scope */ 181c4762a1bSJed Brown ierr = DMLabelDestroy(&label1);CHKERRQ(ierr); 182c4762a1bSJed Brown ierr = DMLabelDestroy(&label2);CHKERRQ(ierr); 183c4762a1bSJed Brown ierr = DMLabelDestroy(&label3);CHKERRQ(ierr); 184c4762a1bSJed Brown } 185c4762a1bSJed Brown 186c4762a1bSJed Brown ierr = ViewLabels(dm, PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 187c4762a1bSJed Brown 188*74d235b2SVaclav Hapla /* do label perturbations and comparisons */ 189*74d235b2SVaclav Hapla { 190*74d235b2SVaclav Hapla DMLabel label0, label1, label2, label3; 191*74d235b2SVaclav Hapla PetscInt val; 192*74d235b2SVaclav Hapla PetscInt p, pStart, pEnd; 193*74d235b2SVaclav Hapla 194*74d235b2SVaclav Hapla ierr = DMGetLabel(dm, "label0", &label0);CHKERRQ(ierr); 195*74d235b2SVaclav Hapla ierr = DMGetLabel(dm, "label1", &label1);CHKERRQ(ierr); 196*74d235b2SVaclav Hapla ierr = DMGetLabel(dm, "label2", &label2);CHKERRQ(ierr); 197*74d235b2SVaclav Hapla ierr = DMGetLabel(dm, "label3", &label3);CHKERRQ(ierr); 198*74d235b2SVaclav Hapla 199*74d235b2SVaclav Hapla ierr = CheckLabelsNotSame(label0, label1);CHKERRQ(ierr); 200*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label0, label2);CHKERRQ(ierr); 201*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label1, label3);CHKERRQ(ierr); 202*74d235b2SVaclav Hapla 203*74d235b2SVaclav Hapla ierr = DMLabelGetDefaultValue(label1, &val);CHKERRQ(ierr); 204*74d235b2SVaclav Hapla ierr = DMLabelSetDefaultValue(label1, 333);CHKERRQ(ierr); 205*74d235b2SVaclav Hapla ierr = CheckLabelsNotSame(label1, label3);CHKERRQ(ierr); 206*74d235b2SVaclav Hapla ierr = DMLabelSetDefaultValue(label1, val);CHKERRQ(ierr); 207*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label1, label3);CHKERRQ(ierr); 208*74d235b2SVaclav Hapla 209*74d235b2SVaclav Hapla ierr = DMLabelGetBounds(label1, &pStart, &pEnd);CHKERRQ(ierr); 210*74d235b2SVaclav Hapla 211*74d235b2SVaclav Hapla for (p=pStart; p<pEnd; p++) { 212*74d235b2SVaclav Hapla ierr = DMLabelGetValue(label1, p, &val);CHKERRQ(ierr); 213*74d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 214*74d235b2SVaclav Hapla ierr = DMLabelClearValue(label1, p, val);CHKERRQ(ierr); 215*74d235b2SVaclav Hapla val++; 216*74d235b2SVaclav Hapla ierr = DMLabelSetValue(label1, p, val);CHKERRQ(ierr); 217*74d235b2SVaclav Hapla } 218*74d235b2SVaclav Hapla ierr = CheckLabelsNotSame(label1, label3);CHKERRQ(ierr); 219*74d235b2SVaclav Hapla for (p=pStart; p<pEnd; p++) { 220*74d235b2SVaclav Hapla ierr = DMLabelGetValue(label1, p, &val);CHKERRQ(ierr); 221*74d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 222*74d235b2SVaclav Hapla ierr = DMLabelClearValue(label1, p, val);CHKERRQ(ierr); 223*74d235b2SVaclav Hapla val--; 224*74d235b2SVaclav Hapla ierr = DMLabelSetValue(label1, p, val);CHKERRQ(ierr); 225*74d235b2SVaclav Hapla } 226*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label1, label3);CHKERRQ(ierr); 227*74d235b2SVaclav Hapla 228*74d235b2SVaclav Hapla ierr = DMLabelGetValue(label3, pEnd-1, &val);CHKERRQ(ierr); 229*74d235b2SVaclav Hapla ierr = DMLabelSetValue(label3, pEnd, val);CHKERRQ(ierr); 230*74d235b2SVaclav Hapla ierr = CheckLabelsNotSame(label1, label3);CHKERRQ(ierr); 231*74d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 232*74d235b2SVaclav Hapla ierr = DMLabelClearValue(label3, pEnd, val);CHKERRQ(ierr); 233*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label1, label3);CHKERRQ(ierr); 234*74d235b2SVaclav Hapla } 235*74d235b2SVaclav Hapla 236*74d235b2SVaclav Hapla { 237*74d235b2SVaclav Hapla DM dm1; 238*74d235b2SVaclav Hapla DMLabel label02, label12; 239*74d235b2SVaclav Hapla PetscInt p = 0, val; 240*74d235b2SVaclav Hapla 241*74d235b2SVaclav Hapla ierr = CreateMesh("plex1", &dm1);CHKERRQ(ierr); 242*74d235b2SVaclav Hapla ierr = CheckDMLabelsNotSame(dm, dm1);CHKERRQ(ierr); 243*74d235b2SVaclav Hapla 244*74d235b2SVaclav Hapla ierr = DMCopyLabels(dm, dm1, PETSC_OWN_POINTER, PETSC_FALSE, DM_COPY_LABELS_REPLACE);CHKERRQ(ierr); 245*74d235b2SVaclav Hapla ierr = CheckDMLabelsSame(dm, dm1);CHKERRQ(ierr); 246*74d235b2SVaclav Hapla 247*74d235b2SVaclav Hapla ierr = DMCopyLabels(dm, dm1, PETSC_COPY_VALUES, PETSC_FALSE, DM_COPY_LABELS_REPLACE);CHKERRQ(ierr); 248*74d235b2SVaclav Hapla ierr = DMGetLabel(dm, "label2", &label02);CHKERRQ(ierr); 249*74d235b2SVaclav Hapla ierr = DMGetLabel(dm1, "label2", &label12);CHKERRQ(ierr); 250*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label02, label12);CHKERRQ(ierr); 251*74d235b2SVaclav Hapla 252*74d235b2SVaclav Hapla ierr = DMLabelGetValue(label12, p, &val);CHKERRQ(ierr); 253*74d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 254*74d235b2SVaclav Hapla ierr = DMLabelClearValue(label12, p, val);CHKERRQ(ierr); 255*74d235b2SVaclav Hapla ierr = DMLabelSetValue(label12, p, val+1);CHKERRQ(ierr); 256*74d235b2SVaclav Hapla ierr = CheckLabelsNotSame(label02, label12);CHKERRQ(ierr); 257*74d235b2SVaclav Hapla ierr = CheckDMLabelsNotSame(dm, dm1);CHKERRQ(ierr); 258*74d235b2SVaclav Hapla 259*74d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 260*74d235b2SVaclav Hapla ierr = DMLabelClearValue(label12, p, val+1);CHKERRQ(ierr); 261*74d235b2SVaclav Hapla ierr = DMLabelSetValue(label12, p, val);CHKERRQ(ierr); 262*74d235b2SVaclav Hapla ierr = CheckLabelsSame(label02, label12);CHKERRQ(ierr); 263*74d235b2SVaclav Hapla ierr = CheckDMLabelsSame(dm, dm1);CHKERRQ(ierr); 264*74d235b2SVaclav Hapla 265*74d235b2SVaclav Hapla ierr = PetscObjectSetName((PetscObject)label12, "label12");CHKERRQ(ierr); 266*74d235b2SVaclav Hapla ierr = CheckDMLabelsNotSame(dm, dm1);CHKERRQ(ierr); 267*74d235b2SVaclav Hapla ierr = PetscObjectSetName((PetscObject)label12, "label2");CHKERRQ(ierr); 268*74d235b2SVaclav Hapla ierr = CheckDMLabelsSame(dm, dm1);CHKERRQ(ierr); 269*74d235b2SVaclav Hapla 270*74d235b2SVaclav Hapla ierr = DMDestroy(&dm1);CHKERRQ(ierr); 271*74d235b2SVaclav Hapla } 272*74d235b2SVaclav Hapla 273c4762a1bSJed Brown /* remove label0 and label1 just to test manual removal; let label3 be removed automatically by DMDestroy() */ 274c4762a1bSJed Brown { 275c4762a1bSJed Brown DMLabel label0, label1, label2; 276c4762a1bSJed Brown ierr = DMGetLabel(dm, "label0", &label0);CHKERRQ(ierr); 277c4762a1bSJed Brown ierr = DMGetLabel(dm, "label1", &label1);CHKERRQ(ierr); 278c4762a1bSJed Brown if (!label0) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label0 must not be NULL now"); 279c4762a1bSJed Brown if (!label1) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label1 must not be NULL now"); 280c4762a1bSJed Brown ierr = DMRemoveLabel(dm, "label1", NULL);CHKERRQ(ierr); 281c4762a1bSJed Brown ierr = DMRemoveLabel(dm, "label2", &label2);CHKERRQ(ierr); 282c4762a1bSJed Brown ierr = DMRemoveLabelBySelf(dm, &label0, PETSC_TRUE);CHKERRQ(ierr); 283c4762a1bSJed Brown ierr = DMGetLabel(dm, "label0", &label0);CHKERRQ(ierr); 284c4762a1bSJed Brown ierr = DMGetLabel(dm, "label1", &label1);CHKERRQ(ierr); 285c4762a1bSJed Brown if (label0) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label0 must be NULL now"); 286c4762a1bSJed Brown if (label1) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label1 must be NULL now"); 287c4762a1bSJed Brown if (!label2) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must not be NULL now"); 288c4762a1bSJed Brown ierr = DMRemoveLabelBySelf(dm, &label2, PETSC_FALSE);CHKERRQ(ierr); /* this should do nothing */ 289c4762a1bSJed Brown if (!label2) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must not be NULL now"); 290c4762a1bSJed Brown ierr = DMLabelDestroy(&label2);CHKERRQ(ierr); 291c4762a1bSJed Brown ierr = DMGetLabel(dm, "label2", &label2);CHKERRQ(ierr); 292c4762a1bSJed Brown if (label2) SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must be NULL now"); 293c4762a1bSJed Brown } 294c4762a1bSJed Brown 295c4762a1bSJed Brown ierr = DMDestroy(&dm);CHKERRQ(ierr); 296c4762a1bSJed Brown ierr = PetscFinalize(); 297c4762a1bSJed Brown return ierr; 298c4762a1bSJed Brown } 299c4762a1bSJed Brown 300c4762a1bSJed Brown /*TEST 301c4762a1bSJed Brown 302c4762a1bSJed Brown test: 303c4762a1bSJed Brown suffix: 0 304*74d235b2SVaclav Hapla nsize: {{1 2}separate output} 305c4762a1bSJed Brown args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo -interpolate 306c4762a1bSJed Brown requires: exodusii 307c4762a1bSJed Brown 308c4762a1bSJed Brown TEST*/ 309