On Mon, Feb 16, 2009 at 01:48:52PM +0100, Johan Hake wrote: > On Monday 16 February 2009 13:15:11 Anders Logg wrote: > > On Mon, Feb 16, 2009 at 12:39:15PM +0100, Johan Hake wrote: > > > On Monday 16 February 2009 12:06:09 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; > > > > > > Can you use this to initialize your own vector if you e.g. is a > > > user-defined Function? I think we have ahd this discussion before, and > > > Martin added such a function, but removed it because it was not general > > > enough, or am I wrong? > > > > Yes, it should work, both for interpolation of user-defined and > > discrete functions. > > So if I want to "discretize" MyFunc I do: > > MyFunc f(V); > ... > f.interpolate(f.vector(),f.function_space());
Yes, that should work. > > > > > > > >> 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. > > > > > > > > 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? > > > > > > I am thinking very simple here, it deals with defining a sane and > > > complete C++ interface to Function. Should we be able to copy a > > > user-defined Function or not? > > > > I think we should (by interpolation) but if there's otherwise > > consensus we should not interpolate then it should not be possible to > > assign user-defined functions since we can't or won't deal with > > copying of eval(). > > You guys decide this one. I stay with the python interface ;) I suggest we keep it as it is now and then add back the interpolation if we should find a need for it. -- Anders
signature.asc
Description: Digital signature
_______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
