Skip to content
This repository was archived by the owner on Feb 21, 2022. It is now read-only.
This repository was archived by the owner on Feb 21, 2022. It is now read-only.

Better nodes for RT/Nedelec #40

@wence-

Description

@wence-

Background

This is related to #15 and also https://bitbucket.org/fenics-project/fiat/issues/25/nedelec-dofs-give-suboptimal-interpolation

Although the nodes that FIAT implements for these elements give optimal order of convergence for projection, they are not sufficient to provide optimal interpolation order. For example, for RTq, the textbook nodes are:

  1. \int_F v \cdot n p ds where p is polynomials of degree q-1;
  2. \int_T v \cdot p dx where p is d-vector-valued polynomials of degree q-2.

With these nodes, the so defined interpolation operator I^q_T has the approximation property (e.g. Brezzi and Fortin, Chapter III.3 (1991)):

||u - I^q_T u||_H(div, T) <= C h^q_T |u|_H^{q+1}_T

||u - I^q_T u||L^2(T) <= C h^q_T |u|_H^q_T

tl;dr: the interpolation error should converge at order q in both the L2 and Hdiv norms.

Instead of integral moments, FIAT uses point normal evaluations on the faces and point component evaluations on the cell (at equispaced lattice points). We therefore lose one order of approximation in interpolation in the Hdiv norm (because effectively we're underintegrating the moments).

On triangles, the face (edge) dofs can be component evaluations if they are chosen to fall at the Gauss points (and the polynomial set is the Gauss-Legendre polynomials) since then the quadrature rule collocates with the nodes of polynomial. No such construction exists for face dofs on tetrahedra.

Proposed fix

To fix this, one should replace the underintegrated point evaluation nodes by textbook integral moments. I've done this in firedrakeproject@c2e2eeb and obtain correct interpolation order for RTq.

Policy implications

Changing FIAT's dual basis modifies the primal basis, which means any checkpoints a user has now don't work. We therefore can't make this change without providing a migration path, and also deprecation warnings.

Proposal

UFL finite elements already have variant tags so that one can (for example) select between equispaced and Gauss-Lobatto points on interval elements. We should introduce variants (say integral [new] and pointwise [old]) defaulting to pointwise for the elements we fix. The form compiler's UFL->fiat element translation then needs to handle this. FIAT should spew deprecation warnings for the pointwise elements and suggest the fix for migrating data (project from old definition to new definition). At some point later (next major fenics release after the deprecation warning is introduced?) we switch the default. In the following release we remove the old nodes.

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions