← Back to team overview

dolfin team mailing list archive

Re: A minimal c++ Function test and some bugs

 

2009/2/17 Anders Logg <logg@xxxxxxxxx>:
> On Tue, Feb 17, 2009 at 03:28:08PM +0000, Garth N. Wells wrote:
>>
>>
>> A Navaei wrote:
>> > 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?
>> >
>>
>> Signatures are used to permit reading/writing Functions to a file. They
>> are indeed error prone, so I believe that we reached a consensus a short
>> while ago that we would remove pre-compiled elements.
>>
>> Garth
>
> Instead of signatures, I'd recommend that you define a simple form
> file for each of the different types of FunctionSpace you need, for
> example:
>
>  element = FiniteElement("CG", "triangle", 1)
>
>  v = TestFunction(element)
>  u = TrialFunction(element)
>  a = v*u*dx
>
> If you put this in a file named My.form and compile it with FFC using
> -l dolfin, you will get a class named MyFunctionSpace that you can
> then instantiate using just a mesh:
>
>  MyFunctionSpace V(mesh);
>
> Create one form file for each of the different types of FunctionSpace
> that you need, name the files to something suitable and use the
> generated code. That way you won't need to worry about signatures,
> dofmaps and finite elements.

Maybe this should be provided in the main library with a global
access, as this is not specific?

A more robust way, which does not need code generation, is simply
defining the available options as types in an enum or struct. In this
way, in both python and c++ we can have the form-like style:

element = FiniteElement(ElemBasisType.CG, ElemGeoType.Triangle, 1);

which is error-safe.

Any comments on the main subject?


-Ali

>
> --
> Anders
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAkma2rQACgkQTuwUCDsYZdHp4ACfSbCXc2FAulzIdDsKvhz/6EGV
> aY4An0eyftGV3hxR3L25M9LPu3X7KFg+
> =z1cY
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
>
>


Follow ups

References