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
> [email protected]
> http://www.fenics.org/mailman/listinfo/dolfin-dev

_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to