文章目录
MRST(MATLAB Reservoir Simulation Toolbox,MATLAB油藏模拟工具包)是由挪威科学技术大学(NTNU)开发的一个开源油藏模拟研究平台,主要用于教学、科研和原型开发。MRST基于MATLAB环境,提供了一套灵活、模块化的工具,用于构建、求解和可视化多相多组分流体在多孔介质中的流动问题。
一、MRST简介
MRST 是一个功能强大且高度可扩展的油藏模拟工具包,其主要特点包括:
开源与可扩展性
- MRST 是开源的,代码完全公开,用户可以自由查看、修改和扩展。
- 支持用户自定义网格、物性模型、求解器等模块。
灵活的网格处理能力
- 支持结构化和非结构化网格(如角点网格、PEBI网格等)。
- 可导入Eclipse格式(.GRID、.EGRID、.DATA等)的工业标准网格。
- 提供网格生成、简化、聚合(aggregation)等功能。
多相流模拟功能
- 支持黑油模型(Black-oil)、组分模型(Compositional)、单相流、两相/三相流等。
- 包含IMPES(隐式压力显式饱和度)、Fully Implicit(全隐式)等求解策略。
高级物理模型支持
- 可模拟重力、毛管力、相对渗透率、PVT物性等。
- 支持裂缝建模(使用嵌入式离散裂缝模型,EDFM)、聚合粗化(AMG)、井控策略等。
可视化与后处理
- 利用MATLAB强大的绘图功能,提供丰富的可视化工具(如压力场、饱和度分布、流线、通量等)。
- 支持动画、剖面图、等值线图等。
与工业软件兼容
- 可读取和写入Eclipse输入/输出文件,便于与工业标准模拟器(如Eclipse、INTERSECT)进行对比验证。
教学与研究导向
- 提供大量示例脚本(tutorials),适合教学和快速原型开发。
- 模块化设计便于理解油藏模拟的核心算法(如有限体积法、线性求解器等)。
二、MRST的安装与配置
系统要求
- MATLAB R2015b 或更高版本(推荐R2020a以上)。
- 至少4GB内存,建议8GB以上用于大型模型。
安装步骤
(1)下载MRST
访问官方网站:https://www.sintef.no/projectweb/mrst/
下载最新版本(如 mrst-2023a.zip)。(2)解压到本地目录
例如:C:\mrst\mrst-2023a(3)在MATLAB中添加路径
cd('C:\mrst\mrst-2023a'); startup;
startup.m
脚本会自动添加所有必要的子模块路径。(4)验证安装
运行一个示例:two_phase_flow_simple();
若成功显示压力和饱和度演化动画,则安装成功。
三、MRST基本使用流程
一个典型的MRST模拟流程包括以下步骤:
- 创建或导入网格
- 定义岩石和流体属性
- 设置初始条件和边界条件
- 定义井位和井控方式
- 选择求解器并运行模拟
- 可视化结果
示例:二维两相油水驱替模拟
% 1. 创建一个简单的二维网格
nx = 40; ny = 40; nz = 1;
G = cartGrid([nx, ny, nz]); % 创建结构化网格
G = computeGeometry(G); % 计算几何信息(体积、面积等)
% 2. 定义岩石属性(渗透率、孔隙度)
k = 100 * ones(G.cells.num, 1); % 渗透率 (md)
phi = 0.2 * ones(G.cells.num, 1); % 孔隙度
rock = struct('poro', phi, 'perm', convertFrom(k, 'milli*darcy'));
% 3. 定义流体(油和水)
fluid = initSimpleFluid('mu', [1, 3]*centi*poise, ... % 粘度
'rho', [800, 1000]*kilo*gram/meter^3, ... % 密度
'n', [2, 2]); % 相对渗透率指数
% 4. 设置初始条件
S = initResSol(G, 0.2); % 初始含水饱和度为0.2
% 5. 定义井(注入水在左下角,生产在右上角)
W = [addWell([], G, rock, 1, 1, 1, 'type', 'bhp', 'val', 200*barsa, 'name', 'INJ', 'comp', [0, 1]) ...
addWell([], G, rock, nx, ny, 1, 'type', 'bhp', 'val', 100*barsa, 'name', 'PROD', 'comp', [1, 0])];
% 6. 设置模拟时间
tEnd = 100 * day();
nSteps = 50;
% 7. 运行IMPES求解器
sol = [];
for i = 1:nSteps
[sol, ~, W] = solveIncompFlowIMPES(G, [], rock, fluid, sol, W, tEnd/nSteps);
S = addSol(sol, 'S', S.sol(:,2)); % 更新饱和度
end
% 8. 可视化结果
clf;
plotCellData(G, S.sol(:,2)); % 绘制含水饱和度
title('Water Saturation');
colorbar;
view(2); axis tight;
四、MRST的高级功能
黑油模型(Black-oil)
使用blackoil
模块可模拟油、气、水三相,包含溶解气、挥发油等复杂现象。聚合多重网格(AMG)加速求解
使用 algebraicMultiscaleSolver 提高大规模问题的求解效率。嵌入式离散裂缝模型(EDFM)
用于模拟裂缝性油藏,支持复杂裂缝网络。优化与历史拟合
结合MATLAB优化工具箱,可用于参数反演和历史拟合。GPU加速(实验性)
部分模块支持GPU计算(需Parallel Computing Toolbox)。
五、优缺点总结
✅ 优点:
- 开源免费,适合学术研究。
- 模块化设计,易于理解和扩展。
- 强大的网格处理和可视化能力。
- 与工业标准兼容,便于验证。
❌ 缺点:
- 基于MATLAB,运行速度不如C++编写的商业软件(如Eclipse)。
- 不适合超大规模现场模型的工业级生产模拟。
- 需要MATLAB许可证(非免费)。
六、学习资源
- 官方网站:https://www.sintef.no/projectweb/mrst/
- 在线文档与教程:https://www.sintef.no/projectweb/mrst/documentation/
- GitHub仓库(部分模块):https://github.com/sintefmath/MRST
- 示例脚本:安装目录下的
examples/
和tutorials/
文件夹。
总结
MRST 是一个非常适合油藏工程研究人员、教师和学生的强大工具。它不仅能够实现从基础到高级的油藏模拟功能,还为算法开发和新模型验证提供了理想的实验平台。虽然在工业生产中可能不如商业软件高效,但在科研创新和教育领域具有不可替代的价值。