Yue Li*, Xuan Li*, Minchen Li*, Yixin Zhu, Bo Zhu, Chenfanfu Jiang
* Equal contributions
This repo is a 88-line MATLAB version of LETO in 2D with linear elasticity. The high-performance and more complete version in C++ will be open sourced later.
We separate LETO into two files:
leto.m
contains LETO's core algorithm (scene setup, density transfer from carrier particles to quadratures, compliance computation, derivative computation and the optimization loop). The scene setup and DOF indices follow the convention of the 88-line SIMP.
mmaUpdate.m
is a stand-alone optimizer MMA, on which the optimization loop is based. This implementation is tranlated and modifed from an open-source C++ version.
leto(nelx, nely, volfrac, penal)
nelx * nely
defines the simulation resolution.
volfrac
defines the volume constraint.
penal
defines the power-law used in SIMP.
For different scene setups please feel free to modify the code.
With this MATLAB implementation we compare LETO with SIMP (topo88.m) on a beam example. The scene setups are exactly the same.
The Dirichlet and Neumann boundary conditions are defined as (in both leto.m
and top88.m
):
F = sparse(2 * (nely + 1) * (nelx + 1), 1, -1, 2*(nely+1)*(nelx+1),1);
freedofs = setdiff(1:2*(nely+1)*(nelx+1),1:2*nely);
We compare SIMP to LETO with the same and half of the resolution:
top88(120, 40, 0.4, 3, 1.5, 1); % SIMP
leto(120, 40, 0.4, 3); % LETO
leto(60, 20, 0.4, 3); % LETO (half res)
The result of SIMP (converged with 280 iterations):
The result of LETO (converged with 95 iterations):
The result of LETO with half of the resolution (converged with 111 iterations):
As we can see LETO generates more intricate structures than SIMP with less iteration count using even half of the simulation resolution. With multiple density samples in each cell, LETO effectively achieves sub-cell resolution.
@article{li2020leto,
title={LETO: Hybrid Lagrangian-Eulerian Method for Topology Optimization},
author={Li, Yue and Li, Xuan and Li, Minchen and Zhu, Yixin and Zhu, Bo and Jiang, Chenfanfu},
journal={arXiv preprint arXiv:2003.01215},
year={2020}
}