Johan Hake 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 <[email protected]> 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? >
I'm trying something now. If it works, I'll commit shortly. Garth > Johan _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
