1c4762a1bSJed Brown static char help[] = "Tests DMLabel operations.\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdm.h> 4c4762a1bSJed Brown #include <petscdmplex.h> 5c4762a1bSJed Brown 6*d71ae5a4SJacob Faibussowitsch PetscErrorCode ViewLabels(DM dm, PetscViewer viewer) 7*d71ae5a4SJacob Faibussowitsch { 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*/ 149566063dSJacob Faibussowitsch PetscCall(DMGetNumLabels(dm, &numLabels)); 1563a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(viewer, "Number of labels: %" PetscInt_FMT "\n", numLabels)); 16c4762a1bSJed Brown for (l = 0; l < numLabels; ++l) { 1774d235b2SVaclav Hapla IS labelIS, tmpIS; 1874d235b2SVaclav Hapla 199566063dSJacob Faibussowitsch PetscCall(DMGetLabelName(dm, l, &labelName)); 2063a3b9bcSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(viewer, "Label %" PetscInt_FMT ": name: %s\n", l, labelName)); 219566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(viewer, "IS of values\n")); 229566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, labelName, &label)); 239566063dSJacob Faibussowitsch PetscCall(DMLabelGetValueIS(label, &labelIS)); 249566063dSJacob Faibussowitsch PetscCall(ISOnComm(labelIS, PetscObjectComm((PetscObject)viewer), PETSC_USE_POINTER, &tmpIS)); 259566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPushTab(viewer)); 269566063dSJacob Faibussowitsch PetscCall(ISView(tmpIS, viewer)); 279566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPopTab(viewer)); 289566063dSJacob Faibussowitsch PetscCall(ISDestroy(&tmpIS)); 299566063dSJacob Faibussowitsch PetscCall(ISDestroy(&labelIS)); 309566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(viewer, "\n")); 31c4762a1bSJed Brown } 32c4762a1bSJed Brown /* Making sure that string literals work */ 339566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(viewer, "\n\nCell Set label IS\n")); 349566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "Cell Sets", &label)); 35c4762a1bSJed Brown if (label) { 3674d235b2SVaclav Hapla IS labelIS, tmpIS; 3774d235b2SVaclav Hapla 389566063dSJacob Faibussowitsch PetscCall(DMLabelGetValueIS(label, &labelIS)); 399566063dSJacob Faibussowitsch PetscCall(ISOnComm(labelIS, PetscObjectComm((PetscObject)viewer), PETSC_USE_POINTER, &tmpIS)); 409566063dSJacob Faibussowitsch PetscCall(ISView(tmpIS, viewer)); 419566063dSJacob Faibussowitsch PetscCall(ISDestroy(&tmpIS)); 429566063dSJacob Faibussowitsch PetscCall(ISDestroy(&labelIS)); 43c4762a1bSJed Brown } 44c4762a1bSJed Brown PetscFunctionReturn(0); 45c4762a1bSJed Brown } 46c4762a1bSJed Brown 47*d71ae5a4SJacob Faibussowitsch PetscErrorCode CheckLabelsSame(DMLabel label0, DMLabel label1) 48*d71ae5a4SJacob Faibussowitsch { 4974d235b2SVaclav Hapla const char *name0, *name1; 5074d235b2SVaclav Hapla PetscBool same; 5174d235b2SVaclav Hapla char *msg; 5274d235b2SVaclav Hapla 5374d235b2SVaclav Hapla PetscFunctionBegin; 549566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)label0, &name0)); 559566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)label1, &name1)); 569566063dSJacob Faibussowitsch PetscCall(DMLabelCompare(PETSC_COMM_WORLD, label0, label1, &same, &msg)); 571dca8a05SBarry Smith PetscCheck(same == (PetscBool)!msg, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMLabelCompare returns inconsistent same=%d msg=\"%s\"", same, msg); 5828b400f6SJacob Faibussowitsch PetscCheck(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 */ 609566063dSJacob Faibussowitsch PetscCall(DMLabelCompare(PETSC_COMM_WORLD, label0, label1, NULL, NULL)); 619566063dSJacob Faibussowitsch PetscCall(PetscFree(msg)); 6274d235b2SVaclav Hapla PetscFunctionReturn(0); 6374d235b2SVaclav Hapla } 6474d235b2SVaclav Hapla 65*d71ae5a4SJacob Faibussowitsch PetscErrorCode CheckLabelsNotSame(DMLabel label0, DMLabel label1) 66*d71ae5a4SJacob Faibussowitsch { 6774d235b2SVaclav Hapla const char *name0, *name1; 6874d235b2SVaclav Hapla PetscBool same; 6974d235b2SVaclav Hapla char *msg; 7074d235b2SVaclav Hapla 7174d235b2SVaclav Hapla PetscFunctionBegin; 729566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)label0, &name0)); 739566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)label1, &name1)); 749566063dSJacob Faibussowitsch PetscCall(DMLabelCompare(PETSC_COMM_WORLD, label0, label1, &same, &msg)); 751dca8a05SBarry Smith PetscCheck(same == (PetscBool)!msg, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMLabelCompare returns inconsistent same=%d msg=\"%s\"", same, msg); 7628b400f6SJacob Faibussowitsch PetscCheck(!same, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels \"%s\" and \"%s\" should differ!", name0, name1); 779566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Compare label \"%s\" with \"%s\": %s\n", name0, name1, msg)); 789566063dSJacob Faibussowitsch PetscCall(PetscFree(msg)); 7974d235b2SVaclav Hapla PetscFunctionReturn(0); 8074d235b2SVaclav Hapla } 8174d235b2SVaclav Hapla 82*d71ae5a4SJacob Faibussowitsch PetscErrorCode CheckDMLabelsSame(DM dm0, DM dm1) 83*d71ae5a4SJacob Faibussowitsch { 8474d235b2SVaclav Hapla const char *name0, *name1; 8574d235b2SVaclav Hapla PetscBool same; 8674d235b2SVaclav Hapla char *msg; 8774d235b2SVaclav Hapla 8874d235b2SVaclav Hapla PetscFunctionBegin; 899566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)dm0, &name0)); 909566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)dm1, &name1)); 919566063dSJacob Faibussowitsch PetscCall(DMCompareLabels(dm0, dm1, &same, &msg)); 921dca8a05SBarry Smith PetscCheck(same == (PetscBool)!msg, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMCompareLabels returns inconsistent same=%d msg=\"%s\"", same, msg); 9328b400f6SJacob Faibussowitsch PetscCheck(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 */ 959566063dSJacob Faibussowitsch PetscCall(DMCompareLabels(dm0, dm1, NULL, NULL)); 969566063dSJacob Faibussowitsch PetscCall(PetscFree(msg)); 9774d235b2SVaclav Hapla PetscFunctionReturn(0); 9874d235b2SVaclav Hapla } 9974d235b2SVaclav Hapla 100*d71ae5a4SJacob Faibussowitsch PetscErrorCode CheckDMLabelsNotSame(DM dm0, DM dm1) 101*d71ae5a4SJacob Faibussowitsch { 10274d235b2SVaclav Hapla const char *name0, *name1; 10374d235b2SVaclav Hapla PetscBool same; 10474d235b2SVaclav Hapla char *msg; 10574d235b2SVaclav Hapla 10674d235b2SVaclav Hapla PetscFunctionBegin; 1079566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)dm0, &name0)); 1089566063dSJacob Faibussowitsch PetscCall(PetscObjectGetName((PetscObject)dm1, &name1)); 1099566063dSJacob Faibussowitsch PetscCall(DMCompareLabels(dm0, dm1, &same, &msg)); 1101dca8a05SBarry Smith PetscCheck(same == (PetscBool)!msg, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "DMCompareLabels returns inconsistent same=%d msg=\"%s\"", same, msg); 11128b400f6SJacob Faibussowitsch PetscCheck(!same, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Labels of DMs \"%s\" and \"%s\" should differ!", name0, name1); 1129566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Labels of DMs \"%s\" and \"%s\" differ: %s\n", name0, name1, msg)); 1139566063dSJacob Faibussowitsch PetscCall(PetscFree(msg)); 11474d235b2SVaclav Hapla PetscFunctionReturn(0); 11574d235b2SVaclav Hapla } 11674d235b2SVaclav Hapla 117*d71ae5a4SJacob Faibussowitsch PetscErrorCode CreateMesh(const char name[], DM *newdm) 118*d71ae5a4SJacob Faibussowitsch { 119c4762a1bSJed Brown DM dm, dmDist; 120c4762a1bSJed Brown char filename[PETSC_MAX_PATH_LEN] = ""; 121c4762a1bSJed Brown PetscBool interpolate = PETSC_FALSE; 122c4762a1bSJed Brown 12374d235b2SVaclav Hapla PetscFunctionBegin; 124c4762a1bSJed Brown /* initialize and get options */ 125d0609cedSBarry Smith PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "DMLabel ex1 Options", "DMLabel"); 1269566063dSJacob Faibussowitsch PetscCall(PetscOptionsString("-i", "filename to read", "ex1.c", filename, filename, sizeof(filename), NULL)); 1279566063dSJacob Faibussowitsch PetscCall(PetscOptionsBool("-interpolate", "Generate intermediate mesh elements", "ex1.c", interpolate, &interpolate, NULL)); 128d0609cedSBarry Smith PetscOptionsEnd(); 129c4762a1bSJed Brown 130c4762a1bSJed Brown /* create and distribute DM */ 1319566063dSJacob Faibussowitsch PetscCall(DMPlexCreateFromFile(PETSC_COMM_WORLD, filename, "ex1_plex", interpolate, &dm)); 1329566063dSJacob Faibussowitsch PetscCall(DMPlexDistribute(dm, 0, NULL, &dmDist)); 133c4762a1bSJed Brown if (dmDist) { 1349566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 135c4762a1bSJed Brown dm = dmDist; 136c4762a1bSJed Brown } 1379566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(dm)); 1389566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)dm, name)); 13974d235b2SVaclav Hapla *newdm = dm; 14074d235b2SVaclav Hapla PetscFunctionReturn(0); 14174d235b2SVaclav Hapla } 142c4762a1bSJed Brown 143*d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 144*d71ae5a4SJacob Faibussowitsch { 14574d235b2SVaclav Hapla DM dm; 14674d235b2SVaclav Hapla 147327415f7SBarry Smith PetscFunctionBeginUser; 1489566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 1499566063dSJacob Faibussowitsch PetscCall(CreateMesh("plex0", &dm)); 150c4762a1bSJed Brown /* add custom labels to test adding/removal */ 151c4762a1bSJed Brown { 152c4762a1bSJed Brown DMLabel label0, label1, label2, label3; 153c4762a1bSJed Brown PetscInt p, pStart, pEnd; 1549566063dSJacob Faibussowitsch PetscCall(DMPlexGetChart(dm, &pStart, &pEnd)); 155c4762a1bSJed Brown /* create label in DM and get from DM */ 1569566063dSJacob Faibussowitsch PetscCall(DMCreateLabel(dm, "label0")); 1579566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label0", &label0)); 158c4762a1bSJed Brown /* alternative: create standalone label and add to DM; needs to be destroyed */ 1599566063dSJacob Faibussowitsch PetscCall(DMLabelCreate(PETSC_COMM_SELF, "label1", &label1)); 1609566063dSJacob Faibussowitsch PetscCall(DMAddLabel(dm, label1)); 161c4762a1bSJed Brown 16274d235b2SVaclav Hapla pEnd = PetscMin(pEnd, pStart + 5); 163c4762a1bSJed Brown for (p = pStart; p < pEnd; p++) { 1649566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label0, p, 1)); 1659566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label1, p, 2)); 166c4762a1bSJed Brown } 167c4762a1bSJed Brown /* duplicate label */ 1689566063dSJacob Faibussowitsch PetscCall(DMLabelDuplicate(label0, &label2)); 1699566063dSJacob Faibussowitsch PetscCall(DMLabelDuplicate(label1, &label3)); 1709566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)label2, "label2")); 1719566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)label3, "label3")); 1729566063dSJacob Faibussowitsch PetscCall(DMAddLabel(dm, label2)); 1739566063dSJacob Faibussowitsch PetscCall(DMAddLabel(dm, label3)); 174c4762a1bSJed Brown /* remove the labels in this scope */ 1759566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label1)); 1769566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label2)); 1779566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label3)); 178c4762a1bSJed Brown } 179c4762a1bSJed Brown 1809566063dSJacob Faibussowitsch PetscCall(ViewLabels(dm, PETSC_VIEWER_STDOUT_WORLD)); 181c4762a1bSJed Brown 18274d235b2SVaclav Hapla /* do label perturbations and comparisons */ 18374d235b2SVaclav Hapla { 18474d235b2SVaclav Hapla DMLabel label0, label1, label2, label3; 18574d235b2SVaclav Hapla PetscInt val; 18674d235b2SVaclav Hapla PetscInt p, pStart, pEnd; 18774d235b2SVaclav Hapla 1889566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label0", &label0)); 1899566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label1", &label1)); 1909566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label2", &label2)); 1919566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label3", &label3)); 19274d235b2SVaclav Hapla 1939566063dSJacob Faibussowitsch PetscCall(CheckLabelsNotSame(label0, label1)); 1949566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label0, label2)); 1959566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label1, label3)); 19674d235b2SVaclav Hapla 1979566063dSJacob Faibussowitsch PetscCall(DMLabelGetDefaultValue(label1, &val)); 1989566063dSJacob Faibussowitsch PetscCall(DMLabelSetDefaultValue(label1, 333)); 1999566063dSJacob Faibussowitsch PetscCall(CheckLabelsNotSame(label1, label3)); 2009566063dSJacob Faibussowitsch PetscCall(DMLabelSetDefaultValue(label1, val)); 2019566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label1, label3)); 20274d235b2SVaclav Hapla 2039566063dSJacob Faibussowitsch PetscCall(DMLabelGetBounds(label1, &pStart, &pEnd)); 20474d235b2SVaclav Hapla 20574d235b2SVaclav Hapla for (p = pStart; p < pEnd; p++) { 2069566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label1, p, &val)); 20774d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 2089566063dSJacob Faibussowitsch PetscCall(DMLabelClearValue(label1, p, val)); 20974d235b2SVaclav Hapla val++; 2109566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label1, p, val)); 21174d235b2SVaclav Hapla } 2129566063dSJacob Faibussowitsch PetscCall(CheckLabelsNotSame(label1, label3)); 21374d235b2SVaclav Hapla for (p = pStart; p < pEnd; p++) { 2149566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label1, p, &val)); 21574d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 2169566063dSJacob Faibussowitsch PetscCall(DMLabelClearValue(label1, p, val)); 21774d235b2SVaclav Hapla val--; 2189566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label1, p, val)); 21974d235b2SVaclav Hapla } 2209566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label1, label3)); 22174d235b2SVaclav Hapla 2229566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label3, pEnd - 1, &val)); 2239566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label3, pEnd, val)); 2249566063dSJacob Faibussowitsch PetscCall(CheckLabelsNotSame(label1, label3)); 22574d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 2269566063dSJacob Faibussowitsch PetscCall(DMLabelClearValue(label3, pEnd, val)); 2279566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label1, label3)); 22874d235b2SVaclav Hapla } 22974d235b2SVaclav Hapla 23074d235b2SVaclav Hapla { 23174d235b2SVaclav Hapla DM dm1; 23274d235b2SVaclav Hapla DMLabel label02, label12; 23374d235b2SVaclav Hapla PetscInt p = 0, val; 23474d235b2SVaclav Hapla 2359566063dSJacob Faibussowitsch PetscCall(CreateMesh("plex1", &dm1)); 2369566063dSJacob Faibussowitsch PetscCall(CheckDMLabelsNotSame(dm, dm1)); 23774d235b2SVaclav Hapla 2389566063dSJacob Faibussowitsch PetscCall(DMCopyLabels(dm, dm1, PETSC_OWN_POINTER, PETSC_FALSE, DM_COPY_LABELS_REPLACE)); 2399566063dSJacob Faibussowitsch PetscCall(CheckDMLabelsSame(dm, dm1)); 24074d235b2SVaclav Hapla 2419566063dSJacob Faibussowitsch PetscCall(DMCopyLabels(dm, dm1, PETSC_COPY_VALUES, PETSC_FALSE, DM_COPY_LABELS_REPLACE)); 2429566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label2", &label02)); 2439566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm1, "label2", &label12)); 2449566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label02, label12)); 24574d235b2SVaclav Hapla 2469566063dSJacob Faibussowitsch PetscCall(DMLabelGetValue(label12, p, &val)); 24774d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 2489566063dSJacob Faibussowitsch PetscCall(DMLabelClearValue(label12, p, val)); 2499566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label12, p, val + 1)); 2509566063dSJacob Faibussowitsch PetscCall(CheckLabelsNotSame(label02, label12)); 2519566063dSJacob Faibussowitsch PetscCall(CheckDMLabelsNotSame(dm, dm1)); 25274d235b2SVaclav Hapla 25374d235b2SVaclav Hapla // This is weird. Perhaps we should not need to call DMLabelClearValue() 2549566063dSJacob Faibussowitsch PetscCall(DMLabelClearValue(label12, p, val + 1)); 2559566063dSJacob Faibussowitsch PetscCall(DMLabelSetValue(label12, p, val)); 2569566063dSJacob Faibussowitsch PetscCall(CheckLabelsSame(label02, label12)); 2579566063dSJacob Faibussowitsch PetscCall(CheckDMLabelsSame(dm, dm1)); 25874d235b2SVaclav Hapla 2599566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)label12, "label12")); 2609566063dSJacob Faibussowitsch PetscCall(CheckDMLabelsNotSame(dm, dm1)); 2619566063dSJacob Faibussowitsch PetscCall(PetscObjectSetName((PetscObject)label12, "label2")); 2629566063dSJacob Faibussowitsch PetscCall(CheckDMLabelsSame(dm, dm1)); 26374d235b2SVaclav Hapla 2649566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm1)); 26574d235b2SVaclav Hapla } 26674d235b2SVaclav Hapla 267c4762a1bSJed Brown /* remove label0 and label1 just to test manual removal; let label3 be removed automatically by DMDestroy() */ 268c4762a1bSJed Brown { 269c4762a1bSJed Brown DMLabel label0, label1, label2; 2709566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label0", &label0)); 2719566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label1", &label1)); 27228b400f6SJacob Faibussowitsch PetscCheck(label0, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label0 must not be NULL now"); 27328b400f6SJacob Faibussowitsch PetscCheck(label1, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label1 must not be NULL now"); 2749566063dSJacob Faibussowitsch PetscCall(DMRemoveLabel(dm, "label1", NULL)); 2759566063dSJacob Faibussowitsch PetscCall(DMRemoveLabel(dm, "label2", &label2)); 2769566063dSJacob Faibussowitsch PetscCall(DMRemoveLabelBySelf(dm, &label0, PETSC_TRUE)); 2779566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label0", &label0)); 2789566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label1", &label1)); 27928b400f6SJacob Faibussowitsch PetscCheck(!label0, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label0 must be NULL now"); 28028b400f6SJacob Faibussowitsch PetscCheck(!label1, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label1 must be NULL now"); 28128b400f6SJacob Faibussowitsch PetscCheck(label2, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must not be NULL now"); 2829566063dSJacob Faibussowitsch PetscCall(DMRemoveLabelBySelf(dm, &label2, PETSC_FALSE)); /* this should do nothing */ 28328b400f6SJacob Faibussowitsch PetscCheck(label2, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must not be NULL now"); 2849566063dSJacob Faibussowitsch PetscCall(DMLabelDestroy(&label2)); 2859566063dSJacob Faibussowitsch PetscCall(DMGetLabel(dm, "label2", &label2)); 28628b400f6SJacob Faibussowitsch PetscCheck(!label2, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "label2 must be NULL now"); 287c4762a1bSJed Brown } 288c4762a1bSJed Brown 2899566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 2909566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 291b122ec5aSJacob Faibussowitsch return 0; 292c4762a1bSJed Brown } 293c4762a1bSJed Brown 294c4762a1bSJed Brown /*TEST 295c4762a1bSJed Brown 296c4762a1bSJed Brown test: 297c4762a1bSJed Brown suffix: 0 29874d235b2SVaclav Hapla nsize: {{1 2}separate output} 299c4762a1bSJed Brown args: -i ${wPETSC_DIR}/share/petsc/datafiles/meshes/blockcylinder-50.exo -interpolate 300c4762a1bSJed Brown requires: exodusii 301c4762a1bSJed Brown 302c4762a1bSJed Brown TEST*/ 303