2. OptiStruct拓扑优化基础

拓扑优化不是“把模型丢给软件自动减重”,而是一个由设计变量、响应、约束和目标函数共同定义的数学问题。OptiStruct 的优化求解器本质上在反复执行“分析—灵敏度计算—设计更新”的循环,直到满足收敛条件。理解这五个要素以及它们之间的数据流,是后续所有增材制造优化案例的基础。

设计变量:优化的“可调旋钮”

在 OptiStruct 中,拓扑优化的设计变量是每个单元的相对密度 ρe,取值范围通常为 0.01~1.0。ρe 接近 1 表示该处保留材料,接近 0.01 表示该处可去除。软件通过 DESVAR 与 TOPOLOGY 卡片定义设计域,并用 DTPL 卡片指定哪些属性(PSHELL、PSOLID)参与优化。设计域必须与有限元网格绑定,因此网格质量直接决定优化结果的可制造性。

除密度变量外,OptiStruct 还支持 TOPVAR 中的 MINMEM(最小成员尺寸)和 MAXMEM(最大成员尺寸)控制,以及 MANUFACTURING 卡片下的拔模、挤压、对称等制造约束。这些参数不改变设计变量本身,但会改变设计更新的可行域。

响应:把物理量翻译成优化语言

响应(Response)是优化器可以“看到”的物理量。OptiStruct 常用响应包括:

  • MASS / VOLUME:整体质量或体积,常用于目标函数或约束;
  • COMPLIANCE:柔度,即应变能,最小化柔度等价于最大化刚度;
  • DISPLACEMENT:指定节点或节点的位移;
  • STRESS / VONMISES:单元或节点应力;
  • FREQUENCY:模态频率;
  • WEIGHTED_COMPLIANCE:多工况加权柔度。

响应通过 DRESP1 卡片定义,并可在 DRESP2 中组合成更复杂的函数。例如,把多个工况的柔度加权求和,得到一个综合响应。响应定义错误是优化失败最常见的原因之一:如果响应没有正确关联到属性或工况,优化器会“看不见”约束,导致迭代发散或结果无意义。

约束与目标函数:定义“要什么”和“不能怎样”

约束(Constraint)是优化必须满足的边界条件,目标函数(Objective)是优化要最小化或最大化的量。在 OptiStruct 中,二者都在 OPTIMIZATION 子工况中通过 DESOBJ 和 DCONSTR 指定。典型组合是:

  • 目标:最小化柔度(DESOBJ(MIN)=1,响应 1 为 COMPLIANCE);
  • 约束:体积分数 ≤ 0.3(DCONSTR 关联 VOLUME 响应,上限 0.3);
  • 附加约束:一阶频率 ≥ 80 Hz,最大应力 ≤ 材料屈服强度的 0.8 倍。

目标函数只能有一个,约束可以有多个。约束过多或过紧会导致可行域为空,求解器无法收敛。实际工程中建议先只保留体积约束和柔度目标,得到基础拓扑后再逐步加入频率、应力或制造约束。

优化流程与求解器设置

OptiStruct 拓扑优化的标准流程如下:

  1. 建立有限元模型,划分设计域与非设计域网格;
  2. 定义材料、属性、工况与边界条件;
  3. 用 DESVAR、TOPOLOGY、DTPL 定义设计变量;
  4. 用 DRESP1 定义响应;
  5. 用 DESOBJ 指定目标,用 DCONSTR 指定约束;
  6. 在 OPTIMIZATION 子工况中引用上述卡片;
  7. 提交求解,监控 .out 文件中的迭代历史与收敛曲线;
  8. 用 OSSmooth 或 HyperMesh 提取等值面,生成可制造的几何。

求解器设置方面,OPTIMIZATION 子工况中的 DESMAX 控制最大迭代次数(默认 30),MINDIM 控制最小成员尺寸,CHECKER 控制棋盘格抑制。收敛判据通常为连续两次迭代的目标函数变化小于 OBJTOL(默认 0.001)。若迭代在 30 次内未收敛,可适当增大 DESMAX 或放宽约束。

建议在正式优化前先做一次无制造约束的“自由拓扑”试算,观察材料分布趋势,再决定是否加入拔模、挤压或对称约束。这样能避免一开始就因约束过严而无法收敛。
OptiStruct 拓扑优化五要素与求解循环 优化问题定义 设计变量 ρe ∈ [0.01, 1.0] 响应 MASS / COMPLIANCE / STRESS 约束 体积分数 / 频率 / 应力 目标函数 最小化柔度 / 质量 求解器设置 DESMAX / MINDIM / OBJTOL 求解器迭代循环 ① 有限元分析 求解位移、应力、频率 ② 灵敏度计算 ∂目标/∂ρe、∂约束/∂ρe ③ 设计更新 更新 ρe,生成新拓扑 ④ 收敛判断 |Δf| < OBJTOL ? 未收敛,继续迭代 ⑤ 输出结果 密度云图 + OSSmooth 提取 收敛 关键卡片与输出 输入卡片 DESVAR / TOPOLOGY DRESP1 / DCONSTR / DESOBJ 求解器参数 DESMAX=30 MINDIM=2×单元尺寸 监控文件 .out 迭代历史 .h3d 密度云图 最终输出 等值面 STL / STEP 可制造几何模型

上图把五要素与求解循环放在同一视图中:左侧是优化问题的定义输入,中间是求解器反复执行的四个步骤,右侧是实际提交的卡片、监控文件和最终输出。可以看到,设计变量、响应、约束和目标函数并不是孤立的卡片,而是通过 OPTIMIZATION 子工况被求解器统一读取,并在每次迭代中重新计算灵敏度、更新密度场。

一个可复现的示例设置

假设一个 200 mm × 80 mm × 10 mm 的悬臂梁设计域,材料为铝合金(E = 70 GPa,ν = 0.33,ρ = 2.7 g/cm³),左端固定,右端下表面施加 500 N 集中力。目标是最小化柔度,约束体积分数不超过 0.3。关键卡片可写为:

DESVAR, 1, TOPO, 0.01, 1.0
TOPOLOGY, 1, PSOLID, 1, , , , 1
DRESP1, 1, COMP, COMPLIANCE
DRESP1, 2, VOL, VOLUME
DESOBJ, MIN, 1
DCONSTR, 1, 2, , 0.3
OPTIMIZATION, 1
DESMAX, 30
MINDIM, 4.0
OBJTOL, 0.001

提交后,在 .out 文件中应看到类似“Iteration 1: Objective = 1.25E+02, Volume = 0.30”的记录。若第 8 次迭代后目标函数变化小于 0.001,求解器停止。此时用 HyperView 查看密度云图,ρe > 0.5 的区域即为建议保留的材料。再用 OSSmooth 以 0.5 等值面提取 STL,即可得到可导入增材制造切片软件的几何。

若迭代过程中出现“Constraint violation”或目标函数震荡,优先检查:① 响应是否关联到正确的属性;② 约束上限是否小于当前初始值;③ 网格是否存在过小单元导致 MINDIM 失效。多数情况下,把 MINDIM 设为 2~3 倍平均单元尺寸可显著改善收敛性。