ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Fluent电弧仿真建模实战:从UDS电流方程到源项植入与电导率处理

Fluent电弧仿真建模实战:从UDS电流方程到源项植入与电导率处理

1. 为什么电弧这么难算:它根本不是"热源"问题

1.1 电弧是电场、流场、温度场、物性场的四场互锁

很多第一次接到电弧仿真任务的朋友,第一反应都是:电弧不就是一团高温气体吗?我在能量方程里加一个高热源不就完了?我第一次也这么干过。结果很惨——温度分布完全失真,电弧像一团被动的热烟羽一样飘散,根本形不成狭窄的高温弧柱。

这里必须先把物理图像掰正。电弧的本质是气体间隙内的自持放电通道:阴极源源不断发射电子,电子在电场里被加速,通过碰撞电离把气体分子打成离子和电子;这些带电粒子让气体变成导体,电流持续流过,产生焦耳热;焦耳热把气体加热到上万开尔文,温度升高又让电导率进一步变大,电流就更加集中。这是一个典型的正反馈自组织过程。

所以在 Fluent 里算电弧,你其实在同时求解四套物理量:

  • 电场与电流场:由电势分布控制,电流密度的散度为零;
  • 流场:电弧加热气体后的膨胀、射流、对流,以及电极间高速气流对弧柱的吹拂;
  • 温度场:能量方程中的焦耳热源项、辐射散热、对流换热、热传导;
  • 物性场:电导率、热导率、比热、密度、粘度全都随温度剧烈变化,尤其电导率能跨越十几个数量级。

这四个场互相咬合,任何一个环节出错,电弧都会"熄灭"或"爆炸"给你看。这也是为什么电弧仿真的入门门槛比普通燃烧、传热问题高一大截的核心原因。

1.2 MHD 近似:把电磁效应折算成源项

Fluent 本身没有内置一个叫"电弧模型"的开关。实际工程里大家用的都是磁流体动力学(MHD)近似思路:不直接求解电场-粒子运动的微观细节,而是把电磁效应以体积源项的形式折进流体方程。

具体来说,电场用电流连续方程描述:

∇·(σ∇φ) = 0

其中 σ 是电导率,φ 是电势。由电势求出电场 E = -∇φ,再得到电流密度:

J = -σ∇φ

电磁作用折算成两个源项:

  • 焦耳热:Q = J² / σ,加进能量方程;
  • 洛伦兹力:F = J × B,加进动量方程。

这里 B 可以是外部磁场(比如磁吹线圈),也可以是电弧电流感生的自磁场。宏观灭弧场景下,这个近似足够准确,它给工程提供了从"完全不会"到"能算出来"的可行路径。

1.3 第一道坎:电导率不是常数

几乎所有对电弧仿真"一看就会、一算就废"的人,都倒在这一步:电导率随温度的变化极其剧烈。以空气为例,3000 K 以下基本是绝缘体,电导率接近零;温度跨过电离门槛后急剧攀升,10000 K 以上变成了良导体,可以做到几千西门子每米。整个变化跨度至少 10 到 12 个数量级。

这意味着什么?意味着你必须在 UDF 里如实反映 σ(T) 这条曲线,同时做好数值保护。这条曲线通常来自文献数据、实验测量,或者用等离子体化学平衡程序算出来的结果。拿到原始数据后还要做平滑、插值、截断,直接查表往往让求解器残差疯狂锯齿。

我自己现在的习惯是:动手建模之前,先把 σ(T) 曲线画出来贴在手边。没有这条可靠的物理数据,后面的一切建模技巧都是纸上谈兵。

2. 在 Fluent 里搭电弧模型的技术路线:从电势方程到源项植入

2.1 用 UDS 解电流连续方程

Fluent 里没有现成的"电势方程",我们要借助用户自定义标量(UDS)来求解。思路非常直接:把 φ 设成一个 UDS 变量,让它的扩散系数等于 σ,对流项置零,源项为零。这样 UDS 方程就变成了上面的电流连续方程。

具体操作步骤:

  1. 在 Fluent 的 User Defined Scalars 面板注册 UDS-0,命名 Electric Potential;
  2. UDS 方程勾掉非稳态项,Flow Time 选 Steady 即可;
  3. 通过 UDF 设置 UDS-0 的扩散系数为 σ(T);
  4. Flux Function 返回 0,确保没有对流输运;
  5. 在求解器里启用这个标量方程。

对应 UDF 的骨架大概是这样的:

#include "udf.h" /* 电导率函数:基于温度的拟合值 */ real sigma(real T) { real s; if (T < 3000.0) s = 1e-4; /* 下限保护 */ else if (T < 12000.0) s = 1e-4 * exp((T - 3000.0) / 1800.0); else s = 3.0e3; /* 上限截断 */ return s; } /* 设置 UDS-0 扩散系数 = 电导率 */ DEFINE_DIFFUSIVITY(uds_conductivity, c, t, i) { return sigma(C_T(c, t)); } /* UDS 对流项置零 */ DEFINE_UDS_FLUX(uds_zero_flux, f, t, i) { return 0.0; }

2.2 焦耳热和洛伦兹力源项怎么写

有了电势场,就能提取电流密度,进而计算源项。核心是从 C_UDSI_G(c, t, 0) 拿到电势梯度向量,然后乘上 -σ 得到电流密度的各分量。这里有一个非常容易踩的坑:Fluent 的梯度宏返回的是梯度向量,三个分量是 G(0)、G(1)、G(2),方向与坐标轴对应。

焦耳热源项(能量方程):

DEFINE_SOURCE(energy_arc_source, c, t, dS, eqn) { real Jx, Jy, Jz, q, s; s = sigma(C_T(c, t)); Jx = -s * C_UDSI_G(c, t, 0)[0]; Jy = -s * C_UDSI_G(c, t, 0)[1]; Jz = -s * C_UDSI_G(c, t, 0)[2]; q = (Jx*Jx + Jy*Jy + Jz*Jz) / s; dS[eqn] = 0.0; return q; }

洛伦兹力(动量方程 x/y/z 三个方向各挂一个源项):

DEFINE_SOURCE(x_momentum_force, c, t, dS, eqn) { real Jx, Jy, Jz, Fx; real Bx = 0.0, By = 0.0, Bz = 1.0; /* 示例:外部 z 向磁场 */ real s = sigma(C_T(c, t)); Jx = -s * C_UDSI_G(c, t, 0)[0]; Jy = -s * C_UDSI_G(c, t, 0)[1]; Jz = -s * C_UDSI_G(c, t, 0)[2]; Fx = Jy*Bz - Jz*By; dS[eqn] = 0.0; return Fx; }

特别提醒:源项的单位要跟 Fluent 内部一致。能量源项单位是 W/m³,动量源项单位是 N/m³。很多人算出几十万上百万开尔文的荒谬温度,十有八九是电流密度单位换错了。

2.3 物性表预处理:别拿原始表直接查

我见过太多人把几千行的 σ(T)、k(T)、cp(T) 数据做成 property 表直接挂到材料上,结果残差曲线像心电图。原因是:电弧物性随温度变化太剧烈,线性插值在不同数据点之间会引入虚假的导数突变,导致源项震荡。

建议做法是:

  • 把电导率做对数化处理,取 log10(σ) 后分段拟合或做平滑样条;
  • 热导率和比热同样做高次拟合,宁可段数多一点,不要低阶插值;
  • 所有物性函数都加上下限,避免浮点异常。
/* 电压/电流需要的物性统一封装 */ real electric_conductivity(real T) { real log_s; if (T < 3000.0) return 1e-4; log_s = -4.0 + (T - 3000.0) / 1500.0; if (log_s > 4.0) log_s = 4.0; /* 上限 1e4 S/m */ return pow(10.0, log_s); }

实测下来,用一个连续光滑的 σ(T) 函数,比用 500 行的 Table 插值收敛快得多。

2.4 压力基还是密度基,湍流怎么选

电弧建模里求解器选择没有绝对答案,但有一条经验:压力基耦合算法(Coupled)在低压、低速、强源项的起弧阶段非常稳,适合绝大多数断路器、开关、焊接电弧场景。密度基显式算法在高速气流强烈吹弧(比如气体断路器里马赫数较高的喷口射流)时有优势,但对网格质量和时间步长更敏感。

湍流模型方面,电弧弧柱中心由于温度极高、粘度大,局部雷诺数未必高;但弧柱边缘与冷气体交界处剪切很强,常出现湍流。工程上稳妥的选择是 RNG k-ε 或 SST k-ω。我的个人经验是:第一阶段起弧验证用层流跑通、拿到合理温度场,再切换湍流模型做定量分析,比一开始就开全模型容易定位问题。

3. 一次完整落地的起弧建模实操:网格、初始场、边界与求解策略

3.1 几何简化和网格尺度控制

以最常见的二维轴对称自由燃弧为例。几何可以简化为两个电极之间的间隙加外围开放边界,使用 axisymmetric 模型,节省一个数量级的计算量。

网格尺度的核心矛盾是:弧柱温度梯度极高,径向尺度往往只有零点几毫米,而外围计算域可能有几十毫米。沿径向在弧柱区域必须加密到 0.05~0.2 mm,外围逐渐放宽。一张能用的典型网格分部可以参考这张表:

区域网格尺度原因
弧柱核心(半径 1 mm 内)0.05~0.1 mm温度梯度大,需要分辨弧柱边界
近电极区0.1~0.2 mm电流集中、焦耳热集中
外围气流区0.5~2 mm压力波、涡量变化平缓
电极壁面边界层第一层 0.02 mm,增长率 1.2壁面传热与边界层分辨

网格切得太粗,电弧温度场会被"抹平",弧柱半径虚高;切得太细,时间步长被迫压缩到皮秒级,工程上根本算不完。使用 Fluent 的梯度自适应功能,基于温度梯度局部加密,往往能省一半网格量。

3.2 初始导电路径怎么给:温度种子法

这是新人最容易忽略、也最关键的启动技巧。如果初始全场都是 300 K 的冷气,电导率全部是 1e-4 级别的下限,那么电流连续方程里的扩散系数几乎为零,电势方程没法建立起有效的电流通路,整个计算就"卡死"在绝缘状态,源项永远算不出来。

正确做法是在起弧位置预先埋一个高温种子。用 Patch 或者 UDF 初始化,把一个高斯分布的小高温区域写进去:

DEFINE_INIT(arc_seed, mix, domain) { cell_t c; Thread *t; real x, r, T0 = 12000.0, r0 = 0.5e-3; real cxp = 0.0, cyp = 0.0; /* 弧柱中心坐标 */ real d; thread_loop_c(t, domain) { begin_c_loop(c, t) { x = C_CENTROID(c, t)[0]; r = C_CENTROID(c, t)[1]; d = sqrt(pow(x - cxp, 2.0) + pow(r - cyp, 2.0)); if (d < 3.0 * r0) C_T(c, t) = 300.0 + (T0 - 300.0) * exp(-d*d/(r0*r0)); } end_c_loop(c, t) } }

这一坨高温区让 σ(T) 直接进入高电导区,电流通路瞬间建立,电弧就能自发维持。

3.3 边界条件明细与求解次序

以电弧炉或断路器开断电弧简化为例,边界条件通常是:

  • 阳极面:电势固定为 φ = V_total(或者电流密度分布已知,看外电路模型);
  • 阴极面:φ = 0;
  • 电极壁面:温度给定为电极材料熔点附近的固定值,或设置热阻;
  • 开放出口:压力出口,回流温度设为环境温度;
  • 对称轴:轴对称边界。

求解次序非常重要。我建议四步走:

  1. 先关掉 UDS 和所有电弧源项,只求解冷态流场,把流场建立起来;
  2. 打开电势 UDS 方程,但暂不挂焦耳热源项,检查电流密度分布是否合理;
  3. 挂上焦耳热源项和物性函数,瞬态启动,时间步长从 1e-8 s 起步;
  4. 稳定后逐步放大时间步长到 1e-6~1e-5 s 量级。

原因很简单:如果一上来全部打开,能量方程里的源项变化量好几个数量级,压力、温度、流场互相撕裂,收敛难度极大。分步激活是我试过最稳的套路。

3.4 从残差曲线判断模型"起弧"成功

很多人看到残差降到 1e-4 就觉得算完了,电弧仿真这行可不行。残差低说明代数方程收敛,不说明电弧形态正确。你还需要看三个物理量:

  • 电流:从边界积分总电流,看它是否与加载电压/外电路设定匹配;
  • 弧柱温度:稳定状态下弧柱峰值温度一般在一万到两三万 K,太高(几十万 K)或太低(几千 K)都有问题;
  • 弧压与弧径:跟文献或实验伏安特性对比,弧压量级是否合理。

我自己的做法是:在弧中心布置三个温度监测点(轴线 0 mm、5 mm、10 mm 处),外加一个电流监测器。如果监测点上温度呈现典型的先稳定、再波动但保持在合理区间,才说明电弧真正"点燃"了。

4. 新手集中翻车的六个坑:每个坑背后都是物理假设没守住

4.1 除零保护:σ 下限与残差爆炸

UDF 里只要出现 q = J² / σ 这种除法,就必须对 σ 做下限截断。冷区 σ 本来就接近零,微小的数值电流密度乘以微小的电导率,一旦在除法中出现 σ ≈ 0,浮点数直接溢出。加一个 max(s, 1e-4) 只是最基本的保护,更重要的是保证 σ(T) 在温度上限处也平滑封顶,避免高温区源项突然跳变。

4.2 电荷不守恒的隐性来源

电势方程在单一流体域里通常没问题,但一旦算多域模型(比如气体区加固体电极区,或者多层材料界面),UDS 扩散系数跨界面可能会出现不一致。Fluent 默认的界面扩散通量处理,对电导率急剧变化的固体/流体界面并不友好。我在某个助燃气体喷口模型里就踩过:电弧电流在气固交界面上莫名减少,最后发现是界面处的电导率用了算术平均,把高导区的 σ 拉低了,导致电流人为减小。

解决方式是:在需要准确电导率界面的区域,用 interface 两侧分别定义材料后,单独用 UDF 覆盖 boundary diffusivity,或者在导电固体域中强制扩散系数为对应值。算完后做一次电流通量净积分,从阴极到阳极应当一致,这个验证不能省。

4.3 温度虚高到几万开尔文之外的单位陷阱

每次有人拿着"220000 K"的温度云图来问,我第一句都是:检查你的电流密度单位。有人从论文里拿到 J 的单位是 A/mm²,直接写成 1e2 级别的数就代入 UDF,而 Fluent 内部的 SI 单位要求 A/m²,差因子 1e6。焦耳热量级瞬间放大 1e12,温度直接烧穿宇宙。

另一个单位陷阱是能量源项。Fluent 的能量方程源项是 W/m³,不是 W/kg,不要在前面除以密度。动量源项同理是 N/m³。

4.4 网格细度引发的弧柱漂移

网格太粗时,电弧的中心位置会在数值作用下左右漂移,温度前锋分裂成几个小团,然后不停地合并分裂。这其实是数值弥散在作怪,不是物理不稳定。如果你发现弧柱中心随时间无规则摆动,先别急着调物理模型,把弧柱区域网格加密一倍再看。相反,如果网格已经细到 0.01 mm 以下,层流假设就开始站不住脚,必须考虑湍流扩散,否则电弧散热被低估。

一个可复用的判断标准:把弧柱峰值温度剖面画出来,网格尺度减半后,峰值温度变化小于 5%,就算网格无关性达标了。

4.5 UDF 挂载成功但就是不起作用的检查清单

遇到"UDF 编译通过、面板也挂上了,可电场一点反应都没有",按这个顺序排查:

  1. 材料物性是否真的被 UDF 覆盖(在材料面板看 Thermal/Diffusivity 旁边是否是 udf 名字);
  2. UDS-0 的 Diffusion Function 是否指向 DEFINE_DIFFUSIVITY 对应的函数名;
  3. UDS 方程是否启用了求解(在 Solver 树的 Equations 里打勾);
  4. 边界条件里 UDS 的值是否设置正确(默认零值会让电极之间永远没有电位差);
  5. 是否在 case 里挂了初始化 UDF 后重新 Initialize。

4.6 收敛判据不能只看残差

电弧问题有极强的非线性源项,残差低完全可能是一个"错误的稳态"。比如电弧熄灭了、电流通路断了,源项自动归零,模型"安静"下来,残差反而很低。这个是最坑的假收敛。

我的习惯是:把残差阈值放到 1e-4,同时必须让监测点的弧柱温度、电流和电压三个量都稳定。再加一条:用 Fluent 的通量报告对比能量方程的总源项和总散热,不平衡超过 10% 就说明计算里有隐性问题。

5. 从"能算"到"算得准":进阶方向的四条路

5.1 动网格里的电极分合与燃弧

断路器、继电器这类场景核心是电极分离过程中电弧的产生与熄灭。这就必须上动网格。建议用层动(Layering)配合电极运动,触头分开瞬间初始间隙非常小,网格生成要避免负体积。分合过程的难点在于:触头还在接触时电流通路是固态金属导电,电弧模型不该参与;一旦分开,就必须在间隙里立刻植入高温种子。

实现上可以用 DEFINE_CG_MOTION 控制电极运动,配合事件检测:间隙距离超过阈值时,触发初始化函数植入弧柱种子。

5.2 外电路耦合:把电弧接进真实回路

实际工程中电弧电流不是固定值,它由回路参数(电源电压、电感、电阻)和电弧电阻共同决定。电弧电阻本身是瞬态变化的,所以要用 UDF 从 Fluent 里取出弧压,解一个 RLC 电路的常微分方程,反过来把电流作为电势方程的边界条件更新。

弧压提取可以用面平均值或某一路径的电势差。常微分方程用 Runge-Kutta 四步法在每次迭代里解几步即可。这个回路-流场双向耦合是电弧仿真工业化的分水岭,也是"仿真结果能不能对上试验数据"的关键。

5.3 自磁场与磁吹电弧处理

电弧电流自身会产生环向磁场,这个自磁场引起的收缩效应在低压电器里不可忽略。二维轴对称模型下,自磁场可以解析地算:给定半径 r 内的轴向电流 I(r),环向磁感应强度 Bθ = μ0·I(r) / (2πr)。这个公式写进 UDF 代价极小,但能把弧柱压得更细,温度分布明显改变。

磁吹电弧则是外加永磁体或线圈磁场,把电弧拉长吹灭。实现方式是把外部磁场的分布 B_ext(x, y, z) 写入坐标函数,再算 F = J × B_ext。很多工程仿真算到"能算出来"但总是说"跟实验对不上",问题往往就出在没加自磁场收缩项上。

5.4 辐射模型与有效导热系数修正

电弧温度上万开尔文,辐射散热不是小项,而是能量平衡的主要出口之一。忽略辐射,电弧温度会偏高,弧柱变胖。推荐使用 DO(离散坐标)辐射模型,配合灰气体加权和(WSGGM)处理气体吸收系数,至少在谱带不敏感时可以接受。

工程里还有一种便宜做法:在能量方程里加一个温度四次方的辐射损失项,近似公式 q_rad = -ε·σ_SB·(T⁴ - T_amb⁴),ε 取 0.1~0.3。虽然粗糙,但作为前期摸底非常高效。

最后再分享一点实战体会

做了这么多电弧案例,我最大的感想是:电弧仿真跟普通流体仿真完全是两种工作方式。普通的传热流动计算,边界条件、网格边界设好,剩下的就是等残差;电弧仿真则像点火,你要亲手把每个物理场的"引线"搭正确,还要时刻盯住电弧是不是真的"活着"。

如果你正准备入坑,建议按这个顺序走:先找一张可靠的 σ(T) 曲线,再搭一个最简单的二维轴对称自由燃弧模型,把 UDS 电势、焦耳热、自磁场收缩这三样跑通,然后才碰动网格、外电路、磁吹。每加一个物理机制,就多一层验证。等你手里有了一套能稳定起弧、伏安特性对得上的模型,后面的工程问题基本都是往这个框架上添砖加瓦的事。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进