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

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

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

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

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

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

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

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

 56:   PetscFree(dd);
 57:   return 0;
 58: }