[petsc-users] Example for MatInvertBlockDiagonal

Cyrill Vonplanta cyrill.von.planta at usi.ch
Tue Sep 27 04:54:18 CDT 2016


Thanks. Just to wrap it up: In the end I took the respective SOR-code and added a block-manipulation routine to it after the update of the x_i's. That way I also get to use the "MatInvertBlockDiagonal()” functionality.

Cyrill

> On 19 Sep 2016, at 21:38, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> 
>> On Sep 19, 2016, at 2:21 PM, Cyrill Vonplanta <cyrill.von.planta at usi.ch> wrote:
>> 
>> 
>>> block size > 1 really only makes sense if the block size is really greater than one. So if A has blocks of size 3 you should create A as BAIJ and thus never need to call the convert routine.
>> 
>> Unfortunately A is not created by my part of the program and comes with blocksize 1.
> 
>   Ok, copy the code for MatInvertBlockDiagonal_SeqAIJ() into your source code with a different name and modify it to serve your purpose and call it directly instead of calling MatInvertBlockDiagonal
> 
>> 
>>> 
>>> You can also set the block size for AIJ matrix to 3 and use MatInvertBlockDiagonal() on that matrix and not use the BAIJ matrix. 
>> 
>> If I run:
>> ierr = MatSetBlockSize(A, 3);  CHKERRQ(ierr);
>> 
>> It doesn’t work for me. I get:
>> 
>> [1;31m[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------
>> [0;39m[0;49m[0]PETSC ERROR: Arguments are incompatible
>> [0]PETSC ERROR: Cannot change block size 1 to 3
>> [0]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.
>> [0]PETSC ERROR: Petsc Release Version 3.6.3, Dec, 03, 2015 
>> .
>> .
>> 
>> What are the constraints for block size? 
> 
>   You need to set it early in the life of the matrix.
> 
>  Barry
> 
>> 
>> 
>> 
>> 
> 



More information about the petsc-users mailing list