← Back to team overview

dolfin team mailing list archive

Re: new Function design

 

Shawn Walker wrote:
I may be missing part of the argument here, but for the case when a user defined function is something like exp(x^2 + y^2), could we just pass a function pointer (for this particular function) to the interpolation routine? In MATLAB, this type of thing is easy because of function handles. I know we don't have that luxury, but a function pointer kind of does this.

Sorry, if I am not understanding the issue.


The difficulty is that all the functions in a form come from a finite element space, and the space determines where we need to evaluate the functions. Before, DOLFIN figured out the appropriate space, and user-defined function were interpolated in this space, but it made the design complex when handling different function types. What we aim for now is to have all Functions fully-defined (but we'd like to keep it simple for users too).

Garth

- Shawn

On Tue, 21 Oct 2008, Garth N. Wells wrote:



Anders Logg wrote:
On Tue, Oct 21, 2008 at 04:45:01PM +0100, Garth N. Wells wrote:
I have a few questions and thoughts regarding the new Function design

* It's not clear to me what the intention is with user-defined
functions. The functions Function::interpolate(...) never call eval(..),
so they can't pick up user-defined values. Should Function::interpolate
test for the presence of a GenericVector to decide whether or not the
Function is discrete or user-defined?

Yes, sorry. I've missed this. I'll fix it.

* It would be useful to declare user-defined functions without
associating a FunctionSpace. If we want to interpolate the function, a
FunctionSpace must then be provided. Anyone see any problems with this?

The reasoning here is that all Functions must always be associated
with a FunctionSpace so that they may be correctly interpreted in
forms and correctly plotted. When a Function is created in PyDOLFIN,
it must always be associated with a certain FiniteElement (and in a
while FunctionSpace). It would simplify the handling of Functions if
they are always associated with a FunctionSpace.


I agree that is makes life simple if every function has a space, but it
is a bit clunky for declaring user-defined functions. The forms must be
declared first to extract the finite element to create the function
space. Could look nasty when a lot of functions are involved.

We have a function Function::interpolate which takes a function space V
as an argument and it interpolates the function u in V. What if we
permit undefined function spaces (which perhaps only have a domain)? We
would then interpolate the user defined function u in the provided space V.

Garth



------------------------------------------------------------------------

_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev


_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev





Follow ups

References