基于MeshViz储层建模可视化动态数据加载系统的的设计与实现

xianshen 贡献于2016-03-03

作者 微软用户  创建于2013-08-12 02:43:00   修改者微软用户  修改于2013-08-14 04:47:39字数6059

文档摘要:基于MeshViz的储层建模可视化动态数据加载系统的的实现目录:1引言2动态加载可视化数据系统解决的难点3系统的设计和结构3.1系统的目标3.2.1建立网格3.2.2颜色映射3.2.3可视化数据的显示窗口,操作可视化图形的控制窗口Menu3.3系统的可视化数据4系统实现的关键技术4.1动态数组存储可视化数据网格信息4.2动态读取坐标值与属性值4.3数据加载的实现5动态可视化数据加载的过程6结束语摘要:本系统是基于OpenInventor的MeshViz扩展模块,采用动态数据加载的系统提高了储层建模可视化数据加载、数据处理与图像处理的效率,并实现动态切换可视化数据文件的显示功能的系统。而系统加载的数据一般包括二维或三维可视化数据。
关键词:

 基于MeshViz的储层建模可视化动态数据加载系统的的实现 目录: 1 引言 2 动态加载可视化数据系统解决的难点 3 系统的设计和结构 3.1 系统的目标 3.2.1 建立网格 3.2.2 颜色映射 3.2.3 可视化数据的显示窗口,操作可视化图形的控制窗口Menu 3.3 系统的可视化数据 4 系统实现的关键技术 4.1 动态数组存储可视化数据网格信息 4.2 动态读取坐标值与属性值 4.3 数据加载的实现 5 动态可视化数据加载的过程 6 结束语 摘要:本系统是基于Open Inventor 的MeshViz扩展模块,采用动态数据加载的系统提高了储层建模可视化数据加载、数据处理与图像处理的效率,并实现动态切换可视化数据文件的显示功能的系统。而系统加载的数据一般包括二维或三维可视化数据。 1. 引言 Open Inventor是一个面向对象的跨平台的专业三维图形软件,提供最广泛的面向对象集(超过1300个易于使用的类),并集成了用户友好的系统架构进行快速开发。Open Inventor提供了先进的三维可视化技术和强大的计算交互功能。目前,Open Inventor已经基本上成为面向对象的三维图形开发事实上的工业标准。本系统是基于OIV及其三维仿真平台,实现油气储层建模可视化动态加载系统的功能。 —————————————————————— 基金项目:“大型油气田及煤层气开发”国家科技重大专项课题《重油油藏和油砂经济高效开发技术》(2011ZX05032-001) MeshViz是Open Inventor的一个扩展模块,而Open Inventor(简称OIV)是SGI公司开发的基于OpenGL的面向对象三维图形软件开发包。Open Inventor软件包括基础模块和扩展模块,基础模块是所有扩展模块的基础。它提供基于OpenGL开发的所有图形工具,同时还提供大场景投影、体数据内部损伤检测、多线程计算处理能力、立体对像浏览、远程三维漫游、三维纹理叠加、海量数据漫游等功能。扩展模块包括:VolumeViz、MeshViz、FxViz、TerrainViz、SolidViz、ScaleViz和HardCopy,本系统利用的是MeshiViz模块。 MeshViz是一组高级数据可视化组件,用于科学计算、制造、有限元、流体力学、油藏工程系统。MeshViz包括GraphMaster和3DdataMaster两个组件库。第一个组件库定义了Open Inventor在二维和三维图像上的节点扩展,如图例、柱状图、曲线、坐标系等;第二个组件库为科学与工程计算可视化提供了用户可扩展的节点。MeshViz支持二维和三维结构化网格和非结构化网格。它能实现等值面、网格表面、剖面、切片、等值线、边界、网格线、二维和三维矢量场和流线等常用的网格特征。 动态加载系统是基于Open Inventor的扩展模块MeshViz,利用计算机语言c++编写而成。该系统的功能主要实现了油气储层地质建模可视化数据 - 图形的转换,而其方便之处在于可加载不同格式及不同信息的可视化数据。动态加载数据的优点是该系统启动之后可以方便快速的换取可视化数据,查看可视化结果。 2 动态加载可视化数据系统的难点 在储存建模可视化的研究的过程中,通过建立网格的方式进行的数据-图形的转换。可视化的数据文件形式多样:(1) 按照可视化数据文件的不同格式,有.txt以及.dat等;(2)对于不同的可视化数据,其所包含的信息不一样时,会造成网格的不同。 如果可视化数据文件的网格信息是以代码的形式写进程序当中,通过代码的读取来获得网格的信息。这样,当系统运行成功之后,不能更换网格信息不同的可视化数据文件,来获得不同的图形显示。当读取另一组可视化数据时,首先要停止运行系统,根据可视化数据文件的信息,手动的更改代码,再运行系统以达到更换数据的效果。不是动态的加载数据的根本原因,是把数据文件的网格信息以代码的形式写在程序中,这些代码存储在代码区,代码区的内容只有当程序停止运行时,才能释放里面的内容,这样导致了当系统运行时不能动态的加载另一组数据文件。 然而,动态加载数据技术的实现,只需点击加载数据的按钮,选择要加载的可视化数据文件,系统就可显示出对应的图形。动态加载数据解决了手动更改程序代码、多次关闭以及运行系统的复杂性。该系统可以方便的加载任何格式的可视化数据文件,即使用户不知道系统加载数据的原理,也可以快速加载数据, 查看可视化的结果。 3 系统的设计和结构 3.1 系统的目标 本系统采用由Petrel地质建模软件导出来的数据模型,运用可视化技术、计算机图形学方法,使用具体的OIV类库实现数据-图形变换,以图形的形式显示数据体的空间模型。利用OIV可视化技术,采用动态加载可视化系统可以实现任意的加载可视化数据、任意旋转和剖切可视对象。从不同的角度查看储层的外部形态及其内部特点,对储层对象进行操作等功能。用户能够控制图形的结果输出、提取数据特征(等值线、等值面、切片等)、调整属性参数并立即在图形中发生变化。该系统分析可视化结果是否符合地质认识,与理想的地质概念和模型作以比较。针对不足之处调整方案,使得储层地质建模最优化。 3.2 系统的功能设计 可视化动态数据加载系统实现,需要以下几个步骤。 3.2.1 建立网格 根据可视化数据,利用OIV的可视化,采用C++语言编写类PoCartesianGrid2D为可视化建立网格,这样为数据-图形变换建立一座桥梁,把数据与图形联系起来。建立网格的过程是利用可视化数据给定的x,y方向的起始点、及x,y方向上的步长值,还有x,y方向上的网格数目,就可确定图型的基本框架。 动态加载可视化系统根据加载的可视化数据可以建立两种网格。第一种为三维不规则笛卡尔网格,由类 PbCartesianGrid3D完成。第二种为二维规则笛卡尔网格,由类PbCartesianGrid2D完成。 OIV中PbCartesianGrid3D类描述了三维不规则笛卡尔网格。三维不规则笛卡尔网格的每个单元是六面体,六面体相对的两个面不一定是平行的,因而单元块不一定是的长方体或者正方体,网格点之间的间距互不相同。这类网格的数据必须有显式的坐标信息。数据在网格上的排列顺序是沿Z、Y、X方向排。设numX表示网格模型X方向的节点数,numY表示网格模型Y方向上 的节点数,numZ表示网格模型的Z方向的节点数。这样,共有( numX-1)*(numY-1)*(numZ-1)个单元格。图1的例子中numX=5,numY=4,numZ=2。该网格的几何结构由X坐标数组x、Y坐标数组y、Z坐标数组z定义,每个数组均有numX * numY * numZ个元素。v是数据数组,Pijk这一点的X坐标是x[i*numY*numZ + j*numZ + k],Y坐标是y[i*numY*numZ + j*numZ + k],Z坐标是z[i*numY*numZ + j*numZ + k],数据值为v[i*numY*numZ + j*numZ + k] 这里,V的定义是什么? 图1 三维不规则笛卡尔网格 OIV中PbCartesianGrid2D类描述了三维不规则笛卡尔网格。它的单元格是不平行的四边形,如图3-4所示。该类网格在X、Y方向分别有numX和numY个节点,具有(numX-1)*(numY-1)个单元格,必须给出每个数据节点的坐标来定义不规则笛卡尔网格的几何形态。假设x代表节点的X坐标数组,y代表节点的Y坐标组,每个数组有numX*numY个元素。数据值在不规则笛卡尔网格上沿着Y轴排列,例如图2中的Pij,这个节点的X坐标xp=x[i*numY+j],Y坐标yp=y[i*numY+j],Pij节点的数据值为v[i*numY+j]。 图 2 二维笛卡尔网格 3.2.3 可视化操作的控制窗口菜单 在主函数main中对OIV的初始化,OIV建立了显示窗口,并支持“场景”,“观察器”和“动作”等高级功能。用户可以把3D物体保存在“场景”中,通过“观察器”来显示3D物体。利用“动作”可以对3D物体进行特殊的操作(例如,切片操作,显示等值线操作等)。对其“动作”操作时,建立操作控制窗口,对其图形进行特殊的操作。 图4 图形显示窗口 图3操作控制窗口Menu 3.3 系统的可视化数据 这里的说明和图5中的信息,对不起来! 本系统使用克里金插值算法,得到每一个网格上的深度值。在属性建模中使用地质统计学算法模拟出对应网格上的属性值。两者合成一起形成带构造的网格数据,主要有沉积相、孔隙度、渗透率、含油饱和度等参数模型的数据体。这些数据的格式如下: X方向网格数, Y方向网格数 X方向网格步长, Y方向网格步长, X起始坐标, Y起始坐标, Z起始坐标, 第1点的X的坐标值,Y的坐标值,Z的坐标值,第1点的属性值, 第2点的Z坐标值 第2点的属性值 … … 应该统一改为间距 图5 数据格式 网格节点在XOY平面按规则的顺序进行排列。令X、Y方向的网格步长为dx、dy,,网格数为Nx、Ny,原点坐标是x0、y0、z0,则用Node标识的一个网格节点的空间坐标(x,y,z)和属性值s为: 上述的公式中:i的范围为[0,Nx-1],j的范围是[0,Ny-1],k是节点Node(i,j)在数据中排序数。DPk,Sk 分别是第k点处的深度和属性值。 4 关键技术 4.1 调用函数的主要功能 几种函数是需要经常调用,如下作粗略研究。 4.1存储网格信息的动态数组 动态加载系统采用C++中申请动态内存的方式,将读取的数据存入动态数组中。这个方法在编译阶段不知道可视化数据文件的大小,然而,在运行这个方Mesh node 是什么? 法时,是根据实际情况自动计算出可视化数据文件的大小,并动态分配相应的存储空间。在动态加载数据时, 网格数目,步进值,属性值,利用C++中的运算符new申请动态内存,并把这些网格的相关信息存放在内存空间的动态存储区中。运行时,利用指针调用里面的数据,不使用时用运算符delete释放内存空间内容。这样的网格的相关信息释放掉以后,就可以重新存入一组新的数据。这样解决了网格数目不同,属性值不同及加载不同数据造成的难点。OIV支持“场景”,“观察器”和“动作”等高级功能,用户可以把3D物体保存在“场景”中,通过“观察器”来显示3D物体 。动态加载数据系统,通过调用buildTabWindow(mesh_node,NULL)函数来建立场景图,类mesh_node的参数是PbCartesianGrid3D类的一个对象,这时得到动态存储区中存储网格的相关信息。当调用closeTabWindow()函数时,关闭场景图,释放动态存储区中的内容。当再加载一组新的数据时,即是建立新的场景图,这样可以重新步网格,实现动态加载的过程。 这句话表达的意思有问题。 改为网格间距 什么意思? 4.2 动态读取坐标值与属性值 在动态加载数据系统,其关键作用的是自己编写的读取数据类—stadata类。类中成员函数中有动态读取坐标的setGeometryXY()函数,在函数中通过调用读取文件函数fscanf()读取可视化数据文件。可视化数据文件的排列方式为X轴上的网格数目,Y轴上的网格数目,X坐标的初值, Y坐标的初值,Z坐标的初值,X坐标的步进值,以及Y坐标的步进值,最后数据z的坐标值及节点的属性值,数据的具体形式见图4。利用x轴的网格数目,y轴网格数目,x,y坐标的初始值以及步进值,利用for循环的方式给每个坐标赋值。图形框架由网格构成,网格为不规则笛卡尔的网格。所以赋值的时候根据不规则笛卡尔网格的形式来赋值,先是z轴方向上,再沿y轴方向排列,最后后再是x轴方向上的排列。读取数据文件中X轴方向的坐标值,然后存放在指针数组xCoordinate中,同理,y轴方向上的坐标值放在指针数组yCoordinate中,z轴为指针数组zCoordinate中。 成员函数ReadFile()通过调用读取文件函数fscanf(),读取数据文件中的属性值,根据不规则笛卡尔网格的赋值形式,利用for循环的方式,将读取数据文件的属性值对网格的每个节点进行赋值。读取的属性值存放在m_value[]指针数组中。 成员函数getNumX函数()的作用为返回数据文件中有多少个x值,同理成员函数getNumY()函数的作用为返回值为数据文件中有多少个y值 ,函数getNumZ()返回为多少个个z值。成员函数 getXCoordinate()的作用为返回一个指针,这个指针变量的内容为存放x坐标值数组的首地址。同理getYCoordinate()为返回一个指向存放y坐标值数组首地址的指针函数,getZCoordinate()为返回存放z坐标值数组地址的函数而getvalue()为返回一个指向存放属性值数组首地址的指针函数。 图5 Stradata类中函数的定义 4.3 数据加载的实现 加载数据时通过点击如图6中“加载数据”按钮,设按钮的ID号为“LoadFile”。点击按钮时,该系统中searchForAuditor()函数以ID作为参数,通过ID与程序相连接的功能。当找到对应的ID时,首先通过OIV中meshViewer类中的成员函数openFile()通过找到可视化数据文件的路径,找到数据文件,然后打开数据文件。用该系统中的closeTabWindow()函数关闭总的场景图,调用meshViewer类中的成员函数buIdTabWindow()建立新的场景图。建立新的场景图后,在场景图当中要加入物体,而物体形成的基础为网格。在先前打开的数据文件中,用getMesh()函数得到可视化数据文件中网格和属性的相关信息,根据网格信息步新的网格,在新的网格的基础上,赋新的属性值,实现数据的动态加载。 5 动态可视化数据加载的过程 图6 加载数据窗口 图 7 选择数据窗口 图8 读取数据窗口 图9 加载数据的结果 6 结束语 动态数据加载系统可以方便加载可视化数据,以图形的形式显示数据体的空间模型。利用OIV可视化技术,在动态加载可视化系统当中可以任意的加载可视化数据,任意旋转和剖切可视对象,从不同的角度查看储层的外部形态及其内部特点,进而对储层对象进行操作。动态加载可视化系统在油藏建模方面,将高速 发展的计算机可视化技术应用到油藏模拟的分析和处理。用三维真实感图像形象地表达储层模型,直观展示储层的物性参数空间分布,让用户对油藏非均质性的描述和认识更加合理,从而更好的指导油田开发。 7 参考文献 [1] 阎锋欣, 候增选, 张定华等. Open Inventor 程序设计从入门到精通 清华大学出版社.2007-6 [2] Josie Wernecke The Inventor Mentor—Programming Object-Oriented 3D Graphics with Open Inventor Addison-Wesley Professional 1994-03-11 [3] Josie Wernecke The Inventor Toolmaker Addison-Wesley Professional 1994-06-04 [4]施仁奈 等著 Open GL编程指南 机械工业出版社 2006-6-1 [5] Petrel软件系统的说明书 系统流程图,结构图, 各个类的主要功能,主要函数的说明, 一的地方注意, 系统流程图,结构图, 各个类的主要功能,主要函数的说明, 一的地方注意, 加载过程的说明. 图片的说明

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档