我在 Petsc 3.2 中构建了一个本地和全局分布式数组,使用:
DMCreateGlobalVector(da, &v);
DMCreateLocalVector(da, &lv);
为了从相邻进程中检索幽灵单元格值,我只需使用以下命令:
DMGlobalToLocalBegin(da, v, INSERT_VALUES, lv);
DMGlobalToLocalEnd(da, v, INSERT_VALUES, lv);
据我了解,本地和全局向量使用单独的内存空间。对于任何处理器,全局向量 (Vec v) 的局部部分在分配给局部向量 (Vec lv) 的另一个内存空间中复制。我正在尝试构建一个使用相同内存空间的本地/全局向量。然后我需要使用某种分散例程来仅填充适当的幽灵单元。我注意到有一个VecCreateGhost函数似乎提供了这个功能。但是,它似乎与 DMDA 函数(例如 DMCreateGhostVector)无关。