dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #11342
Re: Nonlinear solvers
On Tue, Dec 23, 2008 at 05:02:47PM +0000, Garth N. Wells wrote:
>
>
> Anders Logg wrote:
> > On Tue, Dec 23, 2008 at 03:28:44PM +0000, Garth N. Wells wrote:
> >>
> >> Anders Logg wrote:
> >>> Why is there a pseudo time-stepping algorithm built into
> >>> NonlinearPDE::solve?
> >> So that the PDE can be solved with a series of Newton steps and boundary
> >> conditions can functions of pseudo time t.
> >>
> >> Will it not converge if we just call the
> >>> NewtonSolver directly?
> >>>
> >> Not always.
> >
> > ok.
> >
> >>> It would be better if the LinearPDE and NonlinearPDE only provided a
> >>> layer between the forms and the linear/nonlinear solvers.
> >>>
> >>> If we need a pseudo time-stepping algorith, it can be built into
> >>> NewtonSolver, or maybe another class?
> >>>
> >> I wouldn't put it NewtonSolver. Best to keep NewtonSolver abstract (i.e.
> >> unaware of PDEs) and just let it perform Newton solves. We could create
> >> a class like NonlinearSolver or NonlinearPDESolver.
> >
> > NonlinearPDESolver would not be consistent with the current LinearPDE
> > class which is in some sense is a solver for linear PDEs.
> >
> >> Most nonlinear PDEs are sufficiently complex and the solution methods so
> >> diverse that for non-trivial problems I would expect that a user will
> >> implement the solution procedure, and a NonlinearPDE class is not very
> >> useful. Perhaps we could just provide more building blocks to make the
> >> construction of nonlinear solvers easy?
> >
> > I would be inclined to just remove the NonlinearPDE class and
> > implement the pseudo time-stepping directly in the demo:
> >
>
> This is what I do in practice all the time, so removing NonlinearPDE is
> fine with me.
ok. I'll fix when I get a chance.
> > while t < T:
> >
> > A = assemble()
> > b = assemble()
> > bc.apply()
> >
> > newton_solver.solve(...)
> >
> > f.t = t
> > bc.t = t
>
> I added a Python class to take care of the time (it's in dolfin_time.py).
>
> > t += dt
> >
Wouldn't it be simpler to just use a float? If one defines
f = Function(V, "t*sin(x[0])")
then one may automatically change the variable t by
f.t = t
thanks to some fancy magic Johan cooked up in the new Python Function
class(es).
> > I've also been thinking about the LinearPDE class. Perhaps we should
> > rename it to VariationalProblem?
> >
>
> Sounds good. Solving nonlinear PDEs usually involves solving a series of
> variational problems, so we could later develop a design in which a
> VariationalProblem can be sent to a nonlinear solver.
ok. Should it be VariationalProblem or just VarProblem?
--
Anders
Attachment:
signature.asc
Description: Digital signature
Follow ups
References