【mrst】

clear
mrstModule add ad-core ad-blackoil ad-props mrst-gui deckformat diagnostics
mrstModule add ad-eor
%%
N     = 10;
N1    = 2*N;
N2    = 3*ceil(N/2)-2;
[X, Y] = meshgrid(0:1:N1, 0:1:N2);
X     = sqrt(3) / 2 * X;
Y(:,2:2:end)=Y(:,2:2:end)+0.5;
p     = [X(:), Y(:)];
t     = delaunayn(p);
G     = triangleGrid(p, t);
G     = pebi(G);
G     = computeGeometry(G);

figure, plotGrid(G)
%%
rock = makeRock(G, 0.5*darcy, 0.3);
%%
fluid = initSimpleADIFluid('phases', 'OW', ...
                           'mu',      [8, 1]*centi*poise, ...
                           'rho',     [650, 1000]*kilogram/meter^3 , ...
                           'n',       [2, 2], ...
                           'pRef',    100*barsa, ...
                           'c',       [1e-5, 1e-4]/barsa, ...
                           'cR',      1e-5/barsa);
%%
gravity reset on
model = TwoPhaseOilWaterModel(G, rock, fluid);

%%
W = [];
injRate = 2 * (meter^3/day);
wc = 30;
W = addWell(W, G, rock, wc, 'Name', 'I1',...
    'sign', 1,  'comp_i', [1, 0], 'Val', injRate, 'Type', 'rate', 'dir','Z');

bhp = 10 * (mega*Pascal);
wc = 180;
W = addWell(W, G, rock, wc, 'Name', 'P1',...
    'sign', -1,  'comp_i', [0.5, 0.5], 'Val', bhp, 'Type', 'bhp', 'dir','Z');


bhp = 10 * (mega*Pascal);
wc = 250;
W = addWell(W, G, rock, wc, 'Name', 'P2',...
    'sign', -1,  'comp_i', [0.5, 0.5], 'Val', bhp, 'Type', 'bhp', 'dir','Z');


% figure, hold on
% plotGrid(G, 'facecolor', 'n')
% plotGrid(G, vertcat(W.cells))

timesteps = [ones(10,1)*1*day; ones(10,1)*10*day];
schedule = simpleSchedule(timesteps, 'W', W);
%%
initState = initResSol(G, 30*(mega*Pascal), [0, 1]);
%%
fn = getPlotAfterStep(initState, model, schedule, 'plotReservoir',false, 'plotWell', false);

model.fluid.alpha = 0;
model.fluid.tpg   = 0;
[wellSols1, states1, report1] = ...
   simulateScheduleAD(initState, model, schedule,'afterStepFn',fn);

model.fluid.alpha = 0;
model.fluid.tpg   = 1e3;
[wellSols2, states2, report2] = ...
   simulateScheduleAD(initState, model, schedule,'afterStepFn',fn);
%%
plotWellSols({wellSols1, wellSols2})
%%
figure
subplot(1,2,1)
plotCellData(G, states1{end-1}.perm/(milli*darcy))
axis equal off
colorbar('location', 'south')

subplot(1,2,2)
plotCellData(G, states2{end-1}.perm/(milli*darcy))
axis equal off
colorbar('location', 'south')
%%
figure
subplot(1,2,1)
plotCellData(G, states1{end-1}.pressure)
axis equal off
colorbar('location', 'south')

subplot(1,2,2)
plotCellData(G, states2{end-1}.pressure)
axis equal off
colorbar('location', 'south')

运行结果是:

代码用MATLAB编写的,主要是进行油水两相流的模拟。以下是对代码中每个部分的逐句解释:

  1. mrstModule add ...: 引入MATLAB Reservoir Simulation Toolbox (MRST) 的模块,包括核心模块、黑油模块、物性模块等。

  2. N = 10; N1 = 2*N; N2 = 3*ceil(N/2)-2; ...: 定义了一些网格的参数和生成网格的坐标。

  3. [X, Y] = meshgrid(0:1:N1, 0:1:N2); X = sqrt(3) / 2 * X; Y(:,2:2:end)=Y(:,2:2:end)+0.5; p = [X(:), Y(:)]; t = delaunayn(p); G = triangleGrid(p, t); G = pebi(G); G = computeGeometry(G);: 创建了一个三角形网格,并进行了一些几何处理。

  4. figure, plotGrid(G): 绘制了创建的网格。

  5. rock = makeRock(G, 0.5*darcy, 0.3);: 创建了岩石的属性,包括渗透率和孔隙度。

  6. fluid = initSimpleADIFluid('phases', 'OW', ...: 初始化了两相流体的属性,包括黏度、密度、相对渗透率等。

  7. gravity reset on: 开启了重力效应。

  8. model = TwoPhaseOilWaterModel(G, rock, fluid);: 创建了油水两相流的模型。

  9. W = []; ...: 定义了注入井和产油井的一些属性,包括位置、流量、压力等。

  10. timesteps = [ones(10,1)*1*day; ones(10,1)*10*day]; schedule = simpleSchedule(timesteps, 'W', W);: 定义了模拟的时间步长和生产注入井的调度。

  11. initState = initResSol(G, 30*(mega*Pascal), [0, 1]);: 初始化了初始的储层状态。

  12. fn = getPlotAfterStep(initState, model, schedule, 'plotReservoir',false, 'plotWell', false);: 定义了在每个时间步后绘制的函数。

  13. 模拟了两种情况下的油水两相流,分别为无相变和相变状态。

  14. plotWellSols({wellSols1, wellSols2}): 绘制了两种情况下井口的生产曲线。

  15. 绘制了两种情况下储层渗透率和压力的空间分布。

clear
mrstModule add ad-core ad-blackoil ad-props mrst-gui deckformat diagnostics
%%
fn = 'demo.DATA';
deck = readEclipseDeck(fn);
deck = convertDeckUnits(deck);
%%
G = initEclipseGrid(deck);
G = computeGeometry(G);
% figure;plotGrid(G)
%%
rock  = initEclipseRock(deck);
rock  = compressRock(rock, G.cells.indexMap);

figure;
plotCellData(G, rock.perm(:,1), 'FaceAlpha', 1, 'EdgeAlpha', 1, 'EdgeColor', 'k');
axis tight
%%
fluid = initDeckADIFluid(deck);
%%
gravity reset on
model = TwoPhaseOilWaterModel(G, rock, fluid);
%%
initState = initStateDeck(model, deck);
%%
schedule = convertDeckScheduleToMRST(model, deck);
%%
fn = getPlotAfterStep(initState, model, schedule, 'plotReservoir',false, 'plotWell', false);
               
[wellSols, states, report] = ...
   simulateScheduleAD(initState, model, schedule,'afterStepFn',fn);
%%
figure
plotToolbar(G, states)
%%
plotWellSols(wellSols)
%%
state = states{end};
interactiveDiagnostics(G, rock, schedule.control(1).W, 'state', state, 'computeFlux', false, 'name', 'model');
  1. clear: 清空 MATLAB 工作区的所有变量。

  2. mrstModule add ad-core ad-blackoil ad-props mrst-gui deckformat diagnostics: 添加 MRST(MATLAB Reservoir Simulation Toolbox) 的模块,包括 ad-core、ad-blackoil、ad-props、mrst-gui、deckformat 和 diagnostics。

  3. fn = 'demo.DATA'; deck = readEclipseDeck(fn); deck = convertDeckUnits(deck);: 从名为 'demo.DATA' 的 Eclipse deck 文件中读取数据,然后进行单位转换。

  4. G = initEclipseGrid(deck); G = computeGeometry(G);: 使用 Eclipse deck 数据初始化油藏网格,并计算网格的几何信息。

  5. rock = initEclipseRock(deck); rock = compressRock(rock, G.cells.indexMap);: 使用 Eclipse deck 数据初始化岩石属性,并对岩石进行压缩。

  6. figure; plotCellData(G, rock.perm(:,1), 'FaceAlpha', 1, 'EdgeAlpha', 1, 'EdgeColor', 'k'); axis tight: 绘制岩石的渗透率分布。

  7. fluid = initDeckADIFluid(deck);: 使用 Eclipse deck 数据初始化两相流体的属性。

  8. gravity reset on: 开启重力效应。

  9. model = TwoPhaseOilWaterModel(G, rock, fluid);: 创建油水两相流模型。

  10. initState = initStateDeck(model, deck);: 使用 Eclipse deck 数据初始化初始状态。

  11. schedule = convertDeckScheduleToMRST(model, deck);: 将 Eclipse deck 数据中的调度信息转换为 MRST 中的调度格式。

  12. fn = getPlotAfterStep(initState, model, schedule, 'plotReservoir',false, 'plotWell', false);: 定义在每个时间步后绘制的函数。

  13. 模拟了油藏的生产过程,并获取模拟结果。

  14. figure plotToolbar(G, states): 绘制工具栏,显示模拟过程中的状态。

  15. plotWellSols(wellSols): 绘制井口的生产曲线。

  16. state = states{end}; interactiveDiagnostics(G, rock, schedule.control(1).W, 'state', state, 'computeFlux', false, 'name', 'model');: 获取模拟结束时的状态,并进行交互式诊断,显示模型的一些属性。

实验

<think>好的,我现在需要帮助用户查找关于MRSTMATLAB Reservoir Simulation Toolbox)的资料,包括文档、教程和下载方式。首先,我得回忆一下MRST的基本信息。MRST是由挪威科技大学开发的开源工具箱,主要用于油藏模拟。用户提到的引用内容中,引用了model = TwoPhaseOilWaterModel(G, rock, fluid);这样的代码,这可能与油水两相流模型有关,说明用户可能在参考相关模型的使用[^3]。另外,用户提到安装路径,比如将工具箱粘贴到MATLAB的toolbox目录下,如F:\ProgramFiles\Matlab2016b\toolbox[^2],这可能涉及到如何正确安装MRST的步骤。 接下来,我需要确保回答符合用户的要求,即提供文档、教程和下载链接。首先,官方网站应该是主要的资料来源,所以应该指导用户访问MRST的官网,并说明如何下载。然后,文档部分需要详细说明,比如用户指南、模块文档和API参考,这些内容通常会在官网提供。教程方面,可能需要分入门和进阶,包括示例模型和视频教程,这样用户可以根据自己的水平选择。下载和安装步骤需要具体,特别是如何通过GitHub获取最新版本,以及如何添加到MATLAB路径中,引用用户提到的安装路径作为例子[^2]。 另外,用户可能遇到的问题,比如依赖项或兼容性,也需要提前提醒。例如,MRST可能需要特定的MATLAB版本或其他工具箱支持。此外,引用中提到的simulateScheduleAD函数[^1],这可能属于MRST的高级功能,用户可能需要相关示例,可以建议查阅文档中的对应部分。 最后,生成相关问题时要考虑用户可能的后续需求,比如具体模块的使用、与其他工具集成、常见错误处理等。确保回答结构清晰,步骤明确,并且引用正确,如涉及安装路径和函数使用的地方添加引用标识[^1]。 需要检查所有技术细节是否正确,比如下载链接是否有效,安装步骤是否准确,避免误导用户。同时,确保使用中文回答,数学公式和代码块符合格式要求。可能还需要确认MRST的最新版本是否有变化,但考虑到用户提供的引用可能来自较旧的版本(如Matlab2016b),需要建议用户查看官网获取最新信息。 总结步骤: 1. 介绍MRST基本信息。 2. 提供官方资源链接(官网、GitHub)。 3. 分点说明文档、教程、下载安装方法。 4. 提示常见问题,如依赖项和兼容性。 5. 生成相关问题,涵盖使用、安装、模块等方面。 6. 确保引用正确,格式符合要求。</think>### MRSTMATLAB Reservoir Simulation Toolbox)相关资料指南 #### 1. **官方资源** - **官网与文档** MRST的官方文档和教程可通过其官网访问:[MRST官网](https://www.sintef.no/projectweb/mrst/)。文档包含用户指南、模块说明及API参考,涵盖从基础到高级应用的详细内容。 - **GitHub仓库** 最新版本的源代码可在GitHub获取:[MRST GitHub](https://github.com/OPM/mrst)。通过`git clone`或直接下载ZIP文件安装。 #### 2. **文档与教程** - **入门教程** 官网提供快速入门指南,例如单相流模拟、网格生成(如`GRDECL`格式)和结果可视化。示例代码: ```matlab % 创建网格和岩石属性 G = computeGeometry(cartGrid([10, 10, 5])); rock = makeRock(G, 100*milli*darcy, 0.2); ``` - **进阶内容** - 两相流模型(如`TwoPhaseOilWaterModel`)的使用[^3]。 - 自动微分工具(`simulateScheduleAD`函数)在历史匹配中的应用[^1]。 - **视频教程** 部分高校或开发者社区提供MRST操作演示视频,可通过官网链接或YouTube搜索。 #### 3. **下载与安装** 1. **从GitHub下载** ```bash git clone https://github.com/OPM/mrst.git ``` 或直接下载ZIP文件并解压至MATLAB的`toolbox`目录,例如`F:\ProgramFiles\Matlab2016b\toolbox`。 2. **添加MATLAB路径** 在MATLAB中运行: ```matlab addpath(genpath('F:\ProgramFiles\Matlab2016b\toolbox\mrst')); mrstModule add ad-core ad-blackoil ``` #### 4. **常见问题** - **依赖项** MRSTMATLAB R2014b及以上版本,部分模块依赖`Optimization Toolbox`。 - **兼容性** 若安装后报错,检查路径是否包含所有子目录(使用`genpath`)[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值