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 on da 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 Notes: 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: `DMGlobalToLocalBegin()`, `DMGlobalToLocalEnd()`, `DMLocalToGlobalBegin()` 29 @*/ 30 PetscErrorCode DMDAGetScatter(DM da, VecScatter *gtol, VecScatter *ltol) { 31 DM_DA *dd = (DM_DA *)da->data; 32 33 PetscFunctionBegin; 34 PetscValidHeaderSpecificType(da, DM_CLASSID, 1, DMDA); 35 if (gtol) *gtol = dd->gtol; 36 if (ltol) { 37 if (!dd->ltol) { PetscCall(DMLocalToLocalCreate_DA(da)); } 38 *ltol = dd->ltol; 39 } 40 PetscFunctionReturn(0); 41 } 42