← Back to team overview

dolfin team mailing list archive

Re: Image to Function data structure conversion

 

On Saturday 14 February 2009 17:45:44 Martin Sandve Alnæs wrote:
> On Sat, Feb 14, 2009 at 5:34 PM, Johan Hake <hake@xxxxxxxxx> wrote:
> > On Saturday 14 February 2009 17:28:18 Garth N. Wells wrote:
> >> Johan Hake wrote:
> >> > On Saturday 14 February 2009 13:48:05 A Navaei wrote:
> >> >> It seems that the error can be re-produced even without sub-classing
> >> >> and using existing dolfin classes in pure c++. Based on the
> >> >> itk-dolfin interface code, the below minimal code should generate the
> >> >> error (note that I use the binary distribution which uses std::tr1,
> >> >> replacing it with boost shared pointer should not have any effect).
> >> >
> >> > Not in c++ but swig only support std::tr1::shared_ptr from version
> >> > 1.3.37. But if you intend to use shared_ptr only internally there
> >> > whould not be any problems.
> >> >
> >> >> After wrapping in python:
> >> >>
> >> >> (1) Calling FunctionTest.CreateFunction(), which returns by value,
> >> >> results this error:
> >> >>
> >> >> RuntimeError: *** Error: Unable to assign to function, missing
> >> >> coefficients (user-defined function).
> >> >
> >> > You cannot assign another user-defined function to another Function.
> >> > It must be a discrete function, which has an initialized _vector. This
> >> > is probably a feature that other developers should answer for.
> >> >
> >> > However this means that you cannot copy a userdefined function, with
> >> > the side effect of not beeing able to return a user-defined Function
> >> > by value.
> >> >
> >> >> Since dolfin::Function does come with the required copy ctors, the
> >> >> problem cannot be stemmed from this.
> >> >
> >> > This use the assignment operator which requires the Function to be a
> >> > discrete and not a user-defined Function.
> >> >
> >> > I consider this to be a bug in the library. Any other comments from
> >> > the C++ DOLFIN developers (I am mostly dealing with the python
> >> > interface)?
> >>
> >> In a nutshell, are you suggesting that the Function copy constructor
> >> should work for user-defined Functions?
> >
> > Yes. Why shouldn't it?
> >
> > I can see why the assigment operator should not work.
>
> If I understand this right, what you propose is probably not
> technically possible in C++ with the current design. The old design
> which used the envelope-letter could have dealt with this.

Why's that?

The only data that needs to be copied are the FunctionSpace, when _vector is 
null, and this is shared? Am I missing somthing wrt to the copting of any 
derived class of Function?

Johan


Follow ups

References