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: }