TMS BOOK · ACADEMY 讲义

冷板/流道拓扑优化

大纲的完整展开版——讲师授课蓝本 / 学员自学材料

J3-03 冷板流道拓扑优化:从目标函数到可制造几何

课程代码 J3-03 · 板块 J 仿真分析 CAE / J3 换热器·部件级 CFD 时长 约 4 小时(5 讲 + 1 次「基线蛇形冷板 → 拓扑优化 → 可制造几何」实操) 适合对象 冷板 / 流道方向的 CFD 与结构优化工程师(必修);冷板结构设计岗(必修——第 4 讲的可制造约束与第 5 讲的收益核算是你签字的那一页);电池包热管理系统工程师建议了解(选修——第 1 讲的目标函数选择与第 5 讲的「何时不划算」是你要拍的板) 前置 J3-02 电池包液冷流道 CFD 与流量均匀性 电池包液冷流道 CFD 与流量均匀性(本课全课沿用它的流量与泵功口径);J2-01 CFD 基础、湍流模型与网格划分(Fluent/STAR-CCM+) CFD 基础、湍流模型与网格划分;A2-01 管网水力学:沿程/局部压降与流量分配 管网水力学:沿程/局部压降与流量分配;D2-01 电池液冷冷板设计:流道、压降与温差均匀性 电池液冷冷板设计:流道、压降与温差均匀性(本课的基线与温差拆账口径由它给)。体系外前置(需自备):多元函数的梯度与拉格朗日乘子法、链式法则;一门求解器的脚本化能力(journal / macro / Python 驱动) 本讲义定位 讲师授课蓝本 / 学员自学讲义,是 J3-03 课题的完整展开版


引言:流道不是被画出来的,是被一个目标函数挑出来的

先把这门课要解决的那件事说清楚,因为它跟「再做一版 CFD」完全不是一回事。

拿到一块基线蛇形冷板,做过 CFD,发现两件事:压降偏高、进出口两端的温差偏大。接下来通常的动作是——把流道加宽一点、把弯头改成两条并联、把进出口挪个位置,再算一遍。这条路走得通,但它有一个说不出口的前提:你已经在心里假定了流道长什么样,你调的只是这个形状上的几个数。蛇形永远是蛇形,加宽的蛇形还是蛇形。

拓扑优化把这个前提拿掉了。它不问「这条蛇形该多宽」,它问的是:设计域里的每一小块材料,到底该让冷却液走过去,还是该留成实心的铝。这个问题的答案是一整个场,而不是几个数;流道的拓扑——有几条主干、在哪里分叉、有没有环路——是算出来的结果,不是画出来的输入。

这件事听起来很美,而它在工程上有三个说不清就会翻车的地方,本课的五讲就是围着这三个地方排的。

钉子①:目标函数选错,算出来的形状是另一个东西,而且它看起来完全合理。「让冷板更凉一点」这句话在数学上至少对应三个互不相同的优化问题——最小平均温度、最小最高温度、最小温差。它们不是同一件事的三种写法,它们的最优解形态不同,而且可以反向变化:第 1 讲会用一个五行手算的例子给出一组数——某个方案的平均温度比另一个低 7.2%,而它的温差从 0 K 涨到了 9.1 K。⇒ 只报「优化后更凉了」这一句话,是一句可以同时为真和为假的话。

钉子②:拓扑优化能算得起,靠的是伴随法;而伴随法能不能用,取决于你的目标函数可不可微。设计变量有十几万个,用有限差分逐个试探,一次迭代要跑十几万次 CFD——第 3 讲会把这个账算成年份。伴随法把它压到「一次正解 + 一次反解」。代价是:目标函数必须对设计变量可微。而「最高温度」和「最大温差」这两个工程上最想要的目标,恰好都是 max 型、不可微。⇒ 必须先做可微化聚合(p-范数或 KS 函数),而聚合参数取多大,是一个有解析误差界可算的决定,不是拍脑袋。第 3 讲把这个界写成一行,并用它反解出参数下限。

钉子③:算法交出来的是一个 0 到 1 之间的连续场,不是一张图纸。从这个场到一块能冲压、能钎焊、能通过耐压试验的冷板,中间隔着过滤、投影、阈值提取、连通性检查、最小流道宽检查、圆角补齐六道工序,每一道都在改性能。⇒ 优化收敛时求解器报出的那个目标函数值,不是这块冷板的性能。第 4、5 讲讲怎么把这两个数的差算出来、分账,并判断收益还剩多少。

⚠ 三根钉子相互独立:①管「你算的是不是你想要的那个问题」,②管「这个问题算不算得起、梯度靠不靠谱」,③管「算出来的东西能不能做成零件、做成之后还剩多少收益」。三者都过了,才叫一次可以交付的拓扑优化。

本课的定义域与本课不覆盖的

本课的定义域只有一段:单相液冷冷板(或类似的液冷流道件)在层流域内、稳态、共轭传热条件下的流体拓扑优化——从优化问题的提法,到密度法与伴随灵敏度的原理,到几何提取与可制造约束,再到回代高保真 CFD 的收益核算与「值不值得做」的判断。本课交付的是方法与判据,不是任何一个目标值。

下面这些事不在本课射程内,本课只写去向、不给限值、不给条款内容:

以及任何一个具体的目标值、参数阈值与本底限值——温差目标、压降预算、体积分数上限、最小流道宽、α_max 取值、聚合参数取值、网格量、迭代步数、成本门槛,一律由本项目自己的设计验证计划与所选工艺给出,⛔ 本课一个都不给。课内所有带数的算例全部是教学假设值,用来把方法走通,⛔ 禁止照抄取用。

五讲怎么排

第 1 讲把优化问题提对:三个层次(参数 / 形状 / 拓扑)各自能到达什么形态、代价差多少;三类目标函数为什么不能互相替代;约束全集与每一条约束各自挡住哪一种退化解;多目标权重与 Pareto 前沿的取舍。第 2 讲讲密度法:设计变量场 θ 是什么、Brinkman 罚怎么把固体区堵死、α_max 该怎么由泄漏预算反解出来、插值参数 q 起什么作用——并给出一条不太舒服的结论:Brinkman 插值本身消不掉灰度。第 3 讲讲伴随法:为什么它把成本从「设计变量个数」量级压到常数量级、连续伴随与离散伴随差在哪、灵敏度场怎么驱动流道生长、以及 min-max 目标的可微化聚合与它的解析误差界。第 4 讲做几何提取:过滤与投影、灰度度量、阈值敏感性检查、最小流道宽与连通性的形态学检查、三种成形工艺各自给流道留的约束边界。第 5 讲做验证与核算:回代高保真 CFD 与罚模型场的差怎么分账、与基线的对比必须声明哪一种口径、偏工况与制造公差下的性能保持、以及「什么时候不该做拓扑优化」的三个必要条件。

最后是关键公式详解、一个走完全程的案例、常见误区二十六条、一次实操与按任务导航。

全课符号与口径(先钉死,后面不再重复声明)

⛔ 这一节是全课的口径来源,后面各讲直接用,不再重复定义。符号与已上线课程之间的冲突已逐个核过,处置写在表后。

符号 含义 单位 口径说明
θ 设计变量场,θ=1 为流体、θ=0 为固体 无量纲 ⛔ 本课的设计变量不写 γ,理由见表后第①条
θ̃ 过滤后的设计场(第 4 讲) 无量纲 由 θ 经半径 r_f 的密度过滤得到
θ̄ 投影后的物理场(第 4 讲) 无量纲 由 θ̃ 经 Heaviside 投影得到,物理方程里用的是它
α(θ̄) Brinkman 体积阻力系数 kg/(m³·s) 动量方程里的源项系数,见公式二
α_max 固体区阻力上限 kg/(m³·s) ⛔ 不抄任何文献值,由泄漏预算反解(2.3)
q Brinkman 插值陡度参数 无量纲 ⚠ 不同文献的方向约定不一致 ⇒ 本课按公式二这一式自己算
Da 达西数,Da = μ/(α_max·L_ref²) 无量纲 只作量级参考,⛔ 不作为 α_max 的取值依据(2.3)
r_f 密度过滤半径 m 与最小特征尺寸绑定(4.1)
β_H Heaviside 投影陡度 无量纲 continuation 逐步加大
η_H Heaviside 投影阈值 无量纲 默认 0.5;鲁棒公式用三档(4.5)
M_nd 灰度度量(measure of non-discreteness) % M_nd = (1/n)Σ4θ̄_i(1−θ̄_i)×100%,0% 为纯 0/1
V_f 流体体积分数 无量纲 V_f = ∫θ̄ dV / V_design;V* 为其上限
J 目标函数 见各式 ⛔ 报 J 必须同时报它的组成与权重
C_th 热柔度,C_th = ∫_Ω T dV K·m³ ⚠ 它是体积加权的整体温度水平,⛔ 不是温差
⟨T⟩ 体平均温度 = C_th/V K 本课一律相对进液温度取,即 ⟨T⟩−T_in
T_max / T_min 冷板固体域最高 / 最低温度 K ⛔ 不取流体域的,理由见表后第③条
ΔT_span = T_max − T_min(冷板固体域) K 本课的均匀性判据量,口径见表后第③条
Δp_cp 冷板进出口总压差 Pa 取进出口两个截面的质量流量加权平均全压之差
V̇ 体积流量 m³/s 报数一律同时给 L/min
ṁ 质量流量 = ρV̇ kg/s
P_hyd 水力功率 = Δp_cp·V̇ W 沿用 J3-02 电池包液冷流道 CFD 与流量均匀性 口径,⛔ 不乘泵效率 η_pump
Re 雷诺数 = ρuD_h/μ 无量纲 u 为截面平均真实速度,与 J3-01 换热器芯体 CFD 与多孔介质模型 J3-02 电池包液冷流道 CFD 与流量均匀性 同口径
D_h 水力直径 = 4A_c/P_wet m A_c 为过流截面积,P_wet 为湿周
f_D Darcy 摩擦因子 无量纲 Δp = f_D·(L/D_h)·½ρu²;⛔ 全课不出现不标类型的裸 f;f_D = 4f_F
p_n p-范数指数 无量纲 见公式六
ρ_KS KS 聚合参数 1/K ⚠ 必须带下标,⛔ 不与流体密度 ρ 混写
u*, p*, T* 伴随速度场 / 伴随压力场 / 伴随温度场 见 3.3 上标 * 一律表示伴随量
N_d 设计变量个数 个 ⛔ 与流场网格单元数是两个数(4.1)
w_min 最小流道宽(工艺给定) m 或 mm 工艺输入,⛔ 不是优化输出
w₁, w₂ 多目标权重 见 1.5 ⛔ 报权重必须同时报归一化用的参考值

三条跨课口径处置(⚠ 这一层没有任何自动检查能替你做,交付前必须自己核一遍):

① γ 在本课程体系里已经被占用了。J3-02 电池包液冷流道 CFD 与流量均匀性 把 γ 定义为流量不均匀度(各支路流量的总体标准差除以平均流量,无量纲),并且它还有一个兄弟 γ_R(极差归一)。而流体拓扑优化的文献里,设计变量最常见的记号恰好也是 γ。两者都是 0 到 1 之间的无量纲数,写在纸上一模一样,含义毫不相干。⇒ 本课的设计变量改用 θ;本课若要提「流量不均匀度」,一律沿用 J3-02 电池包液冷流道 CFD 与流量均匀性 的 γ / γ_R 并写全名字。⛔ 两者不得互代、不得在同一张图上不带名字地并列。

② 泵功沿用 J3-02 电池包液冷流道 CFD 与流量均匀性 的口径:本课「泵功」一律指水力功率 P_hyd = Δp_cp·V̇,⛔ 不把泵效率 η_pump 乘进来。理由与那门课相同——把泵的特性混进冷板方案的账里,方案之间就不可比了。⚠ 但要注意口径的射程差别:J3-02 电池包液冷流道 CFD 与流量均匀性 的 Δp_sys 取的是整个系统(含集管与所有支路),本课的 Δp_cp 只取一块冷板的进出口。两者都叫「压降」,量级差可以很大 ⇒ 报 P_hyd 必须同时说它是哪一段的。

③ ΔT_span 与 D2-01 电池液冷冷板设计:流道、压降与温差均匀性 的 ΔT_max 是两个量,⛔ 不得互代。D2-01 电池液冷冷板设计:流道、压降与温差均匀性 把芯间温差拆成三段预算(沿程温升 ΔT_cool、热阻链温差 ΔT_cell−cool、支路间温差 ΔT_branch),它的 ΔT_max 是电芯之间的最大温差,是被评价的结果量。本课的 ΔT_span 是冷板固体域的 T_max − T_min,取的是冷板贴电芯那一面的金属温度。两者的对象不同:中间还隔着界面材料与电芯自身的导热(去向 D2-05 冷板与电芯的接触热阻与 TIM 应用 与 D1-01 动力电池产热机理与产热速率建模)。⇒ ΔT_span 是 ΔT_max 的上游代理量,它下降不等于 ΔT_max 同比例下降;⛔ 不许拿 ΔT_span 的百分比去当电芯温差的百分比报。本课之所以还是用 ΔT_span 做优化目标,是因为它是流道形状能直接影响的那一段,而后面几段由 TIM 与电芯结构决定,不在冷板设计的可控范围内。

⚠ 另外两条小口径:本课所有温度一律相对进液温度取(写作 T−T_in),这样换一个进液温度不用重算;本课全部在层流域内做优化(Re < 2300),转捩与湍流的伴随成本与可靠性问题在 3.6 单列。

全课教学基线(后面各讲反复引用这一组数)

⚠ 以下全部是教学假设值,⛔ 不对应任何平台、⛔ 不得取用。它存在的唯一目的,是让后面每一个算例都能被你在纸上复算一遍。

项 取值 性质
设计域(冷板腔体) 200 mm × 150 mm × 4 mm 教学假设
热源 单侧贴合,总功率 Q = 600 W,分三区(3.0 : 1.0 : 1.0 分配) 教学假设
冷却液 50% 乙二醇水溶液,25 ℃ 配方与物性口径去向 H7-01 冷却液(乙二醇型)配方、性能与劣化
ρ 1055 kg/(m³) 教学假设值
c_p 3350 J/(kg·K) 教学假设值
μ(25 ℃) 3.20×10⁻³ Pa·s 教学假设值
μ(−10 ℃) 14.07×10⁻³ Pa·s(为 25 ℃ 的 4.40 倍) 教学假设值;粘度随温度的量级与 D2-01 电池液冷冷板设计:流道、压降与温差均匀性 同源
体积流量 V̇ 2.0 L/min = 3.333×10⁻⁵ m³/s 教学假设
基线流道 单流道蛇形,8 mm 宽 × 4 mm 高,展开长 L_b = 1.80 m,5 个 180° 弯(每个 ζ = 1.2) 教学假设

基线的四个数,现在就算出来,后面直接引用(每一步都可复算):

A_c  = 0.008 × 0.004          = 3.200×10⁻⁵ m²
u    = V̇/A_c = 3.333e-5/3.2e-5 = 1.0417 m/s
D_h  = 4A_c/P_wet = 4×3.2e-5/(2×(0.008+0.004)) = 1.28e-4/0.024 = 5.333×10⁻³ m
Re   = ρuD_h/μ = 1055×1.0417×5.333e-3/3.20e-3       = 1832      (层流,< 2300)

矩形断面宽高比 8:4 = 2:1,充分发展层流的 f_D·Re = 62.20(这是矩形管层流的解析结果,只随宽高比变,⛔ 不是拟合的经验值;圆管对应值为 64,⛔ 不得把 64 套到矩形断面上):

f_D  = 62.20/1832 = 0.03396
½ρu² = 0.5 × 1055 × 1.0417²  = 572.4 Pa
沿程 Δp_f = f_D·(L_b/D_h)·½ρu² = 0.03396 × (1.80/5.333e-3) × 572.4
                                = 0.03396 × 337.5 × 572.4 = 6.56×10³ Pa
局部 Δp_m = (Σζ)·½ρu² = (5×1.2) × 572.4 = 6.0 × 572.4 = 3.43×10³ Pa
Δp_cp,0   = 6.56 + 3.43 = 9.99 kPa
P_hyd,0   = Δp_cp,0 · V̇ = 9.99e3 × 3.333e-5 = 0.333 W
ṁ         = ρV̇ = 1055 × 3.333e-5 = 0.03517 kg/s
ΔT_cool   = Q/(ṁ·c_p) = 600/(0.03517×3350) = 600/117.8 = 5.09 K

⚠ 注意基线里局部损失占了 34.3%(3.43/9.99)——这个比例后面在偏工况鲁棒性那一节会变成一个关键量,因为沿程项随粘度变而局部项不随粘度变。

图1 三个优化层次能到达的形态集合与各自的代价。整图分上下两块。上块为三个从左到右嵌套的椭圆,最内层标注参数优化,其中画三条形状相同的蛇形流道,只是宽度与间距不同,旁注设计变量为尺寸与间距,个数为个位数;中层标注形状优化,其中画三条边界被推挤变形的流道,仍是单连通的一条通路,旁注设计变量为边界控制点,个数为几十;最外层标注拓扑优化,其中画一条主干分叉成多条支路的树状流道,以及一个带环路的网状流道,旁注设计变量为每个设计单元的密度,个数为十万量级。三层之间用箭头标注可达形态集合逐层包含,并写明拓扑优化能改变连通性,另外两层不能。下块为一张三行的对照表,三行分别对应三个层次,四列分别为设计变量个数、可改变连通性与否、一次迭代需要的求解次数、典型总求解次数,表内文字给出量级而不给具体秒数。表下一行提示语:层次不是越高越好,选层次的判据是当前的瓶颈是不是形态本身。本图为三个优化层次的关系示意,图上的形态与个数为教学示意,不对应任何平台,不得据图取值。
图1 三个层次不是精度递增的三档,而是设计空间逐层包含的三个不同问题。从图上要读出三件事:①只有最外层能改变流道的连通性——分几支、有没有环路,另外两层做不到,无论迭代多少次;②设计变量个数跨了四到五个数量级,⇒ 求解成本的结构完全不同(这正是第 3 讲要用伴随法的原因);③能到达的形态更多,不等于收益更大——若当前瓶颈不是形态而是流量或空间,最外层带来的只是成本。本图为关系示意,图上形态与个数为教学示意,⛔ 不对应任何平台、⛔ 不得据图取值。

第 1 讲 优化问题怎么提:三个层次、目标函数与约束

这一讲不碰任何算法。它只做一件事:把「我想让这块冷板更好」翻译成一个数学上唯一确定的问题。这一步做错,后面四讲全部是在一个错的方向上做精细化——求解器会收敛、残差会掉、流道会长出漂亮的分叉形态、报告里的目标函数值会一路下降,而这些现象在目标函数选错时和选对时长得一模一样。

1.1 三个层次:变量是什么,决定了你能走到哪里

优化按设计变量是什么分三层,⛔ 不按软件模块分。

参数优化:设计变量是若干个标量——流道宽 8 mm 改成 6 或 10、弯的个数 5 改成 7、进口位置沿边挪 20 mm。几何的拓扑与形状族是你在建模时钉死的,优化只在这个族里挑一个成员。设计变量个数是个位数到几十。

形状优化:设计变量是边界的位置——把流道的壁面用一组控制点参数化,让优化器推挤这些边界。它能把一条直流道推成腰鼓形、能把弯头内侧削出一个更顺的过渡,但它不能把一条通路分成两条:边界推挤是连续变形,连通性是拓扑性质,连续变形改不了它。设计变量个数几十到几百。

拓扑优化:设计变量是设计域里每一个单元的材料属性——这一小块是流体还是固体。因为每个单元可以独立地从「固体」翻成「流体」,通路可以在优化过程中断开、合并、新生、消失。设计变量个数就是设计单元数,十万量级起步。

把这三层的成本算成一个可复算的数。(⚠ 教学假设:一次稳态共轭传热正解耗时 25 min;下同)

层次 设计变量数 N_d 每次迭代的求解次数 典型迭代数 总求解次数
参数优化(全因子 DOE) 3 — — 5³ = 125
形状优化(梯度法) 24 2(正解 + 伴随) 60 120
拓扑优化(梯度法) 1.2×10⁵ 2(正解 + 伴随) 200 400
拓扑优化(若用有限差分) 1.2×10⁵ N_d+1 = 120001 200 2.4×10⁷

⇒ 最后一行是这门课存在的理由。2.4×10⁷ 次 × 25 min = 6.0×10⁸ min = 1.14×10³ 年。而第三行的 400 次 × 25 min = 1.0×10⁴ min ≈ 6.9 天。同一个优化问题,两种求梯度的方式,代价差了六万倍(2.4e7/400 = 6.0×10⁴)。

⚠ 两条从这张表里能读出、而单看软件手册读不出的事:

  • 迭代次数与设计变量数无关(都是 200 左右),成本的全部差别在「每次迭代要跑几次求解」这一列。⇒ 拓扑优化不是「因为变量多所以慢」,是「如果梯度求得不对,就因为变量多所以慢」。
  • 参数优化的 125 次是全因子 DOE 的数,它一次算完就有整张响应面,可以事后改目标、改权重、加约束重新挑点;而梯度法的 400 次只对那一个目标函数有效,改目标就要重跑。⇒ 三层不是「越高越好」,DOE 与代理模型这条线(去向 J7-03 基于仿真的 DOE 与多目标优化)在设计变量少、且需要反复改目标时是更划算的。

什么时候才该上拓扑优化。三个条件同时成立(第 5 讲会把它写成一张决策树):① 当前的瓶颈确实是形态——参数与形状优化都做过而且到顶了;② 设计域里还有没被占用的自由空间——如果冷板腔体已经被螺栓柱、密封槽、加强筋切得只剩一条通路,拓扑优化没有生长的余地;③ 工艺能承接自由几何。三条缺一条,做出来的东西也许好看,但改不进图纸。

易错点 1-A|把「换了个求解器」当成换了层次。 形态:在参数化 CAD 模型上调用软件里叫「拓扑优化」的模块,跑完发现形状变化很小,得出「拓扑优化对冷板没用」的结论。 为什么会错:如果几何还是那个参数化模型、设计变量还是那几个尺寸,那么无论调用哪个模块,设计空间没有变——你仍然在参数优化那一层里。层次由设计变量是什么定义,不由菜单项的名字定义。 怎么当场发现:打开设置,数一下设计变量的个数。个位数或几十个 ⇒ 你不在拓扑优化里。真正的流体拓扑优化,设计变量个数应当与设计域的单元数同量级。

1.2 三类目标函数:它们不是一件事的三种写法

「让冷板更好」在数学上要写成 min J。J 有三个常见候选,本节要证明的是:它们的最优解形态不同,而且可以反向变化。

候选一:最小压降。J = Δp_cp,或等价地最小化流体域的粘性耗散功率。这是流体拓扑优化最经典的目标(历史上第一批工作就是它),它的好处是只涉及流场,不需要解温度,成本最低、收敛最稳。它的最优解是什么样?一条尽可能宽、尽可能短、尽可能直的通路——因为分叉、弯曲、收缩都产生耗散。⇒ 只用这一个目标,优化器会把冷板挖成一个从进口到出口的大通道,换热面积会被牺牲掉。

候选二:最小热柔度 / 最小平均温度。J = C_th = ∫_Ω T dV,或归一化后的 ⟨T⟩。它度量的是整体温度水平——冷板整体有多热。这是与固体力学拓扑优化里「最小柔度」完全对应的一个量(那里是 ∫σ:ε dV,这里是 ∫T dV),数学性质好、可微、伴随推导直接。

候选三:最小最高温度 / 最小温差。J = T_max,或 J = ΔT_span = T_max − T_min。这是工程上真正想要的——电芯怕的是最热那一颗,以及芯与芯之间的不一致(去向 D1-02 电芯温度不均与温差控制目标)。它的麻烦在于 max 不可微,梯度法用不了,必须先做可微化聚合(第 3 讲)。

⛔ 下面这个手算例子,是本课第一根钉子的证据。

算例 1.1(教学假设值,⛔ 不对应任何平台)。把冷板简化成三个并联的热区,热流分别 Q₁ = 300 W、Q₂ = 150 W、Q₃ = 150 W(总 600 W,与基线一致,比例 2:1:1 —— ⚠ 与基线表里的 3:1:1 不同,这里为了让手算的分数更干净取 2:1:1,⛔ 两组数不要混用)。每个区从热源到冷却液的热阻为 R_i,温升 ΔT_i = Q_i·R_i。

冷却能力守恒约束:流道总的换热能力有限,把它写成 Σ(1/R_i) = S = 300 W/K(教学假设)。这个约束代表「冷却液总共只能带走这么多、换热面积总共只有这么大」——把冷量分给某一区,别的区就少。

  • 方案 A(均分,即基线的做法):1/R_i 各 100 W/K ⇒ R_i = 0.01000 K/W。 ΔT = 300×0.01 = 3.00 / 150×0.01 = 1.50 / 1.50 K。 ⟨T⟩ = (3.00+1.50+1.50)/3 = 2.000 K;ΔT_span = 3.00 − 1.50 = 1.500 K。
  • 方案 B(最小化 ΔT_span):要 ΔT 全相等 ⇒ Q_i·R_i 相等 ⇒ 1/R_i ∝ Q_i。 1/R = 300×(300/600) = 150、300×(150/600) = 75、75 W/K。 ΔT = 300/150 = 2.000 / 150/75 = 2.000 / 2.000 K。 ⟨T⟩ = 2.000 K;ΔT_span = 0 K。
  • 方案 C(最小化 ⟨T⟩):min Σ Q_i/x_i s.t. Σx_i = S(x_i = 1/R_i)。 拉格朗日:−Q_i/x_i² + λ = 0 ⇒ x_i ∝ √Q_i。 √300 = 17.3205、√150 = 12.2474、12.2474,和 = 41.8153;缩放因子 300/41.8153 = 7.1745。 x = 124.26 / 87.87 / 87.87 W/K(和 = 300.00 ✓)。 ΔT = 300/124.26 = 2.414 / 150/87.87 = 1.707 / 1.707 K。 ⟨T⟩ = (2.414+1.707+1.707)/3 = 1.943 K;ΔT_span = 2.414 − 1.707 = 0.707 K。

把 B 与 C 摆在一起看——它们是同一个约束下、两个不同目标各自的最优解:

方案 ⟨T⟩ (K) ΔT_span (K) 相对 A 的 ⟨T⟩ 相对 A 的 ΔT_span
A 均分(基线) 2.000 1.500 — —
B min ΔT_span 2.000 0 0.0% −100%
C min ⟨T⟩ 1.943 0.707 −2.9% −52.9%

⇒ 从 B 走到 C:⟨T⟩ 下降 2.9%,而 ΔT_span 从 0 K 涨到 0.707 K。两个「更好」的方向是相反的。而这两个解都是某个目标函数下严格的最优解,两份报告都可以写「优化后冷板性能提升」。

⚠ 这个例子里的百分比之所以不大,是因为热流比只有 2:1:1。热流分布越不均,这个分歧越大。把 Q 改成 400 / 100 / 100 W(4:1:1,总 600 W)复算一遍: B:x ∝ Q ⇒ 200/50/50,ΔT = 2.000/2.000/2.000,⟨T⟩ = 2.000,span = 0。 C:x ∝ √Q ⇒ √400 = 20、√100 = 10、10,和 = 40,缩放 300/40 = 7.5 ⇒ x = 150/75/75。 ΔT = 400/150 = 2.667 / 100/75 = 1.333 / 1.333;⟨T⟩ = 1.778 K,span = 1.333 K。 ⇒ ⟨T⟩ 降 11.1%(2.000→1.778),而 span 从 0 涨到 1.333 K。热流比从 2:1:1 变到 4:1:1,分歧从 0.707 K 放大到 1.333 K。

这条结论的机理,一句话就说得清:最小化 ⟨T⟩ 是在最小化 Σ Q_i R_i,它对高热流区的热阻更敏感(系数是 Q_i),于是最优解把冷却能力往高热流区堆;被抽走冷量的低热流区变热了,但它的温升乘上小 Q 之后对总和的贡献不大——平均值不在乎,温差在乎。

图2 三种目标函数各自生长出的流道形态与三区冷却能力分配。整图两行。上行为三个并排的方形冷板俯视示意,从左到右分别标注最小压降、最小平均温度、最小温差。左格画一条从进口到出口的宽而直的粗通路,几乎不分叉,旁注换热面积被牺牲;中格画一条主干在高热流区密集分叉成细密梳齿、而在低热流区只留一条稀疏支路的形态,并在高热流区打上加密的斜纹底;右格画三条粗细不同的支路分别通向三个热区,粗细与热流大小成正比,形态左右不对称但每支的覆盖密度使三区温升相同。三格上方各用一个小方框标出该格所用的目标函数表达式。下行为一张三列柱状对照,横轴为三个热区,纵轴为归一化的冷却能力分配,三组柱分别对应上行三格,其中最小平均温度那一组的柱高比例标注为与热流的平方根成正比,最小温差那一组标注为与热流成正比,并在两组之间画一支双向箭头标注两者不重合。图上不出现任何具体温度值。本图为形态与分配趋势的示意,形态由教学模型定性给出,不代表任何求解器的实际输出,不得据图取值。
图2 目标函数不是评分标准,它是形状的生成规则。从图上要读出三件事:①三种目标生长出的形态不是同一个东西的三种精细程度,是三种拓扑上不同的流道;②下行柱状图给出分歧的代数根源——最小平均温度按热流的平方根分配冷却能力,最小温差按热流本身分配,两条分配律只在热流完全均匀时才重合;③⇒ 报告里写「优化后更好了」而不写目标函数,等于没说。本图为形态与趋势示意,由教学模型定性给出,⛔ 不代表任何求解器的实际输出、⛔ 不得据图取值。
图3 算例1.1 的三方案对照:平均温度与最大温差反向变化。整图分左右两块。左块为一张分组柱状图,横轴为三个方案 A 均分、B 最小温差、C 最小平均温度,每个方案画两根并排的柱,左柱为平均温度、右柱为最大温差,纵轴单位为开尔文,每根柱顶标出数值:A 为 2.000 与 1.500,B 为 2.000 与 0,C 为 1.943 与 0.707。B 与 C 两组之间画两支箭头,一支从 B 的平均温度柱指向 C 的平均温度柱并向下、标注下降百分之二点九,另一支从 B 的最大温差柱指向 C 的最大温差柱并向上、标注由零升到零点七零七开尔文,两支箭头方向相反并用不同颜色。右块为同一算例改用四比一比一热流比的复算结果,同样三组柱,B 为 2.000 与 0,C 为 1.778 与 1.333,两支反向箭头分别标注下降百分之十一点一与由零升到一点三三三开尔文,右块下方一行文字标注热流分布越不均、分歧越大。图底一行写明约束为三区冷却能力之和恒定。本图数值由教学假设的三区集总模型算出,为教学假设值,不对应任何冷板,不得据图取值。
图3 同一个约束下,两个目标各自的最优解在两个指标上朝相反方向走。要读出三件事:①两支箭头方向相反——这不是精度问题、不是收敛不够,是两个不同优化问题的两个不同答案;②右块的分歧比左块大一倍 ⇒ 热流分布越不均,选错目标的代价越大;③B 的平均温度与 A 完全相同(都是 2.000 K)⇒ 把温差做到零,可以完全不改善平均温度。数值由教学假设的三区集总模型算出,为教学假设值,⛔ 不对应任何冷板、⛔ 不得据图取值。

易错点 1-B|拿平均温度当均匀性判据。 形态:优化设的目标是 min ⟨T⟩(或 min C_th,因为它最好写、软件默认给),报告里却写「温度均匀性改善了 X%」。 为什么会错:⟨T⟩ 是一阶矩,ΔT_span 是极差,两者在数学上没有单调关系。算例 1.1 给出的是一个严格的反例:min ⟨T⟩ 的最优解比 min ΔT_span 的最优解平均温度低、温差高。⇒ 这不是「通常一致、偶尔不一致」,是两条独立的判据链。 怎么当场发现:在优化收敛后的结果里同时提两个数——⟨T⟩−T_in 与 T_max−T_min——分两栏报。若报告里只有一栏,先去问设置里 J 是什么。⚠ 更快的一招:看优化历史曲线,如果画的只有 J 一条线,那么另一个指标在整个优化过程中没有被任何人看过。

易错点 1-C|只写「降温」不写压降与体积约束。 形态:J = ⟨T⟩,不加任何约束,跑出来整个设计域全是流体——一个 200×150×4 mm 的扁腔。 为什么会错:在没有体积约束时,把更多单元变成流体几乎总能降低温度(换热面积和流通面积都增加),所以最优解必然是 θ ≡ 1。这不是求解器出错,是问题本身就是这么提的。 怎么当场发现:算一下这个「大水池」的压降。用基线口径复算:A_c = 0.150×0.004 = 6.00×10⁻⁴ m²,u = 3.333e-5/6.0e-4 = 0.05556 m/s,D_h = 4×6.0e-4/(2×(0.150+0.004)) = 2.4e-3/0.308 = 7.792×10⁻³ m,Re = 1055×0.05556×7.792e-3/3.2e-3 = 142.7,宽高比 37.5:1 近似平行平板 f_D·Re = 96 ⇒ f_D = 0.6728,½ρu² = 0.5×1055×0.05556² = 1.628 Pa,Δp = 0.6728×(0.200/7.792e-3)×1.628 = 0.6728×25.67×1.628 = 28.1 Pa。⇒ 压降约束挡不住大水池(28 Pa 比基线的 9990 Pa 小两个数量级),能挡住它的只有体积分数约束。这是「加错约束」的典型:直觉上以为压降会拦住它,实际不会。

1.3 约束全集:每一条各自挡住哪一种退化解

⛔ 约束不是「为了保险多加几条」,每一条都唯一对应一种会真实出现的退化解。写约束之前先问:不加这条会长成什么样。

约束 数学形式 不加它会长成什么 值从哪里来
体积分数上限 ∫θ̄ dV / V_design ≤ V* 全流体的「大水池」(1.2 已复算) 由基线的流体体积或耐压/结构要求给
压降上限 Δp_cp ≤ Δp* 若目标里没有压降项,长出极细的毛细网络(换热面积最大) 由整包水力预算给(去向 J3-02 电池包液冷流道 CFD 与流量均匀性)
最小特征尺寸 由过滤半径 r_f 隐式施加 单元级的锯齿、棋盘格、一像素宽的「流道」 由成形工艺给(第 4 讲)
进出口位置与截面 边界条件固定 优化器把进出口挪到最方便的地方,与接管对不上 由布置给(去向 I1-01 热管理零部件正向结构设计流程)
禁区(non-design region) 该区域 θ 冻结 流道长进螺栓柱、密封槽、焊接搭接带 由结构与工艺给
对称性 / 拉伸约束 设计场沿某方向恒定 三维自由生长出上下不通的悬浮腔(冲压做不出) 由成形方式给(4.1 的 2.5D)

⚠ 最后一条最容易被漏,而它决定了设计变量的个数。冲压+钎焊的冷板,流道断面沿厚度方向是贯通的(一次冲压成形),⇒ 设计场必须沿厚度方向恒定(业内常叫 2.5D 或 extrusion constraint)。不加这一条,优化器会在 4 mm 的厚度里长出上下分层的三维网络——数学上更优,工艺上做不出来,而且你要到几何提取那一步才会发现。第 4 讲会把这条约束对设计变量数的影响算清楚。

图4 约束全集与每一条各自挡住的退化解。整图为一张六行的对照卡片墙,每行一张横向长卡片,左段写约束名称与数学形式,中段画一个小缩略图表示不加这条约束时长出来的退化形态,右段写这条约束的取值从哪里来。第一行体积分数上限,缩略图为整块设计域全部涂满流体色的扁腔,右段写由基线流体体积或结构耐压要求给。第二行压降上限,缩略图为布满整个设计域的极细毛细网络,右段写由整包水力预算给,属主 J3-02。第三行最小特征尺寸,缩略图为放大的棋盘格与一像素宽的锯齿边界,右段写由成形工艺给。第四行进出口位置与截面,缩略图为进口被挪到方框边缘另一侧、与外部接管虚线对不上,右段写由布置给。第五行禁区,缩略图为流道穿过一个画成实心圆的螺栓柱,螺栓柱上打叉,右段写由结构与工艺给。第六行沿厚度方向的拉伸约束,缩略图为一块四毫米厚的剖面,其中上下两层各有一条互不连通的腔,中间用实线隔开,旁注冲压做不出,右段写由成形方式给。卡片墙下方一行提示:每一条约束都唯一对应一种会真实出现的退化解,写约束之前先问不加它会长成什么样。图上不出现任何限值与数值。本图为约束与退化形态的对应关系示意,不含任何限值,不得据图取任何约束取值。
图4 约束不是保险,是一一对应的挡板。要读出三件事:①每一行的中段都是一个会真实出现的形态,⛔ 不是理论风险——写约束之前先把它画出来;②第二行与第一行挡的是相反的退化(一个太空、一个太密)⇒ 只加其中一条不够;③最后一行的退化解在俯视图上完全看不出来,只有剖面能看见 ⇒ 它是最容易漏到几何提取那一步才炸的一条。本图为对应关系示意,⛔ 不含任何限值、⛔ 不得据图取任何约束取值。

1.4 约束怎么进目标:罚函数、增广拉格朗日与 MMA

约束写出来了,还要让优化器能处理它。三种常见做法,选哪一种影响的是收敛行为,不是最优解本身:

  • 罚函数法:J_total = J + r·max(0, g)²,g 为约束违反量。最简单,但 r 取小了约束不满足、取大了病态;⇒ 需要 continuation 逐步加大 r。
  • 增广拉格朗日:加一个乘子项,乘子随迭代更新。对 r 的敏感度低得多,是当前多数流体拓扑优化实现的默认。
  • MMA / GCMMA(移动渐近线法):拓扑优化领域的标准优化器,直接处理不等式约束,天然支持大规模设计变量。

⚠ 一条工程上的经验:体积分数约束在整个优化过程中几乎总是取等号(∫θ̄ dV = V*),因为多给流体几乎总是更优。⇒ 如果你的优化跑完 V_f 明显小于 V*,先怀疑别的地方出了问题——通常是 α_max 太小(固体区没堵住,优化器发现「固体也能流」,于是不需要更多流体,见 2.3),或是目标函数里的权重让压降项压倒了一切。这条是很好用的自检。

1.5 多目标与权重:Pareto 前沿,以及权重不是百分比

工程上的目标通常不止一个。最常见的写法是加权:

min  J = w₁·(Δp_cp/Δp_ref) + w₂·(⟨T⟩−T_in)/ΔT_ref     s.t.  ∫θ̄ dV/V_design ≤ V*

⛔ 两个必须写出来的东西:① 每一项都要无量纲化(除以一个参考值),否则 Pa 和 K 相加没有意义,而且权重会被单位换算悄悄改掉;② 参考值必须报出来——报「w₁ = 0.3、w₂ = 0.7」而不报 Δp_ref 与 ΔT_ref,这两个权重没有任何信息量。本课的参考值一律取基线值:Δp_ref = 9.99 kPa,ΔT_ref = 基线的 ⟨T⟩−T_in。

算例 1.2:权重不是百分比(教学假设值)。把 w₂ 从 0 扫到 1(w₁ = 1−w₂),每一个权重跑一次优化,得到一条 Pareto 前沿。教学假设的五个点(归一化后,基线 = 1.00):

w₂ Δp_cp/Δp_ref (⟨T⟩−T_in)/ΔT_ref 相邻两点的 Δp 变化 相邻两点的 ⟨T⟩ 变化
0.00 0.312 1.180 — —
0.25 0.348 0.985 +11.5% −16.5%
0.50 0.421 0.901 +21.0% −8.5%
0.75 0.596 0.862 +41.6% −4.3%
1.00 1.240 0.848 +108% −1.6%

⇒ 读出三件事:① w₂ 从 0.75 走到 1.00,压降涨了一倍多,而平均温度只改善了 1.6%——前沿在这一端几乎是平的,⇒ 权重的后 25% 买到的东西极少;② 权重是0 到 1 之间的一个刻度,不是「压降占 30% 重要性」,w₂ = 0.5 得到的解并不在两端的中点(0.421 不是 0.312 与 1.240 的中点 0.776);③ 前沿的膝点(曲率最大处)在 w₂ ≈ 0.25~0.50 之间 ⇒ 工程上通常选膝点附近,因为再往前走边际收益急剧下降。

⚠ 一条常被忽略的:加权法只能找到 Pareto 前沿的凸部分。如果前沿有非凸段(在热-流耦合问题里并不罕见,尤其当目标里含 T_max 这类聚合量时),无论权重怎么扫都扫不到那一段。⇒ 需要非凸段时改用 ε-约束法(把一个目标变成约束:min ⟨T⟩ s.t. Δp_cp ≤ ε,扫 ε)。ε-约束法还有一个工程上的好处:ε 有物理意义(它就是压降预算),而权重没有。

图5 权重扫描得到的 Pareto 前沿与膝点。整图为一张散点连线图,横轴为归一化压降,范围零点二到一点四,纵轴为归一化平均温升,范围零点八到一点二,两轴均以基线值为一。图中一条自左上向右下再急转的凹形曲线连接五个实心点,五点旁各标出所用的权重 w2 依次为零、零点二五、零点五、零点七五、一,以及该点的两个坐标值零点三一二与一点一八零、零点三四八与零点九八五、零点四二一与零点九零一、零点五九六与零点八六二、一点二四零与零点八四八。曲线在 w2 等于零点二五到零点五之间曲率最大处画一个空心圆圈并引出标注写膝点。图右下角画一个星形标出基线位置坐标一点零与一点零,并注明基线蛇形。曲线右端 w2 等于零点七五到一之间的一段用粗虚线加深并标注这一段压降涨一倍而平均温升只降百分之一点六。图左上角画一个灰色阴影区并标注非凸段加权法扫不到,旁注需改用 ε-约束法。两轴各写明归一化所用的参考值为基线值。图上标注全部为教学假设的优化结果。本图数值为教学假设值,由教学模型给出,不代表任何求解器在任何冷板上的实际输出,不得据图取值。
图5 权重是刻度,不是重要性百分比。要读出三件事:①五个点不等距——w₂ 每加 0.25,走过的距离差好几倍 ⇒ ⛔ 不能用「权重比」去解释「性能比」;②右端那段粗虚线是买贵了的区间(压降翻倍换 1.6% 温升),⇒ 选点应在膝点附近而不是端点;③左上角的阴影提醒:加权法只能扫到凸的那一段,前沿若非凸,无论权重怎么扫都扫不出来。数值为教学假设值,⛔ 不代表任何实际输出、⛔ 不得据图取值。

易错点 1-D|权重当百分比汇报。 形态:会上说「我们给温度 70% 的权重、压降 30%」,听的人理解成「结果里温度改善的份额是压降的 2.3 倍」。 为什么会错:权重进的是梯度的合成方向,不是结果的分配比例。目标函数各项的灵敏度量级差多少,权重就会被放大或压制多少——两项灵敏度差一个数量级时,0.3/0.7 的权重实际效果可能是 3/97。 怎么当场发现:报权重时必须同时报两项的归一化参考值和各项在收敛点的实际贡献值(w₁·(Δp/Δp_ref) 与 w₂·(ΔT/ΔT_ref) 分别是多少)。这两个乘积的比值才是「实际重要性」,而它通常与权重比不同。

易错点 1-E|用一次加权跑的结果去回答「能不能再降一点压降」。 形态:只跑了 w₂ = 0.5 那一个点,被问「压降还能不能再低」时,凭直觉答「再调调权重应该可以」。 为什么会错:一次加权优化只给出前沿上的一个点,它不含任何关于前沿形状的信息。前沿在这一点的斜率(即两个目标之间的交换率)要么另跑一个点、要么从收敛点的拉格朗日乘子里读。 怎么当场发现:问一句「我们扫了几个权重」。答案是 1 ⇒ 手上没有前沿,只有一个点。至少扫三个点才谈得上「取舍」。

1.6 本讲的落地清单

一次拓扑优化开始之前,下面六项必须白纸黑字写在设置文档里,⛔ 缺一项都不要开算:

  1. 目标函数 J 的完整表达式,含每一项的归一化参考值与权重;若含 max 型目标,写明用哪种聚合与参数(第 3 讲)。
  2. 约束清单,逐条给出数学形式与取值来源(表 1.3 的六行,凡不加的要写明为什么不加)。
  3. 设计域与禁区的几何定义,以及沿厚度方向是否施加拉伸约束。
  4. 要同时监测的指标——⛔ 不只是 J:至少 Δp_cp、⟨T⟩−T_in、T_max−T_min、V_f、M_nd 五个,全程记录、收敛后分栏报。
  5. 基线是什么,以及基线的这五个数(本课基线见「全课教学基线」)。
  6. 比较口径:与基线比的时候是同总流量、同泵功还是同压降(第 5 讲会证明三种口径给出不同的收益数)。

后面还有 4 讲正文 · 关键公式 · 案例拆解 · 常见误区 · 动手做

会员专属

后续为会员深水区内容——四库数据与深度拆解。

查看会员方案