1 Introduction

The idea behind isogeometric analysis (IGA) [1] is to bridge the gap between computer aided design (CAD) and finite element analysis (FEA). By employing B-splines or Non-uniform rational B-splines (NURBS) as the basis for FEA, IGA not only provides geometrically exact analysis, but the high smoothness of the spline bases also provides high accuracy per degree of freedom [2]. The close link with conventional engineering fields such as automotive, offshore, aircraft or civil engineering makes structural analysis with isogeometric analysis a particular field of interest. Besides the performance of the different isogeometric element formulations for thin Kirchhoff–Love shells [3,4,5,6], moderately thick Reissner-Mindlin shells [7,8,9,10,11] or thicker solid-like shells [12, 13] in static and dynamic simulations, conventional engineering disciplines also rely on accurate modal and (post-)buckling simulations. In addition, the ability to handle complex (multipatch) CAD geometries via trimming [14,15,16] or patch coupling methods [17,18,19,20,21] improves the applicability of IGA in structural engineering. For problems with a large number of degrees of freedom or problems with a large number of load/time steps, mesh adaptivity can play a key role in providing efficient simulations for industrial applications.

Fig. 1
figure 1

A typical flowchart for an adaptive meshing routine. The classical solution stepping depicts a process without adaptive meshing. Here, a solution is obtained by the solve and the solution is advanced (e.g. in time or load step) and recomputed. The adaptive meshing step denotes the additional operations for mesh adaptivity and the Addition for solution stepping includes an additional transfer step in case the adaptive meshing method is applied to solution. The Estimate block provides an error estimation with local contributions per element or per degree of freedom (DoF). The Mark block contains a marking rule that marks regions for refinement based on a specific rule. The Refine block transforms the current mesh to a new mesh, where regions are refined and coarsened based on the marking rule. The block Transfer transfers the previous solution to the new mesh, so that it can be used to recompute the present interval on a modified mesh. This recomputation is performed again in the Solve block and follows through the subsequent blocks, until an adaptivity criterion is reached. For example, a criterion that requires the total error in the mesh to be within certain bounds

A loop in an adaptive isogeometric method (AIGM) consists of the steps solve the Partial Differential Equation (PDE) at hand, estimate element-wise error contributions, mark regions for refinement, refine (coarsen) marked regions [22], see Fig. 1. Here, localised regions can be defined element-wise or function-wise. The AIGM process can be repeated in an iterative manner (e.g. for static, buckling or modal analysis), until satisfactory accuracy is achieved or it can be applied (iteratively) within a time/load stepping procedure. A broad overview of the mathematical foundations of AIGMs is given in [23]. In previous works, AIGMs are developed for different applications (solve), using different estimation strategies, marking strategies and often for mesh refinement, with a few also providing coarsening strategies [24,25,26,27,28].

Solve:

The solve block contains the partial differential equation (PDE) at hand. It can be a physics-based problem, e.g., to solve shell [14, 29, 30], linear elasticity [31] or free-surface flow [32] problems. Alternatively, the solve step can involve a non-physics PDE, e.g. for mesh generation [33].

Estimate:

Determination of localised errors is done in the estimate block. In the works [14, 29, 30], an error estimator based on a residual-like variational problem in the so-called bubble-space was presented for Kirchhoff plates, Kirchhoff–Love shells and trimmed domains. This method has proven a large decrease in CPU time compared to a residual-based error estimator in the strong form, due to its easy parallelisation and the small block-structure of the linear system to solve. As an alternative to this method, error estimation can also be performed in a goal-oriented fashion, e.g., by the Dual-Weighted Residual (DWR) method. This method has been applied in the FEA context in various works [34,35,36,37,38,39,40,41] and was used in the works [32, 42] for Poisson and free-boundary problems, in [43] for a geometrically non-linear rod, in [33] for PDE-based domain parametrisations and in [31] for micromechanical modelling of trabecular bone. Goal-oriented refinement in general provides localised error estimates by solving a linear adjoint problem on the current space and an enriched space.

Mark:

As soon as localised error contributions are known, regions can be marked for refinement. This marking is mostly done using the Dörfler marking strategy [44], as in [22, 25, 35], which involves marking the regions with the largest error contributions until their sum exceeds a certain percentage of the total error. An alternative is to mark the regions with an error higher than a threshold (an absolute threshold based on the maximum error) [29, 45] or based on a relative threshold taking a fixed percentage of the total number of cells for refinement. In [45] the latter two strategies are discussed.

Refine:

Local refinement for adaptive meshing in isogeometric analysis is enabled by the use of Hierarchical B-splines (HB-splines) [46], Truncated Hierarchical B-splines (THB-splines) [45, 47] or T-splines [48] amongst other spline constructions, which are reviewed in [49]. HB-splines provides a nested, linear dependent space that violates the partition of unity property. To preserve the latter, THB-splines have been introduced in [47]. For (T)HB-splines suitable grading to generate admissible meshes should be taken into account in order to guarantee a bounded error [22], for which algorithms have been presented in [50]. In the work of [51], a distinction is made between greedy and safe refinement, the former being a refinement of cells with a 1-level difference with adjacent cells and the latter being a refinement complying with the refinement neighborhoods defined in [22]. Besides for adaptive meshing for solving PDEs [24,25,26,27,28, 33], THB-splines have also been succesfully applied in the context of fitting [52, 53].

Transfer:

The transfer from previous time/load-steps onto a new mesh can be done using different methodologies. In the work of [27] different least-squares approaches are provided. Furthermore, quasi-interpolation [54, 55] is a technique that can be used to transfer solutions between hierarchical meshes.

In this paper, we employ goal-oriented adaptive refinement for isogeometric thin shell analysis to facilitate THB-adaptive meshing for a variation of structural analysis problems. The developed framework is versatile in terms of the goal functional being used and provides an adaptive meshing strategy for linear an non-linear static, modal, buckling and post-buckling problems. In brief, the contribution of the paper is threefold. Firstly, we use the Dual-Weighted Residual (DWR) method to derive novel error estimators for structural shell analysis, given goal functionals based on displacements, (principal) stresses and strains, forces and moments. Secondly, we employ the eigenvalue DWR from [34, 56] for error estimations for modal and buckling analyses. Thirdly, the goal functionals are used to drive an adaptive meshing strategy with suitable grading and efficient transfer of solutions by quasi-interpolation method on hierarchical spline spaces [54, 55]. This adaptive meshing strategy is applied to non-linear shell analysis with focus on buckling problems with snap-through and bifurcation instabilities - being new applications in the realm of adaptive meshing research for nonlinear shell problems. It should be noted that the present framework is developed for isogeometric Kirchhoff–Love shells - since it provides a natural separation of bending and membrane terms - but it is easily adapted for other shell formulations. By defining a frame work for 2-dimensional parametric domains and by presenting a wide range of mechanics-inspired goal functionals, the present work extends an earlier work by [43] for geometrically non-linear rods.

The paper is structured as follows. In Sect. 2, the isogeometric Kirchhoff–Love shell analysis proposed by [3] is briefly revised and some basic concepts for structural analysis computations are given. In Sect. 3, the Dual-Weighted Residual (DWR) method is provided for the isogeometric Kirchhoff–Love shell using the membrane and flexural strain split. However, it can be used for general elasticity problems. Moreover, the section provides the DWR method for eigenvalue problems to compute error estimators for modal and buckling analyses. Thereafter, Sect. 4 provides the details for adaptivity for isogeometric analysis. This includes the concept of Truncated-Hierarchical B-splines (THB-splines) and admissible refinement. Furthermore, the mark and transfer operations are described. In Sect. 5, a summary of the preceeding sections is provided by means of a global algorithm for the AIGM for structural analysis computations with load-stepping. In Sect. 6 the present work is evaluated on numerical benchmark problems, ranging from linear problems with analytical solutions to non-linear shell problems. Finally, Sect. 7 provides conclusions and and outlook based on this work.

2 Isogeometric Kirchhoff–Love shell analysis

In this section, we provide a brief background on the Kirchhoff–Love shell formulation. For more details on this formulation, we refer to [3,4,5, 57, 58].

Check punctuation!!

2.1 Shell kinematics

Since Kirchhoff–Love shells satisfy the Kirchhoff Hypothesis [59], the coordinates \({\textbf {x}}\) of any parametric point \({\varvec{\theta }} = (\theta ^1, \theta ^2, \theta ^3)\) in the shell surface can be represented by the surface position \({\textbf {r}}(\theta ^1,\theta ^2)\) and contribution in normal direction \(\theta ^3{\textbf {a}}_3\) as

$$\begin{aligned} {\textbf {x}}({\varvec{\theta }}) = {\textbf {r}}(\theta ^1,\theta ^2) + \theta ^3{\textbf {a}}_3, \end{aligned}$$
(1)

Given the covariant basis of the surface \({\textbf {r}}\), defined by \({\textbf {a}}_{\alpha }, \alpha =1,2\) and the orthogonal unit normal \({\textbf {a}}_3\), the covariant basis of \({\textbf {x}}\) is defined as follows:

$$\begin{aligned} {\textbf {g}}_\alpha = {\textbf {x}}_{,\alpha } = {\textbf {a}}_\alpha + \theta ^3 {\textbf {a}}_{3,\alpha },\quad {\textbf {g}}_3 = {\textbf {x}}_{,3} = {\textbf {a}}_3. \end{aligned}$$
(2)

Given the second fundamental form \(b_{\alpha \beta } = {\textbf {a}}_3\cdot {\textbf {a}}_{\alpha ,\beta }=-{\textbf {a }}_{3,\beta }\cdot {\textbf {a}}_\alpha\) and the metric coefficients defined as

$$\begin{aligned} g_{\alpha \beta } = {\textbf {g}}_\alpha \cdot {\textbf {g}}_\beta = a_{\alpha \beta }-2\theta ^3b_{\alpha \beta }, \end{aligned}$$
(3)

the contravariant basis vectors \({\textbf {g}}^\alpha\) can simply be obtained by \({\textbf {g}}^{\alpha } = g^{\alpha \beta }{\textbf {g}}_\beta\). The undeformed configuration \({\textbf {r}}\) and the deformed configuration \(\mathring{{\textbf {r}}}\) of the surface are related by \({\textbf {r}}=\mathring{{\textbf {r}}}+{\textbf {u}}\). From the defintion of the deformation gradient \({\textbf {F}} = {\textbf {g}}_i \otimes \mathring{{\textbf {g}}}^i\), the deformation tensor \({\textbf {C}}\) can be obtained:

$$\begin{aligned} {\textbf {C}} = {\textbf {F}}^\top {\textbf {F}} = {\textbf {g}}_i\cdot {\textbf {g}}_j \, \mathring{{\textbf {g}}}^i\otimes \mathring{{\textbf {g}}}^j = g_{ij} \, \mathring{{\textbf {g}}}^i\otimes \mathring{{\textbf {g}}}^j. \end{aligned}$$
(4)

Note that the deformation tensor is defined in the contravariant undeformed basis \(\mathring{{\textbf {g}}}^i\otimes \mathring{{\textbf {g}}}^j\). For Kirchhoff–Love shells, it is known that \(g_{\alpha 3}=g_{3\alpha }=0\), hence this implies \(C_{\alpha 3}=C_{3\alpha }=0\), since \(g_{33}=1\), which implies \(C_{33}\) to be one and meaning that the thickness remains constant under deformation. As a result, the Green-Lagrange strain tensor \({\textbf {E}}=E_{\alpha \beta }\,\mathring{{\textbf {g}}}^\alpha \otimes \mathring{{\textbf {g}}}^\beta\) and its decomposition to membrane and bending contributions (\(\varepsilon\) and \(\kappa\), respectively) is [3, 4]:

$$\begin{aligned} \begin{aligned} E_{\alpha \beta }&= \frac{1}{2}\left( g_{\alpha \beta }-\mathring{g}_{\alpha \beta }\right) = \frac{1}{2}\left( (a_{\alpha \beta } - \mathring{a}_{\alpha \beta }) - 2\theta ^3\left( b_{\alpha \beta } - \mathring{b}_{\alpha \beta } \right) \right) \\&= \varepsilon _{\alpha \beta } + \theta _3\kappa _{\alpha \beta }. \end{aligned} \end{aligned}$$
(5)

2.2 Constitutive relation

The constitutive relations for the Kirchhoff–Love shell relate the Green-Lagrange strain tensor \({\textbf {E}}\) to the second Piola-Kirchhoff stress tensor \({\textbf {S}}\). For linear elastic materials, this is achieved by:

$$\begin{aligned} S^{\alpha \beta } = \mathbb {C}^{\alpha \beta \gamma \delta }E_{\gamma \delta } \end{aligned}$$
(6)

where \(\mathbb {C}=\mathbb {C}^{\alpha \beta \gamma \delta }\,\mathring{{\textbf {g}}}_i \otimes \mathring{{\textbf {g}}}_j\otimes \mathring{{\textbf {g}}}_k\otimes \mathring{{\textbf {g}}}_l\) is the material tensor, which takes for linear materials the form \(\mathbb {C}^{\alpha \beta \gamma \delta } = 4\frac{\lambda \mu }{\lambda +2\mu }\mathring{g}^{\alpha \beta }\mathring{g}^{\gamma \delta } + 2\mu \left( \mathring{g}^{\alpha \delta }\mathring{g}^{\beta \gamma }+\mathring{g}^{\alpha \gamma } \mathring{g}^{\beta \delta }\right)\) [60]. For non-linear hyperelastic constitutive relations, the stress and material tensors are derived from the 3D constitutive relations for (in)compressible materials and due to through-thickness integration, the shell normal force and bending moment tensors \({\varvec{n}}=n^{\alpha \beta }\,\mathring{{\textbf {g}}}_\alpha \otimes \mathring{{\textbf {g}}}_\beta\) and \({\varvec{m}}=m^{\alpha \beta }\,\mathring{{\textbf {g}}}_\alpha \otimes \mathring{{\textbf {g}}}_\beta\), respectively, are defined as

$$\begin{aligned} n^{\alpha \beta }({\textbf {u}}) = \int _{T} S^{\alpha \beta }({\textbf {u}})\textrm{d}{\theta ^3}, \quad m^{\alpha \beta }({\textbf {u}}) = \int _{T} \theta ^3 S^{\alpha \beta }({\textbf {u}})\textrm{d}{\theta ^3}, \end{aligned}$$
(7)

where \(T=[-t/2,t/2]\) is the through-thickness domain. For more details on hyperelastic material models, the reader is referred to [4, 57] and specifically for stretch-based ones to [5].

2.3 Variational formulation

The shell internal and external equilibrium equations in variational form are derived by the principle of virtual work [3, 4]. The weak formulation follows from the principle of virtual work with virtual displacements \({\varvec{\phi }}\):

$$\begin{aligned} \begin{aligned}&\text {Find }{\textbf {u}}\in \varvec{\mathcal {S}}\text { s.t.} \varvec{\mathcal {W}}({\textbf {u}},{\varvec{\phi }}) := \delta W^{\text {int}} - \delta W^{\text {ext}} \\&\quad = \int _\Omega {\varvec{n}}({\textbf {u}}):{\varvec{\varepsilon }}'({\textbf {u}},{\varvec{\phi }}) + {\varvec{m}}({\textbf {u}}):{\varvec{\kappa }}'({\textbf {u}},{\varvec{\phi }}) \textrm{d}{\Omega } - \int _\Omega {\textbf {f}}({\textbf {u}})\cdot {\varvec{\phi }} \textrm{d}{\Omega },\\&\quad \forall {\varvec{\phi }}\in \varvec{\mathcal {S}} \end{aligned} \end{aligned}$$
(8)

With \({\textbf {f}}({\textbf {u}})\) the surface load acting on the mid-surface, for the sake of generality defined as a function of the displacements \({\textbf {u}}\) (e.g. a follower pressure p gives \({\textbf {f}}({\textbf {u}}) = p{\textbf {a}}_3({\textbf {u}})\)). Furthermore, \({\varvec{\varepsilon }}'({\textbf {u}},{\varvec{\phi }})\) and \({\varvec{\kappa }}'({\textbf {u}},{\varvec{\phi }})\) are the virtual strain components given displacements \({\textbf {u}}\) and being linear with respect to variation \({\varvec{\phi }}\), hence \(\varvec{\mathcal {W}}({\textbf {u}},{\varvec{\phi }})\) is also linear in its second argument. The coefficients of the variations of the membrane force and bending moment tensors are

$$\begin{aligned} \begin{aligned} (n')^{\alpha \beta }({\textbf {u}},{\varvec{\phi }})&= \int _{T} \mathbb {C}^{\alpha \beta \gamma \delta }({\textbf {u}})\textrm{d}{\theta ^3}\varepsilon '_{\gamma \delta }({\textbf {u}},{\varvec{\phi }})\\&\quad + \int _{T} \theta ^3\mathbb {C}^{\alpha \beta \gamma \delta }({\textbf {u}})\textrm{d}{\theta ^3}\kappa '_{\gamma \delta }({\textbf {u}},{\varvec{\phi }}),\\ (m')^{\alpha \beta }({\textbf {u}},{\varvec{\phi }})&= \int _{T} \theta ^3\mathbb {C}^{\alpha \beta \gamma \delta }({\textbf {u}})\textrm{d}{\theta ^3}\varepsilon '_{\gamma \delta }({\textbf {u}},{\varvec{\phi }})\\&\quad + \int _{T} \left( \theta ^3\right) ^2\mathbb {C}^{\alpha \beta \gamma \delta }({\textbf {u}})\textrm{d}{\theta ^3}\kappa '_{\gamma \delta }({\textbf {u}},{\varvec{\phi }}). \end{aligned} \end{aligned}$$
(9)

Linearizing the virtual work from Eq. (8) provides the continuous equivalent of the Jacobian or tangential stiffness matrix for Newton iterations which will be performed to solve the non-linear weak formulation Eq. (8) in a discrete setting [58]:

$$\begin{aligned} \begin{aligned}&\varvec{\mathcal {W}}'({\textbf {u}},{\varvec{\phi }},{\varvec{\psi }}) := \int _{\Omega } {\varvec{n}}'({\textbf {u}},{\varvec{\psi }}):{\varvec{\varepsilon }}'({\textbf {u}},{\varvec{\phi }})+{\varvec{n}}({\textbf {u}}):{\varvec{\varepsilon }}''({\textbf {u}},{\varvec{\phi }},{\varvec{\psi }}) \\&\quad + {\varvec{m}}'({\textbf {u}},{\varvec{\psi }}):{\varvec{\kappa }}'({\textbf {u}},{\varvec{\phi }}) + {\varvec{m}}:{\varvec{\kappa }}''({\textbf {u}},{\varvec{\phi }},{\varvec{\psi }})\textrm{d}{\Omega }\\&\quad - \int _{\Omega } {\textbf {f}}'({\textbf {u}},{\varvec{\psi }})\cdot {\varvec{\phi }}\textrm{d}{\Omega }, \end{aligned} \end{aligned}$$
(10)

where \({\varvec{\varepsilon }}''({\textbf {u}},{\varvec{\phi }},{\varvec{\psi }})\) and \({\varvec{\kappa }}({\textbf {u}},{\varvec{\phi }},{\varvec{\psi }})\) are the second variations of the membrane and bending strains and \({\textbf {f}}'\) is the first variation of the applied force, being nonzero when the force is depending on the displacements \({\textbf {u}}\). For the details on these formulations, we refer to previous publications [3, 58, 60]. It should be noted that in the undeformed case, \({\textbf {u}}={\textbf {0}}\), the internal membrane forces and bending forces, \({\varvec{n}}({\textbf {u}})\) and \({\varvec{m}}({\textbf {u}})\), respectively, vanish. As a result, the continuous equivalent for the linear stiffness matrix is:

$$\begin{aligned} \begin{aligned} \mathring{\varvec{\mathcal {W}}}'({\varvec{\phi }},{\varvec{\psi }})&= \int _{\Omega } \mathring{{\varvec{n}}}'({\varvec{\psi }}):\mathring{{\varvec{\varepsilon }}}'({\varvec{\phi }}) + \mathring{{\varvec{m}}}'({\varvec{\psi }}):\mathring{{\varvec{\kappa }}}'({\varvec{\phi }})\textrm{d}{\Omega } - \int _{\Omega } \mathring{{\textbf {f}}}'({\varvec{\psi }})\cdot {\varvec{\phi }}\textrm{d}{\Omega }, \end{aligned} \end{aligned}$$
(11)

where the \(\mathring{\cdot }\) denotes tensors and functions on the undeformed geometry, i.e. with \({\textbf {u}}={\textbf {0}}\).

In our implementation, the tangent stiffness matrix is computed using appropriate Gauss–Lengendre quadrature for each element in the hierarchical mesh. We note that more efficient numerical integration approaches exist [61,62,63] for hierarchical splines that might further reduce the computational cost.

2.4 Structural analysis

In the present paper, we will provide different goal functionals for different structural analysis applications. Therefore, we briefly recall the different structural analysis types. Firstly, in case of static analysis, the problem as in Eq. (8) is solved. In case of quasi-static analysis, load and/or displacement steps are performed successively and in each step, a static solve is performed. Typically, one writes Eq. (8) for load-control as

$$\begin{aligned} \begin{aligned}&\text {Find }{\textbf {u}}\in \varvec{\mathcal {S}}\text { s.t.} \varvec{\mathcal {W}}({\textbf {u}},{\varvec{\phi }},\lambda ) := \delta W^{\text {int}} - \lambda \delta W^{\text {ext}} \\&\quad = \int _\Omega {\varvec{n}}({\textbf {u}}):{\varvec{\varepsilon }}'({\textbf {u}},{\varvec{\phi }}) + {\varvec{m}}({\textbf {u}}):{\varvec{\kappa }}'({\textbf {u}},{\varvec{\phi }}) \textrm{d}{\Omega } - \int _\Omega \lambda {\textbf {f}}_0\cdot {\varvec{\phi }} \textrm{d}{\Omega },\\&\quad \forall {\varvec{\phi }}\in \varvec{\mathcal {S}}, \lambda \in \mathbb {R}, \end{aligned} \end{aligned}$$
(12)

where \(\lambda\) is the load factor scaling the reference load \({\textbf {f}}_0\). Quasi-static simulations can be solved using simple load or displacement controlled schemes, using arc-length continuation such as Riks’ method or Crisfield’s method [64, 65]. When quasi-static analysis is performed for post-buckling analysis, one or multiple bifurcation points are passed by definition. On a bifurcation point, the determinant of the tangential stiffness matrix K is equal to zero, hence this matrix is singular. To cope with instabilities, a priori perturbations can be applied to the geometry, or a procedure for approximating singular points [66] can be used. In our previous work, we provide more details on arc-length continuation for post-buckling analysis without providing a priori perturbations [67].

In the case of modal analysis and buckling analysis, a generalised eigenvalue problem needs to be solved. These eigenvalue problems have the general form

$$\begin{aligned} \text {find}\,(\mu ,{\textbf {v}})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\,\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }}) = \mu \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})\,\forall {\varvec{\phi }}\in \varvec{\mathcal {S}} \end{aligned}$$
(13)

Where \(\mu\) provides the eigenfrequency in modal analysis and the critical load factor in buckling analysis and where \({\textbf {v}}\) denotes the vibration or buckling mode shape. The operators \(\varvec{\mathcal {A}}\) and \(\varvec{\mathcal {B}}\) are bi-linear. For buckling analysis, \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {u}}_L,{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {0}},{\textbf {v}},{\varvec{\phi }})\) with \({\textbf {u}}_L\) the pre-buckling solution given load \(\lambda _L\). For modal analysis, \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {0}},{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {M}}({\textbf {v}},{\varvec{\phi }})\) with \(\varvec{\mathcal {M}}\) the mass operator:

$$\begin{aligned} \varvec{\mathcal {M}}({\textbf {v}},{\varvec{\phi }}) = \int _\Omega \rho {\textbf {v}}{\varvec{\phi }}\textrm{d}{\Omega } \end{aligned}$$
(14)

Where \(\rho\) is the density function over the surface.

3 Dual-weighted residual method

This section elaborates on the Dual-Weighted Residual (DWR) method [68, 69], which is used in the Estimate step of Fig. 1. The DWR is a method to compute the a posteriori error of a solution in terms of a given goal functional of interest, by solving a linear dual problem. The DWR provides a global estimate of the error, but given a partition of unity of the spline space, it can be used to provide an error contribution per basis function.

3.1 General framework

The general framework of the dual weighted residual (DWR) is presented by [37, 68, 69]. For the sake of completeness, we provide a brief overview of the DWR here. Consider the following non-linear problem to solve

$$\begin{aligned} \text {find}\,{\textbf {u}}\in \varvec{\mathcal {S}}\, \text {s.t.}\,\varvec{\mathcal {W}}({\textbf {u}},{\varvec{\phi }})= 0\,\forall {\varvec{\phi }}\in \varvec{\mathcal {S}}, \end{aligned}$$
(15)

where \(\varvec{\mathcal {W}}({\textbf {u}})\) is a semi-linear operator, \({\textbf {u}}\) is the solution, \({\varvec{\phi }}\) is a test function and \(\varvec{\mathcal {S}}\) is a suitably chosen vector space including \({\textbf {u}}\in \varvec{\mathcal {S}}\). The approximation of \({\textbf {u}}\), denoted by \({\textbf {u}}_h\) can be found by solving the discrete counterpart of Eq. (15)

$$\begin{aligned} \text {find}\,{\textbf {u}}_h\in \varvec{\mathcal {S}}_h^p\, \text {s.t.}\,\varvec{\mathcal {W}}({\textbf {u}}_h,{\varvec{\phi }}_h)= 0\,\forall {\varvec{\phi }}\in \varvec{\mathcal {S}}_h^p, \end{aligned}$$
(16)

where \({\textbf {u}}_h\) and \({\varvec{\phi }}_h\) are the discrete counterparts of \({\textbf {u}}\) and \({\varvec{\phi }}\), respectively, and the space \({\textbf {S}}_h^p\subset {\textbf {S}}\) is a function space on the (isogeometric) mesh \(\varvec{\mathcal {T}}_h^p(\Omega )\) with mesh size h and order p covering the computational domain \(\Omega\). The solution to this problem is typically obtained by iteratively solving

$$\begin{aligned} \text {find}\,{\varvec{\phi }}_h\in \varvec{\mathcal {S}}_h^p\, \text {s.t.}\,\varvec{\mathcal {W}}'({\textbf {u}}_h,{\varvec{\phi }}_h,{\varvec{\psi }}_h) = \varvec{\mathcal {R}}({\textbf {u}}_h,{\varvec{\psi }}_h) \,\forall {\varvec{\psi }}_h\in \varvec{\mathcal {S}}_h^p, \end{aligned}$$
(17)

while updating the discrete solution. Here, the residual is defined as

$$\begin{aligned} \varvec{\mathcal {R}}({\textbf {u}}_h,{\varvec{\phi }}_h) = -\varvec{\mathcal {W}}({\textbf {u}}_h,{\varvec{\phi }}_h). \end{aligned}$$
(18)

Let us now define a non-linear and differentiable goal functional \(\varvec{\mathcal {L}}({\textbf {u}})\) or quantity of interest, such that

$$\begin{aligned} \Delta \varvec{\mathcal {L}}({\textbf {u}}_h) = \varvec{\mathcal {L}}({\textbf {u}}) - \varvec{\mathcal {L}}({\textbf {u}}_h). \end{aligned}$$
(19)

Then, from Proposition 4.1 of [70], it follows that:

$$\begin{aligned} \Delta \varvec{\mathcal {L}}({\textbf {u}}_h) = \varvec{\mathcal {R}}({\textbf {u}}_h,{\varvec{\xi }} - {\varvec{\xi }}_h) \approx \varvec{\mathcal {R}}({\textbf {u}}_h,\tilde{{\varvec{\xi }}} - {\varvec{\xi }}_h). \end{aligned}$$
(20)

Here, the solutions \({\varvec{\xi }}\in \varvec{\mathcal {S}}\) and \({\varvec{\xi }}_h\in \varvec{\mathcal {S}}^p_h\) are the exact and discrete solutions to the adjoint problem defined using the mean value linearizations of \(\varvec{\mathcal {W}}\) and \(\varvec{\mathcal {L}}\), see Equations 10 to 12 of [70]. Sinze the exact dual solution \({\varvec{\xi }}\) is not available, it is approximated by \(\tilde{{\varvec{\xi }}}\in \tilde{\varvec{\mathcal {S}}}\). The discrete dual solution \({\varvec{\xi }}_h\in \varvec{\mathcal {S}}^p_h\) is obtained by solving the following discrete adjoint problem:

$$\begin{aligned} \text {find}\,{\varvec{\xi }}_h\in \varvec{\mathcal {S}}_h^p\, \text {s.t.}\,\varvec{\mathcal {W}}'({\textbf {u}}_h,{\varvec{\zeta }}_h,{\varvec{\xi }}_h) = \varvec{\mathcal {L}}'({\textbf {u}}_h,{\varvec{\zeta }}_h) \,\forall {\varvec{\zeta }}_h\in \varvec{\mathcal {S}}_h^p. \end{aligned}$$
(21)

The approximation \(\tilde{{\varvec{\psi }}}\in \tilde{\varvec{\mathcal {S}}}\) is obtained by solving the adjoint problem in an enriched space, i.e.

$$\begin{aligned} \text {find}\,\tilde{{\varvec{\xi }}}_h\in \tilde{\varvec{\mathcal {S}}}_h^{p}\, \text {s.t.}\,\varvec{\mathcal {W}}'({\textbf {u}}_h,\tilde{{\varvec{\zeta }}}_h,\tilde{{\varvec{\xi }}}_h) = \varvec{\mathcal {L}}'({\textbf {u}}_h,\tilde{{\varvec{\zeta }}}_h) \,\forall \tilde{{\varvec{\zeta }}}_h\in \tilde{\varvec{\mathcal {S}}}_h^p, \end{aligned}$$
(22)

with \(\tilde{{\varvec{\xi }}}_h\) and \(\tilde{{\varvec{\zeta }}}_h\) the dual solution and test functions on the enriched space \(\tilde{\varvec{\mathcal {S}}}_h^p\), respectively. A choice for \(\tilde{\varvec{\mathcal {S}}}_h^p\) is to use the same mesh as for \(\varvec{\mathcal {S}}_h^p\), with the same regularity but with a higher degree, i.e. \(\tilde{\varvec{\mathcal {S}}}_h^p = \varvec{\mathcal {S}}_h^{p+1}\). This is easily achieved using spline bases. When using B-Splines, one can repeat all knots of the knot vector an extra time compared to the original basis, such that \(\varvec{\mathcal {S}}_h^p\subset \varvec{\mathcal {S}}_h^{p+1}\subset \varvec{\mathcal {S}}\) is a nested space.

Finally, using Eq. (20) together with the dual solution \({\varvec{\xi }}_h\in \varvec{\mathcal {S}}_h^p\) and the enriched dual solution \(\tilde{{\varvec{\xi }}}_h\in \tilde{\varvec{\mathcal {S}}}_h^p\), an estimate for the global error with respect to the goal functional \(\varvec{\mathcal {L}}\) can be obtained. To obtain the local element-wise error estimations \(r_i\) for element \(\omega _i\in \mathcal {T}_h^p(\Omega )\), such that

$$\begin{aligned} \Delta \varvec{\mathcal {L}}({\textbf {u}}_h) = \varvec{\mathcal {R}}({\textbf {u}}_h,\tilde{{\varvec{\xi }}}_h-{\varvec{\xi }}_h) = \sum _{\omega _i\in \mathcal {T}_h^p(\Omega )} r_i, \end{aligned}$$
(23)

element-wise integration of Eq. (20) is simply performed to obtain \(r_i\). However, as discussed in Sect. 4.3 it can be beneficial to have strictly positive element error contributions for element labeling. One can either take the absolute values of \(r_i\) or one can integrate the squared norm of the integrant in Eq. (20) to ensure positivity of element error contributions. Obviously, the sum of the element errors would not be equal to \(\Delta \varvec{\mathcal {L}}\).

For Kirchhoff–Love shells specifically, the operator \(\varvec{\mathcal {W}}({\textbf {u}},{\varvec{\phi }})\) and its linearisation \(\varvec{\mathcal {W}}'({\textbf {u}},{\varvec{\phi }},{\varvec{\psi }})\) are used to perform the DWR analysis.

3.2 Eigenvalue problems

When the problem of interest is an eigenvalue problem, the DWR routine is slightly different. Here, we follow the works [35, 41, 56, 68, 69, 71] to give a brief overview of the DWR for eigenvalue problems.

Let us consider the following eigenvalue problem

$$\begin{aligned} \text {find}\,(\mu ,{\textbf {v}})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\,\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }}) = \mu \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})\,\forall {\varvec{\phi }}\in \varvec{\mathcal {S}}. \end{aligned}$$
(24)

Here, \(\varvec{\mathcal {A}}\) and \(\varvec{\mathcal {B}}\) are bi-linear operators. For uniqueness of the problem, the discrete eigenvectors \({\textbf {v}}_h\) are normalised by the condition [56]

$$\begin{aligned} \varvec{\mathcal {B}}({\textbf {v}},{\textbf {v}}) = 1. \end{aligned}$$
(25)

Typically, discretizing the system gives the following:

$$\begin{aligned} \text {find}\,(\mu _h,{\textbf {v}}_h)\in \mathbb {R}\times \varvec{\mathcal {S}}_h^p\,\text {s.t.}\,\varvec{\mathcal {A}}({\textbf {v}}_h,{\varvec{\phi }}_h) = \mu \varvec{\mathcal {B}}({\textbf {v}}_h,{\varvec{\phi }}_h)\,\forall {\varvec{\phi }}_h\in \varvec{\mathcal {S}}_h^p, \end{aligned}$$
(26)

where the eigenpairs \(\hat{{\textbf {v}}}_h = (\mu _h,{\textbf {v}}_h)\) are the solutions of the eigenvalue problem. In addition, the adjoint eigenvalue problem is defined by the eigenvalue problem [69]:

$$\begin{aligned} \text {find}\,(\eta ,{\varvec{\psi }})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\,\varvec{\mathcal {A}}({\varvec{\psi }},{\varvec{\phi }}) = \eta \varvec{\mathcal {B}}({\varvec{\psi }},{\varvec{\phi }})\,\forall ({\varvec{\phi }})\in \varvec{\mathcal {S}}, \end{aligned}$$
(27)

Of for which the normalization similar to Eq. (25) is used for the dual eigenvectors \({\varvec{\psi }}\)

$$\begin{aligned} \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) = 1. \end{aligned}$$
(28)

To derive the DWR method for the eigenvalue problem in Eq. (24), the functional \(\varvec{\mathcal {V}}(\cdot ,\cdot )\) is defined, such that the following problem should be solved

$$\begin{aligned} \begin{aligned}&\text {Find}\,\hat{{\textbf {v}}}=(\mu ,{\textbf {v}})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\\&\quad \varvec{\mathcal {V}}(\hat{{\textbf {v}}},\hat{{\varvec{\phi }}}) = \mu \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }}) - \varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }}) + \tau \left( \varvec{\mathcal {B}}({\textbf {v}},{\textbf {v}})-1\right) = 0,\\&\quad \forall {\hat{{\varvec{\phi }}}}=(\tau ,{\phi })\in \mathbb {R}\times \varvec{\mathcal {S}}, \end{aligned} \end{aligned}$$
(29)

where the normalisation condition from Eq. (25) is enforced weakly. The discrete counterpart of this equation reads:

$$\begin{aligned} \begin{aligned}&\text {Find}\,\hat{{\textbf {v}}}_h=(\mu _h,{\textbf {v}}_h)\in \mathbb {R}\times \varvec{\mathcal {S}}_h^p\,\text {s.t.}\\&\quad \varvec{\mathcal {V}}(\hat{{\textbf {v}}}_h,\hat{{\varvec{\phi }}}_h) = \mu \varvec{\mathcal {B}}({\textbf {v}}_h,{\varvec{\phi }}_h) - \varvec{\mathcal {A}}({\textbf {v}}_h,{\varvec{\phi }}_h) + \tau _h \left( \varvec{\mathcal {B}}({\textbf {v}}_h,{\textbf {v}}_h)-1\right) = 0,\\&\quad \forall \hat{{\varvec{\phi }}}_h=(\tau _h,{\varvec{\phi }}_h)\in \mathbb {R}\times \varvec{\mathcal {S}}_h^p. \end{aligned} \end{aligned}$$
(30)

Furthermore, a goal-function for the eigenvalues is defined as follows:

$$\begin{aligned} \varvec{\mathcal {L}}(\hat{{\textbf {v}}}) = \mu = \mu \varvec{\mathcal {B}}({\textbf {v}},{\textbf {v}}), \end{aligned}$$
(31)

giving

$$\begin{aligned} \Delta \varvec{\mathcal {L}}(\hat{{\varvec{\phi }}}_h) = \mu - \mu _h. \end{aligned}$$
(32)

Using the non-linear functional \(\varvec{\mathcal {V}}\) and the goal functional \(\varvec{\mathcal {L}}\), the same derivations as in Sect. 3.1 can be followed to find a system of equations to solve the DWR eigenvalue problem. The Gateaux derivative of \(\varvec{\mathcal {V}}\), denoted by \(\varvec{\mathcal {V}}'\) is given by:

$$\begin{aligned} \varvec{\mathcal {V}}'(\hat{{\textbf {v}}},\hat{{\varvec{\phi }}},\hat{{\varvec{\psi }}}) = \eta \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) + \mu \varvec{\mathcal {B}}({\varvec{\psi }},{\varvec{\phi }}) - \varvec{\mathcal {A}}({\varvec{\psi }},{\varvec{\phi }}) + \tau ( \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) + \varvec{\mathcal {B}}({\varvec{\psi }},{\textbf {v}}) ), \end{aligned}$$
(33)

where the derivatives \(\varvec{\mathcal {A}}'({\varvec{\psi }},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}'({\varvec{\psi }},{\varvec{\phi }})\) are equal to the bi-linear operators \(\varvec{\mathcal {A}}({\textbf {u}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {u}},{\varvec{\phi }})\) themselves. Furthermore, the solution around which the linerisation is performed is denoted by \(\hat{{\textbf {v}}}=(\mu ,{\textbf {v}})\), the test functions are denoted by \(\hat{{\varvec{\phi }}}=(\tau ,{\varvec{\phi }})\) and the trial functions are denoted by \(\hat{{\varvec{\psi }}}=(\eta ,{\varvec{\psi }})\). Furthermore, the linearisation of the goal functional Eq. (31) is

$$\begin{aligned} \varvec{\mathcal {L}}'(\hat{{\textbf {v}}},\hat{{\varvec{\psi }}}) = \eta \varvec{\mathcal {B}}({\textbf {v}},{\textbf {v}}) + \mu \left[ \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) + \varvec{\mathcal {B}}({\varvec{\psi }},{\textbf {v}}) \right] , \end{aligned}$$
(34)

such that the adjoint eigenvalue problem, analoguously to Eq. (21), given by

$$\begin{aligned} \text {Find}\,\hat{{\varvec{\phi }}}= & {} (\tau , {\varvec{\phi }})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\, \varvec{\mathcal {V}}'(\hat{{\textbf {v}}},\hat{{\varvec{\phi }}},\hat{{\varvec{\psi }}}) = \varvec{\mathcal {L}}'(\hat{{\textbf {v}}},\hat{{\varvec{\psi }}})\nonumber \\ \forall \hat{{\varvec{\psi }}}= & {} (\eta ,{\psi })\in \mathbb {R}\times \varvec{\mathcal {S}}, \end{aligned}$$
(35)

becomes [56, 69]:

$$\begin{aligned} \begin{aligned}&\text {Find}\,\hat{{\varvec{\phi }}}=(\tau , {\varvec{\phi }})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\\&\quad \eta \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }}) + \mu \varvec{\mathcal {B}}({\varvec{\psi }},{\varvec{\phi }}) - \varvec{\mathcal {A}}({\varvec{\psi }},{\varvec{\phi }}) + \tau ( \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) \\&\quad + \varvec{\mathcal {B}}({\varvec{\psi }},{\textbf {v}}) ) = \eta \varvec{\mathcal {B}}({\textbf {v}},{\textbf {v}}) \\&\quad +\mu \left[ \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) + \varvec{\mathcal {B}}({\varvec{\psi }},{\textbf {v}}) \right] ,\\&\quad \forall \hat{{\varvec{\psi }}}=(\eta , {\psi })\in \mathbb {R}\times \varvec{\mathcal {S}}. \end{aligned} \end{aligned}$$
(36)

This equation can be simplified to obtain the following [56, 69]:

$$\begin{aligned} \begin{aligned}&\text {Find}\,\hat{{\varvec{\phi }}}=(\tau , {\varvec{\phi }})\in \mathbb {R}\times \varvec{\mathcal {S}}\,\text {s.t.}\\&\quad \mu \varvec{\mathcal {B}}({\varvec{\psi }},{\varvec{\phi }}) - \varvec{\mathcal {A}}({\varvec{\psi }},{\varvec{\phi }}) + \eta \left[ \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }}) - \varvec{\mathcal {B}}({\textbf {v}},{\textbf {v}}) \right] \\&\quad + (\tau - \mu ) \left[ \varvec{\mathcal {B}}({\textbf {v}},{\varvec{\psi }}) + \varvec{\mathcal {B}}({\varvec{\psi }},{\textbf {v}}) \right] = 0, \\&\quad \forall \hat{{\varvec{\psi }}}=(\eta , {\psi })\in \mathbb {R}\times \varvec{\mathcal {S}}. \end{aligned} \end{aligned}$$
(37)

Using the normalizations from Eqs. (25) and (28) and the fact that Eq. (27) solves the same equation as Eq. (24), it follows that Eq. (37) is solved by Eq. (27) [69].

Using Eqs. (20), (32) and (15) with \(\varvec{\mathcal {W}}=\varvec{\mathcal {V}}\) according to Eq. (29) and with \({\varvec{\psi }}\) denoting the dual eigenvector and \(\eta\) the dual eigenvalue, the error estimation according to the DWR method for an eigenvalue problem is

$$\begin{aligned} \Delta \varvec{\mathcal {L}}(\hat{{\textbf {v}}}_h)= & {} \varvec{\mathcal {A}}({\textbf {v}}_h,{\varvec{\psi }}-{\varvec{\psi }}_h)- \mu _h \varvec{\mathcal {B}}({\textbf {v}}_h,{\varvec{\psi }}-{\varvec{\psi }}_h) \nonumber \\{} & {} +(\eta -\eta _h)(\varvec{\mathcal {B}}({\textbf {v}}_h,{\textbf {v}}_h)-1), \end{aligned}$$
(38)

for \(\hat{{\textbf {v}}}_h=(\mu _h,{\textbf {v}}_h)\in \mathbb {R}\times \varvec{\mathcal {S}}_h^p\), \(\hat{{\varvec{\psi }}}_h=(\eta _h,{\varvec{\psi }}_h)\in \mathbb {R}\times \varvec{\mathcal {S}}_h^p\) and \(\hat{{\varvec{\psi }}}=(\eta ,{\varvec{\psi }})\in \mathbb {R}\times \varvec{\mathcal {S}}\). The exact adjoint solution \(\hat{{\varvec{\psi }}}_h\) is again approximated by solving Eq. (27) on an enriched space \(\tilde{\varvec{\mathcal {S}}}_h^p\subset \varvec{\mathcal {S}}\), \(\tilde{\varvec{\mathcal {S}}}_h^p\supset \varvec{\mathcal {S}}_h^p\), providing \((\tilde{\eta }_h,\tilde{{\varvec{\psi }}_h})\in \mathbb {R}\times \tilde{\varvec{\mathcal {S}}}_h^p\). In [38] different choices for constructing \(\tilde{\varvec{\mathcal {S}}}_h^p\) are given, including an h-refinement and a p-refinement. As in the work of [33], the second approach is used in the present paper, with the same mesh as for \(\varvec{\mathcal {S}}_h^p\), but with a higher order and with the same regularity, i.e. \(\tilde{\varvec{\mathcal {S}}}_h^p = \varvec{\mathcal {S}}_h^{p+1}\), as it introduces less degrees of freedom compared to an h-refinement.

As specificed in the end of Sect. 2.4, the DWR method for modal analysis requires \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {0}},{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {M}}({\textbf {v}},{\varvec{\phi }})\). For buckling analysis, \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {u}}_L,{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {0}},{\textbf {v}},{\varvec{\phi }})\) with the first operator defined about a pre-buckling solution \({\textbf {u}}_L\).

3.3 Goal functionals for Isogeometric Kirchhoff–Love shells

The remainder of this section focusses on defining the goal functional \(\varvec{\mathcal {L}}({\varvec{u}})\), see Eq. (19), together with its variation \(\varvec{\mathcal {L}}'({\varvec{u}})\) such that the dual problem (Eq. (21)) can be solved and the error estimate (Eq. (20)) can be computed.

In general, the goal functional can be defined in a point, on a boundary or over the domain:

$$\begin{aligned} \varvec{\mathcal {L}}(\cdot )&= \int _\Omega \varvec{\mathcal {l}}(\cdot ,{\textbf {x}})\textrm{d}{\Omega },{} & {} \text {Domain-wise}, \end{aligned}$$
(39)
$$\begin{aligned} \varvec{\mathcal {L}}(\cdot )&= \int _{\partial \Omega } \varvec{\mathcal {l}}(\cdot ,{\textbf {x}})\textrm{d}{\Gamma },{} & {} \text {Boundary-wise}, \end{aligned}$$
(40)
$$\begin{aligned} \varvec{\mathcal {L}}(\cdot )&= \sum _{i\in \varvec{\mathcal {I}}} \varvec{\mathcal {l}}(\cdot ,{\textbf {x}}_i),{} & {} \text {Point-wise}, \end{aligned}$$
(41)

where \(\Omega\) denotes the integration domain, \(\partial \Omega\) a side of \(\Omega\) and \(\varvec{\mathcal {I}}\) a set of indices corresponding to points \({\textbf {x}}_i\in \Omega\). Furthermore, \(\varvec{\mathcal {l}}(\cdot ,{\textbf {x}}_i)\) denotes a goal functional summant or integrant, which has a variation denoted by \(\varvec{\mathcal {l}}'(\cdot ,{\varvec{\phi }}{\textbf {x}}_i)\). The variation of \(\varvec{\mathcal {L}}\), denoted by \(\varvec{\mathcal {L}}'(\cdot ,{\varvec{\phi }},{\textbf {x}}_i)\), directly follows from \(\varvec{\mathcal {l}}'(\cdot ,{\varvec{\phi }}{\textbf {x}}_i)\) due to linearity of integrals and summation. In addition, we classify two different types of goal functional integrants, resulting in norm-based and component-based goal functionals. In the former case, \(\varvec{\mathcal {l}}\) is of the form \(\varvec{\mathcal {l}}=\Vert {\textbf {A}}\Vert ^2\) with variation \(\varvec{\mathcal {l}}'=2{\textbf {A}}\cdot {\textbf {A}}'\). For component-based goal functionals, we define \(\varvec{\mathcal {l}}={\textbf {A}}\cdot {\textbf {e}}_i\) with variation \(\varvec{\mathcal {l}}'=A'\cdot {\textbf {e}}_i\). Here, \({\textbf {e}}_i\) is a unit vector in direction i. It should be noted that the goal functional \(\varvec{\mathcal {L}}(\cdot )\) needs to be bounded in all cases, therefore making point-wise goal functionals not always suitable, e.g. in case of a stress singularity in a point.

In Table 1 we provide some goal functional integrants or summants \(\varvec{\mathcal {l}}(\cdot ,{\textbf {x}}_i)\). Together with their variations \(\varvec{\mathcal {l}}'(\cdot ,{\varvec{\phi }}{\textbf {x}}_i)\), these provide \(\varvec{\mathcal {L}}'(\cdot ,{\varvec{\phi }},{\textbf {x}}_i)\) due to linearity of integrals and summation. The tensor-based goal functionals refer to goal functionals that could be used for any second-order tensor, e.g. the membrane strain tensor \({\varvec{\varepsilon }}({\textbf {u}})\) or the flexural moment tensor \({\textbf {m}}({\textbf {u}})\).

Table 1 Overview of the goal functionals. Here \({\textbf {u}}_h={\textbf {u}}({\textbf {x}})\) is the discrete deformation tensor depending on position coordinate \({\textbf {x}}\), \({\textbf {C}}_h={\textbf {C}}({\textbf {u}}_h)\) is the deformation tensor based on \({\textbf {u}}_h\) and \({\textbf {C}}({\varvec{\phi }}'_h)={\textbf {C}}'({\textbf {u}}_h,{\varvec{\phi }})\) is its variation, \(\varvec{\mathcal {T}}({\textbf {A}})\) is the transformation of a second-order tensor \({\textbf {A}}\) from the undeformed contravariant basis to the basis spanned by the principal directions. Note that the variation \([\varvec{\mathcal {T}}({\textbf {A}})]'\) of \(\varvec{\mathcal {T}}({\textbf {A}})\) is \(\varvec{\mathcal {T}}({\textbf {A}}')\), since the spectral decomposition of the deformation tensor itself is just a linear change of tensor basis

4 Coarsening and refinement using THB splines

This section elaborates on coarsening and refinement of isogeometric meshes using THB-splines. In particular, this section elaborates on the Mark, Refine and Transfer blocks of Fig. 1. Firstly, Sect. 4.1 will provide a brief background on THB-splines, which enable the Refine step of the adaptive meshing flowchart. Then, Sect. 4.2 elaborates on methods for suitable grading for refinement meshes; which is required to provide admissible refinement with (Truncated) Hierarchical B-spline ((T)HB) bases, given labelled elements. Section 4.3 elaborates on the labeling method for the Mark step, given an element-wise error distribution, taking admissibility into account. Lastly, Sect. 4.4 elaborates on the quasi-interpolation method that is used to Transfer the solution of one solution step to the next. The notations in this section will be closely related to those used in [25, 50].

4.1 (T)HB-Splines

Refinement of B-spline meshes can be done using (Truncated) Hierarchical B-splines ((T)HB-splines), of which the details can be found in [46, 47]. The conceptual idea behind (T)HB-splines is that they are constructed from a sequence of N nested tensor B-spline spaces in different levels \(l=0,...,N-1\), denoted by \(V^0\subset V^1\subset ,...,V^{N-1}\) with associated bases \(\varvec{\mathcal {B}}^\ell\) of degree p on a grid \(G^\ell\) with elements Q. The parametric domains are defined as \(\Omega =\Omega ^0\supseteq \Omega ^1\supseteq ...\supseteq \Omega ^{N-1}=\emptyset\). By defining the set of active cells by \(\varvec{\mathcal {G}}^\ell :=\{Q\in G^\ell : Q\subset \Omega ^\ell \wedge Q\not \subset \Omega ^{\ell +1}\}\), the hierarchical mesh is defined as \(\varvec{\mathcal {Q}}=\{Q\in \varvec{\mathcal {G}}^\ell :\ell =0,...,N-1\}\). In Fig. 2, an illustration is given for a refined B-spline basis (left), a refined HB-spline basis (middle) and a refined THB-spline basis (right). For the (T)HB-spline basis, this picture depicts the refinement of a single basis function, corresponding to the elements in its support. The (T)HB-spline bases show that for THB-splines a truncation is performed to ensure partition of unity, which is discussed in more detail in [47].

Fig. 2
figure 2

Principles of refinement for different spline bases. The top figures represent the basis on level \(\varvec{\mathcal {B}}^0\), optionally with refined basis functions coloured blue. Bottom pictures represent refined bases. (left) uniform refinement (hence \(\varvec{\mathcal {B}}^1\); middle) HB-refinement; (right) THB-refinement, with truncated basis functions coloured yellow. Note that the refinement basis functions are from \(V^1\). The unrefined unique knot vector in all cases is \(\Xi = \{0,1/8,2/8,\dots ,7/8,1\}\) and the degree of the basis is 2. The bases are generated in G+Smo [72]

4.2 Admissible meshing

The concept of admissible meshing was discussed in [22, 23, 50]. An admissible mesh of class m is a mesh of which the truncated basis functions belong to at most m successive levels and mesh admissibility ensures that the number of basis functions acting on a mesh elements does not depend on the number of levels in the hierarchy, but on the parameter m. In order to guarantee mesh admissibility for refinement and coarsening operations, refinement and coarsening neighborhoods are defined such that admissible meshes can be constructed recursively, which is discussed in more detail in [22, 23, 50]. In Fig. 3, we illustrate a simple mesh together with the refinement neighborhood of some selected elements. The \(\mathcal {T}\)-refinement neighborhood \(\varvec{\mathcal {N}}_r(\varvec{\mathcal {Q}},Q,m)\) of element Q is defined as

$$\begin{aligned} \varvec{\mathcal {N}}_r^\text {THB}(\varvec{\mathcal {Q}},Q,m) = \left\{ Q'\in \varvec{\mathcal {G}}^{\ell -m+1}: \exists Q''\in S(Q,\ell -m+2),Q''\subseteq Q'\right\} , \end{aligned}$$
(42)

where S(Qk) is the multi-level support extension with respect to level k.

Fig. 3
figure 3

Recursive marking strategy on the marked element of level \(\ell\) on the initial mesh represented in (a). As a first step, the support extension of the marked element is obtained (b), from which the parents that are active on level \(\ell -1\) define the \(\mathcal {T}\)-neighborhood of the marked cell (c). Starting the same procedure on the marked cells of level \(\ell -1\), the support extension can again be obtained (d) with their corresponding parents on level \(\ell -2\), marking the \(\mathcal {T}\)-neighborhood of the marked elements of level \(\ell -1\) (e). The complete recursive marking from the marked element in a is depicted in (f)

The coarsening neighborhood \(\varvec{\mathcal {N}}_c(Q)\) of element \(Q\in G^\ell\) is defined by [25]. When coarsening element \(Q^\ell\), the coarsening neighborhood ensures that the newly activated basis functions are not active on the surrounding basis functions of level \(\ell +m\). In other words, if element Q of level \(\ell\) is the element to be coarsened, then the coarsening neighborhood defined by

$$\begin{aligned} \varvec{\mathcal {N}}_c(\varvec{\mathcal {Q}},Q,m):=\left\{ Q'\in \varvec{\mathcal {G}}^{\ell +m-1}:\exists Q''\in \varvec{\mathcal {G}}^{\ell }\text { and }Q''\subset P(Q),\text { with }Q'\in S(Q'',\ell )\right\} , \end{aligned}$$
(43)

must be empty. Here, P(Q) denotes the parent of Q, i.e. the unique cell \(Q'\in G^{\ell -1}\) such that \(Q\subset Q'\). Note the small difference with respect to the definintion given in [25], since the coarsening neighborhood in their work is defined for the element \(\hat{Q}\) of level \(\ell\) which will be activated, i.e. \(\hat{Q}\) is the parent of Q for which the coarsening neighborhood is defined here. Given the definition in Eq. (43) and given a set of elements marked for refinement \(\varvec{\mathcal {M}}_r\), a coarsening neighborhood checking elements marked for refinement, can be defined:

$$\begin{aligned}{} & {} \varvec{\mathcal {N}}^r_c(\varvec{\mathcal {Q}},Q,m,\varvec{\mathcal {M}}_r):=\big \{Q'\in \varvec{\mathcal {G}}^{\ell +m-2}:Q'\in \varvec{\mathcal {M}}_r,\exists Q''\in \varvec{\mathcal {G}}^{\ell -1}\text { and }Q''\subset P(Q),\nonumber \\{} & {} \quad \text { with }Q'\in S(Q'',\ell -1)\big \}. \end{aligned}$$
(44)

In other words, this is the coarsening neighborhood that checks whether for element Q of level \(\ell\) to be coarsened there are elements in the marked set \(\varvec{\mathcal {M}}_r\) that will be part of the coarsening neighborhoord as soon as they are refined; thus it uses Eq. (43) with \(\ell -1\). This neighborhood ensures that coarse labeling can be performed conforming with the Dörfler marking strategy and without refining first. This avoids to compute element-error contributions on an in-between mesh which has been refined first. Obviously, if another element with the same parent as Q is marked for refinement, no coarsening should take place. An element can be coarsened if \(\varvec{\mathcal {N}}^r_c(\varvec{\mathcal {Q}},Q,m,\varvec{\mathcal {M}}_r)=\emptyset\). Combining both neighborhoods, an element Q of level \(\ell\) can be coarsened if and only if \(\hat{\varvec{\mathcal {N}}}_c(\varvec{\mathcal {Q}},Q,m,\varvec{\mathcal {M}}_r)=\varvec{\mathcal {N}}_c(\varvec{\mathcal {Q}},Q,m)\cup \varvec{\mathcal {N}}_c^r(\varvec{\mathcal {Q}},Q,m,\varvec{\mathcal {M}}_r)=\emptyset\). In Fig. 4, the coarsening neighborhood is illustrated for a simple mesh.

Fig. 4
figure 4

Given the mesh from Fig. 3f, the coarsening neighborhoods are evaluated in ac of this figure. The cell marks the cell of level \(\ell\) that is marked for coarsening to its parent and the cells mark cells that are marked for refinement. The ring around the cell marked for coarsening depicts the region that should be checked for the coarsening neighborhood. That is, it defines the region that should not contain cells of level \(\ell +1\) (for \(\mathcal {N}_c\)) or cells of level \(\ell\) that are marked for refinement (for \(\mathcal {N}'_c\)). The cells for which \(\mathcal {N}_c=\emptyset\) are marked in d and the cells with \(\mathcal {N}'_c=\emptyset\) are marked in e. The final mesh after refinement and coarsening is depicted in f. The coarsened elements that satisfy \(\mathcal {N}_c\cup \mathcal {N}'_c=\emptyset\) are marked as coarsened elements

4.3 Labeling methods

Let \(\tilde{\varvec{\mathcal {Q}}}\) be the ordered set of \(\varvec{\mathcal {Q}}\) such that \(e_k\ge e_{k+1}\,\forall k\in \tilde{\varvec{\mathcal {Q}}}\), where \(e_k\) denotes the error of element k. Then, the Dörfler marking strategy [44] is defined as the elements \(Q_i\in \tilde{\varvec{\mathcal {Q}}},\,i=0,...,k\) such that the sum of their respective errors is smaller than a fraction \(\rho _r\) of the total element error \(e=\sum _i e_i\):

$$\begin{aligned} \varvec{\mathcal {M}}^{\text {D}\ddot{\textrm{o}}\text {rfler}}_r = \left\{ Q_i\in \varvec{\mathcal {Q}} : \sum _{k=0}^i e_k < \rho _r e\right\} . \end{aligned}$$
(45)

This marking strategy, however, does not take into account the contributions of the elements that are marked because they are part of a refinement neighborhood of a marked element \(Q_i\in \varvec{\mathcal {M}}_r\). Therefore, we define the index set \(\varvec{\mathcal {I}}^K_r\) as the set of element indices whose span contains elements \(Q_k\in \tilde{\varvec{\mathcal {Q}}}\) and their refinement neighborhoods:

$$\begin{aligned} \varvec{\mathcal {I}}^K_r:=\left\{ k\in 1,...,K:\,\varvec{\mathcal {N}}_r(Q_k,\varvec{\mathcal {Q}},m) \cup Q_k,\,Q_k\in \tilde{\varvec{\mathcal {Q}}}\right\} , \end{aligned}$$
(46)

and we define \(\kappa _r\) as the maximum index for which the sum of all elements with indices i in \(\varvec{\mathcal {I}}^{\kappa _r}_r\) is smaller than the error tolerance \(\rho _r e\):

$$\begin{aligned} \kappa _r:=\arg \max \sum _{i\in \varvec{\mathcal {I}}^K_r}e_i<\rho _r e, \end{aligned}$$
(47)

such that the Dörfler marking including refinement neighborhoods is

$$\begin{aligned} \varvec{\mathcal {M}}_r = \left\{ Q_k\in \varvec{\mathcal {Q}} : k\in \varvec{\mathcal {I}}^{\kappa _r}_r\right\} . \end{aligned}$$
(48)

For marking a set of coarsening elements, \(\varvec{\mathcal {M}}_c\) the Dörfler marking procedure can be followed again. The original Dörfler marking strategy would be coarsening the elements \(Q_i\in \varvec{\mathcal {Q}}\) such that their total element error is smaller than a fraction of the total element error \(\rho _c e\), with coarsening parameter \(\rho _c\):

$$\begin{aligned} \varvec{\mathcal {M}}^{\text {D}\ddot{\textrm{o}}\text {rfler}}_c = \left\{ Q_i\in \varvec{\mathcal {Q}} : \sum _{k=i}^N e_k < \rho _c e\right\} . \end{aligned}$$
(49)

Similar to marking for refinement, the marking rule for coarsening can be specified more precisely by including admissible coarsening. In this case, the elements for which \(\hat{\varvec{\mathcal {N}}}_c(\varvec{\mathcal {Q}},Q,m,\varvec{\mathcal {M}}_r)=\emptyset\) holds are added in the sum of marked elements. Therefore, let us define the index set \(\varvec{\mathcal {J}}_K\) that contains all elements \(Q_k\in \varvec{\mathcal {Q}}\) for which the admissible coarsening condition holds, starting from the element with the smallest error, i.e. \(Q_N\).

$$\begin{aligned} \varvec{\mathcal {I}}^K_c:=\left\{ k\in 1,...,K:\,\hat{\varvec{\mathcal {N}}}_c(\varvec{\mathcal {Q}},Q,m,\varvec{\mathcal {M}}_r) =\emptyset ,\,Q_{N-k-1}\in \tilde{\varvec{\mathcal {Q}}}\right\} . \end{aligned}$$
(50)

Similar to \(\kappa _r\), we define \(\kappa _c\) as the maximum index for which the sum of all elements with indices i in \(\varvec{\mathcal {I}}^{\kappa _c}_c\) is smaller than the error tolerance \(\rho _c e\):

$$\begin{aligned} \kappa _c:=\arg \max \sum _{i\in \varvec{\mathcal {I}}^K_r}e_i<\rho _c e, \end{aligned}$$
(51)

such that the Dörfler marking strategy taking into account coarsening admissibility is defined as

$$\begin{aligned} \varvec{\mathcal {M}}_c = \left\{ Q_k\in \varvec{\mathcal {Q}} : k\in \varvec{\mathcal {I}}^{\kappa _c}_c\right\} . \end{aligned}$$
(52)

An alternative to the Dörfler marking strategy is a strategy where a given fraction of the total number of elements is marked. In that case, the formulations from Eqs. (48) and (52) would still hold, but in Eqs. (46) (50) the indices \(\kappa _r\) and \(\kappa _c\) are defined by the sum of the marked elements in respectively \(\varvec{\mathcal {I}}^K_r\) and \(\varvec{\mathcal {I}}^K_c\).

Whether to mark a set for refinement or coarsening, i.e. to construct \(\varvec{\mathcal {M}}_r\) and \(\varvec{\mathcal {M}}_c\) depends on the global error \(\Delta \varvec{\mathcal {L}}\) following from the DWR and user-defined tolerances for refinement and coarsening. Let \(\text {tol}_r\) be the tolerance for refinement and \(\text {tol}_c\) the tolerance for coarsening, such that \(\varvec{\mathcal {M}}_r\ne \emptyset\) if and only if \(\Delta \varvec{\mathcal {L}}>\text {tol}_r\) and \(\varvec{\mathcal {M}}_c\ne \emptyset\) if and only if \(\Delta \varvec{\mathcal {L}}<\text {tol}_r\). As a consequence, if \(\text {tol}_r\ge \text {tol}_c\), refinement and coarsening are never performed simultaneously. If \(\text {tol}_r<\text {tol}_c\) a band with bandwidth \(\text {tol}_c-\text {tol}_r\) is defined, in which refinement and coarsening are performed simultaneously. In the present work, tolerances are defined such that the latter condition is satisfied, and the adaptivity iterations are terminated when \(\Delta \varvec{\mathcal {L}}\in [\text {tol}_r,\text {tol}_c]\), i.e.:

$$\begin{aligned} \left\{ \begin{array}{ll} \varvec{\mathcal {M}}_r = \emptyset ,\,\varvec{\mathcal {M}}_c \ne \emptyset &{}\quad \text {if}\,\Delta \varvec{\mathcal {L}} < \text {tol}_r,\\ \varvec{\mathcal {M}}_r \ne \emptyset ,\,\varvec{\mathcal {M}}_c = \emptyset &{}\quad \text {if}\,\Delta \varvec{\mathcal {L}} > \text {tol}_c,\\ \varvec{\mathcal {M}}_r \ne \emptyset ,\,\varvec{\mathcal {M}}_c \ne \emptyset &{}\quad \text {if}\,\text {tol}_r \ge \Delta \varvec{\mathcal {L}} \ge \text {tol}_c,\\ \end{array}\right. \end{aligned}$$
(53)

given \(\text {tol}_r \le \text {tol}_c\).

Note that the total element error e and the total estimated error of the system of equations \(\Delta \varvec{\mathcal {L}}\) are not necessarily the same, since the element error measure \(e_k\) can be defined in different ways. In case of the DWR method, a natural choice is to choose \(e_k\) as the element-wise integrals of \(\Delta \varvec{\mathcal {L}}\) from Eq. (20). However, integrating the squared norm of the integrant from Eq. (20) would yield strictly positive element errors, making the ordering of the set of element errors simple.

4.4 Quasi-interpolation

In the discrete setting, solution of the problem \({\textbf {u}}_h\) is represented by the THB-spline basis \({\varvec{\phi }}_i\in \varvec{\mathcal {S}}_h^p\) together with the solution coefficients \(\alpha _i\in \mathbb {R}\). In case of analyses with multiple solution steps (e.g. dynamic or quasi-static analysis), mesh refinements can be performed after each solution step. As a consequence, the solution at load step \(k+1\) is defined on another set of basis functions \(\{\bar{{\varvec{\phi }}_i}\}\in \varvec{\mathcal {S}}_h^p\) with corresponding coefficients \(\bar{\alpha }^k_i\) compared to the previous solution at step k. In order to transfer the coefficients \(\alpha _i^k\) to the new basis, an interpolation scheme needs to be used.

Interpolation on a spline basis can be a costly part of the simulation. Global interpolation implies that the contributions of all basis functions are taken into account in the interpolation. This requires solving a large dense system. An efficient way of interpolating spline coefficients for hierarchical basis is a so-called quasi-interpolation scheme [54, 55]. Here, on each level of the hierarchical basis a quasi-interpolant is constructed. This quasi-interpolant interpolates a given function f over the support of each basis function individually, to find the coefficient related to that basis function. More precisely, given a function \(f\in C(\Omega ^0)\), the quasi-interpolant for level \(\ell\) is defined as

$$\begin{aligned} \Lambda ^\ell (f) = \sum _{i=1}^{N} \lambda _{i,\ell }(f)B_{i,\ell }, \quad \ell =0,\dots ,n-1, \end{aligned}$$
(54)

where the coefficients \(\lambda _{i,\ell }\) are suitable linear functionals on \(C(\Omega ^0)\). Across all levels \(\ell =0,\dots ,N-1\), the interpolant for the function becomes:

$$\begin{aligned} \Lambda (f) = \sum _{\ell =0}^{N-1}\sum _{i\in \varvec{\mathcal {I}}_{\ell ,\Omega _n}} \lambda _{i,\ell }(f)B_{i,\ell }, \end{aligned}$$
(55)

where \(B_{i,\ell ,\Omega _n}^{\varvec{\mathcal {T}}}\) is a THB spline of level \(\ell\) constructed on domain \(\Omega _n\). For any basis function \(B_{i,\ell }\), the coefficient \(\lambda _{i,\ell }\) are found by locally interpolating the function f onto all active basis functions \(B_{j,\ell }, j\in \varvec{\mathcal {J}}\) in the support of \(B_{i,\ell }\). This gives coefficients \(\lambda _{j,\ell }, j\in \varvec{\mathcal {J}}\) of which coefficient i gives \(\lambda _{i,\ell }\). This quasi-interpolation scheme is used in the present framework to express the solution obtained from the previous load-step in terms of the newly, adaptively refined and coarsened basis. In the case of non-nested spaces – which can occur when coarsening – this implies that the quasi-interpolation scheme is not exact.

5 Algorithmic overview

In Fig. 1 the adaptive isogeometric method for solution stepping problems has been presented. Based on Sects. 24, a summarised workflow for adaptive isogeometric shell analysis is depicted in Fig. 5 and Algorithm 1.

The Solve block involves solving the non-linear isogeometric Kirchhoff–Love shell equation from Eq. (16). This variational formulation involves geometric and material non-linearities and can potentially also involve load non-linearities. After solving the Kirchhoff–Love shell problem, the discrete solution vector \({\textbf {u}}_h\) is passed to the Estimate block. Here, the DWR method is solved by computing the adjoint problem in the primal space (Eq. (21)) and in the enriched space (Eq. (22)). Then, the element-wise error estimate can be obtained by integrating Eq. (20) element-wise. The element-wise errors \(e_k\) can be passed to the Mark block, where elements are marked for refinement (Eq. (52)) if the total error \(\Delta \varvec{\mathcal {L}}\) is larger than a lower (refinement) tolerance \(\text {tol}_r\) and a coarsening marking (Eq. (52)) is performed if the total error is above an upper (coarsening) tolerance \(\text {tol}_c\). This implies that if \(\text {tol}_c<\Delta \varvec{\mathcal {L}}<\text {tol}_r\), a combined coarsening and refinement step is performed, as described in Eq. (53). In this case, the coarsening marking from Eq. (52) is performed given \(\varvec{\mathcal {M}}_r\). Given the elements marked for refinement and coarsening, collected in \(\varvec{\mathcal {M}}_r\) and \(\varvec{\mathcal {M}}_c\) respectively, the mesh can be Adapted. In order to start the solution interval again, the start point should be Transferred to the new mesh and the governing equation can be solved again if the error is not in the interval \([\text {tol}_r,\text {tol}_c]\) or if the number of refinement iterations i exceeds the maximum number of refinement iterations, \(I_{\text {max}}\). If the total error is in the interval \([\text {tol}_r,\text {tol}_c]\) or if the number of refinement iterations i exceeds the maximum number of refinement iterations, \(I_{\text {max}}\), the solution can be advanced, e.g. using a load-stepping or an arc-length method. Thereafter, the governing equations can be Solved again. Note that if \(I_{\text {max}}=1\), no inner iterations for adaptive meshing are performed.

Fig. 5
figure 5

A graphical summary of the adaptive meshing flowchart from Fig. 1 used in the present work. The equations which are used in each step are indicated in the blocks. The adaptive meshing iterations are performed within each solution step until the total error \(\Delta \varvec{\mathcal {L}}\) is contained in the interval \([\text {tol}_r,\text {tol}_c]\), \(\text {tol}_r<\text {tol}_c\), following the tolerances in Sect. 4.3. In case of convergence, the solution is advanced, e.g. with an arc-length iteration. Algorithm 1 provides an algorithm corresponding to this flow-chart

Algorithm 1
figure c

An algorithmic summary of the goal-adaptive meshing routine employed in the present work. Figure 5 provides a graphical summary of this algorithm.

6 Numerical examples

In this section, several numerical examples are presented. The examples represent different applications of the theory presented in this paper and - without loss of generality - all employ Isogeometric Kirchhoff–Love shells. The first three examples illustrate the performance of the DWR error estimator and the last three example demonstrate the use of this error estimator for adaptive meshing. More precisely, the numerical examples performed in this section, as well as their purpose, are:

Linear static analysis of a square plate (Sect. 6.1):

A simple example of linear Kirchhoff–Love shell theory is presented. In this case, error estimators using the DWR are computed for different goal functionals and verified using the actual error computed from manufactured solutions. The goal of this benchmark problem is to evaluate the accuracy of the error estimators in linear static analysis.

Modal analysis of a circular plate (Sect. 6.2):

Since the analytical eigenvalues and eigenmodes are known for this case, the goal of this benchmark problem is to verify the error estimator for a vibration eigenvalue problem, given in Eq. (26) with the stiffness and mass operators \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {0}},{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {M}}({\textbf {v}},{\varvec{\phi }})\).

Linear buckling analysis of a square plate (Sect. 6.3):

Analytical critical buckling loads and mode shapes are also known for this case. Therefore, the goal of this benchmark problem is to provide verification for the buckling error estimator from Eq. (26) with the buckling operators \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {u}}_L,{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {M}}({\textbf {v}},{\varvec{\phi }})\).

Non-linear analysis of a pinched thin plate (Sect. 6.4):

In this example a thin plate with very low bending stiffness subject to a out-of-plane load is analysed. The error estimator is used to provide mesh adaptivity to compare to uniform refinement. The goal of this benchmark problem is to evaluate the performance of the DWR as driver for adaptive meshing in a static load case with geometric non-linearities.

Snap-through instability of a cylindrical roof (Sect. 6.5):

The snap-through behaviour of a cylindrical roof are considered in this example. The benchmark problem is a well-known application of arc-length methods and shells. The goal of solving this problem is to test the full adaptive solution stepping procedure from Fig. 5 on a benchmark problem.

Wrinkling analysis (Sect. 6.6):

In the last example, the procedure from Fig. 5 is applied to the modeling of membrane wrinkling. This problem contains geometric non-linearities and material non-linearities. The results are compared to uniformly refinements to evaluate the efficiency of adaptive meshing for such applications. The goal of this example is to demonstrate the use of the adaptive meshing routine from Fig. 5 on a complex load-stepping problem with geometric and material non-linearities.

In the following subsections, the short-hand notations \(\varvec{\mathcal {L}}_{\text {an}}=\varvec{\mathcal {L}}({\varvec{u}}_{\text {an}})\), \(\varvec{\mathcal {L}}_{\text {num}}=\varvec{\mathcal {L}}({\varvec{u}}_{\text {num}})\), \(\Delta \varvec{\mathcal {L}}_{\text {an}}=\varvec{\mathcal {L}}_{\text {an}} - \varvec{\mathcal {L}}_{\text {num}}\) and \(\Delta \varvec{\mathcal {L}}_{\text {num}}=\varvec{\mathcal {R}}({\varvec{u}}_{\text {num}},\tilde{{\varvec{\xi }}}_h-{\varvec{\xi }}_h)\) (see Eq. (20)) are used, given the analytical and numerical solutions \({\varvec{u}}_{\text {an}}\) and \({\varvec{u}}_{\text {num}}\), respectively. Furthermore, where relevant, the parameters \(\rho _r\), \(\rho _c\), \(\text {tol}_r\) and \(\text {tol}_c\) (see Eqs. (53), (52) and (48)) are fixed per example. A study on finding optimal values for these parameters is out of the scope of this paper. Lastly, all simulations are performed using the open-source Geometry+Simulation modules [72].

6.1 Linear static analysis of a square plate

For the linear shell example, let us consider a flat plate with unit dimensions \(L=W=1\,[\text {m}]\), a thickness of \(t=10^{-2}\,[\text {m}]\) and with material parameters \(E=10^6\,[\text {Pa}]\), \(\nu =0.3\), which is clamped on all sides, see Fig. 6. A load vector of

$$\begin{aligned} {\textbf {f}}= & {} \frac{2EAt^3}{1-\nu ^2}\bigg (x^4 - 2x^3 + 3x^2 - 2x + y^4 - 2y^3 + 3y^2 - 2y + 12x^2y^2 \nonumber \\{} & {} - 12x^2y -12xy^2 + 12xy + \frac{1}{3}\bigg ) {\textbf {e}}_z \end{aligned}$$
(56)

is applied, based on the manufactured solution given by

$$\begin{aligned} {\varvec{u}}_{\text {an}} = A x^2 (x - 1)^2 y^2 (y - 1)^2 {\textbf {e}}_z. \end{aligned}$$
(57)

Using this manufactured solution, any goal functional \(\varvec{\mathcal {L}}_{\text {an}}\) can be evaluated. Solving the primal problem for this linear shell example gives \({\varvec{u}}_{\text {num}}\), which can be used to compute the DWR error estimate of \(\Delta \varvec{\mathcal {L}}_\text {num}\).

Fig. 6
figure 6

Geometry and parameters for the example of a unit-square plate with a distributed vertical load \(f_z\) given by Eq. (56). The displacements are fixed on all edges

In Fig. 7, the results for the linear shell problem are given. The title of each column represents the goal-function that is used for error estimation in this column. The top row provides the errors \(\Delta \varvec{\mathcal {L}}_{\text {an}}\) and \(\Delta \varvec{\mathcal {L}}_{\text {num}}\) with respect to an uniformly refined mesh size. As can be seen in this figure, \(\Delta \varvec{\mathcal {L}}_{\text {num}}\) quickly converges to \(\Delta \varvec{\mathcal {L}}_{\text {an}}\) for different spline orders p. In addition, the bottom row of Fig. 7 provides the efficiency of the error estimator, given by \(\Delta \varvec{\mathcal {L}}_{\text {num}}/\Delta \varvec{\mathcal {L}}_{\text {an}}\). These figures confirm convergence of the DWR estimates to the analytical goal functional errors for all considered goal functionals. Only for the membrane strain norm goal functional the error estimate for coarse meshes is inaccurate. This can possibly be explained by the in-plane shear strain that cancels out over the whole domain but which does contribute in the norm \(\Vert {\varvec{\varepsilon }}\Vert\)

Concluding, the linear shell benchmarks shows that for different goal functionals the DWR method provides accurate estimation of the error \(\Delta \varvec{\mathcal {L}}\) of the goal functional \(\varvec{\mathcal {L}}\) starting at relatively small mesh sizes of \(h<10^{-1}\).

Fig. 7
figure 7

Linear static analysis of a clamped plate with a uniformly distributed load according to Eq. (56) according to a manufactured solution from Eq. (57). The top row provides \(\Delta \varvec{\mathcal {L}}\) against the uniform mesh size h. The bottom row presents the efficiency of the error estimators against the mesh size h. The markers represent error estimates computed via the DWR and the lines represent the exact error, i.e. the error of the numerical solution with respect to the analytical solution. The results are given for goal functionals (from left to right) \(\varvec{\mathcal {L}}=\int _\Omega \Vert {\textbf {u}}\Vert \textrm{d}{\Omega }\) (displacement norm), \(\varvec{\mathcal {L}}=\int _\Omega \lambda _2\textrm{d}{\Omega }\) (second principal stretch), \(\varvec{\mathcal {L}}=\int _\Omega \Vert {\varvec{\varepsilon }}({\textbf {u}})\Vert \textrm{d}{\Omega }\) (membrane strain norm) and \(\varvec{\mathcal {L}}=\int _\Omega {\textbf {n}}({\textbf {u}})\cdot {\textbf {e}}_1\textrm{d}{\Omega }\) (first component of membrane force)

6.2 Modal analysis of a circular plate

As a next example, the vibration modes of a circular plate with clamped boundary conditions are computed. The geometry with boundary conditions is illustrated in Fig. 8. The circular plate has unit diameter, a thickness \(t=10^{-2}\,[\text {m}]\), Young’s modulus \(E=10^6\,[\text {Pa}]\), Poisson’s ratio \(\nu =0.3\) and density \(\rho =1\,[\text {kg}/\text {m}^3]\). The analytical solutions for the eigenfrequencies of the circular plate are obtained by

$$\begin{aligned} \omega _n = \gamma _n^2\sqrt{D/\rho t}, \end{aligned}$$
(58)

where \(\gamma _n\) is the \(n^\text {th}\) root of the equation \((I_{m-1}(\gamma R)-m/RI_{m}(\gamma R))J_m(\gamma R) - I_m(\gamma R)(J_{m-1}(\gamma R)-m/RJ_m(\gamma R))=0\) following from a separation of variables solution [67], R is the radius of the plate and \(D=Et^3/(12(1-\nu ^2))=9.16\cdot 10^{-8}\) is the flexural rigidity. As stated in Sect. 3.2, the goal functional eigenvalue problems is given in Eq. (31), and requires the eigenvalue problem in Eq. (24) to be solved with linear operators \(\varvec{\mathcal {A}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {W}}'({\textbf {0}},{\textbf {v}},{\varvec{\phi }})\) and \(\varvec{\mathcal {B}}({\textbf {v}},{\varvec{\phi }})=\varvec{\mathcal {M}}({\textbf {v}},{\varvec{\phi }})\), see Eqs. (14) and (10).

Fig. 8
figure 8

Geometry and parameters for a vibrating circular plate with a clamped boundary

Figure 9 presents the first four eigenmodes in the top row. Furthermore, \(\Delta \varvec{\mathcal {L}}_{\text {an}}\) and \(\Delta \varvec{\mathcal {L}}_{\text {num}}\) as a function of the element size for uniformly refined domain are given in the middle row for the first four eigenmodes. These plots show that the approximation for the error \(\Delta \varvec{\mathcal {L}}_{\text {num}}\) approximates \(\Delta \varvec{\mathcal {L}}_{\text {an}}\). In the bottom row of Fig. 9 the efficiencies also show that the approximation converges to an efficiency equal to 1. However, for the \(p=4\) line, the efficiency degrades when the ‘exact’ error obtained by the analytical solution approaches values around \(10^{-11}\), which is attributed to the approximation of the roots \(\gamma _i\) and the precision of the eigenvalue solver.

Fig. 9
figure 9

Modal analysis of a circular plate. The top row provides the mode shapes from mode 1 up to 4. The mid row provides \(\Delta \varvec{\mathcal {L}}\) against the uniform mesh size h and the bottom row provides the efficiency of the error estimators against the mesh size h. The markers represent error estimates computed via the DWR and the lines represent the exact error, i.e. the error of the numerical solution with respect to the analytical solution. The eigenfrequencies for mode 1 up to 4 are, respectively, \(\omega _1=9.56\cdot 10^{-4}\,[\text {Hz}]\), \(\omega _2=4.14\cdot 10^{-3}\,[\text {Hz}]\), \(\omega _3=1.11\cdot 10^{-2}\,[\text {Hz}]\) and \(\omega _4=1.45\cdot 10^{-2}\,[\text {Hz}]\)

Concluding, the modal analysis benchmark shows that the DWR method provides accurate estimation of the eigenfrequency error for different considered mode shapes.

6.3 Linear buckling analysis of a square plate

Similar to modal analysis, DWR error estimation for buckling analysis also relies on the formulations in Sect. 3.2. The difference with the modal analysis error estimation is that the buckling analysis error estimation involves the solution of a pre-buckling solution and no mass matrix. As an example for buckling analysis, a square simply supported plate is considered, see Fig. 10, with a Saint-Venant Kirchhoff constitutive law with Young’s modulus \(E=10^6\,[\text {Pa}]\) and Poisson’s ratio \(\nu =0.3\,[\text {-}]\). The dimensions of the plate are \(L\times W \times t=1\times 1\times 0.01\,[\text {m}^3]\). The plate is subject to a distributed line load of \(\sigma t\) in both directions. The analytical solution for the buckling load with m half waves in x-direction and n half waves in y-direction for a square plate with sides L and with equal loads is given in [73] and reads:

$$\begin{aligned} \sigma ^{m,n}_{c}t = \frac{D \pi ^2}{L^2}\left( m^2 + n^2\right) , \end{aligned}$$
(59)

with \(D=Et^3/12(1-\nu ^2)\) the flexural rigidity of the plate. Using this expression, the first four unique modes are, indexed in ascending order: \(\sigma ^{1,1}_{c}t = \sigma ^1_{c}t = 1.808\,[\text {N}/\text {m}]\), \(\sigma ^{2,1}_{c}t = \sigma ^{1,2}_{c}t = \sigma ^2_{c}t = 4.519\,[\text {N}/\text {m}]\), \(\sigma ^{2,2}_{c}t = \sigma ^3_{c}t = 7.230\,[\text {N}/\text {m}]\), \(\sigma ^{3,1}_{c}t = \sigma ^{1,3}_{c}t = \sigma ^4_{c}t = 9.038\,[\text {N}/\text {m}]\).

Fig. 10
figure 10

Geometry and parameters for the plate buckling example. A distributed load of \(\sigma t\) is acting on two boundaries in two different directions, and the other boundaries are simply supported and fixed in out-of-plane direction

Figure 11 depicts the analytical error \(\Delta \varvec{\mathcal {L}}_{\text {an}}\) and the DWR error estimate \(\Delta \varvec{\mathcal {L}}_{\text {num}}\) as a function of the mesh size h for uniform refinements. Both errors are normalised with the analytical value of the critical buckling load. As can be seen in this figure, the DWR prediction of the error converges with a rate of convergence of \(2(p-1)\) for all degrees p until it reaches values of around \(10^{-10}\) after which the errors stagnate and increase again (in particular for \(p=4\)). This behaviour is similar to the behaviour observed in [74] and can be attributed to the round-off errors as discussed. These errors occur when the number of degrees of freedom is large enough and the machine precision is limited. In case of a buckling simulation, where the non-linear stiffness operator is constructed on an initial solution of a linear simulation, the influence of round-off errors is expected to occur sooner. In addition, it can also be seen that the error computed using the analytical solution stagnates. This is due to the fact that the numerical approximation of the critical buckling load shows small variations depending on the solution to the linear problem that is solved to obtain the tangential stiffness matrix to compute the generalised eigenvalue problem for buckling. For the results presented in Fig. 11, the load \(\sigma t=10^{-4}\,[\text {N}/\text {m}]\) was used to compute the buckling linearisation.

Fig. 11
figure 11

Buckling analysis of a square plate with simply supported boundary conditions. The top row provides the mode shapes from mode 1 up to 4. The bottom row provides \(\Delta \varvec{\mathcal {L}}\) against the uniform mesh sise h. The markers represent error estimates computed via the DWR and the lines represent the exact error, i.e. the error of the numerical solution with respect to the analytical solution. The critical loads for unique modes 1 up to 4 are, respectively, \(\sigma ^{1,1}_{c}t = \sigma ^1_{c}t = 1.808\,[\text {N}/\text {m}]\), \(\sigma ^{2,1}_{c}t = \sigma ^{1,2}_{c}t = \sigma ^2_{c}t = 4.519\,[\text {N}/\text {m}]\), \(\sigma ^{2,2}_{c}t = \sigma ^3_{c}t = 7.230\,[\text {N}/\text {m}]\), \(\sigma ^{3,1}_{c}t = \sigma ^{1,3}_{c}t = \sigma ^4_{c}t = 9.038\,[\text {N}/\text {m}]\)

6.4 Non-linear analysis of a pinched thin plate

In a next example, we consider a square membrane subject to a point-load in the middle and with corners fixed in all directions, see Fig. 12. The membrane is modelled with a Saint-Venant Kirchhoff constitutive law with Young’s modulus \(E=1.0\,[MPa]\) and a Poisson ratio \(\nu =0.3\). The thickness of the membrane is \(t=10^{-3}\,[\text {mm}]\) and the length and with are \(L\times W = 1\times 1\,[\text {mm}]\). The simulation is performed on a quarter of the domain, employing symmetry conditions as depicted in Fig. 12. A load of \(P=4\cdot 10^{-7}\,[\text {N}]\) is applied in the center of the sheet. The static load case is solved using an arc-length method to ensure convergence of the solution. Furthermore, an adaptive refinement strategy is employed with admissible refinement. The jump parameter m is set to 2 and the maximum number of refinement levels is 8 or 11, which equals a tensor basis level with \(2^{8}\times 2^{8}=256\times 256\) or \(2^{11}\times 2^{11}=2048\times 2048\) elements, respectively. The refinement parameter is set to \(\rho _r=0.5\). The goal functionals considered in this case are based on displacements as well as on principal stresses:

$$\begin{aligned} \begin{aligned} \varvec{\mathcal {L}}({\textbf {u}})&=\Vert {\textbf {u}}({\textbf {x}}_P)\Vert ,\\ \varvec{\mathcal {L}}({\textbf {u}})&=\int _\Omega {\varvec{\sigma }}_p\cdot {\textbf {e}}_y\textrm{d}{\Omega }. \end{aligned} \end{aligned}$$
(60)

Instead of being a domain-integrated goal functional, the first goal functional is evaluated on the point \({\textbf {x}}_P\) where the force P is applied, see Fig. 12.

Fig. 12
figure 12

Geometry and parameters for a square thin plate subject to a point load P in the middle. The plate is fully constrained in every corner. Because the problem is symmetric, only a quarter of the domain is modelled. Hence, symmetry conditions are applied. On the x-aligned symmetry axis, this implies that \(u_y=\frac{\partial u_{z}}{\partial y}=\frac{\partial u_{x}}{\partial y}=0\) and on the y-aligned symmetry axis this implies that \(u_x=\frac{\partial u_{z}}{\partial x}=\frac{\partial u_{y}}{\partial x}=0\)

Fig. 13
figure 13

Deformed surface from the benchmark presented in Fig. 12. The result is the last solution from the adaptive meshing routine with deformation norm goal-functional of which the results are presented in Fig. 14

Figure 13 presents the deformed membrane for the last step of the adaptive simulation. Furthermore, Fig. 14 presents the estimated error \(\Delta \varvec{\mathcal {L}}\) given the goal functionals in Eq. (60) for the uniform refinement as well as for the adaptive refinement simulation with maximum level 8 or 11. Moreover, Figs. 15 and 16 provide the absolute element-wise errors for the adaptive refinement simulation and for the uniform refinement series for both considered goal functionals. The contour lines in these error fields represent the vertical deflection of the sheet.

From all provided results, it can be observed that the adaptive mesh provides for both goal functionals an efficient converging mesh, where the accuracy per degree of freedom is higher compared to uniformly refined meshes. However, it can also be seen that the total error \(\Delta \varvec{\mathcal {L}}\) is not strictly decreasing for both goal functionals. The bottom plots of Fig. 14 indicate that this point is closely related to the maximum depth that is reached: the percentage of the total element error e that can still be refined rapidly decreases, meaning that the only elements that are still available for refinement are the ones that have insignificant contribution to the total element error e, deeming refinement of these elements meaningless. It can be seen from Figs. 15 and 16 that the maximum element depth is reached in the corner where the sheet is fixed and in the corner where the load is applied. After the maximum level is reached, the refined elements start distributing over the diagonal of the domain. For both goal functionals, Fig. 14 shows that some further decrease in the total error \(\Delta \varvec{\mathcal {L}}\) can be gained after the maximum error is reached, but that it is most effective to increase the maximum refinement depth. Comparing the error fields and meshes for both goal functionals (see Figs. 15 and 16), it can be seen that the second-principal stress-based error field shows slightly wider error bands in the finest depicted uniform refinement error fields than the displacement-based error estimator. As a consequence, the corresponding adaptive meshes show that the elements indeed tend to be broader distributed along the diagonal of the domain in case of the displacement-driven refinement (Fig. 15).

Fig. 14
figure 14

Estimated error convergence (top) and the percentage of the total element error e that is available for refinement (bottom) against the number of degrees of freedom (DoFs) for adaptively and uniformly refined meshes with respect to the goal functionals from Eq. (60). The markers labeled with a black border are the markers for which the mesh is plotted in Figs. 15 and 16. The filled markers represent points where refinement is not blocked, and empty markers points where refinement is blocked because the maximum refinement depth is reached. Note that the errors are computed before refinement, hence blocked elements in iteration i have effect on the error computation in iteration \(i+1\)

Fig. 15
figure 15

Normalised element error values \(e_k/\Delta \mathcal {L}\) for uniformly (a) and adaptively (b, c) refined meshes using goal-function \(\varvec{\mathcal {L}}({\textbf {u}}) = \Vert {\textbf {u}}({\textbf {x}}_P)\Vert\). The meshing steps increase from left to right. The contour lines represent the displacement of the membrane, with intervals of \(0.1\,[\text {mm}]\). The bottom right corner of the pictures indicates the fixed corner and the top left corner is the corner where the load is applied

Fig. 16
figure 16

Normalised element error values \(e_k/\Delta \mathcal {L}^2\) for uniformly (a) and adaptively (b, c) refined meshes using goal-function \(\varvec{\mathcal {L}}({\textbf {u}}) = \int _\Omega {\varvec{\sigma }}_p\cdot {\textbf {e}}_y\textrm{d}{\Omega }\). The meshing steps increase from left to right. The contour lines represent the displacement of the membrane, with intervals of \(0.1\,[\text {mm}]\). The bottom right corner of the pictures indicates the fixed corner and the top left corner is the corner where the load is applied

Concluding, the non-linear shell benchmark shows that an adaptive meshing strategy provides accurate solutions on meshes with a small number of degrees of freedom compared to uniform meshes. Furthermore, the benchmarks show the importance of refinement levels, meaning that convergence of the adaptive meshing strategy vanishes as soon as the elements contribution to a large extent to the total error are on the lowest allowed level. This stresses the relevance of spline constructions that allow for deep levels of refinement with moderate computational costs.

6.5 Snap-through instability of a cylindrical roof

In order to present results of the adaptive isogeometric method developed in this paper for quasi-static problems, hence completing full cycles in Fig. 1, the well-known benchmark of a collapsing cylindrical roof [75] subject to a point-load is considered. The goal of this benchmark problem is to evaluate whether the presented adaptive isogeometric method provides DoF-wise efficient solutions compared to solutions with uniform refinements.

The geometry for the benchmark problem is presented in Fig. 17. Here, the radius of the roof \(R=2.540[\text {m}]\), the angle is \(\theta =0.1\,[\text {rad}]\) and the length and thickness are, respectively, \(L=0.508\,[\text {m}]\) and \(t=6.35\cdot 10^3\,[\text {mm}]\). Moreover, the material properties are \(E=3102\,[\text {MPa}]\) and \(\nu =0.3\,[\text {-}]\) for a Saint-Venant Kirchhoff material. Only a quarter of the roof is modelled, as depicted in Fig. 17, because of symmetry. The simulation is performed using a Crisfield arc-length method [65] with arc-length \(\Delta L=25\) and a zero force-scaling. The goal functional that is used for error evaluation and adaptivity is based on the norm of the flexural strain tensor over the whole domain \(\varvec{\mathcal {L}}=\int _\Omega \Vert {\textbf {m}}({\textbf {u}})\Vert \textrm{d}{\Omega }\). The jump parameter for admissible meshing is set to \(m=2\). The mesh will be refined when \(\Delta \varvec{\mathcal {L}}>\text {tol}_r\) and coarsened when \(\Delta \varvec{\mathcal {L}}<\text {tol}_c\). As discussed in Sect. 5, \(\text {tol}_r<\text {tol}_c\) such that the mesh is refined and coarsened simultaneously when \(\Delta \varvec{\mathcal {L}}\in [\text {tol}_r,\text {tol}_c]\), which is also the condition for termination. The maximum number of mesh adaptivity iterations is set to 5 in this case. The tolerances \(\text {tol}_r\) and \(\text {tol}_c\) are determined based on the results of uniformly refined simulations with \(16\times 16\) (918 DoFs) and \(32\times 32\) elements (3366 DoFs) by taking a wide band around the error envelopes in Sect. 6.5 excluding peaks. The tolerances are \((\text {tol}_r,\text {tol}_c)=(10^{-10},10^{-8})\). It should be noted that these tolerances can also be based on requirements in engineering, or they can be determined during the computations; both are beyond the scope of this paper. The refinement parameter is set to \(\rho _r=0.5\), the coarsening parameter to \(\rho _c=0.05\) and the maximum refinement level is 11. The adaptive and uniform meshes are modelled with bi-cubic B-spline basis functions (i.e. \(p=3\)).

Fig. 17
figure 17

Geometry and parameters for cylindrical roof with a point-load P in the middle. The bottom-right corner of each domain corresponds to the point A: the reference point for which the z-displacements are plotted. The roof is free on the curved edges and simply supported (\(u_z=0\)) on the straight edges. As a consequence, the problem is symmetric and a quarter of the domain is modelled. On the x-aligned symmetry axis, this implies that \(u_y=\frac{\partial u_{z}}{\partial y}=\frac{\partial u_{x}}{\partial y}=0\) and on the y-aligned symmetry axis this implies that \(u_x=\frac{\partial u_{z}}{\partial x}=\frac{\partial u_{y}}{\partial x}=0\)

In Fig. 19, the results of a simulation of the collapsing roof for the adaptive mesh are plotted in a \(\Vert {{\textbf {u}}}\Vert\), \(\lambda P\), \(w_A\)-space. Reference solutions for the present benchmark problem are typically given in the \(\lambda P\), \(w_A\)-space, but since the solution curve is not bijective an alternative coordinate \(\Vert {{\textbf {u}}}\Vert\) is used to represent solutions for this benchmark problem. This is motivated by the projection of the solutions \(\lambda P\) and \(w_A\) projected against \(\Vert {\textbf {u}}\Vert\) in Fig. 19. The results of [75] are provided as a reference.

In Fig. 18, the error and the number of degrees of freedom are plotted against \(\Vert {\textbf {u}}\Vert\). The error envelopes for the uniform meshes show that a large peak occurs around \(\Vert {\textbf {u}}\Vert =0.2\), relating to the first limit point of the collapse of the roof, as seen by the markers in Fig. 19. Additionally, it can be seen that the present algorithm providing mesh adaptivity manages to keep the error within specified bounds (see Fig. 18, top), except on the peak just before \(\Vert {\textbf {u}}\Vert\) where the maximum number of adaptivity iterations is insufficient. Furthermore, it has consistently less degrees of freedom than the uniform mesh with \(32\times 32\) elements. In Fig. 20 a selection of meshes is provided. The meshes are provided as series of 4 consecutive meshes around the limit points of the solution curve, as indicated in Fig. 19, and are depicted in increasing order from left to right for the first (top) and second (bottom) limit points. The black-bordered markers in Figs. 19 and 18 indicate the points of which the meshes are shown. From the first row of meshes in Fig. 20, it can be seen that the first limit point requires relatively fine meshes and that the elements start concentrated around point A and its diagonal opposite and spread out on the bottom symmetry boundary as the snapping takes place. Furthermore, in the bottom row of Fig. 20, it can be seen that the second limit point does not require many elements, hence the number of elements is slowly decreasing throughout this section of the load–displacement curve. For a complete overview of the mesh in each load-step, we refer to Video 1 in the supplementary material of this paper.

Concluding, this example shows that the goal-adaptive meshing procedure is capable of keeping the error in terms of a goal functions within pre-defined bounds for a solution stepping simulation with limit-point instabilities. Throughout the simulation, the procedure keeps a relatively high efficiency per degree of freedom compared to uniform meshes. It should be noted, however, that the adaptive refinement iterations require a higher computational demand. Therefore, the next and final example provides a procedure where no adaptivity iterations are performed.

Fig. 18
figure 18

Errors (top) and number of degrees of freedom (DoFs, bottom) for the goal functional \(\varvec{\mathcal {L}}=\int _\Omega \Vert {\textbf {m}}({\textbf {u}})\Vert \textrm{d}{\Omega }\) with tolerances \(\text {tol}_r=10^{-10}\) and \(\text {tol}_c=10^{-8}\) for the collapsing roof subject to the displacement norm \(\Vert {\textbf {u}}\Vert\). The gray region represents the region \(\Delta \varvec{\mathcal {L}}\in [\text {tol}_r,\text {tol}_c]\) where refinement and coarsening are performed and where the adaptivity iterations are terminated. Above the gray region only refinement is performed and below the gray region only coarsening is performed

Fig. 19
figure 19

Projection the adaptively refined result from the commonly used \(\lambda P,w_A\)-space [75] onto the displacement norm \(\Vert {\textbf {u}}\Vert\). The solid lines correspond to the results obtained by the adaptively refined mesh, the triangular markers correspond to points of which the mesh is provided in Fig. 20 and the cross-markers indicate the result from [75]

Fig. 20
figure 20

Meshes corresponding to the points marked in Figs. 19 and 18 by the black-bordered marks. The point A marks the point where the load is applied in Fig. 17. The top row of meshes corresponds to the first limit point in Fig. 19 and the bottom row corresponds to the second limit points. The meshes are ordered from left to right for increasing solution steps. The elements are coloured according to the squared error \(e_k\) normalised by the total error \(\Delta \varvec{\mathcal {L}}\), i.e. \(e_k/\Delta \varvec{\mathcal {L}}^2\)

6.6 Wrinkling analysis

As a last example, the wrinkling analysis of a thin membrane subject to a tensile load is considered. This problem is inspired by [76,77,78] and was previously modelled using isogeometric Kirchhoff–Love shells in [5], to which we refer for a detailed problem set-up. The goal of this benchmark in the present paper is to demonstrate the use of the goal-adaptive meshing procedure on a bifurcation problem with geometric and material non-linearities.

Given the geometry in Fig. 21, a quarter of the domain is considered with a symmetry boundary condition on \(\Gamma _4\) and an antisymmetry condition on \(\Gamma _3\). Furthermore, the boundary \(\Gamma _1\) is free and on \(\Gamma _2\) the x-displacement is constant and a horizontal load is applied on this side. The sheet has dimensions \(L=280\,[\text {mm}]\), \(W=140\,[\text {mm}]\) and \(t=0.14\,[\text {mm}]\) such that \(L/W=2\) and \(t/W=10^3\). Furthermore, the material is modelled using a Mooney-Rivlin material model with strain energy density function

$$\begin{aligned} \Psi ({\textbf {C}}) = \frac{c_1}{2}\left( I_1-3\right) + \frac{c_2}{2}\left( I_2-3\right) \end{aligned}$$
(61)

and with parameters \(c_1=3.16\cdot 10^5\,[\text {Pa}]\) and \(c_1=1.24\cdot 10^5\,[\text {Pa}]\). Reference solutions are given by [5] for isogeometric Kirchhoff–Love shell analysis and using ANSYS and LS-DYNA FEA models, respectively. Furthermore, [78] provides experimental data of the maximum amplitude with respect to the strain of the sheet. In the present paper, the reference simulations are performed on uniform cubic meshes with \(32\times 32\) and \(64\times 64\) elements, respectively.

For the adaptive simulation, a THB spline mesh with initially \(32\times 32\) elements is used and mesh adaptivity is activated after wrinkling initiation since the errors in the pre-wrinkling regime are small due to of the lack of out-of-plane deformations of the sheet. The goal-functional is a displacement-based functional on the z-component, i.e. \(\varvec{\mathcal {L}}({\textbf {u}})=\int _\Omega {\textbf {u}}\cdot {\textbf {e}}_z\textrm{d}{\Omega }\). The tolerances for refinement and coarsening are \(\text {tol}_r=10^{-14}\) and \(\text {tol}_c=10^{-10}\), respectively, and they are chosen based on the error envelope of the uniform refinement. The adaptive meshing parameters are chosen as \((\rho _r,\rho _c)=(0.5,0.005)\). These parameters are chosen based on the behaviour of the global error in the first load-steps afer bifurcation. Contrary to the previous example in Sect. 6.5, there are no refinement iterations performed within the load step. This means that the refinement and coarsening operations are performed after the load step based on the magnitude of the error compared to the tolerances. Furthermore, when the error is below a tolerance \(\rho _{c,\text {min}}\), the initial mesh is used again. This is done to prevent further coarsening after re-stabilisation of the wrinkles, i.e. the moment when the wrinkles have dissapeared. For the refinement algorithm, a maximum depth of the THB grid is fixed to 11 levels and the jump parameter is set to \(m=2\). The wrinkling simulation is performed using a Crisfield arc-length method [65] with a quadratic procedure to compute the mode shape at the bifurcation [66]. This procedure further described in [67].

Fig. 21
figure 21

Geometry and parameters for the wrinkling problem. The boundary \(\Gamma _1\) is free, the boundary \(\Gamma _2\) is fixed in x and y direction and rotations around the y-axis are fixed, the boundaries \(\Gamma _3\) and \(\Gamma _4\) have symmetry conditions applied

In Fig. 22, the results for an adaptive isogeometric wrinkling simulation are provided. The top figure provides the normalised wrinkling amplitude with respect to the strain of the sheet (\(\epsilon\)), compared to the IGA and ANSYS SHELL181 element reference results from [5] as well as the experimental results from [78]. The figure in the middle provides the error estimate in terms of the goal functional \(\varvec{\mathcal {L}}\) with respect to the strain of the sheet and the bottom figure provides the number of degrees of freedom with respect to the strain of the sheet. Firstly, the results from both uniform meshes show that the error estimate \(\Delta \varvec{\mathcal {L}}\) is close to zero when the wrinkles initiate, since the sheet is perfectly flat. As soon as the wrinkles form, the error estimate becomes non-zero and it peaks at the moment of re-stabilisation (i.e. the moment when the amplitude vanishes). After re-stabilisation, the error estimate is low, but slightly higher than before wrinkling, probably because the sheet is not numerically flat.

Fig. 22
figure 22

The non-dimensional maximal out-of-plane deformation \(\max (u_z)/t\) (top), the goal functional error \(\Delta \varvec{\mathcal {L}}\) (mid) and the number of degrees of freedom of the computational mesh (bottom) with respect to the strain of the sheet \(\epsilon\). The markers with a black border represent the points of which the meshes are provided in Fig. 23. The colored lines are the solutions obtained by the present model with a Mooney–Rivlin material model with uniform or adaptive meshes. The solid line in the top figure is a SHELL181 result obtained using ANSYS, the dotted line in the top figure is a result obtained using the fully integrated shell in LS-DYNA and the dashed line with markers represents experimental data obtained by [78]

The adaptive meshing simulations show that even with zero inner-iterations for mesh adaptivity the adaptive mesh provides accurate results for a relatively small number of degrees of freedom. Just after wrinkling initiates, the adaptive meshing error peaks due to the coarsening of a large number of elements (as can be seen by the drop of degrees of freedom in the bottom figure). However, the mesh adaptively refines until in the gray region in the middle figure, where combined refinement and coarsening imply that the error balances around \(\text {tol}_c\), i.e. the upper bound of the marked region. Towards the end of the wrinkling phase, the error increases for the uniformly refined mesh, explaining the increase in number of degrees of freedom for the adaptive mesh. Nevertheless, the adaptive mesh provides more accurate results compared to the \(64\times 64\) uniform mesh with less degrees of freedom.

Fig. 23
figure 23

Normalised element errors (left) and the normalised out-of-plane deformation (right) for the wrinkling benchmark plotted on the undeformed geometry with the corresponding elements

In Fig. 23 a selection of meshes from both adaptive simulations are provided, specifically for the wrinkling initiation and re-stabilisation points. For a complete overview of the mesh in each load-step, we refer to Video 2 in the supplementary material of this paper. The evolution of the meshes shows that the mesh elements concentrate around the wrinkles (bottom-right) and in the top-left corner, which represents the corner between the clamped edge (top) and the free edge. The former is expected since the employed goal functional is based on out-of-plane deformations. However, the fact that the mesh concentrates around the top-left corner is non-intuitive, but tells that this area is important to reduce the global error in terms of the out-of-plane deformations. Furthermore, it can be seen that around the re-stabilisation of the wrinkles the mesh concentrates around the bottom-left corner, indicating that this corner is of importance in accurately modelling the wrinkling amplitudes in the whole domain.

Concluding, the wrinkling benchmark shows the potential of mesh adaptivity for such applications. With fewer degrees of freedom, the THB-spline mesh is able to approximate the solution around a pre-defined error, eventhough the selection of the refinement and coarsening parameters and the tolerances has not been optimised in this study.

7 Conclusions

This paper presents an adaptive method for isogeometric Kirchhoff–Love shells. The main contributions of this paper are a goal-adaptive error estimator for isogeometric Kirchhoff–Love shells using the Dual-Weighted Residual method and a slightly modified suitably graded refinement scheme taking into account refined elements in the definition of the coarsening neighborhood.

Using the Dual-Weighted Residual method and given a pre-defined goal functional (e.g the second-principal stress integrated over the domain), an estimator for the error in terms of this goal functional can be defined. The adjoint problem that needs to be solved on the original mesh and on a nested degree-elevated (‘enriched’) mesh has been defined for the isogeometric Kirchhoff–Love shell. In addition, the operators for modal and linear buckling analysis have been derived, implying an additional generalised eigenvalue problem to be solved on the enriched mesh. For suitable grading, the works of [22, 23, 25, 50] have been closely followed. In order to be able to refine and coarsen in the same iteration, refined elements have been added to the original definition of the coarsening neighborhood.

To assess the proposed adaptive isogeometric method for Kirchhoff–Love shells, few numerical benchmark problems have been evaluated. Linear static analysis provided an analytical solution has been used to evaluate the DWR error estimators. The eigenvalue problems for modal and buckling analyses have been evaluated on respectively the problem of circular plate vibration and square plate buckling. Based on the linear, modal and buckling analysis with analytical solutions, it can be concluded that the DWR estimator for Kirchhoff–Love shells can be used with several goal functionals and in several applications, as it provides high accuracy with respect to the exact errors.

Using the problem of a pinched membrane, the error estimator has been used to adaptively refine a mesh in a non-linear example. From this example, it can be concluded that eventhough the challenging non-linear problem, high accuracy per DoF can be obtained compared to uniformly refined meshes based on different goal functionals. Lastly, the adaptive isogeometric method from the present paper has been evaluated in solution-stepping problems for structural instabilities. Firstly, the method was applied to limit-point instability problem of a collapse of a cylindrical roof. Here, inner adaptivity iterations were performed for each load-step until the error was located in a desired interval. Again, the present method provides a high accuracy per degree of freedom. In addition, it was shown that the method is indeed able to provide adaptive meshes with respect to a pre-defined interval for a given goal functional. The last benchmark problem involves a tension-wrinkling bifurcation instability of a thin membrane. In this benchmark problem, adaptive meshing has been applied in the post-buckling regime based on wrinkling amplitudes. Here, no adaptivity iterations within the load steps were performed, showing that the method is still able to provide good adaptivity with respect to the pre-defined tolerances. Also, the results of the wrinkling error estimators show that the error peaks in the re-stabilisation phase, where the highest deviation with experimental results are observed.

Future developments for the present method include the application on multi-patch domains, both coupled with penalty methods as well as with globally continuous bases as presented in [79] to handle more complex geometries. Furthermore, structural dynamics have been left out of the scope of this paper, since the DWR for dynamic problems requires backwards-in-time evaluation of the adjoint problem, which is ideally combined with parallel-in-time methods like ParaReal or MGRIT [80]. Lastly, future work can be done on the (adaptive) determination of the adaptive meshing parameters. On the one hand, one can apply the present method on real-world engineering applications, taking realistic goal functionals and margins into the adaptivity algorithm. On the other hand, advanced schemes for triggering pure or combined refinement or coarsening together with their parameters can be futher investigated.