On Tue, Feb 17, 2009 at 04:37:20PM +0000, A Navaei wrote: > 2009/2/17 A Navaei <[email protected]>: > > 2009/2/17 A Navaei <[email protected]>: > >> 2009/2/17 Anders Logg <[email protected]>: > >>> On Tue, Feb 17, 2009 at 04:06:50PM +0000, A Navaei wrote: > >>>> 2009/2/17 Anders Logg <[email protected]>: > >>>> > On Tue, Feb 17, 2009 at 03:59:51PM +0000, A Navaei wrote: > >>>> >> 2009/2/17 A Navaei <[email protected]>: > >>>> >> > The following minimal test for Function in c++ reveals some bugs. I > >>>> >> > guess this example can help me with dealing with the current issues > >>>> >> > of > >>>> >> > ImageFunction. > >>>> >> > > >>>> >> > (1) interpolate.py does not work when a Function is created in c++ > >>>> >> > and > >>>> >> > wrapped (see comment [2]). It seems that the bug is originated from > >>>> >> > the copy constructor (see comment [3]) > >>>> >> > > >>>> >> > (2) In order to perform the interpolation, why is it necessary to > >>>> >> > create another Function and then copy it? > >>>> >> > > >>>> >> > (3) Signature checkes seem not working properly (see comment [1]). > >>>> >> > The > >>>> >> > signature-based assignments are error-prone anyway, why the > >>>> >> > object-oriented approach is not used? > >>>> >> > > >>>> >> > > >>>> >> I'm adding another issue: > >>>> >> > >>>> >> (4) Sub-classing Function and calling the sub-class interpolate() > >>>> >> function does not call eval(). > >>>> > > >>>> > Which interpolate() function? There are 4 different. > >>>> > >>>> The one used in comment [4]. > >>> > >>> Yes, I see that now. This is expected behavior. The reason is that the > >>> call to vector() will create a zero vector if there is no vector. Once > >>> the vector has been created, the Function will change from being a > >>> user-defined function to a discrete function which means that eval() > >>> will not be called. > >>> > >>> I don't know what the best solution is. We could either add a new > >>> function just called interpolate() without arguments that interpolates > >>> the function to its function space. > >> > >> I think this is a good idea, as calling > >> > >> v.interpolate(v.vector(), v.function_space()); > >> > >> is somehow pointless. > >> > >> > >> -Ali > >> > >>> Or one can work around it by > >>> > >>> Vector x; > >>> v.interpolate(x, v.function_space()); > >>> v.vector() = x; > > > > This is what interpolate.py does. Like I explained in (1), this is > > buggy when Function is created in c++ and then wrapped in python. > > Also it doesn't work in pure c++ (the work around is already given in > the test code). Please try comment [2] in sandbox.
Can you extend the sandbox code to [2] (in the simplest possible way) and I can take a look. -- Anders > -Ali > > > Also, the above answered question (2). > > > > > > -Ali > > > >>> > >>> > >>> -----BEGIN PGP SIGNATURE----- > >>> Version: GnuPG v1.4.9 (GNU/Linux) > >>> > >>> iEYEARECAAYFAkma5H0ACgkQTuwUCDsYZdFvpwCdFb7i80BdC7XDqxwbtlr28FV0 > >>> g30AnjcDnux+6kRuTBSKdnhtKAnV7zuz > >>> =ri5f > >>> -----END PGP SIGNATURE----- > >>> > >>> _______________________________________________ > >>> 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
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
