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 拓扑优化工程链路 ① 几何与网格 清理几何 / 划分网格 设计域与非设计域分组件 ② 材料与属性 MAT1 / PSOLID E、ν、ρ 赋值 ③ 载荷与边界 SPC 约束 / FORCE 载荷 工况 SUBCASE ④ 优化三要素 DESVAR / DRESP1 / 目标 体积分数约束 ⑤ 求解器调用:OptiStruct 读取 model.fem → 有限元分析 → 灵敏度计算 → 密度更新迭代 输出 model.h3d / model.out / model.stat ⑥ 结果查看与判读 HyperView:密度云图(0~1)识别材料保留区 HyperGraph:目标函数 / 体积分数迭代曲线 检查收敛性、棋盘格、网格依赖性 不满足要求则返回修改 关键文件 model.hm(模型) model.fem(输入) model.h3d(结果) 求解日志 model.out 迭代信息 model.stat 收敛状态 *.log 报错定位

这条链路中,①~③属于常规有限元前处理,④是拓扑优化特有的部分,⑤⑥是求解与后处理。真正决定优化能否成功的,往往是④中设计变量、约束与目标的定义是否合理,以及⑥中对结果的判读是否到位。

三、文件管理:目录结构与命名约定

OptiStruct 在求解过程中会生成大量中间文件,如果目录混乱,很容易出现"改了模型却读到旧结果"的问题。推荐为每个优化任务建立独立目录,例如:

topo_bracket/
├── bracket.hm          # HyperMesh 模型文件
├── bracket.fem         # 导出的求解输入文件
├── bracket.h3d         # 结果文件(HyperView 读取)
├── bracket.out         # 求解输出日志
├── bracket.stat        # 收敛状态摘要
└── run_optistruct.bat  # 求解调用脚本

命名上建议保持 模型名.fem 与 模型名.h3d 同名,这样在 HyperView 中加载结果时不会混淆。每次修改模型后重新导出 .fem,务必确认时间戳已更新,避免求解器读取到旧文件。

四、求解器调用:三种常用方式

OptiStruct 的调用方式直接影响工作效率,常见有三种:

  1. HyperMesh 内直接提交:在 Analysis → OptiStruct 面板中设置 export options 与 run options,点击 OptiStruct 按钮即可导出并求解。适合单次调试。
  2. 命令行调用:在 .fem 所在目录打开终端,执行 optistruct bracket.fem -np 4,其中 -np 4 表示使用 4 个 CPU 核心并行。适合批量任务或脚本化流程。
  3. 批处理脚本:将多条命令行写入 .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 次迭代即可收敛。得到的密度云图会呈现典型的桁架式传力路径。这个示例将作为后续章节讨论参数影响、结果重构的基准模型。

首次运行建议先用较粗网格(如 10 mm 单元)快速验证流程是否通畅,确认 .fem 能正常导出、求解器能正常启动、.h3d 能正常加载后,再细化网格进行正式优化。这样可以把"流程问题"和"优化问题"分开排查。