<div dir="ltr"><div dir="ltr">On Tue, Aug 9, 2022 at 11:12 AM Stefano Zampini <<a href="mailto:stefano.zampini@gmail.com">stefano.zampini@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">PETSc distributes matrices and vectors in parallel. Take a look at <a href="https://petsc.org/release/docs/manualpages/Vec/VecGetOwnershipRange.html" rel="noreferrer" target="_blank">https://petsc.org/release/docs/manualpages/Vec/VecGetOwnershipRange.html</a></blockquote><div><br></div><div>Longer explanation:</div><div><br></div><div>Vectors are distributed by giving a stretch of contiguous rows to each process. Dense matrices also give a stretch of contiguous rows to each process.</div><div>This means that each matrix column would correspond to a vector. The easiest way I see to do this is to use</div><div><br></div><div>  <a href="https://petsc.org/main/docs/manualpages/Mat/MatDenseGetColumnVec/">https://petsc.org/main/docs/manualpages/Mat/MatDenseGetColumnVec/</a></div><div><br></div><div>and then VecCopy() each vector into the correct column. If you want to share memory, allocate the dense matrix first, and make you vectors using this</div><div>routine.</div><div><br></div><div>  Thanks,</div><div><br></div><div>      Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
> On Aug 9, 2022, at 11:21 AM, Thomas Saigre <<a href="mailto:saigre@math.unistra.fr" target="_blank">saigre@math.unistra.fr</a>> wrote:<br>
> <br>
> Hi,<br>
> <br>
> I've been trying for a few weeks to construct a matrix from a list of vectors, unsuccessfully.<br>
> 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)<br>
> <br>
> Here is the code I'm using :<br>
> <br>
> import sys<br>
> from petsc4py import PETSc<br>
> n = 5<br>
> d = 10<br>
> <br>
> l = []   # creation of the list of vectors<br>
> for i in range(d):<br>
>     v = PETSc.Vec().create()<br>
>     v.setSizes(n)<br>
>     v.setFromOptions()<br>
>     v.set(i)<br>
>     l.append(v)<br>
> <br>
> Z = PETSc.Mat().create()<br>
> Z.setSizes([n, d])<br>
> Z.setFromOptions()<br>
> Z.setUp()<br>
> for i, v in enumerate(l):<br>
>     Z.setValues(range(n), i, v)<br>
> Z.assemble()<br>
> Z.view()    # to display the matrix in the terminal<br>
> <br>
> In sequential, the result is correct :<br>
> <br>
> Mat Object: 1 MPI processes<br>
>   type: seqaij<br>
> row 0: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.)<br>
> row 1: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.)<br>
> row 2: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.)<br>
> row 3: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.)<br>
> row 4: (0, 0.)  (1, 1.)  (2, 2.)  (3, 3.)  (4, 4.)  (5, 5.)  (6, 6.)  (7, 7.)  (8, 8.)  (9, 9.)<br>
> <br>
>  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...)<br>
> <br>
> Traceback (most recent call last):<br>
>   File "/home/Documents/code/tests/file.py", line 31, in <module><br>
>     Z.setValues(list(range(n)), i, v)<br>
>   File "PETSc/Mat.pyx", line 888, in petsc4py.PETSc.Mat.setValues<br>
>   File "PETSc/petscmat.pxi", line 828, in petsc4py.PETSc.matsetvalues<br>
> ValueError: incompatible array sizes: ni=5, nj=1, nv=3<br>
> Traceback (most recent call last):<br>
>   File "/home/saigre/Documents/code/tests/t2.py", line 31, in <module><br>
>     Z.setValues(list(range(n)), i, v)<br>
>   File "PETSc/Mat.pyx", line 888, in petsc4py.PETSc.Mat.setValues<br>
>   File "PETSc/petscmat.pxi", line 828, in petsc4py.PETSc.matsetvalues<br>
> ValueError: incompatible array sizes: ni=5, nj=1, nv=2<br>
> <br>
> Two weeks ago, I made a post on stack overflow (<a href="https://stackoverflow.com/questions/73124230/convert-a-list-of-vector-to-a-matrix-with-petsc4py" rel="noreferrer" target="_blank">https://stackoverflow.com/questions/73124230/convert-a-list-of-vector-to-a-matrix-with-petsc4py</a>). I tried using the apt packages, and I also compiled from the sources, but I get the same error.<br>
> <br>
> I someone has an idea how to succeed in it, I'm all ears !<br>
> <br>
> Thanks,<br>
> <br>
> Thomas<br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>