KSPSetNullSpace and CG for singular systems

Shao-Ching Huang schuang at ats.ucla.edu
Thu Aug 7 09:15:59 CDT 2008


Yes.

thanks,.

Shao-Ching


On Thu, Aug 07, 2008 at 09:37:38PM +0800, berry wrote:
> Thanks...
> 
> Shao-Ching, have you solved this problem?
> 
> 
> On Mon, Aug 4, 2008 at 11:49 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> >
> >  One reason not to use this approach is that it can result in a very
> > ill-conditioned linear
> > system that may be difficult for an iterative solver.
> >
> >   Barry
> >
> >
> > On Aug 3, 2008, at 10:09 PM, berry wrote:
> >
> >  hi, shao-ching
> >>
> >> Why not try to change the singular matrix to be non-singular ?
> >> I mean set the last column and row of the matrix to be zero except
> >> diagonal element( which is set to 1).
> >>
> >>
> >>
> >> On Mon, Aug 4, 2008 at 9:23 AM, Shao-Ching Huang <schuang at ats.ucla.edu>
> >> wrote:
> >> Hi Barry:
> >>
> >> Thanks you for your suggestions. Now both sequential and parallel
> >> cases work when I use CG.
> >>
> >> Shao-Ching
> >>
> >>
> >> On Fri, Aug 01, 2008 at 08:56:23PM -0500, Barry Smith wrote:
> >> >
> >> >    It is not the null space that is the problem.
> >> >
> >> >    You are right to try the shift but
> >> > 1) first run on one process using -pc_type icc -ksp_type cg -
> >> > pc_factor_shift_positive_definite
> >> > this will keep increasing the shift until it produces a positive-
> >> > definite preconditioner.
> >> >
> >> > Run also with -ksp_view to confirm that it is using all the options you
> >> > provided. (you can run with -help to
> >> > see the option names)
> >> >
> >> > 2) If you have the sequential converging then use -pc_type bjacobi -
> >> > sub_pc_type icc -pc_factor_shift_positive_definite
> >> >
> >> > Barry
> >> >
> >> > On Aug 1, 2008, at 7:52 PM, Shao-Ching Huang wrote:
> >> >
> >> >> 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
> >> >>
> >> >>
> >>
> >>
> >>
> >>
> >> --
> >> Pang Shengyong
> >> Solidification Simulation Lab,
> >> State Key Lab of Mould & Die Technology,
> >> Huazhong Univ. of Sci. & Tech. China
> >>
> >
> >




More information about the petsc-users mailing list