# LevelOpt Manual
Welcome to the **Topology Optimization Plugin** for Grasshopper and Rhino, where **cutting-edge level set optimization technology** meets the flexibility of Grasshopper. For those looking to generate high-performance concepts quickly, the plugin offers **automated optimization**, creating strong, efficient designs with ease.
But what truly sets this plugin apart is its **customization capability**. Built to complement Grasshopper’s computational design flexibility, the plugin lets you **open the loop of optimization**—interjecting design changes, incorporating starting designs, and fine-tuning settings at any stage. This gives you the freedom to adaptively adjust feature sizes, wall thicknesses, and preserved functional regions as optimization progresses, making it ideal for tailored, intricate designs. With this plugin, you're not just optimizing; you're crafting designs that push the boundaries of performance and adaptability.
**Current Features**
- **Optimization for Compliance**: Maximize stiffness for a specified weight target.
- **Supports Both Isotropic and Orthotropic Materials**
- **Component-Level Flexibility**: Optimize individual components or maintain interface connectivity in assemblies.
- **Functional Region Preservation**: Ensure critical zones remain intact during optimization.
- **Custom Optimization**: Provide a starting design and adjust settings between iterations.
## Grasshopper Block Documentation
| **LevelOpt Block** | |
|-----------------------------------------------|--------------------------------------------------------------------------------------------------------|
| **Input**
1. **LevelOpt Advanced Setting**: (See next block)
2. **Component (`C`)**: Component that specifies design domain and material.
3. **Stress Simulation (`Ss`)**: Provides boundary conditions and assembly components, including the design domain.
4. **Iterations (`N`)**: Number of design iterations ([more details](#regular-settings)).
5. **Volume Fraction (`V`)**: Desired volume fraction ([more details](#regular-settings)).
6. **Starting Design Geometry (`SG`)**: Initial design ([more details](#regular-settings)).
7. **Solver Mode (`SM`)**: Manual or Auto mode for LevelOpt.
**Output**
1. **Optimized Designs (`OD`)**: Resulting optimized geometry.
2. **Iteration Log (`I`)**: Log of each iteration.
3. **Design sensitivity (`Ds`)**: Boundary sensitivity and Velocity Feedback.
| ![LevelOpt Block Image](images/gh/block_levelopt.png) |
| **Advanced Settings Block** | |
|-----------------------------------------------|--------------------------------------------------------------------------------------------------------|
| **Input**
1. **Level Set Cell Size (`S`)**: Controls resolution of level set ([more details](#advanced-settings)).
2. **Move Limit (`M`)**: Controls the change per iteration ([more details](#advanced-settings)).
3. **Smoothing Iterations (`T`)**: Number of smoothing iterations ([more details](#advanced-settings)).
4. **Fix Thickness (`F`)**: Width of region around boundary condition to remain unchanged ([more details](#advanced-settings)).
5. **Retain Interfaces (`R`)**: Preserves the interface between design and non-design components ([more details](#advanced-settings)).
**Output**
Input for LevelOpt Block | ![Advanced Settings Image](images/gh/block_levelopt_adv_settings.png) |
## Settings Description
### Regular Settings
| **Setting** | **Description** | **Recommended/Default Values** | **Effect** |
|----------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|---------------------------------------------------------------------------------------------------------|
| **Volume Fraction Constraint (`V`)** | Sets the target volume of the final design as a fraction of the initial volume. | **user-defined** based on design requirements (fraction of initial volume) **defaults** to 0.5| **Lower** values remove more material, resulting in lighter designs. |
| **Number of design iterations (`N`)** | Sets the maximum number of iterations for the optimization process. Each iteration refines the design by updating the topology based on the objective function and constraints. | `0` to `100` (iterations), `10` **default** ( `N = 0` skips automated iteration but provides sensitivity feedback for user-driven design changes).| **Higher** values allow for more refined designs but increase computation time. **Lower** values result in quicker completion, but the design may be less optimized.|
|**Resolution (`Res`) or Finite Element Cell Size (`S`)**| Sets the resolution of the finite element mesh used in the analysis. |**user-defined** based on problem complexity | **Smaller** values provide more accurate analysis but at a higher computational cost. Influences Level Set Cell Size.|
| **Starting Design Geometry (`SG`)** | Allows users to begin optimization from an existing design or custom geometry. | **User-defined** | Uses a starting point to refine or enhance an existing design, rather than starting from a blank slate. (See Example 🖼️) |
### Advanced Settings
| **Advanced Setting** | **Description** | **Recommended/Default Values** | **Effect** |
|----------------------------|------------------------------------------------------------------------------------------------|------------------------------------------|---------------------------------------------------------------------------------------------------------|
| **Level Set Cell Size (`LS`)** | Determines the size of the level set grid cells relative to the FEA grid. | 0.25 to 1.0 (fraction of FEA grid size), **0.5 default** | **Smaller** values create finer, more detailed features but **slower** convergence; **larger** values speed up the process. (See Example 🖼️) |
| **Move Limit (`M`)** | Controls the extent of changes per optimization step, as a factor of the level set cell size. | 0.5 to 2.0 (factor of level set cell size), **1.0 default** | **Higher** values lead to faster convergence but may be **unstable**; **lower** values provide more gradual, stable changes. (See Example 🖼️) |
| **Smoothing Iterations (`T`)** | Defines how often the geometry is smoothed during the optimization process. | 1 to 10 (iterations), **1 default** | Frequent smoothing (**lower** values) results in smoother designs; less frequent smoothing preserves **finer** details. (See Example 🖼️) |
| **Fix Thickness (`F`)** | Specifies the width around load and boundary conditions that remains unchanged. | Varies as needed (factor of level set cell size), **4 default** | Preserves critical regions around loads/supports, ensuring they are **not altered** during optimization. (See Example 🖼️) |
|**Retain Interfaces between Components (`R`)**| Allows users to specify if the interface between the design domain (optimized) and non-design domain should be fully preserved.| `True` or `False`, `True` is **default** |`True` fully preserves the interface, maintaining a solid connection. `False` allows optimization of the interface, where physics will ensure connectivity between components.|
## Examples
Below are examples which go over the LevelOpt workflow setup, post-processing, and results.
### Example: GE Bracket Optimization
![alt text](images/gh/GEBracket_Comparison.png)
To download the demo files for this workflow download the zip file [here](example%20files/LevelOptEx_GEBracket.zip).
GE Bracket Workflow
Intact’s LevelOpt workflow can be broken into three core steps:
1. Run an Intact stress simulation (See this [documentation](https://intact-solutions.com/learning/doku.php?id=wiki:sns:intactgh:getting_started)
for more details/examples)
- specify the component(s) geometry & material
- reference the surfaces/meshes and specify inputs for restraints and loads
- set the fidelity for the solver via the settings (resolution/cell size)
- solve
- (optional) visualize quantities such as displacement or von Mises stress
```{video} images/gh/GEBracket_StressSim.mp4
:autoplay:
:loop:
```
2. Specify the LevelOpt input parameters:
- LevelOpt Advanced Settings block
- level set cell size = 0.75
- move limit = 1.0
- smoothing period = 1
- design domain component to optimize (from the stress simulation)
- Intact stress simulation output
- max iterations = 50 (*1 iteration used in video starting from the final iteration for brevity*)
- volume fraction constraint = 0.25
3. Solve LevelOpt & post-process
- click 'solve' after all inputs are connected
- (optional) visualize velocities/sensitivities
- (optional) bake/view final mesh in Rhino
- (optional) view iteration log output to see volume fraction and compliance
```{video} images/gh/GEBracket_LevelOpt.mp4
:autoplay:
:loop:
```
### Example: NASA EXCITE Bracket Assembly
![alt text](images/gh/NASABracket_Comparison.png)
To download the demo files for this workflow download the zip file [here](example%20files/LevelOptEx_NASABracketAssembly.zip).
NASA EXCITE Bracket Workflow
1. Run an Intact stress simulation (See this [documentation](https://intact-solutions.com/learning/doku.php?id=wiki:sns:intactgh:getting_started)
for more details/examples)
- specify the component(s) geometry & material
- reference the surfaces/meshes and specify inputs for restraints and loads
- set the fidelity for the solver via the settings (resolution/cell size)
- solve
- (optional) visualize quantities such as displacement or von Mises stress
```{video} images/gh/NASABracket_StressSim.mp4
:autoplay:
:loop:
```
2. Specify the LevelOpt input parameters:
- LevelOpt Advanced Settings block
- level set cell size = 0.50
- move limit = 1.0
- smoothing period = 1
- design domain component to optimize (from the stress simulation) *note that this corresponds to the bracket geometry component, not the block component to which the load is applied*
- Intact stress simulation output
- max iterations = 100 (*1 iteration used in video starting from the final iteration for brevity*)
- volume fraction constraint = 0.20
3. Solve LevelOpt & post-process
- click 'solve' after all inputs are connected
- (optional) visualize velocities/sensitivities
- (optional) bake/view final mesh in Rhino
- (optional) view iteration log output to see volume fraction and compliance
```{video} images/gh/NASABracket_LevelOpt.mp4
:autoplay:
:loop:
```