<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Apr 25, 2012 at 5:58 PM, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"><br>
On Apr 25, 2012, at 6:10 PM, Barry Smith wrote:<br>
<br>
><br>
> On Apr 25, 2012, at 4:58 PM, Jed Brown wrote:<br>
><br>
>> On Wed, Apr 25, 2012 at 16:41, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
>> I admit MatSetVirtualColumnBlockSize() is clunky and would be happy to hear alternatives.<br>
>><br>
>> What about having a separate row and column block size? The BAIJ and MAIJ formats can continue to store data using bs=gcd(rowbs,colbs), but those row and column block sizes indicate that redundancy exists in the data structure, so it can be utilized by appropriate operations.<br>


><br>
>  Mark told me in a earlier email that the "column block size" isn't really the column block size (except in some cases), since it is not really a column block size I don't want the matrix to list it as the column block size (hence my virtual column block size thing).<br>


<br>
</div>The blocks are not always dense, so by what appears to be your definition of block size it is not (always) a 'column block size'.   But I think that it is  semantically a blocked matrix and hence it has a column block size.<br>

</blockquote><div>Yes, but with this one would always set mat values in blocks, and preallocation would have to be done in multiples of cbs.  You could set some values to 0, of course.  It looks like in building P (at least in AGG) you do just that -- set the values in column blocks of cbs. </div>

<div><br></div><div>Dmitry.</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
><br>
>  If it is truly a column block size then great, P is given the column block size with MatSetColumnBlockSize() or MatSetBlockSizes(mat,col,row) and PtAP automatically uses that column block size for the resulting matrix block size.<br>


><br>
<br>
</div>I think this solution is the best (eg, no 'virtual').  Column block size is a fundamental property of a blocked matrix.  PETSc's current implementations do not exploit or accommodate this but since it is a fundamental property I do not mind cluttering up Mat with yet another parameter.  You deal with rectangular matrices, and blocked matrices, why not rectangular blocks?  You also have row block size on AIJ matrices that do not have dense blocks so why not column block size?<br>


<span class="HOEnZb"><font color="#888888"><br>
Mark<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
>   So Mark I ask you again, in GAMG is it truly a column block size?<br>
><br>
>   Barry<br>
><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>