On Thu, Sep 30, 2021 at 8:39 AM Hannes Phil Niklas Brandt <
[email protected]> wrote:

> Hello,
>
>
>
>
>
> I intend to compute a parallel Matrix-Vector-Product (via MPI) and
> therefore would like to scatter the entries of the input MPI-Vec v to a
> local vector containing all entries relevant to the current process.
>
>
>
> To achieve this I tried defining a VecScatter, which scatters from v to a
> sequential Vec v_seq (each process has it's own version of v_seq). However,
> storing v_seq (which has one entry for each global row, thus containing a
> large amount of zero-entries) may demand too much storage space (in
> comparison to my data-sparse Matrix-Storage-Format).
>
 What you said is exactly what petsc's MatMult does. It builds a VecScatter
object (aij->Mvctx), and has a local vector (aij->lvec).   It does not
communicate or store unneeded  remote entries. The code is at
https://gitlab.com/petsc/petsc/-/blob/main/src/mat/impls/aij/mpi/mmaij.c#L9


> I am interested in possibilities to scatter v to a sparse Vec-type to
> avoid storing unnecessary large amounts of zero-entries. Is there a sparse
> Vector format in Petsc compatible to the VecScatter procedure or is there
> another efficient way to compute Matrix-Vector-Products without usinglarge
> amounts of storage space on each process?
>
>
>
>
>
> Best Regards
>
> Hannes Brandt
>
>

Reply via email to