给定一个分布式 Epetra CrsMatrix,连同行列表、列列表和处理器 ID,我想提取一个子矩阵,其所有条目都应存储在指定的处理器上。
我认为这可以通过具有适当定义的映射的 Import/Export 对象来完成,但我似乎找不到示例。
给定一个分布式 Epetra CrsMatrix,连同行列表、列列表和处理器 ID,我想提取一个子矩阵,其所有条目都应存储在指定的处理器上。
我认为这可以通过具有适当定义的映射的 Import/Export 对象来完成,但我似乎找不到示例。
经过反复试验,我找到了解决方案。这是 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()