On Thu, Jul 2, 2009 at 1:42 PM, Johan Hake<h...@simula.no> 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?

I also prefer this solution.

The reason is this: It's not intuitive that, assuming code like this,

... MyFunction myfunction(V); // user defined function
myfunction.t = 1.0;
... (A) assemble something that depends on myfunction
Vector & v = myfunction.vector();
myfunction.t = 2.0;
... (B) assemble same thing that depends on myfunction

(A) and (B) can give different results, with t = 1.0 in (B)
since the vector has already been computed and t is ignored.

Martin
_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@fenics.org
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to