KSPSetNullSpace and CG for singular systems

Shao-Ching Huang schuang at ats.ucla.edu
Fri Aug 1 19:52:00 CDT 2008


Hi,

I am trying to use CG to solve a singular systems (i.e. Poisson
equation with periodic conditions on all boundaries). 

The code works when I use GMRES, but it diverges when I switch CG.

Since the null space is a constant vector, in the code I have:

   KSP ksp;
   MatNullSpace nullspace;
   ...
   MatNullSpaceCreate(MPI_COMM_WORLD, PETSC_TRUE, 0, PETSC_NULL, &nullspace);
   KSPSetNullSpace(ksp, nullspace);
   MatNullSpaceRemove(nullspace, f->p_rhs, PETSC_NULL);

   KSPSetFromOptions(ksp);
   KSPSetUp(ksp);
   KSPSolve(ksp, f->p_rhs, f->phi);

[f->p_rhs is the RHS vector. f->phi is the solution vector.]

When I use "-ksp_type gmres", it converges (shown by -ksp_monitor).

However, when I switch to "-ksp_type cg", it diverges.
In this case (cg), "-ksp_converged_reason" says:

  Linear solve did not converge due to DIVERGED_INDEFINITE_PC iterations 1

I also try adding "-sub_pc_factor_shift_nonzero 0.0000000001" but the
CG case still fails.

Am I missing some step in handling the null space when using CG?

Thanks,

Shao-Ching Huang





More information about the petsc-users mailing list