先说结论:PFC 里没有"温度场"这个东西。它把每个颗粒当成一个热罐子(热储层),把每条接触当成一根导热管(热管道),热量只能沿着接触一根一根地传。传热的算法和传力是同一套——都是显式循环、都要算稳定时间步。
而热要变成力,只有一条路:改颗粒半径。
石头被浇冷水会裂,玻璃杯倒开水会炸。这类"热致裂"背后是同一个物理:材料想热胀冷缩,但被约束住了,只好把应力憋成裂纹。
这段时间我把 PFC 6.0 的热力耦合从文档到代码跑了一遍。下面分六段讲:它怎么表示热、怎么传热、传得准不准、热怎么变成力、怎么把材料拉裂,最后是三个必须记住的点。
常规有限元里,温度是场变量,单元上可以插值出任意一点的温度。
PFC 不是。PFC 是个颗粒集 合体,所以它的热学模型也建在颗粒上:
图1 同一堆颗粒的两种看法:(a) 力学视角,接触负责传力;(b) 热学视角,每个球是一个热罐子,每条接触是一根导热管。
这里有个容易忽略的推论:管道是跟着接触走的。接触没了(键断了、球分开了),管道也就没了——材料传热的能力会跟着损伤一起下降。
顺带一提:墙(wall)不参与导热,它只能当"定温边界"用。而颗粒集 合体的物理边界默认是绝热的,热量出不去。
每个热罐子的能量收支:
管道的导热量就是傅里叶定律的离散版:
然后照搬力学那一套:显式时间积分,从当前温度场算出每根管道的热流,再更新每个罐子的温度。
显式积分有个老规矩——时间步不能太大,否则温度会来回震荡。PFC 自动算的这个上限是:
跑起来会在日志里看到它自动选的时间步。
光说不练不行。我复现了官方验证算例:一块 2D 颗粒平板,10 行 × 40 列共 400 个球,立方排列。左端固定在 100 °C,右端固定在 0 °C,其余初始 0 °C,纯导热(关掉力学过程)。
跑了 20022 个热步,走完 2×10⁶ 秒的热时间。
图2 温度场随时间的演化。热量从左侧(100 °C)向右侧推进,7 个时刻各拍一张。t* 是用扩散时间归一化的无量纲时间。
可以看到热浪是怎么一层层推过去的。
关键是和解析解对:
图3 中间那排颗粒的温度剖面:圆圈是 PFC 算的,实线是解析级数解。七个时刻,每一个都严丝合缝。
图4 全 400 个球、所有时刻的偏差。最大偏差 0.049%,出现在扩散最早、梯度最陡的时刻;越往后越小。
这个精度说明 PFC 的热传导逻辑是对的。
这是整个热力耦合最核心的一步,也最简单:
温度变了,颗粒半径直接跟着变。球变大或变小,相邻球之间的重叠量就变了,接触力跟着变,应力就出来了。
如果接触上有平行键(linearpbond),还要再算一笔:键材料自己也会热胀,这会让键的长度发生变化,从而给键增加一个法向力。
图5 热变成力的完整链条。第三步是关键——改半径。
我做了个最小实验:三个球用平行键连成一串,两端的速度固定住(不许动),然后一步步升温。
球想膨胀,但两端被钉死,膨胀不出去,力就全压在键上。
图6 (a) 端部约束力随升温线性增长,从 10 kN 涨到 390 kN,然后在 ΔT = 13 °C 时突然掉到零——键断了。(b) 同一过程中颗粒半径严格按 α·ΔT 增长,实测点和理论线完全重合。
这就是热致裂的完整链条:升温 → 想膨胀 → 被约束 → 力越来越大 → 超过键强度 → 断。
真实岩石的"热冲击"也是这个道理,只不过约束来自材料内部——表面冷了要收缩,里面还热着不让它缩,表面就被拉开。
temperature 不产生热应变文档里写的是"每个球有一个温度增量",但没说清楚:驱动热膨胀的是 temperature-increment,不是 temperature。
我用两个球的实验验证过:
0.1010 / 0.1000 = 1 + 1e-4 × 100,正好是 α·ΔT。
好消息是:由传热过程自然产生的温度变化,会自动累积到这个增量里,机械耦合时自动生效。要小心的只有一种情况——用命令直接给一个温度跳变,那就必须同时把增量也设上。
lin_mode 必须设 0这条最坑。
平行键模型有个 lin_mode 参数,两支:
lin_mode 0:接触力由当前重叠量直接算。lin_mode 1(增量式):接触力从零开始,按两端球心的相对位移增量累积。问题就在这:热膨胀改的是半径,不是球心位置。在 lin_mode 1 下,半径变了但球心没动,程序认为"没有相对位移",于是——一点力都不产生。
而且它不报错。
症状很好认:ratio-average 精确报 0.0000e+00(正常收敛应该是个小的非零值),而几何上半径明明变了。
注意:这跟常规做法是冲突的。胶结颗粒试样成样后通常要切到 lin_mode 1 来清掉初始内应力——但那样热力耦合就失效了。做热力耦合就得留在 lin_mode 0,代价是初始预应力会保留。
同一块岩石里,热的扩散时间尺度和机械波传播时间尺度差了将近十个数量级。
这意味着两件事:
顺带一个实测观察:热学作为主进程时,model cycle 推进的是热循环,机械的循环计数一步都不动。要推动力学,得显式切换:
官方验证算例里用的也是这个写法。
诚实声明:本文的传热验证(图2–图4)复现自 PFC 官方验证算例;热膨胀的精度(图6b)和热致裂(图6a)来自我自己搭的最小实验;所有图和数据都是本机 PFC 6.0 实跑产出的。另外,我也尝试过在完整试样上做热冲击致裂,但随机成样的初始预应力太高,试样一升温就整体解体,没能拿到干净的裂纹场,这部分结论就用最小实验代替了。