使用 Tpetra 稀疏矩阵在 Anasazi/Belos 中进行 Shift-Invert

计算科学 特征值 特里诺斯
2021-12-24 03:56:31

我目前正在尝试将我的代码移植到 Trilinos,因为我正在处理的问题对于 LAPACK/ARPACK 来说太大了。具体来说,我正在计算广义特征值/特征向量:

Ax=λBx

两者都在哪里AB大而稀疏。我主要对使用移位反转方法定位特定的内部特征值感兴趣:

AxσBx=λBxσBx
AxσBx=(λσ)Bx
1λσx=(AxσB)1Bx

这映射了接近的特征值σ以便通过迭代方法很容易找到它们。为了避免在前面的表达式中计算逆,我们改为在每次迭代时求解线性系统:

w=Bvi
(AxσB)vi+1=w

以前我使用 LU 分解来解决这个系统,但是随着矩阵变大,这种方法很笨拙。相反,我正在尝试使用 Belos 来解决 Anasazi eigensolver 包的线性系统。需要注意的重要一点是我的矩阵是复值的,所以 Epetra 不是一个理想的解决方案,我宁愿让 Tpetra 工作。

我一直在看这个Epetra 例子,它定义了一个Anasazi::EpetraGenOp广义算子来解决线性系统。这个广义算子基本上计算A1Bvi换班σ=0.

Anasazi::EpetraGenOp在 Anasazi 的 Epetra 适配器中定义,但 Tpetra 适配器似乎没有等效的广义运算符。

我的问题:

使用 Tpetra/Belos/Anasazi 解决移位反转广义特征值问题的正确方法是什么?

0个回答
没有发现任何回复~