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