Anders Logg wrote:
> On Mon, Feb 16, 2009 at 11:52:54AM +0100, Johan Hake wrote:
>> On Monday 16 February 2009 11:31:36 Anders Logg wrote:
>>> On Mon, Feb 16, 2009 at 10:12:21AM +0000, Garth N. Wells wrote:
>>>> Anders Logg wrote:
>>>>> On Mon, Feb 16, 2009 at 10:36:52AM +0100, Johan Hake wrote:
>>>>>> On Sunday 15 February 2009 21:23:44 DOLFIN wrote:
>>>>>>> One or more new changesets pushed to the primary dolfin repository.
>>>>>>> A short summary of the last three changesets is included below.
>>>>>>>
>>>>>>> changeset:   5701:d3661203791d9c7707695c59adbbd3a2e20a220c
>>>>>>> tag:         tip
>>>>>>> user:        Anders Logg <[email protected]>
>>>>>>> date:        Sun Feb 15 21:23:36 2009 +0100
>>>>>>> files:       dolfin/function/Function.cpp
>>>>>>> description:
>>>>>>> Move code from Function copy constructor to assignment operator and
>>>>>>> call assignment operator from copy constructor
>>>>>> I liked Garth solution better.
>>>>>>
>>>>>>  1) A copy constructor that, just copies the Function if it has
>>>>>>     a FunctionSpace.
>>>>>>  2) The assignment operator works only for discrete Functions.
>>>>>>
>>>>>> We could add an interpolate() (or something) function that
>>>>>>
>>>>>>   v.interpolate(*_vector, *_function_space);
>>>>> We already have exactly such a function.
>> Do we?
> 
> Yes:
> 
>   /// Interpolate function to given function space
>   void interpolate(GenericVector& coefficients, const FunctionSpace& V) const;
> 
>>>>>> Then the user can explicitly create a discrete function of its
>>>>>> user-defined Function. Now the user gets this as an implicitly result
>>>>>> of a function copy, which make litle sense to me.
>>>>>>
>>>>>> But that's just me :)
>>>>> I like it. Other opinions?
>>>> It is neat, but I would prefer any interpolation to be more explicit so
>>>> that it's clear what's going on. A copy should be a straight copy.
>>>>
>>>> Garth
>>> ok. I've changed it back. See if it looks ok.
>> Now a user cannot copy a Function that is not a discrete function, which was 
>> the case before we started all this. 
> 
> Wasn't that the point? It's not possible to copy the eval() operator.
> 

It is if a MyFunction object is copied to a MyFunction object, which we 
couldn't do before. My change made this possible.

Garth

> Well it is but then it would be necessary to keep a pointer to the
> given Function and propagate the eval call to that Function's eval.
> That seems a bit overkill.
> 
>> Also sometimes a copy is something different than an assignment, so it is 
>> not 
>> always meaningfull to use *this = other; in the copy constructor.
> 
> I've found it's almost always the case that one can implement the
> copy constructor by
> 
>   *this = other;
> 
> We use this in a bunch of other places, including the Mesh class.
> 
> In which cases will it break?
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> DOLFIN-dev mailing list
> [email protected]
> http://www.fenics.org/mailman/listinfo/dolfin-dev


_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to