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