#include "petscdmda.h" PetscErrorCode DMDAVecGetArray(DM da,Vec vec,void *array)Collective on Vec
da | - the distributed array | |
vec | - the vector, either a vector the same size as one obtained with DMCreateGlobalVector() or DMCreateLocalVector() |
In C, the indexing is "backwards" from what expects: array[k][j][i] NOT array[i][j][k]!
If vec is a local vector (obtained with DMCreateLocalVector() etc) then they ghost point locations are accessable. If it is a global vector then the ghost points are not accessable. Of course with the local vector you will have had to do the
appropriate DMLocalToGlobalBegin() and DMLocalToGlobalEnd() to have correct values in the ghost locations.
Fortran Notes: From Fortran use DMDAVecGetArrayF90() and pass for the array type PetscScalar,pointer :: array(:,...,:) of the appropriate dimension. For a DMDA created with a dof of 1 use the dimension of the DMDA, for a DMDA created with a dof greater than 1 use one more than the dimension of the DMDA. The order of the indices is array(xs:xs+xm-1,ys:ys+ym-1,zs:zs+zm-1) (when dof is 1) otherwise array(0:dof-1,xs:xs+xm-1,ys:ys+ym-1,zs:zs+zm-1) where the values are obtained from DMDAGetCorners() for a global array or DMDAGetGhostCorners() for a local array. Include finclude/petscdmda.h90 to access this routine.
Due to bugs in the compiler DMDAVecGetArrayF90() does not work with gfortran versions before 4.5
Level:intermediate
Location:src/dm/impls/da/dagetarray.c
Index of all DM routines
Table of Contents for all manual pages
Index of all manual pages