dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #10350
Re: Work on a new function.py
I haven't looked at the code in detail but the interface looks very
nice! I'll take a closer look once it's been added.
--
Anders
On Thu, Oct 23, 2008 at 11:37:57PM +0200, Johan Hake wrote:
> Hello!
>
> I have worked on a "new" function.py. Please have a look. It is built around a
> metaclass for Functions. It makes it "easy" to create both a) userdefined
> python functions and b) compiled functions.
>
> The work flow is the same for both cases:
>
> 1) Define a class
> 2) Instantiate it with a FunctionSpace, and any user specific arguments
>
> With the suggested design a user can define classes a la:
>
> class MyCustomFunction(Function):
> def __init__(self,V,dummy):
> # Note no call to Function.__init__!
> self.dummy = dummy
>
> def eval(self,val,x):
> val[0] = 0.5
> val[1] = 0.5
>
> def dim(self):
> return 2
>
> def rank(self):
> return 1
>
> # Can also declare dim and rank as int attributes, see below
>
> class MyCustomCompiledFunction(Function):
> cppcode = "Jada"
> dim = 1
> rank = 0
>
> They are then instantiated by:
>
> mesh = UnitSquare(10,10)
> element = FiniteElement('Lagrange','triangle',1)
>
> print ""
> V = FunctionSpace(mesh,element)
>
> print ""
> f0 = MyCustomFunction(V,"Dummy")
>
> print ""
> f1 = MyCustomCompiledFunction(V)
>
> try:
> # Cannot instantiate the Function class
> f2 = Function(V)
> except Exception, e:
> print e
>
> With this interface only one user defined function can be compiled at a time,
> but we will gain in similare workflow between pure python and compiled
> functions.
>
> I realize that the C++ design must be in place first before we can advance,
> but this is a proof of principle, that we can use metaclasses to do nice
> stuff for the end user.
>
> Johan
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
Attachment:
signature.asc
Description: Digital signature
References