4. 拓扑优化基础与SIMP方法
拓扑优化要解决的核心问题是:在给定设计域、载荷与边界条件下,如何分配材料的有无,使结构在满足约束的同时让目标性能最优。连续体拓扑优化最常用的做法是把设计域离散成有限元网格,为每个单元分配一个密度变量 ρe,ρe=1 表示实体材料,ρe=0 表示孔洞。但直接使用 0/1 离散变量会导致组合爆炸,因此引入连续密度变量 0≤ρe≤1,再通过插值模型把中间密度“惩罚”到两端,最终得到接近 0/1 的清晰构型。
密度变量与SIMP插值模型
SIMP(Solid Isotropic Material with Penalization)方法的关键是把单元材料属性写成密度的幂函数。以刚度问题为例,单元弹性模量插值为:
E_e(ρ_e) = E_min + ρ_e^p · (E_0 - E_min)
其中 E0 是实体材料模量,Emin 是防止刚度矩阵奇异的小值(常取 E0×10-9),p 是惩罚因子。当 p>1 时,中间密度对应的刚度被压低,优化器会倾向于把密度推向 0 或 1。工程中 p 常取 3,也可采用连续化策略:前期 p=1 让问题更接近凸问题,随后逐步增大到 3,以改善收敛性。
热传导拓扑优化与刚度问题结构相似,只是把弹性模量替换为导热系数:
k_e(ρ_e) = k_min + ρ_e^p · (k_0 - k_min)
目标通常是最小化热柔度(即最大化散热能力),约束为材料用量。热柔度定义为 C = TTK T,其中 K 为热传导矩阵,T 为节点温度向量。热载荷可来自内部热源或边界热流,此时右端项与设计变量相关,灵敏度推导需额外考虑载荷对密度的导数。
灵敏度分析与优化求解
以最小化热柔度、体积约束为例,优化列式为:
min C(ρ) = T^T K(ρ) T
s.t. K(ρ) T = Q
V(ρ) = Σ ρ_e v_e ≤ V*
0 ≤ ρ_e ≤ 1
利用伴随法可得灵敏度:
∂C/∂ρ_e = -T_e^T (∂k_e/∂ρ_e) T_e
= -p ρ_e^(p-1) (k_0 - k_min) T_e^T k_e0 T_e
其中 Te 为单元节点温度向量,ke0 为单位导热系数对应的单元矩阵。灵敏度为负值,说明增加该单元密度会降低热柔度、提升散热性能。得到灵敏度后,常用优化准则法(OC)或移动渐近线法(MMA)更新密度。OC 更新格式可写为:
ρ_e^new = clamp( ρ_e · (-∂C/∂ρ_e / (λ v_e))^η , ρ_min, 1 )
其中 λ 为体积约束的拉格朗日乘子,η 为阻尼系数(常取 0.5),ρmin 为密度下限(如 0.001)。每步更新后需用二分法调整 λ,使体积约束满足。
滤波与投影技术
直接按单元密度更新会出现两个典型问题:网格依赖性和棋盘格。网格依赖性指细化网格后得到不同拓扑,说明问题不适定;棋盘格指相邻单元密度交替 0/1,形成类似棋盘的伪结构,其根源是有限元离散下的数值不稳定。解决方法是在灵敏度或密度上施加空间滤波。
密度滤波将单元密度替换为邻域加权平均:
ρ̃_e = Σ w(x_i,x_e) ρ_i / Σ w(x_i,x_e)
w(x_i,x_e) = max(0, r_min - ||x_i - x_e||)
rmin 为滤波半径,通常取 1.5~3 倍单元尺寸。滤波后密度过渡带变宽,可抑制棋盘格并缓解网格依赖。为进一步获得清晰边界,可叠加投影:
ρ̄_e = tanh(βη) + tanh(β(ρ̃_e - η)) / (tanh(βη) + tanh(β(1-η)))
其中 η 为阈值(常取 0.5),β 为锐度参数。优化初期 β 取小值(如 1),随后逐步增大到 16~32,使密度向 0/1 逼近,同时保持可导性。
热传导拓扑优化的基本实现
下面给出一个可直接参考的实现骨架,以二维矩形域、左侧固定温度、右侧热流输入、内部均匀热源为例。设计域尺寸 100 mm × 60 mm,网格 100×60,单元尺寸 1 mm,材料导热系数 k0=200 W/(m·K),体积分数上限 0.4,滤波半径 rmin=3 mm,惩罚因子 p=3,投影参数 β 从 1 逐步增至 32。
% 初始化
rho = volfrac * ones(nely, nelx);
beta = 1; p = 3; rmin = 3; eta = 0.5;
loop = 0; change = 1;
while change > 0.01 && loop < 200
loop = loop + 1;
% 1. 密度滤波
rho_tilde = density_filter(rho, rmin);
% 2. 投影
rho_bar = projection(rho_tilde, beta, eta);
% 3. 组装热传导矩阵并求解
K = assemble_K(rho_bar, p, k0, kmin);
T = K \ Q;
% 4. 计算热柔度与灵敏度
C = T' * K * T;
dc = sensitivity(T, rho_bar, p, k0, kmin);
% 5. 滤波灵敏度
dc = density_filter(dc, rmin);
% 6. OC更新
[rho, lambda] = oc_update(rho, dc, volfrac, v_e, eta_oc);
% 7. 收敛判断
change = max(abs(rho(:) - rho_old(:)));
rho_old = rho;
% 8. 逐步增大beta
if mod(loop, 20) == 0 && beta < 32
beta = beta * 2;
end
end
运行上述流程后,可观察到的典型现象是:前 20 步 β 较小时,密度场呈现较宽的灰色过渡带,结构轮廓模糊;随着 β 增大,过渡带收窄,最终形成由实体单元和孔洞单元组成的清晰散热通道。判断结果是否合理,可检查三项指标:体积分数是否稳定在 0.4 附近;热柔度是否单调下降并趋于平稳;密度场中是否出现大面积棋盘格或孤立单元。若棋盘格明显,应增大 rmin 或检查滤波实现是否正确;若网格依赖明显,可在同一体积分数下对比 50×30 与 100×60 两套网格的拓扑是否一致。
总结来说,SIMP 方法通过密度变量、幂函数插值、灵敏度分析、滤波与投影四个环节,把连续体拓扑优化转化为可求解的非线性规划问题。热传导问题与刚度问题在数学结构上高度一致,只需替换材料属性矩阵和目标函数定义。掌握这套流程后,可进一步扩展到热-力耦合、多材料以及考虑对流边界的热拓扑优化场景。