1: /* 2: Code for manipulating distributed regular arrays in parallel. 3: */ 5: #include <petsc/private/dmdaimpl.h> 7: /*@C 8: DMDAGetScatter - Gets the global-to-local, and 9: local-to-local vector scatter contexts for a `DMDA` distributed array. 11: Collective 13: Input Parameter: 14: . da - the `DMDA` 16: Output Parameters: 17: + gtol - global-to-local scatter context (may be `NULL`) 18: - ltol - local-to-local scatter context (may be `NULL`) 20: Level: developer 22: Note: 23: The output contexts are valid only as long as the input `da` is valid. 24: If you delete the `da`, the scatter contexts will become invalid. 26: .seealso: [](sec_struct), `DM`, `DMDA`, `DMGlobalToLocalBegin()`, `DMGlobalToLocalEnd()`, `DMLocalToGlobalBegin()` 27: @*/ 28: PetscErrorCode DMDAGetScatter(DM da, VecScatter *gtol, VecScatter *ltol) 29: { 30: DM_DA *dd = (DM_DA *)da->data; 32: PetscFunctionBegin; 34: if (gtol) *gtol = dd->gtol; 35: if (ltol) { 36: if (!dd->ltol) PetscCall(DMLocalToLocalCreate_DA(da)); 37: *ltol = dd->ltol; 38: } 39: PetscFunctionReturn(PETSC_SUCCESS); 40: }