25. Non-conforming Finite Element Methods#
In a conforming finite element method, one chooses a sub-space
For reasons of simpler implementation, or even of higher accuracy, the conforming framework is often violated. Examples are:
The finite element space
is not a sub-space of . Examples are the non-conforming triangle, and the Morley element for approximation of .The Dirichlet boundary conditions are interpolated in the boundary vertices.
The curved domain is approximated by straight sided elements
The bilinear-form and the linear-form are approximated by inexact numerical integration
The lemmas by Strang are the extension of Cea’s lemma to the non-conforming setting.
Ref: Gil Strang: Variational crimes in the finite element method
25.1. The First Lemma of Strang#
In the first step, let
and
We do not assume that
The finite element problem is defined as
First Lemma of Strang: Assume that
is continuous on
is uniformly coercive Then there holds
Proof:
Choose an arbitrary
Divide by
Using the triangle inequality, the error
The lemma is proven.
Example: Lumping of the
and perform Galerkin discretization with
is exact for
The bilinear form is now defined only for
Inserting the nodal basis
To apply the first lemma of Strang, we have to verify the uniform coercivity
which is done by transformation to the reference element. The consistency error can be estimated by (exercise!)
Summation over the elements give
The first lemma of Strang proves that this modification of the bilinear-form preserves the order of the discretization error:
A diagonal
It avoids oscillations in boundary layers (exercises!)
In explicit time integration methods for parabolic or hyperbolic problems, one has to solve linear equations with the
-matrix. This becomes cheap for diagonal matrices. See Mass lumping and local time-stepping
25.2. The Second Lemma of Strang#
In the following, we will also skip the requirement
uniform coercivity:
continuity:
The error can now be measured only in the discrete norm
Second Lemma of Strang:
Under the above assumptions there holds
Remark: The first term in the estimate is the approximation error, the second one is called consistency error.
Proof: Let
Again, divide by
The rest follows from the triangle inequality as in the first Lemma of Strang.
The non-conforming
The non-conforming
The finite element space generated by the non-conforming
The functions in
and
We consider the Dirichlet-problem with
from ngsolve import *
from ngsolve.webgui import Draw
mesh = Mesh(unit_square.GenerateMesh(maxh=0.15))
fes = FESpace("nonconforming", mesh, order=1, dirichlet=".*")
u,v = fes.TnT()
a = BilinearForm(grad(u)*grad(v)*dx).Assemble()
f = LinearForm(5*v*dx).Assemble()
gfu = GridFunction(fes)
gfu.vec.data = a.mat.Inverse(freedofs=fes.FreeDofs())*f.vec
Draw (gfu, deformation=True);
We will apply the second lemma of Strang.
The continuous
To bound the approximation term in Strang’s second lemma, we use the
inclusion
To bound the consistency error, we perform integration by parts on every element:
Let
Since
Apply Cauchy-Schwarz on
To estimate these terms, we transform to the reference element
There hold the scaling estimates
On the reference element, we apply the Bramble Hilbert lemma, once for
is bounded on
Similar for the term in
Rescaling to the element
This bounds the consistency term
Thus, the second lemma of Strang provides the error estimate
There are several applications where the non-conforming
The
matrix is diagonal (exercises)It can be used for the approximation of problems in fluid dynamics described by the Navier Stokes equations (see later).
The finite element matrix has exactly 5 non-zero entries in each row associated with inner edges. That allows simplifications in the matrix implementation.
25.3. Solving Stokes’ equation with the non-conforming -triangle#
The weak formulation of Stokes` equation is: Find the velocity vector-field
The first equation is equilibrium of forces,
We will discuss variational formulation with constraints later in the chapter Mixed finite element methods. A key property is the following
Lemma: There holds the commuting diagram property:
Here,
is the interpolation operator by mean-values on edges into the non-conforming space, and is the -orthogonal projection onto constants.
Proof: Both sides are constant functions on each triangle
from ngsolve import *
from netgen.occ import *
from ngsolve.webgui import Draw
rect = Rectangle(10,1).Face()
rect.edges.name = "wall"
rect.edges.Min(X).name = "inlet"
rect.edges.Max(X).name = "outlet"
mesh = Mesh(OCCGeometry(rect, dim=2).GenerateMesh(maxh=0.2))
Draw (mesh);
Build a product spaces with components
# fesh1 = H1(mesh, order=2, dirichlet="wall|inlet")
fesh1 = FESpace("nonconforming", mesh, order=1, dirichlet="wall|inlet")
fesl2 = L2(mesh, order=0)
fes = VectorValued(fesh1) * fesl2
u,p = fes.TrialFunction()
v,q = fes.TestFunction()
a = BilinearForm(fes)
a += InnerProduct(grad(u),grad(v))*dx
a += Trace(grad(u))*q*dx + Trace(grad(v))*p*dx
a.Assemble()
gfu = GridFunction(fes)
gfu.components[0].Set((y*(1-y), 0), definedon=mesh.Boundaries("inlet"))
gfu.vec.data -= a.mat.Inverse(fes.FreeDofs())@a.mat * gfu.vec
Draw (gfu.components[0], mesh, vectors={"grid_size":80})
Draw (gfu.components[1]);