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