Initial setup and results.

27-08-2026

So, what am I using? In the beginning I set up my IDE and Gemini as a coding assist. I laid out the basic structures and have Gemini fix and add to it. Later I integrated PicoGK in the environment to be able to actually create shapes. What a rush when that worked! I already had basic mechanical formulations taking input from a list of values I introduced, and within in seconds it redesigned cylinder, piston, pin, crank and connecting rod. This was all still very much possible with a proper skeleton model and a parametric table in any CAD environment, but I was happy nonetheless.

Next up came the more interesting part; if I tell the software what the purpose of the shape is, can it alter the shape in such a way that it is idealized against its mechanical load case? In other words, does it know where material needs to be added or removed when the load applied and underlying input changes? This took me into a rabbit hole of biological bone growth theories, biomimicry, Wolff's Law and eventually: BESO, the core of the application. Bi-directional Evolutionary Stress Optimisation. Put in simple terms, through am evolutionary process the part in question is optimized to experienced stress in multiple directions. 'Bi' here meaning erosion and hypertrophy, losing or growing mass/material.

This put another challenge; how do you test stress in a programmatic setting? CAD has FEA, but what is the equivalent in a programming setting? This opened up a world of open source possibilities made possible for and by universities worldwide. Integrating an opensource FEA solver and mesh-controller made sure I could generate a component, test it, and have results fed back to me. This introduced a level of complexity that I hadn't foreseen up front and made me aware how much a traditional CAD program takes over from an engineer in terms of geometry generation and testing.

Where the initial step took a few weeks, it now took me a couple of months to build the initial 'evolutionary' process of creating the initial geometry, feeding it to the FEA solver, reading the data back and putting it through it again. "But why again?" you seem to think. Because stress applied to material travels through and over the surface of the part, having the shape of the part define how large and where the stress is located. Seems logical, until you realize that a sub-optimal part might have both too much and too little material at the same time, but located at different regions of it. Since the mass and shape dictate the stress levels experienced, the part has to alter its shape to optimize for this stress. Now the FEA solver is no longer a measurement tool, its output needs to be read as an instruction set.

Introduce: the Level Set Method

The Level Set Method (LSM) is an advanced mesh-control technique where data is used to manipulate the shape through an algorithm. Autodesk Fusion 360 does the same within their Generative Design module; the part you designed and put through their generative design function is basically a simplified BESO process using the Level Set Method.

This method reads the data on every point the FEA puts out and assigns a value to it which translate to 'move inward' or 'move outward'. Shrink, or grow. Stress is compared to a set threshold. Areas that exceed the threshold switch to a positive value, telling the mesh surface to move outward, to grow. The next shape will lead to different results from the FEA solver, which in turn will provide new values to the LSM-function, which will alter the geometry, and so on, until the set conditions are met.

So why am I not using the generative design module? Because a Fusion license is close to 700 euro a year and the module is another 2000. And then it still is a 'dumb' FEA solver in an iterative process. It doesn't know what you put through it, you have to calculate the force vectors and dynamics yourself. If you're off, the results are off as well without you being aware of it. And here is the point where my application is actually proving its use case; it already calculates the forces upfront and knows how and where to apply them. The only reason it could provide a wrong part is to for engineer to have asked an entirely wrong question, like instead of a 150cc cylinder putting in 200cc. That is an easier to spot error, than the many pages of math and physics it takes to calculate the combustion pressure of E10 fuel at a compression of 1 to 11 with an engine speed of 7000 rpm. With programming you have to only make this calculation once. every following turn is done automatically.

The next post will cover the next challenge: CFD and thermodynamics combined with advanced material science.


Share