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