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 <[email protected]> 
> 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>

Reply via email to