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