
Figure 1: Overview of the steering knuckle case study from .csv data import to PyIntact load cases and final data & designs.
Overview
- Custom Workflows: Python integration with Intact.Simulation enables seamless data ingestion, pre-processing, and post-processing (optimization metrics tracking, plot generation, and design visualization), opening the door for custom workflows and eliminating manual bottlenecks in the simulation/optimization workflow.
- Automation at Scale: The ability to handle multiple load cases and complex boundary conditions robustly without manual mesh generation enables batch processing of optimization scenarios, dramatically reducing the time from concept to optimized design.
- Advanced Design Generation: Intact.Simulation with LevelOpt design generation enables parallel exploration and analysis of designs. Customizable optimization parameters give users fine-grained control over the design evolution process, and per-iteration simulation results ensure informed design choices.
LevelOpt Optimization of a Steering Knuckle with PyIntact
PyIntact serves as a bridge between the capabilities of Intact.Simulation/LevelOpt and the versatile Python scripting environment. This combination is ideal for creating tailored, automated solutions, allowing engineers and designers to both generate and analyze thousands of design variants programmatically.
To demonstrate this capability, we apply the workflow to a key automotive component: a steering knuckle. Steering knuckles are subject to a wide array of forces during vehicle operation, making them an ideal candidate for multi-load case optimization. The goal of this case study is to generate a lightweight, structurally efficient design that can withstand four distinct, complex loading scenarios. A preview of key results is shown in Figure 2.

Figure 2: Preview of key results from the steering knuckle case study including final designs from two volume fraction runs and a plot for compliance, von Mises stress, and displacement for one of the load cases.
The load scenarios used are representative of emergency braking under max tow load, high-speed cornering, curb impacts, and control arm jounce. These load cases comprise sliding restraints, translation restraints, vector forces, torques, and flexible remote loads across six boundaries, which were stored in a structured CSV file. From this information, a Python script was set up to ingest the CSV, convert it into PyIntact boundary condition objects, and define the LevelOpt scenario with the appropriate set of load cases. A demonstrative snippet of the Python script is shown, followed by a diagram visualizing the load cases, Figure 3.
Note that any standard Python workflow modules or libraries can be used for ingesting and pre-processing data to initialize the PyIntact scenario, such as Pandas, NumPy, or the standard CSV module.

Figure 3: Diagram of all four load cases with boundary conditions applied to each of the six boundary surfaces (highlighted) defined in their respective tables.
With the CSV data imported and processed to construct necessary PyIntact objects, a multi-load case optimization with LevelOpt was run with 200 iterations each across 7 different volume fraction targets: 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8. The optimization used a steel material with 200 GPa Young’s modulus, 0.29 Poisson ratio, 7900 kg/m^3 density, ~200k DOF, and a default move limit. For each load case at every iteration, compliance, maximum von Mises stress (MPa), maximum displacement (mm), and volume fraction progression data were stored through a callback function in Python. Two demonstrative snippets of the volume fraction sweep and callback function are included.
As shown by this snippet, running a wide range of scenarios with Intact.Simulation via PyIntact is as simple as passing a list and executing the desired scenarios sequentially!
With the data points stored via a callback function for over a thousand design iterations, the remaining task for the Python script was to post-process this data into various images, plots, and videos using common libraries such as matplotlib, trimesh, and imageio. Selected results are displayed in Figure 4.
Figure 4: Design iteration progression across all 7 volume fractions and per-iteration compliance, von Mises stress, and max displacement for the first load case (emergency braking with tow).
A key insight from this data is the non-linear relationship between material volume and structural performance. The results show that initial decreases in volume fraction provide minimal performance losses. Specifically, decreasing volume fraction from 0.8 to 0.7 yields compliance, stress, and displacement decreases of only 6.08%, 3.58%, and 4.31% respectively. However, as the designs approach volume fractions below 0.4, these performance losses increase dramatically. Notably, as the volume fraction decreases from 0.3 to 0.2 there is as much as 44-53% decrease in selected performance metrics. Such insight is critical in the design phase for determining how and where to cut part weight while losing marginal stiffness and strength
Additionally, this figure highlights the massive scale of information attainable through automation with PyIntact integration. The case study was run on a personal Windows machine, performing a total of 5,600 simulations by evaluating 1,400 design iterations against 4 load cases. The entire end-to-end process from initial data import to final video generation was completed in just over 45 hours. This equates to an average of less than 30 seconds per simulation, each with approximately 200,000 degrees of freedom. This efficiency enables broad design space exploration alongside comprehensive analysis, unlocking custom, automated solutions.
Summary
This steering knuckle case study demonstrates how integrating Python with Intact.Simulation’s ever-growing toolkit via the PyIntact API enables complex, automated, custom end-to-end workflows. Simply by ingesting CSV data, LevelOpt generated 1,400 unique designs through a multi-load case optimization. Because every design generated by LevelOpt is immediately ready for simulation without manual pre-processing steps like meshing or post-processing steps like design reconstruction, the script robustly processed 5,600 simulations without user intervention. By eliminating manual bottlenecks and providing immediate feedback on optimization progress through per-iteration simulation data, engineers and designers are empowered to move beyond single-point solutions, leading to better-informed design decisions.
PyIntact is available now with Intact.Simulation for Automation. Explore the PyIntact docs, try it in your workflow, and reach out—we’d love to see what you build.