1 Introduction

Shell structures exhibit exceptional stiffness and strength-to-self-weight ratios, and are extensively employed in various engineering fields, such as aerospace, automotive, and marine engineering [1]. The performance of such structures is greatly influenced by geometric and material properties. Thus, structural optimization plays a vital role in obtaining superior designs for shell structures. In this paper, we present an optimization approach based on free-form deformation (FFD) [2] to achieve the optimal shape and thickness distribution for isogeometric shell structures.

Structural analysis is involved in the optimization process to evaluate the response of the current design and guide the subsequent iterations. The finite element (FE) method [3] is a well-established approach used to approximate PDEs with Lagrange polynomial basis functions. However, the discretization of the computational domain through interconnected simple elements, known as meshing, for complicated geometries is the primary challenge in FE analysis. The FE mesh generation and related process can account for up to 80% of total analysis time [4]. Alternatively, isogeometric analysis (IGA) [5, 6] offers the possibility to bypass FE mesh generation by approximating the solution using the smooth non-uniform rational B-spline (NURBS) [7] basis functions. NURBS is the industrial standard widely used to represent computer-aided design (CAD) models, making IGA an ideal method to streamline the design-through-analysis process.

IGA has gained growing interest since its introduction not only due to the unified description between design and analysis models but also the regularity provided by NURBS basis functions. The smoothness in splines allows direct discretization of the Kirchhoff–Love shell model [8], a fourth-order PDE that requires at least \(C^1\) continuity with the Galerkin method. Various applications including wind turbines [9,10,11], bioprosthetic heart valves [12,13,14], and car hoods [15] have employed the isogeometric Kirchhoff–Love shell formulations [16,17,18,19,20] and demonstrated exceptional results. However, practical CAD geometries are often too complex to be represented by a single tensor product NURBS surface. To make the CAD models with multiple NURBS patches directly available for analysis, [21] introduces a fictitious strip to add bending stiffness at patch interfaces with conforming discretizations. Additionally, various methods, such as Nitsche’s method [22, 23], penalty method [24, 25], and super-penalty method [26, 27], have been applied to CAD models with non-matching NURBS surfaces, further expanding the applicability of IGA in dealing with complex geometries.

The seamless integration between CAD and analysis models in IGA makes it a natural choice for design optimization. The updated design in the optimization process can be precisely captured in the analysis, which in turn ensures accurate responses due to the exact geometry representation and excellent approximation capabilities of spline basis functions [28]. Shape optimization using IGA has been investigated extensively [29,30,31,32,33,34]. Many applications, such as beam structures [35], vibrating membranes [36], shell structures [37, 38], and complex photonic crystals [39], show superior design by employing IGA in optimization. Moreover, topology optimization [40, 41] also benefits from the same spline basis in design models and analysis. Shape optimization for shell structures with stiffeners has been explored in [42, 43] using the FFD concept, a B-spline solid is extruded from a “master” part, which is stiffened with several “slave” stiffeners, to modify the shape of the whole shell structure.

In this work, we employ the open-source framework PENGoLINS [44] for automated IGA of non-matching shell structures using the penalty method in [24]. The shape of the shell structure is updated through a trivariate B-spline FFD block, which encompasses the entire shell structure, without differentiating the “master” and “slave” parts. The FFD block modifies the Lagrange control points of all shell patches concurrently to preserve the surface–surface intersections. Subsequently, we obtain the resulting NURBS surfaces of shells using the Lagrange extraction technique [45], which is also implemented in the IGA using FE subroutines. Moreover, this approach is also applicable to shell thickness optimization where the thickness distribution is continuous at patch intersections. By integrating these two design variables, simultaneous shape and thickness optimization for non-matching shells can be effectively achieved. This combined optimization approach enables the exploration of complex design spaces while preserving the geometric integrity of the non-matching shell structure. To demonstrate the capability of the proposed method, we apply it to the design optimization of aircraft wings, effectively navigating the unconventional design space.

The structure of this paper is outlined as follows: we introduce commonly used notations and terminologies in Sect. 2 for reference. Section 3 reviews the penalty-based formulation for coupling of non-matching isogeometric Kirchhoff–Love shells and the computational algorithm for automated IGA of non-matching shell structures. We present the FFD-based shape and thickness optimization approach and formulate the sensitivities using the Lagrange extraction technique in Sect. 4. The optimization approach is validated using a suite of benchmark problems in Sect. 5 and is applied to aircraft wing design optimization in Sect. 6, where superior design solutions are demonstrated. Lastly, we conclude the effectiveness of the proposed method and discuss potential future directions in Sect. 7.

2 Notation and terminology

In this section, we provide a summary of commonly used notions and terminologies for reference, as the formulations in the following sections can become complex due to the use of the extraction concept in IGA, interval quadrature meshes for coupling separate spline patches, and FFD B-spline blocks in optimization.

  • \(p_{\text {sh}}\): order of spline surfaces for shell structures.

  • \({\mathcal {V}}^\text {I,IGA}\): IGA function space for shell patch \(S^\text {I}\). Superscript \(\text {I}\) indicates shell patch index. For single-patch formulations, index \(\text {I}\) is neglected.

  • \(n^\text {I,IGA}\): number of degrees of freedom (DoFs) in \({\mathcal {V}}^\text {I,IGA}\).

  • \({\textbf{N}}^{\text {I,IGA}}\): spline basis functions in \({\mathcal {V}}^{\text {I,IGA}}\).

  • \({\textbf{u}}^{\text {I,IGA}}\): displacement in IGA DoFs for shell patch \(S^{\text {I}}\).

  • \({\textbf{P}}^{\text {I,IGA}}\): NURBS control points for shell patch \(S^{\text {I}}\).

  • \({\mathcal {V}}^{\text {I,FE}}\): FE function space for shell patch \(S^{\text {I}}\).

  • \(n^\text {I,FE}\): number of DoFs in \({\mathcal {V}}^{\text {I,FE}}\).

  • \({\textbf{N}}^{\text {I,FE}}\): Lagrange polynomial basis functions in \({\mathcal {V}}^{\text {I,FE}}\).

  • \({\textbf{u}}^{\text {I,FE}}\): displacement in FE DoFs for shell patch \(S^{\text {I}}\).

  • \({\textbf{P}}^{\text {I,FE}}\): Lagrange control points for shell patch \(S^{\text {I}}\).

  • \({\textbf{M}}^{\text {I}}\): extraction matrix for \(\text {I}\)-th shell patch that represents spline basis functions with Lagrange basis functions.

  • \(\varvec{\xi }^{\text {MI}}\): parametric coordinates of intersection \({\mathcal {L}}\) with respect to shell patch \(S^{\text {I}}\).

  • \({\mathcal {V}}^{\gamma \text {M}}\): function space of the interval quadrature mesh. Superscript \(\gamma \in \{0,1\}\) indicates the derivative order of the functions interpolated from \({\mathcal {V}}^{\text {I,FE}}\) to \({\mathcal {V}}^{\gamma \text {M}}\).

  • \({\textbf{u}}^{\gamma \text {MI}}\): interpolated displacement with \(\gamma\)-th derivative from \({\mathcal {V}}^{\text {I,FE}}\) to \({\mathcal {V}}^{\gamma \text {M}}\).

  • \({\textbf{P}}^{\gamma \text {MI}}\): interpolated control point functions with \(\gamma\)-th derivative from \({\mathcal {V}}^{\text {I,FE}}\) to \({\mathcal {V}}^{\gamma \text {M}}\).

  • \({\textbf{T}}^{\gamma \text {MI}}\): interpolation or transfer matrix that interpolates \(\gamma\)-th derivative of functions from \({\mathcal {V}}^{\text {I,FE}}\) to \({\mathcal {V}}^{\gamma \text {M}}\).

  • \(p_{\text {FFD}}\): order of B-spline basis functions for the FFD block.

  • \({\textbf{N}}_{\text {FFD}}\): basis functions of 3D B-spline FFD block.

  • \({\textbf{P}}_{\text {FFD}}\): B-spline control points of FFD block.

In Sect. 3.1, we review the basic Kirchhoff–Love shell and penalty formulations, and the IGA and FE function spaces are not differentiated in the subsection.

3 Coupling of non-matching isogeometric shells

In aerospace structural applications, many components, such as aircraft wings, empennage, and fuselage, can be modeled using shell theory. The Kirchhoff–Love shell model [16] is employed in this work with IGA discretization. Typically, aircraft CAD geometries are composed of a collection of NURBS patches, and we adopt a penalty-based coupling method [24] to perform analysis for shells composed of multiple patches with arbitrary intersections and assume St. Venant–Kirchhoff material model. We first review the basic kinematics of Kirchhoff–Love shell theory and the coupling formulation for a pair of intersecting shell patches. We then elucidate the computational procedures for the analysis of non-matching shell structures.

3.1 Penalty-based shell coupling

The Kirchhoff–Love shell model neglects transverse shear strains, with straight lines normal to the midsurface remaining straight and normal to the midsurface before and after the deformation, and shell thickness kept unchanged. Thus, the displacement field of the 3D shell can be uniquely represented by the displacement of its midsurface. In the reference configuration, the midsurface of a single-patch shell can be represented by \({\textbf{X}}(\varvec{\xi })\), where \(\varvec{\xi }=\{\xi _1, \xi _2\}\), are parametric coordinates of the midsurface. In the deformed configuration with displacement \({\textbf{u}}(\varvec{\xi })\), the shell midsurface is expressed as

$$\begin{aligned} {\textbf{x}}(\varvec{\xi }) = {\textbf{X}}(\varvec{\xi }) + {\textbf{u}}(\varvec{\xi }) \text { .} \end{aligned}$$
(1)

Taking derivatives of midsurface with respect to parametric coordinates, we can obtain the covariant basis vectors in reference and deformed configurations on the tangent plane as

$$\begin{aligned} {\textbf{A}}_\alpha = \frac{\partial {\textbf{X}}}{\partial \xi _\alpha } \quad \text { and } \quad {\textbf{a}}_\alpha = \frac{\partial {\textbf{x}}}{\partial \xi _\alpha } \quad \text { for } \alpha \in \{1,2\} \text { ,} \end{aligned}$$
(2)

and unit vectors normal to the midsurface read as

$$\begin{aligned} {\textbf{A}}_3 = \frac{{\textbf{A}}_1 \times {\textbf{A}}_2}{\Vert {\textbf{A}}_1 \times {\textbf{A}}_2 \Vert } \quad \text { and } \quad {\textbf{a}}_3 = \frac{{\textbf{a}}_1 \times {\textbf{a}}_2}{\Vert {\textbf{a}}_1 \times {\textbf{a}}_2 \Vert } \text { .} \end{aligned}$$
(3)

Membrane strain \(\varvec{\varepsilon }\) and change of curvature \(\varvec{\kappa }\) can be derived from (2) and (3). Applying the appropriate material model, we can obtain the corresponding normal forces \({\textbf{n}}\) and bending moments \({\textbf{m}}\). The internal virtual work of Kirchhoff–Love shell is given by

$$\begin{aligned} \delta W_{\text {int}} = \int _{{\mathcal {S}}} ({\textbf{n}}:\delta \varvec{\varepsilon } + {\textbf{m}} : \delta \varvec{\kappa } )\ \mathrm{d} {\mathcal {S}} \text { ,} \end{aligned}$$
(4)

where \({\mathcal {S}}\) is the midsurface of the shell. External virtual work is defined as

$$\begin{aligned} \delta W_{\text {ext}} = \int _{\Omega } \rho {\textbf{B}} \cdot \delta {\textbf{u}}\ \mathrm{{d}}\Omega + \int _{\Gamma } {\textbf{T}} \cdot \delta {\textbf{u}}\ \mathrm{{d}}\Gamma \text { ,} \end{aligned}$$
(5)

where \(\rho\) is the density, \({\textbf{B}}\) is the body force, and \({\textbf{T}}\) is the traction. \(\Omega\) is the 3D domain of the shell volume with a thickness of t about the midsurface, and \(\Gamma\) is the 2D surface boundary where \({\textbf{T}}\) is applied. The principle of virtual work states

$$\begin{aligned} \delta W = \delta W_{\text {int}} - \delta W_{\text {ext}} = 0 \text { .} \end{aligned}$$
(6)

(6) is a nonlinear equation and can be solved using the Newton–Raphson method,

$$\begin{aligned} \frac{\partial ^2 W}{(\partial {\textbf{u}})^2}\,\Delta {\textbf{u}} = -\frac{\partial W}{\partial {\textbf{u}}} \text {.} \end{aligned}$$
(7)

Here, we only go through the fundamental equations of the Kirchhoff–Love shell model, readers are referred to [17, Section 3] for detailed derivation.

Practical complex shell structures typically consist of multiple NURBS patches. For example, a pair of intersecting shells joined at a certain angle, which is prevalent when modeling the stiffeners of an aircraft wing, cannot be described by one NURBS surface. To make the CAD geometry directly available for IGA, separate NURBS patches need to be coupled together so that both displacement continuity and joint angle conservation on the surface–surface intersections are maintained during deformation.

In this project, we use the penalty-based shell coupling formulation proposed by Herrema et al. [24], which offers a good balance between accuracy and simplicity. Consider two shells modeled with spline patches \({\mathcal {S}}^\text {A}\) and \({\mathcal {S}}^\text {B}\) that share one intersection \({\mathcal {L}}\), as depicted in Fig. 1. The unit vector \({\textbf{a}}^\text {A}_{t}\) is tangent to the intersection in the deformed configuration. In the reference and deformed configurations, conormal vectors are defined as

$$\begin{aligned} {\textbf{A}}^\text {A}_{n} = {\textbf{A}}^\text {A}_{t} \times {\textbf{A}}^\text {A}_{3} \quad \text { and } \quad {\textbf{a}}^\text {A}_{n} = {\textbf{a}}^\text {A}_{t} \times {\textbf{a}}^\text {A}_{3} \text { .} \end{aligned}$$
(8)

Subsequently, shell patches \({\mathcal {S}}^\text {A}\) and \({\mathcal {S}}^\text {B}\) are coupled through the following penalty energy

$$\begin{aligned} W^\text {AB}_\text {pen}&= \frac{1}{2}\int _{{\mathcal {L}}}\alpha _\text {d}\left\| {\textbf{u}}^\text {A}-{\textbf{u}}^\text {B}\right\| ^2 + \alpha _\text {r}\left( \left( {\textbf{a}}^\text {A}_3\cdot {\textbf{a}}_3^\text {B} - {\textbf{A}}^\text {A}_3\cdot {{\textbf{A}}}_3^\text {B}\right) ^2 \right. \nonumber \\&\quad \left. + \left( {\textbf{a}}^\text {A}_n\cdot {\textbf{a}}_3^\text {B} - {\textbf{A}}^\text {A}_n\cdot {{\textbf{A}}}_3^\text {B}\right) ^2\right) \,\mathrm{d} {\mathcal {L}}\text { ,} \end{aligned}$$
(9)

where the \(\alpha _\text {d}\) term penalizes the differences of the displacement on the intersection to maintain \(C^0\) continuity, and the \(\alpha _\text {r}\) term penalizes the change of the angle between \({\mathcal {S}}^\text {A}\) and \({\mathcal {S}}^\text {B}\) to keep joint angle conservation. Displacement and angle conservation penalty parameters \(\alpha _\text {d}\) and \(\alpha _\text {r}\) are defined based on a problem-independent, dimensionless penalty coefficient \(\alpha\) scaled with element size and material properties. For isotropic materials, the penalty parameters are given by

$$\begin{aligned} \alpha _\text {d} = \frac{\alpha E t}{h (1-\nu ^2)} \quad \text {and} \quad \alpha _\text {r} = \frac{\alpha E t^3}{12 h (1-\nu ^2)} \text { ,} \end{aligned}$$
(10)

where E is Young’s modulus, \(\nu\) is Poisson ratio, t is shell thickness, and h is element size. Details about the derivation of penalty parameters can be found in [24, Section 2]. The recommended value of the penalty coefficient, \(\alpha =1000\), is consistently applied across all benchmark problems and applications in this paper and yields accurate analysis results.

Fig. 1
figure 1

Spline patches \({\mathcal {S}}^\text {A}\) and \({\mathcal {S}}^\text {B}\) with one intersection \({\mathcal {L}}\) (indicated with red curves), where \({\textbf{u}}\) and \({\textbf{a}}_3\) are displacement and unit normal vector of midsurface, \({\textbf{a}}_t\) and \({\textbf{a}}_n\) are unit tangent vector and unit conormal vector on the intersection

3.2 Computational procedures for non-matching shells

In this section, we go through the computational procedures for structural analysis of isogeometric Kirchhoff–Love shells. The stiffness matrix of non-matching shells is formulated and used as the sensitivity in the design optimization in Sect. 4.

3.2.1 IGA of Kirchhoff–Love shells using extraction

The concept of extraction [45,46,47,48] is utilized in the implementation of IGA, whose spline basis functions can be represented exactly by the linear combination of Lagrange basis functions. These Lagrange basis functions can be used in the classical FEM, allowing IGA to be implemented using finite element software with pre-defined extraction operators. An open-source IGA Python library named tIGAr is developed by Kamensky et al. [49] using the finite element software FEniCS [50]. Implementation and technical details are discussed in Sect. 4.4. In this section, we illustrate the basic mathematical operations and workflow of IGA using extraction.

To perform IGA, an extraction matrix \({\textbf{M}}\) is generated to represent functions defined in spline function space \({\mathcal {V}}^\text {IGA}\) with FE basis functions in \({\mathcal {V}}^\text {FE}\). The relation between these two sets of basis functions is given by

$$\begin{aligned} {\textbf{N}}^{\text {IGA}} = {\textbf{M}}^\mathrm{{T}} {\textbf{N}}^{\text {FE}} \text { ,} \end{aligned}$$
(11)

where \({\textbf{N}}^{\text {IGA}}\) are IGA basis functions and \({\textbf{N}}^{\text {FE}}\) are FE basis functions. Each column of \({\textbf{M}}\) is the linear combination of \({\textbf{N}}^{\text {FE}}\) giving an IGA basis function. In the analysis, we first create an extraction matrix \({\textbf{M}}\) and assemble the stiffness matrix \({\textbf{K}}^\text {FE}\) and force vector \({\textbf{F}}^\text {FE}\) in \({\mathcal {V}}^\text {FE}\) using existing finite element subroutines. Then the displacement in \({\mathcal {V}}^\text {IGA}\) is solved as

$$\begin{aligned} ({\textbf{M}}^\mathrm{{T}} {\textbf{K}}^\text {FE} {\textbf{M}}) {\textbf{u}}^\text {IGA} = {\textbf{M}}^\mathrm{{T}} {\textbf{F}}^\text {FE} \text { ,} \end{aligned}$$
(12)

with problem-specific boundary conditions applied to \({\textbf{M}}^\mathrm{{T}} {\textbf{K}}^\text {FE} {\textbf{M}}\) and \({\textbf{M}}^\mathrm{{T}} {\textbf{F}}^\text {FE}\).

Remark 1

For the purpose of clarity, we assume control points of spline surfaces have unit weights. Therefore, rational spline basis functions are the same as homogeneous spline basis functions, both denoted as \({\textbf{N}}^{\text {IGA}}\). In practice, weights need to be taken into consideration for correct geometric mapping and analysis.

For single-patch Kirchhoff–Love shell analysis, stiffness matrix \({\textbf{K}}^\text {FE}\) is the second derivative of total work \(\frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {FE})^2}\). \({\textbf{M}}^\mathrm{{T}} \frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {FE})^2} {\textbf{M}}\) changes basis of \(\frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {FE})^2}\) from \({\mathcal {V}}^\text {FE}\) to \({\mathcal {V}}^\text {IGA}\), and the formulation of IGA stiffness matrix can also be expressed as

$$\begin{aligned} {\textbf{M}}^\mathrm{{T}} \frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {FE})^2} {\textbf{M}} = \left( \frac{\partial {\textbf{u}}^\text {FE}}{\partial {\textbf{u}}^\text {IGA}}\right) ^\mathrm{{T}} \frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {FE})^2} \frac{\partial {\textbf{u}}^\text {FE}}{\partial {\textbf{u}}^\text {IGA}} = \frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {IGA})^2} \text { .} \end{aligned}$$
(13)

The right-hand side (RHS) of (12) for Kirchhoff–Love shell is equivalent to

$$\begin{aligned} {\textbf{M}}^\mathrm{{T}} \left( -\frac{\partial W}{\partial {\textbf{u}}^\text {FE}} \right) = \left( \frac{\partial {\textbf{u}}^\text {FE}}{\partial {\textbf{u}}^\text {IGA}}\right) ^\mathrm{{T}} \left( -\frac{\partial W}{\partial {\textbf{u}}^\text {FE}} \right) = -\frac{\partial W}{\partial {\textbf{u}}^\text {IGA}} \text { .} \end{aligned}$$
(14)

Therefore, (12) is recovered as the linear system in \({\mathcal {V}}^\text {IGA}\) to solve for displacements increments in IGA DoFs,

$$\begin{aligned} \frac{\partial ^2 W}{(\partial {\textbf{u}}^\text {IGA})^2} \Delta {\textbf{u}}^\text {IGA} = -\frac{\partial W}{\partial {\textbf{u}}^\text {IGA}} \text { .} \end{aligned}$$
(15)

Remark 2

While the Kirchhoff–Love shell theory neglects transverse shear strains, membrane locking can still occur in cases of curved geometry. In our current implementation, we use the standard Gauss quadrature rule to perform numerical integration without including special treatment to avoid membrane locking. We have conducted numerical studies in our earlier work [44, Section 4] to assess the accuracy and convergence of the framework for a series of benchmark problems. Solutions converge quickly to the reference solution with increased refinement, particularly evident for cubic NURBS surfaces, which are utilized in the numerical examples and applications in Sects. 5 and 6. Nevertheless, incorporating methods to alleviate potential membrane locking in isogeometric Kirchhoff–Love shells into our open-source framework will be an appealing research topic in future. We refer readers who are interested in techniques for removing membrane locking to [51,52,53,54,55,56,57,58].

3.2.2 Integration of penalty energy on patch intersections

For shell geometries that comprise multiple NURBS surfaces with non-matching intersections, the penalty energy is introduced to couple separate shell patches. In this section, we demonstrate the process to integrate the penalty energy (9) by using quadrature meshes. Again, taking two intersecting shells with one intersection as an illustrative example, the schematic configuration in parametric and physical spaces is shown in Fig. 2. We generate a geometrically 2D, topologically 1D interval mesh \(\Omega ^\text {M}\), which is named quadrature mesh, in the parametric space to represent the intersection curve for the penalty energy integration. The parametric coordinates of the surface–surface intersection with respect to two spline patches are denoted with \(\varvec{\xi }^\text {MA}\) and \(\varvec{\xi }^\text {MB}\). The overall algorithm to compute \(W^\text {AB}_\text {pen}\) on \(\Omega ^\text {M}\) are outlined as follows:

  1. 1.

    Define function spaces \({\mathcal {V}}^\text {0M}\) and \({\mathcal {V}}^\text {1M}\) on \(\Omega ^\text {M}\) with linear FE basis functions to create displacements, control point functions, and their first derivatives.

  2. 2.

    Move quadrature mesh \(\Omega ^\text {M}\) to parametric coordinate \(\varvec{\xi }^\text {MA}\) to generate transfer matrices between function spaces of shell patch \({\mathcal {S}}^\text {A}\) and quadrature mesh \(\Omega ^\text {M}\), where the configuration is shown in the upper left part of Fig. 2. The following transfer matrices are created:

    1. (a)

      \({\textbf{T}}^\text {0MA}: {\mathcal {V}}^\text {A,FE} \rightarrow {\mathcal {V}}^\text {0M}\), which interpolates functions from \({\mathcal {V}}^\text {A,FE}\) to \({\mathcal {V}}^\text {0M}\). Each entry is defined as

      $$\begin{aligned} {\textbf{T}}_{ij}^\text {0MA} = {\textbf{N}}_i^\text {A,FE}(\varvec{\xi }^\text {MA}_j) \text { ,} \end{aligned}$$
      (16)

      where \({\textbf{N}}^{\text {A,FE}}_i\) is the ith basis function in \({\mathcal {V}}^\text {A,FE}\), and \(\varvec{\xi }^\text {MA}_j\) is the jth coordinate of \(\Omega ^\text {M}\).

    2. (b)

      \({\textbf{T}}^\text {1MA}: {\mathcal {V}}^\text {A,FE} \rightarrow {\mathcal {V}}^\text {1M}\), which interpolates the first derivative of functions from \({\mathcal {V}}^\text {A,FE}\) to \({\mathcal {V}}^\text {1M}\). \({\textbf{T}}^\text {1MA}\) is defined as

      $$\begin{aligned} {\textbf{T}}^\text {1MA}_{ij} = {\textbf{N}}_{i,\,\varvec{\xi }}^\text {A,FE}(\varvec{\xi }^\text {MA}_j) \text { ,} \end{aligned}$$
      (17)

      where \({\textbf{N}}^{\text {A,FE}}_{i,\,\varvec{\xi }}\) is the parametric derivative of ith basis function in \({\mathcal {V}}^\text {A,FE}\).

  3. 3.

    Compute displacement \({\textbf{u}}^\text {0MA}\), geometric mapping \({\textbf{P}}^\text {0MA}\), and their first derivatives \({\textbf{u}}^\text {1MA}, {\textbf{P}}^\text {1MA}\) from parametric domain of \({\mathcal {S}}^\text {A}\) to \(\Omega ^\text {M}\) using transfer matrices generated from last step,

    $$\begin{aligned} {\textbf{u}}^{\gamma \text {MA}}&= {\textbf{T}}^{\gamma \text {MA}} {\textbf{u}}^\text {A,FE} \quad \text { and } \nonumber \\ {\textbf{P}}^{\gamma \text {MA}}&= {\textbf{T}}^{\gamma \text {MA}} {\textbf{P}}^\text {A,FE} \quad \text { for } \gamma \in \{0,1\} \text { .} \end{aligned}$$
    (18)
  4. 4.

    Substitute interpolated quantities from previous step into (1)–(3) to obtain basis vectors on \(\Omega ^{\text {M}}\) before and after deformation: \({\textbf{A}}_i^\text {MA}\) and \({\textbf{a}}_i^\text {MA}\) for \(i \in \{1,2,3\}\).

  5. 5.

    Use (8) to compute conormal vectors: \({\textbf{A}}_n^\text {MA}\) and \({\textbf{a}}_n^\text {MA}\).

  6. 6.

    Compute physical element size \(h_X^{A}\) of \({\mathcal {S}}^\text {A}\), then interpolate it to \(\Omega ^\text {M}\) to obtain \(h_X^\text {MA}\).

  7. 7.

    Move quadrature mesh \(\Omega ^\text {M}\) to parametric coordinate \(\varvec{\xi }^\text {MB}\), which is depicted in the lower left configuration in Fig. 2. Then create transfer matrices \({\textbf{T}}^\text {0MB}\) and \({\textbf{T}}^\text {1MB}\).

  8. 8.

    Repeat steps 3, 4 and 6 to obtain corresponding displacement \({\textbf{u}}^\text {0MB}\), normal vectors \({\textbf{A}}^\text {BM}_3\) and \({\textbf{a}}^\text {BM}_3\), and element size \(h^\text {MB}_X\) from \({\mathcal {S}}^\text {B}\).

  9. 9.

    Calculate penalty parameters based on (10) using averaged physical element size \(h^\text {M}_X = \frac{1}{2}(h^\text {MA}_X + h^\text {MB}_X)\) for each node on \(\Omega ^\text {M}\),

    $$\begin{aligned} \alpha _\text {d}^\text {M} = \frac{\alpha E t^\text {M}}{h^\text {M}_X (1-\nu ^2)} \quad \text {and} \quad \alpha _\text {r}^\text {M} = \frac{\alpha E (t^\text {M})^3}{12 h^\text {M}_X (1-\nu ^2)} \text { .} \end{aligned}$$
    (19)

Remark 3

In this section, we assume \({\mathcal {S}}^\text {A}\) and \({\mathcal {S}}^\text {B}\) have the same thickness \(t^\text {M} = t^\text {A} = t^\text {B}\) in penalty parameters, same for Young’s modulus and Poisson ratio. For the thickness optimization problem discussed in Sect. 4.3, shell patches may have different thicknesses, or each shell patch has variable thickness distribution. In these scenarios, we use an identical method to the element size calculation to interpolate thickness from shell patches to quadrature mesh and take the average, i.e., \(t^{M} = \frac{1}{2}(t^\text {MA} + t^\text {MB})\).

  1. 10.

    Based on (9), we can integrate the penalty energy on \(\Omega ^\text {M}\) with quantities computed from previous steps,

    $$\begin{aligned} \begin{aligned} W^\text {AB}_\text {pen}&= \frac{1}{2}\int _{\Omega ^\text {M}} \biggl (\alpha _\text {d}^\text {M} \Vert {\textbf{u}}^\text {0MA} - {\textbf{u}}^\text {0MB} \Vert ^2 \\&\quad + \alpha _\text {r}^\text {M} \Bigr (({\textbf{a}}^\text {MA}_3 \cdot {\textbf{a}}^\text {MB}_3 - {\textbf{A}}^\text {MA}_3 \cdot {\textbf{A}}^\text {MB}_3)^2 \\&\quad + ({\textbf{a}}^\text {MA}_n \cdot {\textbf{a}}^\text {MB}_3 - {\textbf{A}}^\text {MA}_n \cdot {\textbf{A}}^\text {MB}_3)^2 \Bigr ) \biggr )\,J^\text {M} \,\mathrm{d}\Omega \text { ,} \end{aligned} \end{aligned}$$
    (20)

    where \(J^\text {M}\) is the associated line Jacobian mapping \(\Omega ^\text {M}\) to \({\mathcal {L}}\).

Fig. 2
figure 2

A pair of shell patches share one surface–surface intersection in the physical space, associated parametric surfaces are illustrated. A topologically 1D, geometrically 2D quadrature mesh (red interval mesh) is created in the parametric space and moved to parametric locations of the intersection with respect to two shells to create transfer matrices. Geometric and displacement quantities of shell patches are interpolated to the quadrature mesh, where the penalty energy is integrated

3.2.3 Assembly of non-matching system

With the coupled formulations for intersecting shells, we can perform IGA on the non-matching shells directly. For a pair of shells with one intersection illustrated in Fig. 2, the total virtual energy in equilibrium is given by

$$\begin{aligned} \delta W_\text {t} = \delta W^\text {A} + \delta W^\text {B} + \delta W_\text {pen}^\text {AB} = 0 \text { ,} \end{aligned}$$
(21)

which can be solved by the Newton–Raphson method. We can solve the linearized problem of (21) to obtain the full displacement \({\textbf{u}}^\text {IGA} = \begin{bmatrix} {\textbf{u}}^\text {A,IGA}&{\textbf{u}}^\text {B,IGA} \end{bmatrix}^\mathrm{{T}}\) with one iteration,

$$\begin{aligned} \begin{bmatrix} \frac{\partial ^2 W_\text {t}}{(\partial \mathbf {u^\text {A,IGA}})^2} &{} \frac{\partial ^2 W_\text {t}}{\partial \mathbf {u^\text {A,IGA}} \partial \mathbf {u^\text {B,IGA}}} \\ \frac{\partial ^2 W_\text {t}}{\partial \mathbf {u^\text {B,IGA}} \partial \mathbf {u^\text {A,IGA}}} &{} \frac{\partial ^2 W_\text {t}}{(\partial \mathbf {u^\text {B,IGA}})^2} \end{bmatrix} \begin{bmatrix} {\textbf{u}}^\text {A,IGA} \\ {\textbf{u}}^\text {B,IGA} \end{bmatrix} = -\begin{bmatrix} \frac{\partial W_\text {t}}{\partial {\textbf{u}}^\text {A,IGA}} \\ \frac{\partial W_\text {t}}{\partial {\textbf{u}}^\text {B,IGA}} \end{bmatrix} \text { .} \end{aligned}$$
(22)

Formulations for the derivative of \(W_\text {t}\) can be obtained by means of the chain rule. Using \({\mathcal {S}}^\text {A}\) for demonstration, the derivative of \(W_\text {t}\) with respect to \({\textbf{u}}^\text {A,IGA}\) is given by

$$\begin{aligned} \frac{\partial W_\text {t}}{\partial {\textbf{u}}^\text {A,IGA}} = ({\textbf{M}}^{\text {A}})^\mathrm{{T}} \left( \frac{\partial W^\text {A}}{\partial {\textbf{u}}^\text {A,FE}} + \sum _{\gamma =0}^1 ({\textbf{T}}^{\gamma \text {MA}})^\mathrm{{T}} \frac{\partial W^\text {AB}_\text {pen}}{\partial {\textbf{u}}^{\gamma \text {MA}}} \right) \text { .} \end{aligned}$$
(23)

The second derivatives of W in the left-hand side (LHS) of (22) can be computed with the following formulations. Taking \({\mathcal {S}}^\text {A}\) for illustration, the diagonal block reads as

$$\begin{aligned} \begin{aligned}&\frac{\partial ^2 W_\text {t}}{(\partial \mathbf {u^\text {A,IGA}})^2} = ({\textbf{M}}^{\text {A}})^\mathrm{{T}} \\&\quad \left( \frac{\partial ^2 W^\text {A}}{(\partial {\textbf{u}}^\text {A,FE})^2} + \sum _{\delta =0}^1 \sum _{\gamma =0}^1 ({\textbf{T}}^{\gamma \text {MA}})^\mathrm{{T}}\frac{\partial ^2 W^\text {AB}_\text {pen}}{\partial {\textbf{u}}^{\gamma \text {MA}} \partial {\textbf{u}}^{\delta \text {MA}}} {\textbf{T}}^{\delta \text {MA}} \right) \, {\textbf{M}}^\text {A} \text { ,} \end{aligned} \end{aligned}$$
(24)

and the off-diagonal block can be expressed as

$$\begin{aligned} \frac{\partial ^2 W_\text {t}}{\partial \mathbf {u^\text {A,IGA}} \partial \mathbf {u^\text {B,IGA}}}&= ({\textbf{M}}^{\text {A}})^\mathrm{{T}} \nonumber \\&\quad \left( \sum _{\delta =0}^1 \sum _{\gamma =0}^1 ({\textbf{T}}^{\gamma \text {MA}})^\mathrm{{T}}\frac{\partial ^2 W^\text {AB}_\text {pen}}{\partial {\textbf{u}}^{\gamma \text {MA}} \partial {\textbf{u}}^{\delta \text {MB}}} {\textbf{T}}^{\delta \text {MB}} \right) \, {\textbf{M}}^\text {B} \text { .} \end{aligned}$$
(25)

In (23)–(25), expressions of derivatives of \(W^\text {A}\) can be found in [16, Section 3], and [24, Section 2.2] spells out derivatives of \(W_\text {pen}^\text {AB}\). These derivatives are computed automatically by the implementation discussed in Sect. 4.4 using computer algebra and code generation capabilities in FEniCS. Substituting (23)–(25) into (22), one can solve the displacements in IGA DoFs for \({\mathcal {S}}^\text {A}\) and \({\mathcal {S}}^\text {B}\).

Remark 4

For clarity, we only demonstrate the non-matching system with two shell patches. However, (22) can be readily extended to shell geometries consisting of more than two surfaces. We refer interested readers to [44, Section 3.2] for the assembly of shell structures with m patches and arbitrary intersections.

4 FFD-based design optimization

CAD geometries of Kirchhoff–Love shells can be used for analysis without finite element mesh generation by employing formulations from Sect. 3. This provides attractive features for shape optimization of shell structures, where the discretization of shell patches stays unaltered during shape evolution. The updated geometry in optimization iterations stays consistent with the analysis model. As a result, this approach minimizes the effort required for geometry processing while simultaneously enhancing accuracy.

In the context of shape optimization for non-matching shell structures, it is crucial to ensure that updated shell patches remain properly connected. Failure to maintain this connectivity can result in separation or self-penetration of shell patches during the optimization iteration. Such issues would lead to false analysis and yield unrealistic optimal shapes. To tackle this challenge, we adopt the FFD-based [2] technique combined with Lagrange extraction to update shell geometry and demonstrate the workflow in Sect. 4.1. A comparable concept can be applied to thickness optimization to ensure continuous thickness distribution at the surface–surface intersections if needed. Sensitivities for both shape and thickness optimization are given in the subsequent sections.

4.1 Non-matching shells update through FFD block

We use a cylindrical roof consisting of four non-matching shell patches that are shown in the upper-left part of Fig. 3 as an example to demonstrate the FFD-based shape optimization approach. Note that this approach can be applied to shell structures with an arbitrary number of patches.

Fig. 3
figure 3

Workflow of FFD-based shape optimization for non-matching shell structures. A cylindrical roof consisting of four non-matching NURBS patches is first immersed in a trivariate B-spline block. We update the control points of the FFD block to deform the shape of the non-matching cylindrical roof. Control nets of the NURBS surfaces are indicated with red color, and black is used for the control net of the FFD block

4.1.1 Approximating shell patches with extraction

For the initial CAD geometry consisting of m Kirchhoff–Love shell patches, define a set of NURBS surface functions \(\{{\textbf{S}}^\text {A}(\varvec{\xi }), {\textbf{S}}^\text {B}(\varvec{\xi }), \ldots , {\textbf{S}}^{\text {I}^m}(\varvec{\xi }) \}\), and the I-th shell patch \({\textbf{S}}^\text {I}(\varvec{\xi })\) is expressed as

$$\begin{aligned} {\textbf{S}}^\text {I}(\varvec{\xi }) = {\textbf{N}}^{\text {I,IGA}}(\varvec{\xi }) {\textbf{P}}^{\text {I,IGA}} \text { ,} \end{aligned}$$
(26)

where \({\textbf{N}}^{\text {I,IGA}}(\varvec{\xi })\) are the spline basis functions of degree \(p_\text {sh}\) in \({\mathcal {V}}^{\text {I,IGA}}\). We omit degree \(p_\text {sh}\) in the notation for clarity. \({\textbf{P}}^{\text {I,IGA}}\) are the NURBS control points for surface function \({\textbf{S}}^\text {I}\).

Using the extraction concept discussed in Sect. 3.2.1, NURBS surface function \({\textbf{S}}^\text {I}(\varvec{\xi })\) can be represented with Lagrange polynomials as well,

$$\begin{aligned} {\textbf{S}}^\text {I}(\varvec{\xi }) = {\textbf{N}}^{\text {I,FE}}(\varvec{\xi }) {\textbf{P}}^{\text {I,FE}} \text { ,} \end{aligned}$$
(27)

where \({\textbf{N}}^{\text {I,FE}}(\varvec{\xi })\) are basis functions in the finite element function space \({\mathcal {V}}^{\text {I,FE}}_\text {s}\) with nodal interpolatory property, and \({\textbf{P}}^{\text {I,FE}}\) are Lagrange control points, or nodal values of \({\textbf{S}}^\text {I}\). Plugging nodal coordinate \(\varvec{\xi }^{\text {I,FE}}\) of \({\mathcal {V}}^{\text {I,FE}}_\text {s}\) into (27), coordinate of the NURBS surface \({\textbf{S}}^\text {I}\) is represented with nodal values in the discrete setting,

$$\begin{aligned} {\textbf{S}}^\text {I}(\varvec{\xi }^{\text {I,FE}}) = {\textbf{N}}^{\text {I,FE}}(\varvec{\xi }^{\text {I,FE}}) {\textbf{P}}^{\text {I,FE}} = {\textbf{P}}^{\text {I,FE}} \text { .} \end{aligned}$$
(28)

Based on (11), Lagrange control points can be obtained through the extraction matrix and NURBS control points. We have the following relation,

$$\begin{aligned} {\textbf{S}}^\text {I}(\varvec{\xi }^{\text {I,FE}}) = {\textbf{P}}^{\text {I,FE}} = {\textbf{M}}^\text {I} {\textbf{P}}^{\text {I,IGA}} \text { .} \end{aligned}$$
(29)

4.1.2 Relating FFD block control points and shell geometry

The first step of Fig. 3 illustrates the initial configuration of a collection of intersecting non-matching shell patches S, where red control nets are displayed. To enforce connectivity of the intersections during optimization, we immerse S in a trivariate B-spline block, which is referred to as an FFD block, and use control points of the FFD block as design variables. A schematic demonstration is shown in the second step of Fig. 3. The FFD B-spline block is defined as

$$\begin{aligned} {\textbf{V}}(\varvec{\theta }) = {\textbf{N}}_\text {FFD}(\varvec{\theta }) {\textbf{P}}_\text {FFD} \text { ,} \end{aligned}$$
(30)

where \(\varvec{\theta }\) is the parametric coordinate of the FFD block, \({\textbf{N}}_\text {FFD}(\varvec{\theta })\) are B-spline solid basis functions of degree \(p_\text {FFD}\) with knots vector, and \({\textbf{P}}_\text {FFD}\) are B-spline block control points.

To simplify formulation and implementation, we use an identity mapping for the FFD block B-spline block, so that the parametric coordinate coincides with the physical coordinate,

$$\begin{aligned} {\textbf{V}}(\varvec{\theta }) = {\textbf{N}}_\text {FFD}(\varvec{\theta }) {\textbf{P}}_\text {FFD} = \varvec{\theta } \text { .} \end{aligned}$$
(31)

Substituting (29) into (31), NURBS surfaces of the non-matching shells can be expressed using the FFD block basis functions and control points,

$$\begin{aligned} {\textbf{V}}\left( {\textbf{S}}^\text {I}(\varvec{\xi })\right) = {\textbf{N}}_\text {FFD}\left( {\textbf{S}}^\text {I}(\varvec{\xi })\right) {\textbf{P}}_\text {FFD} = {\textbf{S}}^\text {I}(\varvec{\xi }) \text { .} \end{aligned}$$
(32)

In the continuous context of (32), shell patches will not separate in the final configuration as long as they are interconnected in the initial geometry. As the shape update of the FFD block is continuous, there is no relative movement between patches within the FFD block. In the discrete space, we can relate the NURBS control points of the shell patches to the control points of the FFD block,

$$\begin{aligned} {\textbf{N}}_\text {FFD}\left( {\textbf{S}}^\text {I}(\varvec{\xi }^{\text {I,FE}})\right) {\textbf{P}}_\text {FFD} = {\textbf{N}}_\text {FFD}({\textbf{P}}^{\text {I,FE}}) {\textbf{P}}_\text {FFD} = {\textbf{M}}^\text {I} {\textbf{P}}^{\text {I,IGA}} \text { .} \end{aligned}$$
(33)

The control points of the NURBS surface \({\textbf{P}}^{\text {I,IGA}}\) of shell patches can be updated through the control points of the FFD block \({\textbf{P}}_\text {FFD}\). Let \({\textbf{N}}_\text {FFD}(\mathring{{\textbf{P}}}^{\text {I,FE}}){:}{=}{\textbf{A}}_{\text {FFD}}^{\text {I}}\), where \(\mathring{{\textbf{P}}}^{\text {I,FE}}\) denotes Lagrange control points of spline patch \(\text {I}\) in the baseline configuration. Then \({\textbf{P}}^{\text {I,IGA}}\) can be computed as

$$\begin{aligned} {\textbf{P}}^{\text {I,IGA}} = \left( \left( ({\textbf{M}}^{\text {I}})^\mathrm{{T}}{\textbf{M}}^\text {I} \right) ^{-1}({\textbf{M}}^{\text {I}})^\mathrm{{T}} {\textbf{A}}_{\text {FFD}}^{\text {I}} \right) {\textbf{P}}_{\text {FFD}} \text { .} \end{aligned}$$
(34)

It is noted that we need to solve the system using Moore–Penrose pseudo inverse due to the non-square nature of the extraction matrix \({\textbf{M}}^\text {I}\), which has dimensions of \(n^\text {I,FE}\times n^\text {I,IGA}\). For the extraction matrix, we have \(n^\text {I,FE} > n^\text {I,IGA}\), which means that we are solving an overdetermined system. Therefore, \({\textbf{P}}^{\text {I,IGA}}\) is considered as a least square fit in (34) rather than an exact solution. The shape update strategy using FFD block is illustrated in the third step in Fig. 3, and the resulting shell patches with control net are depicted in the fourth step. A comparison between the initial non-matching cylindrical roof and updated NURBS surfaces is shown in Fig. 4, where the surface–surface intersections keep overlapping within tolerance in the updated configuration.

Fig. 4
figure 4

a Initial configuration of the cylindrical roof geometry consisting of four non-matching NURBS patches. b Updated NURBS surfaces using FFD block

The procedures to update control points of non-matching shells with m patches are summarized as follows:

  1. 1.

    In the preprocessing step, generate sparse matrices of evaluation of FFD block B-spline basis functions at shells’ Lagrange control points in the initial configuration \(\left\{ {\textbf{A}}_{\text {FFD}}^{\text {I}}\right\}\) and Lagrange extraction matrices \(\left\{ {\textbf{M}}^\text {I}\right\} \text {, for I} \in \{\text {A},\text {B},\ldots ,\text {I}^m\}\).

  2. 2.

    At optimization iteration step \(i^\text {opt}\), obtain updated control points of the FFD block \(\left( {\textbf{P}}_{\text {FFD}} \right) ^{i^\text {opt}}\). Compute updated Lagrange control points \(\left( {\textbf{P}}^{\text {I,FE}} \right) ^{i^\text {opt}}\) for all shell patches,

    $$\begin{aligned} {\textbf{A}}_{\text {FFD}}^{\text {I}} \left( {\textbf{P}}_{\text {FFD}}\right) ^{i^\text {opt}} = \left( {\textbf{P}}^{\text {I,FE}} \right) ^{i^\text {opt}} \text { .} \end{aligned}$$
    (35)
  3. 3.

    Solve NURBS control points \(\left( {\textbf{P}}^{\text {I,IGA}} \right) ^{i^\text {opt}}\) at step \(i^\text {opt}\) through Moore–Penrose pseudo inverse,

    $$\begin{aligned} {\textbf{M}}^\text {I} \left( {\textbf{P}}^{\text {I,IGA}} \right) ^{i^\text {opt}} = \left( {\textbf{P}}^{\text {I,FE}} \right) ^{i^\text {opt}} \text { .} \end{aligned}$$
    (36)
  4. 4.

    Perform IGA with updated shell geometry, evaluate objective function and derivatives if needed, then proceed with optimization iteration.

Though the control points of the shell patches are computed in the least square fit sense, the updated geometry can still retain the intersection with sufficient discretization. A sliced view of the intersection, in accompaniment with NURBS and Lagrange control points, between the right two spline patches \({\mathcal {S}}^\text {C}\) and \({\mathcal {S}}^\text {D}\) in the first step of Fig. 3 is shown in Fig. 5, where we use coarser discretizations to make the comparison clearer. In the updated configuration, the two cubic intersecting edges are still overlapping even with only 5 and 6 NURBS control points.

Fig. 5
figure 5

Sliced view of the intersecting edges between shell patches \({\mathcal {S}}^\text {C}\) and \({\mathcal {S}}^\text {D}\) of the cylindrical roof. The two edges remain overlapping in the updated configuration

Remark 5

Since there is no relative movement between intersecting spline patches within the FFD block, which can be achieved with adequate control points in the discrete context, parametric coordinates of surface–surface intersections remain unchanged during shape updates. Therefore, transfer matrices introduced in Sect. 3.2.2 can be reused to interpolate data from spline patches to quadrature meshes when integrating penalty energies in the optimization iteration. These matrices only need to be generated once at the preprocessing stage.

4.2 Sensitivities for shape optimization

Utilizing the capabilities of direct analysis for non-matching isogeometric shells and incorporating FFD-based shape updates, we are able to conduct shape optimization for the shell structures in a seamless manner. The problem that optimizes the shape of non-matching shells can be formulated as follows,

$$\begin{aligned} \begin{aligned} \text {minimize} \quad&f^\text {obj}\left( {\textbf{P}}_{\text {FFD}}\right) \\ \text {subject to} \quad&g^\text {con}_{i_g}\left( {\textbf{P}}_{\text {FFD}}\right) \le {0} \text { , for } i_g \in \{1,2,\ldots ,n_g\} \\&h^\text {con}_{i_h}\left( {\textbf{P}}_{\text {FFD}}\right) = {0} \text { , for } i_h \in \{1,2,\ldots ,n_h\} \\&{\textbf{P}}_{\text {FFD}l} \le {\textbf{P}}_{\text {FFD}} \le {\textbf{P}}_{\text {FFD}u} \text { ,} \end{aligned} \end{aligned}$$
(37)

where control points of the FFD block \({\textbf{P}}_{\text {FFD}}\) are design variables, \(f^\text {obj}\) is the objective function, \(g^\text {con}_{i_g}\) are inequality constraints, and \(h^\text {con}_{i_h}\) are equality constraints. \({\textbf{P}}_{\text {FFD}l}\) and \({\textbf{P}}_{\text {FFD}u}\) are lower and upper limits for the design variables.

To perform gradient-based design optimization, we formulate total derivatives of the objective function with respect to design variables as

$$\begin{aligned} \frac{\mathrm{d} f^\text {obj}}{\mathrm{d} {\textbf{P}}_{\text {FFD}}} = \left( \frac{\partial f^\text {obj}}{\partial {\textbf{P}}_{}^{\text {IGA}}} + \frac{\partial f^\text {obj}}{\partial {\textbf{u}}^\text {IGA}} \frac{\mathrm{d} {\textbf{u}}^\text {IGA}}{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}} \right) \frac{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}{\mathrm{d} {\textbf{P}}_{\text {FFD}}} \text { ,} \end{aligned}$$
(38)

where \({\textbf{P}}_{}^{\text {IGA}} = \begin{bmatrix} {\textbf{P}}_{}^{\text {A,IGA}}&{\textbf{P}}_{}^{\text {B,IGA}}&\ldots&{\textbf{P}}_{}^{\text {I}^m\text {,IGA}} \end{bmatrix}^\mathrm{{T}}\) is the full vector of NURBS control points, and similarly, \({\textbf{u}}^{\text {IGA}} = \begin{bmatrix} {\textbf{u}}^{\text {A,IGA}}&{\textbf{u}}^{\text {B,IGA}}&\ldots&{\textbf{u}}^{\text {I}^m\text {,IGA}} \end{bmatrix}^\mathrm{{T}}\) is the full vector of shell displacements in IGA DoFs.

Partial derivatives \(\frac{\partial f^\text {obj}}{\partial {\textbf{P}}_{}^{\text {IGA}}}\) and \(\frac{\partial f^\text {obj}}{\partial {\textbf{u}}^\text {IGA}}\) in (38) can be computed and depend on the objective function combined with extraction matrices,

$$\begin{aligned} \frac{\partial f^\text {obj}}{\partial {\textbf{P}}_{}^{\text {IGA}}} = {\textbf{M}}^\mathrm{{T}} \frac{\partial f^\text {obj}}{\partial {\textbf{P}}_{}^{\text {FE}}} \quad \text { and } \quad \frac{\partial f^\text {obj}}{\partial {\textbf{u}}^{\text {IGA}}} = {\textbf{M}}^\mathrm{{T}} \frac{\partial f^\text {obj}}{\partial {\textbf{u}}^{\text {FE}}} \text { ,} \end{aligned}$$
(39)

where \({\textbf{P}}_{}^{\text {FE}} = \begin{bmatrix} {\textbf{P}}_{}^{\text {A,FE}}&{\textbf{P}}_{}^{\text {B,FE}}&\ldots&{\textbf{P}}_{}^{\text {I}^m\text {,FE}} \end{bmatrix}^\mathrm{{T}}\), \({\textbf{u}}^{\text {FE}} = \begin{bmatrix} {\textbf{u}}^{\text {A,FE}}&{\textbf{u}}^{\text {B,FE}}&\ldots&{\textbf{u}}^{\text {I}^m\text {,FE}} \end{bmatrix}^\mathrm{{T}}\). \({\textbf{M}} = \text {diag}({\textbf{M}}^\text {A}, {\textbf{M}}^\text {B},\ldots ,{\textbf{M}}^{\text {I}^m})\) is a diagonal block matrix for global extraction. Calculation of partial derivatives in (39) is automated using FEniCS. Formulation for total derivative \(\frac{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}{\mathrm{d} {\textbf{P}}_{\text {FFD}}}\) is introduced in (34). As for total derivative \(\frac{\mathrm{d} {\textbf{u}}^\text {IGA}}{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}\), we have the implicit relation between \({\textbf{P}}_{}^{\text {IGA}}\) and \({\textbf{u}}^\text {IGA}\),

$$\begin{aligned} {\textbf{r}}_\text {t} = {\textbf{R}}_\text {t}({\textbf{P}}_{}^{\text {IGA}}, {\textbf{u}}^\text {IGA}) = \frac{\partial W_\text {t}({\textbf{u}}^\text {IGA}, {\textbf{P}}_{}^{\text {IGA}})}{\partial {\textbf{u}}^\text {IGA}} = {\textbf{0}} \text { ,} \end{aligned}$$
(40)

where \(W_\text {t}\) is the total energy of the non-matching shells defined in (21). Once an updated \({\textbf{P}}_{}^{\text {IGA}}\) is obtained, the shell displacements need to be solved using (21) until the residual vector \({\textbf{r}}_\text {t}\) reaches a tolerance. Thus, \({\textbf{r}}_\text {t}\) is supposed to remain as \({\textbf{0}}\) despite the change of \({\textbf{P}}_{}^{\text {IGA}}\), and we have the following derivative

$$\begin{aligned} \frac{\mathrm{d} {\textbf{r}}_\text {t}}{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}} = \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{P}}_{}^{\text {IGA}}} + \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{u}}^\text {IGA}} \frac{\mathrm{d} {\textbf{u}}^\text {IGA}}{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}= {\textbf{0}} \text { ,} \end{aligned}$$
(41)

and the total derivative \(\frac{\mathrm{d} {\textbf{u}}^\text {IGA}}{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}\) in (38) is given by

$$\begin{aligned} \frac{\mathrm{d} {\textbf{u}}^\text {IGA}}{\mathrm{d}{\textbf{P}}_{}^{\text {IGA}}} = - \left( \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{u}}^\text {IGA}} \right) ^{-1} \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{P}}_{}^{\text {IGA}}} \text { .} \end{aligned}$$
(42)

Partial derivative \(\frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{u}}^\text {IGA}}\) is equivalent to \(\frac{\partial ^2 W_\text {t}}{\partial ({\textbf{u}}^\text {IGA} )^2}\) and is the stiffness matrix defined in (22). Analogously, we use a pair of shell patches to illustrate the formulation of partial derivative \(\frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{P}}_{}^{\text {IGA}}}\),

$$\begin{aligned} \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{P}}_{}^{\text {IGA}}} = \begin{bmatrix} \frac{\partial ^2 W_\text {t}}{\partial {\textbf{u}}^\text {A,IGA} \partial {\textbf{P}}_{}^{\text {A,IGA}}} &{} \frac{\partial ^2 W_\text {t}}{\partial {\textbf{u}}^\text {A,IGA} \partial {\textbf{P}}_{}^{\text {B,IGA}}} \\ \frac{\partial ^2 W_\text {t}}{\partial {\textbf{u}}^\text {B,IGA} \partial {\textbf{P}}_{}^{\text {A,IGA}}} &{} \frac{\partial ^2 W_\text {t}}{\partial {\textbf{u}}^\text {B,IGA} \partial {\textbf{P}}_{}^{\text {B,IGA}}} \end{bmatrix} \text { .} \end{aligned}$$
(43)

Partial derivatives in (43) have identical expressions to (24) and (25).

Extend partial derivatives in (43) to shell structures with an arbitrary number of patches, and substitute \(\frac{\mathrm{d} {\textbf{u}}^\text {IGA}}{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}\) in (38) with (42), we can obtain the total derivative of the shape optimization

$$\begin{aligned} \frac{\mathrm{d} f^\text {obj}}{\mathrm{d} {\textbf{P}}_{\text {FFD}}} = \left( \frac{\partial f^\text {obj}}{\partial {\textbf{P}}_{}^{\text {IGA}}} - \frac{\partial f^\text {obj}}{\partial {\textbf{u}}^\text {IGA}} \left( \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{u}}^\text {IGA}} \right) ^{-1} \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{P}}_{}^{\text {IGA}}} \right) \frac{\mathrm{d} {\textbf{P}}_{}^{\text {IGA}}}{\mathrm{d} {\textbf{P}}_{\text {FFD}}} \text { .} \end{aligned}$$
(44)

4.3 Sensitivities for thickness optimization

The idea of FFD-based shape update can be applied to shell thickness optimization, where the shell thickness is treated as an extra field of the NURBS control points. We can use (34) to build the relation of the thickness between shell patches and FFD block,

$$\begin{aligned} {\textbf{t}}^{\text {I,IGA}} = \left( \left( ({\textbf{M}}_{\text {s}}^{\text {I}})^\mathrm{{T}}{\textbf{M}}_\text {s}^\text {I} \right) ^{-1}({\textbf{M}}_{\text {s}}^{\text {I}})^\mathrm{{T}} {\textbf{A}}_{\text {FFDs}}^{\text {I}} \right) {\textbf{t}}_{\text {FFD}} \text { ,} \end{aligned}$$
(45)

where \({\textbf{t}}_{}^{\text {I,IGA}}\) is the thickness for shell \(S^\text {I}\) in IGA DoFs, and \({\textbf{t}}_{\text {FFD}}\) is the corresponding thickness field of the FFD block. Subscript \(\text {s}\) in \({\textbf{M}}_{\text {s}}^{\text {I}}\) and \({\textbf{A}}_{\text {FFDs}}^{\text {I}}\) denotes matrices for scalar fields. Note that \({\textbf{t}}_{\text {FFD}}\) is not the actual thickness of the B-spline solid geometry, but an extra set of the control points on the FFD block to update the thickness of the non-matching shells. Accordingly, the identical shape update strategy Sect. 4.1.2 is applicable to thickness update. FFD-based thickness optimization also offers the benefit that shell thickness remains continuous on the surface–surface intersections.

Replacing control points of the FFD block in (37) with \({\textbf{t}}_{\text {FFD}}\), one can have the problem description of thickness optimization. Since both Kirchhoff–Love shell total work \(W^\text {A}\) and \(W^\text {B}\), and penalty energy \(W^\text {AB}_\text {pen}\) involve shell thickness, the total derivative and associated partial derivatives of the thickness optimization problem can be acquired by replacing \({\textbf{P}}_{\text {FFD}}\), \({\textbf{P}}_{}^{\text {FE}}\), \({\textbf{P}}_{}^{\text {IGA}}\) with \({\textbf{t}}_{\text {FFD}}\), \({\textbf{t}}_{}^{\text {FE}}\) and \({\textbf{t}}_{}^{\text {IGA}}\) in Eqs. (42)–(44), respectively. The total derivative of FFD-based thickness optimization reads as

$$\begin{aligned} \frac{\mathrm{d} f^\text {obj}}{\mathrm{d} {\textbf{t}}_{\text {FFD}}} = \left( \frac{\partial f^\text {obj}}{\partial {\textbf{t}}_{}^{\text {IGA}}} - \frac{\partial f^\text {obj}}{\partial {\textbf{u}}^\text {IGA}} \left( \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{u}}^\text {IGA}} \right) ^{-1} \frac{\partial {\textbf{R}}_\text {t}}{\partial {\textbf{t}}_{}^{\text {IGA}}} \right) \frac{\mathrm{d} {\textbf{t}}_{}^{\text {IGA}}}{\mathrm{d} {\textbf{t}}_{\text {FFD}}} \text { .} \end{aligned}$$
(46)

In some applications, one may choose to have a constant thickness for each shell patch. This can be easily achieved within the current framework by relating the shell thickness in IGA DoFs to one scalar value \(t^\text {I,const}\) as

$$\begin{aligned} {\textbf{t}}^{\text {I,IGA}} = {\textbf{c}}^\text {I} t^\text {I,const} \text { ,} \end{aligned}$$
(47)

where \({\textbf{c}}^\text {I} = \begin{bmatrix} 1&1&\ldots&1 \end{bmatrix}^\mathrm{{T}}\) is a unit column vector contains \(n^{\text {I,IGA}}\) entries. The total derivative for piecewise constant thickness optimization can be obtained by replacing \(\frac{\mathrm{d} {\textbf{t}}_{}^{\text {IGA}}}{\mathrm{d} {\textbf{t}}_{\text {FFD}}}\) in (46) with the following derivative,

$$\begin{aligned} \frac{\mathrm{d} {\textbf{t}}_{}^{\text {IGA}}}{\mathrm{d} {\textbf{t}}^\text {const}} = \text {diag}({\textbf{c}}^\text {A}, {\textbf{c}}^\text {B}, \ldots , {\textbf{c}}^{\text {I}^m}) \text { .} \end{aligned}$$
(48)

The FFD block is not needed in piecewise constant only thickness optimization.

These two approaches can be combined together to achieve a more realistic design, where specific sections of the structure necessitate a continuous thickness distribution while constant thickness is better suited for other patches. In the implementation, shell patches can be separated into various groups. One group comprises the shell patches immersed within an FFD block allowing for a continuous thickness distribution. On the other hand, the shell patches not contained in an FFD block are assumed to have a constant thickness. Moreover, shell patches originating from different FFD blocks would exhibit discontinuous thickness at their intersections. Therefore, the combined thickness optimization approach provides more flexibility.

4.4 Implementation

This section introduces the open-source implementation for the proposed optimization method in Sects. 4.14.3. We employ the open-source Python library PENGoLINS [44] for IGA of non-matching shell structures. PENGoLINS utilizes functionalities in pythonOCC [59] to approximate patch intersections in CAD geometries. Additionally, it leverages advanced code generation in FEniCS [50] and extraction operators in tIGAr [49] to perform IGA. CAD models in IGES or STEP formats can be imported into PENGoLINS, making them directly available for IGA. The code generation capabilities and computer algebra in FEniCS allow us to obtain partial derivatives in (23)–(25), as well as (39) automatically. Integrating computed analytical derivatives with matrices \({\textbf{M}}^{} = \text {diag}({\textbf{M}}^{\text {A}},{\textbf{M}}^{\text {B}}, \ldots , {\textbf{M}}^{\text {I}^m})\) and \({\textbf{A}}_{\text {FFD}} = \text {diag}({\textbf{A}}_{\text {FFD}}^{\text {A}},{\textbf{A}}_{\text {FFD}}^{\text {B}}, \ldots , {\textbf{A}}_{\text {FFD}}^{\text {I}^m})\), we can calculate the total derivatives in (44) and (46) for shape and thickness optimization.

With the availability of automated derivatives, we use the open-source framework CSDL [60] for conducting gradient-based large-scale optimization. Each partial derivative computed from FEniCS, in combination with predefined matrices, is passed to a CSDL sub-model, which contains explicit or implicit operations. A system-level model is created to connect all sub-models to enable efficient and modularized design optimization. For the FFD-based shape optimization problem, which involves minimizing the internal energy of a non-matching shell structure, four essential sub-models are required and listed in Table 1. All the derivatives required for these models are defined in Sects. 3.2 and 4.2.

Table 1 Essential CSDL models for FFD-based shape optimization

The models listed in Table 1 and other constraint models are modularized in a Python library named GOLDFISH (Gradient-based Optimization, Large-scale Design Framework for Isogeometric SHells). This library provides users with the option to use predefined models or create custom models to build the system-level model for their specific optimization needs. The library also includes an open-source optimizer, SLSQP [61], which can be utilized for shape or thickness optimization of non-matching shells. For optimization problems involving a large number of design variables, the SNOPT [62] optimizer is available for faster convergence. Furthermore, we have integrated the analysis framework with another optimization library OpenMDAO [63], which is developed by NASA. This integration further enhances the accessibility of the GOLDFISH library, enabling users to benefit from the collective expertise of the OpenMDAO community. The GOLDFISH library is hosted on a GitHub repository [64] and open to the public.

5 Benchmark problems

A series of benchmark problems are considered to verify the effectiveness of the optimization method. Sections 5.15.3 illustrate that baseline non-matching shell structures with arbitrary intersections are able to accurately converge to the analytical optimum. Section 5.4 studies the capability and flexibility of the framework for thickness optimization.

5.1 Arch shape optimization

An arch fixed at two ends and subjected to a constant downward load per unit horizontal length is modeled by a Kirchhoff–Love shell theory. Detailed problem definitions can be found in [38, Section 8]. To test the effectiveness of FFD-based shape optimization for the non-matching shells approach, we model the arch using four NURBS patches with three intersections, where the arch geometry in the baseline configuration is shown in Fig. 6a. We immerse the arch geometry in a trivariate B-spline block in the initial configuration, as is illustrated in Fig. 6b. The analytical optimal solution is given by a quadratic parabola, where the ratio between the height of the arch and the horizontal distance of two fixed edges is 0.54779.

Fig. 6
figure 6

a Baseline geometry of a non-matching arch consisting of four NRUBS patches, three surface–surface intersections are indicated with red lines. b Initial configuration of the arch immersed in an FFD block, where black lines and dots denote the control net. The analytical optimal shape is plotted with a red curve

We use quadratic B-spline for the FFD block in all three directions, \(p_\text {FFD}=2\). The arch shell patches are described by cubic NURBS surfaces, \(p_\text {sh}=3\), with 1086 DoFs in total. This benchmark problem minimizes the internal energy of the shell structure, with vertical coordinates of the control points of the FFD block being the design variables. From the control net in Fig. 6b, it can be observed that there are 54 design variables. Two constraints are applied to this problem. The first constraint ensures that the lines in the FFD control net are parallel to the axial direction of the arch, keeping the arch devoid of tilting or twisting during the optimization process. The second constraint fixes the bottom layer of FFD control points so that the two edges of the arch remain in the initial position. We use the SLSQP optimizer with a tolerance of \(10^{-12}\) to perform the optimization, snapshots of the optimization iteration are demonstrated in Fig. 7.

Fig. 7
figure 7

Snapshots of non-matching arch shape optimization

The arch converges to the analytical optimum shape after 40 iterations. The shape of the FFD block in the final configuration is shown in Fig. 7. As anticipated, the optimized arch geometry is still contained in the FFD block. The height to base span ratio in this problem is measured as 0.54748, exhibiting a relative error of 0.057% compared to the exact value. Considering the coarse discretization of the arch geometry, the results are encouraging.

5.2 Tube shape optimization

A square tube in the baseline configuration is subjected to an internal constant pressure. The optimal shape is given by a cylindrical tube [38, Section 7]. We use four cubic NURBS surfaces to model one-quarter of the square tube, where the initial geometry is illustrated in Fig. 8a. The square tube geometry contains four non-matching intersections with 1035 DoFs in total, and symmetric boundary conditions are applied in the analysis. The geometry is immersed in a cubic B-spline block to perform FFD-based shape optimization, as shown in Fig. 8b, where the cross-section of the optimal shape is indicated by the red curve. In this example, the horizontal and vertical coordinates of the FFD control points are design variables, totaling 200 design variables. Similar constraints are employed in this problem as those in the arch shape optimization. Control points on the left and bottom layers are fixed, where the lines in the FFD control net that are parallel to the tube axis maintain their orientations.

Fig. 8
figure 8

a Baseline geometry of the square tube, a quarter of the tube is modeled using four non-matching B-spline patches with four intersections. b Initial configuration of the FFD block with control net. The optimal cross section is depicted by a red circle

The optimization problem converges successfully after 42 iterations using SLSQP optimizer with a tolerance of \(10^{-12}\), and snapshots are depicted in Fig. 9. As expected, the initial square tube converges to the cylindrical tube.

Fig. 9
figure 9

Iteration history for tube shape optimization under follower pressure

5.3 T-beam shape optimization

In this section, a T-beam is considered to test the method for shell structures with intersections in the middle. We model a T-beam using two NURBS patches which are shown in Fig. 10a. In the baseline design, the vertical patch in the T-beam is located at the three-quarter position, where the mismatched intersection is indicated with a red line.

Fig. 10
figure 10

a Baseline configuration of a T-beam whose vertical patch is at the three-quarter position of the horizontal patch. b The T-beam is placed in an FFD B-spline block. The optimal position of the vertical patch is depicted with red lines

In this benchmark problem, we aim to minimize the internal energy of the T-beam by updating the horizontal coordinates of shell patches’ control points. Subsequently, the T-beam is placed in a cubic FFD block, where the horizontal coordinates of the FFD block’s control points serve as design variables. The rear end of the T-beam is fixed. Given a downward distributed load, the optimal shape of the T-beam is expected to have a junction at the center of the horizontal patch under a constant volume constraint. The optimal position of the vertical patch is depicted in Fig. 10b with red lines. The right and left layers of the FFD block’s control points are fixed by employing equality constraints, and control points stay collinear in the axial direction. Using a tolerance of \(10^{-15}\), the SLSQP optimizer converges successfully after 16 iterations, and the optimization process is shown in Fig. 11.

Fig. 11
figure 11

Screenshots of T-beam shape optimization process

In Fig. 11, the T-beam converges to the optimal solution, indicating that the proposed method is effective for non-matching shell structures with intersections. A more complicated demonstration is presented in Sect. 6.2, where the geometry contains curved T-junctions.

5.4 Thickness optimization of a clamped plate

As stated in Sect. 4.3, the FFD-based optimization methodology can also be applied to thickness optimization. In the following section, we first demonstrate a piecewise constant thickness optimization for a clamped non-matching plate, in which the FFD block is not needed. Subsequently, we proceed to perform the variable thickness optimization for the same geometry.

5.4.1 Piecewise constant thickness optimization

For the thickness optimization example, a unit square plate composed of six cubic non-matching NURBS surfaces is considered. The geometry, which is shown in Fig. 12a, exhibits 5 intersections with a total of 1449 DoFs. We apply a clamped boundary condition on the left side and with a line force applied to the right side in the normal direction of the plate. All patches of the plate have an initial thickness of 0.01 m. Using the strategy introduced in Sect. 4.3, we perform piecewise constant thickness optimization for the clamped plate to minimize the internal energy under the constant volume constraint. This problem only has 6 design variables. In this and the following sections, the SNOPT optimizer is used for faster convergence. The optimal thickness is plotted in Fig. 12b.

Fig. 12
figure 12

a A unit square plate consisting of six non-matching patches, intersections are indicated with red lines. b Final plate thickness for piecewise constant thickness optimization

The observed optimal piecewise constant thickness in Fig. 12b shows material redistributes toward the clamped side, which provides enhanced support to the plate. The internal energy in the final configuration is 37.17% less than the baseline configuration.

5.4.2 Variable thickness optimization

We now perform variable thickness optimization for the non-matching plate. The plate is placed in a cubic B-spline block, which is shown in Fig. 13a. Besides the constant volume constraint, we only optimize the plate thickness in one direction that is perpendicular to the intersections.

Fig. 13
figure 13

a The non-matching plate is immersed in an FFD block. b Optimized thickness distribution using the FFD-based approach

With the FFD-based approach, the continuity of shell thickness is maintained at all intersections. Figure 13b depicts the converged solution, where a smooth thickness distribution is observed. The smooth thickness profile offers an improved design compared to the piecewise constant thickness approach, resulting in a 40.20% reduction of the initial internal energy. A comparison of optimization iteration of normalized internal energy between the two methods is illustrated in Fig. 14a. The FFD-based thickness optimization approach converges to a smaller internal energy.

Fig. 14
figure 14

a Optimization process of normalized internal energy for two approaches. b Cross-sectional view of piecewise constant thickness and variable thickness, and comparison with Euler–Bernoulli beam thickness optimization

To validate the proposed method, we compare the continuous thickness profile to an optimal thickness configuration of a cantilever beam [65]. The cantilever beam is modeled using the Euler–Bernoulli beam theory, where a point load is applied to the free end. Since the Kirchhoff–Love shell is an extension of the Euler–Bernoulli beam, both models are expected to yield identical thickness distributions. The normalized thickness profiles of these two models, along with the piecewise constant thickness profile, are plotted in Fig. 14b. A good agreement is observed between the variable thickness of the Kirchhoff–Love shell at the center line and the Euler–Bernoulli beam. Meanwhile, the cross-sectional view of the piecewise constant thickness shows a similar trend to the Euler–Bernoulli beam, albeit with discontinuities at the intersections.

We then investigate the effect of basis function order of continuity in the FFD block. Using the same knots vectors as illustrated in Fig. 13a, we increase the order of the B-spline basis functions from linear (\(C^0\)) to quartic (\(C^3\)) and compare the amounts of reduced internal energy relative to the baseline configuration. These data points are summarized in Table 2. The results presented in Table 2 indicate that an FFD block with quadratic B-spline basis functions can achieve a better optimal thickness distribution for the clamped plate. The internal energy with quadratic FFD block only exhibits 0.27% of relative difference compared to the quartic FFD block. Table 2 also suggests that elevating the order of continuity of the FFD block leads to better designs with lower internal energy, particularly when transitioning from linear to quadratic B-spline basis functions.

Table 2 Reduction of internal energy of the clamped plate for different degrees of the FFD block

The plate example demonstrates that both piecewise constant and variable thickness optimization can be conducted in the proposed framework. One can select desired thickness distribution, or a mixed approach of these two, demonstrated in Sect. 6, based on the physical conditions and problem requirements to obtain an optimal design.

6 Application to aircraft wings

Two aircraft wing design optimization problems are performed. Section 6.1 considers a Parallel Electric-Gas Architecture with Synergistic Utilization Scheme (PEGASUS) wing thickness optimization problem, and Sect. 6.2 demonstrates a simultaneous shape and thickness optimization for an Electric Vertical Takeoff and Landing (eVTOL) aircraft wing. Both applications illustrate that a design-analysis-optimization workflow can be achieved with the proposed framework.

6.1 PEGASUS wing thickness optimization

For the PEGASUS wing problem, we first verify the accuracy of the structural analysis using PENGoLINS for a shell structure with a large number of patches and intersections. Then two types of thickness design optimizations are performed in the following section.

6.1.1 Structural analysis of the PEGASUS wing

The PEGASUS wing CAD model is created using a customized geometry engine, an exploded view of the wing with IGA discretization is shown in Fig. 15. The CAD model consists of 90 NURBS patches, two outer skins (one lower skin and one upper skin) and two spars (one front spar and one rear spar) connecting two adjacent ribs. The NURBS surfaces in the PEGASUS wing are represented using cubic basis functions with maximal continuity, resulting in 19,572 DoFs in total. Additionally, 280 patch intersections are formed in the wing structure.

Fig. 15
figure 15

CAD geometry of the PEGASUS wing which is composed of 90 NURBS patches with 280 intersections, totaling 19,572 DoFs

The PEGASUS wing is made of material with Young’s modulus 69 GPa and Poisson’s ratio 0.35, and the wing span is 12.22 m. At the wing root, the chord is 1.52 m and the airfoil thickness is 0.37 m. A uniform initial thickness is 5 mm for all patches. Considering an aircraft take-off weight of 9000 kg, a distributed upward pressure with a magnitude of 132.5 N/m\(^2\) is determined by dividing half of the take-off weight by the surface area of the wing. Clamped boundary conditions are imposed at the wing root. Importing the PEGASUS wing geometry in IGES format to PENGoLINS, we perform structural analysis directly without finite element mesh generation. Given an analysis-suitable CAD file, the only required geometry preprocessing is to approximate surface–surface intersections, which is a much easier effort than finite element mesh generation and is automated in PENGoLINS using the functionality provided by pythonOCC. Figure 16a shows all the intersections presented in the PEGASUS wing, while the displacements computed by PENGoLINS are visualized in Fig. 16c. Figure 16e shows the distribution of von Mises stress on top surfaces \((\xi _3 = h/2)\) of the PEGASUS wing.

Fig. 16
figure 16

Structural analysis of the PEGASUS wing using PENGoLINS, and the resulting displacement magnitude and von Mises stress are compared with the corresponding outputs obtained from COMSOL

To validate the proposed non-matching coupling method for complex shell structures, we conduct a much refined FE analysis (utilizing quadratic triangular elements with 118644 DoFs) for the PEGASUS wing using COMSOL [66]. Figure 16b displays an extensively refined finite element mesh for the COMSOL FE analysis. Displacements solved in COMSOL and corresponding von Mises stress are depicted in Fig. 16d and f, respectively. Figures 16c and d indicate that the displacements obtained from PENGoLINS closely match the results from COMSOL. The maximum displacement magnitude in PENGoLINS is 0.06662 m, which has a relative difference of 0.15% compared to the corresponding value of 0.06672 m in COMSOL. This aligns well with the findings of a numerical experiment presented in [44, Section 5.3]. The von Mises stress distributions between PENGoLINS and COMSOL also exhibit good agreement as shown in Fig. 16e and f, where zoom-in views are included for the observation of von Mises stress at patch intersections. Note that while Reissner–Mindlin shell theory was employed in COMSOL, the mixed interpolation of tensorial components (MITC) [67] technique implemented in COMSOL has been carefully validated and is reliable for comparison with our solution based on Kirchhoff–Love shell theory in the limit of thin shells. The simulation results for the PEGASUS wing indicate that PENGoLINS provides good accuracy for complex shell structures, which is crucial for the subsequent design optimization.

6.1.2 Thickness optimization of the PEGASUS wing

Similar to the thickness optimization of the clamped plate discussed in Sect. 5.4, we apply the same methodology to the PEGASUS wing for piecewise constant thickness optimization. The same boundary conditions are employed throughout the optimization. In the piecewise constant thickness optimization case, a total of 90 design variables are included with lower and upper bounds of 1 mm and 100 mm, respectively. The initial thickness for all patches is taken as 5 mm. A constant volume constraint is employed in the optimization. The resulting shell thickness with minimum internal energy is depicted in Fig. 17. The shell patch with the maximum thickness is observed at the wing root in the outer skins, while the thickness decreases consistently along the span direction for both the outer skins and spars, following a pattern similar to that of the clamped plate. The thicknesses of the internal ribs and the wingtip are close to the lower bound since the bending moments are mainly carried by the lower and upper skins given the distributed upward load. Therefore, the majority of material is redistributed toward the clamped root of the outer skins. The optimized design in Fig. 17 gives an internal energy 38.17% less than that of the baseline configuration.

Fig. 17
figure 17

Optimization result of the PEGASUS wing with piecewise constant thickness

To achieve an improved design, we consider variable thickness in the outer skins and spars of the PEGASUS wing, while keeping the internal ribs with piecewise constant thickness. The configuration of the FFD blocks for variable thickness optimization is illustrated in Fig. 18a. Four FFD blocks with quadratic bases are created to allow for variation in thickness within a single spline patch while ensuring continuity at patch intersections, with a total of 402 design variables used for this problem. By minimizing the internal energy again, the optimal thickness distribution is obtained as shown in Fig. 18b. Both applications in this section use the SNOPT optimizer with a tolerance of \(10^{-4}\). In the optimized design, the outer skins of the PEGASUS wing at the clamped edge still have the largest thickness, where the thickness distribution is smooth at the surface–surface intersections within each FFD block. The decreasing thickness trend in outer skins and spars remains consistent with the optimal piecewise constant thickness case. Comparing the combined optimization strategy with the piecewise constant method, the maximum thickness in the former is higher while maintaining the same volume. Additionally, the internal energy is reduced by 44.71% compared to the baseline design. These observations indicate that the combined thickness optimization method demonstrates a more efficient utilization of material than the piecewise constant method.

Fig. 18
figure 18

a Configuration of the combined thickness optimization. Each group of outer skins and spars is placed in one FFD block, and the remaining internal ribs have a piecewise constant thickness. b Optimal thickness distribution of PEGASUS wing

6.2 Simultaneous optimization for eVTOL wing

With the continuous advancements in aviation battery technology [68], eVTOL aircraft have emerged as a promising solution for cost-effective urban mobility [69]. In this section, we use a more advanced eVTOL wing to demonstrate the capabilities of the FFD-based optimization approach, where both the thickness and shape control points are considered as design variables simultaneously. By incorporating both thickness and shape coordinates in the design of shell structures, we can utilize the material more efficiently than considering thickness optimization only. The CAD geometry of the eVTOL wing, material parameters, and the corresponding structural analysis can be found in [44, Section 5]. For the optimization problem, we implement the same clamped boundary conditions and distributed upward pressure as those in the previous application. The magnitude of pressure is set to 120 \(\textrm{N}/\textrm{m}^2\), approximated by dividing the take-off weight by the surface area of the eVTOL wing. The baseline configuration of the eVTOL wing, which is composed of 27 cubic NURBS patches with 87 intersections, is illustrated in Fig. 19. We note that we perform the shape optimization for the eVTOL wing without including an aerodynamic model (which would be needed for a well-posed wing design problem) purely to provide a demonstration of the FFD-based method for complex aerospace structures.

Fig. 19
figure 19

a FFD blocks for eVTOL wing thickness optimization, where the lower and upper skins have a variable thickness. Wingtips and internal ribs and spars have a piecewise constant thickness. b FFD block for shape optimization

To achieve a meaningful design for the eVTOL wing, we use two quadratic B-spline FFD blocks for thickness optimization. This configuration allows for varying thicknesses in the lower and upper skins of the eVTOL, while using piecewise constant thicknesses for the internal stiffeners and wingtips. The arrangement of the thickness FFD blocks is illustrated in Fig. 19a. Furthermore, a cubic B-spline FFD block is created for shape optimization, as depicted in Fig. 19b. Only the vertical coordinates of control points for the shape FFD block, denoted as \({\textbf{P}}_{\text {FFD}3}\), are updated. In total, there are 642 design variables involved in this optimization process, and a constant volume constraint is applied as well. Regarding the thickness design variables, the lower and upper limits are selected as 1 mm and 50 mm, respectively. All shell components have initial thicknesses of 3 mm.

One challenge encountered during shape optimization of complex shell structures, such as eVTOL wings, is the potential occurrence of oscillatory or highly distorted geometries in the updated designs. These distorted shapes can lead to poor element quality, resulting in spurious energy and affecting the accuracy of the analysis. To mitigate oscillation or radical change of shell components, an additional term is introduced in the objective function to regularize the gradient of the shape. The objective is formulated as

$$\begin{aligned} f^\text {obj} = \sum _{\text {I}=1}^{m} \left( W_{\text {int}}^{\text {I}} + \lambda \frac{E (\mathring{t}^\text {I})^3}{12 \mathring{h}^\text {I}_A (1-\nu ^2)} \int _{{\mathcal {S}}^{\text {I}}} \Vert \nabla {\textbf{P}}^\text {I}_{3} - \nabla \mathring{{\textbf{P}}}^\text {I}_{3} \Vert ^2 \ \mathrm{{d}}{\mathcal {S}}\right) \text { ,} \end{aligned}$$
(49)

where \(\text {I}\) is the index of shell patches, \(\lambda\) is a dimensionless regularization coefficient, \(h^I_A\) is the element area of shell patch \(\text {I}\) in the physical space, \({\textbf{P}}^\text {I}_{3}\) is the vertical component of the shape variable for shell patch \(\text {I}\), and \({\mathcal {S}}^{\text {I}}\) is the midsurface of shell patch \(\text {I}\). \(\mathring{(\cdot )}\) denotes quantities in the baseline configuration. The regularization term in (49) serves as an additional artificial bending energy associated with the curvature of the eVTOL wing. Therefore, the shape oscillation can be eliminated by adjusting the regularization coefficient \(\lambda\). The SNOPT optimizer is employed with a tolerance of \(10^{-3}\). Figure 20 demonstrates the optimized eVTOL wing designs achieved with varying \(\lambda\) values, providing insights into the influence of regularization on the final shape and thickness distribution. It can be seen that the patch intersections of the optimized shapes in Fig. 20 are still connected using the FFD-based approach. The reductions of internal energy for different \(\lambda\) are listed in Table 3.

Fig. 20
figure 20

Optimized solutions of the eVTOL wing with varying regularization coefficient

Table 3 Reduction of internal energy of the eVTOL wing after simultaneous optimization with varying regularization coefficients

For this eVTOL wing optimization problem, different regularization coefficients yield distinct outcomes. A regularization coefficient of 1 and 0.1 provide optimal designs dominated by thickness update, resembling the patterns observed in the combined thickness optimization of the PEGASUS wing, refer to Fig. 18b. The optimized shapes in these two cases are similar to the baseline configuration since the artificial bending energies are the major contributor to the objective function due to the large regularization coefficients. Even slight variations in the shape variables result in substantial increases in the objective function. Conversely, small regularization coefficients, i.e., \(10^{-4}\) and \(10^{-5}\), lead to considerable changes in the shape of the eVTOL wing and reduction of internal energy, amounting to \(92.82\%\) and \(95.09\%\), respectively. However, these cases exhibit noticeable oscillations in the wingtip area, which can lead to ill-conditioned systems. On the other hand, employing regularization coefficients with values of \(10^{-2}\) and \(10^{-3}\) yields balanced solutions, where both the thickness redistribution and shape updates contribute to the optimal design. The material moves toward the clamped area, accompanied by a widening of the cross-section to provide increased wing support. An exploded view of the optimal design with \(\lambda =10^{-3}\) is shown in Fig. 21. This optimal design achieves an internal energy reduction of 83.23% compared to the baseline configuration.

Fig. 21
figure 21

Exploded view of optimal design of eVTOL wing with regularization coefficient \(\lambda =10^{-3}\), which results in 83.23% reduction of internal energy compared to the baseline design

7 Conclusion

In this paper, we have introduced an FFD-based shape and thickness optimization approach for shell structures composed of separately-parametrized NURBS surfaces. The integration of this method with the Lagrange extraction technique enables IGA with existing FE toolkits and provides a connection between the FFD block and non-matching shell patches. By employing the FFD block approach, the updated shell geometry and thickness remain properly connected at patch intersections throughout the optimization process. This feature prevents undesired shape discontinuities in shell structures.

We made use of the penalty-based coupling formulation for Kirchhoff–Love shells to perform IGA in the optimization. The automation of analytical derivative computations is achieved through code generation in FEniCS, enabling gradient-based multidisciplinary design optimization. This automation streamlines the optimization process and allows for efficient exploration of design spaces. The unified NURBS representation shared by both the design geometry and analysis model enhances accuracy per DoF in the analysis and precise design updates. Moreover, the proposed framework circumvents FE mesh generation and streamlines design–analysis–optimization workflow for complex shell structures. Consequently, the automated workflow is expected to accelerate the conceptual design of novel eVTOL aircraft with minimal manual effort.

A suite of benchmark problems is adopted to verify the effectiveness of the FFD-based optimization approach proposed in this paper. Both the shape optimization and thickness optimization results agree well with analytical solutions or other established references. Furthermore, we have applied the framework to two different aircraft wings. This demonstration highlights the potential of the proposed method in exploring complex design spaces and obtaining superior designs for innovative aircraft structures. Future works can extend the shape optimization for aircraft wings with more realistic loads by coupling the structural solver with an aerodynamic solver [70]. Additionally, practical constraints such as von Mises stress can be incorporated into the optimization process to ensure that the obtained designs meet the requirements of real-world applications. To promote code transparency and potential contributions to the shell optimization community, we make the Python library GOLDFISH openly accessible in a GitHub repository [64].