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