ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于COMSOL相场方法的裂缝性油气藏渗吸模拟:从单裂缝到多孔介质耦合

基于COMSOL相场方法的裂缝性油气藏渗吸模拟:从单裂缝到多孔介质耦合 做裂缝性油气藏渗吸模拟的人大多绕不开COMSOL的相场方法。我在尝试用COMSOL模拟裂缝多孔介质中的自发渗吸时走过不少弯路——从最简单的直缝推进一路做到随机裂缝网络与孔隙结构耦合。这篇文章就记录我“从简单到复杂”的完整探索过程相场参数怎么调、裂缝几何怎么建、裂缝和基质之间的边界怎么耦合以及那些真正会把你卡住的问题。1. 项目定位与整体设计思路1.1 为什么用相场方法处理渗吸先交代背景。渗吸指的是润湿相流体在毛管力作用下自发进入多孔介质的过程。在裂缝性油气藏开发里压裂液或注入水进入裂缝以后会顺着裂缝快速向前推进同时不断向周围致密基质里渗。这个裂缝与基质之间的流体交换直接决定压裂液返排率、注入水波及范围这些关键指标。所以模拟渗吸的核心难点是如何同时捕捉两种差异极大的流动模式裂缝中的快速两相界面移动以及基质里的缓慢渗流。传统界面追踪方法有两个主流VOF和Level Set。VOF对质量守恒非常友好液滴体积不容易跑丢但在复杂裂缝交叉处界面几何重构容易出错而且你想让界面形状保持平滑需要额外做一堆处理。Level Set的界面表示很平滑拓扑变化方便但质量守恒经常出问题模拟到后面液体总量悄悄减少这在渗吸这种长时间演化问题里是致命的。相场方法则换了一套思路它不直接追踪界面而是用一个连续变化的标量场来描述两相状态界面被视为一个有限厚度的过渡层由Cahn-Hilliard方程控制其演化。这种方法的天然优势是界面分裂、合并、拓扑变化都能自动处理不需要人为干预。把相场放到COMSOL里还有一个工程层面的优势表面张力不再通过界面曲率显式计算而是被转化为体积力自动耦合进Navier-Stokes方程。对裂缝这种狭窄几何来说力的计算稳定性比界面逻辑本身更关键这也是我最终选相场的原因。1.2 从简单到复杂的三级建模路径如果你一上来就直接建一个随机裂缝网络加上多孔介质基质的模型大概率一个晚上都在调收敛最后气得想砸鼠标。我的经验是先建一个简单到不能再简单的模型跑通了再逐步加复杂度。这样出问题时你能快速定位到底是几何问题、物理问题还是纯数值问题。我建议的路径分三级单条平直裂缝验证相场基本参数和渗吸基础现象目标是让界面能稳定推进不散、不乱。多裂缝交叉网络加入几何复杂度观察裂缝之间的连通性如何影响水相优先通道。裂缝加多孔介质基质把多孔介质以合理方式叠加上去让水从裂缝渗入基质观察真正的“渗吸”。每一步只增加一个复杂度变量。这个习惯帮我解决过很多莫名其妙的问题因为模型一旦崩了你几乎能立刻判断是这一层新增的因素引起的。还需要提前点出一个建模思想问题所谓“多孔介质”在COMSOL里有两种完全不同的处理思路。一种是孔隙尺度建模把颗粒骨架直接画出来孔隙空间用相场两相流去模拟另一种是等效连续介质用Darcy定律描述基质内部流动不把每个孔隙画出来。两种思路各有代价前者真实但计算量巨大后者高效但需要额外校准毛管压力曲线。后面会详细展开这两种路线该怎么取舍。1.3 COMSOL接口选型我用的物理场接口是COMSOL自带的“层流两相流相场”接口。这个接口把层流Navier-Stokes、Cahn-Hilliard相场方程、表面张力体积力串联在一起建模时不需要自己去写弱形式方程省了很多功夫。如果你需要把Darcy区域加进来还需要额外启用“多孔介质”模块使用Darcy定律接口处理基质部分。关于接口有一个经验值得说很多教程会让你直接用“层流两相流”再加“相场初始化”但如果你在接口选择里直接勾选“层流两相流相场”COMSOL会自动生成相场变量、初始化步骤和体积力耦合比手动连接省事得多也不容易漏掉耦合边界。2. 第一阶段单裂缝中的渗吸模拟2.1 几何构建与初始界面设置单裂缝模型我建得很朴素一个二维矩形区域长10 mm高0.5 mm代表一段裂缝的剖面。为什么从二维开始三维相场模拟计算量是二维的十几倍刚开始探索真没必要上三维先搞清楚物理机制和参数手感更重要。几何构建里有几个关键操作第一在矩形两端各加一个扩展段表示入口和出口然后用“组合对象”合并成一个域避免内部边界影响计算第二初始界面用一条竖直线近似通过解析函数或阶跃函数定义在入口段与裂缝段的交界处第三务必在初始界面附近预留网格细化区域否则相场初始化第一步就会出现界面被“拉扯”的假象。我在这个阶段反复调整的一个细节是初始界面的位置不要紧贴着入口边界。如果界面离入口边界太近进入边界的流体和初始界面会互相干扰产生一个虚假的压力冲击波。留出至少0.5 mm到1 mm的距离让流体进入后有缓冲空间界面演化会更自然。2.2 相场接口的3个核心参数相场参数调节是重头戏核心参数有三个表面张力σ、界面厚度参数ε、迁移率M。σ直接取水的物理性质0.072 N/m这个没什么好调的。真正容易翻车的是ε和M。界面厚度ε控制相场变量从0过渡到1的宽度。数值上ε太小界面附近需要极细网格计算量爆炸ε太大界面会弥散得很宽模拟结果明显偏离物理。按COMSOL文献的推荐ε取特征网格尺寸的50%到100%并且要保证界面区域至少覆盖2到3个网格单元。以我的模型为例界面附近最细网格是0.005 mm那ε就可以取0.01 mm。这里有一点新手很容易误解ε不是按物理孔径选的而是与网格尺寸配套选的。你没看错这是一个数值参数不是一个物理参数。注意界面厚度ε和网格尺寸是配套的不是按真实物理界面厚度取的。我见过不少新手一上来把ε设成2e-7这种小值最后模型网格破百万纯属自己给自己加戏。迁移率M控制界面松弛速度本质上决定了Cahn-Hilliard方程中界面扩散运动的阻尼。COMSOL默认迁移率表达式与ε²和σ有关通常可以直接用默认值。我习惯先用默认值跑一遍如果发现界面出现“薄膜断裂”或者质量守恒误差偏大再把M调大或调小1到2个数量级。可以这样理解M像界面运动的“润滑剂”太小界面僵硬容易产生非物理的碎块太大界面过度平滑细节全被抹掉。2.3 边界条件与求解器配置单裂缝模拟的边界条件并不复杂但有三个位置需要仔细设置。入口边界我优先使用压力边界而不是速度边界。因为渗吸本质上就是毛管力驱动的自发过程用压力边界更容易贴近物理本质。比如一个高于环境压力50 Pa的压力入口让水和空气在压力差和毛管力共同作用下推进。出口边界设置为压力等于0的开口边界并勾选允许回流。壁面边界设置为“润湿壁”显式给定接触角。这个是重中之重接触角控制了毛管力方向和大小亲水裂缝取30度疏水裂缝取120度要在这个边界条件里明确指定只靠材料属性的接触角不可以自动生效。求解器方面我用瞬态研究PARDISO直接求解器。相场问题是强非线性的刚开始把时间步设小一点比如0.001 s后面交给自动时间步进机制接管。相对容差建议设在1e-3到1e-4之间太粗糙会看到界面前沿抖动太细会慢到怀疑人生。过去我习惯把容差卡得很小比如1e-6结果发现计算时间翻了几倍结果几乎没差别纯属浪费。3. 第二阶段裂缝网络与多孔介质基质的嵌入3.1 多裂缝交叉几何的构建单裂缝跑通之后我开始加裂缝网络的几何复杂度。最简单的实验是十字交叉然后是倾斜交叉最后用COMSOL的阵列功能生成多条平行加分支的裂缝网络。这里有一个很实用的操作心得不要用一个个矩形去拼裂缝再用布尔操作合并。那样做裂缝交叉处容易出现重合几何和退化单元网格质量必然很糟糕。更好的做法是用折线或样条曲线创建裂缝骨架然后用拉伸操作生成带有圆角或矩形截面的裂缝域交叉位置能自动处理好连续性。如果你想做更接近真实岩石的随机裂缝网络可以走两条路。一条是在COMSOL里用全局定义写随机位置参数配合几何零件库去生成另一条是从MATLAB或CAD导入DFN离散裂缝网络模型。DFN听起来高大上但我的建议是从少量确定性裂缝开始比如三五条交叉裂缝逐步增加数量比一上来就导几百条随机裂缝要稳得多。每增加一批裂缝都要重新检查网格单元质量裂缝交叉点附近的网格长宽比经常能差出两个数量级这是后期不收敛的常见元凶。3.2 多孔介质基质的三种嵌入方式处理基质区域才算真正进入“裂缝多孔介质”的范畴。我分别试过三种主流方式各自优缺点都踩过一遍。第一种全孔隙结构几何直接建一个颗粒堆积体把颗粒之间的空间当作孔隙与裂缝直接连通。这种模型物理上最真实所有渗吸细节都是显式模拟出来的。缺点也很明显网格量巨大相场界面要挤过狭窄孔隙时间步被压到很小模拟一天只能跑零点几秒的物理时间。我建议只用在很小的局部区域验证机理时做不适合全尺寸工程模拟。第二种Darcy等效介质。基质区域不画孔隙直接用Darcy定律物理场设置孔隙度比如0.2渗透率比如1e-14 m²。这种方式效率高能够覆盖较大区域但需要对基质毛管压力曲线做额外标定一般用Brooks-Corey或van Genuchten模型给饱和度与毛管压力的关系。这是工程实用路线。第三种全Darcy两相流裂缝和基质都用宏观两相Darcy去描述不追踪界面。这一类实际上已经不是相场方法了很多工业级渗吸模拟用它。但如果你想保持“相场追踪界面”这个特点重点应该看第一种和第二种的组合。3.3 裂缝-基质界面耦合我最推荐的设置我最终采用的方案是“近缝区域相场自由流加远处Darcy基质的混合模型”。在裂缝附近和紧邻裂缝的孔隙区域我用相场两相流去追踪界面形态在远离裂缝的基质区域我用Darcy定律去描述渗流。两者在内部交界面上通过压力连续和法向流量守恒耦合起来。在COMSOL里的具体操作我摸索了一套稳定流程第一在几何里把近缝域和远场域用一条共享边分开设置成内部边界。第二物理场使用两个接口“层流两相流相场”作用在近缝域“Darcy定律”作用在远场域。第三利用多物理场耦合节点的“压力一致性”选项把交界面两侧的压力关联起来。第四给Darcy区域设置一个毛管压力约束上限。这个约束很关键因为基质渗透率低时裂缝水向基质推进会在交界面产生虚假的高压区甚至导致水流倒流。用基质最大毛管压力做上限能把这个伪影压住。这个混合模型最大的好处是裂缝中前沿形态保留完整的相场细节同时不用为整个基质内部超细的孔隙网格买单。缺点是需要对交界面条件做仔细调试前期多花点时间在数值验证上是值得的。4. 关键物理参数与数值实验设计4.1 润湿性是如何影响渗吸的相场模拟最吸引人的地方就是能直观看到润湿性改变导致渗吸行为完全不同。亲水裂缝接触角小于90度水沿壁面铺展界面前沿有明显的爬行现象渗吸速度快疏水裂缝接触角大于90度水像不情愿一样待在裂缝里可能形成不规则的流体团渗吸速度慢甚至完全不渗吸。实际操作中接触角对渗吸速度的影响经常是非线性的。我把接触角从60度调到30度渗吸前沿的推进速度能快两三倍。所以在做参数扫描时接触角是我第一个要扫的参数。COMSOL的参数化扫描功能可以批量跑非常省心。这里要提醒一个单位问题接触角在COMSOL里默认单位是度如果在参数表里不小心用了弧度表面看不出异常但润湿壁行为会完全偏离预期。4.2 尺度效应裂缝宽度与孔隙尺寸相场模拟里尺度选择是个绕不开的难题。真实裂缝宽度可能从几十微米到几毫米孔隙尺度更小但你不可能在完整模型里把所有小孔隙都用相场直接画出来。数值上有个重要约束如果裂缝宽度w和界面厚度ε之比太小比如w/ε小于10界面厚度就开始影响流体受力模拟结果不可信。我的经验法则是w最好至少是ε的20到50倍。举个例子如果ε0.01 mm那裂缝宽度至少要0.2到0.5 mm否则你模拟出来的不是裂缝中的真实流动而是“界面厚度被挤变形”的假象。孔隙尺寸也有类似的限制。如果你想在相场里模拟一个孤立小孔中的渗吸孔直径不能只比网格大3到5倍那样界面根本没法挤进去。这是很多人在微观模拟里结果异常的原因界面在窄喉处卡住不是因为物理上真的被卡住而是数值分辨率不够。解决方式还是回到上一节说的小孔隙区域用Darcy等效模型避免直接相场。4.3 无量纲参数怎么设计渗吸模拟实验做数值实验前我会先算几个无量纲数心里大概有个预期哪些机理占主导。最核心的是毛细数Ca等于μu/σ。它表示粘性力与毛管力的比值。渗吸过程中毛管力应该占主导Ca应该尽量在1e-6到1e-3量级。算一个例子如果水黏度0.001 Pa·s入口速度0.005 m/s表面张力0.072 N/m那么Ca大约就是7e-5属于明显的毛管力主导。如果你把入口速度调大到0.5 m/sCa变成7e-3模拟就从“自发渗吸”变成了“粘性驱替”物理性质完全变了。雷诺数Re ρuL/μ也要心里有数。裂缝宽度小、流速低Re通常远小于1层流假设完全成立。如果结果里出现非物理的涡旋或振荡先回头检查Re是不是大到偏离层流范围了。我建议做一组“接触角-毛细数”双参数扫描。接触角取30、60、90度三个水平Ca取1e-5、1e-4、1e-3三个水平一共9组。COMSOL参数化扫描跑完这9组基本就能摸清这个体系在哪个参数区域以哪种机理为主。这份参数矩阵也是后期写论文或做汇报时的好素材。5. 典型结果解读与常见问题排查5.1 应该看到什么样的渗吸现象模拟跑完拿到结果我会先看三件事裂缝中的水是否形成清晰的向前舌形前锋前锋是否在向两侧基质侧向侵入界面附近有没有非物理的碎块或“孤岛”。一个典型结果场景是这样的亲水裂缝接触角30度水由入口进入初期界面快速沿裂缝推进同时两侧基质开始出现缓慢的湿润范围。30秒后裂缝中的水头已经推进了很大一段距离而基质中的渗吸深度大概只有裂缝推进距离的几分之一呈现明显的“裂缝优先型”形态。反之如果基质渗透率高而且强亲水你会看到裂缝内水推进同时侧向渗吸深度均匀增长渗吸深度与时间的平方根成正比这是典型的“基质控制型”。除了云图我强烈建议你把沿裂缝轴线的压力剖面导出来看。如果能观察到两个明显不同的压力梯度区段说明裂缝段和基质段驱动力来源不同这份数据对解读机理非常有用。5.2 我从实操中踩过的5个坑做相场渗吸模拟真的不是开箱即用。下面这些坑我基本都踩过有的甚至卡了一整天。坑1初始界面设置导致瞬时压力尖峰。初始界面一设置好如果压力场没有经过初始化界面附近立刻能看到速度剧烈震荡。解决办法是把初始压力场设成与毛管压力平衡的分布或者先跑一个极短的“初始瞬态”阶段把压力尖峰消掉再做正式模拟。这个坑很隐蔽因为从云图上可能看不出来但速度场里已经一团乱麻。坑2界面厚度ε设得太小导致网格爆炸。我一度追求“足够精细”把ε设到1e-6这个量级然后COMSOL自动生成的网格简直像蜘蛛网一样密模型直接卡得动弹不了。后来老实回到“ε和网格配套”的思路先跑通再逐步加密效率高得多。坑3迁移率M调大后质量不守恒。如果你在“全局计算”里发现水相体积随时间在减少大概率是M太大了。相场方法的扩散项如果过强会让界面扩散速度超过物理速度水看起来就像凭空消失。解决办法是把M降到默认值的1/5到1/10重新跑一遍看看体积守恒曲线有没有改善。坑4接触角只在润湿壁上生效。很多人设了接触角却看不到壁面效应仔细检查以后发现物理场里根本没有“润湿壁”边界条件。COMSOL默认壁面是“无滑移、零通量”它不会自动应用接触角。这个坑我浪费过不少时间现在每次建模都会专门检查一遍边界条件类型有没有给对。坑5Darcy耦合区域出现压力反冲。混合模型里裂缝水向基质推进时如果基质渗透率太低会在交界面产生虚假高压区甚至导致水流倒流。解决办法是给Darcy区域设置一个合理的毛管压力上限由基质孔径计算得到让压力受物理约束。检查的时候可以看交界面上的压力剖面如果有异常的高压尖峰就是这个问题。我做了一个常用的排错速查表症状可能原因快速排查方法界面抖动时间步太大或容差太粗减小初始时间步、收紧相对容差界面过宽ε过大将ε降至网格尺寸的50%左右水相体积减少M过大将M降一个数量级重算壁面接触角无效缺少润湿壁边界检查边界条件类型裂缝-基质界面高压基质渗透率过低检查毛管压力上限设置计算太慢网格在全局过密只在界面和近缝处细化其余区域切到粗网格这个表格基本是我日常排错的顺序多数问题按这个顺序查都能定位出来。说实话COMSOL里做相场方法模拟裂缝多孔介质渗吸真的不是照着教程点一遍就能出结果的事。从参数选取、几何构建到裂缝-基质耦合方式每一步都要结合具体物理问题去反复试。我自己最深的体会是别急着追复杂模型先把单裂缝跑准搞清楚ε、M、接触角这些参数对结果的影响手感再去叠加裂缝网络和多孔介质每一步都留个计算日志把关键参数和结果特征记录下来。这样不仅复现方便后面遇到要模拟页岩压裂液返排、煤层气注水驱替这类问题时这套“从简单到复杂”的路径也能直接迁移只需要把岩石物性、润湿性和边界条件重新标定一遍就行。最后再分享一个小经验参数扫描时把结果按照“饱和度场加压力剖面”的组合导出比只存云图有用得多后期的数据分析和机理判断都靠这些定量信息。
返回列表