← Back to team overview

dolfin team mailing list archive

Re: Introduce a global Time class

 

Can't we just make all Expression time-dependent by adding a variable
't' that all expressions have (set to 0 by default).

Then a user can either update t manually for all expressions, or
connect them somehow to an object that handles time.

t = Time()
t.add(e0)
t.add(e1)
t.add(e2)
t.set(0.1) // Will set time for all managed expressions

--
Anders


On Fri, Feb 15, 2013 at 11:33:31AM +0100, Johan Hake wrote:
> I see your points. Introducing a Time handler class which is
> instantiated either by the user or by a solver might be the way to go.
> This, however becomes more tricky to integrate with the
> CompileExpression interface.
> However, one could include some magic to the code generation process so:
>  time = Time()
>  e = Expression("t", t=time)
> would generate an Expression with the shared time object attached to it,
> preferable as private member. With this I think there is no need for an
> explicit ExpressionWithTimeSupport class.
> Also if t is a scalar it would generate an ordinary Expression with a
> public double attribute.
> Johan



>> Of course if such a class ExpressionWithTimeSupport is generic and
>> useful enough and/or needed in official dolfin interfaces, the class can
>> be added to dolfin.
>>
>> Martin
>>
>>
>> On 15 February 2013 11:11, Martin Sandve Alnæs <martinal@xxxxxxxxx
>>
>>    A single global time class is _not_ the way to go, that's not
>>    composable to multiphysics problems with different timescales, etc
>>    etc. It's a very narrow design for a very particular use case.
>>
>>    However this is designed, it's a necessity that the user creates the
>>    "time object" (whatever that is) and passes it to whatever parts of
>>    the code that should share the same view of the time.
>>
>>    The straightforward way to update time across Expression subclasses
>>    in C++ is to make the shared time a member of those classes.
>>
>>    class MyExpr: Expression {
>>      MyExpr(shared_ptr<Time> t)> t(t) {}
>>      void eval(...) { double now = t->get_time(); ... }
>>    }
>>
>>    This requires no library support. You can make a base class for
>>    Expressions with time support in your time solver code.
>>
>>    Martin
>>
>>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help   : https://help.launchpad.net/ListHelp


Follow ups

References