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:
\int_F v \cdot n p ds where p is polynomials of degree q-1;
\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.
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:
\int_F v \cdot n p dswherepis polynomials of degreeq-1;\int_T v \cdot p dxwherepis d-vector-valued polynomials of degreeq-2.With these nodes, the so defined interpolation operator
I^q_Thas the approximation property (e.g. Brezzi and Fortin, Chapter III.3 (1991)):tl;dr: the interpolation error should converge at order
qin 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
varianttags so that one can (for example) select between equispaced and Gauss-Lobatto points on interval elements. We should introduce variants (sayintegral[new] andpointwise[old]) defaulting topointwisefor the elements we fix. The form compiler's UFL->fiat element translation then needs to handle this. FIAT should spew deprecation warnings for thepointwiseelements and suggest the fix for migrating data (projectfrom 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.