/*@C AODestroy - Destroys an application ordering. Collective on AO Input Parameters: . ao - the application ordering context Level: beginner .keywords: destroy, application ordering .seealso: AOCreate() @*/ PetscErrorCode AODestroy(AO *ao) { PetscErrorCode ierr; PetscFunctionBegin; if (!*ao) PetscFunctionReturn(0); PetscValidHeaderSpecific((*ao),AO_CLASSID,1); if (--((PetscObject)(*ao))->refct > 0) {*ao = 0; PetscFunctionReturn(0);} /* if memory was published with AMS then destroy it */ ierr = PetscObjectDepublish((*ao));CHKERRQ(ierr); /* destroy the internal part */ if ((*ao)->ops->destroy) { ierr = (*(*ao)->ops->destroy)(*ao);CHKERRQ(ierr); } ierr = PetscHeaderDestroy(ao);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@ PetscViewerDestroy - Destroys a PetscViewer. Collective on PetscViewer Input Parameters: . viewer - the PetscViewer to be destroyed. Level: beginner .seealso: PetscViewerSocketOpen(), PetscViewerASCIIOpen(), PetscViewerCreate(), PetscViewerDrawOpen() @*/ PetscErrorCode PetscViewerDestroy(PetscViewer *viewer) { PetscErrorCode ierr; PetscFunctionBegin; if (!*viewer) PetscFunctionReturn(0); PetscValidHeaderSpecific(*viewer,PETSC_VIEWER_CLASSID,1); ierr = PetscViewerFlush(*viewer);CHKERRQ(ierr); if (--((PetscObject)(*viewer))->refct > 0) {*viewer = 0; PetscFunctionReturn(0);} ierr = PetscObjectDepublish(*viewer);CHKERRQ(ierr); if ((*viewer)->ops->destroy) { ierr = (*(*viewer)->ops->destroy)(*viewer);CHKERRQ(ierr); } ierr = PetscHeaderDestroy(viewer);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@C PFDestroy - Destroys PF context that was created with PFCreate(). Collective on PF Input Parameter: . pf - the function context Level: beginner .keywords: PF, destroy .seealso: PFCreate(), PFSet(), PFSetType() @*/ PetscErrorCode PFDestroy(PF *pf) { PetscErrorCode ierr; PetscBool flg = PETSC_FALSE; PetscFunctionBegin; if (!*pf) PetscFunctionReturn(0); PetscValidHeaderSpecific((*pf),PF_CLASSID,1); if (--((PetscObject)(*pf))->refct > 0) PetscFunctionReturn(0); ierr = PetscOptionsGetBool(((PetscObject)(*pf))->prefix,"-pf_view",&flg,PETSC_NULL);CHKERRQ(ierr); if (flg) { PetscViewer viewer; ierr = PetscViewerASCIIGetStdout(((PetscObject)(*pf))->comm,&viewer);CHKERRQ(ierr); ierr = PFView((*pf),viewer);CHKERRQ(ierr); } /* if memory was published with AMS then destroy it */ ierr = PetscObjectDepublish((*pf));CHKERRQ(ierr); if ((*pf)->ops->destroy) {ierr = (*(*pf)->ops->destroy)((*pf)->data);CHKERRQ(ierr);} ierr = PetscHeaderDestroy(pf);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@ DADestroy - Destroys a distributed array. Collective on DA Input Parameter: . da - the distributed array to destroy Level: beginner .keywords: distributed array, destroy .seealso: DACreate1d(), DACreate2d(), DACreate3d() @*/ PetscErrorCode PETSCDM_DLLEXPORT DADestroy(DA da) { PetscErrorCode ierr; PetscErrorCode i; PetscTruth done; PetscFunctionBegin; PetscValidHeaderSpecific(da,DM_COOKIE,1); ierr = DMDestroy_Private((DM)da,&done);CHKERRQ(ierr); if (!done) PetscFunctionReturn(0); /* destroy the internal part */ if (da->ops->destroy) { ierr = (*da->ops->destroy)(da);CHKERRQ(ierr); } /* destroy the external/common part */ for (i=0; i<DA_MAX_AD_ARRAYS; i++) { ierr = PetscFree(da->adstartghostedout[i]);CHKERRQ(ierr); ierr = PetscFree(da->adstartghostedin[i]);CHKERRQ(ierr); ierr = PetscFree(da->adstartout[i]);CHKERRQ(ierr); ierr = PetscFree(da->adstartin[i]);CHKERRQ(ierr); } for (i=0; i<DA_MAX_AD_ARRAYS; i++) { ierr = PetscFree(da->admfstartghostedout[i]);CHKERRQ(ierr); ierr = PetscFree(da->admfstartghostedin[i]);CHKERRQ(ierr); ierr = PetscFree(da->admfstartout[i]);CHKERRQ(ierr); ierr = PetscFree(da->admfstartin[i]);CHKERRQ(ierr); } for (i=0; i<DA_MAX_WORK_ARRAYS; i++) { ierr = PetscFree(da->startghostedout[i]);CHKERRQ(ierr); ierr = PetscFree(da->startghostedin[i]);CHKERRQ(ierr); ierr = PetscFree(da->startout[i]);CHKERRQ(ierr); ierr = PetscFree(da->startin[i]);CHKERRQ(ierr); } /* if memory was published with AMS then destroy it */ ierr = PetscObjectDepublish(da);CHKERRQ(ierr); if (da->ltog) {ierr = VecScatterDestroy(da->ltog);CHKERRQ(ierr);} if (da->gtol) {ierr = VecScatterDestroy(da->gtol);CHKERRQ(ierr);} if (da->ltol) {ierr = VecScatterDestroy(da->ltol);CHKERRQ(ierr);} if (da->natural){ ierr = VecDestroy(da->natural);CHKERRQ(ierr); } if (da->gton) { ierr = VecScatterDestroy(da->gton);CHKERRQ(ierr); } if (da->ao) { ierr = AODestroy(da->ao);CHKERRQ(ierr); } if (da->ltogmap) { ierr = ISLocalToGlobalMappingDestroy(da->ltogmap);CHKERRQ(ierr); } if (da->ltogmapb) { ierr = ISLocalToGlobalMappingDestroy(da->ltogmapb);CHKERRQ(ierr); } ierr = PetscFree(da->lx);CHKERRQ(ierr); ierr = PetscFree(da->ly);CHKERRQ(ierr); ierr = PetscFree(da->lz);CHKERRQ(ierr); if (da->fieldname) { for (i=0; i<da->w; i++) { ierr = PetscStrfree(da->fieldname[i]);CHKERRQ(ierr); } ierr = PetscFree(da->fieldname);CHKERRQ(ierr); } if (da->localcoloring) { ierr = ISColoringDestroy(da->localcoloring);CHKERRQ(ierr); } if (da->ghostedcoloring) { ierr = ISColoringDestroy(da->ghostedcoloring);CHKERRQ(ierr); } if (da->coordinates) {ierr = VecDestroy(da->coordinates);CHKERRQ(ierr);} if (da->ghosted_coordinates) {ierr = VecDestroy(da->ghosted_coordinates);CHKERRQ(ierr);} if (da->da_coordinates && da != da->da_coordinates) {ierr = DADestroy(da->da_coordinates);CHKERRQ(ierr);} ierr = PetscFree(da->neighbors);CHKERRQ(ierr); ierr = PetscFree(da->dfill);CHKERRQ(ierr); ierr = PetscFree(da->ofill);CHKERRQ(ierr); ierr = PetscFree(da->e);CHKERRQ(ierr); ierr = PetscHeaderDestroy(da);CHKERRQ(ierr); PetscFunctionReturn(0); }