3.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: [-2.9517161727929885e-17, 2.1319263233467725e-14, 0.00017004176275780606, 2.7283934445484834, 2.729480532472135]