☰
三维粗糙裂隙岩体热-流-固耦合COMSOL建模与参数分析
2026/10/21 19:00:27 网站建设 项目流程

三维粗糙裂隙岩体的热-流-固耦合分析,在地热开采、核废料地质处置和深部矿山灾害防治里都是高频需求。最近我用COMSOL搭了一套完整的数值模型:以B-B本构方程描述三维粗糙裂隙面的法向闭合与剪切强度,再耦合温度场、渗流场和应力场,重点考察温度场和应力场的演化规律。整个建模过程从几何生成、参数标定到求解器调试都踩了不少坑,这篇就当作一次系统复盘,给正在做同方向模拟的朋友提供一个能直接落地的参考路线。

坦白讲,这类模型如果只是照教材搭一个均质模型,跑通很容易;但一旦涉及三维粗糙裂隙、非线性本构、三场耦合,收敛问题和结果可信度就成了真正的分水岭。我不打算只贴几个漂亮云图,而是把建模思路、参数来源、求解顺序和排查心得完整拆开讲,大家可以直接对照自己的项目改参数。

1. 在动手前先想清楚:B-B本构和三维粗糙面解决了什么

1.1 为什么裂隙变形要用B-B本构而不是线弹性

裂隙岩体和连续介质最大的不同,就在于那些不连续面控制着强度、渗流和热传递。如果用线弹性模型把裂隙当成普通材料,最直接的后果是无法捕捉法向闭合的非线性——应力上来后,裂隙开度不会无限减小,而是趋于一个极限值;而切向抗剪强度又不是固定值,要随着法向应力、粗糙度、壁面强度动态变化。B-B本构正好把这些关键机制用一组经验关系描述出来。

先说说法向行为。B-B本构把法向应力σn与法向闭合量δn的关系写成双曲线形式:

σn = kni × δn / (1 - δn / δmax)

其中kni是初始法向刚度,δmax是最大闭合量。这个公式的物理意义很直观:当闭合量δn很小、远离δmax时,裂隙表现得像一根较软的弹簧,刚度接近kni;当δn越来越接近δmax,分母趋近于零,应力急剧上升,意味着裂隙“压到底”了,再也不可能继续闭合。这种极限闭合特性,在真实岩石节理面上普遍存在,而线弹性模型完全表达不出来。

再看剪切行为。B-B本构的剪切强度准则通常写成:

τ = σn × tan(φb + JRC × log10(JCS / σn))

这里的φb是基本摩擦角,JRC是节理粗糙度系数,JCS是节理壁压缩强度。说白了,粗糙面在剪切过程中不只是摩擦滑动,凸起体会相互咬合、爬坡,剪胀效应显著,强度贡献来自基础摩擦加上粗糙度的“等效爬坡角”。我用生活化一点的类比:粗糙裂隙就像两块咬合在一起的齿板,法向压力越大、齿越粗糙、齿越硬,就越难滑动;而且一旦滑动,齿要翻越对方,体积必然膨胀,这个膨胀量直接改变裂隙开度。

在做热-流-固耦合时,裂隙开度就是桥接三场的核心变量。开度大,渗透率按立方关系猛增,流体携带热量跑得更快;开度小,通道变窄,温度场推进速度骤降。如果前面力学本构给错了,后面所有物理场的结果都会明显偏移。所以,选择B-B本构不是“学术洁癖”,而是让裂隙开度变化尽量贴近真实。

1.2 三维粗糙裂隙在高地应力环境下的特殊意义

很多早期的模拟喜欢用二维剖面来简化,我自己也试过。二维模型对概念验证很方便,但放到三维粗糙裂隙岩体上,会有几个绕不开的问题。

第一,粗糙突起在空间中的分布是三维的,接触斑点的位置和面积直接影响法向应力分布、热接触阻力和流体通道形状。二维剖面只能用一条线来近似粗糙度,等于把很多三维信息强行压缩,结果往往偏保守或偏激进。第二,真三轴应力状态下,裂隙面的滑移方向取决于远场主应力与裂隙产状的空间关系,剪胀量和渗流路径都是三维效应,二维模型很难还原。

我在某地热预研项目里做过一个粗糙度敏感性测试:裂隙走向、倾角完全相同,只把粗糙面的JRC从5改到18,裂缝尖端附近的热应力增量差异超过三倍。这种量级的变化如果被二维模型抹平,工程决策就会失真。另外,三维模型还能更合理地表达“应力阴影区”——高应力约束下部分粗糙接触点被压碎,裂隙局部闭合,流体绕流;这些特征在二维模型里表现形式完全不同。

所以标题里的“三维”不是单纯多一个Z坐标,它决定了耦合结果的量级和空间分布是否可信。当然,三维模型代价是网格规模和计算成本明显上升,这也是后面要重点谈网格策略的原因。

2. 热-流-固三场耦合的思路:谁影响谁,接口怎么选

2.1 三场耦合路径拆解

热-流-固耦合听起来高大上,实际上就是一张有方向的因果关系网。做模型之前,我建议先在纸上把这张网画清楚,再决定哪些耦合必须强耦合,哪些可以简化。

温度场对流体的影响最直接:水的黏度和密度随温度变化明显,温度升高黏度快速下降,同样的压力梯度下流速会加快,进而影响热量输运速度。温度对固体的影响则是热膨胀:岩体受热膨胀后产生热应力,在约束边界处积累拉压应力,可能造成裂隙张开或闭合。

流体对固体主要是孔压和裂隙水压力改变有效应力。裂隙面附近的流体压力就像给裂隙一个“内部顶开”的力,会削弱法向有效应力,相当于降低抗剪强度;如果注入压力较高,裂隙会朝着打开方向变化。固体对流体则通过开度变化来改变渗透率,而渗透率又按立方定律对开度响极其敏感:开度变成两倍,渗透率变八倍,这是典型的正反馈回路。

温度对渗流的间接影响还有一层:温度变化改变岩体骨架的弹性模量和热膨胀系数,进而影响应力场;应力场再通过开度影响渗流场。在COMSOL里,这层间接路径可以体现为材料属性随温度变化。为了让大家一眼看清,我整理了一张耦合路径速查表。

耦合路径物理机制在COMSOL中的体现强度建议
温度→流体黏度、密度随温度改变流体材料属性使用温度相关函数强耦合
温度→固体热膨胀产生应变和应力Thermal Expansion多物理场节点强耦合
流体→固体孔压/裂隙水压力改变有效应力孔压作为载荷施加到固体力学强耦合
固体→流体开度变化影响裂隙渗透率裂隙开度写入渗透率表达式强耦合
应力→温度变形改变接触面热阻通常较弱,可简化忽略弱耦合
流体→温度热对流输运Heat Transfer in Porous Media中流体速度耦合强耦合

这六条路径里,前四条和第六条在多数工程问题中都不能忽略。第五条弱耦合一般是裂隙面接触状态变化导致的接触热阻变化,我的实际经验是,除非温度差超过150℃并且对接触热阻极其敏感,否则可以后续再考虑,先跑通主线。

2.2 COMSOL中实现耦合的物理接口组合

COMSOL的优势在于多物理场节点组合比较自然。我这个模型用了四个物理接口:

  1. 固体力学(Solid Mechanics):负责岩体的应力应变场,以及裂隙面的接触力学行为。
  2. 裂隙流(Fracture Flow):在三维几何中,裂隙面是内边界,流体只在这个面内流动,符合达西定律,并可定义开度相关的渗透率。
  3. 多孔介质传热(Heat Transfer in Porous Media):同时考虑基质传导和裂隙面的热对流。
  4. 多物理场节点:包括热膨胀(Thermal Expansion)、非等温流动(Nonisothermal Flow)和驱动力(Pore Pressure / Fracture Pressure)耦合。

这里特别提醒一点:裂隙流接口并不是简单的“二维达西”,它可以映射到三维几何的内边界上,这就很适合处理粗糙裂隙面。在模型树里,裂隙流接口的物理量是面压力,面外还有泄漏项可以连到基质达西流。如果只需要研究裂隙主导的流动,把基质渗透率设得很低即可。

传热部分,如果裂隙面只有一层边界网格,那么热量在裂隙面内的对流传热用边界上的切向对流流动来描述;基质内部用多孔介质传热的三维方程。两个域之间通过“裂隙热传导”法向通量自动衔接,不需要手动写额外条件。

我试过在裂隙面上用“薄层传热”边界条件来模拟,也能跑通,但对三维粗糙模型的网格质量要求更高,收敛性稍差。标准做法还是把裂隙设置成嵌入型内边界,通过裂隙流接口和传热接口自带的功能来处理,最稳妥。

2.3 B-B本构参数怎么换算进COMSOL

既然B-B本构给出的不是固定刚度,而是随应力状态变化的非线性响应,那就要想清楚怎么把它“塞进”COMSOL的框架。常见做法有两条路。

第一条路,使用固体力学中的接触节点,把法向罚刚度写成B-B双曲线公式的切线刚度表达式:

kn = kni / (1 - δn / δmax)^2

切向摩擦强度写成Barton-Bandis形式的非线性摩擦系数:

μ = tan(φb + JRC × log10(JCS / σn))

COMSOL的接触节点支持带摩擦的接触,把摩擦系数的表达式指向上述公式,就能近似实现B-B剪切强度准则。好处是设置直观、求解器兼容性好;坏处是对网格和接触算法比较敏感,粗糙接触面上容易局部穿透。

第二条路,如果希望更精确地控制裂隙面力学行为,可以用弱形式或自定义本构子程序,把裂隙面当成“界面单元”,定义法向和切向的位移-力关系。这一条需要一定编程基础,但自由度更大,可以精细控制粗糙面剪胀和塑性位移累积规则。

参数换算上,我分享一个常用的经验公式:初始法向刚度kni可以估算为

kni = -7.15 + 1.75 × JRC + 0.02 × (JCS / b0)

其中b0为初始开度,单位取mm,得到的kni单位是MPa/mm。这个公式来自经验回归,适合快速确立初值;如果项目能做室内试验或现场压水试验,实测数据永远更可靠,经验公式只作为初始猜测。

3. 从粗糙面生成到网格收敛:建模全流程实录

3.1 粗糙裂隙面的两种生成与导入方式

三维粗糙裂隙面的几何是整个模型的源头,这一步没做好,后面所有计算都受影响。我常用的有两种导入方式。

第一种:真实扫描点云重建。用三维激光扫描仪或结构光扫描仪对天然裂隙面露头、岩芯节理面扫描,得到高密度点云。点云经过降噪、抽稀之后,在三维CAD软件里重建NURBS曲面,再导出为STEP或STL格式,最后导入COMSOL作为裂隙内边界。这种做法的优点是几何最真实,能直接体现天然粗糙度;缺点是文件量大,而且在抽稀时如果控制不好,曲面会丢失高频粗糙信息。

第二种:程序生成随机粗糙面。做参数敏感性研究时,很难每个算例都拿扫描面来跑,更实际的办法是根据统计参数合成一个等效粗糙面。具体流程是:

  1. 在Matlab或Python中生成512×512的网格点;
  2. 给定自仿射分形功率谱,例如P(k)=C×k^(-β),β取2.0~2.4之间,生成服从高斯分布的随机相位;
  3. 进行逆傅里叶变换,得到高度起伏阵列;
  4. 用Z2斜率法估算JRC,Z2是相邻点平均斜率均方根,通过经验公式JRC≈32.2+32.47×log10(Z2)反算,调整β和幅值直到JRC落在目标范围;
  5. 导出XYZ点云,在CAD软件里做成网格曲面,导出STL;
  6. 导入COMSOL,作为内边界嵌入岩体块体。

这一步有个常见误区:有人会把点云直接拉到COMSOL的插值函数里生成曲面,节点数一多,文件变得巨大,网格生成极慢。我踩过这个坑以后,基本都坚持“点云→CAD重建曲面→轻量化导出”的流程,曲面片数量控制在几千片以内,既能保留粗糙特征,又不至于拖垮网格器。

3.2 网格策略:裂隙附近加密与跨尺度问题的处理

三维粗糙裂隙模型的核心矛盾是尺度差异:裂隙开度只有零点几毫米到几毫米,而模型尺度是几米甚至几十米。如果网格均匀化处理,要么裂隙处捕捉不到粗糙度导致的局部应力集中,要么网格数量爆炸到根本算不动。

我的网格策略分成三步:

第一,裂隙面本身用三角形表面网格离散,单元尺寸控制在岩体单元尺寸的1/5到1/10。一个2米见方的岩体,岩体单元用80毫米到120毫米,裂隙面单元就用8毫米到15毫米。这样能精确反映粗糙凸起对接触和渗流的影响。

第二,在裂隙面两侧增加边界层网格,至少两到三层,厚度沿垂直于裂隙面方向渐变。边界层网格的作用是捕捉裂隙面附近的应力梯度和热边界层,如果没有这一层,裂隙面两侧的温度前沿会显得过于平滑,热应力峰值明显低估。

第三,避免用实体薄层代替裂隙面。有人会把裂隙建成一个实体薄片,然后划分六面体网格,但薄片的厚度和面内尺寸差异悬殊,网格长宽比极差,求解时极易产生数值病态。正确做法是把裂隙面当作“无厚度内边界”,流体和热流都发生在边界上,力学通过接触或界面刚度实现。

关于网格质量,我习惯在求解前先检查两个指标:最小单元质量大于0.1,裂隙面单元最大长宽比小于10。如果不过关,优先调整裂隙面周边的过渡区网格比例,而不是简单粗暴地全局加密。

3.3 一套可以直接抄作业的初始参数表

为了方便读者快速搭出一个能跑的版本,我给出一个初始参数表。这组参数来自某地热项目初期验证模型,虽然不同工况需要标定,但作为敏感性分析起点已经足够。

参数类别参数名称取值单位备注
岩体弹性模量E25GPa温度相关时用多项式拟合
岩体泊松比ν0.251假设各向同性
岩体密度ρ2600kg/m³影响自重应力
岩体导热系数kr2.5W/(m·K)基质项
岩体比热容Cp900J/(kg·K)基质项
岩体热膨胀系数α8×10⁻⁶1/K热应力关键参数
岩体基质渗透率km1×10⁻¹⁸m²设为极低,突出裂隙主导
裂隙初始开度b01mm立方定律基准
裂隙JRC121粗糙度系数
裂隙JCS80MPa壁面压缩强度
裂隙基本摩擦角φb30°室内直剪试验可测
裂隙初始法向刚度kni5MPa/mm经验公式估算后需校准
裂隙最大闭合量δmax0.8mm与粗糙度正相关
流体密度ρw1000kg/m³温度相关
流体黏度μw见表达式Pa·s使用μw=2.414×10⁻⁵×10^(247.8/(T-140))
流体比热容Cpw4200J/(kg·K)常压范围
流体导热系数kw0.6W/(m·K)温度影响弱

这套参数里,黏度公式是水在20到100摄氏度范围内的常用经验表达式,T单位是摄氏度,算出来的黏度单位是帕·秒。这个表达式可以直接写到COMSOL的解析函数里,不再手动查表。

4. 求解顺序与后处理:温度场、应力场怎么算出来

4.1 求解策略:分步激活多物理场

面对强耦合非线性问题,直接一上来就全耦合求解,绝大多数情况是“算到一半发散”,浪费时间还排查不出问题。我的策略是分步激活多物理场,每一步只解决一个或两个反馈回路。

第一步:只开固体力学接口,施加远场应力边界条件和自重回载,做一次稳态求解。这一步的作用是让初始应力场稳定下来,确认裂隙接触面初始状态正常,没有异常穿透。

第二步:激活裂隙流接口,先不开温度,做一个稳态流场求解。这时候裂隙开度固定在初始值,流体压力分布可以快速得到,顺便检验裂隙流动入口出口的边界条件是否合理。

第三步:激活传热接口,做瞬态求解。此时裂隙压力场固定,流体速度场已知,温度场通过热对流和热传导逐渐推进。这一步可以单独分析热前沿的形态,也是检验网格过渡是否平滑的最好时机。

第四步:激活热膨胀和裂隙水压力载荷,把全部多物理场耦合起来,做完整的瞬态分析。时间步长从1天开始,连续算几天,等收敛稳定后逐渐加大到7天、30天。如果中途发散,优先缩小时间步长,同时降低耦合求解器阻尼系数。

在COMSOL求解器设置里,我喜欢用分离式求解器(Segregated),把压力和位移分开求解,物理场之间的迭代交给求解器自动循环。全耦合(Fully Coupled)固然理论精度更高,但在这种多物理场强非线性问题里,分离式稳定性明显更好。

4.2 温度场与应力场结果的特征判读

模型跑完了,重点看什么?温度场方面,我习惯输出三个特征:热前沿位置、通道效应强度、温度梯度极值。高温流体沿裂隙面快速推进形成热通道,温度场云图上会出现一个“舌状”高温区,舌状越突出,说明裂隙优势通道效应越明显。热前沿到达的位置和速度,直接对应工程上的热突破时间,这是地热开采项目最关心的指标之一。

应力场方面,第一主应力云图和裂隙面法向应力分布是最关键的两个输出。第一主应力可以快速判断裂隙尖端是否出现拉应力区:流体注入导致裂隙张开、变形的区域,可能原本是压应力背景,局部转为张应力,这会改变裂缝扩展风险。裂隙面法向应力分布需要把应力张量投影到裂隙局部法向量方向上,COMSOL的后处理里可以定义局部坐标系做到这一点。

我拿一个算例来给数量级参考。模型尺寸2米立方体,初始岩体温度30℃,注入80℃流体,100天后热前沿推进约1.2米。裂隙面附近应力扰动约10MPa,其中热应力贡献约6MPa。这个数字怎么快速估算?完全约束条件下材料热应力近似为αEΔT,代入α=8×10⁻⁶/K、E=25GPa、ΔT=50K,得到αEΔT=10MPa。模拟值比理论极限值小一些,是因为裂隙和自由边界释放了部分热应变,符合物理认知。这种“理论估算交叉验证”的方法,能够快速识别模型是否出现异常量级。

4.3 参数敏感性算例的结果对比

把参数敏感性单独拿出来说,是因为它能回答工程上最关心的问题:裂隙粗糙度到底有多大影响?注入压力要不要提高?我跑过一组对照,结果很能说明问题。

工况JRC初始开度b0裂隙渗透率倍数温度场特征
基准121mm5.8倍热舌状推进明显
光滑51mm2.1倍热前沿较均匀
粗糙181mm13.4倍通道效应极强,局部温度梯度大
窄缝120.5mm1.8倍热突破延迟
宽缝122mm23.1倍热突破极快,裂隙尖端拉应力最大

这里的“裂隙渗透率倍数”是相对于初始开度对应的渗透率计算得到的等效值。可以看出:JRC从5提高到18,渗透率提升超过6倍;开度从1mm增加到2mm,渗透率提升接近4倍(立方定律理论上是8倍,实际因为剪切闭合和凸起接触耗散了一部分)。这种差异直接决定温度场形态,也决定热应力集中的位置。参数敏感性算例的意义,就是帮项目组锁定最值得继续投入实测标定的参数项。

5. 常见问题与排查技巧实录

5.1 不收敛的根源排查

我运行这个模型时遇到的大部分发散,根源都能归到以下几类。首先,接触罚刚度过大,导致接触力在迭代中振荡,解决办法是把罚刚度降低一个数量级再试,同时把接触迭代的松弛因子从1.0调到0.5。其次,裂隙开度与渗透率形成的正反馈太强:开度增大→渗透率增大→流体压力重新分布→开度继续增大,一旦反馈过强数值就会发散,这时需要通过辅助扫描逐步加压,每步限制开度更新幅度。第三,瞬态时间步长太大,温度前沿跨越粗糙凸起时梯度剧烈变化,缩小时间步长通常立刻见效。

排查不收敛时的顺序其实很有讲究。先说区分网格问题和物理问题:把粗糙面无损替换成光滑平面,如果依然发散,说明问题不在粗糙度而在耦合逻辑或边界条件;如果光滑面能算,再逐步恢复粗糙度,找到发散的那一组参数。

5.2 裂隙流网格引起的局部渗透率失真

裂隙流计算中,最隐蔽的错误来自网格方向性渗透率失真。粗糙面的起伏导致网格单元走向不一致时,达西速度场会出现与粗糙特征无关的条带状振荡,看起来像“伪渗流通道”。遇到这种情况,输出裂隙面上的达西速度矢量图,如果发现速度方向与局部压力梯度方向明显不垂直,就很可能是网格问题。

解决方法:裂隙面使用各向同性三角形表面网格,限制最大单元尺寸,同时确保粗糙面相邻单元面积变化不超过两倍。还有一种情况是裂隙面交叉点处网格过疏,流体在交叉点堆积形成虚假高压,处理方式是在交叉线周围设定加密区域。

5.3 温度-应力耦合方向容易犯的错误

最常见的问题是热应变参考温度设置错误。COMSOL的热膨胀节点里有一个参考温度Tref,如果设置成0℃,而初始岩体温度是30℃,那算出来的热应力会包含一个“虚构”的30℃温差,量级直接错掉。正确做法是把初始温度设为Tref,后续温度变化才是热应力的来源。

另一个高频错误是单向耦合陷阱。有人为了省事,把温度场先算好,然后当成载荷加载到应力场,不再把应力反馈到裂隙开度和渗流场。如果研究重点是温度场和应力场,这种单向假设往往会高估热应力,因为裂隙打开后释放了部分应力,而单向耦合完全捕捉不到这种释放。我的实测经验是,在强约束条件下单向与双向耦合结果差异能到15%~25%,工程判断可能因此翻车。

裂隙面热量传递还有一个盲区:默认边界条件可能把裂隙面当成“绝热壁”,因为固体力学接口默认内边界是不参与传热的。我早期跑过一个模型,温度场显示裂隙面两侧出现明显温差,检查发现裂隙面上的传热边界根本没有激活,裂隙直接被当成绝热体了。检查多物理场默认边界条件,优先级永远高于调求解器参数。

6. 小技巧与后续扩展方向

最后再分享一个我自己吃了亏以后总结的调试技巧:添加全局探针。在裂隙入口、出口和裂隙面中心点分别定义温度探针、压力探针和位移探针,瞬态求解时实时查看这些变量的变化曲线。如果发现探针曲线出现锯齿状跳变,说明求解器迭代尚未稳定,这时不用急着看云图,先把时间步长改小、或者延长求解器迭代次数,探针曲线平滑后再做后处理。

这类模型后续扩展空间很大。比如可以给裂隙粗糙面加入接触磨损模型,模拟多次循环注采下凸起体被剪切磨平的过程;也可以把基质渗透率换成应力相关函数,研究基质-裂隙双重介质下的热突破规律;还可以把单条裂隙扩展到裂隙网络,观察网络连通性对温度场通道的影响。每一步扩展都会带来新的网格与收敛挑战,但基础框架就是这一套——粗糙几何、B-B本构、三场耦合、分步激活、探针监控。

如果你正在做类似方向,我建议从小尺度模型开始,先把单条粗糙裂隙的热流固耦合跑通,再逐步扩大模型规模和参数范围。模拟这种事,跑出一个漂亮云图只是开始,能把云图背后的每个假设和参数都说得清、经得起质疑,才算真正做完了一个项目。

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

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

立即咨询