Barry,

Thanks a lot. I’d like to use this for a nonlinear variant of a 
block-gauss-seidel smoother. I would like to use MatInvertBlockDiagonal for 
speeding up my variant.

I think I can work with this, however I also have the problem to turn my 
initial matrix into one with a blocksize of 3.When I call:

MatConvert(A, MATBAIJ, MAT_INITIAL_MATRIX, Dinverse);


Then the matrix Dinverse has blocksize 1 which comes from A. I checked the 
blocksize before the conversion and it was 3, so it seems to get lost.

What is the correct (and elegant) way to turn a matrix into a block matrix?


Best
Cyrill



On 19/09/16 17:18, "Barry Smith" <bsm...@mcs.anl.gov> wrote:

>
>  Cyrill,
>
>    This is very specialized for implementing point block Jacobi; I don't 
> think it is something you would want to use directly. 
>
>     If you do want to use it, it simply returns the inverses of the block 
> diagonals in column major form. You can then call MatSetValues() with with 
> each of those blocks into another PETSc matrix. values[i*bs*bs] is the 
> starting point of each block in the array.
>
>   Barry
>
>> On Sep 19, 2016, at 4:55 AM, Cyrill Vonplanta <cyrill.von.pla...@usi.ch> 
>> wrote:
>> 
>> Dear PETSc-Users,
>> 
>> I would like to use the inverted block diagonals of a a matrix. I have seen 
>> the function MatInvertBlockDiagonal() but I don’t know how to create a 
>> matrix out of them or an array of block matrizes.
>> 
>> Does anyone have an example on how to use  **values to create a PETSc matrix?
>> 
>> Thanks
>> Cyrill
>

Reply via email to