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 >
