2: /* 3: Code for manipulating distributed regular arrays in parallel. 4: */ 6: #include <petsc/private/dmdaimpl.h> 8: PetscErrorCode DMDestroy_DA(DM da) 9: { 10: PetscErrorCode i; 11: DM_DA *dd = (DM_DA *)da->data; 13: /* destroy the external/common part */ 14: for (i = 0; i < DMDA_MAX_WORK_ARRAYS; i++) { 15: PetscFree(dd->startghostedout[i]); 16: PetscFree(dd->startghostedin[i]); 17: PetscFree(dd->startout[i]); 18: PetscFree(dd->startin[i]); 19: } 21: VecScatterDestroy(&dd->gtol); 22: VecScatterDestroy(&dd->ltol); 23: VecDestroy(&dd->natural); 24: VecScatterDestroy(&dd->gton); 25: AODestroy(&dd->ao); 26: PetscFree(dd->aotype); 28: PetscFree(dd->lx); 29: PetscFree(dd->ly); 30: PetscFree(dd->lz); 32: PetscFree(dd->refine_x_hier); 33: PetscFree(dd->refine_y_hier); 34: PetscFree(dd->refine_z_hier); 36: if (dd->fieldname) { 37: for (i = 0; i < dd->w; i++) PetscFree(dd->fieldname[i]); 38: PetscFree(dd->fieldname); 39: } 40: if (dd->coordinatename) { 41: for (i = 0; i < da->dim; i++) PetscFree(dd->coordinatename[i]); 42: PetscFree(dd->coordinatename); 43: } 44: ISColoringDestroy(&dd->localcoloring); 45: ISColoringDestroy(&dd->ghostedcoloring); 47: PetscFree(dd->neighbors); 48: PetscFree(dd->dfill); 49: PetscFree(dd->ofill); 50: PetscFree(dd->ofillcols); 51: PetscFree(dd->e); 52: ISDestroy(&dd->ecorners); 54: PetscObjectComposeFunction((PetscObject)da, "DMSetUpGLVisViewer_C", NULL); 56: PetscFree(dd); 57: return 0; 58: }