← Back to team overview

dolfin team mailing list archive

Re: Image to Function data structure conversion

 

On Saturday 14 February 2009 19:05:25 Garth N. Wells wrote:
> Martin Sandve Alnæs wrote:
> > On Sat, Feb 14, 2009 at 6:08 PM, Johan Hake <hake@xxxxxxxxx> wrote:
> >> 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
> >
> > I haven't followed this in detail, so I may misunderstand, but if you
> > have a subclass MyFunction of Function, copying it to a Function can't
> > possibly work. How could it?
>
> It doesn't work, but it is now possible to copy a MyFunction to a
> MyFunction, which wasn't possible before.

Nice! 

Also nice with the function has_vector().

Johan


References