← Back to team overview

dolfin team mailing list archive

Re: Issues with interpolate

 

On Thursday 02 July 2009 13:50:22 Anders Logg wrote:
> On Thu, Jul 02, 2009 at 01:42:41PM +0200, Johan Hake wrote:
> > On Thursday 02 July 2009 13:24:28 Garth N. Wells wrote:
> > > Johan Hake wrote:
> > > > On Thursday 02 July 2009 13:07:47 Garth N. Wells wrote:
> > > >> Marie Rognes wrote:
> > > >>> Garth N. Wells wrote:
> > > >>>> Marie Rognes wrote:
> > > >>>>> The following code gives r = 0.0. It is not supposed to be.
> > > >>>>>
> > > >>>>> The problem seems to be that f's vector is still all zeros at the
> > > >>>>> call to interpolate. Could this be easily fixed?
> > > >>>>
> > > >>>> This example should have led to an error message since f is not a
> > > >>>> discrete function. I'll take a look.
> > > >>>
> > > >>> Ok, thanks!
> > > >>>
> > > >>> However,
> > > >>>
> > > >>> (a) Why is f not a discrete function? (It is defined on a finite
> > > >>> element space?)
> > > >>
> > > >> On second thought, it may be a discrete function. I think that this
> > > >> is defined in the Python interface and not the C++ interface, so
> > > >> I'll take a look.
> > > >
> > > > A user defined function is not a discrete function untill you either
> > > > call interpolate() or vector, also in python. The problem with the
> > > > later is that you then create a vector which is initialized to 0.
> > > >
> > > > I think this has been discussed before, but should we populate the
> > > > vector using f.interpolate() when vector is called on a userdefined
> > > > function?
> > >
> > > Or perhaps Function::vector() should throw an error if the vector has
> > > not already been allocated.
> >
> > I vote for this.
> >
> > The error message can include information about the user might want to
> > call interpolate?
> >
> > Johan
>
> Sounds good.
>
> Just to check: this only occurs (in Python) when a user defines a
> Function using a C++ expression or overloads eval(), right?

Nope. Calling Function::vector() in C++ with a userdefined Function will 
initialize the vector to zero, and return that vector. I suppose Garth 
suggestion concerned Function::vector() in C++.

Johan


References