MatGetArray/VecGetArray 什么时候有用?

计算科学 宠物
2021-12-08 12:33:33

在 petsc 中,已经有 SetValues(Local) 方法。但是什么时候需要 GetArray 方法呢?

一个相关问题:要将 Mat/Vec 的一部分复制到另一个 Mat/Vec 的一部分,通常建议使用 Scatter 对象。使用 scatter 总是比 GetArray 方法更好吗?

1个回答

MatGetArray()是一个高级(应该是开发人员)级别的例程,它取决于矩阵格式,最好避免。它仅用于 PETSc 中的密集矩阵;没有理由以其他方式使用它。它的存在来自顽固地坚持拥有该功能的用户,而不是来自有意义的用例。

VecGetArray()另一方面,这是编写非线性残差和其他需要直接访问向量条目的函数的推荐方法。您可以使用 aVecScatter获得一个“局部”向量,其中包含组装过程中所需的鬼点,并组装来自元素分区子域的贡献(与有限元方法一样)。在 PETSc 中有很多这样的例子,很多都DMDAVecGetArray()用来提供方便的索引。