← Back to team overview

dolfin team mailing list archive

Re: [DOLFIN-DEV] Some Iterative Linear Solver Doubts.

 

On Thu, Sep 25, 2008 at 05:20:53PM +0200, Anders Logg wrote:
> On Thu, Sep 25, 2008 at 04:18:23PM +0100, Garth N. Wells wrote:
> > 
> > 
> > Anders Logg wrote:
> > > On Thu, Sep 25, 2008 at 03:53:01PM +0100, Garth N. Wells wrote:
> > >>
> > >> Anders Logg wrote:
> > >>> On Thu, Sep 25, 2008 at 03:11:27PM +0100, Garth N. Wells wrote:
> > >>>> Anders Logg wrote:
> > >>>>> On Thu, Sep 25, 2008 at 12:41:33PM +0100, Garth N. Wells wrote:
> > >>>>>> Nuno David Lopes wrote:
> > >>>>>>> Is there a simple way of setting an initial guess for an Iterative 
> > >>>>>>> LinearSolver? 
> > >>>>>>> In Umfpack and PETSc the default initial guess is the zero vector right?
> > >>>>>> At the moment, yes (note the UMFPACK is an LU solver, so an initial 
> > >>>>>> guess doesn't do anything).
> > >>>>>>
> > >>>>>> It's very simple, and I've been meaning to add an option for using an 
> > >>>>>> initial guess. It's also useful for Newton solvers. I'll add something 
> > >>>>>> in the next few days.
> > >>>>>>
> > >>>>>> Garth
> > >>>>> It would be natural to let the x argument always be the initial
> > >>>>> guess. I thought we already did this.
> > >>>>>
> > >>>>> Would it be enough to make sure that Vector::init() does not reset the
> > >>>>> values to zero?
> > >>>>>
> > >>>> Yes.
> > >>>>
> > >>>> The danger is if someone sends an uninitialised vector to the solver.
> > >>>>
> > >>>> Garth
> > >>> We can just put something like this in the init() functions:
> > >>>
> > >>>   if (x && size() == N)
> > >>>     return;
> > >>>
> > >>> I think we had this a while back but at some point VecZeroEntries was
> > >>> inserted.
> > >>>
> > >> I think that we should have an option whether or not to use an initial 
> > >> guess. The default can be to use the guess (as in your above code extract).
> > >>
> > >> Garth
> > > 
> > > I think it would work nicely if the solver calls x.init() and that
> > > will initialize x to a zero vector only if it has not already been
> > > initialized. 
> > 
> > Sounds a bit dangerous to me that Vector::init() sometimes zeroes a the 
> > vector, and sometimes it doesn't. Should we get rid of Vector::init() 
> > and use Vector::resize() and Vector::zero() instead? No ambiguity then.
> > 
> > Garth
> 
> That sounds good.

On second thought, we shouldn't mess with the init() functions unless
we want to change the meaning of init() for all the classes deriving
from GenericTensor, including also matrices for all backends. Also,
resize() sometimes means that existing values will be preserved when
the size is increased.

So the best solution is to do something like

  if (x.size() != N)
    x.init();

in the Krylov solvers instead of just init().

-- 
Anders

Attachment: signature.asc
Description: Digital signature


Follow ups

References