Dear Matt, I have one last question I believe. Up to creating a dense matrix I did what you've suggested. Thank you so much for that.
I created a new dense matrix. Now, how should I wrap each vector in a MatDense again? I mean, what is wrapping vectors in a matrix? To put each of them again as rows? Thanks! Eda Matthew Knepley <knep...@gmail.com>, 10 Haz 2020 Çar, 16:16 tarihinde şunu yazdı: > > On Wed, Jun 10, 2020 at 9:08 AM Eda Oktay <eda.ok...@metu.edu.tr> wrote: >> >> Dear Matt, >> >> Matthew Knepley <knep...@gmail.com>, 10 Haz 2020 Çar, 16:03 tarihinde >> şunu yazdı: >> > >> > On Wed, Jun 10, 2020 at 8:56 AM Eda Oktay <eda.ok...@metu.edu.tr> wrote: >> >> >> >> Hi all, >> >> >> >> I am trying to get all the rows of a parallel matrix as individual >> >> vectors. For instance, if I have 72*4 matrix, I want to get 72 >> >> different vectors having size 4. >> >> >> >> As far as I understood, MatGetRow is only for local rows, so >> >> MatGetOwnershipRange is used, however, when I tried this one, I >> >> couldn't get the whole and desired row vectors. >> >> >> >> In MatGetRow explanation, it is written that I should use >> >> MatCreateSubMatrices first, then use MatGetRow. But I couldn't >> >> understand to which extent I should create submatrices. I just need to >> >> have all 72 rows as 72 different vectors each having 4 elements. >> > >> > >> > 1) For sparse matrices, the storage is always divided by row, so that >> > values can only be retrieved for local rows with MatGetRow() >> > >> > 2) Is this matrix sparse? It sounds like it is dense. >> >> Matrix is dense. >> >> > >> > 3) Are you asking to get all matrix values on all processes? If so, I >> > think the easiest thing to do is first wrap a Vec around the >> > values, then use VecScatterToAll(), then wrap each one in a MatDense >> > again. >> >> Yes, I want all row vectors on all processes. In a dense matrix, >> should I still wrap a Vec around the values? I know I should use >> scatter but I couldn't even wrap a Vec around them. > > > I would do > > MatGetSize(&N); > MatGetLocalSize(&m); > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDenseGetArray.html > <create vector of local size m*N> > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecPlaceArray.html > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecScatterCreateToAll.html > <do scatter> > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecResetArray.html#VecResetArray > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateDense.html > <use it> > <destroy matrix> > <destroy vector from CreateToAll> > > Thanks, > > Matt > >> >> Thanks so much! >> >> Eda >> >> > >> > Thanks, >> > >> > Matt >> > >> >> >> >> Thanks! >> >> >> >> Eda >> > >> > >> > >> > -- >> > What most experimenters take for granted before they begin their >> > experiments is infinitely more interesting than any results to which their >> > experiments lead. >> > -- Norbert Wiener >> > >> > https://www.cse.buffalo.edu/~knepley/ > > > > -- > What most experimenters take for granted before they begin their experiments > is infinitely more interesting than any results to which their experiments > lead. > -- Norbert Wiener > > https://www.cse.buffalo.edu/~knepley/