[petsc-dev] MetSetBlockSize issue

Mark F. Adams mark.adams at columbia.edu
Mon Apr 30 10:37:24 CDT 2012


I have added MatGet(Set)BlockSizes.  Given that the block size is in a map and MatSetBlockSize sets both maps with the same value, this was very natural to do.

Hong, can you please make the matrix methods (PtAP and AAt, AtA, etc.) inherit block sizes?

And MatGetSubmatrix also needs to have the matrix inherit the block sizes ... anyone want to do that or should I do it?

Mark


On Apr 25, 2012, at 8:41 PM, Barry Smith wrote:

> 
>  Ok, so add MatSetBlockSizes().
> 
>   Reason we don't have implemented fully function different row and column block sizes or different block sizes in different parts of the matrix: with our current programming model (C+MPI) the code complexity would get higher increasing the time to write and maintain code hence it has not been done. Plus we have plenty of other high priority things to work on. Nothing is stopping anyone from writing a more general block implementation and putting it in PETSc.
> 
>    Barry
> 
> On Apr 25, 2012, at 5:58 PM, Mark F. Adams wrote:
> 
>> 
>> On Apr 25, 2012, at 6:10 PM, Barry Smith wrote:
>> 
>>> 
>>> On Apr 25, 2012, at 4:58 PM, Jed Brown wrote:
>>> 
>>>> On Wed, Apr 25, 2012 at 16:41, Barry Smith <bsmith at mcs.anl.gov> wrote:
>>>> I admit MatSetVirtualColumnBlockSize() is clunky and would be happy to hear alternatives.
>>>> 
>>>> 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.
>>> 
>>> 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).
>> 
>> 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.
>> 
>>> 
>>> 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.
>>> 
>> 
>> 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?
>> 
>> Mark
>> 
>>> So Mark I ask you again, in GAMG is it truly a column block size?
>>> 
>>> Barry
>>> 
>>> 
>>> 
>> 
> 
> 




More information about the petsc-dev mailing list