← Back to team overview

dolfin team mailing list archive

Re: Recent changes

 



Martin Sandve Alnæs wrote:
On Fri, May 15, 2009 at 1:37 PM, Anders Logg <logg@xxxxxxxxx> wrote:
There have been some big changes to the code lately. Here's a summary:

1. We now use the wrappers module in dolfin_utils to generate the
DOLFIN wrapper code (in both FFC and SFC). This module generates
slightly different code to the old FFC wrappers. Most notably,
typedefs are used to avoid code duplication and classes/namespaces are
now nested. For application code, that means one must change from

 PrefixBilinearForm
 PrefixLinearForm
 PrefixTestSpace
 PrefixTrialSpace
to

 Prefix::BilinearForm
 Prefix::LinearForm
 Prefix::BilinearForm::TestSpace
 Prefix::BilinearForm::TrialSpace

etc.

If all test and trial spaces are equal, then a common class named

 Prefix::FunctionSpace

will be created (a typedef).

Some of you may remember that we've had this interface before, but
then had to remove it due to problems with SWIG. Now that SWIG just
looks at the pure UFC code it's not a problem anymore.

Also note that forms and function spaces for coefficients are available by name:

a = c*u*v*dx
L = f*v*dx
->
Prefix::Form_a
Prefix::Form_L
Prefix::Form_a::CoefficientSpace_c
Prefix::Form_a::CoefficientSpace_L


This is very useful and a nice improvement.

and coefficients can be set easily using

Prefix::CoefficientSet coeffs;
coeffs.c = my_function_c;
coeffs.f = my_function_f;
Prefix::Form_a a(V, V, coeffs);
Prefix::Form_L L(V, coeffs);

which avoids duplication of  lines like "my_form.f = my_function_f;"
for coefficients shared by multiple forms.


Nice.



2. Initialization of mesh entities now happens in the constructor of
DofMap. The initialization happens automitcally only if the new
non-const (wrt Mesh) constructor of FunctionSpace is used. If the
const version is used, then an error message is given. So if you solve
something with P2 elements and need the edges, these must either first
be generated using mesh.init(1) or the non-const constructor must be
used. Most demos should remain unchanged.

3. When running in parallel not only will the entities be generated,
but they will also be numbered globally. So all mesh entities have a
unique global index accessible in the data section of a mesh (named
"global entity indices %d"). The global dof map should also be
computed correctly now but I haven't checked. This means we may in
principle assemble in parallel now. But probably not in
practice... :-)


Great :)


Very good. What's the situation with mesh i/o? Is is serial?

Garth

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




Follow ups

References