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 8*d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDestroy_DA(DM da) 9*d71ae5a4SJacob Faibussowitsch { 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++) { 169566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedout[i])); 179566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedin[i])); 189566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startout[i])); 199566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startin[i])); 2047c6ae99SBarry Smith } 2147c6ae99SBarry Smith 229566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gtol)); 239566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->ltol)); 249566063dSJacob Faibussowitsch PetscCall(VecDestroy(&dd->natural)); 259566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gton)); 269566063dSJacob Faibussowitsch PetscCall(AODestroy(&dd->ao)); 279566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->aotype)); 2847c6ae99SBarry Smith 299566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lx)); 309566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ly)); 319566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lz)); 3247c6ae99SBarry Smith 339566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_x_hier)); 349566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_y_hier)); 359566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_z_hier)); 36897f7067SBarry Smith 3747c6ae99SBarry Smith if (dd->fieldname) { 3848a46eb9SPierre Jolivet for (i = 0; i < dd->w; i++) PetscCall(PetscFree(dd->fieldname[i])); 399566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->fieldname)); 4047c6ae99SBarry Smith } 41109c9344SBarry Smith if (dd->coordinatename) { 4248a46eb9SPierre Jolivet for (i = 0; i < da->dim; i++) PetscCall(PetscFree(dd->coordinatename[i])); 439566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->coordinatename)); 44109c9344SBarry Smith } 459566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->localcoloring)); 469566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->ghostedcoloring)); 4747c6ae99SBarry Smith 489566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->neighbors)); 499566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->dfill)); 509566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofill)); 519566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofillcols)); 529566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->e)); 539566063dSJacob Faibussowitsch PetscCall(ISDestroy(&dd->ecorners)); 54a66d4d66SMatthew G Knepley 559566063dSJacob Faibussowitsch PetscCall(PetscObjectComposeFunction((PetscObject)da, "DMSetUpGLVisViewer_C", NULL)); 568135c375SStefano Zampini 579566063dSJacob Faibussowitsch PetscCall(PetscFree(dd)); 5847c6ae99SBarry Smith PetscFunctionReturn(0); 5947c6ae99SBarry Smith } 60