Hello, everyone,
I already have a scipy sparse square matrix L0 . Since my problem is large,
parallel run is preferred. My Question is, how can I scatter my L0 to each
of the processors? In the following code, I can get the indices of the
localized part of the matrix. In the tutorial, the matrix element are
directly assign with value, but in my case, the matrix are so large, assign
each element in loop (commented code) is not efficient. So if any function
would do the mpi scatter work?
With regards and Thanks.
import sys, slepc4py
slepc4py.init(sys.argv)
from petsc4py import PETSc
from slepc4py import SLEPc
opts = PETSc.Options()
opts.setValue('-st_pc_factor_mat_solver_package','mumps')
A = PETSc.Mat().createAIJ(size=L0.shape,comm=PETSc.COMM_WORLD)
A.setUp()
Istart, Iend = A.getOwnershipRange()# for I in
range(Istart,Iend):# for J in range(0,L0.shape[0]):#
A[I,J] = L0[I,J]
The flowing code, would make the assignment from the scipy sparse matrix L0 to
PETSc matrix A. But this would only work for one process.
A = PETSc.Mat().createAIJ(size=L0.shape,
csr=(L0.indptr, L0.indices,
L0.data), comm=PETSc.COMM_WORLD)