首页 / 资讯中心 / 文章详情

基于COMSOL的含裂缝地层流动与传热耦合模拟实战解析

基于COMSOL的含裂缝地层流动与传热耦合模拟实战解析 ★ FEATURED ARTICLE
做含裂缝地层的流动与传热耦合模拟可以说是油藏数值模拟里比较“磨人”的一类问题。我第一次接这个需求的时候手里拿到的资料是某区块几口井的测井曲线、岩心描述和试井解释结果其中明确写着“裂缝发育带”“高温流体注入后生产井温度响应异常”。拿均质模型跑第一轮结果跟实测温度差得很远后来把裂缝显式建出来结果才基本对上。从那以后我就意识到裂缝地层的模型不是把渗透率调大一点就行而是要真正把“基质-裂缝”两套体系分开处理再把流动与传热耦合起来否则预测的热突破时间、产出温度曲线都不可靠。这篇文章围绕一套基于 COMSOL 的含裂缝地层流动与传热耦合模拟实战展开。我会把从模型思路、裂缝表征、物理场设置、网格控制到求解调试的完整过程都过一遍重点讲那些容易踩坑的细节。适合正在做地热开发、稠油热采、埋地管线热影响评估这类工作的工程师也适合想把 COMSOL 用到油藏尺度数值模拟的研究生和从业者。1. 项目整体思路与设计拆解1.1 为什么要区分“裂缝”和“基质”两套体系裂缝地层的一个核心特征就是“强非均质性”。基质部分孔隙度、渗透率都比较低流体在里面的流动速度很慢而裂缝的渗透率往往是基质的几十倍到上千倍流体进入裂缝以后就像开上了高速公路。反映到温度场上裂缝带来的不只是“更快”还有“更扭曲”的传播路径。热对流沿着裂缝优先推进形成明显的热舌热传导在基质里慢吞吞地扩散两者在时间尺度上差了好几个数量级。如果把裂缝和基质统一当成一个等效连续介质采用等效渗透率和等效热容来代表整个网格块的属性通常在“宏观长期”阶段还能凑合一旦要精确回答“生产井什么时候开始热突破”“裂缝网络里流量是怎么分配的”等效模型就会失效因为裂缝的几何走向和导流能力对结果影响太大网格块平均之后这些信息全部被抹平了。所以这次模拟我选择把裂缝当成低维几何对象显式建立而不是用等效属性去近似。这是整个项目最关键的设计决策后面的物理场设置、网格策略都是围绕这一点展开的。1.2 为什么选择 COMSOL 而不是自写程序或专用油藏软件做这类模拟常见的路线有这么几条用油藏数值模拟软件里的离散裂缝模型功能用开源的地下模拟器自己建模再就是自己写有限元或有限体积代码。三条路线我都试过各有利弊但回到“流动传热耦合”这个场景COMSOL 的优势比较明显。第一COMSOL 有多物理场耦合的成熟框架。流动场算完以后温度场怎么影响流动、流动怎么改变传热这些双向耦合关系不需要自己处理矩阵组装和迭代策略。第二COMSOL 支持低维边界单元。这个能力对裂缝建模至关重要。裂缝在二维模型里是一条内边界线段在三维模型里是一个内边界曲面COMSOL 可以直接对这些低维对象定义独立于基质的物理方程基质和裂缝之间的交换通过面通量自动衔接。第三后处理方便。温度场、压力场、流速矢量、裂缝流量这些东西模型算完就能直接切剖面、导曲线不用另外写数据管线。但也得说清楚 COMSOL 的边界。它本质上是一个偏微分方程求解平台不是专业油藏模拟器所以遇到百万级网格、复杂井史、油气水三相、组分模型这类问题时效率和功能还是不如专门的油藏软件。我的判断是COMSOL 适合机理研究、单井或井组尺度的裂缝热流耦合分析目标是把“裂缝参数→温度响应”之间的关系摸清楚全油田级别的开发预测再交给专业油藏软件。1.3 整体技术路线实际操作时我按下面的步骤推进每一步都有明确的输入输出这样不容易在复杂模型里迷失方向。地质概念模型从测井、岩心、试井资料里提取裂缝发育带的走向、延伸长度、开度范围和间距整理成几何参数。裂缝参数等效把天然裂缝网络的统计信息分配到显式裂缝几何上包括裂缝渗透率、开度、热导率等。物理模型建立在 COMSOL 里构建储层几何给基质和裂缝分别指派渗流方程与传热方程设置注入井与生产井的边界条件。瞬态模拟设定初始地温场和压力场运行若干年生产模拟重点记录生产井温度曲线和裂缝流量占比。敏感性分析改变裂缝渗透率、开度、延伸长度等参数观察热突破时间和温度剖面如何变化。这套路线的核心思想是“先概念化、再数值化”。不要一上来就把真实地质的每个细节都塞进模型而是抓主导裂缝先把机理跑通再逐步逼近真实情况。2. 裂缝地层流动-传热耦合的核心技术解析2.1 裂缝表征的三种方法与选型逻辑关于裂缝怎么表征业内常用的有三类方法理解清楚它们的区别对建模方向影响很大。第一类是离散裂缝模型。把每条主要裂缝显式建模当作低维几何对象基质和裂缝各自保留独立的物理方程。适合研究少量主导裂缝比如压裂主裂缝、断层破碎带也适合我要做的“裂缝走向对热突破的影响”这类机理问题。第二类是等效连续介质模型。把裂缝网络和基质分别等效成两个重叠的连续体用“双重介质”或“多重介质”来描述。适合裂缝密度很大、单条裂缝几何不需要关心的情形但参数标定复杂基质和裂缝之间的交换系数是个很难取准的经验值。第三类是嵌入式离散裂缝模型。把裂缝嵌入到背景网格里不需要沿着裂缝重新剖分网格适合处理复杂裂缝网络但实现上通常要改求解器或使用自定义方程在 COMSOL 里需要借助弱形式才能做好难度偏高。对大多数流动-传热耦合问题如果研究对象是少数几条控制性裂缝离散裂缝模型最直观、也最容易与地质认识对应。我这次选的就是这个方案。2.2 流动方程基质的达西方程与裂缝的切向达西流动基质部分的流动用常规达西方程描述[ abla \cdot (\rho \mathbf{u}) Q_m ] [ \mathbf{u} -\frac{k_m}{\mu}\left( abla p \rho g abla z ight) ]这里的 (k_m) 是基质渗透率(\mu) 是流体动力黏度(\rho) 是流体密度(Q_m) 是源汇项。实际操作时(Q_m) 用来耦合裂缝和基质之间的质量交换也用来设置注入井的流量源。裂缝内部流动在 COMSOL 里用的是低维切向达西方程。裂缝被当作一个具有一定开度 (a_f) 的低维边界流体只能沿裂缝切向流动[ abla_T \cdot (a_f \rho \mathbf{u}f) Q{exch} ] [ \mathbf{u}_f -\frac{k_f}{\mu} abla_T p ]这里的 (\nabla_T) 表示沿裂缝切向的梯度(Q_{exch}) 是裂缝与相邻基质的交换通量。另一个细节是裂缝渗透率通常不等于基质渗透率而要从裂缝开度和裂缝导流能力转换过来。工程上常用的关系是把裂缝简化成平行板模型[ k_f \frac{a_f^2}{12} ]但这是理想情况。现实里裂缝面粗糙、有充填物所以更可靠的做法是用试井解释或者生产动态反演标定裂缝渗透率再用标定值做预测。2.3 多孔介质传热方程与裂缝传热的边界处理基质和流体共同占据孔隙空间温度场用局部热平衡假设下的多孔介质能量方程来描述。所谓局部热平衡就是假设岩石骨架和孔隙流体在同一个位置上的温度是一致的不需要分别求解两套温度场。[ (\rho c_p){eff} \frac{\partial T}{\partial t} abla \cdot (\rho_f c_f \mathbf{u} T) abla \cdot (k{eff} abla T) Q_T ]其中有效热容和有效热导率都按照孔隙度加权平均[ (\rho c_p){eff} \phi \rho_f c_f (1-\phi)\rho_s c_s ] [ k{eff} \phi k_f (1-\phi) k_s ]对流项里面用的是流场的实际流速乘以流体热容也就是说热量的“输运载体”是流体岩石骨架本身不流动只通过热传导参与热交换。这个区别决定了裂缝里热推进为什么比基质快裂缝中流速大对流通量远大于热传导通量热量就沿着裂缝被快速带走。COMSOL 中处理裂缝传热时通常也是把裂缝当作低维边界来处理在裂缝边界上增加切向热对流和热传导的贡献同时考虑裂缝与基质之间的垂向热交换。如果裂缝开度很小裂缝本身储存的热量可以忽略主要把它看成连接基质和外部热源的“导热桥”。2.4 流动与传热的双向耦合机制很多人觉得耦合就是把温度对流传热方程里再把热物性填进去就完了。实际上含裂缝地层的流动-传热耦合是双向的而且裂缝越发育这种双向性越明显。正向耦合是流动影响传热流体沿压力梯度流动把注入流体携带的热量在储层中重新分配流速越高热对流覆盖范围越大。反向耦合是传热影响流动温度变化改变流体密度和黏度。水在高温下黏度明显下降渗透率不变的情况下黏度降低会让相同压差下的流速增加。温度分布不均时密度差异还会引起自然对流。在裂缝中这种效应容易被放大因为裂缝导流能力强一点点密度差就能驱动可观的循环流量。因此我建议把热物性设置成温度相关的函数而不是取常数。在 COMSOL 材料库里直接调用水的温度相关密度、黏度、热容、热导率数据岩石的比热容和热导率按实测值输入。这样模型才能捕捉到“热突破导致采出温度升高进而导致井附近流体黏度下降、流速重新分布”的自反馈过程。2.5 关键参数取值与单位换算这一节必须单独拿出来讲因为参数错误是这类模拟里最常见的低级错误尤其渗透率单位。COMSOL 的基本单位是国际单位制渗透率一定要换算成 (m^2)。1 毫达西mD约等于 (9.87 \times 10^{-16} m^2)也就是接近 (1 \times 10^{-15} m^2)。很多岩心数据给的是 mD直接输入会导致模型里的流速整体差出几个数量级。下面是这套模型常用参数的一个参考表不同储层条件需要根据实测数据调整。参数取值说明基质渗透率 (k_m)20 mD约 (2 \times 10^{-14} m^2)裂缝开度 (a_f)0.3 mm天然裂缝常见范围 0.1~1 mm裂缝渗透率 (k_f)2000 mD用试井或生产数据标定基质孔隙度 (\phi)0.18测井解释值岩石热导率 (k_s)2.5 W/(m·K)砂岩典型值岩石比热容 (c_s)900 J/(kg·K)实测值初始储层温度 (T_0)85 ℃井底测温注入流体温度 (T_{in})120 ℃地面加热后井底温度注入流量 (Q_{in})(0.005 m^3/s)对应日注水量约 432 m³生产井井底压力 (p_{out})8 MPa定压生产提示如果模型里出现裂缝渗透率比基质高三个数量级以上的情况先检查单位换算有没有做错。我遇到过不止一次用 mD 当 (m^2) 输入导致完全不收敛的问题。3. 完整实操流程从几何到后处理3.1 几何模型构建与裂缝走向设计我习惯第一步先做一个二维概念验证模型把复杂问题简化调通物理场和参数以后再评估是否扩展成三维。几何尺寸设定为 500 m × 300 m 的矩形储层区域。在中间偏左侧设计一条主裂缝从注入井附近向生产井方向延伸长度大约 350 m相当于从井区延伸到另一侧。裂缝用一条“内部边界线”表示而不是实心几何体。这样在 COMSOL 中定义物理属性时可以直接指定它属于裂缝流动接口。注意一个容易出问题的地方裂缝端点要离模型边界留出足够距离否则容易在边界上出现不自然的压力集中。我在左侧边界设置注入井右侧边界设置生产井裂缝从注入井附近的边界出发向右侧延伸大约三分之二的距离后结束。这个设计可以产生一个相对清晰的从注入井到裂缝再到生产井的贯通优势流动通道方便观察热突破。3.2 物理场接口配置步骤在 COMSOL 的“模型向导”里选择二维模型然后依次添加以下物理场接口达西定律用于基质内部的单相达西渗流。裂缝流动这个接口专门处理低维边界上的切向流动界面上的物理量自动与基质的达西定律互相衔接。多孔介质传热用于求解温度场。多物理场耦合节点建立非等温流动耦合把达西流速作为传热方程的对流速度再把温度变化反馈到流体物性。如果使用的 COMSOL 版本较旧没有自动的“裂缝流动”和“多孔介质传热”耦合也可以手动设置裂缝的流动用边界弱贡献实现传热接口的对流速度场手动选择达西速度场变量。功能等价只是操作路径不同。在多孔介质传热接口中我建议把固体和流体的热物性都设为温度相关。固体部分输入密度、比热容、热导率流体部分选择内置材料数据。选内置数据的好处是随温度变化的密度和黏度会自动参与计算不用自己拟合差值表。3.3 边界条件与初始条件设置边界条件设置是整个模型成败的关键环节我逐个说明各边界如何处理。注入井边界给定注入流量 (Q_{in}) 和注入温度 (T_{in})。这里用到的是“流入边界”条件相当于一个定流量源流体以固定温度进入储层。生产井边界给定井底压力 (p_{out})温度不需要额外指定流出边界条件会自动使用内部计算温度。定压生产符合常见油藏工程习惯。上下边界即二维模型的顶底边界设为绝热也就是热通量为零。这相当于默认储层顶底是隔热的。如果要考虑地温梯度泄漏可以换成对流热损失条件但概念验证阶段先忽略。初始条件整个模型域初始温度为 85 ℃初始压力按照静水压力分布给定。这里有个细节初始压力分布如果不设置成沿深度梯度变化求出来的流动场在重力的作用下会先混乱一阵影响前期的时间步。提示对于二维模型虽然没有垂直方向的几何但“深度”方向的冷热交换仍然可以在达西方程里通过重力项体现。如果模拟的是水平面内的流场建议把重力项关掉只保留压差驱动流动能避免产生不必要的密度驱动对流。3.4 网格剖分策略裂缝周围的网格控制网格是这类模型精度最大的决定因素。COMSOL 对低维裂缝边界会自动生成边界单元但边界单元能不能和周围基质单元良好衔接要看网格剖分设置。整体网格单元尺寸设定为 5 m 到 30 m三角形网格。这个尺寸对 500 m 尺度的模型已经足够细。在裂缝周围要额外加密我习惯在裂缝两侧设置宽度为 10 m 的加密区域加密区域内最大单元尺寸设为 2 m。这样裂缝附近的速度梯度和温度梯度都能得到较好分辨。裂缝交叉点和裂缝端点也值得单独处理。在 COMSOL 的“网格”节点里可以为这些点添加尺寸约束把点附近单元尺寸缩小到 0.5 m。不要小看这两个点的设置裂缝端部温度梯度非常剧烈网格不够细时温度曲线容易出现“毛刺”看起来像非物理振荡其实就是网格分辨率不足。3.5 求解器与瞬态模拟设置模型设置完成以后我先做一次稳态求解只解流动场把初始压力分布算出来然后以此作为瞬态求解的初始值。这一步很重要能显著减少瞬态早期因压力和温度同时调整带来的收敛问题。瞬态求解的时间范围设定为 3 年。时间步长不手动指定固定值而是使用 BDF 自适应步长。起始步长设得小一点比如 0.01 天之后让求解器根据误差自动调整。容差设置需要注意相对容差我建议设 0.01绝对容差也设 0.01不要直接取默认的 0.001。对于裂缝这个强对比体系如果容差定得太严格迭代会非常难以收敛而且仿真结果并不会因为容差收紧变得更好反而容易让求解器在裂缝与基质交界处反复调整。当然如果自己需要极高精度可以把容差降下来代价是计算时间成倍增加。3.6 后处理与关键结果提取模型算完以后我先看温度场云图。裂缝区域会出现明显的“热舌”状推进温度前锋在裂缝里比在基质里跑得快得多这是判断裂缝通道是否起主导作用的第一视觉证据。然后是生产井温度曲线。直接把生产井点的温度随时间变化画出来关注热突破时间——也就是产出温度开始显著偏离初始储层温度的时间点。这个指标与注入温度、裂缝穿透度、裂缝渗透率直接相关是做敏感性分析的基准指标。裂缝流量占比用表面积分做。在裂缝边界上对切向流速做线积分除以模型的整体注入流量可以得到裂缝承担的流量比例。实际计算中这条贯通主裂缝能承担整个模型流量的 70% 以上这个数字比我预想的高也解释了为什么热突破会那么快。最后画压力降曲线从注入井到生产井的压力剖面看裂缝段压力梯度是否远小于基质段。如果裂缝段压力梯度几乎为水平说明裂缝导流能力足够模型行为符合物理直觉。4. 求解器设置与性能调优经验4.1 全耦合求解器和分离式求解器的取舍COMSOL 求解这类问题有两种路线。全耦合求解把流动和传热方程放在同一个迭代系统里同时求解每一步所有变量同步更新分离式求解把压力、速度、温度分别做子步骤迭代每个子步骤轮流更新。我的体会是初期调试阶段用分离式求解更省内存速度也快但收敛性差的时候全耦合反而更稳。因为裂缝中的流速对温度场影响极强分离式不断交替更新时一个变量的修正会扰动另一个变量容易出现振荡不收敛。全耦合虽然每一步代价高但迭代次数少整体算下来并不慢。具体操作上如果默认求解器出现收敛缓慢或振荡我会在“求解器配置”里把“分离式”改成“全耦合”然后勾选“恒定牛顿”或者“带阻尼的牛顿”。阻尼机制能限制温度场更新幅度防止热前锋冲得太猛导致压力场崩溃。4.2 时间步长控制实战时间步长控制是另一个值得细调的环节。BDF 自适应步长默认算法会随着误差大小调整步长但初始步长设得太大会导致第一个时间步就发散。一个实用策略是把瞬态过程分成两段。前 0.5 年用较小的最大时间步长比如 1 天把这个阶段的热传导和流动调整充分捕获0.5 年以后系统已经进入一个相对平稳的推进期最大时间步长可以放宽到 30 天这时候结果的分辨率主要由网格精度决定时间步只要不跳过重要的生产井温度变化就行。但如果你的目标是精确捕捉热突破点的准确日期建议在整个热突破窗口前后把时间步长加密到 0.5 天。热突破往往表现为温度曲线的快速拐弯时间步长太大容易把这个拐弯“抹平”导致热突破时间判断偏差。4.3 内存与算力的几个优化技巧第一二维模型是首选。默认情况下大部分分析用二维模型就能给出令人满意的机理认识三维模型留给最终验证。三维模型里裂缝变成曲面网格量呈立方级别增加调试时间和迭代复杂度都指数上升。第二用“冻结流动场”技巧。如果要单独研究温度扩散规律可以对流动场计算一次稳态解再把流动场的速度固定在空间分布上不让它随温度变化更新这样传热方程就变成一个带已知速度场的对流-扩散方程求解快得多。当然这会损失双向耦合的准确性所以只适合快速试算不适合正式结果。第三减少输出数据的频率。COMSOL 默认每个时间步都保存全部场数据文件体积很快就到几个 GB。在“求解器序列”里设置只保存间隔 5 天或 10 天的时间步数据需要细节的某个时间段再单独重算能省大量磁盘占用。5. 常见问题排查与避坑实录5.1 持续迭代不收敛先检查裂缝单元质量如果我只保留一条经验那就是“不收敛先查网格再查参数最后查边界条件”。COMSOL 报“找不到一致初始值”或者“达到最大迭代次数”之类错误时最普遍的原因就是裂缝单元质量太差。裂缝作为低维边界单元如果与基质单元的长宽比相差太大单元雅可比矩阵可能接近奇异求解器无法正常迭代。解决方法是把裂缝周围的单元尺寸单独调小并且确保裂缝单元节点与相邻区域节点重合。如果裂缝弯曲得非常厉害可以先把几何简化成折线段跑通了再考虑复杂曲线。另外一个坑是裂缝开度过小。开度 (a_f) 进入方程后如果值太小切向达西方程对应的系数矩阵数量级与其他方程差异过大数值上会出现刚性问题。我用 0.3 mm 的裂缝开度没出问题但当开度降到 0.01 mm 时就明显开始出现求解器报错。遇到这种情况可以把模型输出的裂缝导流能力 (k_f a_f) 先固定把开度人为放大到 1 mm同时把渗透率按比例调低保持裂缝整体导流能力不变。这样数值稳定物理结果基本一致。5.2 裂缝内温度振荡与前沿模糊算完以后如果裂缝附近的温度云图出现波浪状条纹或者在裂缝沿线上温度曲线呈现锯齿状多半是对流占优导致的数值振荡不算完全没救但结果不可直接使用。解决办法有三个。第一加密网格“对流占优”时局部 Peclét 数过高网格越细越能抑制振荡。第二启用或加强稳定化。COMSOL 的传热接口默认带有流线扩散和交叉扩散稳定化不过在某些版本里默认是关闭的去“多孔介质传热”节点的“稳定化”子节点里打开即可。第三调整时间步长。如果时间步长超过“热对流前沿通过一个网格单元所需要的时间”就会出现时空振荡把最大时间步长减小一半通常能解决。物理上还需要检查裂缝与基质之间的热交换系数。有些情况下裂缝里的流体流速很高温度场几乎由对流控制如果换热系数设置过低基质与裂缝之间热量交换不足也会出现裂缝温度与周围基质温度“脱节”的非物理现象。5.3 综合排查速查表现象可能原因排查顺序完全不收敛裂缝单元质量差 / 渗透率单位错误 / 初始值不合理先改网格再查单位最后查初始值前几步收敛后面发散时间步长过大 / 注入温度导致物性突变收紧最大时间步长检查流体物性表是否连续温度曲线有锯齿网格太粗 / 对流占优振荡加密裂缝周围网格并打开稳定化裂缝附近温度不连续裂缝热交换系数设置不当 / 裂缝热容忽略过度增大热交换系数或调整裂缝开度效应对应关系压力剖面异常裂缝流量占比过高 / 边界条件冲突检查裂缝渗透率是否过大边界井点是否重复设置计算文件过大保存频率过高 / 三维模型降低输出频率尽量先跑二维5.4 一点个人经验与后续扩展方向做到这里如果你已经把一套含裂缝地层的热流耦合模型跑通拿到了可信的温度场和生产井温度曲线那么这个项目的核心目标就完成了一半。剩下的一半是“反演”和“预测”。我的个人习惯是正式模型一定先用简化的概念模型验证参数敏感性再叠加真实井史数据。裂缝渗透率、开度、延伸长度这三个参数对热突破时间影响最大。裂缝渗透率每增加一个数量级热突破时间可能缩短一半以上裂缝延伸长度从 150 m 增加到 350 m热突破时间的缩短幅度比渗透率变化更明显。所以做敏感性分析时这两个参数优先扫。后续如果要扩展我会建议往三个方向走一是把模型扩展成三维并加入多组裂缝网络模拟更真实的地质结构二是在流动部分引入非达西修正当裂缝内流速较高时使用 Forchheimer 项避免高估流量三是引入示踪剂或化学物质输运方程结合现场示踪试验数据同步标定裂缝参数这样预测的可信度会大幅提升。说到底含裂缝地层的流动与传热耦合模拟真正难的并不是 COMSOL 操作本身而是对裂缝主导地位的自觉——什么时候该把裂缝显式建模哪些参数需要标定热突破为什么会比想象中来得快。把这些想清楚模型就成功了一大半。
阅读完成 · 觉得有帮助?
咨询建站