A Halloween ghost in NGSolve:
nonlinear HHJ shell with frictional contact

Michael Neunteufel, Joachim Schöberl

NGSolve Technical Note 2026-04 \(\bullet\)  October 2026

image image image

Figure 1: A sheet with eye and mouth holes falls onto an invisible sphere, then is dragged around by it (\(t = 0.44,\ 1,\ 6.6\)). Rendered with the NGSolve webgui (curved order-2 elements); colour: norm of the Regge-interpolated membrane strain \(|E_r|\), range \([0, 0.085]\).

Setting

A flat circular sheet \(S \subset \mathbb{R}^3\) of radius \(1.2\), with a slightly ragged hem \(r(\theta) = 1.2\,(1 + 0.04\sin 11\theta + 0.025\sin(23\theta+1))\) and three elliptic holes (eyes and mouth), starts at rest at height \(z_0 = 0.6\) above a sphere (“head”) of radius \(R_h = 0.35\). The head is at rest until \(t = 2.5\), then follows a smoothly ramped path \[\boldsymbol c(t) = \bigl(1-e^{-s/0.7}\bigr)\bigl(0.55\sin 1.3s,\ 0.15\sin 0.9s,\ 0.45\sin^2 0.7s\bigr), \qquad s = t - 2.5 .\] The sheet is a surface mesh in 3D with 3804 triangles (\(h = 0.05\)). The unknown is the displacement \(\boldsymbol u: S \to \mathbb{R}^3\); the deformed position is \(\boldsymbol X+ \boldsymbol u\).

Shell model

Kinematics.

With the unit normal \(\boldsymbol n\) of the reference surface and the tangential projection \(\boldsymbol P= I - \boldsymbol n\otimes\boldsymbol n\), the surface deformation gradient and Green strain are \[F = \nabla_\tau \boldsymbol u+ \boldsymbol P, \qquad E = \tfrac12 (F^T F - \boldsymbol P),\] and the deformed normal is \(\boldsymbol n_{\mathrm{def}} = \operatorname{cof}(F)\boldsymbol n/ |\operatorname{cof}(F)\boldsymbol n|\).

Membrane.

To avoid membrane locking, \(E\) is interpolated into lowest-order Regge elements (\(H(\mathrm{curl\,curl})\), order 1), \(E_r = \mathcal I^{\mathrm{Regge}} E\). The membrane energy is compressible neo-Hooke, \[W_{\mathrm{mem}} = \frac{\mu}{2}(\operatorname{tr} C - 2) - \mu \ln J + \frac{\lambda}{2} (\ln J)^2, \qquad C = 2E_r + \boldsymbol P,\quad J^2 = \det(C + \boldsymbol n\otimes\boldsymbol n),\] with \(\mu = 500\), \(\lambda = 200\) (per unit area). St. Venant–Kirchhoff was used first, but it loses convexity for stretches below \(1/\sqrt3\), which happens at the tips of the holes when the sheet is compressed; Newton then stalled.

Bending: hybridized Hellan–Herrmann–Johnson.

We use the nonlinear HHJ shell element of Neunteufel and Schöberl. The bending moment \(\sigma\) is an independent unknown in \(H(\mathrm{div\,div})\) on the surface. The bending part of the Lagrangian is \[\sum_{T} \int_T \Bigl( -\tfrac12\, \mathcal M^{-1}\sigma : \sigma + \sigma : H_\nu(\boldsymbol u) \Bigr) + \sum_T \int_{\partial T} \Bigl( \sphericalangle(\boldsymbol\mu_{\mathrm{def}}, \bar{\boldsymbol\mu}) - \tfrac{\pi}{2} + \alpha\cdot\boldsymbol\mu \Bigr)\, \sigma_{\mu\mu},\] where

Hybridization.

\(\sigma\) is taken discontinuous (HDivDivSurface with discontinuous=True), and the normal-normal continuity of \(\sigma\) is restored by the Lagrange multiplier \(\alpha\) in NormalFacetSurface (order 1), which plays the role of the rotation across edges. On the free boundary (hem and hole rims) \(\alpha\) has no boundary condition, which gives \(\sigma_{\mu\mu} = 0\) weakly. Since \(\sigma\) is now element-local, it is eliminated by static condensation; the condensed system in \((\boldsymbol u, \alpha)\) is symmetric positive definite and is solved with a sparse Cholesky factorization. (The non-hybridized mixed form is a saddle point problem and needed a general LU.)

Sanity check: a cantilever strip under small load gives a tip deflection of \(-0.024988\) vs. \(-qL^4/(8D) = -0.025\).

Contact, damping and loads

Time stepping

Implicit Euler written as an incremental energy: in each step we find the stationary point of \[\begin{aligned} \Pi^{n+1}(\boldsymbol u,\sigma,\alpha) = \int_S \Bigl[\, & \frac{\rho}{2\Delta t^2}\,|\boldsymbol u- \boldsymbol u^n - \Delta t\, \boldsymbol v^n|^2 + W_{\mathrm{mem}}(\boldsymbol u) + \rho g\, u_z + \frac{k_c}{2} [R_h - |\boldsymbol X+ \boldsymbol u- \boldsymbol c^{n+1}|]_+^2 \\ & + \frac{c_f \chi^n + c_a}{2\Delta t}\, |\boldsymbol u- \boldsymbol u^n - \Delta t\, \boldsymbol v_h|^2 \Bigr] + \text{(HHJ bending terms)}, \end{aligned}\] then set \(\boldsymbol v^{n+1} = (\boldsymbol u^{n+1} - \boldsymbol u^n)/\Delta t\). The step is \(\Delta t = 0.01\), 800 steps for \(t \in [0, 8]\). Each step uses Newton on the condensed system, starting from the predictor \(\boldsymbol u^n + \Delta t\,\boldsymbol v^n\). A Newton update is halved while the residual is not finite (inverted element); a failed step would be retried with \(\Delta t/2\), recursively down to \(\Delta t/16\). In the final run no step needed this: 2–6 Newton iterations per step.

Discretization summary.

displacement \(\boldsymbol u\) VectorH1, order 2
moment \(\sigma\) HDivDivSurface, order 1, discontinuous (condensed)
multiplier \(\alpha\) NormalFacetSurface, order 1
membrane strain Regge interpolation, HCurlCurl order 1
averaged normal \(\bar{\boldsymbol\mu}\) VectorFacetSurface, order 2
unknowns 69 426 total, 35 190 after condensation
linear solver sparse Cholesky

Implementation notes

Reference.

M. Neunteufel, J. Schöberl, The Hellan–Herrmann–Johnson method for nonlinear shells, Computers & Structures 225 (2019); M. Neunteufel, J. Schöberl, Avoiding membrane locking with Regge interpolation, CMAME 373 (2021); see also the ESI minicourse https://jschoeberl.github.io/ESI-Elasticity-Geometry-NGSolve/ESI-minicourse.html.