dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #02163
Re: [HG] Fix check for Hypre in KrylovSolver.
On Thu, 2006-03-16 at 06:22 -0600, Anders Logg wrote:
> On Thu, Mar 16, 2006 at 06:09:23AM -0600, Anders Logg wrote:
>
> > > This appears to be a PETSc problem when destroying a solver before it
> > > has been used to solve a linear system.
> > >
> > > The problem can be avoided by not calling init(0,0) (as well as
> > > readParameters()) in the KrylovSolver constructor. As far as I can see,
> > > there is no need to call init(0,0) in the constructor. It creates a
> > > PETSc solver, which is then deleted by KrylovSolver::init() the first
> > > time KrylovSolver::solve() is called. Can the call be removed from the
> > > constructor?
> > >
> > > Garth
> >
> > Aha. We had the following in the init() function before. I couldn't
> > understand why it was there in the first place so I removed it. Seems
> > we need it.
> >
> > // Don't reinitialize on first solve
> > if ( ksp != 0 && this->M == 0 && this->N == 0 )
> > {
> > this->M = M;
> > this->N = N;
> > return;
> > }
> >
> > Does it work if you put it back?
> >
> > I think we need to do init() in the constructor so that it is possible
> > to call KrylovSolver::solver() and do stuff with the KSP pointer if
> > someone should want to do that.
> >
> > /Anders
>
> When I think of it, maybe we can remove the KrylovSolver::solver()
> function? The DOLFIN KrylovSolver is anyway doing pretty much what it
> wants to do by itself and would perhaps not obey all options specified
> by a user, especially since ksp is sometimes destroyed and then
> created again in a solve.
>
Yes, this is an issue. Also, if a user asks for the pointer to the PETSc
solver and makes some changes (different solver or preconditioner for
example), this may be rolled-back by KrylovSolver::init() which applies
a different solver or preconditioner. At the moment, to avoid this
problem the user needs to create a KrylovSolver with the
KrylovSolver::default_solver and KrylovSolver::default_pc
On the flip side, the PETSc solvers have a lot of options which are
needed for particular problems, so I think that we still need to access
this somehow. Could we provide two solver interfaces - one standard with
the regular features, and an advanced interface where the user is left
more on their own to do things correctly?
> If we remove it, we don't need to do init() in the constructor and the
> problem will go away. Would that work?
>
> We should probably add some comments that (1) PETSc gets confused if
> the system changes size between solves (which is why we need to do
> init() between solves) and that (2) PETSc gets confused if KSP is
> created, destroyed and created again before a solve (which we avoid).
On the last point, I've only seen this problem in combination with the
Hypre preconditioners. I'm hoping that this will be fixed in PETSc.
Garth
> It's otherwise easy to forget as I did now.
>
> /Anders
>
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/cgi-bin/mailman/listinfo/dolfin-dev
Follow ups
References