pwSIMP is a small dip into gradient-based optimisation using the Solid Isotropic Material with Penalisation (SIMP) method. This approach is implemented in Python, with a basic Tkinter GUI and matlibplot visualisation.
A volume fraction between 0.0 and 1.0 is specified by the user which indicates the proportion of material in the total domain. The optimisation problem is thus: Where should this scarce material be allocated within the domain such that structural stiffness is maximised (alternatively, strain energy is minimised).
The SIMP method tackles this problem by scaling the Young's modulus (E_o) of each element with it's individual volume fraction (vol_frac) which is penalised with the global penalty factor (p). Mathematically: E_e = E_0 vol_frac^p. This penalisation attempts to encourage binary element volume fractions.
The total system strain energy can be determined by summing element strain energies, which, via their constitutive relations, are functions of individual element volume fractions. The system stiffness is optimised by calculating the sensitivity vector of the total system strain energy across each individual element volume fraction.
An example of a centrally loaded membrane supported at each end:
The optimisation of material distribution over the iterative procedure can be seen:
- Sigmund, O. (2001). A 99 line topology optimization code written in Matlab. Structural and multidisciplinary optimization, 21(2), 120-127.
- Bletzinger, K-U. (2017). Structural optimisation lecture notes, Technical University of Munich.