1d852a638SPatrick Sanan #include <petsc/private/dmproductimpl.h> 2d852a638SPatrick Sanan 3d852a638SPatrick Sanan static PetscErrorCode DMDestroy_Product(DM dm) 4d852a638SPatrick Sanan { 5d852a638SPatrick Sanan PetscErrorCode ierr; 6d852a638SPatrick Sanan DM_Product *product = (DM_Product*)dm->data; 7d852a638SPatrick Sanan PetscInt d; 8d852a638SPatrick Sanan 9d852a638SPatrick Sanan PetscFunctionBeginUser; 10d852a638SPatrick Sanan for (d=0; d<DMPRODUCT_MAX_DIM; ++d) { 11d852a638SPatrick Sanan ierr = DMDestroy(&product->dm[d]);CHKERRQ(ierr); 12d852a638SPatrick Sanan } 13d852a638SPatrick Sanan ierr = PetscFree(product);CHKERRQ(ierr); 14d852a638SPatrick Sanan PetscFunctionReturn(0); 15d852a638SPatrick Sanan } 16d852a638SPatrick Sanan 17d852a638SPatrick Sanan /*MC 18d852a638SPatrick Sanan DMPRODUCT = "product" - a DM representing a local Cartesian product of other DMs 19d852a638SPatrick Sanan 20d852a638SPatrick Sanan For each of dim dimensions, stores a sub-DM (need not be unique) and a dimension index. This specifies 21d852a638SPatrick Sanan which dimension of the sub-DM corresponds to each dimension of the DMProduct. 22d852a638SPatrick Sanan 23d852a638SPatrick Sanan Level: advanced 24d852a638SPatrick Sanan 25d852a638SPatrick Sanan .seealso: DM, DMSTAG, DMProductGetDM(), DMProductSetDimensionIndex(), DMProductSetDM(), DMStagSetUniformCoordinatesProduct(), 26*1d60c44bSPatrick Sanan DMStagGetProductCoordinateArrays(), DMStagGetProductCoordinateArraysRead() 27d852a638SPatrick Sanan M*/ 28d852a638SPatrick Sanan 29d852a638SPatrick Sanan PETSC_EXTERN PetscErrorCode DMCreate_Product(DM dm) 30d852a638SPatrick Sanan { 31d852a638SPatrick Sanan PetscErrorCode ierr; 32d852a638SPatrick Sanan DM_Product *product; 33d852a638SPatrick Sanan PetscInt d; 34d852a638SPatrick Sanan 35d852a638SPatrick Sanan PetscFunctionBegin; 36d852a638SPatrick Sanan PetscValidPointer(dm,1); 37d852a638SPatrick Sanan ierr = PetscNewLog(dm,&product);CHKERRQ(ierr); 38d852a638SPatrick Sanan dm->data = product; 39d852a638SPatrick Sanan 40d852a638SPatrick Sanan for (d=0; d<DMPRODUCT_MAX_DIM; ++d) product->dm[d] = NULL; 41d852a638SPatrick Sanan for (d=0; d<DMPRODUCT_MAX_DIM; ++d) product->dim[d] = -1; 42d852a638SPatrick Sanan 43d852a638SPatrick Sanan dm->ops->destroy = DMDestroy_Product; 44d852a638SPatrick Sanan PetscFunctionReturn(0); 45d852a638SPatrick Sanan } 46