xref: /petsc/src/dm/impls/da/dascatter.c (revision 47c6ae997ffd1b2afd66b6474dff5950ae8613d1)
1*47c6ae99SBarry Smith #define PETSCDM_DLL
2*47c6ae99SBarry Smith 
3*47c6ae99SBarry Smith /*
4*47c6ae99SBarry Smith   Code for manipulating distributed regular arrays in parallel.
5*47c6ae99SBarry Smith */
6*47c6ae99SBarry Smith 
7*47c6ae99SBarry Smith #include "private/daimpl.h"    /*I   "petscda.h"   I*/
8*47c6ae99SBarry Smith EXTERN PetscErrorCode DALocalToLocalCreate(DA);
9*47c6ae99SBarry Smith 
10*47c6ae99SBarry Smith #undef __FUNCT__
11*47c6ae99SBarry Smith #define __FUNCT__ "DAGetScatter"
12*47c6ae99SBarry Smith /*@C
13*47c6ae99SBarry Smith    DAGetScatter - Gets the local-to-global, local-to-global, and
14*47c6ae99SBarry Smith    local-to-local vector scatter contexts for a distributed array.
15*47c6ae99SBarry Smith 
16*47c6ae99SBarry Smith    Collective on DA
17*47c6ae99SBarry Smith 
18*47c6ae99SBarry Smith    Input Parameter:
19*47c6ae99SBarry Smith .  da - the distributed array
20*47c6ae99SBarry Smith 
21*47c6ae99SBarry Smith    Output Parameters:
22*47c6ae99SBarry Smith +  ltog - local-to-global scatter context (may be PETSC_NULL)
23*47c6ae99SBarry Smith .  gtol - global-to-local scatter context (may be PETSC_NULL)
24*47c6ae99SBarry Smith -  ltol - local-to-local scatter context (may be PETSC_NULL)
25*47c6ae99SBarry Smith 
26*47c6ae99SBarry Smith    Level: developer
27*47c6ae99SBarry Smith 
28*47c6ae99SBarry Smith    Notes:
29*47c6ae99SBarry Smith    The output contexts are valid only as long as the input da is valid.
30*47c6ae99SBarry Smith    If you delete the da, the scatter contexts will become invalid.
31*47c6ae99SBarry Smith 
32*47c6ae99SBarry Smith .keywords: distributed array, get, scatter, context, global-to-local,
33*47c6ae99SBarry Smith            local-to-global, local-to-local
34*47c6ae99SBarry Smith 
35*47c6ae99SBarry Smith .seealso: DAGlobalToLocalBegin(), DAGlobalToLocalEnd(), DALocalToGlobal()
36*47c6ae99SBarry Smith @*/
37*47c6ae99SBarry Smith PetscErrorCode PETSCDM_DLLEXPORT DAGetScatter(DA da,VecScatter *ltog,VecScatter *gtol,VecScatter *ltol)
38*47c6ae99SBarry Smith {
39*47c6ae99SBarry Smith   PetscErrorCode ierr;
40*47c6ae99SBarry Smith   DM_DA          *dd = (DM_DA*)da->data;
41*47c6ae99SBarry Smith 
42*47c6ae99SBarry Smith   PetscFunctionBegin;
43*47c6ae99SBarry Smith   PetscValidHeaderSpecific(da,DM_CLASSID,1);
44*47c6ae99SBarry Smith   if (ltog) *ltog = dd->ltog;
45*47c6ae99SBarry Smith   if (gtol) *gtol = dd->gtol;
46*47c6ae99SBarry Smith   if (ltol) {
47*47c6ae99SBarry Smith     if (!dd->ltol) {
48*47c6ae99SBarry Smith       ierr = DALocalToLocalCreate(da);CHKERRQ(ierr);
49*47c6ae99SBarry Smith     }
50*47c6ae99SBarry Smith     *ltol = dd->ltol;
51*47c6ae99SBarry Smith   }
52*47c6ae99SBarry Smith   PetscFunctionReturn(0);
53*47c6ae99SBarry Smith }
54*47c6ae99SBarry Smith 
55