xref: /petsc/src/dm/impls/da/dascatter.c (revision e4094ef18e7e53fda86cf35f3a47fda48a8e77d8)
1 
2 /*
3   Code for manipulating distributed regular arrays in parallel.
4 */
5 
6 #include <petsc/private/dmdaimpl.h> /*I   "petscdmda.h"   I*/
7 extern PetscErrorCode DMLocalToLocalCreate_DA(DM);
8 
9 /*@C
10   DMDAGetScatter - Gets the global-to-local, and
11   local-to-local vector scatter contexts for a distributed array.
12 
13   Collective
14 
15   Input Parameter:
16 . da - the distributed array
17 
18   Output Parameters:
19 + gtol - global-to-local scatter context (may be `NULL`)
20 - ltol - local-to-local scatter context (may be `NULL`)
21 
22   Level: developer
23 
24   Note:
25   The output contexts are valid only as long as the input `da` is valid.
26   If you delete the `da`, the scatter contexts will become invalid.
27 
28 .seealso: `DM`, `DMDA`, `DMGlobalToLocalBegin()`, `DMGlobalToLocalEnd()`, `DMLocalToGlobalBegin()`
29 @*/
30 PetscErrorCode DMDAGetScatter(DM da, VecScatter *gtol, VecScatter *ltol)
31 {
32   DM_DA *dd = (DM_DA *)da->data;
33 
34   PetscFunctionBegin;
35   PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA);
36   if (gtol) *gtol = dd->gtol;
37   if (ltol) {
38     if (!dd->ltol) PetscCall(DMLocalToLocalCreate_DA(da));
39     *ltol = dd->ltol;
40   }
41   PetscFunctionReturn(PETSC_SUCCESS);
42 }
43