147c6ae99SBarry Smith /* 247c6ae99SBarry Smith Code for manipulating distributed regular arrays in parallel. 347c6ae99SBarry Smith */ 447c6ae99SBarry Smith 5af0996ceSBarry Smith #include <petsc/private/dmdaimpl.h> /*I "petscdmda.h" I*/ 647c6ae99SBarry Smith 747c6ae99SBarry Smith /*@C 8bd1fc5aeSBarry Smith DMDAGetScatter - Gets the global-to-local, and 912b4a537SBarry Smith local-to-local vector scatter contexts for a `DMDA` distributed array. 1047c6ae99SBarry Smith 1120f4b53cSBarry Smith Collective 1247c6ae99SBarry Smith 1347c6ae99SBarry Smith Input Parameter: 14*72fd0fbdSBarry Smith . da - the `DMDA` 1547c6ae99SBarry Smith 1647c6ae99SBarry Smith Output Parameters: 1720f4b53cSBarry Smith + gtol - global-to-local scatter context (may be `NULL`) 1820f4b53cSBarry Smith - ltol - local-to-local scatter context (may be `NULL`) 1947c6ae99SBarry Smith 2047c6ae99SBarry Smith Level: developer 2147c6ae99SBarry Smith 22dce8aebaSBarry Smith Note: 2320f4b53cSBarry Smith The output contexts are valid only as long as the input `da` is valid. 2420f4b53cSBarry Smith If you delete the `da`, the scatter contexts will become invalid. 2547c6ae99SBarry Smith 2612b4a537SBarry Smith .seealso: [](sec_struct), `DM`, `DMDA`, `DMGlobalToLocalBegin()`, `DMGlobalToLocalEnd()`, `DMLocalToGlobalBegin()` 2747c6ae99SBarry Smith @*/ 28d71ae5a4SJacob Faibussowitsch PetscErrorCode DMDAGetScatter(DM da, VecScatter *gtol, VecScatter *ltol) 29d71ae5a4SJacob Faibussowitsch { 3047c6ae99SBarry Smith DM_DA *dd = (DM_DA *)da->data; 3147c6ae99SBarry Smith 3247c6ae99SBarry Smith PetscFunctionBegin; 33a9a02de4SBarry Smith PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 3447c6ae99SBarry Smith if (gtol) *gtol = dd->gtol; 3547c6ae99SBarry Smith if (ltol) { 3648a46eb9SPierre Jolivet if (!dd->ltol) PetscCall(DMLocalToLocalCreate_DA(da)); 3747c6ae99SBarry Smith *ltol = dd->ltol; 3847c6ae99SBarry Smith } 393ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 4047c6ae99SBarry Smith } 41