← Back to team overview

dolfin team mailing list archive

Re: Nonlinear solvers

 



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



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

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



Follow ups

References