On Tuesday 23 December 2008 18:11:59 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).
This cook up is all Martins original work, I only made it more easily accesable. Johan > > > 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? _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
