You can use VecGetOwnershipRange() to determine the range of global indices 
corresponding to the local portion of a vector, and VecGetArray() to access the 
values. In SLEPc, you can assume that X and Y will have the same parallel 
distribution.

For an example of a shell matrix that implements the matrix-vector product in 
parallel, have a look at this: 
https://slepc.upv.es/documentation/current/src/nep/tutorials/ex21.c.html
It is a simple tridiagonal example, where neighborwise communication is done 
with two calls to MPI_Sendrecv().

Jose


> El 17 jun 2022, a las 17:21, Mario Rossi <[email protected]> escribió:
> 
> I need to find the largest eigenvalues (say the first three) of a very large 
> matrix and I am using
> a combination of PetSc and SLEPc. In particular, I am using a shell matrix. I 
> wrote a "custom"
> matrix-vector product and everything works fine in serial (one task) mode for 
> a "small" case.
> For the real case, I need multiple (at least 128) tasks for memory reasons so 
> I need a parallel variant of the custom matrix-vector product. I know exactly 
> how to write the parallel variant 
> (in plain MPI) but I am, somehow, blocked because it is not clear to me what 
> each task receives
> and what is expected to provide in the parallel matrix-vector product.
> More in detail, with a single task, the function receives the full X vector 
> and is expected to provide the full Y vector resulting from Y=A*X. 
> What does it happen with multiple tasks? If I understand correctly
> in the matrix shell definition, I can choose to split the matrix into blocks 
> of rows so that the matrix-vector function should compute a block of elements 
> of the vector Y but does it receive only the corresponding subset of the X 
> (input vector)? (this is what I guess happens) and in output, does
> each task return its subset of elements of Y as if it were the whole array 
> and then PetSc manages all the subsets? Is there anyone who has a working 
> example of a parallel matrix-vector product for matrix shell?
> Thanks in advance for any help you can provide!
> Mario
> i
> 

Reply via email to