The usual issue is that you need a preconditioner for the Schur complement S = 
A11 - A01 A00^{-1} A10. For incompressible elasticity, this S is spectrally 
equivalent to a scaled mass matrix.

晓峰 何 <tlan...@hotmail.com> writes:

> Hi all,
>
> I have a linear system formed from structural mechanics, and there exists 
> zero in the diagonal entries:
>
> A = (A00 A01
>       A10 A11), where A00 has inverse and the diagonal entries in A11 are all 
> zero.
>
> The GMRES method with ILU preconditioner in PETSc was carried out to solve 
> this system, and I got this error: 
>
> "PC failed due to FACTOR_NUMERIC_ZEROPIVOT"
>
> I googled and found that Field Split preconditioner should be applied to 
> solve this kind of systems. I passed -pc-type fieldsplit 
> -pc_fieldsplit_detect_saddle_point options to program, and got another error:
>
> “PC failed due to SUBPC_ERROR”
>
> After that, I tried to split the matrix by codes:
>
> IS is;
> ISCreateStride(PETSC_COMM_SELF, row number of A00, 0, 1, &is);
> PCFieldSplitSetIS(pc, “0”, is);
>
> IS is2;
> ISCreateStride(PETSC_COMM_SELF, row number of A11, start row of A11, 1, &is2);
> PCFieldSplitSetIS(pc, “1”, is2);
>
> Recompiled the codes and run it with additional options:
>
>  -fieldsplit_0_ksp_type gmres -fieldsplit_0_pc_type ilu 
> -fieldsplit_1_ksp_type gmres -fieldsplit_1_pc_type none
>
> To my surprise, the Krylov solver executed extremely slow. I googled and 
> found the reason is that if size of A00 is much bigger than A11(e.g. A00 has 
> 10000 rows and A11 has 50 rows), then Schur complement is inefficient.
>
> Could you help me to solve this kind of systems efficiently?
>
> Best regards,
>
> Xiaofeng

Reply via email to