On Tue, Oct 23, 2012 at 9:56 AM, shu guo <span dir="ltr"><<a href="mailto:greatgs2008@gmail.com" target="_blank">greatgs2008@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div id=":eir">I have figured out how this error happens. When I get a sub-matrix<br>
from a block matrix, Petsc will compress the IS according to the<br>
matrix block format. So for example, if the matrix has a block size<br>
nsbk=4. It will calculate the dimension/nsbk and sort IS accordingly.<br>
<br>
The original matrix is like<br>
<br>
A1 B1_1 B1_2 B1_3 || A2 B2_1 B2_2 B2_3<br></div></blockquote><div><br></div><div>I don't understand this notation.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div id=":eir">
<br>
so each node has 4 degree of freedom. And the way I permute the matrix<br>
is sort the matrix like,<br>
<br>
A1 A2 || B1_1 B1_2 B1_3 B2_1 B2_2 B2_3<br></div></blockquote><div><br></div><div><b>Why</b> are you permuting the matrix like this? Why not just construct the index set that addresses the part you want?</div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":eir">
<br>
So I need the sub-matrix A1 A2. Can you give me a hint how to do it?<br>
<br>
Another question is if I do not permute the matrix, so it will hold<br>
the format of<br>
A1 B1_1 B1_2 B1_3 || A2 B2_1 B2_2 B2_3<br>
<br>
If I want to get sub-matrix A1 A2 from it. I need a blocked IS, right?<br>
In the manual, I found a statement that saying "For BAIJ matrices the<br>
index sets must respect the block structure, that is if they request<br>
one row/column in a block, they must request all rows/columns that are<br>
in that block. For example, if the block size is 2 you cannot request<br>
just row 0 and column 0." Does it mean that I cannot merely access A1<br>
in the first block? If not, how should I do with this structure if I<br>
want A1 A2 from it?</div></blockquote></div><br><div>Just build an index set that has every part of the block. If you need arbitrary scalar subsets, use MPIAIJ (can use MatConvert).</div>