← Back to team overview

dolfin team mailing list archive

Re: Issues with interpolate

 

On Thursday 02 July 2009 15:17:08 Garth N. Wells wrote:
> Johan Hake wrote:
> > On Thursday 02 July 2009 22:48:18 Marie Rognes wrote:
> >> 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?
> >>
> >> What is wrong with actually populating the vector with the values one
> >> expects it to have?
> >> (When would one not want this?)
> >
> > Nothing is wrong with that. It just changes the state of the userdefined
> > function. The question is should this change be the implicit result of a
> > call to Function::vector() or should it be a result of an explicit
> > action: a call to Function::interpolate().
> >
> >> Also note that it is not intuitive to me that one must call
> >> f.interpolate() before
> >>
> >> 	Pi_f = interpolate(f, Q_h)
>
> I thought that I removed the above function from the C++ interface and
> added
>
>      Pi_f = interpolate(f)

Marie is refering to the standalone python function interpolate, implemented 
in the interpolate.py file. Not sure what you are aiming at.

I cannot find any non-class interpolate function in c++. At least there are no 
such that is wrapped to python.

Johan

> Garth
>
> > I agree... Not easy to satisfy every one.
> >
> > Should we put in a:
> >
> >   if not f.has_vector():
> >       info("Interpolating userdefined function.")
> >       f.interpolate()
> >
> > in the python part of the interpolate function?
> >
> > johan




Follow ups

References