UFL

Allow finite element exterior calculus notation in choice of elements

Registered by Anders Logg

Email from Doug Arnold (2010-09-30):

FEniCS/UFL uses historical element names , like Raviart-Thomas,
Nedelec 1st kind H(div), etc. These have to be learned, although
this is fortunately ameliorated somewhat by having some
synonyms, like N1curl. It can also cause confusion sometimes,
as the names are not always used consistently in the literature
(and I think that "Discontinuous Lagrange" is a contradiction
in terms).

However there is a systematic, consistent way to refer to
the majority of elements available, so I am making the
suggesting that this systematic form be added as
an additional option. The systematic way is what is
used in the Finite Element Exterior Calculus, namely the
two families, which are in denoted in LaTeX by
$P_r\Lambda^k$ and $P_r^-\Lambda^k$, defined for
polynomial degree r=1,2,... and form degree k between
0 and n on simplices of dimension n. Thus I am suggesting
adding something like

  V = FunctionSpace(mesh, "P Lambda", r, k)
and
  V = FunctionSpace(mesh, "P- Lambda", r, k)

The translation to current names is:

  {"P Lambda", r, 0} and {"P- Lambda", r, 0} coincide and
     are equal to {"Lagrange", r}
  {"P Lambda", r, n} is the same as {"Discontinuous Lagrange", r}
  {"P- Lambda", r, n} is the same as {"Discontinuous Lagrange", r-1}
  {"P- Lambda", r, 1} is {"Nedelec 1st kind H(curl)", r}
  {"P Lambda", r, 1} is {"Nedelec 2nd kind H(curl)", r}
  {"P- Lambda", r, n-1} is {"Nedelec 1st kind H(div)", r}
  {"P Lambda", r, n-1} is {"Nedelec 2nd kind H(div)", r}

I want to stress that there is nothing arbitrary about this.
The whole family of P Lambda and P- Lambda spaces can be
defined at once for all r, k, n. This even works for n=1
and n>3 (although the latter are not yet implemented in
FEniCS).

There is a small issue in 2D where n-1 = 1, so the last
two cases conflict with the preceding two. This is the
choice between the rotated Raviart-Thomas or Brezzi-Douglas-Marini
elements or the usual ones in 2D. I would suggest always
thinking of 1-forms as the images of gradients, and hence
1-forms always correspond to H(curl), also in 2D.

What do you all think?

Blueprint information

Status:
Complete
Approver:
None
Priority:
Medium
Drafter:
None
Direction:
Approved
Assignee:
Marie Rognes
Definition:
Approved
Series goal:
None
Implementation:
Implemented
Milestone target:
None
Started by
Marie Rognes
Completed by
Marie Rognes

Related branches

Sprints

Whiteboard

AL: Required changes are:

1. Modify register_element in ufl/elementlist.py so that it takes an extra argument: element_alias which maps family name etc to an existing default name for the given element. The argument can be None by default.

2. Add register_element calls for the FEEC elements.

3. Replace the use of ufl_elements in finiteelement.py so that it uses a new function in ufl/elementlist.py instead of accessing the ufl_elements dictionary directly. That new function can check if element_alias function is present (is not None) and use that to find the correct default element.

Marie: Will fix after adding 2nd kind Nedelec elements in FIAT. (So that we actually support all of the FEEC elements for n <= 3.)

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.