1 Introduction

Structural optimisation is a well-established field of research in applied mechanics. Depending on the choice of the underlying design variables, the chosen type of optimisation can be further classified. Topology optimisation for example, generally aims to reshape a structure by placing holes in an initially solid body, therefore reducing volume and weight, while additionally controlling its stiffness. The well-known SIMP (Solid Isotropic Material with Penalisation) defines elemental densities as the design variables of the optimisation. By constraining their value between full material (density 1) and no material (density 0), holes can be placed into a predefined geometry. For an overview, cf. [10, 52, 53]. In this work however, shape optimisation is the chosen type of optimisation. In this field of structural optimisation, the overall shape of the body is redesigned to minimise the stated optimisation problem, cf. [9, 11, 16, 31, 55]. For their effectiveness, gradient-based strategies are applied to solve the optimisation problems. This in turn requires the gradients of objectives and constraints and therefore sensitivity analysis has to be conducted, cf. [14, 15, 44]. In this work, a variational approach is chosen, proposed in [4,5,6]. More information regarding this approach and its beneficial uses in deriving the gradients is highlighted upon in [33], and additionally compared to other methods, cf. [49, 64].

Generally, structural optimisation is based on underlying elastic material behaviour. To further improve the predictive ability of the optimisation, the material behaviour must be enhanced to accurately model relevant physical effects. A natural extension on this regard leads to inclusion of plastic effects. Non-elastic material behaviour however requires handling of load-path dependent effects and therefore history variables that have to be updated. This leads to increased computational effort as well as additional complexity in derivation and computation of the resulting sensitivities, cf. [40, 41, 44, 62].

While modelling of plastic effects, and therefore their potential inclusion in optimisation, is well-established, modelling of damage mechanisms is still a field of current research. Nonetheless, modelling of damage behaviour has been a field of material mechanics for a long time, dating back to research of Kachanov [30]. Damage, as understood in this work, is the degradation of the elastic material properties due to extensive loading. Local defects on the microscale, such as microcracks and voids, start to form, grow, and coalesce, eventually leading to the degradation of the macroscopic behaviour of a given body, cf. [50]. For an overview of the field of continuum damage mechanics and extension to phenomenological effects, cf. e.g. [45]. To capture these degradation effects, typically a \(1-d\) approach is utilised, established by [36, 37], which has been applied in many following modelling methods, e.g. cf. [13, 24, 61]. Another well-known material model, especially in the context of ductile damage, is the work by Gurson [28] which is motivated by the micromechanical void volume fraction. This model was extended by Tvergaard and Needleman [60] and is known as the Gurson–Tvergaard–Needleman (GTN) model, which is widely used in the simulation of damage processes within industrial applications.

The main problem of these standard, local models is a loss of ellipticity within the governing equations and results, in the context of finite element methods, in inherent mesh dependency of the solution. That is, with increasing mesh density, the damage tends to localise in smaller areas of the finite-element mesh and straying further from physical accurate results. Many approaches to circumvent this problem have been proposed to regularise the damage evolution and generate mesh-independent result. One approach regularises the damage by introducing a rate dependent damage evolution equation, cf. [2, 21, 34]. In [7, 8] a non-local damage quantity is defined, which is derived from an integral over a pointwise, local damage quantity. Alternatively, gradients can be used to regularise the damage evolution by introducing the damage variable as non-local quantity and regularising that quantity by its gradient. This approach however, has the drawback of difficult treatment of the now global Karush–Kuhn–Tucker conditions, cf. [27, 38]. A more applicable method was proposed in [48] and further developed in [19, 59], with its name finally denoted in [24] as the so-called micro-morphic approach. It regularises a newly introduced non-local damage quantity by its gradient and couples this quantity to a local one by means of a penalty term. This allows solving of the Karush–Kuhn–Tucker conditions on the local scale, while still regularising the global problem. This is the chosen approach for the model applied in this work, which has been derived in [58]. Many additional contributions base their work on this field of research. In [35, 61], anisotropic damage is regularised, while regularised damage is coupled to plasticity in e.g. [13, 20, 32]. With this approach it is also possible to adapt commercial software, e.g. Abaqus, to incorporate regularised damage. By exploiting the similarities within the heat equation, it is possible to use the temperature variable as damage terms, cf. [47].

Due to the numerical challenges, as well as the additional computational effort, research of damage problems in structural optimisation is relatively scarce. In [1] for example, shape optimisation methods are used to predict the evolution and propagation of cracks. In [27] shape optimisation is applied to a large strain non-local damage model and the results are 3d printed and their experimental results compared to the simulations. A variational approach was utilised to derive the gradients, but due to the chosen material model, no internal history variables needed consideration. This is the focus of [5], wherein the same variational approach is used to derive sensitivities of a local damage model for large strains. These sensitivities were subsequently used to optimise geometries under the aspect of their damage accumulation. In [46] a level-set based topology optimisation was applied to a non-local damage model, wherein the structures of a purely elastic optimisation were compared to the problem with an active damage model. In [3] results of topology based optimisation was compared to two different dam age modelling approaches. The first solved the fully nonlinear damage problem in each load-step, while the second, simplified approach solves the damage distribution in a single step, therefore drastically reducing the computation time at the cost of accuracy in results.

Alternative approaches try to circumvent damage modelling by controlling damage, fracture or fatigue quantities on a post-processing or threshold basis, cf. [18, 42]. In [51] for example, the analysis for the topology optimisation is computed with a linear elastic material and each subsequent optimised design verified regarding its damage state in a post-processing verification procedure.

This paper is structured as follows. In Sect. 2, the standard nonlinear kinematics are briefly described. Additionally, an enhanced kinematic concept is introduced, which is applied for the derivation of the sensitivities later on. In Sect. 3, the ductile damage model from [58] is summarised and its implementation into a finite element framework presented. Section 4 deals with the sensitivity analysis for the described material model. A variational approach is utilised to compute the gradients for specific objectives and constraints, detailed in Sect. 4.3. In Sect. 5, two examples are discussed which deal with damage and compliance optimisation. Finally, Sect. 6 summarises the findings and gives an outlook on possible extensions.

1.1 Notation

In this paper, vectors are small letters with bold face, italic font, tensors of second order are large letters with bold face, italic font, and tensors of fourth order are larger letters with blackboard-bold font, e.g.

$$\begin{aligned} \begin{aligned}&\varvec{a} = a_i\,\varvec{e}_i,\quad \varvec{A} = A_{ij}\,\varvec{e}_i\otimes \varvec{e}_j,\\&{\mathbb {A}} = A_{ijkl}\,\varvec{e}_i\otimes \varvec{e}_j\otimes \varvec{e}_k\otimes \varvec{e}_l. \end{aligned} \end{aligned}$$
(1)

with the fixed orthonormal basis \(\varvec{e}_{\{1,2,3\}}\). A single contraction is denoted by a dot product, e.g.

$$\begin{aligned} \varvec{a}\cdot \varvec{b} = a_i\, b_i,\quad \varvec{A}\cdot \varvec{b} = A_{ij}\, b_j\,\varvec{e}_i, \end{aligned}$$
(2)

while double contractions are donated with a colon, e.g.

$$\begin{aligned} \varvec{A}:\varvec{B} = A_{ij}\, B_{ij},\quad {\mathbb {A}}:\varvec{B} = A_{ijkl}\,B_{kl}\,\varvec{e}_i\otimes \varvec{e}_j. \end{aligned}$$
(3)

In addition, two special dyadic products for tensors of second order are defined as

$$\begin{aligned} \varvec{A}\,{\overline{\otimes }}\,\varvec{B}&= A_{ik}\,B_{jl}\,\varvec{e}_i\otimes \varvec{e}_j\otimes \varvec{e}_k\otimes \varvec{e}_l, \end{aligned}$$
(4)
$$\begin{aligned} \varvec{A}\,{\underline{\otimes }}\,\varvec{B}&= A_{il}\,B_{jk}\,\varvec{e}_i\otimes \varvec{e}_j\otimes \varvec{e}_k\otimes \varvec{e}_l, \end{aligned}$$
(5)

as well as the special dyadic product for a tensor of second order and a vector, i.e.

$$\begin{aligned} \left[ \varvec{A}\,{\overline{\otimes }}\,\varvec{a}\right] \cdot \varvec{b} = \left[ A_{ik}\,a_j\right] b_k\,\varvec{e}_i\otimes \varvec{e}_{j}. \end{aligned}$$
(6)

Discrete vectors and matrices are denoted in bold face Roman letters, i.e.

$$\begin{aligned} \varvec{\textrm{a}} = \left[ a\right] _i\in {\mathbb {R}}^n,\quad \varvec{\textrm{A}} = \left[ A\right] _{ij}\in {\mathbb {R}}^{n\times m}. \end{aligned}$$
(7)

2 Kinematics

In this section, a brief overview on the nonlinear kinematics is presented.

2.1 Standard kinematics

A referential body configuration \({\mathcal {B}}_0\subset {\mathbb {R}}^3\) is considered in its initial, undeformed state in the three-dimensional setting. Any point \(\varvec{X} \in {\mathcal {B}}_0\) in this referential position can be mapped to the point \(\varvec{x}\in {\mathcal {B}}_t\) in the deformed, current configuration \({\mathcal {B}}_t\in {\mathbb {R}}^3\) at time \(t\in \left[ 0,T\right] \). The nonlinear mapping \(\varvec{\varphi }\), see Fig. 1, is defined as

$$\begin{aligned} \varvec{\varphi }:{\left\{ \begin{array}{ll} {\mathcal {B}}_0 \longrightarrow {\mathcal {B}}_t\\ \varvec{X} \,\mapsto \, \varvec{x}=\varvec{\varphi }(\varvec{X},t) \end{array}\right. }. \end{aligned}$$
(8)

With respect to the reference configuration, given an arbitrary differentiable function, the gradient and divergence operators can be defined as

$$\begin{aligned} \text {Grad}({\bullet }) = \nabla _{\varvec{\!X}}(\bullet ) \quad \text {and}\quad \text {Div}({\bullet }) = \nabla _{\varvec{\!X}}\cdot (\varvec{\bullet }), \end{aligned}$$
(9)

and with respect to the current configuration

$$\begin{aligned} \text {grad}({\bullet }) = \nabla _{\varvec{\!x}}(\bullet )\quad \text {and}\quad \text {div}({\bullet }) = \nabla _{\varvec{\!x}}\cdot (\varvec{\bullet }). \end{aligned}$$
(10)

The deformation gradient can be expressed as

$$\begin{aligned} \varvec{F} := \text {Grad}({\varvec{\varphi }}) = \nabla _{\varvec{\!X}}\varvec{\varphi } = \frac{\partial \left( \varvec{X} + \varvec{u}\right) }{\partial \varvec{X}}, \end{aligned}$$
(11)

with \(\varvec{u} = \varvec{x} - \varvec{X}\) as the displacement vector field. The deformation gradient maps an infinitesimal referential line element \(\textrm{d}\varvec{X}\) to its current counterpart \(\textrm{d}\varvec{x}\). The corresponding mapping of volumes, i.e. referential volume \(\,\text {d}V\) to its current counterpart \(\,\text {d}v\), is captured by the Jacobian map J, i.e.

$$\begin{aligned} J =\text {det}(\varvec{F}) = \frac{\,\text {d}v}{\,\text {d}V}. \end{aligned}$$
(12)

Since this overview is rather brief, for more information, cf. e.g. [12].

2.2 Enhanced kinematics

In standard, nonlinear kinematics, the reference geometry \(\varvec{X}\) is assumed to be fixed. Application of structural optimisation, however, introduces a variable reference configuration within each optimisation step. For the derivation of the sensitivities, it is therefore beneficial to enhance the viewpoint of the underlying kinematics by the so-called intrinsic formulation, cf. [6, 39, 43]. This concept introduces an additional domain \({\mathcal {B}}_\zeta \subset {\mathbb {R}}^3\) with the intrinsic coordinate \(\varTheta \in {\mathcal {B}}_\zeta \), see Fig. 1. Exploitation of the (sufficiently smooth) mapping between the three configurations allows the calculation of derivatives w.r.t. the current configuration, without any dependencies of the referential configuration. The additional mappings read

$$\begin{aligned} \varvec{\kappa }:{\left\{ \begin{array}{ll} {\mathcal {B}}_\zeta \longrightarrow {\mathcal {B}}_0\\ \varvec{\varTheta } \,\mapsto \, \varvec{X}=\varvec{\kappa }(\varvec{\varTheta }) \end{array}\right. }, \end{aligned}$$
(13)

and

$$\begin{aligned} \varvec{\mu }:{\left\{ \begin{array}{ll} {\mathcal {B}}_\zeta \longrightarrow {\mathcal {B}}_t\\ \varvec{\varTheta } \,\mapsto \, \varvec{x}=\varvec{\mu }(\varvec{\varTheta },t) \end{array}\right. }, \end{aligned}$$
(14)

with the additional operations

$$\begin{aligned} \text {GRAD}({\bullet }) = \nabla _{\varvec{\!\varTheta }}(\bullet )\quad \text {and}\quad \text {DIV}(\bullet ) = \nabla _{\varvec{\!\varTheta }}\cdot (\bullet ). \end{aligned}$$
(15)

With this, counterparts to the deformation gradient the Jacobian can be derived, i.e.

$$\begin{aligned} \begin{aligned} \varvec{K}&:= \nabla _{\varvec{\!\varTheta }}\kappa \quad \text {and}\quad J_K= \text {det}(\varvec{K}),\\ \varvec{M}&:= \nabla _{\varvec{\!\varTheta }}\mu \quad \text {and}\quad J_M= \text {det}(\varvec{M}). \end{aligned} \end{aligned}$$
(16)

Consequently, volume integrals can be mapped between the different configurations, such that

$$\begin{aligned} \int _{{\mathcal {B}}_0}\,\text {d}V=\int _{{\mathcal {B}}_t} \frac{1}{J} \,\text {d}v=\int _{{\mathcal {B}}_\zeta } J_K\,\text {d}V_\zeta . \end{aligned}$$
(17)

With this concept at hand, it is possible to multiplicatively decompose the deformation gradient into two mappings

$$\begin{aligned} \varvec{F} = \frac{\partial \varvec{x}}{\partial \varvec{\varTheta }}\cdot \frac{\partial \varvec{\varTheta }}{\partial \varvec{X}} = \varvec{M}\cdot {\varvec{K}}^{-1}, \end{aligned}$$
(18)

which allows the derivation of the total variation of the deformation gradient as

$$\begin{aligned} \begin{aligned} \delta \varvec{F}&= \delta _{\varvec{\varphi }}\varvec{F} + \delta _{\varvec{X}}\varvec{F}\\&= \text {Grad}({\delta \varvec{\varphi }}) - \text {Grad}({\varvec{\varphi }})\cdot \text {Grad}({\delta \varvec{X}}). \end{aligned} \end{aligned}$$
(19)

Remark 1

The benefits of the chosen (variational) approach are not detailed in this work. In [33], a thorough comparison between this enhanced concept and its application within the variational sensitivity framework are analysed, and compared to other approaches in literature, like the material derivative approach, cf. [64], or the domain parametrisation approach, cf [49]. Applications of this concept can be found in literature. In [39,40,41] this approach was applied to elasto-plastic problems, while it is applied to the extended finite element method in [43, 63]. Additionally, in [27] the sensitivities for a non-local damage problems were derived and in [33] this method was applied to FE\(^2\) problems.

Fig. 1
figure 1

Enhanced kinematic concept

3 Non-local ductile damage

In this section the underlying material model is summarised which has been derived in [58]. For further details, the reader is advised to analyse the cited literature, which describes all necessary derivations in detail that have been omitted in the summary here. Section 3.1 briefly outlines the adjustments applied to the global energy with the aim of a regularising behaviour for the damage evolution. In Sect. 3.2, the local, constitutive material model is summarised. In Sect. 3.3, the finite element discretisation is applied to the weak forms derived in Sect. 3.1.

3.1 Non-local energy contributions

The main problem with classical, local damage models is the inherent mesh-dependence of the simulation results. To circumvent this problem, the damage has to be regularised, for example by introducing the gradient of damage as additional information within the underlying model description. While in theory many different approaches are possible, like moving the local damage variable to the global scale and solving the constitutive equations at there, cf. [27, 38], nowadays the so-called micro-morphic approach is often applied. The basic idea is to introduce a non-local damage variable \(\phi \), which is coupled to a local damage quantity d by means of a penalty approach, cf. [19, 24, 48]. This enables regularisation of the non-local variable, while all constitutive equations can be solved on the local scale. The non-local energy contribution thus reads

$$\begin{aligned} \varPsi ^\textrm{nl}= \frac{c_\textrm{d}}{2}\Vert \nabla _{\varvec{\!X}}\phi \Vert ^2 + \frac{\beta _\textrm{d}}{2}\left[ \phi - d\right] ^2, \end{aligned}$$
(20)

where the first additive term regularises the non-local damage and is weighted by the regularisation parameter \(c_\textrm{d}\). The second term couples the non-local to the local damage quantity, forcing equilibrium of these two quantities. The above framework utilises the referential gradient \(\nabla _{\varvec{\!X}}\phi \). Alternatively, a spatial gradient \(\nabla _{\varvec{x}}\phi \) could also be employed, see Remark 1 of [58]. This non-local energy contribution can be coupled to a local part, resulting in the total Helmholtz energy

$$\begin{aligned} \varPsi = \varPsi ^\textrm{loc}(\varvec{F},\varvec{h}^\textrm{p},d) + \varPsi ^\textrm{nl}(\varvec{F},\varvec{h}^\textrm{p},d,\phi ,\nabla _{\varvec{\!X}}\phi ). \end{aligned}$$
(21)

The new additional variables are the deformation gradient \(\varvec{F}\) and the set of internal history variables associated with plasticity \(\varvec{h}^\textrm{p}\). One benefit of this approach is, due to the setup of the energy term, the choice of a local contribution \(\varPsi ^\textrm{loc}\) can, in theory, be of any type. Furthermore, this eases the numerical implementation effort, since this approach does not require solving any of the resulting Karush–Kuhn–Tucker conditions on the global scale.

The total energy for a quasi-static system splits into an internal and external part and reads

$$\begin{aligned} \varPi&= \varPi _\textrm{int} + \varPi _\textrm{ext} = \varPi _\textrm{int}^\textrm{loc} + \varPi _\textrm{int}^\textrm{nl} + \varPi _\textrm{ext} \end{aligned}$$
(22)
$$\begin{aligned}&= \int _{{\mathcal {B}}_0}\varPsi \,\text {d}V- \int _{{\mathcal {B}}_0}\rho _0\,\varvec{b}_0\cdot \varvec{\varphi }\,\text {d}V- \int _{\partial {\mathcal {B}}_0}\overline{\varvec{t}}_0\cdot \varvec{\varphi }\,\text {d}A. \end{aligned}$$
(23)

The external energy contribution includes the body forces \(\varvec{b}_0\), which are weighted by the referential mass density \(\rho _0\), and the traction forces \(\overline{\varvec{t}}_0\) applied on the surface \(\partial {\mathcal {B}}_0\). The postulate of minimum potential energy, i.e.

$$\begin{aligned} \delta _{\varvec{\varphi }}\varPi&= 0, \end{aligned}$$
(24)
$$\begin{aligned} \delta _\phi \varPi&= 0, \end{aligned}$$
(25)

results in the two weak forms for the mechanical and damage part

$$\begin{aligned} r^\varphi&= \int _{{\mathcal {B}}_0}\frac{\partial \varPsi }{\partial \varvec{F}}:\nabla _{\varvec{\!X}}\delta \varvec{\varphi } \,\text {d}V- \rho _0\int _{{\mathcal {B}}_0}\varvec{b}_0\cdot \delta \varvec{\varphi }\,\text {d}V\nonumber \\&\quad -\int _{\partial {\mathcal {B}}_0}\overline{\varvec{t}}_0\cdot \delta \varvec{\varphi }\,\text {d}A= 0 , \end{aligned}$$
(26)
$$\begin{aligned} r^\phi&= \int _{{\mathcal {B}}_0}\left[ \frac{\partial \varPsi }{\partial \nabla _{\varvec{\!X}}\phi }\cdot \nabla _{\varvec{\!X}}\delta \phi +\frac{\partial \varPsi }{\partial \phi }\delta \phi \right] \,\text {d}V=0, \end{aligned}$$
(27)

and can be combined into

$$\begin{aligned} \varvec{r} = \begin{bmatrix} r^\varphi \\ r^\phi \end{bmatrix} = \varvec{0}. \end{aligned}$$
(28)

These weak forms are subsequently discretised in Sect. 3.3 for the finite element implementation. The partial derivatives in the above equations can be identified as the first Piola–Kirchhoff stress tensor \(\varvec{P}^\textrm{K}\), as well as the non-local damage driving forces \(\varvec{Y}\) and Y, i.e.

$$\begin{aligned} \varvec{P}^\textrm{K}:=\frac{\partial \varPsi }{\partial \varvec{F}},\qquad \varvec{Y}:=\frac{\partial \varPsi }{\partial \nabla _{\varvec{\!X}}\phi },\qquad Y:=\frac{\partial \varPsi }{\partial \phi }. \end{aligned}$$
(29)

3.2 Constitutive equations

For the local constitutive model, the deformation gradient \(\varvec{F}\) is split multiplicatively into an elastic \(\varvec{F}^\textrm{e}\) and plastic part \(\varvec{F}^\textrm{p}\), i.e. \(\varvec{F} = \varvec{F}^\textrm{e}\cdot \varvec{F}^\textrm{p}\), the typical modelling approach for large strain plasticity, cf. [22, 54]. Based on this, the spectral decomposition of the elastic left Cauchy-Green deformation tensor reads

$$\begin{aligned} \varvec{b}^\textrm{e}= \varvec{F}^\textrm{e}\cdot \left[ \varvec{F}^\textrm{e}\right] ^t = \sum _{i=1}^{3}\left[ \lambda ^\textrm{e}_i\right] ^2 \,\varvec{n}_i\otimes \varvec{n}_i. \end{aligned}$$
(30)

The logarithmic strains \(\varvec{\varepsilon }^\textrm{e}\) are defined as

$$\begin{aligned} \varvec{\varepsilon }^\textrm{e}:= \sum _{i=1}^{3}\ln (\lambda ^\textrm{e}_i) \,\varvec{n}_i\otimes \varvec{n}_i= \sum _{i=1}^{3}\varepsilon _i^\textrm{e} \,\varvec{n}_i\otimes \varvec{n}_i, \end{aligned}$$
(31)

which can be additionally split into an volumetic and an isochoric part, i.e.

$$\begin{aligned} \varepsilon ^\textrm{e,vol}:= \sum _{i=1}^{3} \varepsilon _i^\textrm{e}, \quad {\varvec{\varepsilon }^\textrm{e}}^\textrm{,iso}:= \sum _{i=1}^{3}\left[ \varepsilon _i^\textrm{e}-\frac{1}{3}\varepsilon ^\textrm{e,vol}\right] \varvec{n}_i\otimes \varvec{n}_i.\nonumber \\ \end{aligned}$$
(32)

With this split in strains, the local Helmholtz energy \(\varPsi ^\textrm{loc}\) is also split into an volumetric part \(\varPsi ^\textrm{vol}\) and an isochoric part \(\varPsi ^\textrm{iso}\). With the additional plastic contribution \(\varPsi ^\textrm{pl}\), the local Helmholtz energy is specified as

$$\begin{aligned} \varPsi ^\textrm{loc}(\varvec{\varepsilon }^\textrm{e},d,\alpha )&= \frac{K}{2}f^\textrm{vol}(d)\left[ \text {tr}({\varvec{\varepsilon }^\textrm{e}})\right] ^2 \nonumber \\&\quad + G\,f^\textrm{iso}(d)\,{\varvec{\varepsilon }^\textrm{e}}^\textrm{,iso}:{\varvec{\varepsilon }^\textrm{e}}^\textrm{,iso} \nonumber \\&\quad + \frac{h}{n_\textrm{p}+ 1}\,\alpha ^{n_\textrm{p}+1}, \end{aligned}$$
(33)

where K denotes the compression and G the shear modulus. Additional, the plastic hardening modulus h and the hardening exponent \(n_\textrm{p}\) are introduced and together with the internal plastic variable \(\alpha \) form the plastic energy contribution. Both elastic terms additional introduce the damage functions \(f^\bullet \). These replace the typical \([1-d]\) approach often found in other models in literature, and are defined as

$$\begin{aligned} f^\bullet (d):=\exp (-\eta \,\xi _\bullet d) \end{aligned}$$
(34)

with the internal damage variable \(d\in [0,1[\), such that

$$\begin{aligned} f^\bullet :\left\{ {\mathbb {R}}^+_0\rightarrow ]0,1]\left| f^\bullet (0)=1, \lim \limits _{d\rightarrow \infty }f^\bullet (d)=0\right. \right\} . \end{aligned}$$
(35)

Solving the dissipation inequality by applying the postulate of minimum dissipation, as well as the procedure proposed by Coleman and Noll, cf. [17], the spatial Mandel stresses, isotropic hardening stress and the local damage driving force can be specified, i.e.

$$\begin{aligned} \varvec{m} := 2\frac{\partial \varPsi }{\partial \varvec{b}^\textrm{e}}\cdot \varvec{b}^\textrm{e},\quad \beta :=-\frac{\partial \varPsi }{\partial \alpha },\quad q:=-\frac{\partial \varPsi }{\partial d}. \end{aligned}$$
(36)

To govern the evolution of plasticity and damage, respectively, two separate dissipation potential \(\varPhi ^\textrm{p}\) and \(\varPhi ^\textrm{d}\) are defined

$$\begin{aligned} \varPhi ^\textrm{p}(\varvec{m},\beta ,d)&:= \Vert \textrm{dev}(\varvec{m}_\textrm{eff})\Vert - \sqrt{\frac{2}{3}}\left[ \sigma _\textrm{y0}- \beta \right] , \end{aligned}$$
(37)
$$\begin{aligned} \varPhi ^\textrm{d}(q,d,\alpha )&:= q_\textrm{eff} - q_\textrm{min}\left[ 1 - f^q(d)\right] ^{n_\textrm{d}}. \end{aligned}$$
(38)

The dissipation potential utilise effective driving forces, which introduce strong coupling between plastic and damage evolution and are defined as

$$\begin{aligned} \varvec{m}_\textrm{eff}:=\varvec{m}\,{\hat{f}}^{\varvec{m}}(d) \quad \textrm{and}\quad q_\textrm{eff}:=q\,{\hat{f}}^\alpha (\alpha ), \end{aligned}$$
(39)

where modified coupling functions are introduced as

$$\begin{aligned} {\hat{f}}^{\varvec{m}}(d) = \frac{1 + \epsilon }{f^{\varvec{m}}(d) + \epsilon },\quad {\hat{f}}^\alpha (\alpha ) = \frac{1 + \epsilon }{f^\alpha (\alpha ) + \epsilon }, \end{aligned}$$
(40)

with the perturbation value set to \(\epsilon = {1 \times 10^{-3}}\).

The associative evolution equations are additionally derived as

$$\begin{aligned} \varvec{l}^\textrm{p} = \lambda ^\textrm{p}\frac{\partial \varPhi ^\textrm{p}}{\partial \varvec{m}},\quad {\dot{\alpha }} = \lambda ^\textrm{p}\frac{\partial \varPhi ^\textrm{p}}{\partial \beta },\quad {\dot{d}}= \lambda ^\textrm{d}\frac{\partial \varPhi ^\textrm{d}}{\partial q}, \end{aligned}$$
(41)

where the two Lagrange parameters \(\lambda ^\textrm{p}\) and \(\lambda ^\textrm{d}\) are introduced. Together with the their respective dissipation potentials, they combine into the two sets of Karush–Kuhn–Tucker conditions

$$\begin{aligned} \begin{aligned} \varPhi ^\textrm{p}&\le 0,&\lambda ^\textrm{p}\ge 0,{} & {} \lambda ^\textrm{p}\varPhi ^\textrm{p}=0,\\ \varPhi ^\textrm{d}&\le 0,&\lambda ^\textrm{d}\ge 0,{} & {} \lambda ^\textrm{d}\varPhi ^\textrm{d}=0, \end{aligned} \end{aligned}$$
(42)

which, as a physical interpretation, govern initiation and termination of plastic and damage evolution under loading or unloading, respectively. The quantity \(\varvec{l}^\textrm{p} = \varvec{F}^\textrm{e}\cdot \dot{\varvec{F}}^\textrm{p}\cdot {\varvec{F}}^{-1}\) in (41) represents the plastic part of the spatial velocity gradient \(\varvec{l} = \varvec{l}^\textrm{e}+\varvec{l}^\textrm{p}\). The evolution equations are algorithmically solved by means of an active-set strategy, which is presented thoroughly in [58], and is not focussed upon here.

The scalar valued evolution equations for the internal plastic variable \(\alpha \) and internal damage variable d are solved via an implicit backward-Euler scheme. For the evolution of plastic deformations, an implicit exponential integration scheme, cf. [56], is required to fulfil the incompressibility condition \(\text {det}(\varvec{F}^\textrm{p}) = 1\). With the pseudo-time increments \(t_{n+1} = t_n + \varDelta t\), this yields

$$\begin{aligned} \varvec{F}^\textrm{p}&= \exp \left( \varDelta \lambda ^\textrm{p}\varvec{\nu }{\hat{f}}^{\varvec{m}}(d)\right) \cdot \varvec{F}^\textrm{p}_n, \end{aligned}$$
(43)
$$\begin{aligned} \alpha&= \alpha _n + \sqrt{\frac{2}{3}}\varDelta \lambda ^\textrm{p}, \end{aligned}$$
(44)
$$\begin{aligned} d&= d_n + \varDelta \lambda ^\textrm{d}{\hat{f}}^\alpha (\alpha ). \end{aligned}$$
(45)

Therein, \(\varvec{\nu } = \textrm{dev}(\varvec{m})/\Vert \textrm{dev}(\varvec{m})\Vert \) represents the plastic flow direction and \(\varDelta \lambda ^\bullet = \varDelta t \lambda ^\bullet \) are the incremental Lagrange multipliers. The final set of internal history variables encompasses

$$\begin{aligned} \varvec{h} = \left\{ \varvec{h}^\textrm{p},d\right\} = \left\{ {\varvec{C}^\textrm{p}}^{-1},\alpha ,d\right\} . \end{aligned}$$
(46)

Instead of utilising \(\varvec{F}^\textrm{p}\) as a plastic history variable, the plastic part of the inverse right Cauchy-Green deformation tensor \({\varvec{C}^\textrm{p}}^{-1}\) is stored. Computation of (30) can be rewritten, such that

$$\begin{aligned} \varvec{b}^\textrm{e}= \varvec{F}\cdot \varvec{F}^\mathrm {p-1}\cdot \varvec{F}^\mathrm {p-t} \cdot \varvec{F}^t = \varvec{F}\cdot {\varvec{C}^\textrm{p}}^{-1}\cdot \varvec{F}^t, \end{aligned}$$
(47)

which is the formulation used in the numerical implementation and consequently requires the stored history variable.

Additionally, regarding the implementation into the finite element framework, the relation between the spatial Mandel stresses and the referential first Piola–Kirchhoff stress tensor

$$\begin{aligned} \varvec{P}^\textrm{K}= \varvec{m}\cdot {\varvec{F}}^{-t} \end{aligned}$$
(48)

holds.

3.3 Finite element implementation

For the numerical implementation a finite element discretisation is applied to the weak forms in (26) and (27), where the domain \({\mathcal {B}}_0\) is discretised by \(n_\textrm{el}\) finite elements and \(n_\textrm{np}\) nodes, i.e.

$$\begin{aligned} {\mathcal {B}}_0 \approx {\mathcal {B}}^h_0 = \bigcup \limits _{e=1}^{n_\textrm{el}} {\mathcal {B}}^e_0. \end{aligned}$$
(49)

Each finite element e is associated with \(n_\textrm{en}^\varphi \) nodes with three displacement degrees of freedom \(\varvec{\varphi }\) and \(n_\textrm{en}^\phi \) nodes with one non-local damage degree of freedom \(\phi \). The referential geometry description \(\varvec{X}\) is interpolated with shape functions \(N^X_C\), i.e.

$$\begin{aligned} \varvec{X} \approx \varvec{X}^h = \sum _{C=1}^{n_\textrm{en}^\varphi }\varvec{\textrm{X}}_C N_C^X. \end{aligned}$$
(50)

Application of an isoparametric concept, i.e. \(N^X = N^\varphi = N^\phi \), and the Bubnov-Galerkin approach, this results in the approximations

$$\begin{aligned} \varvec{\varphi } \approx \varvec{\varphi }^h&= \sum _{A=1}^{n_\textrm{en}^\varphi }\varvec{\upvarphi }_A N_A^\varphi , \quad \delta \varvec{\varphi } \approx \delta \varvec{\varphi }^h = \sum _{A=1}^{n_\textrm{en}^\varphi } \delta \varvec{\upvarphi }_A N_A^\varphi \nonumber \\ \phi \approx \phi ^h&= \sum _{B=1}^{n_\textrm{en}^\phi }\upphi _B N_B^\phi , \quad \delta \phi \approx \delta \phi ^h = \sum _{B=1}^{n_\textrm{en}^\phi } \delta \upphi _B N_B^\phi \nonumber \\ \delta \varvec{X} \approx \delta \varvec{X}^h&= \sum _{C=1}^{n_\textrm{en}^\varphi }\delta \varvec{\textrm{X}}_C N_C^X \end{aligned}$$
(51)

for the field variables and test functions, and furthermore

$$\begin{aligned}{} & {} \nabla _{\varvec{\!X}}\varvec{\varphi } \approx \nabla _{\varvec{\!X}}\varvec{\varphi }^h = \sum _{A=1}^{n_\textrm{en}^\varphi }\varvec{\upvarphi }_A \otimes \nabla _{\varvec{\!X}}N_A^\varphi \nonumber \\{} & {} \delta \nabla _{\varvec{\!X}}\varvec{\varphi } \approx \delta \nabla _{\varvec{\!X}}\varvec{\varphi }^h = \sum _{A=1}^{n_\textrm{en}^\varphi }\delta \varvec{\upvarphi }_A \otimes \nabla _{\varvec{\!X}}N_A^\varphi \nonumber \\{} & {} \nabla _{\varvec{\!X}}\phi \approx \nabla _{\varvec{\!X}}\phi ^h = \sum _{B=1}^{n_\textrm{en}^\phi }\upphi _B \nabla _{\varvec{\!X}}N_B^\phi \nonumber \\{} & {} \delta \nabla _{\varvec{\!X}}\phi \approx \delta \nabla _{\varvec{\!X}}\phi ^h = \sum _{B=1}^{n_\textrm{en}^\phi }\delta \upphi _B \nabla _{\varvec{\!X}}N_B^\phi \nonumber \\{} & {} \nabla _{\varvec{\!X}}\varvec{X} \approx \nabla _{\varvec{\!X}}\varvec{X}^h = \sum _{C=1}^{n_\textrm{en}^\varphi }\varvec{\textrm{X}}_C \otimes \nabla _{\varvec{\!X}}N_C^X\nonumber \\{} & {} \delta \nabla _{\varvec{\!X}}\varvec{X} \approx \delta \nabla _{\varvec{\!X}}\varvec{X}^h = \sum _{C=1}^{n_\textrm{en}^\varphi }\delta \varvec{\textrm{X}}_C \otimes \nabla _{\varvec{\!X}}N_C^X \end{aligned}$$
(52)

for their gradients. Insertion of these approximations into the weak forms (26) and (27) yields

$$\begin{aligned} \delta _{\varvec{\varphi }}\varPi _{eA}^h&= \delta \varvec{\upvarphi }\cdot \left[ \int _{{\mathcal {B}}_0^e}\varvec{P}^\textrm{K}\cdot \nabla _{\varvec{\!X}}N_A^\varphi \,\text {d}V\right. \nonumber \\&\qquad -\left. \rho _0\int _{{\mathcal {B}}_0^e}\varvec{b}_0\, N_A^\varphi \,\text {d}V- \int _{\partial {\mathcal {B}}_0^e}\overline{\varvec{t}}_0\,N_A^\varphi \,\text {d}A\right] = 0, \end{aligned}$$
(53)
$$\begin{aligned} \delta _\phi \varPi _{eB}^h&= \delta \upphi \left[ \int _{{\mathcal {B}}_0^e}\left[ \varvec{Y}\cdot \nabla _{\varvec{\!X}}N_B^\phi + Y N_B^\phi \right] \right] = 0. \end{aligned}$$
(54)

The first integral in (53) can be identified as the internal forces with the latter two representing the external contribution. (53) and (54) have to be fulfilled for arbitrary values of the test functions \(\delta \varvec{\upvarphi }\) and \(\delta \upphi \), which subsequently allows the above equations to be rewritten as the sum of forces, i.e.

$$\begin{aligned} \varvec{\textrm{r}}_{e} = \begin{bmatrix} \varvec{\textrm{r}}_{eA}^\varphi \\ \textrm{r}_{eB}^\phi \end{bmatrix} = \begin{bmatrix} \varvec{\textrm{f}}_{eA}^{\textrm{int},\varphi } - \varvec{\textrm{f}}_{eA}^{\textrm{ext},\varphi }\\ \textrm{f}_{eB}^{\textrm{int},\phi } \end{bmatrix}= \begin{bmatrix} \varvec{0}\\ 0 \end{bmatrix}. \end{aligned}$$
(55)

Assembly of the elemental quantities into a global finite element residual consequently leads to

(56)

While quasi-static problems are analysed here, which do not explicitly depend on the time discretisation, the loads are applied by pseudo-time increments, i.e. \(t_{n+1} = t_n + \varDelta t\). To solve the nonlinear system of Eq. (55) at each respective time step \(t_{n+1}\), the Newton–Raphson method is utilised. Therefore, the system is linearised by a Taylor series expansion, i.e.

$$\begin{aligned} \varvec{\textrm{r}}^\varphi _{n+1} = \varvec{\textrm{r}}_n^\varphi + \varDelta \varvec{\textrm{r}}^\varphi _n= \varvec{\textrm{0}}, \end{aligned}$$
(57)
$$\begin{aligned} \varvec{\textrm{r}}^\phi _{n+1} = \varvec{\textrm{r}}_n^\phi + \varDelta \varvec{\textrm{r}}^\phi _n= \varvec{\textrm{0}}, \end{aligned}$$
(58)

where terms of higher order are neglected. The respective nodal increments result in

$$\begin{aligned} \varDelta \varvec{\textrm{r}}^\varphi _n&= \sum _{C=1}^{n_\textrm{en}^\varphi } \frac{\text {d} \varvec{\textrm{r}}_n^\varphi }{\text {d} \varvec{\upvarphi }_C}\cdot \varDelta \varvec{\upvarphi }_C + \sum _{D=1}^{n_\textrm{en}^\phi }\frac{\text {d} \varvec{\textrm{r}}_n^\varphi }{\text {d} \upphi _D}\varDelta \upphi _D, \end{aligned}$$
(59)
$$\begin{aligned} \varDelta \varvec{\textrm{r}}^\phi _n&= \sum _{C=1}^{n_\textrm{en}^\phi } \frac{\text {d} \varvec{\textrm{r}}_n^\phi }{\text {d} \varvec{\upvarphi }_C}\cdot \varDelta \varvec{\upvarphi }_C + \sum _{D=1}^{n_\textrm{en}^\phi }\frac{\text {d} \varvec{\textrm{r}}_n^\phi }{\text {d} \upphi _D}\varDelta \upphi _D, \end{aligned}$$
(60)

with \(\varDelta \varvec{\upvarphi }_C = \varvec{\upvarphi }_{n+1,C} - \varvec{\upvarphi }_{n,C}\) and \(\varDelta \upphi _{D} = \upphi _{n+1,D} - \upphi _{n,D}\). The total derivatives in the above equations represent the stiffness terms that are calculated elementwise and assembled into the global stiffness matrix \(\varvec{\textrm{K}}\)

(61)

The stiffness matrix has the dimension \(n \times n\), where \(n= \left[ n_\textrm{dim}^\varphi + 1\right] n_\textrm{np}\). The elementwise stiffness contributions thus read

$$\begin{aligned} \varvec{\textrm{K}}_{eAC}^{\varphi \varphi }&= \frac{\text {d} \varvec{\textrm{r}}_{eA,n}^\varphi }{\text {d} \varvec{\upvarphi }_C} =\int _{{\mathcal {B}}_0^e} \left[ \varvec{I}\otimes \nabla _{\varvec{\!X}}N^\varphi _A\right] :\frac{\text {d} \varvec{P}^\textrm{K}}{\text {d} \varvec{F}}\cdot \nabla _{\varvec{\!X}}N_C^\varphi \,\text {d}V, \end{aligned}$$
(62)
$$\begin{aligned} \varvec{\textrm{K}}_{eAD}^{\varphi \phi }&= \frac{\text {d} \varvec{\textrm{r}}_{eA,n}^\varphi }{\text {d} \upphi _D} =\int _{{\mathcal {B}}_0^e}\left[ \varvec{I}\otimes \nabla _{\varvec{\!X}}N^\varphi _A\right] :\frac{\text {d} \varvec{P}^\textrm{K}}{\text {d} \phi }N_D^\phi \,\text {d}V, \end{aligned}$$
(63)
$$\begin{aligned} \varvec{\textrm{K}}_{eBC}^{\phi \varphi }&= \frac{\text {d} \varvec{\textrm{r}}_{eB,n}^\phi }{\text {d} \varvec{\upvarphi }_C} =\int _{{\mathcal {B}}_0^e}N_B^\phi \frac{\text {d} Y}{\text {d} \varvec{F}}\cdot \nabla _{\varvec{\!X}}N_C^\varphi \,\text {d}V, \end{aligned}$$
(64)
$$\begin{aligned} \varvec{\textrm{K}}_{eBD}^{\phi \phi }&= \frac{\text {d} \varvec{\textrm{r}}_{eB,n}^\phi }{\text {d} \upphi _D} = \int _{{\mathcal {B}}_0^e}N_B^\phi \frac{\text {d} Y}{\text {d} \phi } N^\phi _D \nonumber \\&\quad + \nabla _{\varvec{\!X}}N_B^\phi \cdot \frac{\text {d} \varvec{Y}}{\text {d} \nabla _{\varvec{\!X}}\phi }\cdot \nabla _{\varvec{\!X}}N_D^\phi \,\text {d}V, \end{aligned}$$
(65)

where \(\varvec{I}\) represents the second order identity tensor. The total derivatives in their respective stiffness contributions will not be listed here but can be found in the original source, cf. [58].

Finally, assembly of the nodal increments

(66)

results in the global linearised form

$$\begin{aligned} \varvec{\textrm{r}} + \varvec{\textrm{K}}\cdot \varDelta \varvec{\textrm{w}} = \varvec{\textrm{0}}. \end{aligned}$$
(67)

4 Sensitivity analysis

4.1 Variational sensitivities

To derive the sensitivities for the previously described ductile damaging material model, a variational approach is applied. While in the environment of the structural analysis, only the field variables \(\varvec{w}\) and the history field \(\varvec{h}\) are allowed to change, for the optimisation this now extends to an additional change in design \(\varvec{s}\). Consequently, the total variation of (28), with the assumption of design independent external forces (\(\delta R^\textrm{ext} = 0\)), reads

$$\begin{aligned} \delta \varvec{r}&= \delta _{\varvec{w}}\varvec{r} + \delta _{\varvec{s}}\varvec{r} + \delta _{\varvec{h}_n}\varvec{r} \nonumber \\&= \varvec{k}(\delta \varvec{w}) + \varvec{p}(\delta \varvec{w},\delta \varvec{s}) + \varvec{h}^{\varvec{w}}(\delta \varvec{w},\delta \varvec{h}_n) = \varvec{0}. \end{aligned}$$
(68)

Therein, the first partial variation is identified as the tangent stiffness \(\varvec{k}\). The other two new terms are the pseudo load \(\varvec{p}\) and the history sensitivity \(\varvec{h}^{\varvec{w}}\). The variable \(\varvec{h}_n\) describes the set of history variables \(\varvec{h}\), defined in (46), from the previous time step n. This total variation has to vanish to fulfil equilibrium in the newly generated design, as a change in that design must not violate the equilibrium condition (28), cf. [4, 27, 40, 62]. While the choice of design can be arbitrary, for the purpose of readability in this section, the design is specifically chosen to be the initial geometry \(\varvec{X}\) of the finite element mesh, i.e. \(\varvec{s} = \varvec{X}\).

The pseudo load terms can be specified as

$$\begin{aligned}{} & {} p^\varphi =\delta _{\varvec{X}}r^\varphi = \delta _{\varvec{X}}\left[ \int _{{\mathcal {B}}_0}\frac{\partial \varPsi }{\partial \varvec{F}}:\nabla _{\varvec{\!X}}\delta \varvec{\varphi } \,\text {d}V\right] \nonumber \\{} & {} = \int _{{\mathcal {B}}_\zeta }\nabla _{\varvec{\!X}}\delta \varvec{\varphi }:\varvec{P}^\textrm{K}:\delta _{\varvec{X}}\varvec{F}\, J_K\,\text {d}V_\zeta \nonumber \\{} & {} \quad -\int _{{\mathcal {B}}_\zeta }\varvec{P}^\textrm{K}:\left[ \nabla _{\varvec{\!X}}\delta \varvec{\varphi }\cdot \nabla _{\varvec{\!X}}\delta \varvec{X}\right] \, J_K\,\text {d}V_\zeta \nonumber \\{} & {} \quad +\int _{{\mathcal {B}}_\zeta }\varvec{P}^\textrm{K}:\nabla _{\varvec{\!X}}\delta \varvec{\varphi }\, \left[ \nabla _{\varvec{\!X}}\cdot \delta \varvec{X}\right] J_K\,\text {d}V_\zeta , \end{aligned}$$
(69)

for the mechanical part, and

$$\begin{aligned} p^\phi= & {} \delta _{\varvec{s}}r^\phi = \delta _{\varvec{X}}\left[ \int _{{\mathcal {B}}_0}\frac{\partial \varPsi }{\partial \nabla _{\varvec{X}}\phi }\cdot \nabla _{\varvec{\!X}}\delta \phi +\frac{\partial \varPsi }{\partial \phi }\delta \phi \,\text {d}V\right] \nonumber \\= & {} \int _{{\mathcal {B}}_\zeta } \bigg [\delta \phi \frac{\text {d} Y}{\text {d} \varvec{F}}:\delta _{\varvec{X}}\varvec{F} - \nabla _{\varvec{\!X}}\delta \phi \cdot \left[ \varvec{Y}\cdot \nabla _{\varvec{\!X}}\delta \varvec{X}\right] \nonumber \\{} & {} \quad - \varvec{Y}\cdot \left[ \nabla _{\varvec{\!X}}\delta \phi \cdot \nabla _{\varvec{\!X}}\delta \varvec{X}\right] \bigg ]J_K\,\text {d}V_\zeta \nonumber \\{} & {} \quad + \int _{{\mathcal {B}}_\zeta } \left[ \varvec{Y}\cdot \nabla _{\varvec{\!X}}\eta ^\phi + Y\,\eta ^\phi \right] \nabla _{\varvec{\!X}}\cdot \delta \varvec{X}J_K\,\text {d}V_\zeta , \end{aligned}$$
(70)

for the damage part. The enhanced kinematics, detailed in Sect. 2.2, are utilised here to separate the implicit dependencies of geometry and deformation.

In the same fashion, the history sensitivity terms can be specified. Since only material model specific quantities are dependent on the history variables, the integrals result in

$$\begin{aligned} h^\varphi = \delta _{\varvec{h}_n}r^\varphi = \int _{{\mathcal {B}}_\zeta }\nabla _{\varvec{\!X}}\delta \varvec{\varphi }:\frac{\text {d} \varvec{P}^\textrm{K}}{\text {d} \varvec{h}_n}\cdot \delta \varvec{h}_n\,J_K\,\text {d}V_\zeta \end{aligned}$$
(71)

for the mechanical part, and

$$\begin{aligned} h^\phi = \delta _{\varvec{h}_n}r^\phi = \int _{{\mathcal {B}}_\zeta }\delta \phi \frac{\text {d} Y}{\text {d} \varvec{h}_n}\cdot \delta \varvec{h}_n\,J_K\,\text {d}V_\zeta \end{aligned}$$
(72)

for the damage part. In the latter, only the scalar non-local driving force contributes to the history sensitivities, since the gradient contribution \(\varvec{Y}\) only depends on the material parameter \(c_\textrm{d}\) and therefore its variation vanishes. The derivatives within the above equations are listed in Appendix A.1. Especially the derivatives regarding \({\varvec{C}^\textrm{p}}^{-1}\) require special attention, since the local material model is defined in the principal space and therefore requires consideration of derivatives of the eigenvalues and -projections.

For the calculation of the history sensitivities \(\varvec{h}^{\varvec{w}}\) in (71) and (72), the total variation of internal history variables \(\delta \varvec{h}\) are necessary, cf. [39, 62]. It reads

$$\begin{aligned} \begin{aligned} \delta \varvec{h}&= \delta _{\varvec{w}}\varvec{h} + \delta _{\varvec{s}}\varvec{h}+\delta _{\varvec{h}_n}\varvec{h}\\&= \frac{\partial \varvec{h}}{\partial \varvec{w}}\delta \varvec{w} + \frac{\partial \varvec{h}}{\partial \varvec{X}}\delta \varvec{X} + \frac{\partial \varvec{h}}{\partial \varvec{h}_n}\delta \varvec{h}_n. \end{aligned} \end{aligned}$$
(73)

This total variation has to be updated after each converged global load-step, where a change in applied load leads to a change in the history variables \(\varvec{h}\). Therefore, special attention is required within the numerical framework, which is described in detail for the discretised quantities later on.

4.2 Discrete quantities

In order to implement the sensitivities into the numerical finite-element framework, the derived equations need to be discretised. Applying the same desicretisation technique from Sect. 3.3 in (50)–(52), one obtains the following matrices.

Pseudo-load matrix. By applying the discretisation to (69) and (70), in addition to extracting the test functions, one obtains

$$\begin{aligned} \varvec{\textrm{P}}^\varphi _{eAC}= & {} \int _{{\mathcal {B}}_0^e}\left[ \varvec{I}\otimes \nabla _{\varvec{\!X}}N_A^\varphi \right] :\frac{\text {d} \varvec{P}^\textrm{K}}{\text {d} \varvec{F}}:\left[ -\varvec{H}\,{\overline{\otimes }}\,\nabla _{\varvec{\!X}}N_C^X\right] \,\text {d}V\nonumber \\{} & {} \quad -\int _{{\mathcal {B}}_0^e} \varvec{P}^\textrm{K}\cdot \nabla _{\varvec{\!X}}N^X_C \otimes \nabla _{\varvec{\!X}}N^\varphi _A\,\text {d}V\nonumber \\{} & {} \quad +\int _{{\mathcal {B}}_0^e} \varvec{P}^\textrm{K}\cdot \nabla _{\varvec{\!X}}N^\varphi _A \otimes \nabla _{\varvec{\!X}}N^X_C\,\text {d}V, \end{aligned}$$
(74)

for the mechanical contribution, and

$$\begin{aligned} \varvec{\textrm{P}}^\phi _{eBC}= & {} \int _{{\mathcal {B}}_0^e} N^\phi _B \frac{\text {d} Y}{\text {d} \varvec{F}}:\left[ -\varvec{H}\,{\overline{\otimes }}\,\nabla _{\varvec{\!X}}N^X_C\right] \,\text {d}V\nonumber \\{} & {} \quad -\int _{{\mathcal {B}}_0^e} \nabla _{\varvec{\!X}}N^\phi _B \cdot \nabla _{\varvec{\!X}}N^X_C \varvec{Y}\,\text {d}V\nonumber \\{} & {} \quad -\int _{{\mathcal {B}}_0^e} \varvec{Y}\cdot \nabla _{\varvec{\!X}}N^X_C \nabla _{\varvec{\!X}}N^\phi _B\,\text {d}V\nonumber \\{} & {} \quad +\int _{{\mathcal {B}}_0^e} \left[ \varvec{Y}\cdot \nabla _{\varvec{\!X}}N^\phi _B + Y N_B^\phi \right] \nabla _{\varvec{\!X}}N^X_C\,\text {d}V, \end{aligned}$$
(75)

for the non-local damage contribution, where the quantity \(\varvec{H} = \nabla _{\varvec{\!X}}\varvec{u}\) is introduced and (19) has been used for the partial variation of the deformation gradient.

Like the stiffness matrix, the pseudo-load matrix has to be assembled in a similar manner, i.e.

(76)

In contrast to the stiffness matrix, the pseudo-load matrix \(\varvec{\textrm{P}}\) is not quadratic, i.e. \(n\ne m\). Here, \(m = n_\textrm{dim}^\varphi \cdot n_\textrm{np}= n_\textrm{dim}^X\cdot n_\textrm{np}\) encompasses the geometrical three-dimensional space of the finite-element simulation. With the addition of the non-local damage variable \(\phi \), the number of degrees of freedom at each node is larger by one, i.e. \(n_\textrm{dof}= n_\textrm{dim}^\varphi + 1\). Hence, \(n = n_\textrm{dof}\cdot n_\textrm{np}> m\), leading to the non-quadratic nature of the pseudo-load matrix.

History sensitivity matrix. Application of the discretisation to (71) and (72) and extraction of the test functions leads to

$$\begin{aligned} \varvec{\textrm{H}}_{eA}^\varphi&= \left[ \int _{{\mathcal {B}}_0^e}\left[ \varvec{I}\otimes \nabla _{\varvec{\!X}}N^\varphi _A\right] :\frac{\text {d} \varvec{P}^\textrm{K}}{\text {d} \varvec{h}_n}\,\text {d}V\right] \cdot \delta \varvec{\textrm{h}}_n, \end{aligned}$$
(77)

for the mechanical part, and

$$\begin{aligned} \varvec{\textrm{H}}_{eB}^\phi&= \left[ \int _{{\mathcal {B}}_0^e} N_B^\phi \frac{\text {d} Y}{\text {d} \varvec{h}_n}\,\text {d}V\right] \cdot \delta \varvec{\textrm{h}}_n, \end{aligned}$$
(78)

for the damage part. The missing total variation of the history variables \(\delta \varvec{\textrm{h}}_n\) is still required in its discretised form. Since their computation requires the sensitivity matrix \(\varvec{\textrm{S}}\), which is derived in the following, see (84), the total variation of the history field is derived afterwards, see (86). Their values are stored in the matrices \(\varvec{\textrm{Z}}_e\), i.e.

$$\begin{aligned} \varvec{\textrm{Z}}_e =\begin{bmatrix} \varvec{\textrm{Z}}_e^{\varvec{C}}\\ \varvec{\textrm{Z}}_e^{\alpha }\\ \varvec{\textrm{Z}}_e^{d} \end{bmatrix}\in {\mathbb {R}}^{11\times m}, \end{aligned}$$
(79)

with the sub-matrices

$$\begin{aligned} \varvec{\textrm{Z}}_e^{\varvec{C}}&= \left[ \frac{\text {d} {\varvec{C}^\textrm{p}_n}^{-1}}{\text {d} \varvec{\textrm{X}}}\right] \in {\mathbb {R}}^{9\times m},\quad \varvec{\textrm{Z}}_e^{\alpha } = \left[ \frac{\text {d} \alpha _n}{\text {d} \varvec{\textrm{X}}}\right] \in {\mathbb {R}}^{1\times m}, \nonumber \\ \varvec{\textrm{Z}}_e^{d}&= \left[ \frac{\text {d} d_n}{\text {d} \varvec{\textrm{X}}}\right] \in {\mathbb {R}}^{1\times m}. \end{aligned}$$
(80)

Since the values of the respective history variables are stored for each individual Gauss point, their derivatives are computed for each respective Gauss point as well. The computation and subsequent storage of each of the respective matrices \(\varvec{\textrm{H}}_e\) and \(\varvec{\textrm{Z}}_e\) would be very difficult and numerically taxing. Instead, to circumvent this, an additional matrix \(\varvec{\textrm{Q}}_e\) is computed in each element instead e, i.e.

$$\begin{aligned} \varvec{\textrm{Q}}^\varphi _{eAC} = \varvec{\textrm{H}}^\varphi _{eA}\cdot \varvec{\textrm{Z}}_{eC} \quad \text {and}\quad \varvec{\textrm{Q}}^\phi _{eBC} = \varvec{\textrm{H}}^\phi _{eB}\cdot \varvec{\textrm{Z}}_{eC} \end{aligned}$$
(81)

which is globally assembly instead, such that

(82)

This approach significantly reduces the necessary memory requirements to store all computed quantities and overall eases with the numerical implementation.

Finally, this allows the discrete matrix representation of (68), i.e.

$$\begin{aligned} \delta \varvec{\textrm{r}} = \varvec{\textrm{K}}\,\delta \varvec{\textrm{w}} + \varvec{\textrm{P}}\,\delta \varvec{\textrm{X}} + \varvec{\textrm{H}}\,\delta \varvec{\textrm{h}}_n = \varvec{\textrm{0}}. \end{aligned}$$
(83)

Reordering of this equation, and using (82), leads to

$$\begin{aligned} \delta \varvec{\textrm{w}}= -{\varvec{\textrm{K}}}^{-1}\left[ \varvec{\textrm{P}} + \varvec{\textrm{Q}}\right] \cdot \delta \varvec{\textrm{X}} =: \varvec{\textrm{S}}\cdot \delta \varvec{\textrm{X}}, \end{aligned}$$
(84)

allowing the definition of the global sensitivity matrix \(\varvec{\textrm{S}}\in {\mathbb {R}}^{n\times m}\). This quantity defines how the underlying system \(\delta \varvec{\textrm{w}}\) reacts to a change in design \(\delta \varvec{\textrm{s}}\), and makes up the foundation for the derivation of gradients for the objectives and constraints within the optimisation problems described in Sect. 4.3. Similarly to all previous quantities, the sensitivity matrix can be decomposed into a mechanical and damage part as well, i.e.

$$\begin{aligned} \varvec{\textrm{S}} = \begin{bmatrix} \varvec{\textrm{S}}^\varphi \\ \varvec{\textrm{S}}^\phi \end{bmatrix}. \end{aligned}$$
(85)

History variation. In the previous equations, the discrete matrix description for the total history variation (73) is introduced. Since the history variables are stored for each Gauss point on the element level, the matrices have to be computed and stored at those levels as well, and furthermore multiplied into the according history sensitivity contribution. The discrete total history variation, by utilising (85), thus reads

$$\begin{aligned}{} & {} \delta \varvec{\textrm{h}} = \left[ \frac{\partial \varvec{h}}{\partial \varvec{F}}\cdot \nabla _{\varvec{\!X}}N^\varphi _C\cdot \varvec{\textrm{S}}_{eC}^\varphi + \frac{\partial \varvec{h}}{\partial \varvec{F}}:\left[ - \varvec{H}\,{\overline{\otimes }}\,\nabla _{\varvec{\!X}}N_C^X\right] \right. \nonumber \\{} & {} \quad + \left. N^\phi _C\frac{\partial \varvec{h}}{\partial \phi }\cdot \varvec{\textrm{S}}^\phi _{eC} + \frac{\partial \varvec{h}}{\partial \varvec{h}_n}\cdot \varvec{\textrm{Z}}_{n,eC}\right] \delta \varvec{\textrm{X}} =:\varvec{\textrm{Z}}_{eC}\,\delta \varvec{\textrm{X}}. \end{aligned}$$
(86)

This equation requires the partial derivates of the history fields w.r.t the deformation gradient \(\varvec{F}\), the non-local variable \(\phi \) and the history variables of the previous load-step \(\varvec{\textrm{h}}_n\). Due to the number of derivatives, and certain considerations that are required regarding their derivation, the details have been moved to the appendix in Appendix A.2 for the purpose of readability.

Additionally, for the first time-step \(t=t_0\), one can assume \(\varvec{\textrm{h}}_0 = \delta \varvec{\textrm{h}}_0 = \varvec{\textrm{0}}\), which leads to the simplified computation

$$\begin{aligned} \varvec{\textrm{S}}_1 = -{\varvec{\textrm{K}}}^{-1}_1\cdot \varvec{\textrm{P}}_1\quad \text {with}\quad \varvec{\textrm{Z}}_0 = \varvec{\textrm{0}}, \end{aligned}$$
(87)

for the first pseudo-time increment.

Fig. 2
figure 2

Illustrative flowchart for the updates of sensitivity matrix \(\varvec{\textrm{S}}\) and history variation matrix \(\varvec{\textrm{Z}}\) in prescribed load-step n

Remark 2

In contrast to the notation in this section, the application of these sensitivities in the presented results in Sect. 5 is furthermore enhanced. Instead of using the coordinates of the initial geometry as the design variables \(\varvec{\textrm{s}}\) of the optimisation, the initial geometry is defined by means of Computer Aided Geometric Design (CAGD). This CAGD is defined by control points, which govern the underlying mesh. It is therefore beneficial to define the sensitivty matrix \(\varvec{\textrm{S}}_\textrm{opt}\) in this regard, which can be easily done by means of a chain rule, i.e.

$$\begin{aligned} \varvec{\textrm{S}}_\textrm{opt} = \varvec{\textrm{S}}\cdot \frac{\partial \varvec{\textrm{X}}}{\partial \varvec{\textrm{s}}}, \end{aligned}$$
(88)

with the control points \(\varvec{\textrm{s}}\) of the geometric description.

4.3 Objective functions and constraints

For the optimisation problems in Sect. 5, their necessary objective functions and respective gradients have to be specified.

In a first example, the damage accumulation within a geometry is directly influenced to govern the optimisation problem. As such, the damage variables \(\upphi _i\) at each elemental node \(n_\textrm{np}^\phi \) are directly utilised. To capture their values in a scalar variable \({\mathfrak {J}}\), the squared vector-norm of the damage vector \(\varvec{\upphi }\) is chosen, i.e.

$$\begin{aligned} {\mathfrak {J}}^\textrm{d} = \Vert \varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\Vert ^2 = \sum _{i=1}^{n_\textrm{np}^\phi }\upphi _i(\varvec{\textrm{s}})^2. \end{aligned}$$
(89)

The gradients of this objective are straight forward to compute. Since the nodal damage quantities \(\upphi \) are part of the set of field variables \(\varvec{\textrm{w}}\), their respective gradients consist of the subset of gradients within the sensitivity matrix \(\varvec{\textrm{S}}\), which in this case is the damage part \(\varvec{\textrm{S}}^\phi \). Application of the chain rule for the norm of the damage vector thus leads to

$$\begin{aligned} \frac{\text {d} \Vert \varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\Vert ^2}{\text {d} \varvec{\textrm{s}}} = 2\,\varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\cdot \varvec{\textrm{S}}^\phi . \end{aligned}$$
(90)

Additionally, the non-local damage values \(\upphi \) at each FEM node can be chosen as constraints within the optimisation. In this case, the norm of the vector is not required, as each nodal damage quantity \(\upphi _i(\varvec{\textrm{s}})\) leads to an additional constraint, i.e.

$$\begin{aligned} \upphi _i(\varvec{\textrm{s}}) \le \phi _\textrm{crit},\quad i = 1,\dots ,n_\textrm{np}^\phi . \end{aligned}$$
(91)

The critical or maximum prescribed damage value \(\phi _\textrm{crit}\) is chosen initially and depends on the stated problem and chosen set of material parameters. The necessary gradients are again stored in the damage contribution \(\varvec{\textrm{S}}^\phi \) of the sensitivity matrix.

For the second optimisation example, the compliance C is chosen as the objective function. The aim of an optimisation problem with the compliance as the objective function, is to generate a structure, which behaves stiffer under the applied boundary conditions. Maximisation of the stiffness results in a higher strain energy potential which the body under consideration can capture for a defined load. Rewriting this into a minimisation problem thus leads to a minimisation of the negative strain energy potential, i.e.

$$\begin{aligned} \begin{aligned} {\mathfrak {J}}^\textrm{C}&= C(\varvec{\textrm{s}}) = -\varPi ^\textrm{loc,el}(\varvec{\textrm{s}}) \\&= -\int _{{\mathcal {B}}_0}\varPsi ^\textrm{vol}(\varvec{\textrm{s}}) + \varPsi ^\textrm{iso}(\varvec{\textrm{s}})\,\text {d}V. \end{aligned} \end{aligned}$$
(92)

This quantity only takes the elastic part \(\varPsi ^\textrm{loc,el}\) of the local energy potential into account, since the non-local part \(\varPsi ^\textrm{nl}\) is only required for numerical reasons and cannot be interpreted physically. Additionally, external contributions for this potential are neglected due to the choice of boundary conditions in the example.

The gradients can be derived in the same fashion as described in the previous sections. The total variation, by already incorporating \(\varvec{\textrm{S}}\) and \(\varvec{\textrm{Z}}_n\) for the corresponding variations of \(\delta \varvec{\textrm{w}}\) and \(\delta \varvec{\textrm{h}}_n\), respectively, therefore reads

$$\begin{aligned} \delta C = \left[ \frac{\partial C}{\partial \varvec{\textrm{w}}}\varvec{\textrm{S}} + \frac{\partial C}{\partial \varvec{\textrm{s}}} + \frac{\partial C}{\partial \varvec{\textrm{h}}_n}\varvec{\textrm{Z}}_n\right] \delta \varvec{\textrm{s}}. \end{aligned}$$
(93)

Application of the same discretisation leads to

$$\begin{aligned} \left[ \frac{\text {d} C}{\text {d} \varvec{\textrm{X}}}\right] _{eC}&= -\int _{{\mathcal {B}}_0^e}\left[ \frac{\partial \varPsi ^\textrm{vol}}{\partial \varvec{F}} + \frac{\partial \varPsi ^\textrm{iso}}{\partial \varvec{F}}\right] \cdot \nabla _{\varvec{\!X}}N_C^\varphi \cdot \varvec{\textrm{S}}^\varphi _{eC}\,\text {d}V\nonumber \\&\quad -\int _{{\mathcal {B}}_0^e} N_C^\phi \left[ \frac{\partial \varPsi ^\textrm{vol}}{\partial \phi } + \frac{\partial \varPsi ^\textrm{iso}}{\partial \phi }\right] \varvec{\textrm{S}}^\phi _{ec}\,\text {d}V\nonumber \\&\quad -\int _{{\mathcal {B}}_0^e} \left[ \frac{\partial \varPsi ^\textrm{vol}}{\partial \varvec{F}} + \frac{\partial \varPsi ^\textrm{iso}}{\partial \varvec{F}}\right] :\left[ -\varvec{H}\,{\overline{\otimes }}\,\nabla _{\varvec{\!X}}N^X_C\right] \,\text {d}V\nonumber \\&\quad -\int _{{\mathcal {B}}_0^e}\left[ \frac{\partial \varPsi ^\textrm{vol}}{\partial \varvec{h}_n} + \frac{\partial \varPsi ^\textrm{iso}}{\partial \varvec{h}_n}\right] \cdot \varvec{\textrm{Z}}_{n,eC}\,\text {d}V\nonumber \\&\quad -\int _{{\mathcal {B}}_0^e}\left[ \varPsi ^\textrm{vol} + \varPsi ^\textrm{iso}\right] \nabla _{\varvec{\!X}}N_C^X\,\text {d}V, \end{aligned}$$
(94)

which has to be assembled according to the previously described quantities. The specific partial derivatives within the integrals are derived in Appendix A.3.

Finally, all optimisation problems are subjected to geometric constraints regarding the volume V of the body under consideration. This additional constraints allows for better comparison since no material is added or subtracted to the geometries. The volume is the sum of all elemental volumes and as such

$$\begin{aligned} V(\varvec{\textrm{s}}) = \sum _{e=1}^{n_\textrm{el}}\int _{{\mathcal {B}}_0^e} \,\text {d}V\end{aligned}$$
(95)

with its straight forward derivative

$$\begin{aligned} \left[ \frac{\text {d} V}{\text {d} \varvec{\textrm{X}}}\right] _{eC} = \int _{{\mathcal {B}}_0^e}\nabla _{\varvec{\!X}}N_C^X\,\text {d}V. \end{aligned}$$
(96)

5 Optimisation results

In this section two optimisation problems are discussed which are applied to the academic problem of a plate with a hole. Initially, the simulation and optimisation setup are described and a reference solution presented in Sect. 5.1. The following sections detail the results for damage based optimisation in Sect. 5.2 and compliance optimisation in Sect. 5.3. The optimisation problems are solved with the gradient-based method of Sequential Quadratic Programming (SQP) of the optimisation toolbox in Matlab, specifically fmincon.

Table 1 Set of material parameters for the simulations
Fig. 3
figure 3

The problem definition and the reference damage distribution

5.1 Simulation model

The academic problem chosen for the following optimisations is that of a plate with a hole, due to its inhomogeneous deformations and resulting stress state. The material parameters for the simulation are taken from the source of the model, i.e. [58], and listed in Table 1. In order to utilise these parameters accurately, the simulation model is required to have comparable dimensions to the specimen used in the parameter identification of the cited work. The simulation problem itself is depicted in Fig. 3, wherein, by exploiting the symmetry of the problem and applying according boundary conditions, only the meshed area is used for the simulations at hand. The plate has a thickness of \(t = {1}{\textrm{mm}}\) and height, as well as width, \(h = w = {10}{\textrm{mm}}\). The inner radius of the hole is equal to \(r = {2.5}{\textrm{mm}}\). At the top and bottom of the plate, a prescribed displacement of \(u^\textrm{pre} = {0.5}{\textrm{mm}}\) is applied. The mesh itself consists of 1350 8-noded hexahedron elements, which is a sufficiently fine mesh to regularise the damage behaviour, cf. [27, 57], while simultaneously reducing overall computation time by using a small of a mesh as possible. Additionally, the elements are enhanced by the so-called F-bar method, see [56]. Application of this method also requires certain adjustments for the sensitivity analysis, which is described in [40]. The mesh itself is generated by CAGD, in this case Bézier-surfaces, cf. [23], and consists of two separate patches, which conjoin at a \(45^\circ \) angle in the reference plate, indicated by the green line in Fig. 3. Certain control points of these patches are chosen as the subsequent design variables \(\varvec{\textrm{s}}\) for the following optimisations and are depicted in Fig. 4. The dashed lines therein indicate the possible design space for the respective control point within the optimisation and are therefore included as the upper \(\varvec{\textrm{s}}_\textrm{u}\) and lower \(\varvec{\textrm{s}}_\textrm{l}\) bounds, which make up the design space of the optimisation. The geometric design is based on [25, 27], but now includes also the thickness direction as a possible variation in design by allowing certain variables to vary in thickness direction as well. All design variables not lying on the symmetry surface in thickness direction are allowed to vary their coordinate in thickness direction by \(\varDelta \varvec{\textrm{s}} = {0.25}{\textrm{mm}}\) from their starting point. The only exception are the three control points at the right edge, which can double their thickness by \(\varDelta \varvec{\textrm{s}}_\textrm{u} = {0.5}{\textrm{mm}}\), but have the same constraint when reducing the thickness. Additionally, while not further specified here, certain equality constraints apply to specific control points, which are required for the Bézier-surfaces to yield valid meshes and uphold the symmetry conditions exploited before.

Fig. 4
figure 4

The initial CAGD of the plate with a hole and the design variables as the control points in red. The dashed lines are potential positions for the optimisation with the edges their respective bounds

The resulting damage distribution throughout the plate is displayed on the right part of Fig. 3 and is used as a point of reference for the following optimisation problems in Sects. 5.2 and 5.3, respectively. The maximum damage value for the reference state reaches up to \(\phi _\textrm{max}^\textrm{ref} = 0.1893\) in the lower left corner of the bottom part of the plate. Additionally, this plate also shows small indications of damage localisation in the lower left corner of the plate, which will be elaborated on in the following sections.

5.2 Damage minimisation

The objective of the first optimisation problem is to reduce the overall damage accumulation within the body. The total accumulated damage is captured in the norm of the damage vector \(\varvec{\upphi }(\varvec{\textrm{s}})\), see Sect. 4.3. For sake of comparison of the different designs achieved, an additional constraint regarding the volume of the body is added, constraining the optimiser to utilise the same amount of material in each generated geometry. The optimisation problem therefore reads

$$\begin{aligned} \begin{aligned}&\underset{\varvec{\textrm{s}}_\textrm{l}\le \varvec{\textrm{s}}\le \varvec{\textrm{s}}_\textrm{u}}{\text {minimise}}{} & {} {\mathfrak {J}}^\textrm{d} = \Vert \varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\Vert ^2 \\&\text {subject to}{} & {} V(\varvec{\textrm{s}}) = V_0. \end{aligned} \end{aligned}$$
(97)

The geometry generated by the stated problem is depicted in Fig. 5a. The optimiser reduces the cross section area on the bottom of the plate to its minimal thickness and width, while compensating the resulting reduction in volume by increasing the thickness around the area where both CAGD patches are connected. While this solution does minimise the objective function to a desirable degree, see Fig. 6 which depicts the objective over iterations, it does not necessarily generate the aimed for result. This, from a mathematical viewpoint, optimal shape leads to an early, geometrically induced, localisation of damage, compared to the reference design. This would, upon further loading with appropriate fracture modelling, lead to earlier failure of the specimen, compared to the reference design. Since the area where the damage localises is rather small, this leads to a lower objective value overall and hence the resulting design from a mathematical standpoint. However, this is not the intended outcome of the stated, damage based optimisation problem. More desirable would be a design which not only reduces the overall accumulated damage throughout the body but furthermore restricts damage spikes and thus may delay the localisation of damage upon further loading, which subsequently could delay failure for such a specimen.

To force the optimiser to generate such a (more desirable) design, optimisation problem (97) is adapted by additional nodal damage constraints, i.e.

$$\begin{aligned} \begin{aligned}&\underset{\varvec{\textrm{s}}_\textrm{l}\le \varvec{\textrm{s}}\le \varvec{\textrm{s}}_\textrm{u}}{\text {minimise}}{} & {} {\mathfrak {J}}^\textrm{d} = \Vert \varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\Vert ^2 \\&\text {subject to}{} & {} V(\varvec{\textrm{s}}) = V_0 \\{} & {} &\upphi _i \le \phi _\textrm{crit}. \end{aligned} \end{aligned}$$
(98)

With these additional constraints, it is possible to restrict the resulting localisation arising in the unconstrained problem of (97), by restricting the maximum allowed global damage value \(\upphi _i\) each FEM node may accumulate. The results for this optimisation problem, with varying values of \(\phi _\textrm{crit}\), are depicted in Fig. 5b–d.

Fig. 5
figure 5

Different optimal shapes resulting from unconstrained (a) and constrained (b)–(d) damage minimisations

Fig. 6
figure 6

Objectives for different damage optimisation problems over iterations (left) and load–displacement curves (right)

The critical values \(\phi _\textrm{crit}\) were lowered from a starting point of \(\phi _\textrm{crit} = 0.19\) down to \(\phi _\textrm{crit} = 0.12\), with three exemplary designs presented here. The lowest achievable solution is that with a constraint value of \(\phi _\textrm{crit} = 0.12\), after which the optimiser is not able to generate structures while simultaneously fulfilling the constraints, mainly due to the chosen limits in design freedom \(\varvec{\textrm{s}}_\textrm{l}\le \varvec{\textrm{s}}\le \varvec{\textrm{s}}_\textrm{u}\), again see Fig. 4.

Starting with a constraint value of \(\phi _\textrm{crit} = 0.19\), the resulting geometry already differs strongly from the unconstrained problem (97). The lower cross section gets reshaped by increasing the overall width, but the overall thickness in this area still gets reduced. To compensate in volume, the central hole gets reshaped and certain parts of the plate are varied in thickness. The right side of the plate starts to curve outwards, which is opposite to the unconstrained problem, where the curvature turns inwards. Of note here, is that this bounded critical value is higher than the initial maximum value \(\phi _\textrm{max}^\textrm{ref} = 0.1893\). Still, these additional constraint nudge the optimiser into a search direction, which leads away from the (undesirable) solution of the unconstrained problem and into the new (more desirable) design. Even with this constraint, geometrically induced localisation of damage, while not as pronounced as in the unconstrained problem, is still detectable on the lower part of the plate. Reducing the critical damage value further to \(\phi _\textrm{crit} = 0.15\) leads to a critical switch in design of the lower part of the plate. The cross section at the bottom gets even larger, by further increasing its width which is amplified by additionally increasing the thickness as well. To compensate in volume, and therefore fulfilling the equality constraint, the central part of the plate gets thinner. The combination of both these design changes leads to a shear-like damage zone in a \(45^\circ \) angle from the bottom left to the middle right side of the newly generated plate. All previous designs, including the reference problem, had this damage zone lying horizontal at the bottom edge of the plate, leading to damage localising behaviour. Additionally, the right side of the plate has an even more pronounced curvature, which started to develop in the previous constrained problem. Of note for this problem is, even though the damage is bounded to \(\phi _\textrm{crit} = 0.15\), the maximum damage only reaches a value \(\phi ^\textrm{max}_\mathrm {0.15} = 0.1241\). To further reduce this maximum damage, the upper bound is further reduced to \(\phi _\textrm{crit} = 0.12\) in the last design presented in Fig. 5d. To fulfil this new constraint, the optimiser pushes the thinnest area of the plate a bit upward, just below the area where the two Bézier surfaces are connected. This in turn moves the aforementioned damage zone upwards as well, which ends just below the top-right corner of the plate. Additionally, the right side no longer curves inward and, as such, the leftmost point on the right surface of the plate is at the top right corner of the plate. This finally leads to a maximised area of the damage zone and with this, it is possible to bound all damage values to the prescribed critical value of \(\phi _\textrm{crit} = 0.12\). Due to the broad area where damage accumulates in those latter two examples, the geometrically induced localisation of damage can be prevented, which would theoretically allow these specimen to be subjected to larger loads, before failure occurs.

With the addition of the damage constraints, as would be expected, the respective objective values obtainable at the end of each optimisation get significantly increased, see Fig. 6. The unconstrained problem is able to reduce its objective value by \(66.7\%\) from \({\mathfrak {J}}^\textrm{d,init}_\textrm{unconstr} = 14.3414\) to \({\mathfrak {J}}^\textrm{d,opt}_\textrm{unconstr} = 4.7746\). This is possible, as already mentioned, due to geometrically localising the damage accumulation in a relative small area. With the inclusion of the additional constraints in damage, the objective value cannot be reduced as significantly. For the analysed problems in this work, the lowest achievable objective reached is \({\mathfrak {J}}^\textrm{d,opt}_\mathrm {0.19} = 7.6292\) for the highest damage constraint, and subsequently \({\mathfrak {J}}^\textrm{d,opt}_\mathrm {0.12} = 9.1196\) for the lowest critical damage bound. Nonetheless, this is still the equivalent of a reduction between \(46.8\%-36.4\%\) of accumulated damage in the considered problem. Furthermore, while the unconstrained problem is able to find an optimum after only 4 iterations, the additional \(n_\textrm{np}^\phi = 1350\) damage constraints, while not necessarily active at all time, in the other problems lead to many further iterations for the optimisation to converge. In the case of the lowest possible critical damage value of \(\phi _\textrm{crit} = 0.12\), up to 45 iterations are necessary to finally converge. Of note is the iterative behaviour of the magenta curve in Fig. 6. While the \(\phi _\textrm{crit} = 0.12\) and \(\phi _\textrm{crit} = 0.15\) problem end up very similar in final geometric design, the iterative process for the former is more difficult, as the optimiser has to take a different path, wherein the more difficult constraint has be fulfilled throughout the optimisation. As such, the optimiser steers towards a local minimum up to iteration 25 which diverges strongly from the final optimum. At that point a huge shift in shape occurs which steers the optimiser to the final design presented in Fig. 5d.

Additionally depicted in Fig. 6 are the resulting load–displacement curves for each optimisation problem. The red curve depicts the initial, reference design. While all other designs yield softer responses, even though the accumulated damage throughout the body is reduced, they still show some interesting characteristics. First of all, the unconstrained problem shows a significantly softer response. After a load of \(F = {2000}{\textrm{N}}\) the geometry starts losing its load-bearing capabilities and a downward trend in its curve is visible; a result of the geometrically induced damage localisation. This happens after a displacement of \(u = {0.125}{\textrm{mm}}\), while in the reference design this happens only after \(u = {0.33}{\textrm{mm}}\) at a maximum force of \(F = {4660}{\textrm{N}}\). The constrained problems show a generally more beneficial behaviour. With a high critical damage bound (orange curve), the design behaves more like the unconstrained one, due to also showing some localisation behaviour, but reaches a higher maximum force and at a higher respective displacement. Of interest are the additional two curves, with \(\phi _\textrm{crit} = 0.15\) and \(\phi _\textrm{crit} = 0.12\), respectively. The designs generated by these optimisations showed a broadened, diagonal damage distribution in the body. This distribution leads to a slower loss in load-bearing capacity, by delaying the localisation of damage. Moreover, the generated shapes do not show any downward slope of the load–displacement curve within the analysed area. It is to be expected that, upon further loading, the latter design surpass the reference design in its load-bearing capacity due to delaying the critical damage localisation. However, to generally generate stiffer components, a compliance-like optimisation would be beneficial, which is focussed on in Sect. 5.3.

Finally, the previously described localisation behaviour of the respective shapes can also be identified when plotting the accumulated damage, i.e. objective \(\Vert \varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\Vert ^2\), over the applied displacement u, see Fig. 7. The unconstrained shape shows an initially steep increase in damage accumulation up to approximately \(\Vert \varvec{\mathrm {\upphi }}(\varvec{\textrm{s}})\Vert ^2_\mathrm {unconstr.} = 3.15\) at \(u={0.2}{\textrm{mm}}\), after which the accumulation lessens significantly. The same general behaviour is also present in the constrained problem with \(\phi _\textrm{crit} = 0.19\), while the significant change in the slope does not occur. The remaining two problems show a different behaviour in damage accumulation. The damage evolution starts of with a gentle incline of the curve, compared to the unconstrained behaviour. At approximately \(u={0.15}{\textrm{mm}}\) the slope of the curve increases slightly and afterwards the accumulation of damage behaves almost linearly, showing no immediate sign of localisation.

Fig. 7
figure 7

Damage accumulation over displacement for each optimised shape

5.3 Compliance optimisation

Following a direct damage optimisation, one could now instead use the damage states simply as a constraint to limit the damage evolution when conducting a compliance optimisation, similarly done in [27]. However, this shall not be the aim of the presented research. Instead, in this second optimisation problem, the potential benefit of the utilised damage modelling is analysed and reviewed, whether the additional computational complexity shows sufficient gain in generated results. To allow comparison, a single optimisation problem is subjected to three different cases for the underlying material model derived in Sect. 3:

  1. 1.

    A purely elastic case, where the thresholds for damage and plastic initiation are set arbitrarily high to prevent their respective evolution and enforce elastic behaviour.

  2. 2.

    An elasto-plastic case, wherein only the damage threshold is manipulated to prohibit damage evolution.

  3. 3.

    An unaltered case, which leads to the coupled elasto-plastic damaging behaviour.

While theoretically a fourth case, i.e. a case where only the plasticity is disabled and uncoupled damage evolves, is possible, this case is not presented here. Due to the set of chosen material parameters, the damage variable gets too high in this fourth case, which in turn leads to the optimiser failing to find a better solution than the initial guess and therefore results in no change in design. The necessary adjustments to the material parameters of Table 1 are summarised in Table 2 for the three analysed cases.

Table 2 Necessary adjustments to the material parameters in Table 1 for the three considered cases
Fig. 8
figure 8

Damage distribution for the respective shapes of the compliance optimisation

To compare the three cases mentioned above, an objective function is necessary which not directly depends on the underlying material model in its definition. The previous damage based objective function in Sect. 5.2 is therefore not suitable, as no damage values are available in the elastic and plastic problem. Subsequently, the compliance \(C(\varvec{\textrm{s}})\), as described in Sect. 4.3, is chosen for this comparison instead, leading to the generalised optimisation problem

$$\begin{aligned} \begin{aligned}&\underset{\varvec{\textrm{s}}_\textrm{l}\le \varvec{\textrm{s}}\le \varvec{\textrm{s}}_\textrm{u}}{\text {minimise}}{} & {} {\mathfrak {J}}^C = C(\varvec{\textrm{s}}) \\&\text {subject to}{} & {} V(\varvec{\textrm{s}}) = V_0. \end{aligned} \end{aligned}$$
(99)

Due to the choice of objective function, the material model does not directly influence the stated optimisation problem. However, the underlying material behaviour influences the resulting values of the compliance and therefore newly generated geometries. After optimisation, the resulting optimal geometries of the purely elastic and the elasto-plastic problems are subjected to simulations with the unaltered, coupled material behaviour. This in turn allows direct comparison regarding their actual stiffness, when accounting for damage accumulation, as well as their resulting damage distribution.

The resulting optimised geometries and their respective damage distribution are presented in Fig. 8. The results from the purely elastic and the elasto-plastic behaviour are almost identical and not quite distinguishable to the naked eye. Both geometries reduce the thickness and overall width of the top-left area in order to shift that material to the lower part of the plate, resulting in a stiffer behaviour. The hole itself changes into an oval shape with the lower part being the thickest part of the newly generated structure. When directly comparing the elastic and the plastic resulting design, while not directly visible in the figure, the elastic shape is a bit wider on the lower part of the plate, which has to be compensated by reducing the thickness in the area where both CAGD patches meet. This leads to a slightly higher peak damage value for the plastic shape in the lower left corner of cross section area. The coupled case however yields a completely different, new design. Instead of widening the bottom cross section to maximise the overall cross section area in loading direction, the material is shifted to overall thicken the new shape in a general sense. The oval shape of the central hole is more pronounced in this design, as the top-left area of the plate is reduced to the minimal allowed width as well as thickness, as defined by the boundaries of the respective control points. Overall, this leads the plate with the coupled material model to generate a structure, which better homogenises the damage distribution throughout the body. This prevents the localisation of damage that arise in the lower left corner in the other designs, which is similar, but not as pronounced, as in the reference design. Additionally, this design behaves similar to the results of the damage constrained problem in the previous section. That is, a diagonal like damage zone is visible in a \(45^\circ \) angle going from centre left to top right. It is not as pronounced as in the previous section for the damage constrained problems, but still detectable. This is not happening in the other two designs, which show a damage distribution that is more akin to the reference plate, i.e. high values in the lower left corner and reduction in damage outward from that point on.

Table 3 Initial and optimal compliance values for their respective cases
Fig. 9
figure 9

Load–displacement curves for the compliance optimisation. The vertical red line indicates the maximum applied displacement during the optimisation

The resulting numerical values of the compliance objective are listed in Table 3. The first two rows list the initial and optimal compliance values for their respective, unaltered cases. As expected, the elastic values are overall the highest, with the plasticity already reaching lower values by a factor of 100, since the hardening modulus h is significantly smaller than the elastic modulus E. With the addition of damage in the coupled case, this value is again reduced by a factor of 4, since the accumulation of damage additionally lowers the overall stiffness of the body and therein the capacity to capture the mechanical energy. More interesting, for the sake of comparison of these three cases however, is the coupled compliance values \(C_\textrm{cpld}\). For these values, the coupled material model is applied to the geometries of the elastic and plastic case and the resulting compliance values calculated. Since the initial geometry is the same in all cases, the result is equal as well. Unexpectedly, the optimal values are quite similar, with the variance to the coupled result being only approximately \(2.1\%\) for the elastic result and \(3.25\%\) for the plastic case, respectively. First, this again highlights the similarity of the elastic and plastic design, even though the small, almost not distinguishable differences have a higher impact onto the objective than would be expected. Second, these values indicate, that while the coupled case generates a more pronounced design regarding the damage distribution, the resulting compliance is not significantly higher than by simply optimising the problem for a purely elastic case.

This behaviour is also identifiable when comparing the resulting load–displacement curves, see Fig. 9. As expected, all generated designs outperform the initial reference problem by a huge margin; able to withstand 1.5 kN more force at the same applied displacement. However, at the point of optimisation, i.e. \(u^\textrm{pre} = {0.5}\,{\textrm{mm}}\) indicated by the vertical red line, the differences in the three optimal designs is nearly not distinguishable. Nonetheless, comparing the three coupled compliance values in the last row of Table 3, the coupled optimisation results in the highest reaction force at \(F_\textrm{cpld} = {6189}{\textrm{N}}\), the elastic design results in \(F^\textrm{react}_\textrm{el} = {6150}{\textrm{N}}\) and the plastic problem results in the lowest reaction force at \(F^\textrm{react}_\textrm{pl} = {6104}{\textrm{N}}\).

However, when looking closely at the slopes of the respective curves, one can see that while these three curves reach nearly identical values at the point of optimisation, their underlying behaviour is not necessarily identical. That is, the elastic and plastic curves reached, or almost reached, their highest point, indicating that localisation of damage may start to occur. That would indicate a loss in load-bearing capacity and therefore a drop in the load–displacement curve is to be expected. This behaviour is not visible in the curve of the coupled case and its slope is still positive at \(u^\textrm{pre} = {0.5}{\textrm{mm}}\). This prompted to further load the geometries to a new displacement of \(u^\mathrm {pre,*} = {1}{\textrm{mm}}\) to analyse, how these structures behave under extended loading.

As expected from the mentioned observation, the slope of the curves from the elastic and plastic problems start to trend downward, while the coupled design is better at handling further loading. For the latter design, the slope becomes negative at around \(u = {0.63}\,{\textrm{mm}}\) and shows a far less severe downward trend. This highlights the benefit of running optimisations with a coupled damage material model. While the generated structure does not vastly outperform the more simple problems, the underlying consideration of damage results in a more damage tolerant structure, as it accounts for the damage behaviour, and therefore is able to withstand more loading and therefore damage accumulation. This knowledge is beneficial when taking into account safety factors that are often applied to the designing process of parts, in order to handle unforeseen extra loads. Utilising accurate damage models while conducting optimisation, may allow reduction in these safety factors, since possible, unforeseen additional loads can be better absorbed for these kinds of generated geometries.

6 Conclusion and outlook

In this work, a variational approach was applied to a regularised, non-local ductile damage model. This efficiently method to derive the sensitivities allowed application of gradient-based optimisation schemes, i.e. Sequential Quadratic Programming in the conducted shape optimisation. Due to the non-local nature of the material model and inherent local quantities, necessary adjustments to established derivation methods and the optimisation framework were required. The sensitivities were utilised in two examples, i.e. a damage based and a compliance based optimisation. The first showed that utilisation of damage constraints might be necessary to prevent early, optimisation induced, damage localisation. Addition of nodal damage constraints prevented these effects and generated damage tolerant designs. Application of compliance optimisation highlighted the benefit of utilising complicated material models within that optimisation. Elastic, plastic and ductile damage based designs were compared and the latter was able to better compensate for further loading and showed prevention of stiffness degradation.

Further problems can be considered, to maximise the overall ductility of parts, by e.g. using the stress-triaxiality as constraints, cf. [26, 40, 41]. Another extension of this work would be enhancements to the underlying material model. By including effects like viscosity, temperature, or anisotropy, more realistic material behaviour can be taken into account. Another possible application is by analysing the sensitivities of the model with its respect to the material parameters. While extensive parameter identification for the model was conducted in the source material, derivation of the sensitivities might give beneficial insight in further enhancing the model or a generally better choice of parameter identification setups for non-local damage problems.