xref: /petsc/src/dm/impls/da/dascatter.c (revision 20f4b53cbb5e9bd9ef12b76a8697d60d197cda17)
147c6ae99SBarry Smith 
247c6ae99SBarry Smith /*
347c6ae99SBarry Smith   Code for manipulating distributed regular arrays in parallel.
447c6ae99SBarry Smith */
547c6ae99SBarry Smith 
6af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h> /*I   "petscdmda.h"   I*/
7d78e899eSRichard Tran Mills extern PetscErrorCode DMLocalToLocalCreate_DA(DM);
847c6ae99SBarry Smith 
947c6ae99SBarry Smith /*@C
10bd1fc5aeSBarry Smith    DMDAGetScatter - Gets the global-to-local, and
1147c6ae99SBarry Smith    local-to-local vector scatter contexts for a distributed array.
1247c6ae99SBarry Smith 
13*20f4b53cSBarry Smith    Collective
1447c6ae99SBarry Smith 
1547c6ae99SBarry Smith    Input Parameter:
1647c6ae99SBarry Smith .  da - the distributed array
1747c6ae99SBarry Smith 
1847c6ae99SBarry Smith    Output Parameters:
19*20f4b53cSBarry Smith +  gtol - global-to-local scatter context (may be `NULL`)
20*20f4b53cSBarry Smith -  ltol - local-to-local scatter context (may be `NULL`)
2147c6ae99SBarry Smith 
2247c6ae99SBarry Smith    Level: developer
2347c6ae99SBarry Smith 
24dce8aebaSBarry Smith    Note:
25*20f4b53cSBarry Smith    The output contexts are valid only as long as the input `da` is valid.
26*20f4b53cSBarry Smith    If you delete the `da`, the scatter contexts will become invalid.
2747c6ae99SBarry Smith 
28dce8aebaSBarry Smith .seealso: `DM`, `DMDA`, `DMGlobalToLocalBegin()`, `DMGlobalToLocalEnd()`, `DMLocalToGlobalBegin()`
2947c6ae99SBarry Smith @*/
30d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAGetScatter(DM da, VecScatter *gtol, VecScatter *ltol)
31d71ae5a4SJacob Faibussowitsch {
3247c6ae99SBarry Smith   DM_DA *dd = (DM_DA *)da->data;
3347c6ae99SBarry Smith 
3447c6ae99SBarry Smith   PetscFunctionBegin;
35a9a02de4SBarry Smith   PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA);
3647c6ae99SBarry Smith   if (gtol) *gtol = dd->gtol;
3747c6ae99SBarry Smith   if (ltol) {
3848a46eb9SPierre Jolivet     if (!dd->ltol) PetscCall(DMLocalToLocalCreate_DA(da));
3947c6ae99SBarry Smith     *ltol = dd->ltol;
4047c6ae99SBarry Smith   }
413ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
4247c6ae99SBarry Smith }
43