Johan Hake wrote: > 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) >
Oops, I meant that I removed Pi_f.interpolate(f, Q_h) and added Pi_f.interpolate(f) I think that we should remove interpolate.py. It's now a wrapper for only two lines of code. Garth > 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 > > _______________________________________________ DOLFIN-dev mailing list DOLFIN-dev@fenics.org http://www.fenics.org/mailman/listinfo/dolfin-dev