A topology optimization attempt for RF simulations
create.py takes a three-dimensional pattern input, e.g., a 5x5x5 binary matrix (space), with a resolution of 1x1x1 mm, as defined in block_size.
- Debian branch: https://github.com/0xCoto/topopt/blob/debian
- Windows branch: https://github.com/0xCoto/topopt/blob/windows
space = [
[[0,1,0,0,1], [1,0,0,1,0], [0,1,0,1,1], [0,0,0,1,1], [0,1,1,0,1]],
[[1,1,1,0,1], [0,0,0,1,0], [0,0,1,1,1], [0,0,0,1,1], [0,1,0,0,0]],
[[0,1,0,1,0], [1,1,0,0,0], [1,0,0,1,0], [0,1,1,1,0], [0,1,1,1,1]],
[[0,1,0,1,0], [0,1,0,1,1], [1,1,0,1,0], [1,0,0,1,0], [0,0,0,0,0]],
[[1,0,0,1,1], [0,1,1,0,1], [0,1,0,1,1], [0,1,1,0,1], [1,0,1,0,0]],
]After converting to a binary array, a cell value of False indicates material absence at the associated matrix index, while True indicates material presence.
The output is a STEP STL file with all the created objects included.

This could be achieved by either creating multiple space objects, each corresponding to a unique material (STL file), or by assigning non-binary integer/real values to the matrix.
Many algorithms have to be tested to evaluate which optimization technique performs best for this problem. A variety of optimization methods can be adapted to alternate binary values in the matrix by setting appropriate constraints, i.e. stating the linear problem in the form of:
|S_ij(frequency)|
Row constraints
x11+x12+x13+x14+x15 = 1
x21+x22+x23+x24+x25 = 1
x31+x32+x33+x34+x35 = 1
x41+x42+x43+x44+x45 = 1
x51+x52+x53+x54+x55 = 1Column constraints
x11+x21+x31+x41+x51 = 1
x12+x22+x32+x42+x52 = 1
x13+x23+x33+x43+x53 = 1
x14+x24+x34+x44+x54 = 1
x15+x25+x35+x45+x55 = 1-
An E/M solver API shall be made use of/crafted to be called by the optimizer to evaluate the simulated scattering parameter magnitude at the frequency of interest (objective function)- Done.