1 Introduction

Recent years have seen a significant increase in investment in renewable energy solutions (IEA 2023). Wind energy has become particularly desirable due to achieved reductions in Levelized Cost of Energy (LCoE), versatility, as turbines can be established almost anywhere, and general green profile of the technology (GWEC 2023). Nevertheless, it is desirable to further reduce costs to enhance the investment appeal and provide more energy to satisfy the increasing demand of the populace. A key metric for maximizing energy harvesting is rotor span size, and thus, increasing the size cost-efficiently is the main objective in design, particularly for offshore turbines that have higher installation costs. As a result, the length of state-of-the-art commercial offshore blades currently exceed 100 m, and this is expected to continue to increase in the future. Design of such structures at such scale is challenging, and the challenge is further exacerbated by the complex shape of, and use of high-performing laminated composite materials for blades. The particular laminated composites utilized consist of fiber-reinforced polymers and transversely-stiff low-density core materials such as balsa wood or structural foams. Because of the inhomogeneous nature of laminated composites, they exhibit anisotropic behavior and have several associated failure mechanisms which can make failure prediction particularly tedious, consequently slowing the design process.

Accelerating design can be achieved through development and application of structural optimization methods. Several attempts at structural optimization of wind turbine blades have been demonstrated in literature. One of the pioneering works by Jureczko et al. (2005) demonstrated full blade optimization under multiple structural criteria through the application of a zero-order optimization method. Numerous following works have also proposed a zero-order approach to solving the problem with more criteria and analysis-model fidelity as computational power has increased, see e.g., Chen et al. (2013), Monte et al. (2013, 2017), Barnes and Morozov (2016), and Albanesi et al. (2018a, 2018b). In these works, structures are parametrized with material choice, layer, or laminate thickness.

Although correct application of zero-order methods can lead to finding the global optimum of a design problem, the computational cost associated severely restricts the treatable size of the problem to, typically, less than a dozen design variables. An alternative that allows for solving optimization problems, of several orders of magnitude larger, is a gradient-based approach. Early works on gradient-based optimization of wind turbine blades have typically utilized a multi-step optimization approach, initially applying topology optimization to design the internal configuration of the considered blades, followed by sizing optimization of the outer shell (Buckney et al. 2013; Forcier and Joncas 2012; Albanesi et al. 2020). Other works focus exclusively on the sizing optimization part to allow for more fidelity in the analysis model. Such sizing optimization has been demonstrated on shell models in Bottasso et al. (2014) and solid-shell models in Sjølund and Lund (2018), all including numerous structural criteria directly in the gradient-based optimization. Noteworthy is also Hu et al. (2016), where authors demonstrate a reliability-based optimization approach applied to a blade to optimize for random fatigue loads.

Design of wind turbine blades is inherently a multi-disciplinary undertaking with mutual dependence between aerodynamic and structural criteria. It is therefore relevant to attempt including both disciplines in optimization to minimize post-optimization modifications, and several works have shown the potential of carrying this out. Such optimization has been performed using either a coupled (Bottasso et al. 2012; Bortolotti et al. 2016; Scott et al. 2020) or de-coupled (Bottasso et al. 2016; Scott et al. 2022; Mangano et al. 2022) workflow. It should be noted, that including aerodynamic considerations in the optimization problem increases the computational cost associated with analysis and computation of sensitivities. A reduction in fidelity is therefore necessary to be able to solve the problem compared to exclusively structural or aeroelastic optimizations. The structural part of the multi-disciplinary optimizations is typically carried out as sizing optimization with layer thickness as design variables.

The state of the art review of optimization of wind turbine blades indicates that a general framework for treating material selection, fiber orientation, stacking sequence, and thickness simultaneously has not been demonstrated for gradient-based wind turbine blade optimization. This work hence aims to extend the state of the art by development and application of such gradient-based multi-material and thickness optimization to wind turbine blades. A potential framework for carrying out the optimization is through a multi-step strategy (Albazzan et al. 2019) where the problem is solved in two steps. In the first step the structure is parametrized using lamination or polar parameters, entailing relatively few design variables, and an ideal structural behavior is found. The second step is a realization step, where a search is made for a laminate, with the properties of the first step, while taking into account various manufacturing constraints. However, this work utilizes the Discrete Material and Thickness Optimization (DMTO) approach (Stegmann and Lund 2005; Lund and Stegmann 2005; Sørensen and Lund 2013; Sørensen et al. 2014) for the purpose, where the inherently discrete problem is made continuous and intermediate values are penalized. As opposed to the original DMTO formulation, a direct parametrization of the thickness (Sjølund et al. 2018) is used in this work to appropriately treat the sandwich laminates in the design. The relevant failure criteria, i.e., buckling, static and fatigue failure, are all considered, each for four design load cases.

The choice of parametrization is primarily motivated by DMTO being particularly well-suited for the layout of material in blades, which is done by rolling out layers of non-crimp fabric and placement of core material panels to span a large portion of the blade, and hereby the necessary amount of design variables, for achieving useful results with DMTO, is significantly reduced. Nevertheless, the analysis and optimization problems remain of significant size, making it computationally challenging to achieve a solution. To manage the computational expense, optimization is carried out on the outer shell of the root section of a state-of-the-art offshore commercial blade, spanning the first 35 m of the particular blade. Focusing on the root section is motivated by the majority of material being placed here, i.e., 60% of the total blade mass. Moreover, the region is subject to the largest bending loads, and its shape is primarily governed by the root connection and not aerodynamic considerations. As such, the costly aerodynamic analysis and sensitivity analysis as well as coupling considerations to the structural analysis are neglected as part of this work.

The paper will continue with a presentation of the wind turbine blade root section model in Sect. 2 which includes the finite element strategy and how loads are applied. In Sect. 3 the Discrete Material and Thickness Optimization approach appropriate for parametrizing both monolithic and sandwich regions of the blade is introduced. The structural analyses for assessing the critical criteria are introduced in the following Sect. 4 along with the associated safety factors that are dictated by design standards. In Sect. 5 the optimization methods and strategy are presented with emphasis on how the problem can be solved efficiently. Results are then shown in Sect. 6 and are followed by a discussion in Sect. 7 of the overall approach adopted. The paper is then finalized with conclusions in Sect. 8.

2 Modeling the blade

The optimization is to be carried out on the outer shell of the root section, defined here as the first 35 m, of a state-of-the-art industrial offshore wind turbine blade with a total length exceeding 100 m. Despite only considering the root section, the structural analysis and subsequent sensitivity analysis is still computationally challenging. Focusing on only the outer shell of the root section reduces the computational expense, and as this region contains the majority of material in the blade, it is a region of considerable potential for optimization. Moreover, the increase in size creates a stronger coupling between aerodynamic and structural effects and thus applying structural optimization on a full blade would necessitate more postprocessing for the aerodynamic design. The shape of the blade at the root is however governed mostly by the connection, and the dependence on aerodynamics is therefore less pronounced.

As this work considers both material selection and thickness optimization, the blade is parametrized with a generic layup to demonstrate the potential of the approach for application during early structural design phases. Hence, the main work in parametrizing the structure is division into a number of element groups (patches), where the generic layup is associated. As outlined in the previous work, the partitioning of the blade is carried out in two steps, and the first step is cross-sectional partitioning which is done based on a number of identified characteristic regions. These regions are shown in Fig. 1.

Fig. 1
figure 1

A cross section in the considered blade root section with characteristic regions indicated. Note that although the patches are split transversely for the trailing edge core region, these two regions share the same material design variable

Fig. 2
figure 2

The division of the blade into thickness design variable domains

Material design variables are assigned to these regions, thus spanning the entire length of the blade in order to comply with manufacturing, where plies are draped from a roll, see e.g. Krogh et al. (2023). The subsequent partitioning of the length of the blade creates a number of smaller domains, where the thickness design variables are associated, hence allowing the optimization to yield a variable-thickness design, see Fig. 2. Many materials are used to manufacture the real blade including different Uni-Directional (UD) Glass and Carbon Fiber Reinforced Polymers (GFRP and CFRP), oriented in various directions, as well as balsa wood and structural foams. The number of materials is simplified in the optimization to GFRP in UD, \(0^{\circ }\)/\(90^{\circ }\) Cross-Ply (CP) and \(\pm 45^{\circ }\) biax for fiber candidates while PVC foam is used for the core material candidate. Note that balsa wood is typically used for the core material in the outer shell of blades with a lower-density PVC foam for the shear webs. Due to the lack of fatigue properties for both, Rohacell WF110, which is a higher-density closed-cell PMI foam, is used as a compromise for both. The material properties are summarized in Tables 1 and 2 for static and fatigue, respectively.

Table 1 The elastic and static strength properties used
Table 2 Fatigue strength properties used

Static properties are compiled from ESACOMP database (ESAComp, 2016) and the fatigue properties are from the OPTIDAT (Nijssen et al. 2006) database. Thus, the applied properties are only representative of these particular materials and can vary depending on the supplier. Unfortunately, no data has been found for the fatigue properties of cross-ply laminates for all directions and R-values. The fatigue properties are therefore estimated from a scaling between the static strength values and available fatigue data. The foam fatigue properties are based on that found in Zenkert and Burman (2009, 2011).

Fig. 3
figure 3

The finite element mesh and parametrization illustrated from different perspectives

It follows that the candidate materials are assigned differently for monolithic regions (spar cap and edges) and for the core regions. Monolithic areas are thus assigned only fiber candidate materials and the core regions are assigned a sandwich-type laminate, where the center layers have only core material candidates, and the face layers have fiber material candidates. For convenience, the same initial layup has 20 layers in every patch. The fiber regions use a uniform layer thickness of 4 mm, while the core regions use 2.5 mm for the face layers, and 6.25 mm for the core layers. Note that the actual non-crimp fabrics, used for manufacturing the blade, are substantially thinner, i.e., approximately 1 mm. Including these with their “as-manufactured” thickness in the model would significantly increase computational cost, as stiffness contributions are summed from all layers, failure and fatigue are evaluated for each individual layer, and the additional layers would require an increased number of material and thickness design variables. Using thicker layers does imply reduced accuracy in the failure and fatigue analyses, where evaluation is done at the top and bottom of every layer, because of the reduced number of evaluation points, however the chosen layer thickness distribution is deemed as a reasonable trade-off.

A shell-based finite element model is used in the analysis. Shell models are standard in the industry since a shell approach is particularly convenient for modeling blades. Using a layup-offset formulation, only the outer shape has to be represented to conduct analysis with layups offset inwards. Some discrepancies have been highlighted in literature regarding shell modeling, namely incorrect representation of the cross-sectional area of closed and highly curved structures (Laird et al. 2005; Branner et al. 2007), and the influence of the artificial drilling degree of freedom on the torsional stiffness estimation (Tavares et al. 2022). These effects can be minimized through careful consideration when establishing the model.

The fidelity of the model used is selected based on a trade-off between accuracy and numerical efficiency. To verify the model, its strain distribution has been compared to that of a high-fidelity model that is used for certification of the blade considered. The model is meshed with 9-noded isoparametric shell finite elements utilizing First-order Shear Deformation Theory (FSDT) assumptions. The mesh consists of 26,569 of such elements and 105,239 corresponding nodes, see Fig. 3.

2.1 Load application

Analysis of wind turbine blades is a multi-disciplinary undertaking. Besides the structural considerations, aerodynamic analyses and syntheses are used to find an efficient shape to maximize the power output for given wind conditions. Such analysis hence yields the loads that are applied to the blade for the structural analysis. In this work, a load envelope with four load cases resulting from such aerodynamic analysis and design is used. Following DNV-GL (2015), the load cases consist of flap-wise and edge-wise loads in different directions, see Fig. 4a for an illustration. The criteria for assessing the structural integrity have to be evaluated for each of these load cases. This motivates the choice of using only four load cases in the optimization, which is the minimum prescribed by the design standards (DNV-GL 2015) to minimize the computational cost. The trade-off is an increase in safety factors applied to each criterion. These are determined in Sect. 4.4 after introduction of the structural criteria.

Fig. 4
figure 4

Load envelope utilized for structural analysis of the blade, and the spline fit for the flapwise load case, yielding the load as a function of position along the length of the blade

The loads are given as moment loads at a number of points in the length-direction of the blade, and, to derive point loads that are applicable to the finite element model, a spline is fit to these discrete points which is illustrated in Fig. 4b. The resulting function, describing the moment distribution, is then differentiated to yield the force acting on the cross-section, which is subsequently distributed at the top and bottom of the nodes shared by spar cap and shear webs. However, since only the root section is being considered, the outer part of the blade has to be removed and its applied loads transferred to the remaining structure. In this work, the loads are applied directly as section forces on the cross section for simplicity. Consequently, local effects and deformation occur in the vicinity of the load introduction. To remove these effects, a reinforcement is added around the load introduction site and the domains adjacent to it are not parametrized for the optimization. The region affected by the load introduction should not be included in optimization, hence de-parametrized domains are made longer than the other to move an appropriate distance from the load introduction site, see Fig. 2. The particular size of de-parametrized domains is determined based on observations of the strain distribution.

It should be noted that the loads are subject to change as the blade mass is being modified by optimization, and ideally an aerodynamic analysis should be carried out simultaneously to assess the change in loads. Here, it is convenient to consider only the root section, as its shape is, to a large extent, governed by the root connection to the hub, hence limiting the influence of the optimization on the loads. Blade optimization in a multi-disciplinary setting has been treated in other work, see e.g., Mangano et al. (2022), however, the major challenge here is managing the computational expense of solving both aerodynamic and structural problems, computing sensitivities, and defining an appropriate objective function as the two disciplines are competing. Thus, integrating DMTO in such multi-disciplinary setting is left for future work.

3 Discrete material and direct thickness optimization

Optimal selection of materials in laminates is inherently a discrete programming problem. The discrete behavior of a given material candidate design variable \(x^{(p,l,c)}\) in such a problem is as described in Eq. (1).

$$x^{(p,l,c)} =\left\{ \begin{array}{ll} 1, &{} {\text {if candidate }}{\textit{c}}{\text { is chosen in }}{\textit{l}}{\text { of }}{\textit{p}}\\ 0, &{} {\text {else}} \end{array} \right.$$
(1)

Here, l is the given layer number and p is the patch number. It follows, that the defined material candidates, i.e., UD, CP, biax, and PVC foam, are each associated to such a design variable for all layers in every patch.

For laminated composites, consisting of several material layers, the thickness design variables behave similarly, as they parametrize the presence of constant-thickness layers in each laminate composing the structure. The thickness design variables \(\rho ^{(d,l)}\) is hence described in Eq. (2).

$$\rho ^{(d,l)} = \left\{ \begin{array}{ll} 1, &{} {\text {if material is present in }}{\textit{l}}{\text { of domain }}{\textit{d}}\\ 0, &{} {\text {else}} \end{array} \right.$$
(2)

The introduction of material domains serves to define separate regions for thickness density variables, as material patches span the entire length of the blade, following the cross-sectional division shown in Fig. 1. Thus, the thickness distribution is allowed to vary in both length- and chordwise directions. Assignment of these variables to a structure is exemplified in Fig. 5.

Fig. 5
figure 5

An example of a DMTO parametrization applied to optimize a cantilever plate where the hatched pattern indicates layers with zero density. For layered plates and shells, the optimal thickness distribution is staircase-like as stress concentrations occurring between dropped plies are not captured by such models

The computational expense is excessive for solving discrete optimization problems of any modern industrial structure encountered in e.g., the wind turbine and aerospace sectors. Instead, if the optimization problem can be formulated with continuous design variables and functions, efficient gradient-based methods are available to solve such problems with available computational resources. The efficiency of gradient-based methods has been utilized to solve impressively large-scale problems see e.g., Aage et al. (2017), Baandrup et al. (2020), and are therefore also imperative in solving the present problem. This work utilizes the Discrete Material Optimization (DMO) approach (Stegmann and Lund 2005; Lund and Stegmann 2005) and its extension, the Discrete Material and Thickness Optimization (DMTO) approach (Sørensen et al. 2014) for enabling gradient-based methods. In DMO/DMTO, the discrete design variables are replaced with continuous equivalents and discreteness is achieved by penalizing artificial intermediate design variable values. This penalization is achieved by utilizing an appropriate interpolation function that makes intermediate values expensive. In this work, the multi-phase version of the Rational Approximation of Material Parameters (RAMP) scheme (Stolpe and Svanberg 2001a; Hvejsel and Lund 2011) is applied for interpolating both material and thickness design variables, see Eqs. (3)–(4).

$$\begin{aligned} w(x^{(p,l,c)})&= \frac{x^{(p,l,c)}}{1+q\, (1-x^{(p,l,c)})} \end{aligned}$$
(3)
$$\begin{aligned} v(\rho ^{(d,l)})&= \frac{\rho ^{(d,l)}}{1+q\, (1-\rho ^{(d,l)})} \end{aligned}$$
(4)

Here, q is the penalization factor, and penalization is achieved by using \(q > 0\) in the given weighting functions. Utilizing RAMP is motivated by its gradient not becoming singular when design variables go to zero as opposed to the popular alternative, Solid Isotropic Material with Penalization (SIMP; Bendsøe 1989; Zhou and Rozvany 1991). Moreover, RAMP has been proven effective in previous studies where the use of SIMP has also been discussed, see Sørensen et al. (2014), Lund (2018), and Hermansen and Lund (2023).

The material candidate variables are incorporated into the structural problem through the constitutive matrix of each candidate material. In order to avoid solving a finite element problem for each candidate material (Stegmann and Lund 2005), a weighted average \(\tilde{{\varvec{C}}}^{(e,l)}\) of the candidate material constitutive matrices \({\varvec{C}}^{(e,l,c)}\) is utilized, see Eq. (5).

$$\tilde{{\varvec{C}}}^{(e,l)} = \sum \limits _{c=1}^{N_{\text {c}}} w(x^{(p,l,c)}) \, {\varvec{C}}^{(e,l,c)}$$
(5)

Here, e is the element number and \(N_{\text {c}}\) denotes the number of candidates. Note, in standard topology optimization the use of interpolation with penalization strategies has been subject to concern that the interpolation does not represent the actual material correctly. It has been proven in Stolpe and Svanberg (2001a) that if applying RAMP with an appropriate penalization factor, the penalized stiffness of a single (multi-phased) material lies within the theoretical elastic bounds defined by Hashin and Shtrikman (1963). For density-based topology optimization, using a density filter, non-discreteness is unavoidable in the final design, hence it is important to ensure correct representation of the material. In the present multi-material case, strict fulfillment of the Hashin–Shtrikman bounds has not been proven, however such is not of particular interest since the main purpose of penalization is to achieve a completely discrete design, where penalization does not influence the behavior of the structure at convergence.

Fig. 6
figure 6

The difference between the DMTO and DMDTO parametrizations. The left figure shows the topology optimization-based DMTO, where the constitutive matrices are parametrized, and the right illustrates the concept of DMDTO

Different strategies have been proposed for parametrizing the layer thickness. As this work concerns a wind turbine blade, which is majorly a sandwich structure, the alternative parametrization introduced in Sjølund et al. (2018, 2019), henceforth named as the Discrete Material and Direct Thickness Optimization (DMDTO) approach, is utilized, see also Löffelmann (2021). In DMDTO the layer thickness \(t^{(e,l)}\) is directly scaled with a density variable instead of the constitutive matrix and this parametrization strategy allows for defining different ply groups within each laminate in the model. Such ply groups can be defined for the face and core layers respectively allowing for variable thickness in each region that has a distinct ply group. Varying the thickness between the face and core ply groups is necessary to design sandwich structures, which utilize increased thickness of the core to increase the bending stiffness and hence reduce the amount of costly face materials. Such is not possible with the original DMTO, as a density variable is associated to the constitutive matrices and changing a layer thickness therefore introduces artificial weighting into the problem. The difference between the DMTO and DMDTO approaches is illustrated in Fig. 6. The thickness of each layer is thus parametrized with a continuous density variable \(\rho ^{(d,l)}\) through an interpolation function \(v(\rho )\), see Eq. (6).

$$t(\rho ^{(d,l)}) = v(\rho ^{(d,l)}) \, t^{(e,l)}$$
(6)

Note here that element e is part of domain d. The parametrization is implemented with a dummy layer to offset the layup to the outer shell, see details in Sjølund et al. (2019). In this context, the thickness of the outer layer is kept constant during optimization to ensure plies are dropped internally.

A number of additional constraints are necessary to make DMTO yield realizable designs. The proposed multi-phase interpolation approach does not guarantee that only a single candidate material is chosen, and thus a set of linear constraints is included for each layer, requiring that the sum of candidate design variables does not exceed unity, see Eq. (7).

$$\sum \limits _{c=1}^{N_{\text {c}}} x^{(p,l,c)} = 1$$
(7)

It should be emphasized that the necessity of the constraints in Eq. (7) is solely a consequence of using the multi-phase RAMP interpolation of Hvejsel and Lund (2011) applied in this work. Alternatives are available that do not depend on such constraints and also allows reducing the number of design variables, see e.g., Gao et al. (2012), Kiyono et al. (2017), and Hozič et al. (2021). However, the multi-phase RAMP scheme has been documented to work well for many complex DMTO problems (Sørensen et al. 2014; Lund 2018; Hermansen and Lund 2023), and these constraints can be included with negligible influence on computational cost, given an optimizer is available that handles linear constraints well.

In Sørensen and Lund (2013), constraints on the change in thickness within the stack have been formulated to ensure that intermediate voids do not occur, and these are given in Eq. (8).

$$\rho ^{(d,l+1)} \le \rho ^{(d,l)}$$
(8)

It has been recognized that this straightforward formulation is insufficient as it forms through-the-thickness density bands, i.e., the optimizer places the same intermediate density value in all layers which is unaffected by penalization. The remedy introduced is a set of special move limits, applied to the density variables, which ensures presence of material in underlying layers, see Eq. (9).

$$\rho ^{(d,l+1)} \le {\left\{ \begin{array}{ll} f_{1} = \frac{T}{1-T} \rho ^{(d,l)}, &{} {\text {if}} \ \rho ^{(d,l)} < (1-T) \\ f_{2} = \frac{1-T}{T} \rho ^{(d,l)} + \frac{2T-1}{T}, &{} {\text {else}} \end{array}\right. }$$
(9)

Here, T is a threshold value which enforces more density in underlying layers with decreasing T, and, hence, material is always removed from the top when applying the move limits, see Sørensen and Lund (2013) for further details. Using DMDTO, the thickness constraints are definable for each distinct sequence of the laminate, i.e., ply groups, allowing for using a different layer thickness in each ply group, see details in Sjølund et al. (2019). In the present work, such constraints are defined for the top, core, and bottom ply groups respectively, see Fig. 7.

Fig. 7
figure 7

A sandwich laminate illustrated with application of the thickness constraints to each defined ply group

It should be recognized that the constraints given in Eqs. (8) and (9) are not necessary when directly parametrizing the thickness in DMDTO, however, they have been observed to assist in converging to a discrete design and prevent density bands from occurring, as noted in Sjølund et al. (2018), which motivates their use in this work.

Ply-drop (or blending) constraints are also included in the optimization problem in the form presented in Sørensen and Lund (2013). Ply drops are known to cause stress concentrations as a consequence of an abrupt thickness change and build-up of resin pockets in the vicinity of the drop. The ply-drop constraints act to prevent this, and implementation can conveniently be made with offset in the patch/domain parametrization, see Eq. (10).

$$-S\le \sum \limits _{l=1}^{N_{l}} \left( \rho ^{(d,l)} - \rho ^{(d+1,l)} \right) \le S$$
(10)

Here, S indicates the maximum allowable number of plies to drop and \(N_{l}\) is the number of layers.

Finally, the DMTO problem can be formulated, which is stated in the nested analysis and design formulation in Eq. (11). The structural constraints \(g({\varvec{x}},{\varvec{\rho }})\) are defined in the subsequent section, where the associated structural analyses are presented.

$$\begin{aligned} \underset{({\varvec{x}},{\varvec{\rho }})}{\text {minimize}}&\quad f({\varvec{x}},{\varvec{\rho }}) \\ {\text {s.t.}}&\quad \frac{g({\varvec{x}},{\varvec{\rho }})}{g_{\text {lim}}} - 1 \le 0 \\&\quad \sum \limits _{c=1}^{N_{c}} x^{(p,l,c)} = 1 \\&\quad \rho ^{(d,l+1)} \le \rho ^{(d,l)},\ {\text {for}} \ {\text {top ply group}} \\&\quad \rho ^{(d,l)} \le \rho ^{(d,l+1)},\ {\text {for}} \ {\text {core ply group}} \\&\quad \rho ^{(d,l+1)} \le \rho ^{(d,l)},\ {\text {for}} \ {\text {bottom ply group}} \\&\quad \sum \limits _{l=1}^{N_{l}} \left( \rho ^{(d,l)} - \rho ^{(d+1,l)} \right) \le S\\&\quad \sum \limits _{l=1}^{N_{l}} \left( \rho ^{(d+1,l)} - \rho ^{(d,l)} \right) \le S\\&\quad x^{(p,l,c)} \in [0,1], \ {\text {for}} \ p = 1, 2, \dots , N_{p}\\&\qquad\qquad\qquad\qquad\ \ \, \, l = 1, 2, \dots , N_{l}\\&\qquad\qquad\qquad\qquad\ \ \, \, c = 1, 2, \dots , N_{c}\\&\quad \rho ^{(d,l)} \in [0,1], \ \ \, {\text {for}} \ d = 1, 2, \dots , N_{d}\\&\qquad\qquad\qquad\qquad\ \ \, \, l = 1, 2, \dots , N_{l}\\ \end{aligned}$$
(11)

Here, \(N_{p}\) denotes the number of material candidate patches, and \(N_{d}\) is the number of material domains.

4 Structural analysis

In this work, buckling, static failure and fatigue damage constitute the structural constraints of the optimization problem. These structural criteria are all quantified through linear elastic finite element analysis. As such, the point of departure is solving the structural state equations, given in Eq. (12).

$${\varvec{K}}{\varvec{U}} = {\varvec{F}}$$
(12)

Here, \({\varvec{K}}\) designates the global stiffness matrix, \({\varvec{U}}\) is the displacement vector, and \({\varvec{F}}\) is the work-equivalent nodal force vector.

From the resulting displacements, the strain vector in structural coordinates \({\varvec{\varepsilon }}_{xy}\) is determined on an element basis as shown in Eq. (13).

$${\varvec{\varepsilon }}_{xy}^{(e,l,m)} = {\varvec{B}}^{(e,l,m)}{\varvec{u}}^{(e)}$$
(13)

Here, \({\varvec{B}}^{(e,l,m)}\) is the strain–displacement matrix, for element e, layer l, evaluation position in the layer m, and \({\varvec{u}}^{(e)}\) is the element displacement vector. From the strain vector, the element stress vector in structural coordinates \({\varvec{\sigma }}_{xy}\) is calculated following Eq. (14).

$${\varvec{\sigma }}_{xy}^{(e,l,m)} = \tilde{{\varvec{C}}}^{(e,l)}{\varvec{\varepsilon }}_{xy}^{(e,l,m)}$$
(14)

Note that the constitutive matrix \(\tilde{{\varvec{C}}}^{(e,l)}\) used here is the interpolated matrix calculated in Eq. (5). The strain and stress vectors are calculated at the top and bottom of each layer in every element, and hence \(m = 1,2\).

4.1 Buckling analysis

Linear buckling analysis involves solving the eigenvalue problem shown in Eq. (15).

$$\bigl ({\varvec{K}}+\lambda _{\text {BLF}}^{(j)}{\varvec{K}}_{\sigma }\bigr ){\varvec{\Phi }}^{(j)} = {\varvec{0}} \quad {\text {for }} j = 1, \ 2, \dots , \ N_{j}$$
(15)

Here, \(\lambda _{\text {BLF}}^{(j)}\) is the jth eigenvalue or buckling load factor, \({\varvec{\Phi }}^{(j)}\) is the associated buckling mode, and \(N_{j}\) is the number of eigenmodes/buckling modes extracted when solving the eigenvalue problem. A sufficiently high number of modes \(N_{j}\) is extracted to take mode switching into account during optimization, see Sørensen et al. (2014) for more details on this strategy. The stress–stiffness matrix \({\varvec{K}}_{\sigma }\) is computed on an element-level as shown in Eq. (16).

$${\varvec{K}}_{\sigma }^{(e)} = \sum \limits _{l=1}^{N_{\text {l}}} \int \bigl ({\varvec{G}}^{(e,l)}\bigr )^{\text {T}} {\varvec{S}}_{\text {Mat}}^{(e,l)} {\varvec{G}}^{(e,l)} {\text {d}}V$$
(16)

Here, \({\varvec{G}}^{(e,l)}\) is a matrix containing shape functions, and these are paired with the corresponding stress components in the matrix \({\varvec{S}}_{\text {Mat}}^{(e,l)}\), see Zienkiewicz and Taylor (2005), Bathe (2006), and De Borst et al. (2012) for their explicit expressions for various element formulations. Interpolation and penalization of \({\varvec{S}}_{\text {Mat}}^{(e,l)}\) is done using the same penalization factor as is applied for the stiffness matrix \({\varvec{K}}\). The integral is evaluated numerically using Gauss quadrature.

The linear buckling problem is solved using a subspace iteration method with a static shifting factor of 1.5. For more details, see Bathe and Wilson (1972). Additional details on buckling in a DMO context can be found in Lund (2009). Note in this context, that spurious modes, which may appear when using a topology parametrization (Ferrari and Sigmund 2023), is prevented for DMTO problems as no holes are introduced by the optimization.

4.2 Failure analysis

For laminated composites, static failure is assessed for each layer in the laminate using an appropriate criterion. This work makes use of the maximum strain and stress criteria (Gürdal et al. 1999) for failure assessment, see also Lund (2018) for details on DMO-based failure optimization. These criteria are quite simple with no stress-interaction effects. Accurately assessing stress interaction is typically done using the Puck criterion (Puck and Schürmann 2002; Deuschle and Puck 2013), but including such in optimization is challenging due to the associated computational cost. Such criteria should hence be applied in later design phases. Moreover, the validity of simpler multi-axial failure criteria, such as Tsai–Wu and Tsai–Hill for general purpose failure evaluation has been questioned in recent research, see Talreja (2023). Max strain and stress criteria are therefore deemed suitable for preliminary design in general but is also accepted by design guidelines for wind turbine blades (DNV-GL 2015).

For evaluation, the strain and stress vectors have to be rotated to the principal material directions in order to compare them to the material properties. The vectors are rotated by application of appropriate transformation matrices \({\varvec{T}}\), see Eqs. (17) and (18).

$$\begin{aligned}&{\varvec{\varepsilon }}_{12}^{(e,l,m)} = \left( {{\varvec{T}}^{(e,l)}}^{-1}\right) ^{\text {T}}{\varvec{\varepsilon }}_{xy}^{(e,l,m)} \end{aligned}$$
(17)
$$\begin{aligned}&{\varvec{\sigma }}_{12}^{(e,l,m)} = {\varvec{T}}^{(e,l)}{\varvec{\sigma }}_{xy}^{(e,l,m)} \end{aligned}$$
(18)

Here, \({\varvec{\varepsilon }}_{12}^{(e,l,m)}\) and \({\varvec{\sigma }}_{12}^{(e,l,m)}\) denote strains and stresses in material coordinates (1, 2) respectively. Note, additional steps are necessary to derive strain transformation, see Jones (1999). The failure index \({{\textbf {FI}}}^{(e,l,m)}\) is then computed as the ratio of strain/stress in material coordinates to the strength of the material US, see Eq. (19).

$${{\textbf {FI}}}^{(e,l,m)} = {\text {max}}\Bigl ( {\varvec{S}}^{(e,l,m)} \oslash {\varvec{{{\textbf {US}}}}} \Bigr )$$
(19)

Here \({\varvec{S}}^{(e,l,m)}\) represents either strain and stress, US is a vector containing the material ultimate strengths, and \(\oslash\) denotes element-wise division (Hadamard division).

4.3 Fatigue analysis

To ensure longevity of the blade, a high-cycle fatigue assessment is also included in the optimization. Offset is taken in an arbitrary random spectrum, which is quantified by using rainflow counting (Matsuishi and Endo 1968). Rainflow counting yields a set of scaling factors \({\varvec{c}}\) that are used to scale the stress state according to the magnitude of the load, see Eq. (20).

$${\varvec{\sigma }}^{(i)} = c^{(i)}\hat{{\varvec{\sigma }}}$$
(20)

Here, i indicates a discrete point in the quantified spectrum, and \(\hat{{\varvec{\sigma }}}\) indicates the reference static stress state. Note, it is assumed that the loads act proportionally during the load history and as a result, the direction of the principal stress will remain constant. Proportional loading has profound implications on the computational efficiency, when solving the optimization problem, see Zhang et al. (2019), Sartorti et al. (2023), and Hermansen and Lund (2023) for details.

The scaling factors are subsequently divided into amplitude and mean components, yielding a corresponding amplitude stress \({\varvec{\sigma }}_{\text {a}}^{(e,l,m,i)}\) and mean stress \({\varvec{\sigma }}_{\text {m}}^{(e,l,m,i)}\), see Eqs. (21) and (22) respectively.

$$\begin{aligned} {\varvec{\sigma }}_{\text {a}}^{(e,l,m,i)}&= c_{\text {a}}^{(i)} {\varvec{\sigma }}_{12}^{(e,l,m)} \end{aligned}$$
(21)
$$\begin{aligned} {\varvec{\sigma }}_{\text {m}}^{(e,l,m,i)}&= c_{\text {m}}^{(i)} {\varvec{\sigma }}_{12}^{(e,l,m)} \end{aligned}$$
(22)

To assess fatigue damage, the alternating stress is compared to the material S–N curve. However, S–N curves derived from uni-axial tests and hence a single damaging equivalent stress \(\sigma _{\text {eqv}}^{(e,l,m,z,i)}\) is necessitated, which is to be calculated using an appropriate mean-stress correction method. In this work, the modified Goodman, and Constant-Life Diagram (CLD) interpolation methods are adopted for this purpose. The modified Goodman approach is used for evaluation in the core material candidates. Its expression is given in Eq. (23).

$$\sigma _{\text {eqv}}^{(e,l,m,z,i)} = \frac{\sigma _{\text {a}}^{(e,l,m,z,i)}}{1-\sigma _{\text {m}}^{(e,l,m,z,i)}/{\text {US}}^{(z)}}$$
(23)

Here, z indicates the stress component. It should be emphasized, that the Goodman correction may yield non-conservative estimates of the influence of the mean stress for fiber-reinforced materials (Vassilopoulos and Keller 2011). This motivates the choice of using CLD-interpolation to improve the accuracy for these materials. Inclusion in optimization has been demonstrated in Hermansen and Lund (2023) and reference is made to said work for derivation of the S–N curves for differing R-ratios, i.e., the ratio of valley to peak for a given cycle.

After determining the equivalent stress through either Goodman or properties derived through CLD interpolation, the number of cycles to failure \(N^{(e,l,m,z,i)}\) can be computed using an appropriate S–N curve representation. Here the Basquin expression is adopted, which depicts a linear curve in a log–log plot, see Eq. (24).

$$N^{(e,l,m,z,i)} = \left( \frac{\sigma _{\text {eqv}}^{(e,l,m,z,i)}}{\sigma _{\text {f}}^{(z)}}\right) ^{1/b^{(z)}}$$
(24)

Here, \(\sigma _{\text {f}}^{(z)}\) indicates the fatigue strength and \(b^{(z)}\) is the slope on the curve for each stress component z.

Finally, damage \(D^{(e,l,m,z)}\) is evaluated using the well-known Palmgren–Miner expression to accumulate damage from every load combination in the spectrum \(N_{\text {loads}}\), see Eq. (25).

$$D^{(e,l,m,z)} = c_{\text {L}} \sum \limits _{i=1}^{N_{\text {loads}}}\frac{n^{(i)}}{N^{(e,l,m,z,i)}} \le D_{\text {lim}}$$
(25)

Here, \(n^{(i)}\) is the number of loads with a particular combination of amplitude and mean, \(D_{\text {lim}}\) is an adjustable critical fraction limit to introduce safety, and \(c_{\text {L}}\) is a scaling factor that can be used to scale the damage in case of having a block spectrum where the same sequence of load cycles is repeated. The particular load spectrum used is generated using the Fortran intrinsic random_number() function with \(N_{\text {loads}}=10^{4}\) and \(c_{\text {L}}=10^{3}\). The limit \(D_{\text {lim}}\) is implemented indirectly through the safety factors introduced in the following section and, hence, \(D_{\text {lim}}=1\) is used.

4.4 Design safety factors

Wind turbine blade design standards given in DNV-GL (2015) dictates a safety factor that must be used when carrying out analysis. The magnitude of said safety factor depends on a number of partial factors assessing the criticality of various aspects related to each criterion. Calculation of the total safety factor \(\gamma _{\text {m}}\) is given as the product of these partial factors, see Eq. (26).

$$\gamma _{\text {m}} = \gamma _{{\text {m}}0}\gamma _{{\text {mc}}}\gamma _{{\text {m}}1}\gamma _{{\text {m}}2} \gamma _{{\text {m}}3}\gamma _{{\text {m}}4}\gamma _{{\text {m}}5}$$
(26)

Here, \(\gamma _{{\text {m}}0}\) is a base safety factor used for all analyses, \(\gamma _{{\text {mc}}}\) is the factor accounting for criticality of failure, \(\gamma _{{\text {m}}1}\) is for long-term degradation of the materials used, \(\gamma _{{\text {m}}2}\) accounts for temperature effects, \(\gamma _{{\text {m}}3}\) is a factor for material and manufacturing effects, \(\gamma _{{\text {m}}4}\) accounts for the accuracy of analysis approach, and \(\gamma _{{\text {m}}5}\) is determined based on the number of load cases considered. The resulting safety factors for the present problem are given in Table 3.

Table 3 Partial factors and resulting safety factors applied for each criterion (DNV-GL 2015)

5 Optimization approach

5.1 Treating singularities in stress-based optimization

The design space in stress-based optimization contains singular optima that are solutions present in a degenerate subspace and hence unreachable by gradient-based optimizers (Sved and Ginos 1968; Kirsch 1990; Rozvany and Birker 1994). A couple of solutions to this problem has been proposed in literature. Here, in the present work, the qp-method by Bruggi (2008) is adopted, since it has an additional benefit of further penalizing intermediate density, see also Lund (2018). The approach entails using \(q < 0\) in the RAMP interpolation functions of Eqs. (3) and (4). A negative penalty factor increases the stress artificially for design variables with intermediate density values, making them uneconomical for the optimizer to choose.

The qp-method can be applied to stress, failure index, and fatigue damage functions with a unique weighting function for each measure to allow for different degrees of penalization, see Eqs. (27)–(29).

$$\begin{aligned} {\overline{\sigma }}_{12}^{(e,l,m,z,c)}&= w_{\sigma }(x^{(p,l,c)}) \sigma _{12}^{(e,l,m,z)} \end{aligned}$$
(27)
$$\begin{aligned} {\overline{FI}}^{(e,l,m,z,c)}&= w_{FI}(x^{(p,l,c)}) FI^{(e,l,m,z)} \end{aligned}$$
(28)
$$\begin{aligned} {\overline{D}}^{(e,l,m,z,c)}&= w_{D}(x^{(p,l,c)}) D^{(e,l,m,z)} \end{aligned}$$
(29)

In this work, penalization is however applied to the failure index and damage only. If adding penalization to the stress, it is more likely that the stress may exceed the ultimate stress of one of the candidate materials, making it impossible to perform mean-stress corrections and, hence, causing the optimization to end prematurely. An illustration of weighting factors with different penalization exponents is given in Fig. 8. The penalization is applied using a continuation strategy which is described later in Sect. 5.4.

Fig. 8
figure 8

An illustration of typical penalization factors applied for the various weighting functions

The optimization functions are formulated from the weighted average of the candidate interpolated measures. For failure indices, the weighted average \(\tilde{FI}\) is calculated as shown in Eq. (30).

$$\tilde{FI}^{(e,l,m,z)} = \sum \limits _{c=1}^{N_{\text {c}}} {\overline{FI}}^{(e,l,m,z,c)}$$
(30)

The interpolation is similarly applied to the damage, however, the nonlinearity of damage has to be managed prior to this which is discussed in the following subsection.

5.2 Damage scaling

Due to incorporating an S–N curve in the evaluation of fatigue damage, see Eq. (24), the measure becomes substantially nonlinear. Thus, using a constraint formulated with the damage as given in Eq. (25) makes the problem highly challenging to solve. Consequently, a stabilization of the damage measure is necessary to achieve acceptable results from the optimization. Numerous techniques for the purpose have been proposed in literature. This work will make use of an inverse P-mean norm scaling of the damage (Olesen et al. 2021) that combines the stabilization achieved, when scaling using a constant exponent (Lee et al. 2015; Zhang et al. 2019) and the accuracy of the true damage between 0 and 1, i.e., when the constraint is feasible. These features are achieved through a reformulation of the P-mean function and the introduction of a weighting factor \(c_{\text {D}}\), see Eq. (31).

$$\overline{{\varvec{D}}}_{\text {s}}^{(z,c)} = \left( c_{\text {D}} (\overline{{\varvec{D}}}^{(z,c)})^{s\,P_{\text {D}}} + (1 - c_{\text {D}}) (\overline{{\varvec{D}}}^{(z,c)})^{-P_{\text {D}}} \right) ^{-1/P_{\text {D}}}$$
(31)

Here, \({\overline{D}}_{\text {s}}\) is the scaled damage, s is a scaling factor, and \(P_{\text {D}}\) controls the accuracy of the measure. The factor \(c_{\text {D}}\) governs the degree of stabilization and may also be changed using a continuation approach, where it is gradually decreased, hence approaching the original damage formulation, as convergence is approached. Such a continuation scheme is also adopted here, and the details on it are presented later.

After the damages have been scaled, a weighted average \(\tilde{D}_{\text {s}}\) is computed similarly to the constitutive matrix of Eq. (5) and failure index of Eq. (30), see Eq. (32).

$$\tilde{D}_{\text {s}}^{(e,l,m,z)} = \sum \limits _{c=1}^{N_{c}} {\overline{D}}_{\text {s}}^{(e,l,m,z,c)}$$
(32)

Note that different strategies can be adopted when scaling and interpolating the damage, however the approach presented here has performed the best in various numerical tests, see Hermansen and Lund (2023) for further discussions.

5.3 Local aggregation

The failure indices and damages are locally defined measures, and the optimization problem therefore contains a large amount of both design variables and constraints making it both difficult and computationally expensive to solve. In this work, the number of constraints is reduced by P-norm aggregations, which compute a smooth, conservative, approximation of the maximum value \(g_{PN}\) of each constraint, see Eq. (33).

$$g_{PN}^{(p)} = \left( \sum _{y=1}^{N_{y}\in \, p} \left( g^{(y)}\right) ^{P} \right) ^{1/P}$$
(33)

Here, \(g^{(y)}\) is a constraint value, \(N_{y}\) is the number of function values and P governs the accuracy of the approximation. A quite large value of \(P=32\) is used for the aggregation, and this has been determined to work well for the considered problem based on numerical investigation, see also Hermansen and Lund (2023). A recent study (Montemurro and Roiné 2024) proposes automatically updating the P-exponent in the P-norm measure based on a desired relative error, which inclusion could potentially benefit the convergence, if the P-value is lowered during optimization, hence decreasing the non-linearity of the problem.

A local aggregation approach (París et al. 2010; Le et al. 2010) is adopted where the P-norm function is computed for each patch p in the problem such that less values are included in each P-norm in order to increase its accuracy in estimating the maximum value. Nevertheless, to achieve reasonable accuracy in the approximation, a large value of P remains necessary. As a result, the optimization problem becomes more nonlinear which is undesirable, as it potentially makes it difficult to solve. To make the aggregate approximation more accurate without using larger exponents, the adaptive constraint scaling approach (Le et al. 2010) is used to re-normalize the constraints with information from previous iterations. The implementation is described in Oest and Lund (2017). It should also be noted that alternative techniques have been proposed in literature to increase the accuracy in aggregation itself, such as improved aggregation by Kennedy and Hicken (2015) or by using a maximum rectifier function in Norato et al. (2022). However, the techniques applied in this work are widely used and are known to generally work well in the context of optimization of laminated composites (Lund 2018; Hermansen and Lund 2023).

5.4 Continuation strategy

DMTO problems are difficult to solve in general because of the increase in non-convexity caused by interpolation of material candidates with penalization. Further exacerbating the non-convexity is the non-linear criteria used in the present optimization, and it is therefore highly unlikely to find a satisfactory solution without a continuation approach. Continuation (Bendsøe and Sigmund 2003) involves gradually increasing penalization during optimization which allows finding a solution to a less non-convex problem that can subsequently act as a stronger starting design for the next problem with increased penalization. However, modifying the penalization is a heuristic approach (Stolpe and Svanberg 2001b), and the continuation scheme is therefore selected based on numerical experimentation.

In this work, continuation is applied to both the inverse P-mean function scaling factor and for design variable penalization. The strategies used for each factor are shown in Table 4.

Table 4 Values applied in each weighting function, and how they are changed during optimization

The penalty factors are modified after 30 iterations and \(c_{\text {D}}\)-continuation is enabled after 200 iterations where the factor is decreased every 15 iterations. Continuation is applied only after all constraints are feasible, as otherwise the optimizer may spend all iterations in a step on feasibility restoration instead of minimizing the objective function. It is therefore not guaranteed that the desired effect of approaching a strong minimum during each step is achieved. If the problem converges prior to reaching the set number of iterations between increments, the factors are modified immediately, and optimization is continued until all continuation steps are applied.

5.5 Design sensitivity analysis

The methods introduced in previous sections facilitates efficient computation of the gradients of every structural criterion through adjoint Design Sensitivity Analysis (DSA). Common for the applied structural criteria is that differentiation with respect to a given design variable \(x^{(j)}\) yields Eq. (34) as a result of applying the chain rule.

$$\frac{{\textrm{d}}f({\varvec{x}},{\varvec{U}}({\varvec{x}}))}{{\textrm{d}}x^{(j)}} = \frac{\partial f}{\partial x^{(j)}} + \frac{\partial f}{\partial {\varvec{U}}}\frac{{\textrm{d}}{\varvec{U}}}{{\textrm{d}}x^{(j)}}$$
(34)

Here, f denotes a structural criterion function used in the optimization. The partial derivative of displacements with respect to the design variables \(\frac{{\textrm{d}}{\varvec{U}}}{{\textrm{d}}x^{(j)}}\) is determined by differentiating the finite element equations of Eq. (12). The resulting expression is shown in Eq. (35).

$${\varvec{K}}\frac{{\textrm{d}}{\varvec{U}}}{{\textrm{d}}x^{(j)}} = -\frac{\partial {\varvec{K}}}{\partial x^{(j)}}{\varvec{U}} + \frac{\partial {\varvec{F}}}{\partial x^{(j)}}$$
(35)

It is assumed that the load is independent of the design variables and hence \(\frac{\partial {\varvec{F}}}{\partial x^{(j)}} = {\varvec{0}}\). Isolating the desired derivative term \(\frac{{\textrm{d}}{\varvec{U}}}{{\textrm{d}}x^{(j)}}\) is achieved through inversion of the stiffness matrix, see Eq. (36).

$$\frac{{\textrm{d}}{\varvec{U}}}{{\textrm{d}}x^{(j)}} = -{\varvec{{\varvec{K}}}}^{-1}\frac{\partial {\varvec{K}}}{\partial x^{(j)}} {\varvec{U}}$$
(36)

This is reinserted into Eq. (34), yielding Eq. (37).

$$\frac{{\textrm{d}}f}{{\textrm{d}}x^{(j)}} = \frac{\partial f}{\partial x^{(j)}} - \frac{\partial f}{\partial {\varvec{U}}} {\varvec{K}}^{-1} \frac{\partial {\varvec{K}}}{\partial x^{(j)}} {\varvec{U}}$$
(37)

This expression can at this point be solved, however it requires solving a system of equations for every design variable in the problem. In order to reduce the associated computational expense, an adjoint vector \({\varvec{\lambda }}\) is defined as shown in Eq. (38).

$${\varvec{\lambda }}^{\text {T}} = \frac{\partial f}{\partial {\varvec{U}}}{\varvec{K}}^{-1}$$
(38)

The stiffness matrix is re-inverted to the left-hand side, and the terms are transposed. As the stiffness matrix is symmetric, it is unaltered by transposition, yielding Eq. (39).

$${\varvec{K}}{\varvec{\lambda }} = \Bigl (\frac{\partial f}{\partial {\varvec{U}}}\Bigr )^{\text {T}}$$
(39)

The adjoint system of equations is solved once per constraint, which is convenient for the present problem formulation, where aggregation brings down the number of constraints. Note that the factored stiffness matrix from analysis is also directly reusable in this equation. The adjoint vector is then inserted into Eq. (37), yielding the general adjoint sensitivity expression, see Eq. (40).

$$\frac{{\textrm{d}}f}{{\textrm{d}}x^{(j)}} = \frac{\partial f}{\partial x^{(j)}} + {\varvec{\lambda }}^{\text {T}} \frac{\partial {\varvec{K}}}{\partial x^{(j)}} {\varvec{U}}$$
(40)

In this work, a semi-analytical approach is used where the adjoint vector is computed analytically, the stiffness matrix gradient \(\frac{\partial {\varvec{K}}}{\partial x^{(j)}}\) is found using central finite difference approximations and the partial derivative \(\frac{\partial f}{\partial x^{(j)}}\) is found using forward finite difference approximations. For the finite difference calculations, a step size of \(\Delta x = 10^{-5}\) is used for all criteria.

The specific terms for each criterion can then be found by application of the adjoint method. DSA of the buckling eigenvalues is available in literature and can be found in Rodrigues et al. (1995), Neves et al. (1995), and Sørensen et al. (2014). It is assumed that the eigenvalues are distinct, otherwise directional derivatives have to be employed, see Seyranian et al. (1994). Note that an adjoint problem is solved for each buckling mode included in the optimization, however, adjoint DSA is still more efficient compared to direct DSA due to the many design variables typical of the present problem.

The failure index derivative is expanded according to Eq. (34), see Eq. (41).

$$\frac{\partial {\text {FI}}_{PN}}{\partial x^{(j)}} = \frac{\partial {\text {FI}}_{PN}}{\partial {\varvec{FI}}}\left( \frac{\partial {\varvec{FI}}}{\partial x^{(j)}} + \frac{\partial {\varvec{FI}}}{\partial {\varvec{U}}} \frac{\partial {\varvec{U}}}{\partial x^{(j)}}\right)$$
(41)

Following the outlined adjoint approach, the final derivative expression is also achieved for this criterion, see Eq. (42).

$$\frac{\partial {\text {FI}}_{PN}}{\partial x^{(j)}} = \frac{\partial {\text {FI}}_{PN}}{\partial {\varvec{FI}}}\frac{\partial {\varvec{FI}}}{\partial x^{(j)}} -{\varvec{\lambda }}^{\text {T}}\frac{\partial {\varvec{K}}}{\partial x^{(j)}}{\varvec{U}}$$
(42)

Note that the partial derivative \(\frac{\partial {\varvec{FI}}}{\partial x^{(j)}}\) for candidate material variable is available analytically and is thus computed as such.

The derivative of fatigue damage is expanded in Eq. (43).

$$\frac{\partial D_{PN}}{\partial x^{(j)}} = \frac{\partial D_{PN}}{\partial \sigma _{xy}} \left( \frac{\partial \sigma _{xy}}{\partial x^{(j)}} + \frac{\partial \sigma _{xy}}{\partial {\varvec{U}}} \frac{\partial {\varvec{U}}}{\partial x^{(j)}}\right)$$
(43)

This is similarly reformulated using the adjoint approach to Eq. (44).

$$\frac{{\textrm{d}}D_{PN}}{{\textrm{d}}x^{(j)}} = \frac{\partial D_{PN}}{\partial \sigma _{xy}}\frac{\partial \sigma _{xy}}{\partial x^{(j)}} - {\varvec{\lambda }}^{\text {T}}\frac{\partial {\varvec{K}}}{\partial x^{(j)}} {\varvec{U}}$$
(44)

In this case, the partial derivative of the stress in structural coordinates with respect to design variables \(\frac{\partial \sigma _{xy}}{\partial x^{(j)}}\) is computed using forward finite difference for the thickness variables and analytically for the candidate material variables. For the remaining analytical partial derivatives in the failure and fatigue gradients, see Hermansen and Lund (2023).

5.6 Optimization strategy and auxiliary methods

An efficient approach to formulate the optimization problem has now been proposed. Nevertheless, the DMTO problem is still difficult to solve, as it involves many design variables, structural, and non-structural constraints, see Eq. (11). The non-structural constraints are however all linear which motivates using a framework that is able to manage such well. This is offered in Sequential Linear Programming (SLP) which is thus adopted in this work. The optimization framework is built around the Sparse Nonlinear Optimizer (Gill et al. 2005) that is used to solve the optimization problem. Auxiliary methods are implemented to successfully adapt SLP to the highly non-linear problem considered. The most basic addition is an adaptive move limit scheme. Such is essential to ensure that the optimizer does not oscillate between the two same points around a minimum due to the linear approximation of the optimization functions preventing the optimizer from converging. It also serves to improve convergence in general, as oscillations, that inevitably occur during the optimization, are treated promptly.

In the SLP framework, the structural functions are linearly approximated, which can lead to a poor representation during some iteration in the optimization. This may lead the optimization problem into infeasibility if not controlled properly, which will cause the optimizer to halt. To impose unconditional feasibility to the problem, a merit function approach (Svanberg 2007) is adopted, see Sørensen et al. (2014) for details and settings.

Still, because of the inaccurate representation, it can be difficult to return to feasibility, because the linear approximations of the structural functions appear so to the optimizer. To control the infeasibility and also improve convergence, an SLP-filter (Chin and Fletcher 2003; Sørensen and Lund 2015; Hermansen and Lund 2023) is introduced to reject poor solutions that may be found during the optimization. A poor solution is defined as having a larger objective function, in the context of minimization, or the infinity norm of the constraints being more infeasible than a previous solution. Moreover, solutions where any constraint exceeds a set infeasibility limit of \(u_{\text {lim}} = 0.01\) are rejected, and the optimization problem is solved again with reduced move limits. A new problem with tighter move limits is solved until a new solution that satisfies the criteria of the SLP filter is found or the convergence criteria are met.

To assess the quality of the achieved solution, the measure of non-discreteness (Sigmund 2007) is utilized. This measure determines the amount of (non) discreteness in the design. Two measures are used, tracking the discreteness of the density variables \(M_{\text {dnd}}\) and candidate variables \(M_{\text {cnd}}\) individually (Sørensen et al. 2014). These expressions are given in Eqs. (45) and (46).

$$\begin{aligned} M_{\text {dnd}}= & {} \frac{\sum \limits _{d=1}^{N_{d}}\sum \limits _{l=1}^{N_{l}}4 V^{(e,l)}\rho ^{(d,l)}(1-\rho ^{(d,l)})}{\sum \limits _{d=1}^{N_{d}}\sum \limits _{l=1}^{N_{l}} V^{(e,l)}} \times 100\%\end{aligned}$$
(45)
$$\begin{aligned} M_{\text {cnd}}= & {} \frac{\sum \limits _{d=1}^{N_{d}}\sum \limits _{l=1}^{N_{l}} 4 V^{(e,l)}\left( \rho ^{(d,l)}\right) ^{2} \prod \limits _{c=1}^{N_{c}} \left( \frac{1-x^{(p,l,c)}}{1-\frac{1}{N_{c}}} \right) }{\sum \limits _{d=1}^{N_{d}}\sum \limits _{l=1}^{N_{l}} V^{(e,l)} \rho ^{(d,l)}} \times 100\% \end{aligned}$$
(46)

Here, \(V^{(e,l)}\) is the volume of a layer.

Finally, a summary of settings for the various methods introduced in the paper is given in Table 5.

Table 5 An overview of the various parameters used to solve the optimization problem

6 Results

This section will present the results attained through the approach described throughout the paper. As dictated by the safety factors determined in Sect. 4.4, the right-hand side of each respective constraint is given, thus the optimization problem can be established, see Eq. (47).

$$\begin{aligned} \underset{({\varvec{x}},{\varvec{\rho }})}{\text {min}}&\quad \tilde{m} \\ {\text {s.t.}}&\quad \lambda _{\text {BLF}}^{(i,j)} \ge 2.36, \, \begin{aligned}&{\text {for}} \ i=1,2,\dots , 4\\&{\text {for}} \ j = 1,2,\dots , 8 \end{aligned}\\&\quad {\text {FI}}_{PN}^{(p,i)} \le 0.99, \, \begin{aligned}&{\text {for}} \ p = 1,2,\dots ,N_{\text {p}}\\&{\text {for}} \ i=1,2,\dots , 4 \end{aligned}\\&\quad D_{PN}^{(p,i)} \le 0.99, \, \begin{aligned}&{\text {for}} \ p = 1,2,\dots ,N_{\text {p}}\\&{\text {for}} \ i=1,2,\dots , 4 \end{aligned}\\&\quad {\textit{Manufacturing Constraints}}\\&\quad x^{(p,l,c)} \in [0,1], \ {\text {for}} \ p = 1, 2, \dots , N_{p} = 10\\&\qquad\qquad\qquad\qquad\ \ \, \, l = 1, 2, \dots , N_{l}=20\\&\qquad\qquad\qquad\qquad\ \ \, \, c = 1, 2, \dots , N_{c}\\&\quad \rho ^{(d,l)} \in [0,1], \ \ \ {\text {for}} \ d = 1, 2, \dots , N_{\text {d}}=214\\&\qquad\qquad\qquad\qquad\ \ \, \, l = 1, 2, \dots , N_{\text {l}}=20\\ \end{aligned}$$
(47)

Here, \(\tilde{m}\) indicates the mass merit function, and Manufacturing Constraints abbreviates the candidate sum, through-the-thickness change, as well as ply-drop constraints of Eqs. (7)–(10). The number of candidate materials \(N_{c}\) depends on the ply-group considered, see Fig. 7, hence, \(N_{c} = 3\) for fiber layers and \(N_{c} = 1\) for core layers. Note a constraint limit of 0.99 is used for the failure index \({\text {FI}}_{PN}\) and fatigue damage \(D_{PN}\) constraints, such that the criteria never become violated, despite the allowance of \(u_{\text {lim}}=0.01\) in the SLP-filter. Remark also, that these aggregated constraints are multiplied the adaptive constraint scaling factor as described in Sect. 5.3. Additionally, \(N_{j} = 8\) is chosen for the optimization, and no sudden change in the critical buckling load factor has been observed during optimization trials. Convergence of the problems is defined as a relative change in design variables between iterations of \(0.1\%\). In total, the presented problem contains 4848 design variables (440 material and 4408 thickness), 1744 structural constraints, and 6834 manufacturing constraints. The problem is solved using an in-house developed Fortran 95 program: MUST (the MUltidisciplinary Synthesis Tool) that contains a parallelized implementation of the contents in Sects. 25.

6.1 Problem behavior

The problem converges in 204 iterations, and the associated convergence history is shown in Fig. 9. It is observed that all criteria appear to be quite stable throughout optimization despite the applied continuation scheme. Particularly remarkable is the highly non-linear fatigue damage being controlled well by the applied inverse P-mean norm scaling strategy of Eq. (31). The mass has been reduced 23% from the starting point, see Fig. 9a, which is attributed to thickness removal, as the ply groups with fiber and core layers are predetermined as a consequence of the parametrization, see Fig. 7. Measures of non-discreteness of \(M_{\text {cnd}}=1.49\%\) and \(M_{\text {dnd}}=4.06\%\) are achieved for the resulting design, see Eqs. (45) and (46).

Fig. 9
figure 9

Convergence of the criteria functions. Modification of the penalty factors is observable, when the constraints suddenly increase in value, most notable for the static failure and fatigue damage constraints

Notable from all criteria convergence plots, Fig. 9b–d, is that the flap-wise load cases are critical, with associated constraints being active, or very close to, at convergence. The non-criticality of the edge-wise load cases may be a result of the leading and trailing edges are assigned the same initial layup as the spar cap. Due to the layup of these regions being over-dimensioned in the initial design, the optimizer could have settled on a poor local minimum prematurely. An improvement could be achievable by modifying the initial design to better reflect the loading applied to these regions.

It is evident from the convergence plots, that particularly the edge-wise fatigue damage constraints are significantly reduced, when the inverse P-mean continuation scheme, see Table 4, is applied, see Fig. 9d. Unfortunately, the optimizer seems to have settled well on the optimum once the inverse P-mean continuation starts, and the final design is hence not impacted much by the change. If improvements are desirable, the continuation scheme could be modified accordingly through numerical experimentation.

6.2 Optimized laminate design and structural response

The optimized laminates for the monolithic regions are illustrated in Fig. 10, see also Fig. 1 for the denominations used. As observed, the spar caps have distinct material choice, with the majority being UD and the top layer being biax, see Fig. 10b and c. The top layer is subject to the largest bending moments and therefore needs the biax layer as UD does not exhibit sufficient transverse and shear strength. However, the failure and fatigue constraints are not quite active in the spar caps. The reason is likely that the thickness of the top layer is fixed during optimization indicating the outer biax layer could be reduced further. The failure constraint is however active in the following UD layer on the downwind side, see the failure distribution in Fig. 12c, due to significant shear and a biax layer could therefore be desirable here. A probable reason for not achieving an active constraint here is the optimizer settling on material choice faster than thickness distribution as a consequence of limitations imposed by the thickness constraints of Eq. (8).

Fig. 10
figure 10

Laminate design for regions containing majorly UD layers. Material designations are given in Fig. 10a. Zero thickness indicates the outer mold, as the layup is offset from here in the shell element formulation. The limit on the y-axis is the thickness of the original layup, i.e., 80 mm

The leading edge plies have been selected as mostly biax, see Fig. 10d and e. This choice seems to be motivated by a combination of the load case not being severe, an initial design that is far from the optimum, and the thickness constraints that slow the removal of material. It is observable that the leading edge is only close to being critical locally in static failure, see Fig. 12c, which further supports that more material could be removed in this region. Furthermore, the laminates are observed to contain some non-discrete plies, which can also be a result of the loading being less severe in this area, thus requiring additional penalization to reach a discrete choice of material (or reducing the laminate thickness in the initial design as previously discussed).

In the trailing edge laminates, see Fig. 10f and g, the choice of material is distinct. The laminates however contain cross plies, particularly in the downwind side, which is attributed to a local minimum that is reached for the same reasons as the leading edge. However, the presence of cross plies is not as pronounced as the presence of biax in the leading edge. The level of static failure is only moderate in the trailing edge, however buckling is critical near the root, see Fig. 12b.

A general observation is that local thickness valleys, i.e., significantly lower thickness in a domain compared to those adjacent to it, are not particularly prominent in the optimized monolithic regions. This is likely also a result of using the thickness constraints, which governs how much the thickness of a stack can change at a time. Thus, using the thickness constraints may help reduce the amount of post-modification of the design, if the design has to conform to e.g., ply-drop rules. On the other hand, the constraints may cause the design to end up in a poor local minimum, as observed with the edge regions, and if design exploration is the objective of the optimization, it may be undesirable to include these.

Fig. 11
figure 11

Laminate design for core regions. Materials are designated in Fig. 11a. Zero thickness indicates the outer mold, as the layup is offset from here in the shell element formulation. The limit on the y-axis is the thickness of the original layup, i.e., 80 mm

The optimized core laminates are illustrated in Fig. 11. As observed, the material choice is close to being distinct for every laminate, with the exception of a mostly cross-ply layer in the trailing edge core regions, see Fig. 11d and f. The laminates are observed to contain more local thickness valleys compared to the monolithic regions, which is a consequence of the thicker core layers. The main design driver for the trailing edge core regions, shown in Fig. 11d–g, is buckling, which is pronounced in both the downwind side for load case 1, illustrated in Fig. 12a, and the upwind side for load case 3. Static failure is also observed to be critical near the root in these regions as seen from Fig. 12c. For the leading edge on the upwind side, static failure and fatigue damage seem to be the design driver as evident from Fig. 12c and d. There is however a portion of the blade that is not subject to significant static failure, and thus more material could likely be removed in the region. On the leading edge core downwind side there are a few local areas with static failure close to being critical, however it is evident that more material can be removed from this area. The non-criticality of these regions may also be attributed to the ply-drop constraints, which dictate that only one ply drop is allowed between adjacent plies, and thus the thickness of the spar cap may be the dimensioning factor. Note, the thickness distribution contains some intermediate density that is observable by all domains not having the same thickness in Figs. 10 and 11.

Fig. 12
figure 12

Optimized structural response of the blade root section. Note the de-parametrized domain next to the load introduction is not included in the visualization

7 Discussion

As evident from the paper, several methods and simplifications are necessary to be able to solve the presented problem. Although the problem treated is challenging, it behaved quite stable, as evident from the convergence plots, as a result of the applied approach. Nevertheless, a number of alternative approaches are available which could improve the results.

The analyses used in this work has been kept as simple as possible which can be acceptable for preliminary design. However, it could be interesting to include more detail through more sophisticated analyses to see if such leads to further improvements in the achieved design–either as additional reductions in objective or less tedious postprocessing. For buckling evaluation, simple linear analysis is applied in this work, however typical blade design is carried out using non-linear analysis. In fact, application of non-linear buckling analysis allows for reducing the safety factors dictated by design guidelines, see Sect. 4.4. The inclusion should however be carefully considered with respect to the increase in computational cost associated with using a non-linear solver.

In terms of static failure, multi-axial effects are not accounted for by the simple max strain and stress criteria. Such could easily be included through e.g., the well-known Tsai–Wu or Hashin criteria. Additionally, the design guidelines also prescribe inter-fiber failure evaluation using Puck’s criterion. The inclusion of Puck in the optimization is challenging, as it is essentially a critical-plane approach, which involves an exhaustive search for the plane where the maximum strain/stress are acting. Similar could be done in the fatigue analysis to further improve the fatigue damage estimation, see e.g., Dong et al. (2016). The computational cost of such a search is substantial, and its inclusion is therefore not straightforward for the problem considered. Optimization with critical-plane methods has been demonstrated in Sartorti et al. (2023) of both academic and industrial metal structures. The authors apply the critical-plane approach to hotspots identified prior to the optimization, e.g., the rounding in the well-known L-beam example, and the fatigue analysis therefore typically involves around \(10^{3}\) elements. As it can be difficult to know a priori, where the hotspots are on a wind turbine blade, it is however likely not feasible to adopt such an approach. Also note that the fatigue model could also be extended to take into account additional fatigue-specific effects, which is discussed in detail in Hermansen and Lund (2023).

As opposed to previous work (Sjølund and Lund 2018), this work has used only four design load cases in the analysis. This is acceptable using up-scaled safety factors according to the design guidelines, however it may be desirable to include twelve load cases instead as it may change the design. Mixed flap- and edgewise load cases are omitted in the present, i.e., only extremal flap- and edge-wise load cases are included, which is acceptable according to design standards, but it is questionable if the design is in fact conservative by increasing the safety factors with the prescribed amount for the given case. On the other hand, using four load cases may be sufficient for the preliminary design, which could be followed by e.g., a thickness sizing optimization, with additional load cases and higher-fidelity analyses.

A counterweight to the increase in computational cost of including more load cases, using non-linear criteria, etc., can be to use linear shell elements and a fully analytical design sensitivity analysis framework. The currently most costly part of the framework is computation of the finite difference approximations to the partial derivatives presented in Sect. 5.5. Deriving the analytical gradients could therefore allow for increasing fidelity elsewhere e.g., of the model, analyses, or optimization problem. This is left for future work.

The inverse P-mean damage scaling used for stabilizing the fatigue damage is observed to handle the non-linearity well, but the damage is not well-distributed in the optimized design unlike what has been achieved in previous works e.g., Olesen et al. (2021) and Hermansen and Lund (2023). The resulting damage distribution depends on finding the correct continuation strategy to the inverse P-mean scaling factors which can be difficult to determine. Through numerical testing, a better scheme could be found, but it is undesirable for this problem because of the associated computational cost of solving it.

The ply-drop constraints used in the work are simplistic and are formulated as allowable number of layers in adjacent domains, see Eq. (10). It is desirable to formulate more sophisticated ply-drops constraints that are independent of the patch/domain parametrization. In Sjølund and Lund (2018), ply-drop have been taken into account in an average sense over the domains, but this implies postprocessing is necessary to realize the design. It has been demonstrated in other works that by utilizing the alternative multi-level optimization framework, it is possible to enforce more sophisticated manufacturing constraints, see e.g., Scardaoni and Montemurro (2022). Multi-level optimization handles the optimization in two steps; the first step concerns optimizing laminate performance through a lamination parameter or polar parametrization, and the second step is a realization step, where numerous manufacturing constraints are taken into account, see e.g., review by Albazzan et al. (2019). One of the key benefits of multi-level approaches is the reduction in number of design variables entailed by the parametrization, and as a result there has been significant development dedicated over recent years such that inclusion of numerous structural criteria has been demonstrated, importantly buckling (IJsselmuiden et al. 2010; Izzi et al. 2023) and strength (IJsselmuiden et al. 2008; Izzi et al. 2021). Despite the potential reduction in problem size, DMTO is yet favored over available multi-level approaches because of the materials in wind turbine blades are rolled-out non-crimp fabrics with straight fibers and large panels of core material making DMTO particularly suitable for the application, and it follows, that the number of design variables is manageable.

8 Conclusion

This paper has presented a framework for carrying out efficient multi-material and topology optimization of wind turbine blades. Creation of the blade model root section for the purpose of optimization is shown along with application of four design load cases, which criticality are assessed in subsequent structural analysis. Parametrization of the structure is carried out using the Discrete Material and Direct Thickness Optimization (DMDTO), which is particularly suitable for sandwich structures that constitutes a majority of the blade structure. The structure is subject to linear buckling, static failure, and fatigue damage constraints for the four design load cases, and the associated analysis procedures are hence defined. The two latter structural criteria are particularly difficult to handle in optimization, and a number of methods are therefore introduced to improve convergence of the problem, specifically the handling of singular optima, damage scaling, and constraint locality. The design sensitivity analysis is then presented along with a semi-analytical approach to compute the resulting gradients. A Sequential Linear Programming (SLP) framework is subsequently described, which uses a number of auxiliary techniques to further enhance the likelihood of finding a strong optimum. These are a continuation approach, adaptive move limits, a merit function, and an SLP-filter. The effectiveness of the approach is demonstrated, yielding a reduction in mass of \(23\%\) with respect to the initial design. Variable-thickness laminates are achieved in the optimized design, and these are almost fully discrete. Particularly good distributions of buckling and static failure are achieved, with fatigue damage being more localized due to its highly non-linear behavior. The work emphasizes the potential of applying DMDTO in the early structural design phases, which could offer the designer an excellent point of departure for subsequent detail design.