← Back to team overview

dolfin team mailing list archive

Re: Nonlinear solvers

 

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:

while t < T:

   A = assemble()
   b = assemble()
   bc.apply()

   newton_solver.solve(...)

   f.t = t
   bc.t = t 
   t += dt

I've also been thinking about the LinearPDE class. Perhaps we should
rename it to VariationalProblem?

-- 
Anders

Attachment: signature.asc
Description: Digital signature


Follow ups

References