0

我目前对具有特征值 lambda 和特征向量 $X$ 的 $AX = \lambda BX$ 形式的广义特征值方程使用显式矩阵存储。$A$ 和 $B$ 是由块组成的五对角线,Hermitian 并且每个块也是 Hermitian。

问题在于,对于大型模拟,内存使用会失控。因此,我想切换到 Shell 矩阵。一个额外的好处是,我可以避免大量信息的重复,因为 A 和 B 都是通过有限差分填充的。即函数 X 的一阶导数可以近似为 $X_i' = \frac{X_{i+1}-X_{i-1}}{\Delta}$,使得同一条信息出现在两个地方。对于更高的订单,情况会变得更糟。

当我尝试在 Fortran 中实现这一点时,使用多个 MPI 进程,每个进程都包含 $A$ 和 $B$ 行的一部分,我偶然发现了以下问题:要执行矩阵乘法,需要 $X 的向量信息由于 $A$ 和 $B$ 的非对角元素,$ 在每个等级的间隔结束时来自其他等级。

我通过使用 MPI all to all 命令找到了一个概念性解决方案,这些命令将信息从这些“幻影”区域传递到隔壁的行列。但是,我担心这可能不是最便携的,也不是太优雅。

有什么方法可以自动化从 Petsc / Slepc 中的幽灵区域获取信息的过程?

4

0 回答 0