☰
Comsol中粗糙单裂隙流-热耦合模拟:从模型构建到边界条件设置
2026/10/10 7:45:32 网站建设 项目流程

做地热开采、地下储热这类数值模拟时,裂隙岩体里的“流-热耦合”是绕不开的课题。而单裂隙作为裂隙岩体最基础的骨架单元,经常被简化成平行板模型,但真实岩体里几乎没有绝对光滑的裂隙面,粗糙起伏对流场和温度场的影响,在Comsol里如果处理不当,后续边界条件设多准都白搭。这篇内容我就直接按实操路径来讲:从粗糙单裂隙渗流传热耦合模型的几何构建、控制方程选择,到边界条件一项项设对、网格和求解器收敛调试,把我在Comsol里踩过的坑和验证过的做法一次说清楚。适合正在搭类似模型、又不想在边界条件上反复试错的研究生和工程师参考。

1. 粗糙单裂隙比多孔介质模型难粘的原因:流场和温度场其实是互相“较劲”的

1.1 裂隙里的流场根本不是你想象的那种均匀流动

很多做过多孔介质达西模拟的人,上手单裂隙时容易犯同一个错误:把裂隙当成一维或者等效多孔通道,给个渗透率系数就开跑。真实裂隙不一样。粗糙凸起会在毫米级开度范围内形成局部缩颈和扩张区域,流体在凸起位置被迫加速,在扩张区可能形成低速回流。这种局部流速重分布用等效渗透率一平均就全丢失了。

在我的模型里,裂隙开度取 1 mm 量级,裂隙长度做到 10 m 左右,同等压差下,粗糙裂隙的实际流量和按平行板等效开度算出来的流量可能差出 30% 以上。这不是“雕花”的精细度问题,而是直接影响裂隙中热对流换热的强度——因为局部流速高的区域,对流传热也强,温度场分布跟着完全不一样。

1.2 温度反过来改变流场:这才是“耦合”的真正含义

耦合最容易被忽略的地方,是温度场对流场的反馈。我们做地热模拟时,注入井的冷水通常低于围岩温度,裂隙流道里流体被岩石加热,粘度在几十度的温差范围内变化非常剧烈。水在20°C时动力粘度大约是 1.0×10⁻³ Pa·s,到了60°C就降到约 0.47×10⁻³ Pa·s,直接腰斩。如果模型里把水的密度、粘度设成常数,等于直接把耦合砍掉一半,算出来的流速场在高温区会偏大,换热效果被高估。

另外,如果温度梯度足够大,密度差会诱发自然对流。判断标准可以看格拉晓夫数,Gr 超过临界值后自然对流贡献不能忽略。我在做回灌过程模拟时,入口水温 20°C、围岩温度 80°C,这种情况下把密度设成常数会明显低估近壁处的流动扰动。

1.3 哪些场景必须做粗糙单裂隙模型

这里想明确一下模型的适用范围,免得有人拿它去算不合适的工况:

  • 地热对井系统其中一条主导裂隙的流-热分析,需要知道粗糙突变对热突破时间的影响;
  • 核废料处置库围岩中裂隙泄漏通道的安全评估,局部流速直接影响放射性核素输运;
  • 季节性储热系统里裂隙换热器的效率分析;
  • 二氧化碳封存中裂隙作为泄漏通道的评估。

如果问题本身更关心区域尺度的等效裂隙网络,那么统计平均化的等效多孔介质或者离散裂隙网络模型(DFN)更合适,不太需要纠结单裂隙内部的粗糙度细节。但如果关心的是“某一裂隙里的温度怎么分层、出口温度随时间怎么变化”,粗糙单裂隙模型就是最合适的简化单元。

2. 粗糙缝面几何构建:从实测轮廓到Comsol可计算域

2.1 粗糙度的两种来源:实测轮廓数据和随机粗糙面

构建几何之前先要回答一个问题:粗糙面数据从哪来。通常就两条路径。

第一是实测轮廓线。野外采集裂隙面轮廓高程点,或者实验室用三维激光扫描仪打出来的点云数据。对于二维模型,把断面线导成两列数据(x坐标,z坐标),在Comsol里用“插值曲线”功能或者直接生成数据点样条即可。对于三维模型,实测数据通常要整理成规则网格的高度场(比如每1 mm一个点),再导入Comsol作为“参数化曲面”的z坐标来源。

第二是随机粗糙面生成。没有实测数据时,常用谱密度法或逐级随机叠加法。最简单的做法是用一组余弦波叠加,公式是:

z(x) = Σᵢ Aᵢ·cos(2πx/λᵢ + φᵢ)

其中 Aᵢ 是第 i 个谐波振幅,λᵢ 是对应的空间波长,φᵢ 是随机相位。波长从裂隙长度量级(m级)取到接触区尺寸量级(mm级),振幅按谱密度递减。我在Comsol中通常生成5~7个频率分量,叠加后归一化到目标起伏度。

2.2 Comsol几何构建的具体操作:二维和三维的差别

二维模型我会把裂隙上下边界都建成波浪线,上下各保留 1~3 m 厚的“岩石基质”区域,中间裂隙开度区域按上下粗糙面的差值生成域。步骤上推荐先做两条粗糙曲线(或一条曲线+沿法向偏移开度),再用“由曲线生成面”的布尔操作把中间夹层提取出来。这个夹层就是裂隙域。

三维模型类似,用上下两个粗糙曲面,中间夹出一个复杂薄层。粗糙曲面建议先做平滑处理——噪声滤掉的窗口大小取三倍网格最小尺寸,否则后面网格质量会很差,局部单元会快速退化。

我自己比较喜欢先用二维模型把物理和边界条件全部验证完,再升级到三维。二维模型能快速暴露边界条件设置的错误,迭代效率高很多。三维模型算得慢,但可以更真实地体现粗糙度的空间各向异性。

2.3 粗糙度参数落实到模型里时的几个换算提醒

工程上常说JRC(节理粗糙度系数),范围是0~20。换算到具体几何有一点需要注意:JRC反映的是剖面线的粗糙特性,而Comsol几何需要的是垂直于流线方向的实际起伏高度。通常做法是给裂隙面按一定的起伏标准差,比如0.05~0.3 mm,对应欠光滑到明显粗糙的裂隙壁面。

另一个工程参数是“等效水力开度”,它往往小于实际力学开度。原因很简单:粗糙凸起相当于占了流道截面,而且接触区可能直接堵掉部分流场。模型里如果把力学开度直接当水力开度用,流量会算偏高。所以几何开度、粗糙度幅值、入口压差三者要一起标定,最终以流量或压降实测数据作为校准目标。

3. 控制方程与物理场选择:先决定用哪个“流”,再谈温度怎么耦合

3.1 粗糙裂隙里的流动方程:达西?Brinkman?还是NS?

很多教程一上来就让你在Comsol里选“达西定律接口”,因为地下水流模块里它最常用。但对粗糙单裂隙,达西定律有两个硬伤:第一,它把裂隙沿开度方向的流速剖面平均成了一个线性阻力关系,粗糙凸起引起的局部加速和回流完全体现不出来;第二,达西定律假设惯性项可忽略,但粗糙裂隙中流速只要稍高,就会进入Forchheimer非线性区——压降和流量不再是线性关系。

我的建议是:二维单裂隙模型优先用 Brinkman 方程接口,它介于达西和完整NS之间,既保留粘性剪切项,又能描述粗糙壁面附近较真实的流速分布。如果流动本身很慢、雷诺数远小于1,而且你只关心整条裂隙的流量和出口平均温度,用“达西定律+裂隙宽度”接口也能得到一个够用的结果。由于Comsol 6.x里传热模块对裂隙有专门的特征支持,这种方式建模最快。

判断流态有个快速办法:用雷诺数 Re = ρu b/μ 粗估,其中 u 是裂隙平均流速,b 是裂隙开度。开度 1 mm、流速 1 cm/s 时,水的雷诺数大约10,已经接近或超过层流中的惯性依赖区。再往上走,惯性项和粗糙凸起绕流的影响会显著增强,这时还是用完整的“单相流>不可压缩流动”接口更稳,虽然计算成本高一些。

3.2 温度场模型:局部热平衡还是非热平衡?

单裂隙的换热过程有几个明显的时间尺度和空间尺度差异:岩石基质的热传导很慢,热扩散系数通常在 10⁻⁶~10⁻⁷ m²/s 量级,而裂隙里的对流快很多。这造成裂隙壁面流体温度和岩石内部温度存在明显差异,所以严格来说应使用非局部热平衡框架(LTNE),即流体和固体温度各自独立求解,通过换热系数在壁面交换热量。

Comsol里的做法很直接:传热模块选“固体和流体传热”接口,裂隙域用流体属性,岩石域用固体属性,裂隙壁面处用“热接触”特征把两侧连接起来,设置局部换热系数。如果不关心壁面附近的温度细节,只想要整体出口温度,也可以把岩石和流体设为同一个温度场,即局部热平衡(LTE),精度对于长时间尺度的热存储模拟通常够用。

记住一个原则:岩石温度响应慢、流体温度变化快,两者时间常数差几个数量级,LTE模型会在瞬态早期阶段给出偏乐观的换热速率。所以做瞬态且关心温度前沿到达时间时,尽量用LTNE。

3.3 耦合的最终落点:物性随温度变化 + 对流换热源项

耦合在Comsol里其实是通过“依赖关系”实现的,不需要自己写复杂的源项代码。两条链路必须同时激活:

  • 流体域的材料属性里,把密度、粘度、比热、导热系数都设为温度的函数。这里我常用Comsol材料库里的水,但要注意材料库模型在超临界或高温高压工况下不一定正确,需要对照IAPWS数据表核对。粘度曲线建议用插值函数表,不要用多项式外推。
  • 传热接口中自动包含流速对热量的对流输运项,即 ρc_p u·∇T 会自动出现。而流速源的改变会通过连续性方程影响压力场,再影响速度场,形成一个闭环。

如果做稳态解,这种双向耦合会让模型变为非线性,求解器迭代就要注意稳定性。如果只做单向耦合——岩石温度恒定、流体温度被动变化——那模型会简单很多,但此时你必须自己确认物理过程真的可以这样简化。以我的经验,地热储层中温差超过20°C,单向耦合的误差就不容忽视了。

4. 边界条件逐项配置:设错一项,后边全白算

4.1 裂隙入口:速度入口还是压力入口?温度条件别忘

入口边界是我第一个严格检查的地方。两种入口方式对应完全不同的物理设定:

  • 压力入口(给定入口压力,出口压力设为零):适合模拟自然渗流或由水头差驱动的流动。这种设定下,粗糙度对“等效渗透率”的影响会直接体现在流量上,是研究粗糙度对渗流能力影响的首选。
  • 速度入口(给定入口平均流速):适合模拟人工注水/回灌工况,因为工程上我们通常知道流量,不知道裂隙入口的精确压力。此时粗糙度的影响主要体现在入口局部压降上。

无论哪种入口,流体温度条件都很容易忘。入口处通常直接给定注入水温度,比如 20°C,这是对流入口边界。在Comsol的传热接口里,入口边界会自动使用“对流”类型的流入温度条件,但只有当速度场是从入口流出的方向才是合理,流速方向搞反会导致温度边界无效。

我习惯在入口处加一段“入口缓冲段”,长度取裂隙开度的50倍左右,让速度从均匀分布逐渐发展成裂隙流道实际的速度形态,这样入口边界造成的局部扰动不会影响目标区域的温度场。

4.2 裂隙出口:压力出口的“回流”问题

出口最容易翻车的地方是回流。粗糙裂隙里局部回流很常见,尤其当出口位置距离粗糙区太近时,出口边界会出现部分回流。如果出口直接设“压力,无粘滞应力”,回流区的速度方向、温度输运都会被边界强行拉平,导致出口温度计算失真。

解决方案很简单:出口下游加一段“出口缓冲段”,长度同样是开度几十倍以上;如果模型实在紧凑,也可以在出口边界加“抑制回流”选项。判断有没有回流影响,可以通过后处理看出口边界的法向速度是否全部朝外,只要有一小段反向,就说明出口缓冲不够。

4.3 岩石基质上下边界:绝热、定温还是对流换热

这部分边界不直接接触流体,却决定岩石能给流体提供多少热量。绝大多数第一次搭模型的人在这块会翻车,默认选“绝热”,算出来的出口温度会被人为抬高很多,因为岩石被加热到极限。

三类边界的适用范围我来分开讲:

  • 绝热边界:适合模拟岩体无限厚、对称面上的情况,也可以作为极端保守方案,用来估计换热的理论最大上限。
  • 固定温度边界:适合模拟深部裂隙,围岩足够厚,远处温度恒定。比如模拟2000 m深处的干热岩裂隙,上下边界固定为围岩温度120°C。注意基质厚度要足够大,让距离裂隙面最近的固定温度边界不会成为热源提供者,否则裂隙流体还没流多远就被烘透了。我之前做基质厚度敏感性分析,取 5 m 的基质厚度后,厚度增加对出口温度影响小于0.5%,说明厚度足够。
  • 热流密度边界:模拟地表附近或地温梯度已知的场景。地热梯度常见 30°C/km,换算成热流密度大约 60~80 mW/m²。这种边界适合反映真实地球物理背景,但需要配合较大的基质计算域。

如果几何里上下基质取了 2 m 以上,而你的目标是让裂隙测量段不受边界影响,就先用绝热或固定温度分别跑一次,看结果差异。如果差异巨大,说明基质厚度不够,不要急着加网格,先把域加大。

4.4 侧壁边界与对称边界的选择

沿裂隙走向垂直于流动方向的侧面,通常可以设对称边界。对称边界相当于绝热加零法向速度,本质上模拟的是无限宽裂隙的中间截面。但它隐含一个假设:裂隙两侧的温度场和流场分布是对称的。入口速度分布如果不均匀,对称边界就不成立。

另一种思路是周期边界,适用于裂隙形态沿流向周期重复的粗糙面模型。但周期边界需要入口面和出口面的几何完全一致、粗糙面也必须周期性重复,实际建模中比较苛刻。我自己几乎不用周期边界做单裂隙,因为粗粗糙面数据往往不满足严格周期条件,硬做容易在边界处引入额外阻力。

4.5 初始条件的设定经验

瞬态计算时初始条件不能瞎设。我建议先把稳态流场单独解出来,得到不含温度影响的压力场和速度场,再用这个解作为瞬态耦合模型的初值。顺序是:先算“单纯流场”,再打开“传热”,或者分两步跑,否则一开始就强耦合,粗糙裂隙几何本身非线性就强,很容易发散。

如果做长期热开采模拟,初始温度场通常按地温梯度线性分布或者设为围岩恒定温度。一定要避免初始温度与边界温度不匹配的瞬间突变,那是很多瞬态模型早期振荡的根源。

5. 网格划分与求解器调试:不收敛就从这四个方向排查

5.1 粗糙缝面的网格策略:边界层是命根子

裂隙开度只有毫米级,而裂隙长度可能到十米,纵横比差四个数量级。这种情况下网格的宽高比控制非常重要。

我的做法是:裂隙域沿开度方向至少划分5层网格,优先用边界层网格,让壁面附近的单元加密。粗糙峰顶和峰谷位置还要局部加密,最小单元尺寸取粗糙度特征波长(比如相邻凸起间距)的1/10~1/20。岩石基质域可以用较粗的网格,再通过界面连续性自动耦合。

特别提醒:不要为了节省单元数把裂隙缩成一条线再用“裂隙特征”。只要想看到粗糙度对流场的局部影响,就必须保留开度方向的几何厚度。用“零厚度裂隙”等效建模,虽然省事,但粗糙度的局部效应彻底丢失,耦合温度分布的精细度也会下降。

5.2 网格无关性验证:结果随着网格剧烈变化,先查边界而不是无限加密

网格无关性验证很简单:把最大网格尺寸减半再算一次,看关键输出量(比如出口平均温度、总流量)变化是否小于1%。如果加密后结果还在明显变化,需要判断方向:如果流量变化大,重点检查入口出口边界;如果温度变化大,重点检查基质厚度和壁面换热系数。

我的经验是:90%的“加密后结果大幅度变化”问题都出在边界条件没有收敛到物理真实解,而不是网格不够细。比如入口缓冲段太短,加密网格只会让不真实的入口效应更突出。所以先确认边界条件物理上合理,再谈网格无关性。

5.3 稳态还是瞬态?求解器用分离式还是全耦合?

粗糙裂隙模型的非线性主要来自两方面:粘度的温度依赖,以及粗糙几何带来的局部流速突变。这两者叠加后,全耦合求解器(Fully Coupled)经常振荡不收敛。我在跑这种模型时,优先选用分离式(Segregated)求解器,把流场和温度场分开迭代,每一步内只求解一组变量,稳定性好很多。代价是迭代次数多、速度慢,但在粗糙裂隙这种强非线性问题上,稳定比速度重要。

瞬态计算的时间步长建议用自适应。刚开始的几步用 0.1 s 量级,让温度前沿从入口逐步进入裂隙,之后自动放宽到几十秒。如果一开始就用大时间步长,入口处的温度突变会被强行平滑掉,造成温度前沿失真。

求解器收敛判断上,相对容差可以从1e-3开始,如果不收敛再调整阻尼因子。很多初学者一上来就设1e-6,结果怎么算都发散,实际上是初始扰动太大。

5.4 参数扫描:用批量计算快速摸清模型规律

模型跑通后,参数扫描是性价比最高的步骤。在“辅助扫描”里可以选择几何尺寸(裂隙开度)、入口流速、粗糙度幅值、入口温度等参数作为扫描维度。Comsol支持单个参数多值扫描或者双参数正交扫描。我自己常用双参数扫描来查看“入口流速-粗糙度幅值”对出口温度的影响,一张结果图就能看出换热的主导机制切换。

要说明的是,扫描计算量大,一定要先用粗网格跑一遍全参数空间,确定各参数影响的大趋势,再挑出关键区域加密网格精确计算。盲目在细网格上做大规模扫描,时间成本吃不消。

6. 模型验证与参数敏感性:粗糙度到底让出口温度变高还是变矮

6.1 退化成平行板模型:验证建模对不对的试金石

粗糙单裂隙模型正式使用前,必须先做退化验证。把粗糙面的起伏幅值设为0(或一个极小值),让裂隙退化为平行板。平行板模型有几个现成的理论解:

  • 流速剖面呈抛物线分布,平均速度 u_avg = -(b²/(12μ))·dp/dx;
  • 压降与流量呈线性关系,即泊肃叶型关系;
  • 在给定壁面温度和入口温度条件下,沿裂隙的温度分布可以近似用一维对流换热方程校验。

我用这个退化模型检验过自己的Comsol设置,把平均流速、出口温度和计算压降分别与理论值对比,误差在3%以内,说明方程、边界和材料物性设置基本无误。然后才把粗糙度幅值一点一点加上去。这个“从简到繁”的过程看着慢,实际上是最省时间的排查路径。

6.2 粗糙度对出口温度并不是单调影响:一个容易被误解的结论

很多人直觉认为“粗糙度越大,换热越强,出口温度越高”,但单裂隙里其实存在两个相互竞争的因素:

  • 粗糙度增大 → 流道的等效水力开度减小 → 流量降低 → 流体在裂隙里停留时间变长 → 出口温度升高;
  • 粗糙度增大 → 局部回流和二次流增强 → 壁面附近对流换热系数增大 → 出口温度在高低速区更容易均匀化。

两个因素的方向并不总是一致。实际计算中可能出现:在小流量条件下,粗糙度增大导致出口温度升高;在大流量条件下,粗糙度增大反而让出口温度略有下降,因为流量降低对换热时间的贡献被更强的近壁扰动抵消了。这个结论提醒我们,参数敏感性分析不能只做单点,要在流动-换热主导机制切换的区间内观察变化趋势。

6.3 流速和入口温度的影响:热突破时间怎么估

做地热回灌模拟时最关心的指标之一是热突破时间,也就是生产井侧水温开始明显下降的时刻。在实际建模前可以先用一个简单的集总参数估算来预判数量级:

t ≈ (ρ_r c_p,r V) / (ρ_f c_p,f Q)

其中 V 是参与储热的岩体等效体积,Q 是流量。这个公式把岩石当作一个发热水槽,流体流过时带走热量。用它估算出来的时间,一般和瞬态模型的热突破时间对得上,数量级正确就好。比如岩石体积 100 m³、流量 1 L/s,假设岩石比热按2.5 MJ/(m³·K)、水比热按4.2 MJ/(m³·K)粗算,大约能撑几十个小时,再对照这个时间步长去设定瞬态模型总时长,才不至于设错量级。

入口温度的影响则体现在粘度反馈上。入口温度越高,裂隙内流体整体粘度越低,流速分布越“平均”,粗糙度造成的局部流速变异反而减弱,因此在高温注入环境下,粗糙度的影响可能比想象中小。这个规律在做高温回灌(效率更高但热突破更快)的工况评估时很有用。

6.4 在工业评估中如何给决策者总结模型结果

模拟不是做完就结束,还要把模型结果转化为可判断的工程结论。我通常会输出三张图:裂隙中温度分布彩色图、壁面局部热通量分布图、出口温度随时间的变化曲线。再加一个参数敏感性表格,把“粗糙度幅值、入口流速、入口温度、裂隙开度”四者对出口温度和压降的影响列出来,标明每个参数的敏感区间。

给决策者的结论要避开复杂的物理术语,直接说:“在当前注入条件下,热突破预计发生在约XX小时,主要受流速控制,粗糙度影响在XX%以内。”这样模型才能从“数值玩具”变成“决策工具”。

建模之外的一些个人体会和几个实用的后期扩展

最后说点我在多次调试这类型模型后形成的经验。第一,粗糙单裂隙模型一定不要一上来就追求三维高保真。先用二维粗糙断面把流-热耦合机制吃透,边界条件验证通过,再升级到三维,会节省大量时间。第二,边界条件的设定顺序要固定:先定流场入口出口,再定传热入口出口,再定外部围岩边界。只要这个顺序打乱,出问题时排查成本会翻倍。第三,Comsol 6.4 里传热模块和流体流动模块的耦合交互比老版本自动了很多,但自动化不代表边界条件一定物理合理,跑之前仍然要对每个边界的物理含义做一次自问:这个边界的数学设定反映的是真实工况里的哪个物理过程,单位对不对,符号对不对。

如果想进一步扩展这个模型,可以尝试把温度依赖的粘度、非等温流与“移动网格”结合,模拟裂隙开度因热应力动态变化时的流-热耦合;或者通过Comsol的API,用Python或Matlab批量控制参数扫描和结果导出,把模型封装成一个可重复调用的计算流程。这几步属于在基础模型跑通之后的典型进阶路线,值得在机制研究稳定后投入精力。

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

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

立即咨询