← Back to team overview

dolfin team mailing list archive

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

 



Anders Logg wrote:
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.


I've already started on it. There are a lot of places in the code where we only need to resize and not zero, so I like using resize() and zero(). We even had places with

   x.init(N);
   x.zero();

There is no ambiguity now with resize and zero.


So the best solution is to do something like

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


This is what I've done.

Garth

in the Krylov solvers instead of just init().



------------------------------------------------------------------------

_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev




Follow ups

References