This tutorial uses OptiStruct's topology optimization functionality to create a design concept for an automotive control arm required to meet performance specifications. The finite element mesh containing designable (blue) and non-designable regions (yellow) is shown in the figure below. 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.
Finite element mesh containing designable (blue) and non-designable (yellow) material.
A finite element model representing the designable and non-designable material (shown in figure) 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. Isosurfaces 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 -
|
The resultant displacement of the point where loading is applied must be less than 0.05mm.
|
SUBCASE 2 -
|
The resultant displacement of the point where loading is applied must be less than 0.02mm.
|
SUBCASE 3 -
|
The 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.
|
The following exercises are included:
• | Setting up the FE model in HyperMesh |
• | Setting up the optimization in HyperMesh |
• | Post-processing the results in HyperView |
Exercise
Setting Up the FE Model in HyperMesh
Step 1: Launch the HyperMesh Desktop, Set the User Profile and Retrieve the File
1. | Launch HyperMesh Desktop. |
2. | Choose the OptiStruct in the User Profiles dialog 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. |
3. | From the File menu on the toolbar, select Open > Model. |
4. | Select the carm.hm file you saved to your working directory from the optistruct.zip file. Refer to Accessing the Model Files. |
Step 2: Create Materials and Properties and Assign to Proper Components
2. | In the Model browser, right-click and select Create > Material. |
4. | For Card Image, select MAT1 as the material type. |
5. | For E, enter the value 2.0E5. |
6. | For Nu, enter the value 0.3. |
7. | In the Model browser, right-click and select Create > Property. |
8. | For Name, enter design_prop. |
9. | For Card Image, select PSOLID as the property type. |
10. | For Material, click Unspecified > Material. |
11. | In the Select Material dialog, select Steel as the material and click OK to complete the material selection. |
12. | In the Model browser, right-click and select Create > Property. |
13. | For Name, enter nondesign_prop. |
14. | For Card Image, select PSOLID as the property type. |
15. | For Material, click Unspecified > Material. |
16. | In the Select Material dialog, select Steel as the material and click OK to complete the material selection. |
17. | Open the Component folder to update the component collectors with the newly created properties. |
18. | Click the nondesign component to display it in the Entity Editor. |
19. | For Property, click Unspecified > Property. |
20. | In the Select Property dialog, select nondesign_prop from the list of options and click OK to complete the selection. |
21. | Repeat steps 17 through 20 to assign design_prop to the design component. |
Step 3: Create Load Collectors
Next, you will create four load collectors (SPC, Brake, Corner and Pothole) and assign each a color. Follow these steps for each load collector.
1. | In the Model browser, right-click and select Create > Load Collector. |
3. | Leave the Card Image set to None. |
4. | Select a suitable color. |
5. | Similarly, create load collectors named Brake, Corner, and Pothole. |
Step 4: Apply Constraints
Next, creating constraints and assigning them to the SPC load collector, is outlined in the following steps.
1. | From the Model browser, expand Load Collector, right-click on SPC, and click Make Current. |
2. | From the Analysis page, click constraints. |
3. | Make sure the create subpanel is selected using the radio buttons on the left-hand side of the panel. |
4. | Make sure that SPC is selected for load types. |
5. | Select the node at one end of the bushing (see the figure below) by clicking on it in the graphics window. |
6. | Constrain dof1, dof2, and dof3; make sure dofs 1, 2, and 3 are checked and dofs 4, 5, and 6 are unchecked. |
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.
A constraint is created. A constraint symbol (triangle) appears in the graphics window at the selected node. The number 123 is written beside the constraint symbol, indicating that dof1, dof2 and dof3 are constrained.
Constraining dof1, dof2 and dof3 at one end of the bushing.
8. | Select the node at the other end of the bushing (see the following figure) by clicking on it in the graphics window. |
9. | Constrain dof2 and dof3; make sure only dofs 2 and 3 are checked. |
A constraint is created. A constraint symbol (triangle) appears in the graphics window at the selected node. The number 23 is written beside the constraint symbol, indicating that dof2 and dof3 are constrained.
Constraining dof2 and dof3 at the other end of the bushing.
11. | Click nodes and select by id from the extended entity selection window. |
12. | Enter the value 3239 and press ENTER. |
13. | This selects node ID 3239 (see the next figure), which corresponds to the shock absorber mounting location. |
15. | Click create. A constraint is created. A constraint symbol (triangle) appears in the graphics window at the selected node. The number 3 is written beside the constraint symbol, indicating that dof3 is constrained. |
Constraining dof3 on node ID 3239.
16. | Click return to go to the main menu. |
Step 5: Apply Forces for Brake, Corner, and Pothole Loadcases
1. | From the Model browser, expand Load Collector, right-click Brake, and click Make Current. |
2. | From Analysis page, click forces. |
4. | Type the node number 2699 and press ENTER. This selects the node where the force is being applied. |
5. | Click magnitude=, enter 1000.0 and press ENTER. |
6. | Set the switch below to x-axis. |
7. | Click create. An arrow, pointing the x direction, appears at the node on the screen. |
8. | For better visualization of the arrows, select uniform size=, enter 100, and press ENTER. |
9. | From the Model browser, expand Load Collectors, right-click Corner, and click Make Current. |
11. | Enter the node number 2699 and press ENTER. |
12. | Click magnitude=, enter 1000.0, and press ENTER. |
13. | Set the switch below to y-axis. |
14. | Click create. An arrow, pointing in the Y direction, appears at the node on the screen. |
15. | From the Model browser, expanded Load Collector, right-click Pothole, and click Make Current. |
17. | Enter the node number 2699 and press ENTER. |
18. | Click magnitude=, enter 1000.0, and press ENTER. |
19. | Set the switch below to z-axis. |
20. | Click create. An arrow, pointing in the Z direction, appears at the node on the screen. |
21. | Click return to go back to the Analysis page. |
Three separate forces in load collectors: brake, corner, and pothole with the component "design" turned off using the display panel.
Step 6: Create Brake, Corner and Pothole Loadcases
The last step in establishing boundary conditions is the creation of a subcase.
1. | From the Analysis page, click loadsteps. |
2. | Click name=, enter Brake, and press ENTER. |
3. | Set type as linear static. |
4. | Check the box preceding SPC. An entry field appears to the right of SPC. |
5. | Click on the entry field and select SPC from the list of load collectors. |
6. | Check the box preceding Load and select Brake from the list of load collectors. |
8. | Similarly create the load cases Corner [by selecting the load collectors Corner and SPC] and Pothole [by selecting the load collectors Pothole and SPC]. |
9. | Click return to go back to the Analysis page. |
Setting Up the Optimization in HyperMesh
Step 7: Define the Topology Design Variables
1. | From the Analysis page, click optimization. |
2. | Enter the topology panel. |
3. | Make sure the create subpanel is selected using the radio buttons on the left-hand side of the panel. |
4. | Click DESVAR=, enter design_prop, and press ENTER. |
5. | Click props , select design_prop from the list of props, and click select. |
7. | Click create. A topology design space definition, design_prop, has been created. All elements organized in this design property collector are now included in the design space. |
Step 8: Create a Volume and Displacement Response
1. | Enter the responses panel. |
2. | Click response = and enter vol. |
3. | Click on the switch below response type and select volume from the pop-up menu. |
4. | Ensure the regional selection is set to total (this is the default). |
5. | Click create. A response, vol, is defined for the total volume of the model. |
6. | Click response = and enter disp1. |
7. | Click on the switch below response type and select static displacement from the pop-up menu. |
9. | Enter 2699 and press ENTER. |
The node where the three forces are applied is selected.
10. | Select total disp from the radio options. |
This is the vector sum of the x, y, and z translations.
11. | Click create. A response, disp1, is defined for the total displacement of node 2699. |
12. | Click return to go back to the Optimization panel. |
Step 9: Define the Objective
1. | Enter the objective panel. |
2. | The switch on the left should be set to min. |
3. | Click response= and select vol. |
5. | Click return to exit the Optimization panel. |
Step 10: Create Constraints on Displacement Responses
In this step, the upper and lower bound constraint criteria for this analysis are set.
1. | Enter the dconstraints panel. |
2. | Click constraint= and enter constr1. |
3. | Check the box for upper bound only. |
4. | Click upper bound= and enter 0.05. |
5. | Select response= and set it to disp1. |
7. | Check the box next to Brake. |
10. | Click constraint= and enter constr2. |
11. | Check the box for upper bound only. |
12. | Click upper bound= and enter 0.02. |
13. | Select response= and set it to disp1. |
15. | Check the box next to Corner. |
17. | Click constraint= and enter constr3. |
18. | Check the box for upper bound only. |
19. | Click upper bound= and enter 0.04. |
20. | Select response= and set it to disp1. |
22. | Check the box next to Pothole. |
24. | Click return twice to return to the main menu. |
Step 11: 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 OptiStruct. |
3. | Select the directory where you would like to write the OptiStruct model file and enter the name for the model, carm_check.fem, in the File name: field. The extension.fem is for OptiStruct input decks. |
The name and location of the carm_check.fem file displays in the input file: field.
5. | Set the export options: toggle to all. |
6. | Click the run options: switch and select check. |
7. | Set the memory options: toggle to memory default. |
8. | Click OptiStruct. This launches the OptiStruct check run. |
When the processing is complete, view the file carm_check.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 this file for possible warnings and errors.
Is the optimization problem set up correctly? See Optimization Problem Parameters section of the carm_check.out file.
The objective function? See Optimization Problem Parameters section of the carm_check.out file.
The constraints? See Optimization Problem Parameters section of the carm_check.out file.
What is the recommended amount of RAM for an In-Core solution? See Memory Estimation Information section of the carm_check.out file.
Is there enough disk space to run the optimization? See Disk Space Estimation Information section of the carm_check.out file.
Step 12: Run the Optimization Problem
1. | From the Analysis page, click OptiStruct. |
2. | Click save as, enter carm_complete.fem as the file name, and click Save. |
3. | Click the run options: switch and select optimization. |
4. | 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.
5. | At the end of process, close the HyperWorks Solver View dialog. |
The default files written to the directory are:
carm_complete.hgdata
|
HyperGraph file containing data for the objective function, percent constraint violations, and constraint for each iteration.
|
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.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.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.
|
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.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 cclip_complete.fem file.
|
carm_complete.res
|
HyperMesh binary results 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. The .sh file may be used to restart a run and, if necessary, run OSSmooth files for topology optimization.
|
cclip_complete.stat
|
Summary of analysis process, providing CPU information for each step during analysis process.
|
Post-processing the Results in HyperView
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. This section describes how to view those results in HyperView.
Step 13: View the Deformed Structure
1. | When the message OPTIMIZATION HAS CONVERGED is received in the command window, click HyperView. |
HyperView is launched with the HyperWorks Desktop and the results are loaded. A message window appears to inform about the successful loading of the model and result files into HyperView. Notice that all three .h3d files get loaded, each in a different page of HyperView.
2. | Click Close to close the message window. |
It is helpful to view the deformed shape of a model to determine if the boundary conditions are defined correctly, and also to find out if the model is deforming as expected. The analysis results are available in pages 2, 3, and 4. The first page contains the optimization results.
3. | Click the Next Page toolbar icon to move to the second 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.
4. | Select Linear as the animation mode . |
5. | Click the Contour toolbar icon . |
6. | Select the first drop-down menu below Result type: and select Displacement [v]. |
7. | Select the second drop-down menu and select Mag. |
8. | Click Apply to display the displacement contour. |
9. | Click the Deformed toolbar icon . |
10. | Set Result type: to Displacement (v), Scale: to model units, and Type: to Uniform. |
11. | Enter 10 for value:. This means that the maximum displacement will be 10 Model units and all other displacements will be proportional. |
12. | Below the Undeformed shape: section, click on the drop-down menu next to Show and select Wireframe. |
13. | Click Apply. A deformed plot of your model with displacement contour should be visible, overlaid on the original undeformed mesh. |
14. | Click Start/Pause Animation to animate the model . A deformed animation for the first subcase (brake) should be displayed. |
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?
15. | Select Iteration 18 in the Results browser. |
The contour now shows the displacement results for Subcase 1 (brake) and iteration 18 which corresponds to the end of the optimization iterations.
16. | Stop the animation . |
17. | Click Next Page toolbar icon to move to the third page. |
The third page which has results loaded from carm_complete_s12.h3d file is displayed. The name of the page is displayed as Subcase 2 – corner to indicate that the results correspond to subcase 2.
18. | Repeat this process to display the displacement contours and deformed shape of the model for the second subcase. |
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?
19. | Similarly, review the displacements and deformation for subcase 3 (pothole). |
Step 14: Review Contour Plot of the Density Results
The optimization iteration results (Element Densities) are loaded in the first page.
1. | Click the Previous Page icon until the name of the page is displayed as Design History, indicating that the results correspond to optimization iterations. |
2. | Click the Contour toolbar icon . |
Note the Result type: is Element Densities [s]; this should be the only results type in the “file_name”_des.h3d file.
The second drop-down menu shows Density.
3. | In the Averaging method: file, select Simple. |
4. | Click Apply to display the density contour. |
Note the contour is all blue this is because your results are on the first design step or Iteration 0.
5. | Select Iteration 18 in the Results browser. |
Each element of the model is assigned a legend color, indicating the density of each element for the selected iteration.
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.
Is the max= field showing 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).
Step 15: View an Iso Value Plot on Top of the Element Densities Contour
This plot provides the information about the element density. Iso Value retains all of the elements at and above a certain density threshold. Pick the density threshold providing the structure that suits your needs.
1. | From the Results menu, click Plot > Iso. |
2. | From the panel area (lower portion of the GUI), select Element Densities as the Result type. |
4. | Set the Current Value: to 0.15. |
5. | Move the slider below Current value: to change the density threshold. |
You will see the iso value in the graphics window update interactively when you scroll to a new value. Use this tool to get a better look at the material layout and the load paths from OptiStruct.
See Also:
OptiStruct Tutorials