← Back to team overview

dolfin team mailing list archive

Re: A minimal c++ Function test and some bugs

 

On Tue, Feb 17, 2009 at 04:06:50PM +0000, A Navaei wrote:
> 2009/2/17 Anders Logg <logg@xxxxxxxxx>:
> > On Tue, Feb 17, 2009 at 03:59:51PM +0000, A Navaei wrote:
> >> 2009/2/17 A Navaei <axnavaei@xxxxxxxxxxxxxx>:
> >> > The following minimal test for Function in c++ reveals some bugs. I
> >> > guess this example can help me with dealing with the current issues of
> >> > ImageFunction.
> >> >
> >> > (1) interpolate.py does not work when a Function is created in c++ and
> >> > wrapped (see comment [2]). It seems that the bug is originated from
> >> > the copy constructor (see comment [3])
> >> >
> >> > (2) In order to perform the interpolation, why is it necessary to
> >> > create another Function and then copy it?
> >> >
> >> > (3) Signature checkes seem not working properly (see comment [1]). The
> >> > signature-based assignments are error-prone anyway, why the
> >> > object-oriented approach is not used?
> >> >
> >> >
> >> I'm adding another issue:
> >>
> >> (4) Sub-classing Function and calling the sub-class interpolate()
> >> function does not call eval().
> >
> > Which interpolate() function? There are 4 different.
> 
> The one used in comment [4].

Yes, I see that now. This is expected behavior. The reason is that the
call to vector() will create a zero vector if there is no vector. Once
the vector has been created, the Function will change from being a
user-defined function to a discrete function which means that eval()
will not be called.

I don't know what the best solution is. We could either add a new
function just called interpolate() without arguments that interpolates
the function to its function space. Or one can work around it by

  Vector x;
  v.interpolate(x, v.function_space());
  v.vector() = x;

-- 
Anders

Attachment: signature.asc
Description: Digital signature


Follow ups

References