[petsc-users] Slow convergence using Schur complement
Barry Smith
bsmith at mcs.anl.gov
Thu Jul 14 15:05:12 CDT 2016
So refreshing my memory
> pc_fieldsplit_schur_precondition self
selfp then the preconditioning for the Schur complement is generated from an explicitly-assembled approximation
Sp = A11 - A10 inv(diag(A00)) A01
This is only a good preconditioner when diag(A00) is a good preconditioner for A00. Optionally, A00 can be
lumped before extracting the diagonal using the additional option -fieldsplit_1_mat_schur_complement_ainv_type lump
So first try adding the option (with the correct prefix) -fieldsplit_1_mat_schur_complement_ainv_type lump to see if the lumping helps the convergence. If suddenly it works well great but as the documentation says selfp may not be a good preconditioner at all for your problem and you'll have to consider the other ones.
I don't know why it is printing the initial name and residual norm multiple times.
What is is showing is the very slow convergence of the preconditioned system inv(Sp) S = inv(Sp) (A11 - A10 inv(A00) A01). Note I wrote inv() here because in both places you are using LU and hence it is a very accurate inverse operation.
Barry
> On Jul 14, 2016, at 2:42 PM, Amélie Compagna <amelie.compagna.1 at ulaval.ca> wrote:
>
> Hi,
>
> I've been working on a finite element simulation of a 3 ionic species unsteady electrodiffusion model. The concentrations and the electric potential are defined using a unsteady diffusion equations. All the concentration being coupled to the potential giving a non symmetrical global system.
>
> I know that everything works since I've solved the system using LU. So far I've tried a lot of different things, but I am now trying to solve the system using a Schur complement, splitting the system in two groups [concentrations, potential], and I'm getting slow convergence. Here are the options I'm using. I've also attached a file with the ksp_view and the ksp_monitor.
>
> ======
> ksp_type gcr
> pc_type fieldsplit
> pc_fieldsplit_type schur
> mat_type nest
> ksp_monitor
> ksp_view
>
> //Options concentrations block
>
> fieldsplit_a_00_ksp_type gcr
> fieldsplit_a_00_pc_type lu
> fieldsplit_a_00_ksp_rtol 1.0e-4
> fieldsplit_a_00_ksp_atol 1.0e-8
>
> //Options potential block
> fieldsplit_schur_mat_type schurcomplement
> fieldsplit_schur_ksp_type gcr
> pc_fieldsplit_schur_precondition selfp
> pc_fieldsplit_schur_fact_type full
> fieldsplit_schur_pc_type lu
> fieldsplit_schur_ksp_monitor
> fieldsplit_schur_ksp_rtol 1.0e-4
> fieldsplit_schur_ksp_atol 1.0e-8
>
>
> ksp_rtol 1.0e-5
> ksp_atol 1.0e-5
> =====
>
> First of all, I'm wondering what exactly is showing on the screen when I use the fieldsplit_schur_ksp_monitor?
>
> Also, why is it printing twice each time as you can see in the attached file? When I use pc_fieldsplit_a_00_monitor (which is not included in the file I sent you because it only does one iteration, as it should since it's solving with LU) it prints it 3 times every time which gets pretty annoying.
>
> Finally, as you can see, it takes a long time to the fieldsplit_schur_ksp to converge, do you have any idea why it takes over 200 iterations to get down to 1e-02? Is there a way to get it to converge faster?
>
> Thank you for your time,
> Amélie
>
> <QuestionPetsc>
More information about the petsc-users
mailing list