/*@C DMPlexClearLabelValue - Remove a point from a Sieve Label with given value Not Collective Input Parameters: + dm - The DMPlex object . name - The label name . point - The mesh point - value - The label value for this point Output Parameter: Level: beginner .keywords: mesh .seealso: DMLabelClearValue(), DMPlexSetLabelValue(), DMPlexGetStratumIS() @*/ PetscErrorCode DMPlexClearLabelValue(DM dm, const char name[], PetscInt point, PetscInt value) { DMLabel label; PetscErrorCode ierr; PetscFunctionBegin; PetscValidHeaderSpecific(dm, DM_CLASSID, 1); PetscValidCharPointer(name, 2); ierr = DMPlexGetLabel(dm, name, &label);CHKERRQ(ierr); if (!label) PetscFunctionReturn(0); ierr = DMLabelClearValue(label, point, value);CHKERRQ(ierr); PetscFunctionReturn(0); }
PetscErrorCode TestClear(DMLabel label, AppCtx *user) { PetscInt pStart = user->pStart, pEnd = user->pEnd, p; PetscInt defaultValue; PetscErrorCode ierr; PetscFunctionBegin; ierr = DMLabelGetDefaultValue(label,&defaultValue);CHKERRQ(ierr); for (p = pStart; p < pEnd; p++) { PetscInt val; PetscBool hasPoint; ierr = DMLabelGetValue(label,p,&val);CHKERRQ(ierr); if (val != defaultValue) { ierr = DMLabelClearValue(label,p,val);CHKERRQ(ierr); } ierr = DMLabelGetValue(label,p,&val);CHKERRQ(ierr); ierr = DMLabelHasPoint(label,p,&hasPoint);CHKERRQ(ierr); if (val != defaultValue) SETERRQ3(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Expected default value %D after clearing point %D, got %D",defaultValue,p,val); if (hasPoint) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_PLIB,"Label contains %D after clearing",p); } PetscFunctionReturn(0); }