COMSOL含裂缝地层流动和传热耦合油藏数值模拟COMSOL裂缝流动包含注入井与生产井考虑裂缝交叉。裂缝性油藏开发总带着点地下迷宫的魔幻感。去年在页岩气项目里被裂缝网络搞到头皮发麻的经历还记忆犹新今天咱们用COMSOL玩点实在的——从注入井到生产井的全流程裂缝耦合模拟带交叉裂缝的那种。几何建模阶段建议直接上CAD文件导入毕竟手动画交叉裂缝容易手抖。但为演示方便这里用代码生成两条60°交叉裂缝% COMSOL with MATLAB model ModelUtil.create(FracModel); geom model.geom.create(geom, 2); % 主裂缝 frac1 geom.create(frac1, Line); frac1.set(p1, [0, -0.5]); frac1.set(p2, [0, 0.5]); % 交叉裂缝 frac2 geom.create(frac2, Line); frac2.set(p1, [-0.4*cosd(60), -0.4*sind(60)]); frac2.set(p2, [0.4*cosd(60), 0.4*sind(60)]);注意交叉点坐标的计算这里用60度夹角演示典型缝网交织情况。实际项目中遇到过85度交叉缝导致计算发散的情况这时候需要调整网格尺寸函数。物理场设置有个坑裂缝内的达西流和基质流动的耦合方式。推荐使用离散裂缝模型这样可以直接在裂缝线上定义高渗透率区域% 裂缝流动参数 physics.get(fpm).feature(cpl1).active(false); //关闭连续介质假设 physics.get(fpm).feature.create(dfn1, DiscreteFracture, 2); dfn1 physics.get(fpm).feature(dfn1); dfn1.set(k, 1e-12[m^2]); //裂缝渗透率 dfn1.set(porosity, 0.35);这里把裂缝当作独立维度处理相当于在二维模型中嵌入一维流动单元。遇到过新手忘记关闭连续介质参数导致计算结果完全失真切记检查这个开关。生产井处理有个骚操作在井点位置创建点源项。配合时间函数模拟不同开采阶段% 生产井定义 srcTerm physics.get(fpm).feature.create(src1, PointSource, 2); srcTerm.set(Selection, [geom1_生产井坐标点ID]); srcTerm.set(MassFlowRate, -0.1[kg/s]*step1(t)); //负号表示流出用阶跃函数step1控制生产时机比直接设置固定流量更符合现场开关井操作。实测发现这样处理数值稳定性更好特别是在瞬态模拟初期阶段。COMSOL含裂缝地层流动和传热耦合油藏数值模拟COMSOL裂缝流动包含注入井与生产井考虑裂缝交叉。交叉裂缝处的网格需要特殊关照。分享个实用脚本mesh model.mesh.create(mesh1); mesh.geom(geom); mesh.autoMeshSize(3); //全局粗网格 % 在交叉点附近加密 mesh.feature.create(ftr1, Size); ftr1 mesh.feature(ftr1); ftr1.set(custom, on); ftr1.set(hmax, 0.01); ftr1.selection.geom(geom, 0); //选择交叉点遇到过交叉处网格过粗导致质量不守恒的情况建议加密范围至少覆盖交叉点周围三个网格尺寸。最近项目中发现用曲率自适应网格能更好捕捉渗流前锋不过计算成本会翻倍。求解器设置建议分两步走先稳态后瞬态。这样能有效避免初始条件不合理导致的崩溃study model.study.create(std1); study.create(stat, Steady); study.create(time, Transient); % 瞬态求解器参数 solver model.sol.create(sol1); solver.study(std1); solver.attach(std1); solver.create(st1, StudyStep); solver.create(v1, Variables); solver.create(t1, Time); t1 solver.feature(t1); t1.set(tlist, range(0,10,3600)); //1小时步长曾在24核服务器上跑过72小时的瞬态模拟结果因为时间步长设置问题导致跑了三天还没完...后来改成变步长BDF方法才救回来这是后话了。后处理阶段重点看裂缝间的流体窜流。用这个截面线图能清晰显示交叉处的流动特征% 沿交叉缝的流速分布 plot model.result.create(plot1, LineGraph); plot.set(data, dset1); plot.set(expr, spf.U); plot.set(line, intersection); //自动捕捉交叉线最近发现用流线图叠加温度云图效果更直观特别是观察热突破现象时红色高温区顺着主裂缝突进的样子特别有警示作用。调试过程中最常遇到的报错是矩阵奇异八成是裂缝与基质连接设置不当。这时候要检查离散裂缝是否正确关联到物理场交叉点处的节点是否共享井点是否精确落在网格节点上有次半夜debug发现是注入井坐标偏移了1e-6米导致不收敛这种精度问题真是防不胜防。最后说个实战技巧处理大规模裂缝网络时试试把交叉缝拆分为独立线段。虽然几何处理麻烦点但能显著提升求解稳定性。特别是当使用嵌入式离散裂缝方法时这种化整为零的策略能让残差收敛得更丝滑。