While working as a mechanical designer for the formula student electric team, we needed components which were extremely light yet functional. Components were designed based on the standards, rule book and the decided design specifications. However, I was not aware of the “right” way to reduce weight of the designed components. A popular practice used was to iteratively cut down material while ensuring the maximum stress levels to be within the tolerance. Later, I encountered a similar problem in the context of designing compliant mechanisms. In the latter case, the problem is to find a mechanism allowing maximum transfer of the input work via self-compliance. Both the scenarios point towards the concept of topology optimisation though their formulations are quite different.
This deals with the problem of how the material needs to be distributed to achieve maximum stiffness. Topology optimisation formally poses this problem as minimising the compliance of the structure subject to the constraint on the fraction of volume required.
The Fig. 1 is an example showing the progression of the optimisation problem. It deals with the example of a bridge modeled as a beam simply supported on both ends. Symmetry simplifies the problem by allowing us to model only one half of the structure. The final structure is shown in Fig. 2. You can find all about the formulation ad implementation from [1], [2] and [3].
The current C++ implementation was inspired from [1] which is a modified version of the famous 99 line Matlab code originally published with [2]. The current code uses the Eigen library and can be used as an example to simulate simple problems. The following are the todos for the future versions.
All the required codes are available in the project GitHub repository.