Hi,

I've been trying for a few weeks to construct a matrix from a list of vectors, unsuccessfully. Here is my problem : I have a list l a petsc4py.Vec, each vector has a size n, and I have d vectors. I want to "cast" these vectors to a petsc4py.Mat Z of shape (n,d), where Z[:, i] = l[i] (using NumPy notation)

Here is the code I'm using :

import sys
from petsc4py import PETSc
n = 5
d = 10

l = []   # creation of the list of vectors
for i in range(d):
    v = PETSc.Vec().create()
    v.setSizes(n)
    v.setFromOptions()
    v.set(i)
    l.append(v)

Z = PETSc.Mat().create()
Z.setSizes([n, d])
Z.setFromOptions()
Z.setUp()
for i, v in enumerate(l):
    Z.setValues(range(n), i, v)
Z.assemble()
Z.view()    # to display the matrix in the terminal

In sequential, the result is correct :

Mat Object: 1 MPI processes
  type: seqaij
row 0: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.) row 1: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.) row 2: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.) row 3: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.) row 4: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.)

 but when I run it using the command mpirun -np 2 python3 file.py, I get the following error, about incompatible array sizes (I did not manage to understand what ni, nj and nv correspond to...)

Traceback (most recent call last):
  File "/home/Documents/code/tests/file.py", line 31, in <module>
    Z.setValues(list(range(n)), i, v)
  File "PETSc/Mat.pyx", line 888, in petsc4py.PETSc.Mat.setValues
  File "PETSc/petscmat.pxi", line 828, in petsc4py.PETSc.matsetvalues
ValueError: incompatible array sizes: ni=5, nj=1, nv=3
Traceback (most recent call last):
  File "/home/saigre/Documents/code/tests/t2.py", line 31, in <module>
    Z.setValues(list(range(n)), i, v)
  File "PETSc/Mat.pyx", line 888, in petsc4py.PETSc.Mat.setValues
  File "PETSc/petscmat.pxi", line 828, in petsc4py.PETSc.matsetvalues
ValueError: incompatible array sizes: ni=5, nj=1, nv=2

Two weeks ago, I made a post on stack overflow (https://stackoverflow.com/questions/73124230/convert-a-list-of-vector-to-a-matrix-with-petsc4py). I tried using the apt packages, and I also compiled from the sources, but I get the same error.

I someone has an idea how to succeed in it, I'm all ears !

Thanks,

Thomas

Reply via email to