147c6ae99SBarry Smith 247c6ae99SBarry Smith /* 347c6ae99SBarry Smith Code for manipulating distributed regular arrays in parallel. 447c6ae99SBarry Smith */ 547c6ae99SBarry Smith 6af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h> /*I "petscdmda.h" I*/ 747c6ae99SBarry Smith 86bf464f9SBarry Smith PetscErrorCode DMDestroy_DA(DM da) 947c6ae99SBarry Smith { 1047c6ae99SBarry Smith PetscErrorCode i; 116bf464f9SBarry Smith DM_DA *dd = (DM_DA*)da->data; 1247c6ae99SBarry Smith 1347c6ae99SBarry Smith PetscFunctionBegin; 1447c6ae99SBarry Smith /* destroy the external/common part */ 15aa219208SBarry Smith for (i=0; i<DMDA_MAX_WORK_ARRAYS; i++) { 16*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedout[i])); 17*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedin[i])); 18*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startout[i])); 19*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startin[i])); 2047c6ae99SBarry Smith } 2147c6ae99SBarry Smith 22*9566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gtol)); 23*9566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->ltol)); 24*9566063dSJacob Faibussowitsch PetscCall(VecDestroy(&dd->natural)); 25*9566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gton)); 26*9566063dSJacob Faibussowitsch PetscCall(AODestroy(&dd->ao)); 27*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->aotype)); 2847c6ae99SBarry Smith 29*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lx)); 30*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ly)); 31*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lz)); 3247c6ae99SBarry Smith 33*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_x_hier)); 34*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_y_hier)); 35*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_z_hier)); 36897f7067SBarry Smith 3747c6ae99SBarry Smith if (dd->fieldname) { 3847c6ae99SBarry Smith for (i=0; i<dd->w; i++) { 39*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->fieldname[i])); 4047c6ae99SBarry Smith } 41*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->fieldname)); 4247c6ae99SBarry Smith } 43109c9344SBarry Smith if (dd->coordinatename) { 44c73cfb54SMatthew G. Knepley for (i=0; i<da->dim; i++) { 45*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->coordinatename[i])); 46109c9344SBarry Smith } 47*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->coordinatename)); 48109c9344SBarry Smith } 49*9566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->localcoloring)); 50*9566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->ghostedcoloring)); 5147c6ae99SBarry Smith 52*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->neighbors)); 53*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->dfill)); 54*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofill)); 55*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofillcols)); 56*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->e)); 57*9566063dSJacob Faibussowitsch PetscCall(ISDestroy(&dd->ecorners)); 58a66d4d66SMatthew G Knepley 59*9566063dSJacob Faibussowitsch PetscCall(PetscObjectComposeFunction((PetscObject)da,"DMSetUpGLVisViewer_C",NULL)); 608135c375SStefano Zampini 61*9566063dSJacob Faibussowitsch PetscCall(PetscFree(dd)); 6247c6ae99SBarry Smith PetscFunctionReturn(0); 6347c6ae99SBarry Smith } 64