Skip to main content
Log in

Matlab code for a level set-based topology optimization method using a reaction diffusion equation

  • Educational Article
  • Published:
Structural and Multidisciplinary Optimization Aims and scope Submit manuscript

Abstract

This paper presents a simple Matlab implementation for a level set-based topology optimization method in which the level set function is updated using a reaction diffusion equation, which is different from conventional level set-based approaches (Allaire et al. 2002, 2004; Wang et al. 2003) that use the Hamilton-Jacobi equation to update the level set function. With this method, the geometrical complexity of optimized configurations can be easily controlled by appropriately setting a regularization parameter. We explain the code in detail, and also the derivation of the topological derivative that is used in the level set-based topology optimization. Numerical results for stiffness maximization problems are provided to facilitate the reader’s understanding. The presented code is intended for educational purposes only. This paper was inspired by previously published papers presenting Matlab code for a SIMP method (Sigmund 2001; Andreassen et al. 2011), a level set-based method (Challis 2010), and FreeFem ++ code for a structural optimization method (Allaire and Pantz 2006). Readers can investigate results provided by these different methods and discover the prominent aspects of each particular method. The code presented here can be downloaded from http://www.osdel.me.kyoto-u.ac.jp/members/yamada/codes.html.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9

References

  • Allaire G (2002) Shape optimization by the homogenization method. Vol. 146 of applied mathematical sciences. Springer, New York

    Book  Google Scholar 

  • Allaire G, Pantz O (2006) Structural optimization with FreeFem++. Struct Multidiscipl Optim 32:173–181

    Article  MATH  MathSciNet  Google Scholar 

  • Allaire G, Jouve F, Toader AM (2002) A level-set method for shape optimization. C R Acad Sci Paris Ser I 334:1125–1130

    Article  MATH  MathSciNet  Google Scholar 

  • Allaire G, Jouve F, Toader AM (2004) Structural optimization using sensitivity analysis and a level-set method. J Comp Phys 194:363–393

    Article  MATH  MathSciNet  Google Scholar 

  • Allaire G, de Gournay F, Jouve F, Toader AM (2005) Structural optimization using topological and shape sensitivity via a level set method. Control Cybern 34:59–80

    MATH  MathSciNet  Google Scholar 

  • Andreassen E, Clausen A, Schevenels M, Lazarov BS, Sigmund O (2011) Efficient topology optimization in MATLAB using 88 lines of code. Struct Multidiscipl Optim 43:1–16

    Article  MATH  Google Scholar 

  • Bendsøe MP, Kikuchi N (1988) Generating optimal topologies in structural design using a homogenization method. Comput Methods Appl Mech Eng 71:197–224

    Article  Google Scholar 

  • Bendsøe MP (1989) Optimal shape design as a material distribution problem. Struct Multidiscipl Optim 1:193–202

    Article  Google Scholar 

  • Challis VJ (2010) A discrete level-set topology optimization code written in Matlab. Struct Multidisc Optim 41:453–464

    Article  MATH  MathSciNet  Google Scholar 

  • Eschenauer HA, Kobelev VV, Schumacher A (1994) Bubble method for topology and shape optimization of structures. Struct Multidisc Optim 8:42–51

    Article  Google Scholar 

  • Howell HH (2001) Compliant mechanisms. Wiley

  • Guzina BB, Bonnet M (2004) Topological derivative for the inverse scattering of elastic waves. Q J Mech Appl Math 57 (2):161–179

    Article  MATH  MathSciNet  Google Scholar 

  • Lurie AI, Belyaev A (2005) Theory of elasticity. Springer, New York

    Book  Google Scholar 

  • Nishiwaki S, Frecker MI, Min S, Kikuchi N (1998) Topology optimization of compliant mechanisms using the homogenization method. Int J Numer Methods Eng 535–559

  • Osher SJ, Sethian JA (1988) Fronts propagating with curvature dependent speed: algorithms based on Hamilton-Jacobi formulations. J Comput Phys 79:12–49

    Article  MATH  MathSciNet  Google Scholar 

  • Sigmund O (2001) A 99 line topology optimization code written in Matlab. Struct Multidisc Optim 21:120–127

    Article  Google Scholar 

  • Wang MY, Wang X, Guo D (2003) A level set method for structural topology optimization. Comput Methods Appl Mech Eng 192:227–246

    Article  MATH  Google Scholar 

  • Yamada T, Izui K, Nishiwaki S, Takezawa A (2010) A topology optimization method based on the level set method incorporating a fictitious interface energy. Comput Methods Appl Mech Eng 199:2876–2891

    Article  MATH  MathSciNet  Google Scholar 

Download references

Acknowledgments

The authors would like to express their gratitude to Prof. Toshiro Matsumoto and Prof. Hiroshi Isakari for their helpful discussions concerning topological derivatives and encouragement of this work.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Takayuki Yamada.

Appendices

Appendix A: Matlab code

figure afigure a

Appendix B: Topological derivative derivation

The boundary value problem for a created hole can be described as

$$\begin{array}{@{}rcl@{}} &&{} {div \left( C_{ijkl}\left( u_{k,l} + \delta u_{k,l} \right) \right) } =0 \quad \text{in} \quad {\Omega} \setminus {\Omega}_{\varepsilon} \end{array} $$
(38)
$$\begin{array}{@{}rcl@{}} &&{}u_{i} + \delta u_{i}\,\,\, = \bar{u}_{i} \qquad \hspace{4pc}{ \text{on}\quad {\Gamma}_{u}} \end{array} $$
(39)
$$\begin{array}{@{}rcl@{}} &&{}t_{i} +\delta t_{i}\,\,\, = \bar{t}_{i} \qquad\hspace{4.7pc} { \text{on} \quad {\Gamma}_{t}} \end{array} $$
(40)
$$\begin{array}{@{}rcl@{}} &&{}t_{i} + \delta t_{i}\,\,\, = 0 \qquad\hspace{4.8pc} { \text{on}\quad {\Gamma}_{\epsilon}} \,. \end{array} $$
(41)

We note that the boundary conditions expressed in (39) and (40) indicate that the displacement and traction after creating a hole must satisfy the original displacement and traction constraints, respectively. (41) represents the free surface on the boundary of the created hole.

The Lagrangian that includes the created hole is given as

$$\begin{array}{@{}rcl@{}} \bar{F} + \delta \bar{F} &=& {\int}_{{\Gamma}_{u} \cup {\Gamma}_{t}} (t_{i} u_{i} + t_{i} \delta u_{i} + \delta t_{i} u_{i} )d{\Gamma} \\ && + {\int}_{{\Gamma}_{u} \cup {\Gamma}_{t}} \,\tilde{u}_{i} (t_{i} + \delta t_{i} ) d{\Gamma} + {\int}_{{\Gamma}_{\varepsilon}} \tilde{u}_{i} (t_{i} + \delta t_{i} ) d{\Gamma} \\ & &- {\int}_{\Omega \setminus {\Omega}_{\varepsilon}} \tilde{u}_{i,j} C_{ijkl} (u_{k,l} + \delta u_{k,l}) d{\Omega} \\ && { + \uplambda \left( {\int}_{\Omega \setminus {\Omega}_{\varepsilon}} d{\Omega} - V_{\text{max}} \right) . } \end{array} $$
(42)

When the boundary condition (41) is inserted into (42), the third term on the right-hand side becomes zero. Subtracting the Lagrangian (19) from the Lagrangian (42), the variation \(\delta \bar {F}\) of the Lagrangian then becomes

$$\begin{array}{@{}rcl@{}} \delta \bar{F} &=& {\int}_{{\Gamma}_{u} \cup {\Gamma}_{t}} (t_{i} \delta u_{i} + \delta t_{i} u_{i} )d{\Gamma} + {\int}_{{\Gamma}_{u} \cup {\Gamma}_{t}} \tilde{u}_{i} \delta t_{i} ~d{\Gamma} \\ &&- {\int}_{\Omega \setminus {\Omega}_{\varepsilon}} \tilde{u}_{i,j} C_{ijkl} \delta u_{k,l} ~d{\Omega} + {\int}_{{\Omega}_{\varepsilon}} \tilde{u}_{i,j} C_{ijkl} u_{k,l} ~d{\Omega} \\ &&{ - \uplambda {\int}_{{\Omega}_{\varepsilon}} d{\Omega}.} \end{array} $$
(43)

The third term on the right-hand side in the above equation can be replaced using Green’s formula, as follows:

$$\begin{array}{@{}rcl@{}} &&{}{\int}_{\Omega \setminus {\Omega}_{\varepsilon}} \tilde{u}_{i,j} C_{ijkl} \delta u_{k,l} ~d{\Omega} = {\int}_{{{\Gamma}_{u}} \cup {\Gamma}_{t}} \tilde t_{i} \delta u_{i}~ d{\Gamma} \\ && + {\int}_{{\Gamma}_{\varepsilon} } C_{ijkl} \tilde u_{i,j} n_{l} \delta u_{k} ~d{\Gamma} - {\int}_{\Omega \setminus {\Omega}_{\varepsilon}}{div \left( C_{ijkl}\tilde u_{k,l} \right) \delta u_{i} } ~d{\Omega}, \end{array} $$
(44)

where \(\tilde t_{i}\) is the derivative of Lagrange multiplier \(\tilde u_{i}\) in the normal direction and n l is the normal vector at boundary Γ 𝜖 . Substituting the above equation into (43) and considering the conditions, δ u i =0 on Γ u and δ t i =0 on Γ t , the variation of the Lagrangian is then given as

$$\begin{array}{@{}rcl@{}} \delta \bar{F} &=& {\int}_{\Omega \setminus {\Omega}_{\varepsilon}} \,div\left( C_{ijkl} \tilde{u}_{k,l} \right) \delta u_{i}~ d{\Omega} \, + \, {\int}_{{\Gamma}_{t}} \, (t_{i} - \tilde t_{i} ) \delta u_{i} ~d{\Gamma} \\ &&+ {\int}_{{\Gamma}_{u} } (u_{i} + \tilde{u}_{i} ) \delta t_{i} ~d{\Gamma} \, +\, {\int}_{{\Omega}_{\varepsilon}} \tilde{u}_{i,j} C_{ijkl} u_{k,l} ~d{\Omega} \\ &&- {\int}_{{\Gamma}_{\varepsilon} } C_{ijkl} \tilde u_{i,j} n_{l} \delta u_{k} ~d{\Gamma} { - \uplambda {\int}_{{\Omega}_{\varepsilon}} d{\Omega} . } \end{array} $$
(45)

The adjoint equation is now defined so that the integrals of the term that includes δ u i or δ t i are canceled out, as follows:

$$\begin{array}{@{}rcl@{}} &&{}{div \left( C_{ijkl}\tilde u_{k,l} \right) =0 \quad \text{in} \quad {\Omega} } \end{array} $$
(46)
$$\begin{array}{@{}rcl@{}} &&{}{\tilde u_{i} = -{u}_{i} \quad\hspace{3.3pc} \text{on} \quad {\Gamma}_{u}} \end{array} $$
(47)
$$\begin{array}{@{}rcl@{}} &&{}{\tilde t_{i} = {t}_{i} \quad\hspace{4.4pc} \text{on} \quad {\Gamma}_{t}} \,. \end{array} $$
(48)

The variation of the Lagrangian can be obtained as follows, using the adjoint variable obtained by solving the above adjoint field.

$$\begin{array}{@{}rcl@{}} \delta {\bar F} &=& {\int}_{{\Omega}_{\varepsilon}} \, \tilde{u}_{i,j} C_{ijkl} u_{k,l} \, d{\Omega} \, - \, {\int}_{{\Gamma}_{\varepsilon} } \, C_{ijkl} \tilde u_{i,j} n_{l} \delta u_{k} \, d{\Gamma} \, \\ &&- \, \uplambda {\int}_{{\Omega}_{\varepsilon}} d{\Omega} . \end{array} $$
(49)

The first term on the right-hand side of the above equation represents state variable u i and adjoint variable \(\tilde u_{i}\), which are known values. On the other hand, the value of δ u i in the second term is unknown. We note that this second term was ignored in previous research (Yamada et al. 2010), so that the method did not consider the effect of boundary condition Γ 𝜖 that arises when a hole is created in the design domain.

By subtracting the boundary value problem (15)–(17) from the boundary value problem (38)-(41), we obtain the following boundary value problem by which the unknown value δ u is governed.

$$\begin{array}{@{}rcl@{}} &&{}div \left( C_{ijkl}\delta u_{k,l} \right) =0 \quad \text{in} \quad {\Omega} \setminus {\Omega}_{\varepsilon} \end{array} $$
(50)
$$\begin{array}{@{}rcl@{}} &&{}\delta u_{i} = 0 \quad\hspace{4.2pc} \text{on} \quad {\Gamma}_{u} \end{array} $$
(51)
$$\begin{array}{@{}rcl@{}} &&{}\delta t_{i} = 0 \quad\hspace{4.4pc} \text{on} \quad {\Gamma}_{t} \end{array} $$
(52)
$$\begin{array}{@{}rcl@{}} &&{}\delta t_{i} = - t_{i} \quad \hspace{3.7pc}\text{on} \quad {\Gamma}_{\epsilon} \,. \end{array} $$
(53)

In the above problem, since the radius of the hole 𝜖 is sufficiently small, the effect of boundaries Γ u and Γ t can be ignored for solving δ u i on Γ 𝜖 . δ u i is then a solution of the following boundary value problem.

$$\begin{array}{@{}rcl@{}} &&{}{div \left( C_{ijkl}\delta u_{k,l} \right) =0 \quad\hspace{1.5pc} \text{in} \quad {\Omega} \setminus {\Omega}_{\varepsilon} } \end{array} $$
(54)
$$\begin{array}{@{}rcl@{}} &&{}{\delta t_{i} = - \sigma^{0}_{ij} n_{j} + O(\epsilon) \quad\hspace{1pc}\text{on} \quad {\Gamma}_{\epsilon}} \,, \end{array} $$
(55)

where the superscript 0 indicates the value without creating holes, and σ i j =C i j k l u k,l . The solution of this boundary value problem in sphere Γ 𝜖 is given (Guzina and Bonnet 2004; Lurie and Belyaev 2005) as:

$$ \delta u_{i} = -\frac{\varepsilon}{\mu} \, \left(\frac{4-5\mu}{7-5\mu} \sigma^{0}_{ij} n_{j} \, -\, \frac{3-5\mu}{4(7-5\mu)}\sigma^{0}_{jj} n_{j} \, +\, O(\varepsilon) \,\, \right)\!. $$
(56)

The variation of Lagrangian \(\bar {F}\) is then given by:

$$\begin{array}{@{}rcl@{}} \delta \, \bar{F} &\, = \, \frac{4\pi \varepsilon^{3}}{3} \, \left\{ \frac{3(1-\nu)}{2(1+\nu)(7-5\nu)} \,\left[ \, \frac{-(1-14\nu+15\nu^{2})E}{(1-2\nu)^{2}} \delta_{ij}\delta_{kl} \right. \right. \\ & \left. \left. \, {\frac{1}{1}} + 5E(\delta_{ik}\delta_{jl}+\delta_{il}\delta_{jk}) \right] \tilde u^{0}_{i,j}u^{0}_{k,l} {- \uplambda } \right\}\!, \end{array} $$
(57)

where δ i j is Kronecker’s delta function. Finally, the topological derivative of the Lagrangian is given as

$$ d_{t}{\bar F} = \underset{\epsilon \rightarrow 0}{\text{lim}} \frac{\delta {\bar F}}{\frac{4\pi \epsilon^{3}}{3}} = \tilde u^{0}_{i,j} A_{ijkl} u^{0}_{k,l} {- \uplambda } \,, $$
(58)

where A i j k l is defined as follows:

$$\begin{array}{@{}rcl@{}} \nonumber A_{ijkl} & = \frac{3(1-\nu)}{2(1+\nu)(7-5\nu)} \bigg[ \frac{-(1-14\nu+15\nu^{2})E}{(1-2\nu)^{2}} \delta_{ij}\delta_{kl} \\& \, +5E(\delta_{ik}\delta_{jl}+\delta_{il}\delta_{jk}) \bigg]\!. \end{array} $$
(59)

Appendix C: Topological derivative implementation

First, for simplicity, we reformulate the tensor A i j k l defined in (22) as follows:

$$ A_{ijkl} : = A_{1} \delta_{ij} \delta_{kl} + A_{2} (\delta_{ik} \delta_{jl} + \delta_{il} \delta_{jk} )\,. $$
(60)

Namely,

$$ A_{1} = -\frac{3(1-\nu)\left(1-14\nu+15\nu^{2}\right)}{2(1+\nu)(7-5\nu)(1-2\nu)^{2}}E , \, A_{2} = \frac{15E(1-\nu)}{2(1+\nu)(7-5\nu)}\,. $$
(61)

The first term on the right-hand side in (21) can then be given as follows:

$$\begin{array}{@{}rcl@{}} \tilde u_{i,j}A_{ijkl}u_{k,l} &=& \tilde u_{i,j} \left\{ A_{1} \delta_{ij} \delta_{kl} + A_{2} (\delta_{ik} \delta_{jl} + \delta_{il} \delta_{jk} ) \right\} u_{k.l} \end{array} $$
(62)
$$\begin{array}{@{}rcl@{}} &=& A_{1} (\tilde u_{1,1} + \tilde u_{2,2} + \tilde u_{3,3} )(u_{1,1} + u_{2,2} + u_{3,3} ) \\ &&+A_{2}(\tilde u_{1,1}u_{1,1} \,+\, \tilde u_{1,2} u_{1,2} + \tilde u_{1,3}u_{1,3}\\ &&+ \tilde u_{2,1}u_{2,1} + \tilde u_{2,2}u_{2,2} + \tilde u_{2,3}u_{2,3} + \tilde u_{3,1}u_{3,1}\\ &&+ \tilde u_{3,2}u_{3,2} + \tilde u_{3,3}u_{3,3} )\\ &&+A_{2}(\tilde u_{1,1}u_{1,1} \,+\, \tilde u_{1,2} u_{2,1} + \tilde u_{1,3}u_{3,1}\\ &&+ \tilde u_{2,1}u_{1,2} + \tilde u_{2,2}u_{2,2} + \tilde u_{2,3}u_{3,2} + \tilde u_{3,1}u_{1,3}\\ &&+ \tilde u_{3,2}u_{2,3} + \tilde u_{3,3}u_{3,3} ) \end{array} $$
(63)
$$\begin{array}{@{}rcl@{}} &=& (A_{1}+2A_{2}) \tilde u_{1,1} u_{1,1} + (A_{1}+2A_{2}) \tilde u_{2,2} u_{2,2} \\ &&+ (A_{1}+2A_{2}) \tilde u_{3,3} u_{3,3} \\ &&+A_{1}(\tilde u_{1,1} u_{2,2} + \tilde u_{2,2} u_{1,1} \\ &&+ \tilde u_{2,2} u_{3,3} + \tilde u_{3,3} u_{2,2} + \tilde u_{3,3} u_{1,1} \\ &&+ \tilde u_{1,1} u_{3,3} ) \\ &&+ A_{2} [ (\tilde u_{1,2} + \tilde u_{2,1})(u_{1,2} + u_{2,1}) \\ &&+ (\tilde u_{2,3} + \tilde u_{3,2})(u_{2,3} + u_{3,2})\\ &&+ (\tilde u_{3,1} + \tilde u_{1,3})(u_{3,1} + u_{1,3})]. \end{array} $$
(64)

In the above formulation, we use \(u^{0}_{i,j}\) instead of u i,j for simplicity. Now, using the following definition of strains, 𝜖 i i = u i,i , and τ i j = u i,j +u j,i , the above equation is transformed as follows:

$$\begin{array}{@{}rcl@{}} \tilde{u}_{i,j}A_{ijkl}u_{k,l}&=& (A_{1}+2A_{2}){\tilde{\epsilon}_{11}\epsilon_{11}} + (A_{1}+2A_{2}){\tilde \epsilon_{22} \epsilon_{22}} + (A_{1}+2A_{2}) {\tilde{\epsilon}_{33}\epsilon_{33}} \\ &&+ A_{1} ({ \tilde \epsilon_{11}\epsilon_{22}+ \tilde{\epsilon}_{22}\epsilon_{11} + \tilde{\epsilon}_{22}\epsilon_{33} + \tilde{\epsilon}_{33}\epsilon_{22} + \tilde{\epsilon}_{33}\epsilon_{11} + \tilde \epsilon_{11}\epsilon_{33} } )\\ &&+ A_{2} (\tilde{\tau}_{12}\tau_{12} + \tilde{\tau}_{23}\tau_{23} + \tilde{\tau}_{31}\tau_{31}) \end{array} $$
(65)
$$\begin{array}{@{}rcl@{}} &=& \left[\begin{array}{llllll} {\tilde{\epsilon}_{11}} & {\tilde{\epsilon}_{22}} & {\tilde{\epsilon}_{33}} & {\tilde{\tau}_{12}} & {\tilde{\tau}_{23}} & {\tilde{\tau}_{31}} \end{array}\right]\\ &&\times\left[\begin{array}{llllll} A_{1}+2A_{2} & A_{1} & A_{1} & 0 & 0 & 0 \\ A_{1} & A_{1}+2A_{2} & A_{1} & 0 & 0 & 0 \\ A_{1} & A_{1}& A_{1}+2A_{2} & 0 & 0 & 0 \\ 0 & 0 & 0 & A_{2} & 0 & 0 \\ 0 & 0 & 0 & 0 & A_{2} & 0 \\ 0 & 0 & 0 & 0 & 0 & A_{2} \\ \end{array}\right] \left[\begin{array}{l} \epsilon_{11} \\ \epsilon_{22} \\ \epsilon_{33} \\ \tau_{12} \\ \tau_{23} \\ \tau_{31} \end{array}\right]. \end{array} $$
(66)

Similarly, for the plane stress problem, we have

$$\begin{array}{@{}rcl@{}} \tilde u_{i,j}A_{ijkl}u_{k,l} &=& \left[\begin{array}{lll} {\tilde {\epsilon}_{11}} {\tilde {\epsilon}_{22}} & {\tilde {\tau}_{12}} \end{array}\right] \left[\begin{array}{llllll} A_{1}+2A_{2} & A_{1} & 0 \\ A_{1} & A_{1}+2A_{2} & 0 \\ 0 & 0 & A_{2} & 0 \\ \end{array}\right]\left[\begin{array}{l} \epsilon_{11} \\ \epsilon_{22} \\ \tau_{12} \end{array}\right] \\&=& (A_{1}+2A_{2}) \left[\begin{array}{lll} {\tilde {\epsilon}_{11}} & {\tilde {\epsilon}_{22}} & {\tilde {\tau}_{12}} \end{array}\right] \left[\begin{array}{lll} 1 & c & 0 \\ c & 1 & 0 \\ 0 & 0 & \frac{1-c}{2} \\ \end{array}\right] \left[\begin{array}{l} \epsilon_{11} \\ \epsilon_{22} \\ \tau_{12} \end{array}\right], \end{array} $$
(67)

where \(c = \frac {A_{1}}{A_{1}+2A_{2}}\). Compare this with the following formulation of the mutual strain energy density:

$$\begin{array}{@{}rcl@{}} {\tilde u_{i,j}}E_{ijkl}u_{k,l} = \frac{E}{(1-\nu)^{2}} \left[\begin{array}{lll} {\tilde \epsilon_{11}} & \, \tilde \epsilon_{22} & \,{\tilde \tau_{12}} \end{array}\right] \left[\begin{array}{lll} 1 & \nu & 0 \\ \nu & 1& 0 \\ 0 & 0 & \frac{1-\nu}{2} \\ \end{array}\right] \left[\begin{array}{l} \epsilon_{11} \\ \epsilon_{22} \\ \tau_{12} \\ \end{array}\right]. \end{array} $$
(68)

The topological derivative can be therefore computed by substituting A 1, A 2 into E, ν in the procedure for computing the mutual strain energy density, as follows:

$$ E \rightarrow (A_{1}+2A_{2})(1-c)^{2}, \, \nu \rightarrow c. $$
(69)

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Otomori, M., Yamada, T., Izui, K. et al. Matlab code for a level set-based topology optimization method using a reaction diffusion equation. Struct Multidisc Optim 51, 1159–1172 (2015). https://doi.org/10.1007/s00158-014-1190-z

Download citation

  • Received:

  • Revised:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s00158-014-1190-z

Keywords

Navigation