Matrix free preconditioning

Tim Kroeger tim.kroeger at cevis.uni-bremen.de
Wed Oct 15 01:49:28 CDT 2008


Dear Jed and Matt and all,

On Tue, 14 Oct 2008, Jed Brown wrote:

> I assume your matrix comes from the rank-1 update you brought up
> recently on the libmesh list?  That is
>
>  B = A + u v'
>
> for where A is an explicit matrix and u,v are vectors.

Yes, that's it.  Actually, I didn't know that anyone was reading both 
libmesh-users and petsc-users.

> Did you try the
> rank-1 update I suggested?  In detail, let A^ be an approximate inverse
> of A (i.e. an application of any standard preconditioner) and form a
> preconditioner for B as
>
>  B^ = A^ - alpha w v' A^
>
> where
>
>  w = A^ u
>  alpha = 1/(1 + v' w).

Thank you very much for that suggestion.  I guess this would be the 
best thing to do, but actually I have to admit that I am rather shy of 
implemeting that, in particular with a sensible interface to libMesh.

Hence, I am thinking whether there might be some easier (altough 
certainly less efficient) possibility.  I am thinking abouth the 
following two ideas:

1. I could do MatShellSetOperation(A,MATOP_GET_DIAGONAL,...), which is 
easy in my case and should enable PETSc to do at least JACOBI 
preconditioning for that matrix, shouldn't it?

2. Following Matt's suggestion, I could handle an auxilary matrix C 
for preconditioning.  In my case, it would choose C(i,j)=A(i,j) 
whenever B(i,j)!=0, but C(i,j)=0 else.  I.e., C has the same sparsity 
pattern as the (sparse) matrix B.  This would also be easy to 
construct in my case.

Any opinion on this is welcome.

Best Regards,

Tim

-- 
Dr. Tim Kroeger                                        Phone +49-421-218-7710
tim.kroeger at mevis.de, tim.kroeger at cevis.uni-bremen.de  Fax   +49-421-218-4236

MeVis Research GmbH, Universitaetsallee 29, 28359 Bremen, Germany

Amtsgericht Bremen HRB 16222
Geschaeftsfuehrer: Prof. Dr. H.-O. Peitgen




More information about the petsc-users mailing list