COMSOL三维非均质储层的水驱油模型,适用于油藏注水开发模拟。 模型为非均质模型,利用地质统计学模拟得到储层的非均质性,加载到comsol中,表征渗透率的非均质性。 物理场为达西定律,模型收敛性较好,可在此基础上做耦合。 此模型不包含任何文献。
咱今天来盘一盘COMSOL里整活三维非均质油藏水驱模型的骚操作。搞油藏模拟的都知道,储层那渗透率分布就跟老奶奶的皱纹似的——深一道浅一道完全没规律。传统均匀模型那都是幼儿园玩具,真家伙得靠地质统计学整出随机但符合地质规律的渗透率场。
先整点渗透率生成的黑科技(上Python代码):
import gstools as gs model = gs.Gaussian(dim=3, var=0.5, len_scale=20) srf = gs.SRF(model, seed=1984) srf.structured([0, 50, 100], [0, 50, 100], [0, 20, 40]) perm_field = 10**((srf() * 0.8 + 2) * 0.3) # 对数正态分布转换这段代码用高斯随机场生成器搞了个三维渗透率分布。var参数控制变异强度,len_scale是相关长度,最后那个指数操作把数据掰成油藏工程常用的毫达西量级。注意seed值别乱改,不然审稿人复现不出来要骂街。
把生成的渗透率场塞进COMSOL时得玩点花活:在材料属性里选"从文件导入",建议用HDF5格式存三维数组。记得把网格坐标系和Python生成的网格点对齐,否则会出现渗透率场和模型"错位"的惨案。有个邪门技巧——在导入前把单位改成SI制,COMSOL有时候会偷偷做单位换算坑人。
达西定律的配置要特别注意边界条件:
// COMSOL LiveLink代码片段 model.physics("darcy").feature("inlet").set("V0", "1e-6[m/s]"); model.physics("darcy").feature("outlet").set("p0", "10[MPa]"); model.physics("darcy").feature("init").set("p", "20[MPa]");入口用速度边界,出口定压力边界,初始压力场建议设置为原始地层压力。这里单位书写必须带方括号,不然COMSOL的语法解析器会懵逼。收敛性这块,建议先用稳态求解器找感觉,再切到瞬态模式浪。
后处理阶段整点可视化骚操作:在截面图上同时显示渗透率云图和流线,用粒子追踪功能模拟水驱前缘运动。有个隐藏技巧——在导出动画时,把帧率调到24fps并开启运动模糊,这样汇报时PPT档次直接拉满。
模型扩展性这块可以玩的很野:把渗透率场和应变场耦合搞出动态渗透率变化;或者把达西定律和热传导方程捆绑,模拟注水温度对采收率的影响。不过要注意耦合方程数量别超过4个,否则工作站内存要起义。
最后提醒萌新:非均质模型算例建议从20万网格起步,记得开启多核并行。遇到不收敛先查渗透率极值——别让某个网格的渗透率比邻居高三个数量级,这种极端非均质COMSOL会直接摆烂罢工。