<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 18, 2016 at 7:02 AM, Florian Lindner <span dir="ltr"><<a href="mailto:mailinglists@xgm.de" target="_blank">mailinglists@xgm.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
I create a MATAIJ on 4 processors using local sizes<br>
<br>
(0) Set matrix A to local size 2 x 5<br>
(1) Set matrix A to local size 2 x 2<br>
(2) Set matrix A to local size 2 x 2<br>
(3) Set matrix A to local size 2 x 2<br>
<br>
which results in a global size of 8 x 11.<br>
<br>
Afaik the local size given is not relevant for the parallel layout, so each processors holds 2 rows x 11 cols. Accordingly I can set these using MatSetValue and alike<br>
<br>
But it seems to be important when I do preallocation, i.e. work on the local submatrices:<br>
<br>
(0) Local Submatrix Rows = 0 / 2, Local Submatrix Cols = 0 / 5<br>
(1) Local Submatrix Rows = 2 / 4, Local Submatrix Cols = 5 / 7<br>
(2) Local Submatrix Rows = 4 / 6, Local Submatrix Cols = 7 / 9<br>
(3) Local Submatrix Rows = 6 / 8, Local Submatrix Cols = 9 / 11<br>
<br>
(retrieved with MatGetOwnershipRange / MatGetOwnershipRangeColumn)<br>
<br>
therefore, if I do a preallocation using MatMPIAIJSetPreallocation I get errors like<br>
<br>
[1]PETSC ERROR: MatSeqAIJSetPreallocation_SeqAIJ() line 3567 in /home/florian/software/petsc/src/mat/impls/aij/seq/aij.c<br>
    nnz cannot be greater than row length: local row 0 value 4 rowlength 2<br>
<br>
Easiest way to work around that would be to set the number of local cols (here always 5/2/2/2) to 11. Setting the number of global columns to 11 would probably have the same effect.<br></blockquote><div><br></div><div>So you want to preallocate a rectangular matrix?</div><div><br></div><div>The error above is correct because the diagonal blocks on proc 1 is 2x2. You have to put the other nonzeros in the off-diagonal portion.</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Problem is that each processor only knows the number of local columns, so I would need some communication for that.<br>
<br>
Another possibility that comes to my mind is to declare the Mat only after the preallocation has been determined and during preallocation the longest line has been computed.<br>
<br>
Are my assumptions correct so far?<br>
How would you cope with that?<br>
<br>
Best Regards,<br>
Florian<br>
<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div>
</div></div>