# distribution of submatrix and subvector Re: how to extract a subvector?

Matthew Knepley knepley at gmail.com
Fri Jan 2 20:20:25 CST 2009

```On Fri, Jan 2, 2009 at 7:58 PM, Yujie <recrusader at gmail.com> wrote:

> Dear Barry:
>
> When using MatGetSubmatrix() to get a submatrix in parallel mode, to my
> knowledge, this function will exact the rows and cols for submatrix. This
> submatrix is not redistributed. For example, if there is zero row and zero
> col in a process, the row and col of this submatrix in this process are
> zero, right?
> However, to get a subvector using Vec scatter, the user needs to create the
> subvector using MPI_COMM, that is new distribution for subvector is
> generated. Just regarding only rows or cols of the submatrix and the
> subvector, their distribution should be different even if using the same
> index to get them, right? thanks a lot.

No. They work exactly the same way.

Matt

>
> Regards,
> Yujie
>
> On Fri, Jan 2, 2009 at 5:15 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>>
>>   The ix and iy are always global indices based on where the vector lives.
>>
>>   If you are going from a parallel to parallel vector then both indices
>> are "global"
>>
>>  Barry
>>
>>
>> On Jan 2, 2009, at 2:21 PM, Yujie wrote:
>>
>>  Dear Barry:
>>>
>>> I have a new question about the parameter "iy"(new index set of
>>> subvector). To parallel vector, how to provide "ix" and "iy"?
>>>
>>> Just providing the local index subset for "ix" and "iy"? if it is, it is
>>> a little difficult to let the local vector know its global position in the
>>> new subvector? If the user needs to provide the global position of local
>>> vector for "iy". some MPI communication should be needed, it looks like not
>>> a good method. In exacting submatrix, the function hides this problem. could
>>> you give me any comments? thanks a lot.
>>>
>>> Regards,
>>>
>>> Yujie
>>>
>>>
>>> On Fri, Jan 2, 2009 at 11:46 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>>
>>>  VecScatter is for this purpose.
>>>
>>>  Rational: extracting subparts of vectors for ghost points etc takes
>>> place many times in a simulation; maybe millions.
>>> Thus separating it into a set-up followed by many uses is a  worthwhile
>>> optimization. Extracting submatrices occur
>>> much less often in a simulation, maybe tens, hundreds or thousands of
>>> times so it is not worth the extra complexity
>>> of having separate set-up followed by many uses. One could argue that
>>> uniformity of design means we should have
>>> handled matrices with a MatScatter concept to parallel the Vec approach,
>>> but it is too late now :-).
>>>
>>>  Barry
>>>
>>>
>>> On Jan 2, 2009, at 1:41 PM, Yujie wrote:
>>>
>>> Like MatGetSubMatrix(), whether is there a function to get a subvector in
>>> parallel mode? I have checked some scatter functios, they don't likely work.
>>> thanks a lot.
>>>
>>> Regards,
>>>
>>> Yujie
>>>
>>>
>>>
>>>
>>
>

--
What most experimenters take for granted before they begin their experiments
is infinitely more interesting than any results to which their experiments