147c6ae99SBarry Smith /* 247c6ae99SBarry Smith Code for manipulating distributed regular arrays in parallel. 347c6ae99SBarry Smith */ 447c6ae99SBarry Smith 5af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h> /*I "petscdmda.h" I*/ 647c6ae99SBarry Smith DMDestroy_DA(DM da)7d71ae5a4SJacob FaibussowitschPetscErrorCode DMDestroy_DA(DM da) 8d71ae5a4SJacob Faibussowitsch { 96bf464f9SBarry Smith DM_DA *dd = (DM_DA *)da->data; 1047c6ae99SBarry Smith 1147c6ae99SBarry Smith PetscFunctionBegin; 1247c6ae99SBarry Smith /* destroy the external/common part */ 13*3ba16761SJacob Faibussowitsch for (PetscInt i = 0; i < DMDA_MAX_WORK_ARRAYS; i++) { 149566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedout[i])); 159566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startghostedin[i])); 169566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startout[i])); 179566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->startin[i])); 1847c6ae99SBarry Smith } 1947c6ae99SBarry Smith 209566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gtol)); 219566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->ltol)); 229566063dSJacob Faibussowitsch PetscCall(VecDestroy(&dd->natural)); 239566063dSJacob Faibussowitsch PetscCall(VecScatterDestroy(&dd->gton)); 249566063dSJacob Faibussowitsch PetscCall(AODestroy(&dd->ao)); 259566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->aotype)); 2647c6ae99SBarry Smith 279566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lx)); 289566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ly)); 299566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->lz)); 3047c6ae99SBarry Smith 319566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_x_hier)); 329566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_y_hier)); 339566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->refine_z_hier)); 34897f7067SBarry Smith 3547c6ae99SBarry Smith if (dd->fieldname) { 36*3ba16761SJacob Faibussowitsch for (PetscInt i = 0; i < dd->w; i++) PetscCall(PetscFree(dd->fieldname[i])); 379566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->fieldname)); 3847c6ae99SBarry Smith } 39109c9344SBarry Smith if (dd->coordinatename) { 40*3ba16761SJacob Faibussowitsch for (PetscInt i = 0; i < da->dim; i++) PetscCall(PetscFree(dd->coordinatename[i])); 419566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->coordinatename)); 42109c9344SBarry Smith } 439566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->localcoloring)); 449566063dSJacob Faibussowitsch PetscCall(ISColoringDestroy(&dd->ghostedcoloring)); 4547c6ae99SBarry Smith 469566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->neighbors)); 479566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->dfill)); 489566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofill)); 499566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->ofillcols)); 509566063dSJacob Faibussowitsch PetscCall(PetscFree(dd->e)); 519566063dSJacob Faibussowitsch PetscCall(ISDestroy(&dd->ecorners)); 52a66d4d66SMatthew G Knepley 539566063dSJacob Faibussowitsch PetscCall(PetscObjectComposeFunction((PetscObject)da, "DMSetUpGLVisViewer_C", NULL)); 548135c375SStefano Zampini 559566063dSJacob Faibussowitsch PetscCall(PetscFree(dd)); 56*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 5747c6ae99SBarry Smith } 58