> > > kent-...@simula.no 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 _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev