1. OptiStruct拓扑优化工程入门
OptiStruct 是 Altair HyperWorks 平台中的结构分析与优化求解器,其拓扑优化能力在概念设计阶段应用极广。本章不讨论优化算法本身,而是先把"工程怎么跑起来"这件事讲清楚:软件界面在哪里操作、一个优化任务从模型到结果要经过哪些环节、文件如何组织、求解器如何被调用、结果又该从哪里读。这些内容看似基础,却决定了后续所有章节能否顺利复现。
一、软件界面:HyperMesh 与 OptiStruct 的分工
初学者最容易混淆的一点是:OptiStruct 本身是一个求解器,它没有独立的图形界面。日常所说的"打开 OptiStruct",实际上是在 HyperMesh 中完成前处理,再通过 HyperMesh 调用 OptiStruct 求解,最后用 HyperView 查看结果。三者分工如下:
- HyperMesh:几何清理、网格划分、材料与属性定义、载荷与边界条件施加、优化三要素(设计变量、约束、目标)设置、求解卡片导出。
- OptiStruct:读取 .fem 输入文件,执行有限元分析与灵敏度计算,迭代更新设计变量,输出结果文件。
- HyperView / HyperGraph:读取 .h3d 结果文件,显示密度云图、位移云图、迭代曲线。
HyperMesh 界面按功能划分为若干区域:左侧是 Model Browser(模型树,管理组件、材料、属性、载荷集),右侧是 Utility Menu 与 Panel(操作面板),顶部是 Ribbon 功能区,底部是命令状态栏。拓扑优化常用的入口集中在 Analysis 与 Optimization 两个 Ribbon 页签下。建议在开始任何优化前,先在 Model Browser 中确认组件命名规范,因为后续设计变量往往直接按组件或属性来定义。
二、优化流程:从模型到结果的完整链路
一个标准的拓扑优化任务可以拆成六个环节,它们之间存在明确的输入输出依赖,任何一环出错都会导致求解中断或结果不可用。下图给出了这条链路的整体结构,包括各环节的产物文件与关键判断点。
这条链路中,①~③属于常规有限元前处理,④是拓扑优化特有的部分,⑤⑥是求解与后处理。真正决定优化能否成功的,往往是④中设计变量、约束与目标的定义是否合理,以及⑥中对结果的判读是否到位。
三、文件管理:目录结构与命名约定
OptiStruct 在求解过程中会生成大量中间文件,如果目录混乱,很容易出现"改了模型却读到旧结果"的问题。推荐为每个优化任务建立独立目录,例如:
topo_bracket/
├── bracket.hm # HyperMesh 模型文件
├── bracket.fem # 导出的求解输入文件
├── bracket.h3d # 结果文件(HyperView 读取)
├── bracket.out # 求解输出日志
├── bracket.stat # 收敛状态摘要
└── run_optistruct.bat # 求解调用脚本
命名上建议保持 模型名.fem 与 模型名.h3d 同名,这样在 HyperView 中加载结果时不会混淆。每次修改模型后重新导出 .fem,务必确认时间戳已更新,避免求解器读取到旧文件。
四、求解器调用:三种常用方式
OptiStruct 的调用方式直接影响工作效率,常见有三种:
- HyperMesh 内直接提交:在 Analysis → OptiStruct 面板中设置
export options与run options,点击 OptiStruct 按钮即可导出并求解。适合单次调试。 - 命令行调用:在 .fem 所在目录打开终端,执行
optistruct bracket.fem -np 4,其中-np 4表示使用 4 个 CPU 核心并行。适合批量任务或脚本化流程。 - 批处理脚本:将多条命令行写入 .bat 或 .sh 文件,依次求解多个工况。适合参数化研究。
无论哪种方式,求解开始后都应关注 .out 文件中的迭代信息。典型的迭代输出如下:
Iteration Objective VolumeFrac Compliance Change
1 1.0000 0.3000 12.45 -
2 0.8721 0.3000 10.86 0.1279
3 0.8103 0.3000 10.09 0.0718
...
28 0.6421 0.3000 7.99 0.0009
29 0.6420 0.3000 7.99 0.0002 Converged
当 Change 列小于收敛容差(默认 0.001)时,求解器判定收敛并停止。若迭代到最大次数仍未收敛,需要检查约束是否过严或网格是否过粗。
五、结果查看:密度云图与迭代曲线
求解完成后,用 HyperView 打开 .h3d 文件,选择 Contour 面板,将结果类型设为 Element Density。密度值在 0~1 之间:接近 1 的区域表示材料保留,接近 0 的区域表示材料可去除,中间值(0.3~0.7)属于过渡区,通常需要结合密度阈值(如 0.5)来提取清晰的拓扑构型。
同时用 HyperGraph 打开 .h3d 中的迭代数据,绘制目标函数与体积分数随迭代次数的变化曲线。一条健康的收敛曲线应当单调下降并逐渐趋于平缓;如果曲线剧烈振荡,说明约束或惩罚因子设置不当。
六、一个最小可运行示例
为便于后续章节对照,这里给出一个最小示例的配置要点(参数为教学假设值,非实测结果):
| 项目 | 设置 |
|---|---|
| 设计域 | 200 mm × 100 mm × 10 mm 平板,六面体网格,单元尺寸 5 mm |
| 材料 | 钢,E = 210 GPa,ν = 0.3,ρ = 7.85e-9 t/mm³ |
| 边界条件 | 左端面全约束(SPC 123) |
| 载荷 | 右端面中心施加 1000 N 向下集中力 |
| 设计变量 | 设计域全部单元密度,初始值 0.5 |
| 约束 | 体积分数 ≤ 0.3 |
| 目标 | 最小化柔度(最大化刚度) |
按上述设置提交求解,通常经过 20~40 次迭代即可收敛。得到的密度云图会呈现典型的桁架式传力路径。这个示例将作为后续章节讨论参数影响、结果重构的基准模型。