MRST绘制三维网格图

Matlab储层模拟工具箱(The MATLAB Reservoir Simulation Toolbox, MRST)是一款用于储层建模的免费、开源的软件,主要由 SINTEF Digital 数学与控制论系的计算地球科学小组开发。

更多介绍MRST (sintef.no)

下载地址Download (sintef.no)

在下载完工具箱之后,将其加入库路径,随后开始绘图。

首先是针对规则网格的绘制与展示:

1 规则网格

Step1 用cartGrid可以创建一个空的笛卡尔网格,如下图(a)所示;

G = cartGrid([3, 3, 3], [1, 1, 1].*meter);	%创建一个3*3*3的网格
plotGrid(G), view([-40, 32]), xlabel('x'), ylabel('y'), zlabel('Depth')

Step2 对空网格进行赋值;

在这一步中我们对这3×3×3=27个网格进行赋值,然后成图,如图中(b)

G = cartGrid([3, 3, 3], [1, 1, 1].*meter);
Values = linspace(1,27,27).'; %将数据转成与对应网格数相同的n×1的序列即可
plotCellData(G, Values) %通过plotCellData显示
view([-40, 32]), xlabel('x'), ylabel('y'), zlabel('Depth'), colorbar

如果我们需要的网格就是这类规则的方格,那成图过程简单概括也就是“建网格,贴数值”。

2 不规则网格

Step1 用cartGrid可以创建一个空的笛卡尔网格,抠除掉一个无效的网格,使之成为透明的,如下图(a)所示;

%同样还是先创建一个3*3*3的网格
% 创建 3x3x3 的笛卡尔网格
G = cartGrid([3, 3, 3]);
actnum = ones(G.cells.num, 1);
actnum(21) = 0;
% 移除不可见的网格
G = removeCells(G, actnum == 0);
plotGrid(G), view([-40, 32]), xlabel('x'), ylabel('y'), zlabel('Depth')

Step2 对空网格进行赋值;

%% 抠网格贴颜色
%同样还是先创建一个3*3*3的网格
% 创建 3x3x3 的笛卡尔网格
G = cartGrid([3, 3, 3]);
actnum = ones(G.cells.num, 1);
actnum(21) = 0;
% 移除不可见的网格
G = removeCells(G, actnum == 0);
% 为剩余网格生成随机数值
values = rand(G.cells.num, 1);
plotCellData(G, values); %通过plotCellData显示
view([-40, 32]), xlabel('x'), ylabel('y'), zlabel('Depth'), colorbar

将得到这样一个结果:

3 任意网格

当我们需要对一个任意的三维数据,进行3D网格展示时,执行的操作可概括为,创建一个范围足够的规则网格,随后从规则的网格里抠除无值部分。具体到如切片数据时,仅需依据Line、CDP、Time范围对三维网格赋值、重排,坐标排序格式如下,包含X,Y,Z和指定位置处的Value,有值时Actnum为1,否则为0:

完整代码如下:

filename = 'Demo.slice';	%切片文件
[line,cdp,X,Y,Time,value]=readslicedata(filename); %读取切片函数
showslice3D(line,cdp,Time,value); %切片三维可视化

其中包含两个子函数

(1)读取切片函数readslicedata

function [line,cdp,X,Y,Time,value]=readslicedata(filename)
fid=fopen(filename,'rt');
if fid<0
warndlg('打开文件失败!');
return;
end
FormatString=repmat('%f',1,7);
dataoutput=textscan(fid,FormatString,'HeaderLines',1);
line=dataoutput{2};
cdp=dataoutput{3};
X=dataoutput{4};
Y=dataoutput{5};
Time=dataoutput{6};
value=dataoutput{7}; fclose(fid);
end

(2)切片三维可视化函数showslice3D

function showslice3D(line,cdp,Time,value)

%汇总切片信息
num = size(line,1);
sliceInfo = zeros(num,5);
sliceInfo(:,1)=line;
sliceInfo(:,2)=cdp;
sliceInfo(:,3)=int64(Time);
sliceInfo(:,4)=value;
sliceInfo(:,5)=1; %获取线道号、时间最大、最小范围
minLine=min(line);
maxLine=max(line);
minCDP=min(cdp);
maxCDP=max(cdp);
minTime=min(Time);
maxTime=max(Time); %重组切片坐标
[X, Y, Z] = meshgrid(minLine:maxLine, minCDP:maxCDP, minTime:maxTime);
COO = [X(:), Y(:), Z(:)]; % 数组转表格
COOtable = array2table(COO, 'VariableNames', {'X', 'Y', 'Z'});
Slicetable = array2table(sliceInfo, 'VariableNames', {'X', 'Y', 'Z', 'Value','Valid'}); % 连接两表
joinedTable = outerjoin(COOtable, Slicetable,'Keys', {'X', 'Y', 'Z'});
selectedTable = joinedTable(:, {'X_COOtable', 'Y_COOtable', 'Z_COOtable', 'Value','Valid'});
selectedTable = sortrows(selectedTable, [3, 2, 1]); %按z->y->x的顺序重新排序 data=table2array(selectedTable);
values = data(~isnan(data(:,4)),4); %只取有值的部分
data(isnan(data)) = 0; %对空值填0 actnums = data(:,5);
Xnum = maxLine-minLine+1;
Ynum = maxCDP-minCDP+1;
Znum = maxTime-minTime+1; G = cartGrid([Xnum, Ynum, Znum]);
% 移除不可见的网格
G = removeCells(G, actnums == 0); plotCellData(G, values,'EdgeColor', 'none'); %通过plotCellData显示
view([-40, 32]), xlabel('Line'), ylabel('CDP'), zlabel('Time'), colorbar end

最后结果如下:

MRST绘制三维网格图的更多相关文章

  1. 用canvas绘制折线图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. php中用GD绘制折线图

    php中用GD绘制折线图,代码如下: Class Chart{ private $image; // 定义图像 private $title; // 定义标题 private $ydata; // 定 ...

  3. 使用Canvas绘制背景图

    原文  http://www.imququ.com/post/use-canvas-as-background-image.html 最近iCloud Web的Beta版换了UI,整体风格变得和iOS ...

  4. Excel应该这么玩——7、我是预言家:绘制趋势图

    让我们先看一个场景:你是公司销售部的员工,你手里有公司最近几年的销售额相关的数据,经理希望你预测下个月的销售额.盯着一堆数据,你或许会想到画一张XY坐标图,然后将每个月份的销售额标定为一个坐标.但是下 ...

  5. 使用Excel 2007绘制甘特图

    本文将教大家如何使用Excel 2007制作甘特图.Excel并未提供甘特图类型,但还是可以绘制甘特图的,方法就是通过对堆积条形图类型进行自定义,使之显示任务.任务工期和层次结构. 下面的过程可帮助创 ...

  6. 【python】pandas & matplotlib 数据处理 绘制曲面图

    Python matplotlib模块,是扩展的MATLAB的一个绘图工具库,它可以绘制各种图形 建议安装 Anaconda后使用 ,集成了很多第三库,基本满足大家的需求,下载地址,对应选择pytho ...

  7. 利用Flex组件birdeye绘制拓扑关系图

    birdeye绘制拓扑关系图 1.flex简单介绍 Flex 是一个高效.免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AI ...

  8. UUChart的使用--iOS绘制折线图

    UUChart是一个用于绘制图表的第三方,尤其适合去绘制折线图. 二.下载地址: https://github.com/ZhipingYang/UUChartView 三.使用 第一步.首先我们将下载 ...

  9. html5绘制折线图

    html5绘制折线图详细代码 <html> <canvas id="a_canvas" width="1000" height="7 ...

  10. HTML5 WebAudioAPI(四)--绘制频谱图2

    绘制分析器数组所有数据.本文内容,承接上文 1.800宽度绘制 var url='../content/audio/海阔天空.mp3'; if (!window.AudioContext) { ale ...

随机推荐

  1. 武汉工程大学2020GPLT选拔赛(重现赛)

    L2-4 缘之空 1.使用倍增法求最近公共祖先,然后利用公共祖先计算两点的树上距离 2.但是此题并没有提供根节点,所以要先找到根节点以后才可以进行倍增法求lca /** - swj - * /> ...

  2. 浏览器窗口之间切换的方法(Select window指令,优先使用方法2)

    Robot framework 在同一个浏览器中切换不同选项卡,通过title来定位选项卡.Title存在不唯一的情况,选择不同的选项卡有一些困难.下面的教程,通过修改selenium配置文件,来实现 ...

  3. Python 潮流周刊#98:t-string 语法被正式接纳了(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  4. Python3处理文档_word文档实现自动化办公(一)

    最近打算写一个自动化出报告的脚本 先从处理word文档开始 Python 操作 Word 最常见的依赖库是:python-docx 所以,在开始操作之前,我们需要在虚拟环境下安装这个依赖库 pip3 ...

  5. 使用 PyInstaller 打包 Python 应用并解决依赖问题

    使用 PyInstaller 打包 Python 应用并解决依赖问题 在 Python 开发中,有时需要将程序打包成独立的可执行文件,以便分发和部署.PyInstaller 是一个广泛使用的工具,可以 ...

  6. 记录一次mysql数据库修复过程

    1. 场景 最近在使用小皮面板进行靶场搭建的时候,发现数据库一直无法启动,而在虚拟机里是可以启动了,这就很奇怪了.意识到我的本地已经安装了mysql,可能产生了冲突,但是当我兴冲冲启动本地mysql的 ...

  7. dbeaver导入sql脚本报错的排查—— ERROR 1366 (HY000) at line

    描述 在使用dbeaver进行sql脚本导入的时候报了以下的错误. C:\Users\xxxx\AppData\Roaming\DBeaverData\drivers\clients\mysql_8\ ...

  8. 电脑ocr软件

    天若ocr 体积小,可以隐藏任务栏,但有时候识别度不好,停止更新了,新项目为树洞ocr github: https://github.com/AnyListen/tianruoocr/releases ...

  9. 【记录】Truenas scale|Truenas 的 SSH 服务连不上 VScode,终端能连上

    一般 Truenas连不上 就只有两种情况: 第一种:用户没对应用户目录.需要去用户管理里面对每个用户设置目录. 第二种情况,服务有个选项没勾选.这时会发现能输入密码但是一点反应都没有,打开detai ...

  10. 反悔贪心&局部调整法学习笔记

    一.什么是反悔贪心 反悔贪心就是在普通贪心的过程中"反悔",从而使得一些看似不太好贪心的题变成贪心可做题. 二.反悔贪心普遍流程 就是先使用一个好想的贪心策略,使用优先队列进行维护 ...