xref: /petsc/src/dm/impls/product/product.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
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