/*@ PetscDrawLGDestroy - Frees all space taken up by line graph data structure. Collective over PetscDrawLG Input Parameter: . lg - the line graph context Level: intermediate .seealso: PetscDrawLGCreate() @*/ PetscErrorCode PetscDrawLGDestroy(PetscDrawLG *lg) { PetscErrorCode ierr; PetscInt i; PetscFunctionBegin; if (!*lg) PetscFunctionReturn(0); if (((PetscObject)(*lg))->classid != PETSC_DRAW_CLASSID) { PetscValidHeaderSpecific(*lg,PETSC_DRAWLG_CLASSID,1); } if (--((PetscObject)(*lg))->refct > 0) {*lg = 0; PetscFunctionReturn(0);} if (((PetscObject)(*lg))->classid == PETSC_DRAW_CLASSID) { ierr = PetscObjectDestroy((PetscObject*)lg);CHKERRQ(ierr); PetscFunctionReturn(0); } if ((*lg)->legend) { for (i=0; i<(*lg)->dim; i++) { ierr = PetscFree((*lg)->legend[i]);CHKERRQ(ierr); } ierr = PetscFree((*lg)->legend);CHKERRQ(ierr); } ierr = PetscFree((*lg)->colors);CHKERRQ(ierr); ierr = PetscDrawAxisDestroy(&(*lg)->axis);CHKERRQ(ierr); ierr = PetscFree2((*lg)->x,(*lg)->y);CHKERRQ(ierr); ierr = PetscHeaderDestroy(lg);CHKERRQ(ierr); PetscFunctionReturn(0); }
/*@C DMMGDestroy - Destroys a DA based multigrid solver object. Collective on DMMG Input Parameter: . - the context Level: advanced .seealso DMMGCreate() @*/ PetscErrorCode PETSCSNES_DLLEXPORT DMMGDestroy(DMMG *dmmg) { PetscErrorCode ierr; PetscInt i,nlevels = dmmg[0]->nlevels; PetscFunctionBegin; if (!dmmg) SETERRQ(PETSC_ERR_ARG_NULL,"Passing null as DMMG"); for (i=1; i<nlevels; i++) { if (dmmg[i]->R) {ierr = MatDestroy(dmmg[i]->R);CHKERRQ(ierr);} } for (i=0; i<nlevels; i++) { ierr = PetscStrfree(dmmg[i]->prefix);CHKERRQ(ierr); ierr = PetscStrfree(dmmg[i]->mtype);CHKERRQ(ierr); if (dmmg[i]->dm) {ierr = DMDestroy(dmmg[i]->dm);CHKERRQ(ierr);} if (dmmg[i]->x) {ierr = VecDestroy(dmmg[i]->x);CHKERRQ(ierr);} if (dmmg[i]->b) {ierr = VecDestroy(dmmg[i]->b);CHKERRQ(ierr);} if (dmmg[i]->r) {ierr = VecDestroy(dmmg[i]->r);CHKERRQ(ierr);} if (dmmg[i]->work1) {ierr = VecDestroy(dmmg[i]->work1);CHKERRQ(ierr);} if (dmmg[i]->w) {ierr = VecDestroy(dmmg[i]->w);CHKERRQ(ierr);} if (dmmg[i]->work2) {ierr = VecDestroy(dmmg[i]->work2);CHKERRQ(ierr);} if (dmmg[i]->lwork1) {ierr = VecDestroy(dmmg[i]->lwork1);CHKERRQ(ierr);} if (dmmg[i]->B) {ierr = MatDestroy(dmmg[i]->B);CHKERRQ(ierr);} if (dmmg[i]->J) {ierr = MatDestroy(dmmg[i]->J);CHKERRQ(ierr);} if (dmmg[i]->Rscale) {ierr = VecDestroy(dmmg[i]->Rscale);CHKERRQ(ierr);} if (dmmg[i]->fdcoloring){ierr = MatFDColoringDestroy(dmmg[i]->fdcoloring);CHKERRQ(ierr);} if (dmmg[i]->ksp && !dmmg[i]->snes) {ierr = KSPDestroy(dmmg[i]->ksp);CHKERRQ(ierr);} if (dmmg[i]->snes) {ierr = PetscObjectDestroy((PetscObject)dmmg[i]->snes);CHKERRQ(ierr);} if (dmmg[i]->inject) {ierr = VecScatterDestroy(dmmg[i]->inject);CHKERRQ(ierr);} ierr = PetscFree(dmmg[i]);CHKERRQ(ierr); } ierr = PetscFree(dmmg);CHKERRQ(ierr); PetscFunctionReturn(0); }
static PetscErrorCode PetscViewerFlush_VTK(PetscViewer viewer) { PetscViewer_VTK *vtk = (PetscViewer_VTK*)viewer->data; PetscErrorCode ierr; PetscViewerVTKObjectLink link,next; PetscFunctionBegin; if (vtk->link && (!vtk->dm || !vtk->write)) SETERRQ(PetscObjectComm((PetscObject)viewer),PETSC_ERR_ARG_WRONGSTATE,"No fields or no grid"); if (vtk->write) {ierr = (*vtk->write)(vtk->dm,viewer);CHKERRQ(ierr);} for (link=vtk->link; link; link=next) { next = link->next; ierr = PetscObjectDestroy(&link->vec);CHKERRQ(ierr); ierr = PetscFree(link);CHKERRQ(ierr); } ierr = PetscObjectDestroy(&vtk->dm);CHKERRQ(ierr); vtk->write = NULL; PetscFunctionReturn(0); }
/*@C PetscObjectRegisterDestroyAll - Frees all the PETSc objects that have been registered with PetscObjectRegisterDestroy(). Called by PetscFinalize() Logically Collective on individual PetscObjects Level: developer .seealso: PetscObjectRegisterDestroy() @*/ PetscErrorCode PetscObjectRegisterDestroyAll(void) { PetscErrorCode ierr; PetscInt i; PetscFunctionBegin; for (i=0; i<PetscObjectRegisterDestroy_Count; i++) { ierr = PetscObjectDestroy(&PetscObjectRegisterDestroy_Objects[i]);CHKERRQ(ierr); } PetscObjectRegisterDestroy_Count = 0; PetscFunctionReturn(0); }
PETSC_EXTERN void PETSC_STDCALL petscobjectdestroy_(PetscObject *obj, int *__ierr ){ *__ierr = PetscObjectDestroy(obj); }