← Back to team overview

dolfin team mailing list archive

Re: Nonlinear solvers

 

On Tue, Dec 23, 2008 at 05:13:57PM +0000, Garth N. Wells wrote:
> 
> 
> Anders Logg wrote:
> > 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).
> > 
> 
> Looks very clever.
> 
> >>> 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?
> > 
> 
> VariationalProblem
> 
> Garth

ok.

-- 
Anders

Attachment: signature.asc
Description: Digital signature


References