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