Subject: [FFC-dev] This battle station is now fully operational

From: Anders Logg <[email-masked]>
Date: Thu, 30 Jun 2005 14:29:10 -0500

Well, it's not really, but we have just reached an important
milestone!

The chain FIAT - FFC - DOLFIN now works for general order Lagrange
finite elements on both triangles and tetrahedra, and it's pretty fast
too! I finally managed to work out all the nasty details of orienting
and matching the nodes on faces of tets. See below for test results.

This currently only works with the CVS versions of FIAT, FFC and
DOLFIN, but I will release new versions of FFC and DOLFIN
shortly. And probably Rob will put together a new release of FIAT.

The FFC release will be 0.1.9 and the DOLFIN release will be 0.5.8
and my plan is to wait for other people to do some testing and then
after another round of bug fixes release versions 0.2.0 and 0.6.0.
The main things for 0.2.x and 0.6.x will be to implement boundary
integrals and possibly hook up DOLFIN with Matt's new mesh.

I implemented a test program that solves Poisson's equation on the
unit square and on the unit cube with homogeneous Dirichlet boundary
conditions.

In 2D, the right-hand side f is given by

    f(x, y) = 2 pi^2 sin(pi x) sin(pi y)

and the exact solution is u(x, y) = sin(pi x) sin(pi y).

In 3D, the right-hand side f is given by

    f(x, y, z) = 3 pi^2 sin(pi x) sin(pi y) sin(pi z)

and the exact solution is u(x, y, z) = sin(pi x) sin(pi y) sin(pi z).

The solution is computed with Lagrange finite elements of degree 1-5
and the error is computed in the maximum norm (maximum taken only over
the values at vertices).

Here are the results (2005-06-30, DOLFIN version 0.5.7+):

Maximum norm error in 2D:
-------------------------

      | h = 1/2   h = 1/4   h = 1/8
------------------------------------
q = 1 | 3.831e-01 1.375e-01 3.748e-02
q = 2 | 1.067e-02 1.782e-03 1.480e-04
q = 3 | 3.675e-03 5.417e-04 4.243e-05
q = 4 | 1.027e-03 2.644e-05 4.862e-07
q = 5 | 1.639e-05 1.803e-06 3.985e-08

Maximum norm error in 3D:
-------------------------

      | h = 1/2   h = 1/4   h = 1/8
------------------------------------
q = 1 | 5.065e-01 2.129e-01 6.127e-02
q = 2 | 3.890e-02 6.874e-03 5.589e-04
q = 3 | 1.088e-03 1.722e-03 1.535e-04
q = 4 | 6.868e-03 2.154e-04 3.983e-06
q = 5 | 3.821e-04 1.450e-05 3.598e-07

I think this looks reasonable.

/Anders