[petsc-users] Block LU preconditioning

TAMAIN Patrick 207314 Patrick.TAMAIN at cea.fr
Fri Jan 13 07:22:19 CST 2012


Hi,

I am working on an application that requires the inversion of an implicit operator that is more or less a very anisotropic 3D diffusion operator (about 1E6 ratio between diffusion coefficient in 1 direction with respect to the 2 others). The matrix is therefore very badly conditioned. By direction splitting, I can split the system in 2 pieces:

A = B + C

where B is block diagonal and contains all the coefficients corresponding to the high diffusion part of the operator. B seems like a good preconditioner for the system (I checked in low resolution cases with matlab that applying B^-1 to A reduces its condition number by a factor of close to 1E6), but B is ill-conditioned. However, since it is block diagonal and that it will not vary in time (contrary to C), it seems to me that it would be a good idea to perform once and for all an LU factorization of B and use it to precondition A each time the ksp solver is called afterwards.

I somehow can't figure out how to do this in practise with PETSC. I tried to configure the KSP like this
call KSPSetOperators(myKSP,A,B,SAME_PRECONDITIONER,ierr)
and then run PETSC with the following options:
-pc_type asm -sub_pc_type lu -ksp_type bcgsl
but the computation time becomes awful, far more than if I try to do separately the LU decomposition of the blocks of B with MUMPS.

Would you have some advice / hints on how to implement such a preconditioner for my problem?

Thanks in advance.

Patrick

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120113/00726f61/attachment.htm>


More information about the petsc-users mailing list