/BESO

Topology Optimization for Python using Bidirectional Evolutionary Structure Optimization (BESO)

Primary LanguagePython

BESO

Topology Optimization for Python using Bidirectional Evolutionary Structure Optimization (BESO)

This is a Python package that allows you to run 3D structural topology optimization problems using the bi-directional evolutionary structure optimization (BESO) method. This code was written based on work done for the 2D case by Xie and Huang in the book, Evolutionary Topology Optimization of Continuum Structures: Methods and Applications. You can learn more about this method and topology optimization in my undergraduate thesis: A comparison of topology optimization methods for the design of a cantilever beam.

Below is an example of a cantilever beam generated with this optimization process.

image

This is a final three-dimensional design of a cantilever designed from this optimization method. The software exports VTK files for every design iteration for easier computations and faster export times. However, the user can then modify these files with software, such as Paraview, to make the design look like the model above and suitable for 3D printing. The above image has a poisson surface recontruction filter to smooth jagged edges of the VTK file. A simple marching cubes algorithm could also be used for a similar effect.

This is an animation of the design process. This design process starts with a 3D grid of voxel elements, composed of eight nodal points. The user specifies the nodal points on which a given load on the structure is placed. Based on this load, the optimization process subtracts inefficient material and adds material in place where the material is needed. You can give a particular volume fraction, which is the percentage of material to keep from the original design. This design above is a cantilever beam set to be designed at 15% volume fraction.

Future work

This software is quite resource intensive, depending on the number of elements used in the design. Therefore, this software would highly benefit from running on a GPU instance. Additionally, this could benefit by using sparse matrices. In the past, I have tried to refactor to make it work with sparse matrices, but the solvers did not produce the correct output and made physically incorrect designs.

Contributers


tomshannon1

If you want to contribute, message me (@tomshannon1) or send a pull request!