☰
基于COMSOL的冻土路基水热力耦合模拟与冻胀变形分析
2026/10/20 9:42:34 网站建设 项目流程

冻土区修路,最头疼的不是地基本身强度,而是那个看不见摸不着的“冻胀”。路基一冻一融,路面就鼓包、开裂、翻浆,年年修年年坏。我们当时接了个多年冻土区的路基项目,为了验证块石路基方案的效果,我用COMSOL做了一轮水热力耦合及冻胀变形模拟,把温度场、水分场和应力场捏在一起算。整个过程踩了不少坑,也攒了一些经验,这里完整记录下来,希望能给正在折腾COMSOL做冻土模拟的朋友一些参考。

这个模拟解决的核心问题是什么?简单说就是预测块石路基在多年冻土环境下的温度状态和冻胀变形量,判断它能不能有效地保护下部冻土,同时评估路基自身的变形是否可控。内容适合三类人:搞冻土工程的设计人员、做岩土多物理场仿真的研究生、以及想了解COMSOL多物理场耦合建模思路的工程师。

1. 项目思路与物理机制:为什么块石路基要做水热力耦合模拟

1.1 块石路基的“热半导体”工作原理

先聊清楚块石路基是干什么的。多年冻土区修路基,最大忌讳是扰动底下冻土的热平衡。普通路基填土吸热,会把热量传下去,导致冻土层上限下移,路基跟着融沉。块石路基的思路特别巧妙:在路基中铺一层大孔隙的块石层,冬季冷空气密度大,下沉进入块石层,而暖空气密度小被挤上去,形成持续的自然对流,把大量“冷量”带入路基底部;夏季则相反,块石层内部空气稳定,基本不流动,外部热量很难传下去。这个单向导冷、抑热的特性,被形象地叫作“热半导体效应”。

COMSOL建模选块石层做核心模拟对象,就是因为它的孔隙结构带来的对流换热没法用纯导热近似,得把“自然对流”因素放进去。真实工程中块石层往往铺在路基中部或底部,厚度约1米到1.5米,粒径大概20到40厘米,孔隙率能到0.3到0.4。这些参数直接决定对流强度,建模时必须如实输入。

1.2 水-热-力三场耦合的因果链拆解

冻胀不是单一因素造成的,而是水、热、力三场相互纠缠的结果。我们的模拟要把这条因果链完整复现出来:

温度场是驱动力。气温降到零下,路基内部温度梯度建立起来,冻结锋面自上而下推进。温度变化决定了哪里有冰、哪里没冰。

水分场是物质基础。土体中的孔隙水在负温下部分结冰,未冻水含量随温度变化;更关键的是,温度梯度会驱动水分向冻结锋面迁移,水过来以后结冰,冰晶体积膨胀9%左右,这是冻胀的直接来源。

应力场是结果。冰晶生长产生冻胀力,路基表面因此发生竖向位移。反过来,应力和变形对温度和水分的影响很小,工程尺度上一般忽略,做“单向强耦合”就够用。

这个因果链的模拟关键在于:不能把三场分开算再硬叠结果,因为水分迁移依赖温度,相变潜热又反过来影响温度分布,得真正在同一个模型里同步求解。

1.3 COMSOL里的耦合思路:选模块与搭桥

在COMSOL中实现这套耦合,我选了三个物理场接口:固体传热管温度、达西定律管水分、固体力学管变形。核心难点是“搭桥”,也就是多物理场耦合节点的配置。

COMSOL 5.x以上的版本支持多物理场耦合节点,我们可以添加温度-达西耦合、温度-固体力学膨胀耦合。但冻胀这种特殊问题,自带的耦合节点没有现成的“冻胀”选项,需要自己在固体力学子节点里写表达式,把温度场的结果转成附加应变。这一步是整个模拟最有技术含量的地方,后面第3章详细展开。

2. COMSOL模型搭建:几何、材料与边界条件

2.1 几何模型简化:二维断面怎么画

三维模型计算量太大,而且冻胀变形沿路基横断面方向变化最大,纵断面方向上差异小,所以用二维平面应变模型最划算。几何上取一个标准路基横断面:路基顶面宽度约10米,边坡坡率1比1.5,路基高度4米左右,其中块石层放在路基中下部,厚度1.2米。下部地基计算深度取25米,保证底部边界条件对冻土层影响足够远。

这里有个建模细节值得说:块石层与周围填土的接触面要单独画出来,因为两者热学参数差异大,网格需要在这里加密,接触面不建出来后面网格没法控制。

2.2 材料参数:块石层、路基填料与地基土

材料参数是整个模型的基础,我整理了一张参数表,是多次试算后沉淀下来的取值。温度和水分相关的参数用表达式输入,不能用常数。

材料导热系数 W/(m·K)体积热容 MJ/(m³·K)渗透系数 m/s孔隙率
块石层0.4(等效)1.81e-20.35
路基填土(砂砾)1.4(未冻)/ 1.8(冻)2.21e-50.30
地基土(粉质黏土)1.2(未冻)/ 1.6(冻)2.51e-80.35
块石层内空气0.0240.0012--

这里块石层的导热系数0.4确实看着比土小,因为块石层以颗粒接触传热为主,接触点少,加上内部大量空气,等效导热系数就是低。渗透系数很大,实际流动可能不完全符合达西定律,但工程简化下用等效渗透系数也能接受,后面可以讨论非达西修正。

2.3 关键参数:未冻水含量与相变潜热

冻土模拟里最难缠的两个参数是未冻水含量曲线和相变潜热。未冻水含量表示温度降到负温后,土中到底还有多少液态水,它是温度的函数。我用的经验公式是:

θ_u(T) = θ_r + (θ_sat - θ_r) · exp(-α·|ΔT|)

其中θ_sat是饱和体积含水量,θ_r是残余未冻水含量(约0.02到0.05),α是拟合参数,取值0.3到0.8,具体看土质。ΔT是当前温度与冻结温度之差(冻结温度取-0.1°C,考虑了溶质影响)。

相变潜热的处理更讲究。水结冰释放334 kJ/kg潜热,这个热量比显热大得多,要是不处理,温度场会算得明显偏暖。我用的是等效热容法:把潜热折算进比热容里,让比热容在相变温度区间内出现一个高峰。公式是:

C_eq(T) = C_app + L_f · ρ_i · dθ_i/dT

其中L_f是水的凝结潜热,ρ_i是冰的密度,θ_i是体积含冰量,等于总含水量减去未冻水含量。dθ_i/dT在0°C附近是一个尖峰,我用一个宽度约1°C的高斯函数来近似它。

2.4 边界条件与初始条件:让模型活起来

边界条件设置是决定模拟成败的关键,我把条件分成了四组:

热边界条件。表面用第三类边界条件,加对流换热系数15到20 W/(m²·K),因为路基表面直接接触空气,换热不能简单认为等于气温。气温用年正弦波动函数:T_air = -3.5 + 15·sin(2π·t - π/2) 单位°C,代表年均气温-3.5°C、年较差15°C的高海拔冻土区气候。底部是地热通量边界,取0.06 W/m²,表示地球内部向上传热。

水分边界条件。顶部考虑降水和蒸发,简化为定流量边界;两侧和底部设为默认无流动边界。这里要说明,我们的模型主要关注冻融循环引起的内部水分重分布,地表入渗做简化处理问题不大。

力学边界条件。地基底部固定,两侧水平约束,路基顶面自由,允许竖向变形。

初始条件。温度初始场很关键,我先把模型跑了一个“空转”周期(不做冻胀计算),让温度场充分演化到周期性稳定,再将最终时刻的结果作为正式计算的初始场。这个方法能大大减少非物理的瞬态振荡。

3. 多物理场耦合的关键实现方法

3.1 水分场建模:达西定律还是理查兹方程

水分场接口我纠结过一段时间:达西定律适合饱和渗流,理查兹方程适合非饱和渗流。冻土里的水分迁移既有非饱和特性,又有冻结引起的“抽吸”效应,严格来说理查兹方程更贴切。但理查兹方程高度非线性,收敛非常困难。对于工程评估项目,我最终选择了达西定律,配合渗透系数随温度变化来近似冻结阻滞效应。如果目标是做精细研究,建议在达西定律模块基础上增加非饱和修正,或者直接上理查兹方程并做好充分的网格加密和求解器调参。

渗透系数的温度修正是必须的。当土体温度低于冻结温度后,孔隙冰堵塞渗流通道,渗透系数会急剧下降几个数量级。我用的表达式是:

k(T) = k_sat · 10^(-β_w·|ΔT|)

其中β_w取2到4,意味着温度每降低1°C,渗透系数下降一到两个量级。这个修正对水分向冻结锋面的持续迁移有决定性影响,不能省。

3.2 相变潜热在COMSOL中的实现

等效热容法在COMSOL里实现起来不算复杂,但细节多。在固体传热模块中,把“恒压热容”从常数改成表达式,输入等效热容函数。我建议用解析函数或插值函数来定义热容曲线,不要直接用if语句判断,因为if语句在瞬态求解时容易造成雅可比矩阵不连续。

我的做法是定义两个解析函数:一个描述未冻水含量θ_u(T),另一个描述其导数dθ_u/dT。然后用表达式:

C_eq = C_soil + L_f · ρ_i · (-dθ_u/dT)

注意单位统一:体积热容是J/(m³·K),潜热项L_f·ρ_i·(dθ_u/dT)的单位也是J/(m³·K),匹配起来没问题。这个表达式中dθ_u/dT是负数(温度越低未冻水越少),所以前面加负号得正值。COMSOL的变量名是ht.Cp,在材料属性里直接输入这段表达式就行。

3.3 冻胀应变的施加方式

这是整个模拟最核心、也最需要手工操作的部分。COMSOL里没有现成的“冻胀”模块,需要用固体力学模块的“热膨胀”子节点改名换功能。但关键点不是“热膨胀”,而是膨胀应变表达式的定义。

冻胀的本构关系是高含冰土在冻结过程中的体积增大。工程简化中,我把冻胀应变定义为未冻水含量变化的函数:

ε_frost = β_lin · [(θ_u(T_0) - θ_u(T)) / θ_sat]

其中β_lin是冻胀系数,我取0.05到0.15之间做参数研究。这个表达式的物理含义很直观:温度降到冻结温度以下后,未冻水减少多少,就对应产生了多少体积膨胀,而且膨胀量被饱和含水量归一化。当温度高于冻结温度时,θ_u(T)=θ_u(T_0),应变自动归零,不需要if判断。

在COMSOL操作上,具体这样实现:

  1. 在“固体力学-线弹性材料”下添加“热膨胀”子节点(默认名是热膨胀,但它只是一个通用膨胀接口)。
  2. 将“膨胀应变”类型从“用户定义”改为“各向同性”,在“各向同性膨胀应变”输入框填入表达式。
  3. 表达式直接引用固体传热模块的温度变量 temp,前提是多物理场中建立了T的耦合。

C表达式:β_lin * (theta_u0 - theta_u(temp)) / theta_sat

其中theta_u0是初始未冻水含量(等于θ_sat),在温度未低于冻结温度时,差值也为零,所以不需要显式判断。

3.4 网格与求解器:收敛和效率的平衡

网格策略上,我做了一个尝试:全局用自由三角形网格,块石层和地表以下2米深度内加密到0.2米,深层逐渐过渡到1米以下。这个密度既能捕获温度梯度和冻胀应变集中区域,又不至于让计算卡死。二维模型的单元数大概在三到四万个,每一年的瞬态计算大约需要几个小时。

求解器是最容易踩坑的地方。我强烈建议用分离式求解器而不是全耦合求解器。全耦合在强非线性问题里很难收敛,而且每一步都做全套牛顿迭代,计算量太大。分离式求解的思路是:每个时间步内先求解热-流耦合方程组,再求解固体力学方程组,迭代整体解直到收敛。COMSOL的“物理场”接口里顺序可以自由编排,我把它们设成:

时间步进:BDF,最大阶数2,初始步长0.01天,最大步长10天。一年按360天算,大概能跑出36个输出结果,足够看季节演化了。我自己还加了一个技巧:前一个月用0.05天的小步长起步,让模型跨过初始振荡期,之后再放开步长限制,对收敛性好非常多。

4. 求解设置与结果后处理:从云图到冻胀量

4.1 温度场结果:0°C等温线怎么读

跑完十到二十个模拟年后,温度场达到准稳态,这时候可以导出一组关键图:冬季末期和夏季末期的温度云图。经过块石层作用,路基中心下方的0°C等温线位置是核心指标。

我的实测结果:有块石层方案的路基中心0°C等温线深度比普通填土路基浅了接近2米。这个数让我挺惊喜的,说明块石层的自然对流确实把大量冷量带到了路基底部,冻结深度明显增加。这个深度差是评估块石路基保护效果的最直接参数,写进报告里最有说服力。

4.2 水分场结果:冻结锋面处的含水量集中

水分迁移的结果在含水率云图上表现得非常清楚。冻结期,路基顶部和块石层上缘出现了一个含水量增高的条带,这正是水分向冻结锋面迁移的证据。土体中未冻水含量降低后,渗透系数骤减,迁移速率也跟着降下来,所以这个富水带并不是无限增厚,而是一个宽度有限的条带。

这个条带的宽度和强度直接影响冻胀量。我用截线功能画了一条沿路基中心线竖向的含水量分布曲线,看到在冻结锋面附近含水量从0.3升到了0.36左右,这个增量对应的冻胀贡献不小。如果模型里不设置渗透系数的温度修正,含水量分布曲线就是一条平滑线,完全看不到锋面集中的现象,那时候的冻胀量会偏小,模型就和物理事实脱节了。

4.3 冻胀变形提取:竖向位移云图与路基表面曲线

竖向位移云图是这个模拟最有看头的输出。冬季路基表面向上位移,最大冻胀位置出现在路肩附近而不是路中心,因为路肩下方土层薄、热容量小、冻结更快。表面位移曲线最好用“一维截线”功能沿着路基顶面提取,输出一条距离-位移曲线,直接能看到冻胀不均匀度。

模拟给出的最大冻胀量约为4到6厘米,这个数量级和同类工程实测范围对得上。冻胀不均匀度是更值得关注的指标—路中心冻胀3厘米、路肩冻胀5厘米,这个差异会让路面产生约2厘米的不均匀变形,对行车舒适性影响很大。

4.4 参数对比研究:块石层厚度与孔隙率的影响

模型跑通之后,可以做几组参数对比,这也是项目报告的亮点:块石层厚度从0.8米增到1.5米,路基中心下部温度降低约1.2°C,0°C等温线继续上移,但超过1.2米后增益趋缓,“边际效应”明显。孔隙率从0.3调到0.4,对流强度显著增强,但热阻减小,两者的最优平衡点在0.33到0.38之间。

这些结论可以给设计方提供具体的参数建议。一组参数扫描跑下来,我在报告里给出结论:“厚度1.2米、孔隙率0.35”是经济性和热稳定性的平衡点,然后配上曲线图和数据表,说服力很强。

5. 踩坑记录:常见问题与调试经验

5.1 不收敛问题:先看材料参数,再查网格和时间步

我在这个项目里遇到的最频繁问题是求解器不收敛。第一次跑的时候,每算几步就报“找不到解,最大的牛顿迭代次数达到”。

排查路径其实有章可循。先检查相变潜热函数在0°C附近的连续性和光滑性—如果dθ_u/dT是阶跃状的,雅可比矩阵会跳变,神仙难救。我改用高斯形状的导数曲线后,收敛性马上好了很多。再检查材料参数的量级,特别是渗透系数,在达西定律里,k = 1e-8 m/s的黏土和k = 1e-2 m/s的块石层跨越了6个数量级,这种参数极端差异很容易导致条件数爆炸。我的解决办法是:给地下土区域单独指定初始值,并开启“缩放”选项。时间步长也一样,相变期不能用大步长,超过5天必然振荡。

5.2 温度振荡与冻结锋面跳变:潜热处理的细节功夫

算完初始温度场之后,我把结果贴进正式模型,结果温度云图上一片斑驳,像花屏一样。根源是:初始温度场是从“不含潜热”的模型里拿来的,而正式模型含相变潜热,两者的能量状态不匹配,一启动就剧烈振荡。

解决方式很朴素:把初始场也用含潜热的模型再跑一遍稳态,确保一致。这是很多人容易忽略的坑。另外,冻结锋面附近的温度振荡往往是因为等效热容的尖峰太窄,温度区间只有0.2°C导致数值积分容易跳过尖峰。把它放宽到0.5到1°C,振荡就平稳了。

5.3 冻胀量异常:标定β_lin的经验心得

第一次跑出来的冻胀量只有1厘米多一点,工程师直接说“这个数我们不敢用”。问题在于我的β_lin取小了,而且没有考虑水分迁移补给的额外水量。

后来我按两步走:先只算热-水耦合模型,提取冻结锋面处的含水量增量Δθ;再把Δθ代入冻胀应变公式里,作为迁移贡献项。修正后冻胀量对上了实测范围。这里建议不要只依赖经验值,应该找一个当地类似土质的实测冻胀量数据来反算β_lin,校准之后再上正式计算。

5.4 计算时间过长:三维模型与二维模型的取舍

一开始我也试过建三维模型,想看看纵向上的变形差异,跑了三天没出结果,直接放弃了。二维模型跑一年只需要几小时,性价比完全不在一个量级。如果确实需要三维效果,也建议先在二维模型上调通所有参数和边界条件,再扩展,不然调试周期会拖死人。

5.5 一个被我忽略的细节:重力方向的设置

听起来很傻,但我确实在前期模型里忘记设置重力方向,导致达西定律里的压力水头分布完全错误,水分向冻结锋面的迁移方向整个反了。COMSOL的达西定律默认不是自动加重力,需要检查“重力”复选框,确认y方向加速度为-9.81 m/s²。这个小地方花费了我一天排查时间。

6. 实操总结

这套COMSOL模型跑下来,我个人操作中的体会是:冻土水热力耦合模拟的难点不在软件操作,而在物理机制的工程简化。把真实的冻胀过程压缩成一组可以用解析表达式描述的数学关系,每一步都在“保物理真实”和“让求解器能算”之间反复权衡。

最后再分享一个小技巧:调试阶段一定要把瞬态研究改成“辅助扫描+稳态求解”,用多个气温水平做稳态扫描,能快速定位模型在哪个温度段容易崩,比直接跑瞬态排查效率高十倍。这个做法帮我省下了大量试错时间,强烈推荐你也试试。

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

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

立即咨询