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