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