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