[petsc-users] Block LU preconditioning
Barry Smith
bsmith at mcs.anl.gov
Fri Jan 13 08:15:53 CST 2012
On Jan 13, 2012, at 7:22 AM, TAMAIN Patrick 207314 wrote:
> 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.
So if you run with -pc_type lu -pc_factor_mat_solver_package mumps it works well in terms of convergence rate but -pc_type asm -sub_pc_type lu performs poorly. Then it is a question of you are using ASM as a preconditioner for B which apparently it is not working well. So you need to focus on what makes a good preconditioner for B.
Barry
>
> Would you have some advice / hints on how to implement such a preconditioner for my problem?
>
> Thanks in advance.
>
> Patrick
>
More information about the petsc-users
mailing list