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