前文讲到petsc两类基本数据对象(mat, vec)。而petsc的这两类数据对象默认都是按一维存储和创建的。实际pde问题,往往是2维或者3维的。故petsc内建一些映射函数,将默认的一维数据映射成逻辑上的多维数组。本文主要介绍向规则的2D数组映射的函数。
petsc中逻辑上的多维数组称为 "DA" ( distributed array), 创建一个2D DA:
DACreate2d(MPI_Comm comm, DAPeriodicType wrap, DAStencilType stencil_type, PetscInt M, PetscInt N, PetscINt m, PetscInt n, PetscInt dof, PetscInt s, PetscInt *lx, PetscInt *ly, DA *da)
/* comm MPI通信容器
wrap 周期边界
stencil_type 差分模式(box, star)
M , N x, y方向整体空间节点数
m, n , x, y方向cpu节点数
dof 空间节点自由度数
s 差分模式的厚度(即,how many 层数 空间节点)
*lx, *ly cpu节点所管辖的部分节点数组
*da, 所创建DA对象 *
获取该DA对象的全局及局部信息(即分配到cpu节点上的单元信息)采用一 DAGetLocalInfo (DA da, DALocalInfo *info) ,其中
typedef