Trilinos:提取 Epetra CrsMatrix 的子矩阵

计算科学 特里诺斯
2021-12-25 02:51:32

给定一个分布式 Epetra CrsMatrixA,连同行列表、列列表和处理器 ID,我想提取一个子矩阵Asub,其所有条目都应存储在指定的处理器上。

我认为这可以通过具有适当定义的映射的 Import/Export 对象来完成,但我似乎找不到示例。

1个回答

经过反复试验,我找到了解决方案。这是 Python 中的一个最小工作示例。

from PyTrilinos import Epetra, Galeri
comm = Epetra.PyComm()

my_id = comm.MyPID()

if my_id ==0:
    my_range = [0, 1, 5 , 7]
else:
    my_range = []

subset_map = Epetra.Map(-1, my_range , 0, comm)

nx, ny = 4

GaleriList = {"n"  : nx * ny,
              "nx" : nx,
              "ny" : ny
              }
Map    = Galeri.CreateMap("Linear", comm, GaleriList)
Matrix = Galeri.CreateCrsMatrix("Recirc2D", Map, GaleriList)

importer = Epetra.Import(subset_map, Matrix.Map())

Submatrix = Epetra.CrsMatrix(Epetra.Copy, subset_map,subset_map, 5)
Submatrix.Import(Matrix, importer, Epetra.Insert)
Submatrix.FillComplete()