COMSOL凝固仿真全攻略:从等效热容法到多物理场收敛排查
2026/9/15 21:26:49 网站建设 项目流程

第一次用 COMSOL 做结晶凝固仿真时,我天真地以为这不过是一个带相变的传热问题。结果第一轮瞬态计算跑了两百步,温度云图直接出现 -230°C,残差曲线比心电图还刺激。那一刻我才意识到,结晶凝固看着像纯传热,骨子里却是一个多物理场问题:传热、流动、溶质再分配,甚至固体力学都在同一个时空尺度上互相影响。这篇文章就把我做凝固仿真的建模思路、方程处理、实操细节和仿真发散的排查经验整理出来,给正在做相变仿真、或者被不收敛问题折磨的同行一个可上手的参考,也希望能帮你少走几条弯路。

1. 凝固相变仿真的难点不在熔点,而在三个“暗礁”

1.1 一个直观例子:冰水相变的能量账本

很多人第一次接触 COMSOL 凝固仿真,反应是“不就是温度到了 0°C 就变成冰吗”。如果真这么处理,结果会错得离谱。

我习惯先算一笔能量账。取 1 kg 水,从 1°C 冷却到 0°C,需要放出的显热大约是 4.186 kJ。但水在 0°C 完全结冰时,潜热是 333.5 kJ/kg——显热的 80 倍。如果把这个热量漏掉,那“完全凝固需要多长时间”这个最核心的指标,计算误差不是百分之几,而是几倍甚至几十倍。

所以模拟凝固问题,第一个暗礁就是潜热怎么处理。它不是一个小修正项,而是控制整个凝固时间尺度的主导项。用恒定的比热去硬算一个含相变的过程,本质上是把能量账本做错了。

1.2 固液前沿的对流为何不能忽略

第二个暗礁是流动。凝固过程中只要有温度梯度,就有密度差,重力一作用,自然对流就起来了。凝固前沿释放潜热,会让界面附近的液体温度比远处更高,于是形成局部的浮力驱动流;这个流动反过来又推送热量,让凝固前沿变得不均匀,甚至影响晶粒生长结构。

我早期犯过一个典型错误:为了省事,只做了纯导热模型,算出来的凝固壳层非常均匀、非常“漂亮”。后来用冷水做对照实验,发现实际凝固边界是不规则的,角落的地方冰层明显更厚。原因就是自然对流把低温流体带到了某个区域,加速了局部结晶。

在 COMSOL 里做金属铸造仿真时,这个现象更突出。液态铝的动力粘度大约 1.2×10⁻³ Pa·s,比水还低,自然对流一旦成立,流速可以达到厘米每秒量级,这种流动对凝固时间的影响,绝不是什么二阶修正。

1.3 多物理场版图:传热、流动、溶质、应力谁主谁次

把几个物理场摆在一起看,你会发现它们之间是一个互相咬合的闭环:

  • 温度场通过液相线、固相线决定固相分数;
  • 相变潜热作为源项,反过来再影响温度场;
  • 温度梯度和浓度梯度通过浮力项驱动流动;
  • 流场通过对流项输运热量和溶质;
  • 凝固收缩、热应变产生应力,应力又可能改变构件与模具的接触状态,接触热阻变了,传热边界就跟着变。

这就是“多物理场的奇妙交织”的本质。做工程仿真,不是所有环节都要开全,而是先判断哪个物理场对你的目标问题起主导作用。只关心铸件冷却时间,那传热和潜热是主演;关心缩孔缩松,就得把流场和糊状区流动阻力算进去;关心宏观偏析,溶质场必须出场;关心热裂纹,应力场就躲不掉了。

所以我建议上手时不要一上来就把五个物理场全叠进去,那大概率会得到一个发散得毫无头绪的结果。先把主演拉住,再把配角一层层加进来,反而是最快到终点的路径。

2. 把物理写进 COMSOL:控制方程与材料参数的处理技巧

2.1 潜热处理:等效热容法的思想与阈值

COMSOL 里处理潜热,最常用也最稳妥的是等效热容法,也叫表观热容法。思路很简单:把潜热 ΔH 摊到一个很窄的相变温度区间 [Ts, Tl] 内,在这个区间内的等效比热写成:

cp_eff = cp + ΔH / (Tl - Ts)

从公式能直接看出为什么“相变区间”这个参数这么敏感。用铝来算一笔账:固相线 655°C,液相线 660°C,熔融潜热约 397 kJ/kg,区间宽度 5 K,那等效比热就是:

900 + 397000 / 5 ≈ 80,300 J/(kg·K)

铝的基础比热才 900 J/(kg·K),相变区间的等效比热直接变成 89 倍。你会看到材料属性在相变点附近出现一个极其尖利的峰——这个峰不是物理上不存在,而是数值上极度难收敛。如果区间缩到 2 K,峰值会到 199,400 J/(kg·K),基础值的 220 多倍。

所以我在实际项目里的经验是:金属凝固的相变区间通常至少给到 3-5 K,水/冰这类纯物质可以放在 0.5-1 K,但在 COMSOL 里建议也在 2 K 左右,用足够平滑的过渡函数去削弱尖峰。精度损失不大,但收敛性会显著好转。

在 COMSOL 材料定义里,这个表达式可以写成:

cp_eff = C_p0 + L_ph / (T_l - T_s) * flc2hs((T - T_mid) / (T_l - T_s), 0.5)

这里的 flc2hs 是 COMSOL 内置的连续平滑 Heaviside 函数,用来把阶跃式的相变“抹”成连续过渡。这也是实现等效热容法最省事的手段。

2.2 流动方程怎么选:层流、Boussinesq 还是全可压缩

流场部分,大多数凝固场景都可以用层流假设。凝固过程的液态流速极低,特别是在糊状区里,流速基本在毫米每秒以下,雷诺数很小,一上来就上湍流模型属于给自己找罪受。

浮力项的处理要留意。COMSOL 的层流接口默认不可压缩流动,直接把密度当常数,浮力当然也就被忽略了。要计入自然对流,常见做法有两种:

第一种是 Boussinesq 近似,在动量方程的体积力上添加:

F = ρ_ref * β * (T - T_ref) * g

这个近似假设密度只在重力项里随温度变化,其余地方都当常数。对温差不大、密度变化幅度小的过程很有效,水从室温到接近冰点,差十几度,用 Boussinesq 没问题。

第二种是使用“非等温流”耦合节点,把层流和流体传热真正联立起来,再勾选考虑密度变化。凝固过程其实有固体和液体两相,密度差异往往不能忽略,水变冰密度从 1000 掉到 917 kg/m³,铝液凝固后也会收缩。如果流动和界面形态是研究重点,建议直接用 COMSOL 的“非等温流”多物理场节点,它会自动把传热对流体属性的影响带进去。

2.3 溶质场与偏析:什么时候非加不可

溶质再分配是凝固仿真里最容易被忽略、但工程影响极大的一块。如果只算温度场和流场,你只能回答“哪里先凝固”,回答不了“哪里成分偏析了”。

宏观偏析的经典描述是 Scheil-Gulliver 方程:

Cs = k0 * C0 * (1 - fs)^(k0 - 1)

其中 k0 是平衡分配系数。这个式子表达了一个物理事实:先凝固的固体,它的溶质含量和母液不一样,剩下的液相会被不断富集,凝固到最后的地方,成分往往最“偏”。

在 COMSOL 里实现宏观溶质输运,要添加“稀物质传递”接口,并额外加一个与固相分数变化率成正比的源项,模拟凝固过程中液相浓度被排斥富集的过程。很多教材不会讲这个源项怎么加,我的经验是:先在传热接口里用变量方式导出固相分数 fs,然后在稀物质传递的“反应”节点里写:

R = (k0 - 1) * c * d(fs, t) / (1 - fs + eps)

配合合适的初始浓度和扩散系数,就能在宏观尺度上看到通道偏析这类现象的雏形。

但老实说,这种连续介质方法对糊状区内的枝晶间偏析并不够精确。真要做微观枝晶生长,得换相场法。工程上评估“哪里容易偏析”,用稀物质传递加 Scheil 级别的源项已经能给出很好的倾向性判断。

2.4 材料参数的常见翻车操作

做 COMSOL 仿真的朋友应该都知道,参数翻车导致的发散和假结果,比求解器问题还常见。我自己踩过和见过别人踩的,典型有这么几种:

  • 用室温固态的物性替代液相物性。最典型的就是导热系数和粘度,铝固态导热系数 237 W/(m·K),液态只有 100 左右,差了一倍多,硬用固态值算出来的温度场必然偏。
  • 潜热单位搞错。COMSOL 里材料属性是严格按单位处理的,如果从论文里看到 J/mol,没有换算成 J/kg 就填进去,潜热直接放大几十倍,结果自然是温度平台长时间不动。
  • 液相线和固相线填反。看起来很低级,但我在多组分合金里确实犯过,一不留神把 Ts 填成了 Tl,等效热容被分配到错误的温度区域,整个凝固顺序完全乱掉。
  • 相变区间设太窄。这个问题在 2.1 已经说过,我这里再强调一次:纯理论区间 1 K 看着严谨,数值上基本是给自己挖坑。工程仿真不是一个纯粹的“精确”问题,模型的数值可求解性也是方案的一部分。
  • 忽略接触热阻。如果是砂型铸造或者有模具,铸件和模具之间不是理想接触,传热系数可能只有几百 W/(m²·K),而不是理想接触下的“连续温度”。这个边界条件怎么设,对凝固时间的影响可能比材料导热还大。

3. 从几何到求解器:搭建凝固模型的实际操作流程

3.1 几何与网格:先根据热扩散尺度估算

搭模型之前,先别急着画图,而是估算一下这个问题的热扩散特征长度。扩散尺度公式很简单:

L ≈ sqrt(α * t)

其中 α 是热扩散率,t 是你关心的物理时间。

以冰蓄冷为例,水的热扩散率约 1.34×10⁻⁷ m²/s,取 1 小时的凝固时间,扩散长度大概是 sqrt(1.34e-7 × 3600) ≈ 0.022 m,也就是 22 毫米。那你在冷壁面附近、凝固前沿会经过的区域,网格就不能比这个尺度相差太大,否则界面推进一次就跨过好几个单元,温度场和固相分数的分辨率完全不够。我的经验是,在扩散长度内至少布置 10 到 20 个单元,也就是说这个尺度下,界面附近网格要 1-2 mm 量级。

而一个 200 mm 的铸铝件,铝液热扩散率约 3.56×10⁻⁵ m²/s,冷却 60 秒扩散长度也接近 46 mm。所以粗算下来,界面附近网格 3-6 mm 才说得过去,其余区域可以放宽到 10 mm 以上,再用边界层网格照顾壁面。

几何维度的选择也很关键。能对称就对称,能用二维或轴对称就不要一上来开三维全尺寸模型。很多圆坯、板材问题用二维轴对称模型就能拿到足够工程精度的结果,计算量却小一两个数量级。先二维跑通物理过程,再决定要不要升级到三维,这个顺序永远不会浪费。

3.2 多物理场节点的装配:流体传热、层流与溶质的联动

COMSOL 里做凝固仿真,我的默认起点是“流体传热”加“层流”。在物理场接口里分别添加之后,直接在“多物理场”节点下自动生成“非等温流”耦合,这一步能省很多事,它会正确地处理流速对温度方程的对流输运,以及温度对流体属性的影响。

需要提醒的是,传热接口里的对流项不是自动全部打开的。“流体传热”在纯固体区域会自动退化掉对流,在流体区域才有 u·∇T 项。如果你的模型里有一个区域是固体金属,它就不应该有流场,所以你需要用一个“指定位移/变形”或干脆把流场速度在固相区强制归零。最省事的做法是我稍后要讲的“糊状区阻力法”,用一个随固相分数变化的阻力项让速度在凝固后自动变成零。

溶质场的接入在物理场列表里选“稀物质传递”,并指定扩散系数和对流速度来自层流。这样三套方程就联动起来了:传热决定固相分数,固相分数通过阻力项和源项分别作用回动量和溶质方程。

3.3 凝固前沿处理:动网格的边界感和“糊状区阻力法”

很多人想到追踪凝固界面,第一反应是 COMSOL 的“移动网格”或“变形几何”。我的建议是:宏观大尺度凝固问题,不要用移动网格,除非你对界面几何有极其明确的定义和把握。

原因很简单:真实凝固不是一个尖锐的几何边界,而是一个宽度可观的模糊区。糊状区里液固共存,流动阻力连续变化。硬要用动网格去追踪一条“边界”,不仅几何不好定义,网格变形到一定程度还会翻折,导致雅可比行列式变成负值,整个求解直接崩掉。

我在铸造仿真里最常用的替代方案是湖状区阻力法:

F_drag = -A_mushy * (1 - f_l)² / (f_l³ + eps) * v

其中 f_l 是液相分数,A_mushy 是一个人工阻力系数,典型的量级在 10⁵ 到 10⁸ kg/(m³·s)。这个式子表达的是:当液相分数接近 1 时,阻力接近 0,速度自由发展;当凝固程度升高、液相分数趋近 0 时,阻力趋于无穷大,速度被“冻住”。

我在层流动量方程的源项里加这个表达式,让流动区在凝固前沿自然消失,完全不用动网格,数值稳定性也远好于几何边界追踪。如果想要更连续,还可以用 flc2hs 平滑这个过渡,让阻力变化不会陡成一面墙。

3.4 瞬态研究设置:BDF、全耦合与步长上限

求解器设置是另一个大坑,我见过太多人拿着默认设置直接跑相变问题,然后对着发散报错发呆。下面这张表是我经过多次实际项目后一套比较稳的默认起点,按网格规模可以微调:

设置项推荐值原因
时间步进BDF,最大阶 2-5对非线性瞬态问题稳定,适合相变这种强非线性
初始步长自动或 1e-3 s防止一开局就跨过相变尖峰
最大时间步长相变区间宽度 / 最大温变速率保证每个相变平台里有足够采样点
全耦合阻尼0.7-0.8压低迭代振荡,收敛慢一点但稳
非线性求解器最大迭代数25默认可能偏小,复杂耦合下不够用
线性求解器PARDISO 或 MUMPS直接求解器在强非线性下更稳,内存允许就优先

最大时间步长这条值得单独解释:如果你设置了 5 K 的相变区间,而局部冷却速率最猛的地方有 2 K/s,那么一个时间步最多走 2.5 秒就会跨完整个相变峰。为了保证在等效比热峰值附近有足够多迭代采样点,最大步长最好控制在 0.5-1 s。这一步是在“精度”和“不收敛”之间做的最有效平衡之一。

全耦合阻尼也是一个关键旋钮。COMSOL 默认的全耦合阻尼比较激进,相变这种强非线性场景很容易振荡。我把阻尼降到 0.7 之后,很多原来看起来不可能收敛的模型都安静下来了。

4. 仿真发散排查:从异常温度到残差暴走的完整定位链

4.1 发散的症状:残差、负温度和 NaN 的解读

先说说发散之前你会看到什么。我总结过几个典型症状:

  • 残差曲线反复振荡,下不去。这说明非线性迭代在有效热容尖峰附近来回弹跳,像过阻尼弹簧停不下来。常见原因就是相变区间太窄、时间步太大,或者全耦合阻尼太小。
  • 温度出现负几百摄氏度。抱错发生在传热方程里,负温度就是迭代过程某一步跨过了极端值,然后被“放大”到全解域。很多时候是因为潜热等效比热突然变成基础比热的几十上百倍,导致线性化失败。
  • NaN 突然出现。这是最彻底的崩溃,矩阵已经出现了无穷大或 0/0。常见原因:湖状区阻力法的分母 (f_l³ + eps) 里 eps 设得太小,当 f_l = 0 时分母趋近 0,阻力项直接爆掉;或者稀物质传递的浓度在迭代中变成负值,扩散方程取了对数之类运算。

报错信息本身往往只有一句“Failed to find consistent solution”或“Divergence detected in nonlinear solver”,价值不大,真正有用的是看“哪一个物理场先起药效”。

4.2 我的排查顺序:按“物理-网格-数值”三层推进

遇到发散不要慌,也不要瞎调。我固定的排查顺序是三层:

第一步,砍物理场。先把流场关掉,只做纯导热加等效热容,看看这个最简模型能不能跑通。如果最简模型都不稳,那问题大概率在材料参数或网格,不在耦合。如果最简模型稳了,再把层流加回去,问题大概率出在流动与传热的耦合步进上。

第二步,观察相变区和时间步。检查等效热容曲线是否平滑,把相变区间从 2 K 扩到 5 K 再试。同时手动限制最大时间步长到 0.1 s,先跑过最开始几秒物理时间,把初始瞬态尖峰消化掉再放开步长。

第三步,调求解器。全耦合阻尼降到 0.5,最大迭代数调 25,不行就换成分离式求解器,把“流体+传热”和“稀物质传递”分开求解。面这种多物理场强耦合问题,分离式有时反而比全耦合更容易收敛,只是每个物理场之间的信息交换会滞后一步。

我做过一个小统计,身边的同事遇上的凝固仿真发散,大约 70% 是相变区间过窄或时间步过大,20% 是材料参数单位搞错,只有 10% 才轮得到真正的求解器配置问题。所以排查顺序一定是先物理再数值,别一上来就去动求解器。

4.3 真正收敛的标准:能量守恒、网格无关性和物理指标

“软件没报错”不等于“收敛了”。这是很多初学者最大的误区。

我自己判断一个凝固仿真是否真正收敛,至少看三样东西。第一是能量守恒。COMSOL 后处理里可以对整个域做热量积分的验证:边界流入的总热量加上初始内能,应该等于最终内能加上累计相变热。如果这账对不上五个百分点以上,结果基本不能信。

第二是网格无关性。把界面附近网格加密 1.4 倍,把最大网格尺寸从 2 mm 缩到 1.4 mm,再看关键指标——比如某个节点温度达到固相线的时间——变化是否小于 1%。如果变化很大,说明网格还没足够细,继续加密。

第三是物理合理性。凝固时间如果比理论估计或实验值差了数量级,那不管残差曲线多漂亮都是白搭。我一直强调,仿真器的友好界面会给人“算出来就是对的”的错觉,但真实工程世界里,判断结果合理性的能力才是核心技能。

5. 后处理里的工程信号:固相分数、温度回升与缺陷倾向

5.1 固相分数:判断凝固进度比温度更可靠

很多人看云图习惯只看温度,但在凝固仿真里,真正有意义的是固相分数 fs。温度只能告诉你“有没有到相变温度”,而 fs 告诉你“这个位置已经完全凝固,还是仍处于糊状区”。

在 COMSOL 里,我通常定义一个变量:

fs = flc2hs((Tl - T) / (Tl - Ts), 0.5)

然后在后处理里画 fs 的等值线,或者做全域平均。当这个平均值等于 1 时,代表区域全部凝固完成。这个“全部凝固时间”比“某个点降到多少度”更能代表一个铸件的整体凝固节奏。

判断一个铸件哪里是最后凝固位置,就画 fs 最小的区域,往往就是热节的位置。热节处最容易形成缩孔缩松,如果不做补缩措施,问题大概率会出现在那儿。

5.2 潜热释放与温度回升:别被大时间步骗过去

一个很有意思的物理现象是温度回升。纯物质凝固时,当局部形核开始释放潜热,如果散热速度跟不上潜热释放速度,局部温度不仅不下降,反而会往上回升一小截。在温度曲线上,这个区域会呈现一个平台甚至一个微小的驼峰。

我见过很多仿真报告里的降温曲线是一条特别光滑的直线,完全没有这个平台,那基本可以断定时间步设得太大,把温度回升抹掉了。这个平台的意义在于:它代表了潜热释放与外部散热的拉锯过程,抹掉它,凝固时间的计算就有偏差。

我的习惯是额外输出 dT/dt 的曲线。温度回升在 dT/dt 上表现为一个尖锐的回峰,一眼就能看出模型是否捕获了这个关键物理细节。

5.3 缩孔、冷隔与偏析在仿真结果里怎么预告

仿真做出来之后,怎么把这些场变量翻译成“这里可能会出缺陷”?

缩孔倾向看压力场和最后凝固区域。如果某块区域液相分数最后才到 1,同时该处压力下降、流动补缩路径被切断,那么缩孔缩松的风险就非常高。我常用“最后凝固时间等值线图”加“压力最小值位置”叠加来判断补缩通道是否畅通。

冷隔倾向看两股凝固前沿的汇合状态。铝合金压铸里经常出现两股低温熔体相遇,温度已经降到液相线以下,界面没能融合,形成氧化皮般的冷隔。在仿真里,我会看两个熔体前沿到达同一位置时各自的温度,如果都低于液相线,冷隔风险就大了。这个不能只看最终温度场,要看不同时刻的前沿位置。

宏观偏析则看溶质场。稀物质传递的浓度云图会出现明显的高浓度区,就是被富集液相冲刷过的通道。这类结果在宏观尺度上已经能指导浇注系统和冒口位置的调整。

6. 结晶凝固仿真的迁移能力:从金属铸件到电池热管理

6.1 电池热管理中的 PCM:等效热容法的同款迁移

做完金属凝固模型后你会发现,这套打法几乎可以直接迁移到电池热管理里的相变材料(PCM)仿真。

石蜡这类 PCM 的潜热大约 180-220 kJ/kg,比金属低一些,但相变区间往往比金属宽,所以等效热容峰不会那么尖,数值稳定性反而好。锂电池散热中常见的设计是在电池模组间隙填充石蜡/石墨复合 PCM,靠相变吸收脉冲热量。我在 COMSOL 里做的第一个电池热管理仿真,用的就是和铸件凝固几乎一模一样的代码结构:有效热容法加自然对流,只是相变点换成了 28-42°C 的温区。

区别在于,PCM 凝固过程中会有体积膨胀,密度变化更大,这时候 Boussinesq 近似可能需要换成弱可压缩流动;另外 PCM 的导热系数往往很低,只有 0.2-0.3 W/(m·K),所以要加高导热填料来补,材料的等效导热系数必须重测,不能指望纯石蜡的数据库值有多靠谱。

6.2 焊接与增材制造里的极端凝固条件

如果你想碰更极端的场景,焊接熔池和增材制造熔池是同一个体系里的“偏科生”。熔池尺寸小,冷却速度高达 10³-10⁶ K/s,温度梯度极大,温度回升现象可能非常短暂,如果时间步不够小,完全看不见。

这里有两个和前面完全不同的重点。一是热源模型,高斯热源或双椭球热源需要写成随时间和位置变化的体热源函数;二是熔池内的对流驱动机制不只是浮力,还有表面张力梯度驱动的马兰戈尼对流,后者在激光焊接里经常占据主导。

对于这类问题,我的建议是千万别一上来就开全物理场。先做纯导热等效热容模型,跑出熔池形状,再逐步加上流场和表面张力,每加一个物理场都重新验证一遍温度场。这个循序渐进的思路,在凝固这类强非线性问题上比任何高级求解器设置都管用。

6.3 案例库拆解与个人学习路径

COMSOL 自带的案例库和官网案例下载区其实是一个很被低估的学习资源。与凝固、相变相关的最直接案例有相变材料储热、材料熔化、铸造凝固等,你不需要照着抄,重点拆解它的“多物理场”节点是怎么装配的、材料属性里相变是怎么定义的、求解器的阻尼和步长是怎么设的。我每次接触一个新物理现象,第一件事都是去案例库找最接近的那个模型,把它从头到尾拆一遍,尤其是看“变量”和“表达式”页签里的写法,往往能发现很多官方文档里没写透的细节。

一个比较顺畅的学习路径是:先用流体传热接口把等效热容法的水结冰模型跑通;然后加层流做自然对流;再引入稀物质传递做溶质输运;最后加固体力学看热应力。每一步只改动一个物理场,其余保持不动。这样一旦出现发散,你可以立即定位到是新引入的那个物理场带来的问题。

现在我做任何凝固或相变课题,第一步永远不会变:先跑纯导热的等效热容模型,拿到固相分数随时间变化这条曲线,再往里面加流动、溶质和应力。这套流程看着不够炫,但它是所有复杂多物理场模型的地基。地基打稳,上面的大楼才不至于在第一次迭代时就塌成一片残差曲线。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询