← Back to team overview

dolfin team mailing list archive

Re: Providing rank to tensor(vector) valued Expression

 

On Sep 4, 2010, at 11:16, Marie Rognes <meg@xxxxxxxxx> wrote:

> On 04. sep. 2010 18:26, Johan Hake wrote:
>> On Saturday September 4 2010 03:54:35 Marie Rognes wrote:
>> 
>>> On 04. sep. 2010 01:36, Johan Hake wrote:
>>> 
>>>> Hello!
>>>> 
>>>> Garth found an ambiguity in the Expression doc string regarding how a
>>>> user should initiate a user defined Expression (not a compiled one) in
>>>> Python. If the Expression is vector or tensor valued the user need to
>>>> provide information about this.
>>>> 
>>>> This can be done in two ways. Either overload the dim method or provide a
>>>> ufl FiniteElement while instantiating the Expression. Neither of these
>>>> methods are documented in the docstring.
>>>> 
>>>> In the mixed poisson demo both dim and rank are overloaded. I think rank
>>>> is not needed (works fine without). However dim is just a method
>>>> introduced to be able to automatically select a FiniteElement.
>>>> 
>>> Thanks for bringing this up -- evidently I'm confused.
>>> 
>> Well, me too. Ever since Anders introduced the automatic selection of elements 
>> for the Expressions, I have been some what confused.
>> 
>> 
> 
> 
> Well, that part made perfect sense to me --- I think ;)

:)

>>>> First I am not sure dim is the correct name. We could use value_size as
>>>> this is present in the GenericFunction interface for just this purpose.
>>>> Second I am not sure overloading a method is the best and most clear way
>>>> to provide this information. Maybee he could do it while instantiating
>>>> the Expression instead?
>>>> 
>>>> class BoundarySource(Expression):
>>>>     def eval_data(self, values, data):
>>>>         g = sin(5*data.x()[0])
>>>>         values[0] = g*data.normal()[0]
>>>>         values[1] = g*data.normal()[1]
>>>> 
>>>> s = BoundarySource(value_size=2)
>>>> 
>>> I don't really like the name value_size, but this looks natural to me.
>>> What would it be for matrix-valued functions?
>>> 
>> As I have understand it, value_size is the size of the values array passed to 
>> the Expression. So that would then be:
>> 
>> value_size = m x n
>> 
>> I am not totally happy with the above code as the class should contain 
>> everything it needs to be instantiated correctly.
>> 
>> Would it make more sense to change the name of dim to value_size?
>> 
>> 
> 
> 
> Exactly what do you mean here? Keep needing to supply a method "dim",
> but renaming it to "value_size" ? (I still don't find the name
> value_size very intuitive.)

Something like that. The point is that a user need to provide this information so the Expression can be properly evaluated. 
> 
>>>> Or just use the FiniteElement which is a litle bit over kill but already
>>>> possible as it is.
>>>> 
>>>> s = BoundarySource(element=BDM.ufl_element())
>>>> 
>>>> What you say?
>>>> 
>>> When prescribing an element (or a function space) to anything that
>>> resembles a function, I assume that the function (in this case, the
>>> Expression) is interpolated into the function space defined by that
>>> element. Is that correct? 
>>> 
>> Yes, that is correct. We need a FiniteElement to be able to initiate the 
>> ufl.Coefficient. If not provided we automatically choose one based on (for now 
>> the dim method) what the user provides.
>> 
>> 
> 
> 
> But no element space is needed in this case. If the "s" is never used in
> a form (as is the case in the mixed Poisson example), then it only needs
> to be evaluate-able. Hence, we should not require an element or function
> space to be set for Expressions. I seem to remember this being one of
> the main points with the Function vs Expression design.

He he no need to take that disc one more time. The point is that a user can optionally provide a FiniteElement. In this case the expression will get the correct value_size. 

Johan

> --
> Marie
> 
> 
>> Johan
>> 
>> 
>> 
>>> If no, then the behaviour is confusing. If
>>> yes, then that is not what I wanted to do above.
>>> 
>>> 
>>> --
>>> Marie
>>> 
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~dolfin
>>> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
>>> Unsubscribe : https://launchpad.net/~dolfin
>>> More help   : https://help.launchpad.net/ListHelp
>>> 
> 
> 
> _______________________________________________
> 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