### 2.1 Overall Strengths of Heterogeneous Materials

Macroscopic strengths of heterogeneous materials can be predicted by applying direct method to RVE samples. To do this, the material should be considered in two well-separated scales: The microscopic scale \({\varvec{y}}\) in which the RVE exists and the macroscopic scale \({\varvec{x}}\) large enough that the heterogeneities smear out. Two scales are related by a scale parameter \(\delta\)

$$\begin{aligned} {\varvec{y}}=\dfrac{{\varvec{x}}}{\delta } \; . \end{aligned}$$

(1)

For a heterogeneous material, once it is subjected to external loading, microscopic stress field \({\varvec{\sigma }}\) and the macroscopic one \({\varvec{\varSigma }}\) satisfy the relationship

$$\begin{aligned} {\varvec{\varSigma }} =\frac{1}{\varOmega }\int _{\Omega }{{\varvec{\sigma }}({\varvec{y}})dV}=\left\langle {\varvec{\sigma }}({\varvec{y}}) \right\rangle . \end{aligned}$$

(2)

Here \(\left\langle \cdot \right\rangle\) stands for the mean-field averaging operator, and \(\varOmega\) indicates the RVE domain. Similarly, the relationship between strains in micro and macro scales satisfy

$$\begin{aligned} {\varvec{E}} =\frac{1}{\varOmega }\int _{\Omega }{{\varvec{\varepsilon }}({\varvec{y}})dV} =\left\langle {\varvec{\varepsilon }}({\varvec{y}}) \right\rangle . \end{aligned}$$

(3)

The microscopic strain \({\varvec{\varepsilon }}\) can be decomposed into two parts: The average value \({\varvec{E}}\) and a fluctuating part \({\varvec{\varepsilon }}^*\)

$$\begin{aligned} {\varvec{\varepsilon }}({\varvec{u}})={\varvec{E}}+ {\varvec{\varepsilon }}^*\;. \end{aligned}$$

(4)

When the overall behavior of the RVE is purely elastic, then \({\varvec{\varSigma }}\) and \({\varvec{E}}\) are correlated by an effective elastic tensor \(\overline{{\mathbb {C}}}\)

$$\begin{aligned} {\varvec{\varSigma }} =\overline{{\mathbb {C}}}:{\varvec{E}}. \end{aligned}$$

(5)

If the material is isotropic in the macro scale, then \(\overline{{\mathbb {C}}}\) can be uniquely determined from effective Young’s modulus \({\bar{E}}\) and effective Poission’s ratio \({\bar{\nu }}\).

Given that the heterogeneous material is composed of elasto-plastic constituents, its global ultimate strength \(\Sigma _U\) and endurance limit \(\Sigma _\infty\) correspond to plastic and shakedown limits, respectively. Here, plastic limit can be viewed as a particular case of shakedown in which the load is only allowed to vary monotonically. The feasible load domain of a material can be calculated from DM by imposing either \({\varvec{E}}\) or \({\varvec{\Sigma }}\) as boundary conditions [9], where the former case refers to the kinematically uniform boundary condition (KUBC) and the latter case the statically uniform boundary condition (SUBC). For a periodic heterogeneous material in the absence of the body force subjected to SUBC, Magoariec et al. [10] proposes a static shakedown condition which requires the stress field associated with the reference elastic body \({\mathcal {B}}^E\), \({\varvec{\sigma }}^e\), and the time invariant residual stress field \(\bar{{\varvec{\rho }}}\) to satisfy

$$\begin{aligned} {\varvec{\sigma }}^e: \left\{ \begin{array}{r@{\;\;}ll} &{} {\varvec{\nabla }}\cdot {\varvec{\sigma }}^e = 0 \quad &{} \text {in} \; \Omega \; ,\\ &{}{\varvec{\sigma }}^e= {\mathbb {C}}:({\varvec{E}}+{\varvec{\varepsilon }}^*) &{} \text {in} \; \Omega \; ,\\ &{} {\varvec{\sigma }}^e \cdot {\varvec{n}} \qquad &{}\text {anti-periodic on} \; \partial \Omega \; ,\\ &{} {\varvec{u}}^* &{}\text {periodic on} \; \partial \Omega \; ,\\ &{}\left\langle {\varvec{\sigma }}\right\rangle ={\varvec{\Sigma }} \; . \end{array} \right. \end{aligned}$$

(6)

$$\begin{aligned} \bar{{\varvec{\rho }}}: \left\{ \begin{array}{r@{\;\;}ll} &{} {\varvec{\nabla }}\cdot \bar{{\varvec{\rho }}} = 0 \qquad &{} \text {in} \; \Omega \; ,\\ &{}\bar{{\varvec{\rho }}} \cdot {\varvec{n}} \qquad &{} \text {anti-periodic on} \; \partial \Omega \; . \\ &{}\left\langle \bar{{\varvec{\rho }}}\right\rangle ={\varvec{0}} \; . \end{array} \right. \end{aligned}$$

(7)

Here, \(\partial \Omega\) refers to the RVE surface, \({\varvec{n}}\) the outer surface normal, and \({\varvec{u}}^*\) the fluctuation part of the displacement corresponds to \({\varvec{\varepsilon }}^*\). Because the material studied in this work is non-periodic, some modifications were made on conditions given in Eqs. (6) and (7): Instead of enforcing the node-wise anti-periodicity of the stresses and periodicity of the fluctuating strain, it is only required \(\left\langle {\varvec{\varepsilon }}^*\right\rangle\) and \(\left\langle \bar{{\varvec{\rho }}}\right\rangle\) to be zero. In other words, when an RVE is subjected to SUBC, \(\left\langle \bar{{\varvec{\rho }}} \right\rangle\) is only required to be divergence free inside \(\Omega\) and have no contribution on the macroscopic stress.

### 2.2 Generating Optimally-Distributed Weight Factors in an *n* Dimensional Load Space

In the present study, the aim is to evaluate strengths of RVEs simultaneously subjected to two tensile and one shear stresses, all vary independently. To this end, we introduce in this section a pragmatic algorithm which systematically generates optimally-distributed weight factors in an *n* dimensional load space.

When an elastic-perfectly plastic structure is submitted to *NL* independently varying loads \(\hat{{\varvec{P}}}_n({\varvec{x}},t)\), \(\hat{{\varvec{P}}}_n\) can be decomposed into two parts: A time independent base \(\hat{{\varvec{P}}}_{0n}({\varvec{x}})\) corresponds to the load pattern and an associated coefficient \(\mu _i\) describes the load magnitude. This way, as shown in Figure 1, a specific load history \({\mathcal {H}}\) can be defined as

$$\begin{aligned} {\mathcal {H}}({\varvec{x}},t)=\sum _{i=1}^{NL}\hat{{\varvec{P}}}_i({\varvec{x}},t) =\sum _{i=1}^{NL}\mu _i(t)\hat{{\varvec{P}}}_{0i}({\varvec{x}})\; , \end{aligned}$$

(8)

where \({\mathcal {H}}\) is a trajectory in the *n* dimensional load space \({\mathcal {L}}\)

$$\begin{aligned} {\mathcal {L}} =\left\{ {\mathcal {H}} ({\varvec{x}},t) \left| {\mathcal {H}} ({\varvec{x}},t)= \sum _{i=1}^{NL}\mu _n(t)\hat{{\varvec{P}}}_{0n}({\varvec{x}}), \, \forall \mu _n \in [\mu _n^-,\mu _n^+] \right. \right\} \; . \end{aligned}$$

(9)

Here, \(\mu _n^-\) and \(\mu _n^+\) correspond to the lower and upper bound of a loading \(\hat{{\varvec{P}}}_n\), respectively. \({\mathcal {L}}\) is a convex domain with \(NV= 2^n\) vertices. We denote each vertex by \({\varvec{P}}_k\), so *k* could be any integer between 1 and *NV*.

Due to the linearity of elastic stresses, \({\varvec{\sigma }}^e\) can be seen as a superposition

$$\begin{aligned} {{{\varvec{\sigma }}}^{e}}\left( {\mathcal {H}}({\varvec{x}},t)\right) =\sum \limits _{n=1}^{NL}{{{{\varvec{\sigma }}}^{e}}\left( {\hat{{\varvec{P}}}_{n}}\right) }=\sum \limits _{n=1}^{NL}{{{\mu _i(t) {\varvec{\sigma }}}^{e}}\left( {\hat{{\varvec{P}}}_{0n}}\right) }. \end{aligned}$$

(10)

As Eq. (10) indicates, for a specific load history, only the magnitudes of loads are varying, thus it is justified to completely focus on coefficients \(\mu _n\). By separating \(\mu _n\) from their original basis \(\hat{{\varvec{P}}}_{0n}\) and merging with the unit basis \({\varvec{e}}_n\), a load magnitude vector \({\varvec{\mu }}\) can be formed. All feasible \({\varvec{\mu }}\) with \(\mu _n \in [\mu _n^-,\mu _n^+]\) constitute a domain

$$\begin{aligned} {\mathcal {U}}= \left\{ {\varvec{\mu }} \left| {\varvec{\mu }} \in {\mathbb {R}}^{NL}, \mu _n \in [\mu _n^-,\mu _n^+] \right. \right\} \; . \end{aligned}$$

(11)

It is evident that an one-to-one mapping can be established between elements in \({\mathcal {L}}\) and \({\mathcal {U}}\). The benefit for introducing \({\mathcal {U}}\) is, that the physical nature of a specific loading becomes unimportant; loadings \(\hat{{\varvec{P}}}_{n}\) differ only by their magnitudes. For simplicity, each basic loading \(\hat{{\varvec{P}}}_{0n}\) should be adjusted to a comparable level, e.g. all correspond to the elastic limit. Then with \(\mu _n\) varying inside \(\mu _n\in [\mu _n^-,\mu _n^+]\), all admissible load combinations can be exhausted.

To illustrate the algorithm for generating \({\varvec{\mu }}\) with the lowest complication, the discussion is restricted to a particular load case where any given load \(\hat{{\varvec{P}}}_n\) is forced to vary within \([{\varvec{0}}, \mu _n^+\hat{{\varvec{P}}}_{0n}]\). In spite of this restriction, it is clear that by replacing 0 in the \(n^{th}\) entry in result by \(\mu _n^-\hat{{\varvec{P}}}_{0n}\), the outlined approach can be easily generalized to account for reversed loading as well. To derive \({\varvec{\sigma }}^e\) at all *NV* load vertices in an *n* dimensional load space, we define a matrix \({\varvec{U}} \in {\mathbb {R}}^{NV\times {n}}\) whose each row corresponds to a binary index of a vertex *k*

$$\begin{aligned} {\varvec{U}}=\left[ \begin{matrix} 1 &{} 1 &{} 1 &{} \cdots &{} 1 &{} 1 &{} 1 \\ 1 &{} 1 &{} 1 &{} \cdots &{} 1 &{} 1 &{} 0 \\ 1 &{} 1 &{} 1 &{} \cdots &{} 1 &{} 0 &{} 1 \\ &{} &{} &{} :\\ &{} &{} &{} :\\ 0 &{} 0 &{} 0 &{} \cdots &{} 0 &{} 0 &{} 1 \\ 0 &{} 0 &{} 0 &{} \cdots &{} 0 &{} 0 &{} 0 \\ \end{matrix} \right] \; . \end{aligned}$$

(12)

Based on \({\varvec{U}}\), a load magnitude vector \({\varvec{\mu }}\) can be converted to a combinatorial matrix \({\varvec{U}}_{\mu } \in {\mathbb {R}}^{NV\times {n}}\)

$$\begin{aligned} \begin{aligned} {\varvec{U}}_{\mu } =&[{\varvec{U}}][\text {diag}({\varvec{\mu }})] \\ =&\left[ {\varvec{U}} \right] \left[ \begin{matrix} \mu _1^+ &{} &{} &{} &{} &{} \\ &{} \mu _2^+ &{} &{} &{} &{} \\ &{} &{} \mu _3^+ &{} &{} &{} \\ &{} &{} &{}\ddots &{} &{} \\ &{} &{} &{} &{}\mu _{n-1}^+ &{}\\ &{} &{} &{} &{} &{} \mu _n^+ \end{matrix} \right] \\ =&\left[ \begin{matrix} \mu _1^+ &{} \mu _2^+ &{} \mu _3^+ &{} \cdots &{} \mu _{n-2}^+ &{} \mu _{n-1}^+ &{} \mu _{n}^+ \\ \mu _1^+ &{} \mu _2^+ &{} \mu _3^+ &{} \cdots &{} \mu _{n-2}^+ &{} \mu _{n-1}^+ &{} 0 \\ \mu _1^+ &{} \mu _2^+ &{} \mu _3^+ &{} \cdots &{} \mu _{n-2}^+ &{} 0 &{} \mu _{n}^+ \\ &{} &{} &{} :\\ &{} &{} &{} :\\ 0 &{} 0 &{} 0 &{} \cdots &{} 0 &{} 0 &{} \mu _{n}^+ \\ 0 &{} 0 &{} 0 &{} \cdots &{} 0 &{} 0 &{} 0 \\ \end{matrix} \right] \; . \end{aligned} \end{aligned}$$

(13)

The purpose of \({\varvec{U}}_{\mu }\) is to superpose stress calculated from each individual loading \(\hat{{\varvec{P}}}_{0n}\) to all *NV* vertex stresses \({\varvec{\sigma }}^e_k\). To do this, first we arrange stress associated with each basic loading \(\hat{{\varvec{P}}}_{0i}\) in following matrix form

$$\begin{aligned} {\varvec{\sigma }}^e_B=\left[ \begin{matrix} {\varvec{\sigma }}^e_i(\hat{{\varvec{P}}}_{01})&{\varvec{\sigma }}^e_i(\hat{{\varvec{P}}}_{02})&\cdots&{\varvec{\sigma }}^e_i(\hat{{\varvec{P}}}_{0n}) \end{matrix} \right] \; . \end{aligned}$$

(14)

In this equation, \({\varvec{\sigma }}^e(\hat{{\varvec{P}}}_{0n})\) is a column vector consisting of stresses at all *NG* Gaussian points. When a 3D model is considered, the length of \({\varvec{\sigma }}^e_{i}(\hat{{\varvec{P}}}_{0n})\) is \(6\cdot NG\). Using \({\varvec{\sigma }}^e_B\) introduced in Eq. (14), \({\varvec{\sigma }}^e_{k}\) at all load vertices can be calculated by

$$\begin{aligned} \begin{aligned} {\varvec{\sigma }}^e_k =&[{\varvec{\sigma }}^e_B][{\varvec{U}}_{\mu }]^\text{T} \\ =&\left[ {\varvec{\sigma }}^e_B \right] \left[ \begin{matrix} \mu _1^+ &{} \mu _1^+ &{} \mu _1^+ &{} \cdots &{} 0 &{} 0 \\ \mu _2^+ &{} \mu _2^+ &{} \mu _2^+ &{} \cdots &{} 0 &{} 0 \\ \mu _3^+ &{} \mu _3^+ &{} \mu _3^+ &{} \cdots &{} 0 &{} 0 \\ &{} &{} &{} :\\ &{} &{} &{} :\\ &{} &{} &{} :\\ \mu _{n-1}^+ &{} \mu _{n-1}^+ &{} 0 &{} \cdots &{} 0 &{} 0 \\ \mu _{n}^+ &{} 0 &{} \mu _{n}^+&{} \cdots &{} \mu _{n}^+ &{} 0 \\ \end{matrix} \right] \\ =&\left[ \begin{matrix} {\varvec{\sigma }}^e_1&{\varvec{\sigma }}^e_2&\cdots&{\varvec{\sigma }}^e_{NV} \end{matrix} \right] \; . \end{aligned} \end{aligned}$$

(15)

In DM, load factor \(\alpha\) is often evaluated for many different combinations of \(\hat{{\varvec{P}}}_i\). As Eq. (13) implies, each combination can be viewed as a polyhedron whose vertices generated from a different \({\varvec{\mu }}\). A challenge in DM is to use the least number of \({\varvec{\mu }}\) to approximate the domain \({\mathcal {U}}\). For two independently varied loads \(\hat{{\varvec{P}}}_{01}\) and \(\hat{{\varvec{P}}}_{02}\) , one simple way to generate a series of \({\varvec{\mu }}\) is introducing an angle \(\theta \in [0,2\uppi ]\)

$$\begin{aligned} {\varvec{\mu }}=\left( \begin{matrix} \cos \theta&\sin \theta \end{matrix} \right) ^\text{T} \; . \end{aligned}$$

(16)

Similarly, when three independently varying loads \(\hat{{\varvec{P}}}_{01}\), \(\hat{{\varvec{P}}}_{02}\) and \(\hat{{\varvec{P}}}_{03}\) are considered, one can use two angles \(\theta \in [0,\uppi ]\) and \(\varphi \in [0,2\uppi ]\)

$$\begin{aligned} {\varvec{\mu }}=\left( \begin{matrix} \sin \theta \cos \varphi&\sin \theta \sin \varphi&\cos \theta \end{matrix} \right) ^\text{T} \; . \end{aligned}$$

(17)

Although this approach is simple, it is hard to be generalized to cases \(n > 3\). Meanwhile, the method requires users to specify the values of parameters, e.g., \(\theta\) and \(\phi\) in Eq. (17), therefore when these parameters are inappropriately selected, \({\varvec{\mu }}\)’s will have a severe inhomogeneous distribution in \({\mathcal {U}}\). To remedy such problem, we developed a simple
algorithm.

Before illustrating this algorithm, we assume that \(\hat{{\varvec{P}}}_{0n}\) has already been adjusted to a comparable level, in other words, \({\varvec{\sigma }}^e(\hat{{\varvec{P}}}_{0n})\) are in similar magnitudes. Based on this premise, we could fix all \(\mu _n^+\) to 1 and discretize the interval [0, 1] associated to \(\hat{{\varvec{P}}}_{0n}\) to a grid vector \({\varvec{p}}_n\) of the length \(l_n\). Because each \({\varvec{p}}_n\) can be viewed as a set \(\{{\varvec{p}}_n\}\) whose elements are vector’s components, the load set \({\mathcal {U}}\) can be generated by calculating the Cartesian power \({\varvec{p}}_1 \times {\varvec{p}}_2 \times \dots \times {\varvec{p}}_n\). The \({\mathcal {U}}\) generated in such a manner is a set consisting of \(\prod _{i=1}^{n} l_i\) elements where each element represents a vector \({\varvec{\mu }} \in {\mathbb {R}}^n\). It is easy to figure out that many \({\varvec{\mu }}\) in \({\mathcal {U}}\) have different norms but same directions. These vectors are repetitive because their difference in norms can be compensated by the load factor \(\alpha\) calculated from DM. Due to this reason, only vectors differing in terms of directions should be remained in \({\mathcal {U}}\) and the repeating ones should be removed. To do this, as shown in Figure 2 we normalize vectors in \({\mathcal {U}}\) and remove the repeating ones after normalization. It is noteworthy that, after doing this \({\varvec{\mu }}\) in \({\mathcal {U}}\) are no longer evenly distributed. To optimize the distribution, the distance between each paired vector \(\Delta {\varvec{\mu }}\) is evaluated and once \(\Vert \Delta {\varvec{\mu }}\Vert\) drops below a user-defined tolerance \(\epsilon\), two vectors are regarded as identical and one of them is removed from the set (see Figure 2(b)). Using this method, by adjusting parameter \(\epsilon\), one can easily control the size of \(\, {\mathcal {U}}\) and generate the set with optimally distributed \({\varvec{\mu }}\)’s.

### 2.3 Optimization Problem from the Static Shakedown Theorem

Employing shakedown conditions outlined in Eqs. (6) and (7) and discretizing the physical fields by FE formulations, the macroscopic strengths of RVEs composed of elastic perfectly plastic materials can be calculated from following optimization problem

$$\begin{array}{llll} \underset{\bar{{\varvec{\rho }}},\alpha }{\text{minimize}}&\quad -\alpha \\ \text{subject to}&\quad \sum _{i=1}^{NG} {\varvec{C}}_i \, \bar{{\varvec{\rho }}}_i = {\varvec{0}} ,\\& F(\alpha {\varvec{\sigma }}^e_{ik}+\bar{{\varvec{\rho }}}_i) - \sigma _{Y\,i}^2 \le 0 \\ &\forall i \in [1,NG] ; k \in [1, NV]. \end{array}$$

(18)

Here, \(\alpha\) is the load factor, \({\varvec{C}}\) the equilibrium matrix, \(\bar{{\varvec{\rho }}}_i\) the stress tensor in the \(i^{th}\) Gaussian point, \({\varvec{\sigma }}^e_{ik}\) the abbreviation of \({\varvec{\sigma }}^e_i({\varvec{P}}_k)\) which means \({\varvec{\sigma }}^e\) at Gaussian point *i* and load vertex *k*, \(\sigma _Y\) the yield strength, *F* the yield function. Solving Eq. (18) yields the load capacity of the RVE, and depending on if \(k=1\) or \(k > 1\) the calculated strength corresponds to either ultimate strength \(\Sigma _U\) or endurance limit \(\Sigma _\infty\).

Following steps elucidated in our previous work [32] problem Eq. (18) can be transformed into an equivalent one whose inequality constraints are Euclidean ball constraints. Since after this transformation the problems obtained are typical second-order cone programming (SOCP) problems, they can be solved efficiently using commercial optimization solvers such as Gurobi [34], CPLEX [35], MOSEK [36], among others. In the present study, solver Gurobi is employed to calculate strengths of RVE for cases \(NV=\) 1, 2 and 8 by solving optimization problems. Here, \(NV=1\) yields the ultimate strength \(\Sigma _U\), \(NV=2\) the endurance limit under proportionately varied three loads \(\Sigma _\infty ^{2P}\), and \(NV=8\) the endurance limit under disproportionately varied three loads \(\Sigma _\infty ^{8P}\).