xref: /petsc/src/dm/impls/da/dascatter.c (revision d78e899e0acfb33a880f460f9d151d1996065aab)
147c6ae99SBarry Smith 
247c6ae99SBarry Smith /*
347c6ae99SBarry Smith   Code for manipulating distributed regular arrays in parallel.
447c6ae99SBarry Smith */
547c6ae99SBarry Smith 
64035e84dSBarry Smith #include <petsc-private/dmdaimpl.h>    /*I   "petscdmda.h"   I*/
7*d78e899eSRichard Tran Mills extern PetscErrorCode DMLocalToLocalCreate_DA(DM);
847c6ae99SBarry Smith 
947c6ae99SBarry Smith #undef __FUNCT__
10aa219208SBarry Smith #define __FUNCT__ "DMDAGetScatter"
1147c6ae99SBarry Smith /*@C
12aa219208SBarry Smith    DMDAGetScatter - Gets the local-to-global, local-to-global, and
1347c6ae99SBarry Smith    local-to-local vector scatter contexts for a distributed array.
1447c6ae99SBarry Smith 
15aa219208SBarry Smith    Collective on DMDA
1647c6ae99SBarry Smith 
1747c6ae99SBarry Smith    Input Parameter:
1847c6ae99SBarry Smith .  da - the distributed array
1947c6ae99SBarry Smith 
2047c6ae99SBarry Smith    Output Parameters:
210298fd71SBarry Smith +  ltog - local-to-global scatter context (may be NULL)
220298fd71SBarry Smith .  gtol - global-to-local scatter context (may be NULL)
230298fd71SBarry Smith -  ltol - local-to-local scatter context (may be NULL)
2447c6ae99SBarry Smith 
2547c6ae99SBarry Smith    Level: developer
2647c6ae99SBarry Smith 
2747c6ae99SBarry Smith    Notes:
2847c6ae99SBarry Smith    The output contexts are valid only as long as the input da is valid.
2947c6ae99SBarry Smith    If you delete the da, the scatter contexts will become invalid.
3047c6ae99SBarry Smith 
3147c6ae99SBarry Smith .keywords: distributed array, get, scatter, context, global-to-local,
3247c6ae99SBarry Smith            local-to-global, local-to-local
3347c6ae99SBarry Smith 
349a42bb27SBarry Smith .seealso: DMGlobalToLocalBegin(), DMGlobalToLocalEnd(), DMLocalToGlobalBegin()
3547c6ae99SBarry Smith @*/
367087cfbeSBarry Smith PetscErrorCode  DMDAGetScatter(DM da,VecScatter *ltog,VecScatter *gtol,VecScatter *ltol)
3747c6ae99SBarry Smith {
3847c6ae99SBarry Smith   PetscErrorCode ierr;
3947c6ae99SBarry Smith   DM_DA          *dd = (DM_DA*)da->data;
4047c6ae99SBarry Smith 
4147c6ae99SBarry Smith   PetscFunctionBegin;
4247c6ae99SBarry Smith   PetscValidHeaderSpecific(da,DM_CLASSID,1);
4347c6ae99SBarry Smith   if (ltog) *ltog = dd->ltog;
4447c6ae99SBarry Smith   if (gtol) *gtol = dd->gtol;
4547c6ae99SBarry Smith   if (ltol) {
4647c6ae99SBarry Smith     if (!dd->ltol) {
47*d78e899eSRichard Tran Mills       ierr = DMLocalToLocalCreate_DA(da);CHKERRQ(ierr);
4847c6ae99SBarry Smith     }
4947c6ae99SBarry Smith     *ltol = dd->ltol;
5047c6ae99SBarry Smith   }
5147c6ae99SBarry Smith   PetscFunctionReturn(0);
5247c6ae99SBarry Smith }
5347c6ae99SBarry Smith 
54