NeuralThermal · L2 算子学习 · DeepONet 全场温度预测
NeuralThermal L2 · DEEPONET ← 返回 L2 算子库
L2 · OPERATOR LEARNING · DEEPONET

从工况到全场温度:用算子学习替掉重复的稳态热仿真

方法原理 数据建模 精度验证 应用价值 模型实现

方法原理

常规代理模型把仿真压成"输入参数 → 关心的几个标量",换测点、换位置就得重新训练。算子学习换了个目标:待拟合的对象是从工况到温度场的映射本身。工况经分支网得到一组系数,坐标经主干网得到一组基函数,两者点积把整个场重构出来 —— 位置成了模型的输入,而不是模型的结构。

算子形式
G(u)(y) ≈ Σ b_k(u) t_k(y) + b_0
u ∈ R²  工况向量(损耗功率、风扇转速)
y = (x, y, z)  查询坐标
G(u)(y)  该点温度 [°C]
ARCHITECTURE
分支网 · 主干网 · 点积重构
DeepONet 网络结构:输入输出、训练数据、Stacked 与 Unstacked 两种形式
位置是输入
换测点不用重训,网格上没有的点也能问,模型不绑定单一网格。
两路解耦
工况只过分支网一次,坐标只过主干网一次,扫上万工况时代价几乎线性。
基函数可解释
主干网输出的 p 个模态类似自适应的降阶基,可以单独取出来看空间分布。

数据建模

对象是一块电机控制器 PCBA:三相桥六只功率管贴在同一块铝基散热器上,冷却风从一侧吹过翅片。样本来自同一套网格上的 100 次稳态热仿真,每次只改损耗功率和风扇转速。节点坐标只存一份,温度按工况堆成矩阵。测试集按工况整组划出,模型评估时面对的是完全没见过的工况,而不是见过工况里没见过的点。

LAYOUT 功率管布置示意 · 俯视 示意图,非实际尺寸
PCBA
Q1
Q3
Q5
Q2
Q4
Q6
铝基散热器 · 翅片
冷却风向 · n_fan
上桥 Q1 / Q3 / Q5 靠近进风侧,温度整体偏低
下桥 Q2 / Q4 / Q6 位于风流下游,是常态热点
导出面 6 个结温面 + 散热器界面 + 壳侧接口,共 8 个面 24,860 节点
六只管子共用同一条风路,谁最先触发热保护取决于位置而不只是损耗,这正是需要全场而不是单点的原因。

精度验证

验证工况取自测试集,训练时完全没有出现。

0.42 °C
全场 MAE
± 1.5 °C
全场误差包络
58 – 82 °C
该工况温度区间
FIG 01 散热器表面全场
三翅片散热器:上为流场与流线,下为温度场
上图为流场与流线,气流在翅片顶部加速、在翅片间形成回流;下图为对应的温度场,热量沿基板铺开后由翅片间的气流带走。

应用价值

一次性付出 100 个工况的仿真成本,换来一个可以反复问的全场模型。之后每一个新工况的边际成本接近零,工况扫描、参数优化、实时监测这些原本被算力挡住的用法才谈得上。

工况扫描从"排队"变"随手"
损耗和风扇转速的组合可以密集铺开,不再受求解排队限制,设计边界一次看清。
给的是全场,不是几个测点
评审时换关注位置不用回头重训,热点是不是移位、往哪边移,都能直接看。
可以塞进优化循环
模型可微、可批量前向,能直接挂在寻优或控制策略里,把散热余量当成变量来调。

模型实现

class DeepONet(nn.Module):
    def __init__(self, n_param, p=128):
        super().__init__()
        self.branch = mlp(n_param, p)   # 工况 -> p 维系数
        self.trunk  = mlp(3, p)         # 坐标 -> p 维基函数
        self.b0 = nn.Parameter(torch.zeros(1))

    def forward(self, u, y):
        b = self.branch(u)              # (B, p)
        t = torch.tanh(self.trunk(y))   # (M, p)
        return b @ t.T + self.b0        # (B, M) 全场温度
注:本页为客户真实案例,几何、器件编号与工况数值均已做脱敏处理。方法出处:Lu et al., DeepONet: Learning nonlinear operators, arXiv:1910.03193。
NeuralThermal · L2 算子学习 · DeepONet 返回总览 →