Actual source code: dadestroy.c


  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:   DM_DA *dd = (DM_DA *)da->data;

 12:   PetscFunctionBegin;
 13:   /* destroy the external/common part */
 14:   for (PetscInt i = 0; i < DMDA_MAX_WORK_ARRAYS; i++) {
 15:     PetscCall(PetscFree(dd->startghostedout[i]));
 16:     PetscCall(PetscFree(dd->startghostedin[i]));
 17:     PetscCall(PetscFree(dd->startout[i]));
 18:     PetscCall(PetscFree(dd->startin[i]));
 19:   }

 21:   PetscCall(VecScatterDestroy(&dd->gtol));
 22:   PetscCall(VecScatterDestroy(&dd->ltol));
 23:   PetscCall(VecDestroy(&dd->natural));
 24:   PetscCall(VecScatterDestroy(&dd->gton));
 25:   PetscCall(AODestroy(&dd->ao));
 26:   PetscCall(PetscFree(dd->aotype));

 28:   PetscCall(PetscFree(dd->lx));
 29:   PetscCall(PetscFree(dd->ly));
 30:   PetscCall(PetscFree(dd->lz));

 32:   PetscCall(PetscFree(dd->refine_x_hier));
 33:   PetscCall(PetscFree(dd->refine_y_hier));
 34:   PetscCall(PetscFree(dd->refine_z_hier));

 36:   if (dd->fieldname) {
 37:     for (PetscInt i = 0; i < dd->w; i++) PetscCall(PetscFree(dd->fieldname[i]));
 38:     PetscCall(PetscFree(dd->fieldname));
 39:   }
 40:   if (dd->coordinatename) {
 41:     for (PetscInt i = 0; i < da->dim; i++) PetscCall(PetscFree(dd->coordinatename[i]));
 42:     PetscCall(PetscFree(dd->coordinatename));
 43:   }
 44:   PetscCall(ISColoringDestroy(&dd->localcoloring));
 45:   PetscCall(ISColoringDestroy(&dd->ghostedcoloring));

 47:   PetscCall(PetscFree(dd->neighbors));
 48:   PetscCall(PetscFree(dd->dfill));
 49:   PetscCall(PetscFree(dd->ofill));
 50:   PetscCall(PetscFree(dd->ofillcols));
 51:   PetscCall(PetscFree(dd->e));
 52:   PetscCall(ISDestroy(&dd->ecorners));

 54:   PetscCall(PetscObjectComposeFunction((PetscObject)da, "DMSetUpGLVisViewer_C", NULL));

 56:   PetscCall(PetscFree(dd));
 57:   PetscFunctionReturn(PETSC_SUCCESS);
 58: }