dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #16448
Re: Expression and Function
>
>
> kent-and@xxxxxxxxx wrote:
>> Hi, I am very happy with the Expression, but old code like
>>
>> class Dabla(Function):
>> def eval(...)
>>
>> still works.
>>
>> The only problem is that the function is zero even though eval is
>> implemented. Is it
>> possible to turn this old code into an error?
>
> In C++, no. There is no mechanism in C++ to prevent a user overloading
> or hiding a member function.
>
> Garth
>
But the problem here is that the method of the subclass is not called.
Furthermore,
code written prior to Expression called the method of the subclass.
Consider the following code:
from dolfin import *
class Foo(Function):
def eval(self, v, x):
v[0] = 1
mesh = UnitSquare(12,12)
V = FunctionSpace(mesh, 'CG', 1)
f = Foo(V)
fi = interpolate(f, V)
print fi.vector().norm("l2")
here:
fi.vector().norm("l2")
will return 0.
which is clearly not expected.
What the user should of course do is to use Expression instead of
Function. Then
the above code would work. And I think the user should somehow be told
to use Expression.
Kent
Follow ups
References