Isoparametric Elements

8.4. Isoparametric Elements#

It is well known that for iso-parametric mapping (mapping order = Ansatz order), or sub-parametric mapping (mapping order < Ansatz order), the physical space contains linear polynomials, and thus linearized rigid body deformations:

\[ P^1 \circ \Phi_{mapping} \subset V_{T^{ref}} \]

Super-parametric mapping does not.

from ngsolve import *
from netgen.occ import *
from ngsolve.solvers import *
from ngsolve.webgui import Draw
mesh = Circle((0,0), 1).Face().GenerateMesh(maxh=0.5, dim=2).Curve(5)
Draw (mesh);

Open problem: can we fix the kernel by interpolating into Regge elements?

fes = VectorH1(mesh, order=2)
fesReg = HCurlCurl(mesh, order=1)
u,v = fes.TnT()
if False:
    bfa = BilinearForm(InnerProduct (Interpolate(Sym(Grad(u)), fesReg, bonus_intorder=0), 
                                     Interpolate(Sym(Grad(v)), fesReg, bonus_intorder=0))*dx).Assemble()
else:
    bfa = BilinearForm(InnerProduct (Sym(Grad(u)), Sym(Grad(v)))*dx).Assemble()
bfm = BilinearForm(u*v*dx).Assemble()
pre = (bfa.mat+bfm.mat).CreateSparseMatrix().Inverse(inverse="sparsecholesky")

eval, evec = LOBPCG(bfa.mat, bfm.mat, pre=pre, num=5, printrates=False)
print ("Eigenvalues:", list(eval))
Eigenvalues: [-1.4211364056263845e-14, 9.788926568282998e-18, 0.0001700417627647477, 2.728393444548484, 2.7294805324722207]