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 8d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDestroy_DA(DM da) 9d71ae5a4SJacob Faibussowitsch { 106bf464f9SBarry Smith DM_DA *dd = (DM_DA *)da->data; 1147c6ae99SBarry Smith 1247c6ae99SBarry Smith PetscFunctionBegin; 1347c6ae99SBarry Smith /* destroy the external/common part */ 14*3ba16761SJacob Faibussowitsch for (PetscInt i = 0; i < DMDA_MAX_WORK_ARRAYS; i++) { 159566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedout[i])); 169566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedin[i])); 179566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startout[i])); 189566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startin[i])); 1947c6ae99SBarry Smith } 2047c6ae99SBarry Smith 219566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gtol)); 229566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->ltol)); 239566063dSJacob Faibussowitsch PetscCall(VecDestroy(&dd->natural)); 249566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gton)); 259566063dSJacob Faibussowitsch PetscCall(AODestroy(&dd->ao)); 269566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->aotype)); 2747c6ae99SBarry Smith 289566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lx)); 299566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ly)); 309566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lz)); 3147c6ae99SBarry Smith 329566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_x_hier)); 339566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_y_hier)); 349566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_z_hier)); 35897f7067SBarry Smith 3647c6ae99SBarry Smith if (dd->fieldname) { 37*3ba16761SJacob Faibussowitsch for (PetscInt i = 0; i < dd->w; i++) PetscCall(PetscFree(dd->fieldname[i])); 389566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->fieldname)); 3947c6ae99SBarry Smith } 40109c9344SBarry Smith if (dd->coordinatename) { 41*3ba16761SJacob Faibussowitsch for (PetscInt i = 0; i < da->dim; i++) PetscCall(PetscFree(dd->coordinatename[i])); 429566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->coordinatename)); 43109c9344SBarry Smith } 449566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->localcoloring)); 459566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->ghostedcoloring)); 4647c6ae99SBarry Smith 479566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->neighbors)); 489566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->dfill)); 499566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofill)); 509566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofillcols)); 519566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->e)); 529566063dSJacob Faibussowitsch PetscCall(ISDestroy(&dd->ecorners)); 53a66d4d66SMatthew G Knepley 549566063dSJacob Faibussowitsch PetscCall(PetscObjectComposeFunction((PetscObject)da, "DMSetUpGLVisViewer_C", NULL)); 558135c375SStefano Zampini 569566063dSJacob Faibussowitsch PetscCall(PetscFree(dd)); 57*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 5847c6ae99SBarry Smith } 59