# OS-T: 2010 Design Concept for an Automotive Control Arm

In this tutorial you will use OptiStruct's topology optimization functionality to create a design concept for an automotive control arm required to meet performance specifications.

The finite element mesh contains designable and non-designable regions. Part specifications constrain the resultant displacement of the point where loading is applied for three load cases to 0.05mm, 0.02mm, and 0.04mm, respectively. The optimal design would use as little material as possible. A finite element model representing the designable and non-designable material is imported into HyperMesh. Appropriate properties, boundary conditions, loads, and optimization parameters are defined and the OptiStruct software determines the optimal material distribution. The results (the material layout) are viewed as contours of a normalized density value ranging from 0.0 to 1.0 in the design space. Iso surfaces are also used to view the density results. Areas that need reinforcement will tend towards a density of 1.0.
The optimization problem for this tutorial is stated as:
Objective
Minimize volume.
Constraints
SUBCASE 1. Resultant displacement of the point where loading is applied must be less than 0.05mm.
SUBCASE 2. Resultant displacement of the point where loading is applied must be less than 0.02mm.
SUBCASE 3. Resultant displacement of the point where loading is applied must be less than 0.04mm.
Design Variables
Element density (and corresponding stiffness of the element) of each element in the design space.

## Launch HyperMesh and Set the OptiStruct User Profile

1. Launch HyperMesh.
The User Profile dialog opens.
2. Select OptiStruct and click OK.
This loads the user profile. It includes the appropriate template, macro menu, and import reader, paring down the functionality of HyperMesh to what is relevant for generating models for OptiStruct.

## Open the Model

1. Click File > Open > Model.
2. Select the carm.hm file you saved to your working directory from the optistruct.zip file. Refer to Access the Model Files.
3. Click Open.
The carm.hm database is loaded into the current HyperMesh session, replacing any existing data.

## Set Up the Model

### Create the Material

1. In the Model Browser, right-click and select Create > Material from the context menu.
A default material displays in the Entity Editor.
2. For Name, enter Steel.
3. Set Card Image to MAT1.
4. Enter the material values next to the corresponding fields.
1. For E (Young's Modulus), enter 2.0E5.
2. For NU, (Poisson's Ratio), enter 0.3.
3. For RHO (Mass Density),
A new material, Steel, has been created. The material uses OptiStruct's linear isotropic material model, MAT1.

### Create the Property

1. In the Model Browser, right-click and select Create > Property from the context menu.
A default property displays in the Entity Editor.
2. For Name, enter nondesign_prop.
3. Set the Card Image to PSOLID.
4. Assign a material to the property.
1. For Material, click Unspecified > Material.
2. In the Select Material dialog, select Steel and click OK.

### Assign a Material and Property to the nondesign Component

1. In the Model Browser, Components folder, click nondesign.
The component displays in the Entity Editor.
2. For Property, click Unspecified > Property. In the Select Property dialog, select nondesign_prop and click OK.
3. Repeat the above steps to assign the design_prop property to the design component.

## Apply Loads and Boundary Conditions

1. In the Model Browser, right-click and select Create > Load Collector from the context menu.
A default load collector displays in the Entity Editor.
2. For Name, enter SPC.
3. Click Color and select a color from the color palette.
4. Set Card Image to None.
5. Repeat the above steps to create load collectors named Brake, Corner, and Pothole.

### Apply Constraints

In this step you will create SPC constraints and assign them to the SPC load collector.
1. From the Model Browser, Load Collectors folder, right-click on SPC and select Make Current from the context menu.
2. From the Analysis page, click constraints.
3. Set the Load type to SPC.
4. Create the first constraint.
1. Using the nodes selector, select the node at one end of the bushing.
2. Select the degrees of freedom, dof1-dof3; unselect all others.
Dofs with a check will be constrained, while dofs without a check will be free. Dofs 1, 2, and 3 are x, y, and z translation degrees of freedom. Dofs 4, 5, and 6 are x, y, and z rotational degrees of freedom.
3. Click create.
A constraint is created. A constraint symbol (triangle) appears at the selected node. The number 123 is displayed beside the constraint symbol, indicating that dof1, dof2 and dof3 are constrained.
5. Create the second constraint.
1. Using the nodes selector, select the node at the other end of the bushing.
2. Select the degrees of freedom, dof2 and dof3; unselect all others.
3. Click create.
6. Create the third constraint.
1. Double-click nodes and select by id, then enter 3239.
Node ID 3239 is selected, which corresponds to the shock absorber mounting location.
2. Select the degree of freedom, dof3; unselect all others.
3. Click create.
7. Click return.

### Apply Forces to the Brake, Corner and Pothole Loadcases

1. From the Analysis page, click forces.
2. Apply a force to the Brake load case.
1. From the Model Browser, Load Collectors folder, right-click on Brake and select Make Current from the context menu.
2. Double-click the nodes and select by id, then enter 2699.
3. In the magnitude= field, enter 1000.
4. Set the vector selector to x-axis.
5. Click create.
An arrow, pointing in the x direction, appears at the selected node.
Tip: For better visualization of the forces, in the uniform size= field, enter 100.
3. Apply a force to the Corner load case.
1. From the Model Browser, Load Collectors folder, right-click on Corner and select Make Current from the context menu.
2. Double-click the nodes and select by id, then enter 2699.
3. In the magnitude= field, enter 1000.
4. Set the vector selector to y-axis.
5. Click create.
An arrow, pointing in the y direction, appears at the selected node.
4. Apply a force to the Pothole load case.
1. From the Model Browser, Load Collectors folder, right-click on Pothole and select Make Current from the context menu.
2. Double-click the nodes and select by id, then enter 2699.
3. In the magnitude= field, enter 1000.
4. Set the vector selector to z-axis.
5. Click create.
An arrow, pointing in the z direction, appears at the selected node.

1. In the Model Browser, right-click and select Create > Load Step from the context menu.
A default load step displays in the Entity Editor.
2. For Name, enter Brake.
3. Set Analysis type to linear static.
4. Define SPC.
1. For SPC, click Unspecified > Loadcol.
2. In the Select Loadcol dialog, select SPC and click OK.
2. In the Select Loadcol dialog, select Brake and click OK.
6. Repeat the above steps to create load steps named Corner and Pothole.
1. For the Corner load step, set SPC to SPC and LOAD to Corner.
2. For the Pothole load step, set SPC to SPC and LOAD to Pothole.

## Set Up the Optimization

### Create Topology Design Variables

1. From the Analysis page, click optimization.
2. Click topology.
3. Select the create subpanel.
4. In the desvar= field, enter design_prop.
5. Set type: to PSOLID.
6. Using the props selector, select design_prop.
7. Click create.
8. Click return.

### Create Optimization Responses

1. From the Analysis page, click optimization.
2. Click Responses.
3. Create the volume response, which defines the volume fraction of the design space.
1. In the responses= field, enter vol.
2. Below response type, select volume.
3. Set regional selection to total and no regionid.
4. Click create.
4. Create the displacement response.
1. In the response= field, enter disp1.
2. Below response type, select static displacement.
3. Using the nodes selector, select the 2699.
4. Click nodes > by id, then enter 2699 in the id= field.
5. Set the displacement type to total disp.
dof1, dof2, dof3
Translation in the X, Y, and Z directions.
dof4, dof5, dof6
Rotation about the X, Y, and Z axes.
total disp
Resultant of the translational displacements in x, y, and z directions.
total rotation
Resultant of the rotational displacements in x, y, and z directions.
6. Click create.

### Create Constraints on Displacement Responses

In this step you will define the upper and lower bound constraint criteria for this analysis.
1. Click the Dconstraints panel.
2. Create the first constraint.
1. In the constraint= field, enter constr1.
2. Check the box next to upper bound, then enter 0.05.
3. Click response= and select disp1.
4. Using the loadsteps selector, select Brake.
5. Click create.
3. Create the second constraint.
1. In the constraint= field, enter constr2.
2. Check the box next to upper bound, then enter 0.02.
3. Click response= and select disp1.
4. Using the loadsteps selector, select Corner.
5. Click create.
4. Create the third constraint.
1. In the constraint= field, enter constr3.
2. Check the box next to upper bound, then enter 0.05.
3. Click response= and select disp1.
4. Using the loadsteps selector, select Pothole.
5. Click create.

### Define the Objective Function

1. Click the objective panel.
2. Verify that min is selected.
3. Click response= and select vol.
4. Click create.
5. Click return twice to exit the Optimization panel.

## Check the Optimization Problem

A check run may be performed in which OptiStruct will estimate the amount of RAM and disk space required to run the model. During the check run, OptiStruct will also scan the deck checking that all the necessary information required to perform an analysis or optimization is present and also that this information is not conflicting.
1. From the Analysis page, click the OptiStruct panel.
2. Click save as.
3. In the Save As dialog, specify location to write the OptiStruct model file and enter carm_complete for filename.
For OptiStruct input decks, .fem is the recommended extension.
4. Click Save.
The input file field displays the filename and location specified in the Save As dialog.
5. Set the export options toggle to all.
6. Set the run options toggle to check.
7. Set the memory options toggle to memory default.
8. Click OptiStruct to launch the OptiStruct job.
When the processing is complete, view the file carm_complete.out. This is the OptiStruct output file containing specific information on the file setup, optimization problem setup, RAM and disk space requirement for the run. Review the different sections of this file for possible warnings and errors.
Is the optimization problem set up correctly?
Refer to the Optimization Problem Parameters section.
Is the objective function set up correctly?
Refer to the Problem Parameters section.
Are the constraints set up correctly?
Refer to the Optimization Problem Parameters section.
What is the recommended amount of RAM for an In-Core solution?
Refer to the Memory Estimation Information section.
Is there enough disk space to run the optimization?
Refer to the Disk Space Estimation Information section.

## Run the Optimization

1. From the Analysis page, click OptiStruct.
2. Click save as.
3. In the Save As dialog, specify location to write the OptiStruct model file and enter carm_complete for filename.
For OptiStruct input decks, .fem is the recommended extension.
4. Click Save.
The input file field displays the filename and location specified in the Save As dialog.
5. Set the export options toggle to all.
6. Set the run options toggle to optimization.
7. Set the memory options toggle to memory default.
8. Click OptiStruct to run the optimization.
The following message appears in the window at the completion of the job:
OPTIMIZATION HAS CONVERGED.
FEASIBLE DESIGN (ALL CONSTRAINTS SATISFIED).
OptiStruct also reports error messages if any exist. The file carm_complete.out can be opened in a text editor to find details regarding any errors. This file is written to the same directory as the .fem file.
9. Click Close.
The default files that get written to your run directory include:
carm_complete.res
HyperMesh binary results file.
carm_complete.HM.comp.cmf
HyperMesh command file used to organize elements into components based on their density result values. This file is only used with OptiStruct topology optimization runs.
carm_complete.out
OptiStruct output file containing specific information on the file setup, the setup of the optimization problem, estimates for the amount of RAM and disk space required for the run, information for all optimization iterations, and compute time information. Review this file for warnings and errors that are flagged from processing the carm_complete.fem file.
carm_complete.sh
Shape file for the final iteration. It contains the material density, void size parameters and void orientation angle for each element in the analysis. This file may be used to restart a run.
carm_complete.hgdata
HyperGraph file containing data for the objective function, percent constraint violations, and constraint for each iteration.
carm_complete.oss
OSSmooth file with a default density threshold of 0.3. You may edit the parameters in the file to obtain the desired results.
carm_complete.stat
Contains information about the CPU time used for the complete run and also the break-up of the CPU time for reading the input deck, assembly, analysis, convergence, and so on.
carm_complete.his_data
The OptiStruct history file containing iteration number, objective function values and percent of constraint violation for each iteration.
carm_complete.HM.ent.cmf
HyperMesh command file used to organize elements into entity sets based on their density result values. This file is only used with OptiStruct topology optimization runs.
carm_complete.html
HTML report of the optimization, giving a summary of the problem formulation and the results from the final iteration.

## View the Results

Element density results are output to the carm_complete_des.h3d file from OptiStruct for all iterations. In addition, Displacement and Stress results are output for each subcase for the first and last iterations by default into carm_complete_s#.h3d files, where # specifies the sub case ID.

### View the Deformed Structure

Viewing the deformed shape of a model helps you to determine if the boundary conditions are defined correctly, and also to find out if the model is deforming as expected.
1. From the OptiStruct panel, click HyperView.

HyperView launches inside of HyperMesh Desktop, and loads all three .h3d files in a different page of HyperView. The analysis results are available in pages 2, 3, and 4. The first page contains the optimization results.

2. In the top, left of the application click to move to the third page.
The second page has the results from the carm_complete_s1.h3d file. The name of the page is displayed as Subcase 1 - Brake to indicate that the results correspond to subcase 1.
3. From the Animation toolbar, set the animation mode to linear ().
4. Define contour settings.
1. From the Results toolbar, click to open the Contour panel.
2. Under Result type, select Displacement [v] and Mag.
3. Click Apply to display the displacement contour.
5. Define the deformed shape settings.
1. From the Results toolbar, click to open the Deformed panel.
2. Under Deformed shape, set Result type to Displacement (v), set Scale to Model units, set Type to Uniform, and enter 10 in the Value field.
Specifying a Value of 10 indicates that the maximum displacement will be 10 Model units and all other displacements will be proportional.
3. Under Undeformed shape, set Show to Wireframe.
4. Click Apply.
A deformed plot of your model with displacement contour should be visible, overlaid on the original undeformed mesh.
6. From the Animation toolbar, click (Start/Pause) to animate the model.

A deformed animation for the first subcase (brake) should be displayed.

Analyze the following:
• In what direction is the load applied for the first subcase?
• Which nodes have degrees of freedom constrained?
• Does the deformed shape look correct for the boundary conditions applied to the mesh?
7. In the Results Browser, select Iteration 18.
The contour now shows the displacement results for Subcase 1 (brake) and iteration 18 which corresponds to the end of the optimization iterations.
8. From the Animation toolbar, click to stop the animation.
9. In the top, right of the application click to move to the third page.
The third page has results loaded from carm_complete_s2.h3d file. The name of the page is displayed as Subcase 2 - corner to indicate that the results correspond to subcase 2.
10. Repeat the above steps to display the displacement contours and deformed shape of the model for the second subcase.
Analyze the following:
• In what direction is the load applied for the second subcase?
• Which nodes have degrees of freedom constrained?
• Does the deformed shape look correct for the boundary conditions applied to the mesh?
11. Similarly, review the displacements and deformation for subcase 3 (pothole).

### Review the Contour Plot of the Density Results

The optimization iteration results (Element Densities) are loaded in the second page.
1. In the top, right of the application click to go back to the Design History page.
2. Define contour settings.
1. On the Results toolbar, click to open the Contour panel.
Note: The Result type is set to Element Densities (s) and Density. This should be the only result type in the carm_complete_des.h3d file.
2. Set Averaging method to Simple.
3. Click Apply.
The density contour displays. The contour is all blue because your results are on the first design step or Iteration 0.
3. In the Results Browser, select Iteration 18.

Each element of the model is assigned a legend color, indicating the density of each element for the selected iteration.

Analyze the following:
Have most of your elements converged to a density close to 1 or 0?
If there are many elements with intermediate densities, the DISCRETE parameter may need to be adjusted. The DISCRETE parameter (set in the opti control panel on the optimization panel) can be used to push elements with intermediate densities towards 1 or 0 so that a more discrete structure is given.
In this model, refining the mesh should provide a more discrete solution; however, for the purposes of this tutorial, the current mesh and results are sufficient.
Regions that need reinforcement tend towards a density of 1.0. Areas that do not need reinforcement tend towards a density of 0.0.
Does the max= field show 1.0e+00?
In this case, it is.
If it is not, the optimization has not progressed far enough. Allow more iterations and/or decrease the OBJTOL parameter (also set in the Opti control panel).
If adjusting the discrete parameter, refining the mesh, and/or decreasing the objective tolerance does not yield a more discrete solution (none of the elements progress to a density value of 1.0), review the set up of the optimization problem. Some of the defined constraints may not be attainable for the given objective function (or vice versa).

### View an Iso Value Plot of Element Densities

An Iso Value plot provides the information about the element density. Iso Value retains all of the elements at and above a certain density threshold. Pick a density threshold that provides a structure that suits your needs.
1. From the menu bar, click Results > Plot > Iso.
2. In the Iso panel, set Result type to Element Densities (s).
3. Click Apply.
4. Change the density threshold.
• In the Current value field, enter 0.15.
• Under Current value, move the slider.
The Iso value in the modeling window updates interactively when you enter a new value or move the slider. This feature is useful when you want to get a better look at the material layout and the load paths from OptiStruct.