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++) { 38: PetscFree(dd->fieldname[i]); 39: } 40: PetscFree(dd->fieldname); 41: } 42: if (dd->coordinatename) { 43: for (i=0; i<da->dim; i++) { 44: PetscFree(dd->coordinatename[i]); 45: } 46: PetscFree(dd->coordinatename); 47: } 48: ISColoringDestroy(&dd->localcoloring); 49: ISColoringDestroy(&dd->ghostedcoloring); 51: PetscFree(dd->neighbors); 52: PetscFree(dd->dfill); 53: PetscFree(dd->ofill); 54: PetscFree(dd->ofillcols); 55: PetscFree(dd->e); 56: ISDestroy(&dd->ecorners); 58: PetscObjectComposeFunction((PetscObject)da,"DMSetUpGLVisViewer_C",NULL); 60: PetscFree(dd); 61: return 0; 62: }