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 12c4762a1bSJed Brown PetscFunctionBegin; 13c4762a1bSJed Brown /* query the number and name of labels*/ 14*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetNumLabels(dm, &numLabels)); 15*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer, "Number of labels: %d\n", numLabels)); 16c4762a1bSJed Brown for (l = 0; l < numLabels; ++l) { 1774d235b2SVaclav Hapla IS labelIS, tmpIS; 1874d235b2SVaclav Hapla 19*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabelName(dm, l, &labelName)); 20*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer, "Label %d: name: %s\n", l, labelName)); 21*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer, "IS of values\n")); 22*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, labelName, &label)); 23*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValueIS(label, &labelIS)); 24*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISOnComm(labelIS, PetscObjectComm((PetscObject)viewer), PETSC_USE_POINTER, &tmpIS)); 25*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPushTab(viewer)); 26*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISView(tmpIS, viewer)); 27*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPopTab(viewer)); 28*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISDestroy(&tmpIS)); 29*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISDestroy(&labelIS)); 30*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer, "\n")); 31c4762a1bSJed Brown } 32c4762a1bSJed Brown /* Making sure that string literals work */ 33*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscViewerASCIIPrintf(viewer,"\n\nCell Set label IS\n")); 34*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "Cell Sets", &label)); 35c4762a1bSJed Brown if (label) { 3674d235b2SVaclav Hapla IS labelIS, tmpIS; 3774d235b2SVaclav Hapla 38*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValueIS(label, &labelIS)); 39*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISOnComm(labelIS, PetscObjectComm((PetscObject)viewer), PETSC_USE_POINTER, &tmpIS)); 40*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISView(tmpIS, viewer)); 41*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISDestroy(&tmpIS)); 42*5f80ce2aSJacob Faibussowitsch CHKERRQ(ISDestroy(&labelIS)); 43c4762a1bSJed Brown } 44c4762a1bSJed Brown PetscFunctionReturn(0); 45c4762a1bSJed Brown } 46c4762a1bSJed Brown 4774d235b2SVaclav Hapla PetscErrorCode CheckLabelsSame(DMLabel label0, DMLabel label1) 4874d235b2SVaclav Hapla { 4974d235b2SVaclav Hapla const char *name0, *name1; 5074d235b2SVaclav Hapla PetscBool same; 5174d235b2SVaclav Hapla char *msg; 5274d235b2SVaclav Hapla 5374d235b2SVaclav Hapla PetscFunctionBegin; 54*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)label0, &name0)); 55*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)label1, &name1)); 56*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelCompare(PETSC_COMM_WORLD, label0, label1, &same, &msg)); 572c71b3e2SJacob Faibussowitsch PetscCheckFalse(same != (PetscBool) !msg,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMLabelCompare returns inconsistent same=%d msg=\"%s\"", same, msg); 582c71b3e2SJacob Faibussowitsch PetscCheckFalse(!same,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels \"%s\" and \"%s\" should not differ! Message:\n%s", name0, name1, msg); 5974d235b2SVaclav Hapla /* Test passing NULL, must not fail */ 60*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelCompare(PETSC_COMM_WORLD, label0, label1, NULL, NULL)); 61*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(msg)); 6274d235b2SVaclav Hapla PetscFunctionReturn(0); 6374d235b2SVaclav Hapla } 6474d235b2SVaclav Hapla 6574d235b2SVaclav Hapla PetscErrorCode CheckLabelsNotSame(DMLabel label0, DMLabel label1) 6674d235b2SVaclav Hapla { 6774d235b2SVaclav Hapla const char *name0, *name1; 6874d235b2SVaclav Hapla PetscBool same; 6974d235b2SVaclav Hapla char *msg; 7074d235b2SVaclav Hapla 7174d235b2SVaclav Hapla PetscFunctionBegin; 72*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)label0, &name0)); 73*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)label1, &name1)); 74*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelCompare(PETSC_COMM_WORLD, label0, label1, &same, &msg)); 752c71b3e2SJacob Faibussowitsch PetscCheckFalse(same != (PetscBool) !msg,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMLabelCompare returns inconsistent same=%d msg=\"%s\"", same, msg); 762c71b3e2SJacob Faibussowitsch PetscCheckFalse(same,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels \"%s\" and \"%s\" should differ!", name0, name1); 77*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD, "Compare label \"%s\" with \"%s\": %s\n", name0, name1, msg)); 78*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(msg)); 7974d235b2SVaclav Hapla PetscFunctionReturn(0); 8074d235b2SVaclav Hapla } 8174d235b2SVaclav Hapla 8274d235b2SVaclav Hapla PetscErrorCode CheckDMLabelsSame(DM dm0, DM dm1) 8374d235b2SVaclav Hapla { 8474d235b2SVaclav Hapla const char *name0, *name1; 8574d235b2SVaclav Hapla PetscBool same; 8674d235b2SVaclav Hapla char *msg; 8774d235b2SVaclav Hapla 8874d235b2SVaclav Hapla PetscFunctionBegin; 89*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)dm0, &name0)); 90*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)dm1, &name1)); 91*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCompareLabels(dm0, dm1, &same, &msg)); 922c71b3e2SJacob Faibussowitsch PetscCheckFalse(same != (PetscBool) !msg,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMCompareLabels returns inconsistent same=%d msg=\"%s\"", same, msg); 932c71b3e2SJacob Faibussowitsch PetscCheckFalse(!same,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels of DMs \"%s\" and \"%s\" should not differ! Message:\n%s", name0, name1, msg); 9474d235b2SVaclav Hapla /* Test passing NULL, must not fail */ 95*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCompareLabels(dm0, dm1, NULL, NULL)); 96*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(msg)); 9774d235b2SVaclav Hapla PetscFunctionReturn(0); 9874d235b2SVaclav Hapla } 9974d235b2SVaclav Hapla 10074d235b2SVaclav Hapla PetscErrorCode CheckDMLabelsNotSame(DM dm0, DM dm1) 10174d235b2SVaclav Hapla { 10274d235b2SVaclav Hapla const char *name0, *name1; 10374d235b2SVaclav Hapla PetscBool same; 10474d235b2SVaclav Hapla char *msg; 10574d235b2SVaclav Hapla 10674d235b2SVaclav Hapla PetscFunctionBegin; 107*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)dm0, &name0)); 108*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectGetName((PetscObject)dm1, &name1)); 109*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCompareLabels(dm0, dm1, &same, &msg)); 1102c71b3e2SJacob Faibussowitsch PetscCheckFalse(same != (PetscBool) !msg,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMCompareLabels returns inconsistent same=%d msg=\"%s\"", same, msg); 1112c71b3e2SJacob Faibussowitsch PetscCheckFalse(same,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels of DMs \"%s\" and \"%s\" should differ!", name0, name1); 112*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD, "Labels of DMs \"%s\" and \"%s\" differ: %s\n", name0, name1, msg)); 113*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(msg)); 11474d235b2SVaclav Hapla PetscFunctionReturn(0); 11574d235b2SVaclav Hapla } 11674d235b2SVaclav Hapla 11774d235b2SVaclav Hapla PetscErrorCode CreateMesh(const char name[], DM *newdm) 118c4762a1bSJed Brown { 119c4762a1bSJed Brown DM dm, dmDist; 120c4762a1bSJed Brown char filename[PETSC_MAX_PATH_LEN]=""; 121c4762a1bSJed Brown PetscBool interpolate = PETSC_FALSE; 122c4762a1bSJed Brown PetscErrorCode ierr; 123c4762a1bSJed Brown 12474d235b2SVaclav Hapla PetscFunctionBegin; 125c4762a1bSJed Brown /* initialize and get options */ 126c4762a1bSJed Brown ierr = PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "DMLabel ex1 Options", "DMLabel");CHKERRQ(ierr); 127*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsString("-i", "filename to read", "ex1.c", filename, filename, sizeof(filename), NULL)); 128*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsBool("-interpolate", "Generate intermediate mesh elements", "ex1.c", interpolate, &interpolate, NULL)); 129c4762a1bSJed Brown ierr = PetscOptionsEnd();CHKERRQ(ierr); 130c4762a1bSJed Brown 131c4762a1bSJed Brown /* create and distribute DM */ 132*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexCreateFromFile(PETSC_COMM_WORLD, filename, "ex1_plex", interpolate, &dm)); 133*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexDistribute(dm, 0, NULL, &dmDist)); 134c4762a1bSJed Brown if (dmDist) { 135*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 136c4762a1bSJed Brown dm = dmDist; 137c4762a1bSJed Brown } 138*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dm)); 139*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)dm, name)); 14074d235b2SVaclav Hapla *newdm = dm; 14174d235b2SVaclav Hapla PetscFunctionReturn(0); 14274d235b2SVaclav Hapla } 143c4762a1bSJed Brown 14474d235b2SVaclav Hapla int main(int argc, char **argv) 14574d235b2SVaclav Hapla { 14674d235b2SVaclav Hapla DM dm; 14774d235b2SVaclav Hapla PetscErrorCode ierr; 14874d235b2SVaclav Hapla 14974d235b2SVaclav Hapla ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 150*5f80ce2aSJacob Faibussowitsch CHKERRQ(CreateMesh("plex0", &dm)); 151c4762a1bSJed Brown /* add custom labels to test adding/removal */ 152c4762a1bSJed Brown { 153c4762a1bSJed Brown DMLabel label0, label1, label2, label3; 154c4762a1bSJed Brown PetscInt p, pStart, pEnd; 155*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetChart(dm, &pStart, &pEnd)); 156c4762a1bSJed Brown /* create label in DM and get from DM */ 157*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateLabel(dm, "label0")); 158*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label0", &label0)); 159c4762a1bSJed Brown /* alternative: create standalone label and add to DM; needs to be destroyed */ 160*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelCreate(PETSC_COMM_SELF, "label1", &label1)); 161*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMAddLabel(dm, label1)); 162c4762a1bSJed Brown 16374d235b2SVaclav Hapla pEnd = PetscMin(pEnd, pStart + 5); 164c4762a1bSJed Brown for (p=pStart; p < pEnd; p++) { 165*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label0, p, 1)); 166*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label1, p, 2)); 167c4762a1bSJed Brown } 168c4762a1bSJed Brown /* duplicate label */ 169*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDuplicate(label0, &label2)); 170*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDuplicate(label1, &label3)); 171*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)label2, "label2")); 172*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)label3, "label3")); 173*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMAddLabel(dm, label2)); 174*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMAddLabel(dm, label3)); 175c4762a1bSJed Brown /* remove the labels in this scope */ 176*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDestroy(&label1)); 177*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDestroy(&label2)); 178*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDestroy(&label3)); 179c4762a1bSJed Brown } 180c4762a1bSJed Brown 181*5f80ce2aSJacob Faibussowitsch CHKERRQ(ViewLabels(dm, PETSC_VIEWER_STDOUT_WORLD)); 182c4762a1bSJed Brown 18374d235b2SVaclav Hapla /* do label perturbations and comparisons */ 18474d235b2SVaclav Hapla { 18574d235b2SVaclav Hapla DMLabel label0, label1, label2, label3; 18674d235b2SVaclav Hapla PetscInt val; 18774d235b2SVaclav Hapla PetscInt p, pStart, pEnd; 18874d235b2SVaclav Hapla 189*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label0", &label0)); 190*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label1", &label1)); 191*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label2", &label2)); 192*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label3", &label3)); 19374d235b2SVaclav Hapla 194*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsNotSame(label0, label1)); 195*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label0, label2)); 196*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label1, label3)); 19774d235b2SVaclav Hapla 198*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetDefaultValue(label1, &val)); 199*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetDefaultValue(label1, 333)); 200*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsNotSame(label1, label3)); 201*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetDefaultValue(label1, val)); 202*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label1, label3)); 20374d235b2SVaclav Hapla 204*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetBounds(label1, &pStart, &pEnd)); 20574d235b2SVaclav Hapla 20674d235b2SVaclav Hapla for (p=pStart; p<pEnd; p++) { 207*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label1, p, &val)); 20874d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 209*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelClearValue(label1, p, val)); 21074d235b2SVaclav Hapla val++; 211*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label1, p, val)); 21274d235b2SVaclav Hapla } 213*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsNotSame(label1, label3)); 21474d235b2SVaclav Hapla for (p=pStart; p<pEnd; p++) { 215*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label1, p, &val)); 21674d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 217*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelClearValue(label1, p, val)); 21874d235b2SVaclav Hapla val--; 219*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label1, p, val)); 22074d235b2SVaclav Hapla } 221*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label1, label3)); 22274d235b2SVaclav Hapla 223*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label3, pEnd-1, &val)); 224*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label3, pEnd, val)); 225*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsNotSame(label1, label3)); 22674d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 227*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelClearValue(label3, pEnd, val)); 228*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label1, label3)); 22974d235b2SVaclav Hapla } 23074d235b2SVaclav Hapla 23174d235b2SVaclav Hapla { 23274d235b2SVaclav Hapla DM dm1; 23374d235b2SVaclav Hapla DMLabel label02, label12; 23474d235b2SVaclav Hapla PetscInt p = 0, val; 23574d235b2SVaclav Hapla 236*5f80ce2aSJacob Faibussowitsch CHKERRQ(CreateMesh("plex1", &dm1)); 237*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckDMLabelsNotSame(dm, dm1)); 23874d235b2SVaclav Hapla 239*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCopyLabels(dm, dm1, PETSC_OWN_POINTER, PETSC_FALSE, DM_COPY_LABELS_REPLACE)); 240*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckDMLabelsSame(dm, dm1)); 24174d235b2SVaclav Hapla 242*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCopyLabels(dm, dm1, PETSC_COPY_VALUES, PETSC_FALSE, DM_COPY_LABELS_REPLACE)); 243*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label2", &label02)); 244*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm1, "label2", &label12)); 245*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label02, label12)); 24674d235b2SVaclav Hapla 247*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelGetValue(label12, p, &val)); 24874d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 249*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelClearValue(label12, p, val)); 250*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label12, p, val+1)); 251*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsNotSame(label02, label12)); 252*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckDMLabelsNotSame(dm, dm1)); 25374d235b2SVaclav Hapla 25474d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 255*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelClearValue(label12, p, val+1)); 256*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelSetValue(label12, p, val)); 257*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckLabelsSame(label02, label12)); 258*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckDMLabelsSame(dm, dm1)); 25974d235b2SVaclav Hapla 260*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)label12, "label12")); 261*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckDMLabelsNotSame(dm, dm1)); 262*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject)label12, "label2")); 263*5f80ce2aSJacob Faibussowitsch CHKERRQ(CheckDMLabelsSame(dm, dm1)); 26474d235b2SVaclav Hapla 265*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm1)); 26674d235b2SVaclav Hapla } 26774d235b2SVaclav Hapla 268c4762a1bSJed Brown /* remove label0 and label1 just to test manual removal; let label3 be removed automatically by DMDestroy() */ 269c4762a1bSJed Brown { 270c4762a1bSJed Brown DMLabel label0, label1, label2; 271*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label0", &label0)); 272*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label1", &label1)); 2732c71b3e2SJacob Faibussowitsch PetscCheckFalse(!label0,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label0 must not be NULL now"); 2742c71b3e2SJacob Faibussowitsch PetscCheckFalse(!label1,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label1 must not be NULL now"); 275*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMRemoveLabel(dm, "label1", NULL)); 276*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMRemoveLabel(dm, "label2", &label2)); 277*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMRemoveLabelBySelf(dm, &label0, PETSC_TRUE)); 278*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label0", &label0)); 279*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label1", &label1)); 2802c71b3e2SJacob Faibussowitsch PetscCheckFalse(label0,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label0 must be NULL now"); 2812c71b3e2SJacob Faibussowitsch PetscCheckFalse(label1,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label1 must be NULL now"); 2822c71b3e2SJacob Faibussowitsch PetscCheckFalse(!label2,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must not be NULL now"); 283*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMRemoveLabelBySelf(dm, &label2, PETSC_FALSE)); /* this should do nothing */ 2842c71b3e2SJacob Faibussowitsch PetscCheckFalse(!label2,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must not be NULL now"); 285*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMLabelDestroy(&label2)); 286*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLabel(dm, "label2", &label2)); 2872c71b3e2SJacob Faibussowitsch PetscCheckFalse(label2,PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must be NULL now"); 288c4762a1bSJed Brown } 289c4762a1bSJed Brown 290*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 291c4762a1bSJed Brown ierr = PetscFinalize(); 292c4762a1bSJed Brown return ierr; 293c4762a1bSJed Brown } 294c4762a1bSJed Brown 295c4762a1bSJed Brown /*TEST 296c4762a1bSJed Brown 297c4762a1bSJed Brown test: 298c4762a1bSJed Brown suffix: 0 29974d235b2SVaclav Hapla nsize: {{1 2}separate output} 300c4762a1bSJed Brown args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo -interpolate 301c4762a1bSJed Brown requires: exodusii 302c4762a1bSJed Brown 303c4762a1bSJed Brown TEST*/ 304