在 PETSc 中获取具有绝对值的矩阵

计算科学 宠物 矩阵
2021-12-22 10:42:06

是否有任何功能可以创建或更改矩阵,具有Aij=abs(Aij)在PETSc?如果可能的话,它应该与 MPIAIJ 矩阵一起工作,而不仅仅是本地的。

1个回答

虽然这个问题是关于单个库的特定功能的,但我前段时间偶然发现了同样的问题。

据我所知,PETSc (3.8.3) 中没有现成的矩阵函数可以开箱即用。考虑到以下功能的存在,我很惊讶几年前和现在没有找到解决方案:

  • VecAbs这将完全符合您的要求,但仅适用于向量
  • MatImaginaryPart, MatRealPart, 和MatConjugate哪个会执行Aij=(Aij),Aij=(Aij), 和Aij=Aij, 分别。

考虑到支持矩阵上的元素 Re、Im 和共轭运算,我假设MatAb的所有必要构建块都在那里,但没有正式编码。

MatRealPart子程序源代码中,以下摘录正在完成这项工作

(*mat->ops->realpart)(mat);

矩阵上支持和传播的操作列表存储在typedef的include/petscmat.h中。MatOperation从技术上讲,您可以编写自己的操作并将其传播到您需要的数据类型(也许,甚至通过使用自定义用户矩阵MatOperationMatShellSetOperation)。然而,问题是这样的发展是否值得付出所需的时间和痛苦。