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