Simple, accurate surrogate models of the elastic response of three-dimensional open truss micro-architectures with applications to multiscale topology design

A Correction to this article is available

This article has been updated

Abstract

Elastic meta-materials are those whose unique properties come from their micro-architecture, rather than, e.g., from their chemistry. The introduction of such architecture, which is increasingly able to be fabricated due to advances in additive manufacturing, expands the design domain and enables improved design, from the most complex multi-physics design problems to the simple compliance design problem that is our focus. Unfortunately, concurrent design of both the micro-scale and the macroscale is computationally very expensive when the former can vary spatially, particularly in three dimensions. Instead, we provide simple, accurate surrogate models of the homogenized linear elastic response of the isotruss, the octet truss, and the ORC truss based on high-fidelity continuum finite element analyses. These surrogate models are relatively accurate over the full range of relative densities, in contrast to analytical models in the literature, which we show lose accuracy as relative density increases. The surrogate models are also simple to implement, which we demonstrate by modifying Sigmund’s 99-line code to solve a three-dimensional, multiscale compliance design problem with spatially varying relative density. We use this code to generate examples in both two and three dimensions that illustrate the advantage of elastic meta-materials over structures with a single length scale, i.e., those without micro-architectures.

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

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9
Fig. 10
Fig. 11
Fig. 12
Fig. 13
Fig. 14
Fig. 15
Fig. 16
Fig. 17
Fig. 18
Fig. 19

Change history

  • 07 January 2019

    The original version of this paper unfortunately contains three errors in the topology optimization code that was used to generate the examples. Line numbers refer to the code as it appears in Appendix D of the original paper.

  • 07 January 2020

    The original version of this paper unfortunately contains three errors in the topology optimization code that was used to generate the examples. Line numbers refer to the code as it appears in Appendix D of the original paper.

References

  1. Aage N, Andreassen E, Lazarov BS, Sigmund O (2017) Giga-voxel computational morphogenesis for structural design. Nature 550(7674):84

    Google Scholar 

  2. Allaire G (2002) Shape optimization by the homogenization method. Springer, New York

    Google Scholar 

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

    MathSciNet  MATH  Google Scholar 

  4. Alzahrani M, Choi SK, Rosen DW (2015) Design of truss-like cellular structures using relative density mapping method. Mater Des 85:349–360

    Google Scholar 

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

    MathSciNet  MATH  Google Scholar 

  6. Bendsøe M, Sigmund O (2003) Topology optimization: theory, methods, and applications. Springer, Berlin

    Google Scholar 

  7. Bendsøe MP (1989) Optimal shape design as a material distribution problem. Structural Optimization 1 (4):193–202

    Google Scholar 

  8. Bendsøe MP, Sigmund O (1999) Material interpolation schemes in topology optimization. Arch Appl Mech 69(9-10):635– 654

    MATH  Google Scholar 

  9. Berger JB, Wadley HNG, McMeeking RM (2017) Mechanical metamaterials at the theoretical limit of isotropic elastic stiffness. Nature 543:233–537

    Google Scholar 

  10. Bourdin B (2001) Filters in topology optimization. Int J Numer Methods Eng 50(9):2143–2158

    MathSciNet  MATH  Google Scholar 

  11. Bower AF (2009) Applied mechanics of solids, 1st edn. CRC Press, Boca Raton

    Google Scholar 

  12. Bruns T, Tortorelli D (2001) Topology optimization of non-linear elastic structures and compliant mechanisms. Comput Methods Appl Mech Eng 190(26):3443–3459

    MATH  Google Scholar 

  13. Chang PS, Rosen DW, Chang PS, Rosen DW (2011) An improved size, matching, and scaling method for the design of deterministic mesoscale truss structures. In: ASME 2011 International design engineering technical conferences and computers and information in engineering conference. American Society of Mechanical Engineers, pp 697–707

  14. Coelho PG, Fernandes PR, Guedes JM, Rodrigues HC (2008) A hierarchical model for concurrent material and topology optimisation of three-dimensional structures. Struct Multidiscip Optim 35(2):107–115

    Google Scholar 

  15. Cowin S, Mehrabadi M (1995) Anisotropic symmetries of linear elasticity. Appl Mech Rev 48(5):247–285

    MATH  Google Scholar 

  16. Deshpande VS, Fleck NA, Ashby MF (2001) Effective properties of the octet-truss lattice material. J Mech Phys Solids 49(8):1747–1769

    MATH  Google Scholar 

  17. Feppon F, Michailidis G, Sidebottom MA, Allaire G, Krick BA, Vermaak N (2017) Introducing a level-set based shape and topology optimization method for the wear of composite materials with geometric constraints. Struct Multidiscip Optim 55(2):547–568

    MathSciNet  Google Scholar 

  18. Francfort GA, Murat F (1986) Homogenization and optimal bounds in linear elasticity. Arch Ration Mech Anal 94(4):307–334

    MathSciNet  MATH  Google Scholar 

  19. Fuller RB (1961) Synergetic building construction. U.S. Patent No. 2,986, 241

  20. Gaynor AT, Guest JK, Gaynor AT, Guest JK (2016) Topology optimization considering overhang constraints: eliminating sacrificial support material in additive manufacturing through design. Struct Multidiscip Optim 54(5):1157–1172

    MathSciNet  Google Scholar 

  21. Graf GC, Chu J, Engelbrecht S, Rosen DW (2009) Synthesis methods for lightweight lattice structures. In: ASME 2009 International design engineering technical conferences and computers and information in engineering conference. American Society of Mechanical Engineers, pp 579–589

  22. Hashin Z, Shtrikman S (1963) A variational approach to the theory of the elastic behaviour of multiphase materials. J Mech Phys Solids 11(2):127–140

    MathSciNet  MATH  Google Scholar 

  23. Horn TJ, Harrysson OLA (2012) Overview of current additive manufacturing technologies and selected applications. Sci Prog 95(3):255–282

    Google Scholar 

  24. Li H, Luo Z, Zhang N, Gao L, Brown T (2016) Integrated design of cellular composites using a level-set topology optimization method. Comput Methods Appl Mech Eng 309:453–475

    MathSciNet  MATH  Google Scholar 

  25. Liu J, Cheng L, To AC (2017) Arbitrary void feature control in level set topology optimization. Comput Methods Appl Mech Eng 324:595–618

    MathSciNet  MATH  Google Scholar 

  26. Messner MC (2016) Optimal lattice-structured materials. J Mech Phys Solids 96:162–183

    MathSciNet  Google Scholar 

  27. Messner MC, Barham MI, Kumar M, Barton NR (2015) Wave propagation in equivalent continuums representing truss lattice materials. Int J Solids Struct 73-74:55–66

    Google Scholar 

  28. MFEM (2018) Modular finite element methods library, http://mfem.org

  29. Mirzendehdel AM, Suresh K (2016) Support structure constrained topology optimization for additive manufacturing. Comput Aided Des 81:1–13

    Google Scholar 

  30. Nakshatrala P, Tortorelli D, Nakshatrala K (2013) Nonlinear structural design using multiscale topology optimization. Part I: static formulation. Comput Methods Appl Mech Eng 261-262:167– 176

    MathSciNet  MATH  Google Scholar 

  31. Rupp CJ, Evgrafov A, Maute K, Dunn ML (2009) Design of piezoelectric energy harvesting systems: a topology optimization approach based on multilayer plates and shells. J Intell Mater Syst Struct 20(16):1923–1939

    Google Scholar 

  32. Sigmund O (1997) On the design of compliant mechanisms using topology optimization. J Struct Mech 25 (4):493–524

    Google Scholar 

  33. Sigmund O (2001) A 99 line topology optimization code written in matlab. Struct Multidiscip Optim 21 (2):120–127

    Google Scholar 

  34. Sigmund O (2011) On the usefulness of non-gradient approaches in topology optimization. Struct Multidiscip Optim 43(5):589–596

    MathSciNet  MATH  Google Scholar 

  35. Sigmund O, Petersson J (1998) Numerical instabilities in toplogy optimization: a survey on procedures dealing with checkerboards, mesh-dependencies, and local minima. Struct Multidiscip Optim 16(1):68–75

    Google Scholar 

  36. Sigmund O, Torquato S (1997) Design of materials with extreme thermal expansion using three-phase topology optimization method. J Mech Phys Solids 45(6):1037–1067

    MathSciNet  Google Scholar 

  37. Sivapuram R, Dunning PD, Kim HA (2016) Simultaneous material and structural optimization by multiscale topology optimization. Struct Multidiscip Optim 54(5):1267–1281

    MathSciNet  Google Scholar 

  38. Stolpe M, Svanberg K (2001) An alternative interpolation scheme for minimum compliance topology optimization. Struct Multidiscip Optim 22(2):116–124

    Google Scholar 

  39. Tancogne-Dejean T, Diamantopoulou M, Gorji MB, Bonatti C, Mohr D (2018) 3d platelattices: an emerging class of lowdensity metamaterial exhibiting optimal isotropic stiffness. Adv Mater 30(45):1803334

    Google Scholar 

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

    MathSciNet  MATH  Google Scholar 

  41. Wang MY, Wang X (2004) “color” level sets: a multi-phase method for structural topology optimization with multiple materials. Comput Methods Appl Mech Eng 193(6–8):469–496

    MathSciNet  MATH  Google Scholar 

  42. Watts S, Tortorelli DA (2016) An n-material thresholding method for improving integerness of solutions in topology optimization. Int J Numer Methods Eng 108(12):1498–1524

    MathSciNet  Google Scholar 

  43. Watts S, Tortorelli DA (2017) A geometric projection method for designing three-dimensional open lattices with inverse homogenization. Int J Numer Methods Eng 112(11):1564– 1588

    MathSciNet  Google Scholar 

  44. White DA, Arrighi WJ, Kudo J, Watts SE (2019) Multiscale topology optimization using neural network surrogate models. Comput Meth Appl Mech Eng 346:1118–1135

    MathSciNet  MATH  Google Scholar 

  45. Xia L, Breitkopf P (2014) Concurrent topology optimization design of material and structure within nonlinear multiscale analysis framework. Comput Methods Appl Mech Eng 278:524–542

    MathSciNet  MATH  Google Scholar 

  46. Zener C (1948) Elasticity and anelasticity of metals. University of Chicago Press, Chicago

    Google Scholar 

  47. Zheng X, Lee H, Weisgraber TH, Shusteff M, DeOtte J, Duoss EB, Kuntz JD, Biener MM, Ge Q, Jackson JA et al (2014) Ultralight, ultrastiff mechanical metamaterials. Science 344(6190):1373–1377

    Google Scholar 

Download references

Acknowledgments

This work was performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344.

Funding

This work received funding from LDRD number 17-SI-005. LLNL-JRNL-758077.

Author information

Affiliations

Authors

Corresponding author

Correspondence to Seth Watts.

Ethics declarations

Conflict of interests

The authors declare that they have no conflict of interest.

Additional information

Publisher’s note

Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Responsible Editor: Julián Andrés Norato

Appendices

Appendix 1. Tabulated data for isotruss

Constituent Relative Rod Relative Young’s Poisson’s Relative shear Zener
Poisson’s ratio density diameter modulus ratio modulus ratio
ν S ρ d Eh/ES ν h Gh/GS A h
0.2 0.005 0.02369 0.001 0.251 0.001 0.997
  0.010 0.03380 0.002 0.251 0.002 0.995
  0.050 0.07781 0.010 0.250 0.009 0.989
  0.100 0.11261 0.022 0.247 0.021 0.982
  0.200 0.16518 0.052 0.239 0.048 0.967
  0.300 0.20899 0.091 0.228 0.085 0.954
  0.400 0.24911 0.141 0.217 0.132 0.945
  0.500 0.28774 0.207 0.206 0.194 0.942
  0.600 0.32640 0.291 0.195 0.276 0.944
  0.700 0.36660 0.400 0.188 0.385 0.954
  0.800 0.41060 0.544 0.185 0.534 0.968
  1.000 0.58000 1.000 0.200 1.000 1.000
0.3 0.005 0.02369 0.001 0.253 0.001 0.997
  0.010 0.03380 0.002 0.253 0.002 0.994
  0.050 0.07781 0.010 0.256 0.010 0.989
  0.100 0.11261 0.022 0.256 0.022 0.982
  0.200 0.16518 0.052 0.254 0.052 0.969
  0.300 0.20899 0.091 0.250 0.091 0.958
  0.400 0.24911 0.142 0.245 0.141 0.952
  0.500 0.28774 0.207 0.241 0.206 0.951
  0.600 0.32640 0.291 0.240 0.292 0.956
  0.700 0.36660 0.400 0.242 0.405 0.967
  0.800 0.41060 0.545 0.251 0.555 0.980
  1.000 0.58000 1.000 0.300 1.000 1.000
0.4 0.005 0.02369 0.001 0.254 0.001 0.997
  0.010 0.03380 0.002 0.256 0.002 0.994
  0.050 0.07781 0.010 0.262 0.011 0.989
  0.100 0.11261 0.022 0.265 0.024 0.983
  0.200 0.16518 0.052 0.269 0.056 0.972
  0.300 0.20899 0.091 0.271 0.097 0.963
  0.400 0.24911 0.142 0.273 0.150 0.959
  0.500 0.28774 0.208 0.277 0.219 0.961
  0.600 0.32640 0.292 0.284 0.309 0.968
  0.700 0.36660 0.402 0.297 0.426 0.981
  0.800 0.41060 0.547 0.318 0.577 0.992
  1.000 0.58000 1.000 0.400 1.000 1.000

Appendix 2. Tabulated data for octet truss

Constituent Relative Rod Relative Young’s Poisson’s Relative shear Zener
Poisson’s ratio density diameter modulus ratio modulus ratio
ν S ρ d Eh/ES ν h Gh/GS A h
0.2 0.005 0.01960 0.001 0.333 0.001 1.981
  0.010 0.02786 0.001 0.333 0.002 1.972
  0.050 0.06430 0.007 0.330 0.012 1.915
  0.100 0.09308 0.015 0.325 0.026 1.851
  0.200 0.13673 0.038 0.311 0.060 1.731
  0.300 0.17331 0.070 0.296 0.105 1.616
  0.400 0.20709 0.115 0.278 0.163 1.506
  0.500 0.23978 0.177 0.258 0.237 1.403
  0.600 0.27292 0.264 0.239 0.334 1.306
  0.700 0.30805 0.385 0.222 0.458 1.212
  0.800 0.34804 0.556 0.209 0.616 1.115
  1.000 0.70000 1.000 0.200 1.000 1.000
0.3 0.005 0.01960 0.001 0.335 0.001 1.983
  0.010 0.02786 0.001 0.335 0.002 1.975
  0.050 0.06430 0.007 0.335 0.013 1.920
  0.100 0.09308 0.015 0.332 0.028 1.859
  0.200 0.13673 0.038 0.324 0.065 1.740
  0.300 0.17331 0.070 0.313 0.112 1.626
  0.400 0.20709 0.115 0.302 0.173 1.515
  0.500 0.23978 0.177 0.290 0.252 1.412
  0.600 0.27292 0.263 0.280 0.351 1.315
  0.700 0.30805 0.384 0.275 0.478 1.221
  0.800 0.34804 0.555 0.277 0.633 1.121
  1.000 0.70000 1.000 0.300 1.000 1.000
0.4 0.005 0.01960 0.001 0.336 0.001 1.986
  0.010 0.02786 0.001 0.337 0.002 1.978
  0.050 0.06430 0.007 0.339 0.014 1.927
  0.100 0.09308 0.015 0.339 0.030 1.868
  0.200 0.13673 0.038 0.336 0.069 1.752
  0.300 0.17331 0.070 0.331 0.120 1.638
  0.400 0.20709 0.115 0.325 0.185 1.527
  0.500 0.23978 0.177 0.321 0.267 1.423
  0.600 0.27292 0.263 0.321 0.370 1.326
  0.700 0.30805 0.385 0.327 0.499 1.230
  0.800 0.34804 0.556 0.344 0.652 1.126
  1.000 0.70000 1.000 0.400 1.000 1.000

Appendix 3. Tabulated data for ORC truss

Constituent Relative Rod Relative Young’s Poisson’s Relative shear Zener
Poisson’s ratio density diameter modulus ratio modulus ratio
ν S ρ d Eh/ES ν h Gh/GS A h
0.2 0.005 0.02773 0.001 0.332 0.001 1.963
  0.010 0.03964 0.001 0.331 0.002 1.944
  0.050 0.09158 0.007 0.323 0.012 1.819
  0.100 0.13314 0.017 0.311 0.025 1.680
  0.200 0.19717 0.044 0.284 0.059 1.426
  0.300 0.25229 0.087 0.252 0.101 1.211
  0.400 0.30466 0.152 0.219 0.155 1.041
  0.500 0.35831 0.243 0.191 0.225 0.917
  0.600 0.41804 0.359 0.177 0.317 0.864
  0.700 0.48908 0.489 0.179 0.439 0.882
  0.800 0.57554 0.640 0.187 0.601 0.929
  1.000 1.00000 1.000 0.200 1.000 1.000
0.3 0.005 0.02773 0.001 0.333 0.001 1.958
  0.010 0.03964 0.001 0.333 0.002 1.936
  0.050 0.09158 0.007 0.327 0.013 1.801
  0.100 0.13314 0.017 0.317 0.027 1.653
  0.200 0.19717 0.045 0.294 0.063 1.390
  0.300 0.25229 0.089 0.268 0.107 1.172
  0.400 0.30466 0.155 0.244 0.163 1.005
  0.500 0.35831 0.249 0.226 0.234 0.888
  0.600 0.41804 0.367 0.224 0.327 0.840
  0.700 0.48908 0.498 0.238 0.450 0.862
  0.800 0.57554 0.647 0.260 0.612 0.916
  1.000 1.00000 1.000 0.300 1.000 1.000
0.4 0.005 0.02773 0.001 0.335 0.001 1.953
  0.010 0.03964 0.001 0.334 0.002 1.929
  0.050 0.09158 0.007 0.331 0.013 1.783
  0.100 0.13314 0.017 0.323 0.029 1.626
  0.200 0.19717 0.046 0.305 0.066 1.353
  0.300 0.25229 0.091 0.285 0.113 1.133
  0.400 0.30466 0.159 0.269 0.170 0.969
  0.500 0.35831 0.256 0.262 0.243 0.858
  0.600 0.41804 0.376 0.273 0.338 0.816
  0.700 0.48908 0.509 0.299 0.462 0.842
  0.800 0.57554 0.657 0.334 0.623 0.903
  1.000 1.00000 1.000 0.400 1.000 1.000

Appendix 4. MATLAB code for multiscale topology optimization

MIT License

Copyright Ⓒ2018, Lawrence Livermore National Security, LLC

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, OCTOBER 1999 % MODIFIED FOR 3D MULTISCALE DESIGN VIA SURROGATE MODEL, LLNL, JULY 2018 % % This work was produced under the auspices of the U.S. Department of Energy by % Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344. % % This work was prepared as an account of work sponsored by an agency of the % United States Government. Neither the United States Government nor Lawrence % Livermore National Security, LLC, nor any of their employees makes any warranty, % expressed or implied, or assumes any legal liability or responsibility for the % accuracy, completeness, or usefulness of any information, apparatus, product, or % process disclosed, or represents that its use would not infringe privately owned % rights. Reference herein to any specific commercial product, process, or service % by trade name, trademark, manufacturer, or otherwise does not necessarily % constitute or imply its endorsement, recommendation, or favoring by the United % States Government or Lawrence Livermore National Security, LLC. The views and % opinions of authors expressed herein do not necessarily state or reflect those % of the United States Government or Lawrence Livermore National Security, LLC, % and shall not be used for advertising or product endorsement purposes. % % LLNL-CODE-757968 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function top(nelx, nely, nelz, volfrac, rmin, truss, Es, vs, minVF, maxVF, maxit) % INITIALIZE x(1:nelx, 1:nely, 1:nelz) = volfrac; Gs = Es / (2*(1+vs)); loop = 0; change = 1.0; nnx = nelx+1; nny = nely+1; nnz = nelz+1; colormap(gray); caxis([0.0, 1.0]); % START ITERATION while change > 0.01 && loop < maxit loop = loop + 1; xold = x; % FE-ANALYSIS [U] = FE(nelx, nely, nelz, nnx, nny, nnz, x, truss, Es, vs, Gs); % OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS c = 0.0; dc = zeros(nelx, nely, nelz); for elz = 1:nelz; for ely = 1:nely for elx = 1:nelx [KE] = get_KE(truss, x, Es, vs, Gs, elx, ely, elz, 0); [DKE] = get_KE(truss, x, Es, vs, Gs, elx, ely, elz, 1); [dofs] = get_elem_dofs(nnx, nny, nnz, elx, ely, elz); Ue = U(dofs,1); c = c + Ue'*KE*Ue; dc(elx,ely,elz) = -Ue'*DKE*Ue; end; end; end % FILTERING OF SENSITIVITIES [dc] = check(nelx, nely, nelz, rmin, x, dc); % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD [x] = OC(nelx, nely, nelz, x, volfrac, dc, minVF, maxVF); % PRINT RESULTS change = max(max(max(abs(x-xold)))); disp([’ It.: ’ sprintf(’%4i’,loop) ’ Obj.: ’ sprintf(’%10.4f’,c) ... ’ Vol.: ’ sprintf(’%6.3f’,sum(sum(sum(x)))/(nelx*nely*nelz)) ... ’ ch.: ’ sprintf(’%6.3f’,change )]) % PLOT DENSITIES viz3d(nelx, nely, nelz, x, volfrac, nelx==1); % SAVE PARAMETER VALUES (ELEMENT DENSITIES AND ROD DIAMETERS) xOut = reshape(x,[],1); save('-ascii','elVolFrac.txt', 'xOut'); dOut = reshape(get_d(truss,x),[],1); save('-ascii','elRodDiam.txt','dOut'); end %%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [xnew] = OC(nelx, nely, nelz, x, volfrac, dc, minVF, maxVF) l1 = 0; l2 = 100000; move = 0.2; while (l2-l1 > 1e-4) lmid = 0.5*(l2 + l1); xnew = max(minVF, max(x-move, min(maxVF, min(x+move,x.*sqrt(-dc./lmid))))); if sum(sum(sum(xnew))) - volfrac*nelx*nely*nelz > 0; l1 = lmid; else

l2 = lmid; end end %%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [dcn] = check(nelx, nely, nelz, rmin, x, dc) dcn=zeros(size(dc)); for elz = 1:nelz; for ely = 1:nely; for elx = 1:nelx sum = 0.0; for k = max(elz-round(rmin),1):min(elz+round(rmin),nelz) for j = max(ely-round(rmin),1):min(ely+round(rmin),nely) for i = max(elx-round(rmin),1):min(elx+round(rmin),nelx) fac = rmin - sqrt((elx-i)^2+(ely-j)^2+(elz-k)^2); sum = sum + max(0,fac); dcn(elx,ely,elz) = dcn(elx,ely,elz) + max(0,fac)*x(i,j,k)*dc(i,j,k); end end end dcn(elx,ely,elz) = dcn(elx,ely,elz) / (x(elx,ely,elz)*sum); end; end; end %%%%%%%%% FE-ANALYSIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [U] = FE(nelx, nely, nelz, nnx, nny, nnz, x, truss, Es, vs, Gs) K = sparse(3*nnx*nny*nnz, 3*nnx*nny*nnz); F = sparse(3*nnx*nny*nnz,1); U = sparse(3*nnx*nny*nnz,1); for elz = 1:nelz; for ely = 1:nely; for elx = 1:nelx [KE] = get_KE(truss, x, Es, vs, Gs, elx, ely, elz, 0); [dofs] = get_elem_dofs(nnx, nny, nnz, elx, ely, elz); K(dofs,dofs) = K(dofs,dofs) + KE; end; end; end % DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM) coords = zeros(nnx*nny*nnz,3); n = 0; for k = 1:nnz; for j = 1:nny; for i = 1:nnx n = n+1; coords(n,1) = i-1; coords(n,2) = j-1; coords(n,3) = k-1; end; end; end midplane_nodes = find(coords(:,2)==0); loaded_nodes = intersect(find(coords(:,3)==nelz), find(coords(:,2)==0)); fixed_nodes = intersect(find(coords(:,3)==0), find(coords(:,2)==nely)); fixeddofs = zeros(size(midplane_nodes,1) + 2*size(fixed_nodes,1),1); for i = loaded_nodes'; F(3*(i-1)+3) = -1.0/nnx; end n = 1; for i = midplane_nodes'; for j=[2]; fixeddofs(n,1) = 3*(i-1)+j; n =n+1; end; end for i = fixed_nodes'; for j=[1,3]; fixeddofs(n,1) = 3*(i-1)+j; n =n+1; end; end alldofs = [1:3*nnx*nny*nnz]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING U(freedofs,:) = K(freedofs,freedofs) \ F(freedofs,1); U(fixeddofs,:) = 0; %%%%%%%%% ELEMENT AND NODE NUMBERING IN 3D MESH %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [num] = get_num(nx, ny, nz, i, j, k) num = (nx*ny)*(k-1) + nx*(j-1) + i;

%%%%%%%%% GLOBAL DOFS FOR A GIVEN ELEMENT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [dofs] = get_elem_dofs(nnx, nny, nnz, elx, ely, elz) n = get_num(nnx, nny, nnz, elx, ely, elz); N = [n; n+1; n+nnx+1; n+nnx; n+nnx*nny; n+nnx*nny+1; n+nnx*nny+nnx+1; n+nnx*nny+nnx]; dofs = zeros(24,1); for j = 1:8; for i = 1:3; dofs(3*(j-1)+i) = 3*(N(j)-1)+i; end; end; %%%%%%%%% INTEGRATE ELASTICITY TENSOR CE TO GET KE %%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [KE] = get_KE(truss, x, Es, vs, Gs, i, j, k, deriv) KE = zeros(24,24); CE = get_CE(truss, x, Es, vs, Gs, i, j, k, deriv); for l = 1:8 r = (sqrt(3)/3) * (-1 + 2*any([2,3,6,7]==l)); rp = (1+r); rm = (1-r); s = (sqrt(3)/3) * (-1 + 2*any([3,4,7,8]==l)); sp = (1+s); sm = (1-s); t = (sqrt(3)/3) * (-1 + 2*any([5,6,7,8]==l)); tp = (1+t); tm = (1-t); DN = [-sm*tm, -rm*tm, -rm*sm; sm*tm, -rp*tm, -rp*sm; sp*tm, rp*tm, -rp*sp; -sp*tm, rm*tm, -rm*sp; -sm*tp, -rm*tp, rm*sm; sm*tp, -rp*tp, rp*sm; sp*tp, rp*tp, rp*sp; -sp*tp, rm*tp, rm*sp] / 8; B = DN * 2*eye(3); G = kron(B', eye(3)); KE = KE + G' * CE * G / 4; end %%%%%%%%% DEFINE ELASTICITY TENSOR FOR DIFFERENT TRUSSES %%%%%%%%%%%%%%%%%%%%%%% function [CE] = get_CE(truss, x, Es, vs, Gs, i, j, k, D) p = x(i, j, k); if strcmpi(truss, 'iso'); TM = @(p,Es,vs,Gs,D) iso_moduli(p,Es,vs,Gs,D); elseif strcmpi(truss, 'octet'); TM = @(p,Es,vs,Gs,D) octet_moduli(p,Es,vs,Gs,D); elseif strcmpi(truss, 'orc'); TM = @(p,Es,vs,Gs,D) orc_moduli(p,Es,vs,Gs,D); elseif strcmpi(truss, 'bound'); TM = @(p,Es,vs,Gs,D) bound_moduli(p,Es,vs,Gs,D); else; TM = @(p,Es,vs,Gs,D) simp_moduli(p,Es,vs,Gs,D); end [E, v, G] = TM(p,Es,vs,Gs,0); if D; [DE, Dv, DG] = TM(p,Es,vs,Gs,1); end if D == 0 C1111 = E * (1.0 - v) / (1.0 - v - 2*v^2); C1122 = (E * v) / (1.0 - v - 2*v^2); C1212 = G; else % return the derivatives instead C1111 = ((DE*(1-v)-E*Dv)*(1-v-2*v^2)-E*(1-v)*(-Dv-4*v*Dv)) / (1-v-2*v^2)^2; C1122 = ((DE*v+E*Dv)*(1-v-2*v^2)-E*(1-v)*(-Dv-4*v*Dv)) / (1-v-2*v^2)^2; C1212 = DG; end CE = [C1111 0 0 0 C1122 0 0 0 C1122; 0 C1212 0 C1212 0 0 0 0 0 ; 0 0 C1212 0 0 0 C1212 0 0 ; 0 C1212 0 C1212 0 0 0 0 0 ; C1122 0 0 0 C1111 0 0 0 C1122; 0 0 0 0 0 C1212 0 C1212 0 ; 0 0 C1212 0 0 0 C1212 0 0 ; 0 0 0 0 0 C1212 0 C1212 0 ; C1122 0 0 0 C1122 0 0 0 C1111];

%%%%%%%%% TRUSS-SPECIFIC MECHANICS MODELS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [E,v,G] = iso_moduli(p, Es, vs, Gs, deriv) E = Es * (2.05292e-01 - 3.30265e-02*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (8.12145e-02 + 2.72431e-01*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (6.49737e-01 - 2.42374e-01*vs) * (p^(3-deriv)) * (1+2*deriv); v = (2.47760e-01 + 1.69804e-02*vs) * (1-deriv) + ... (-1.59293e-01 + 7.38598e-01*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (-1.86279e-01 - 4.83229e-01*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (9.77457e-02 + 7.26595e-01*vs) * (p^(3-deriv)) * (1+2*deriv); G = Gs * (1.63200e-01 + 1.27910e-01*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (6.00810e-03 + 4.13331e-01*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (7.22847e-01 - 3.56032e-01*vs) * (p^(3-deriv)) * (1+2*deriv); function [E,v,G] = octet_moduli(p, Es, vs, Gs, deriv) E = Es * (1.36265e-01 - 1.22204e-02*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (8.57991e-02 + 6.63677e-02*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (7.39887e-01 - 6.26129e-02*vs) * (p^(3-deriv)) * (1+2*deriv); v = (3.29529e-01 + 1.86038e-02*vs) * (1-deriv) + ... (-1.42155e-01 + 4.57806e-01*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (-3.29837e-01 + 5.59823e-02*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (1.41233e-01 + 4.72695e-01*vs) * (p^(3-deriv)) * (1+2*deriv); G = Gs * (2.17676e-01 + 7.22515e-02*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (-7.63847e-02 + 1.31601e+00*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (9.11800e-01 - 1.55261e+00*vs) * (p^(3-deriv)) * (1+2*deriv); function [E,v,G] = orc_moduli(p, Es, vs, Gs, deriv) E = Es * (1.34332e-01 - 7.06384e-02*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (2.59957e-01 + 8.51515e-01*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (6.53902e-01 - 7.29803e-01*vs) * (p^(3-deriv)) * (1+2*deriv); v = (3.38525e-01 + 7.04361e-03*vs) * (1-deriv) + ... (-4.25721e-01 + 4.14882e-01*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (-7.68215e-02 + 5.58948e-01*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (1.64073e-01 + 3.98374e-02*vs) * (p^(3-deriv)) * (1+2*deriv); G = Gs * (1.96762e-01 + 1.66705e-01*vs) * (p^(1-deriv)) * (1+0*deriv) + ... (1.30938e-01 + 1.72565e-01*vs) * (p^(2-deriv)) * (1+1*deriv) + ... (6.45455e-01 - 2.87424e-01*vs) * (p^(3-deriv)) * (1+2*deriv); function [E,v,G] = bound_moduli(p, Es, vs, Gs, deriv) Ks = 1.0 / (3*(1-2*vs)); K = Ks + (1-p) / (-1.0/Ks + p/(Ks + (4.0*Gs)/3.0) ); G = Gs + (1-p) / (-1.0/Gs + (2.0*p*(Ks+2.0*Gs)) / (5.0*Gs*(Ks+(4.0*Gs)/3.0)) ); E = 9*K*G/(3*K+G); v = (3*K-2*G) / (2*(3*K+G)); if deriv DK = (p - 1)/(((4*Gs)/3 + Ks)*(p/((4*Gs)/3 + Ks) - 1/Ks)^2) - ... 1/(p/((4*Gs)/3 + Ks) - 1/Ks); DG = 1/(1/Gs - (2*p*(2*Gs + Ks))/(5*Gs*((4*Gs)/3 + Ks))) + ... (2*(2*Gs + Ks)*(p - 1))/(5*Gs*((4*Gs)/3 + Ks)*(1/Gs - ... (2*p*(2*Gs + Ks))/(5*Gs*((4*Gs)/3 + Ks)))^2); DE = (9*(3*K+G)*(DK*G+K*DG) - 9*K*G*(3*DK+DG) ) / (3*K+G)^2; Dv = (2*(3*K+G)*(3*DK-2*DG) - 2*(3*K-2*G)*(3*DK+DG) ) / (2*(3*K+G))^2; G = DG; E = DE; v = Dv; end

function [E,v,G] = simp_moduli(p, Es, vs, Gs, deriv) E = Es * p^(3-deriv) * (1+2*deriv); v = vs * (1-deriv); G = Gs * p^(3-deriv) * (1+2*deriv); %%%%%%%%% TRUSS-SPECIFIC ROD DIAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [d] = get_d(truss, p) if strcmpi(truss, 'iso') d = 2.04920e-02 + 1.05076e+00*p - 1.59468e+00*(p.^2) + 1.09799e+00*(p.^3); elseif strcmpi(truss, 'octet') d = 1.64505e-02 + 9.23773e-01*p - 1.61345e+00*(p.^2) + 1.23729e+00*(p.^3); elseif strcmpi(truss, 'orc') d = 2.32950e-02 + 1.31602e+00*p - 2.28842e+00*(p.^2) + 1.90225e+00*(p.^3); else d = -1*ones(size(p)); end %%%%%%%%% 3D VISUALIZATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function viz3d(nelx, nely, nelz, x, volfrac, is2D) y = zeros(nelx+2, nely+2, nelz+2); y(2:nelx+1, 2:nely+1, 2:nelz+1) = x; if is2D; T=0; A=90; E=0; else; T=volfrac; A=142.5; E=30; end; nf = nelx*nely*(nelz+1) + nelx*(nely+1)*nelz + (nelx+1)*nely*nelz; n = 0; X = zeros(4,nf); Y = zeros(4,nf); Z = zeros(4,nf); C = zeros(1,nf); for k = 1:nelz+1; for j = 1:nely+1; for i = 1:nelx+1; I = i-1; J = j-1; K = k-1; L = i+1; M = j+1; N = k+1; cz = max(y(L,M,k:N)); cy = max(y(L,j:M,N)); cx = max(y(i:L,M,N)); dz = min(y(L,M,k:N)); dy = min(y(L,j:M,N)); dx = min(y(i:L,M,N)); if cz > T && dz < T+is2D; n = n+1; C(1,n) = 1-cz; X(:,n) = [I,i,i,I]'; Y(:,n) = [J,J,j,j]'; Z(:,n) = [K,K,K,K]'; end if cy > T && dy < T+is2D; n = n+1; C(1,n) = 1-cy; X(:,n) = [I,i,i,I]'; Y(:,n) = [J,J,J,J]'; Z(:,n) = [K,K,k,k]'; end if cx > T && dx < T+is2D; n = n+1; C(1,n) = 1-cx; X(:,n) = [I,I,I,I]'; Y(:,n) = [J,j,j,J]'; Z(:,n) = [K,K,k,k]'; end end; end; end patch(X(:,1:n), Y(:,1:n), Z(:,1:n), C(1,1:n), 'EdgeColor', 'none'); view(A,E); axis equal; axis tight; axis off; pause(1e-3);

Rights and permissions

Reprints and Permissions

About this article

Verify currency and authenticity via CrossMark

Cite this article

Watts, S., Arrighi, W., Kudo, J. et al. Simple, accurate surrogate models of the elastic response of three-dimensional open truss micro-architectures with applications to multiscale topology design. Struct Multidisc Optim 60, 1887–1920 (2019). https://doi.org/10.1007/s00158-019-02297-5

Download citation

Keywords

  • Topology design
  • Elasticity
  • Finite element methods
  • Surrogate model
  • Multiscale