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
>  

Reply via email to