
COMSOL模拟含裂缝地层流动与传热耦合及油藏数值模拟:注入井与生产井的交叉裂
缝流动分析
裂缝性地层的渗流问题总能让人血压拉满——注入井和生产井之间那些歪七扭八的裂缝网络,活像
被熊孩子扯烂的蜘蛛网。最近用COMSOL折腾了个裂缝交叉的油藏模型,带传热耦合的那种,记录几个实战
要点。
先看裂缝建模这个老大难。COMSOL里处理交叉裂缝有个骚操作:用二维线段模拟裂缝网络,再通过"
线到面的升维"生成裂缝单元。比如下面这段代码定义裂缝交叉点:
```matlab
% 创建裂缝交叉拓扑
frac_lines = [0.2 0.8; 0.5 0.5; 0.8 0.2]; % 裂缝线坐标
intersect_point = [0.5, 0.5]; % 强制设置交叉点
model.geom('geom1').feature().create('frac1', 'Line');
model.geom('geom1').feature('frac1').set('p', [0.2 0.8; 0.5 0.5]);
```
注意这里手动指定交叉点坐标,避免自动检测可能出现的拓扑错误。毕竟地层裂缝可不是数学课上
那种完美交叉的直线,野外实测数据里经常出现"藕断丝连"型的局部连通。
传热耦合的核心在于设置多物理场接口。达西流模块和热传导模块的联姻代码长这样:
```matlab
physics('darcy').link(therm); % 物理场耦合
physics('darcy').prop('rho').set('expression', '1000*(1-0.0002*(T-293))');
% 温度影响流体密度
```
这里有个魔鬼细节——流体密度随温度变化的非线性关系直接影响压力场分布。实际跑模拟时遇到
过温度变化导致迭代不收敛的情况,后来在求解器设置里勾选"非线性增强"才搞定。
生产井和注入井的边界条件设置是另一个深坑。比如生产井的井底流压约束:
```matlab
% 生产井边界条件
bnd_cond = model.physics('darcy').feature.create('prod_well', 'Pressure', 1);
bnd_cond.selection.set([3]); % 选择井边界
bnd_cond.set('p0', '50*bar'); % 井底流压