← Back to team overview

dolfin team mailing list archive

Re: Issues with interpolate

 

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 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