聶永丹,李福慶,張巖
油藏體飽和度場與等值圖展示是油藏?cái)?shù)模軟件前后處理程序包的一個重要組成部分。利用油藏飽和度場可以有效反映油藏地層飽和度變化以及剩余油分布情況。研究油藏飽和度及等值圖的繪制方法對提高數(shù)模結(jié)果展示技術(shù)有重要意義。Open Inventor是目前世界上使用最廣泛的面向?qū)ο蟮睦L圖軟件接口,允許用戶通過搭積木的方式來構(gòu)建復(fù)雜的三維場景,使得用戶只需花費(fèi)很少的時間就可以構(gòu)造出復(fù)雜的三維場景[1]。Open Inventor中根據(jù)不同行業(yè)的需求提供了若干擴(kuò)展模塊,其中 MeshViz 擴(kuò)展模塊提供了強(qiáng)大的應(yīng)用科學(xué)領(lǐng)域中模型網(wǎng)格繪制、提取和數(shù)據(jù)匹配功能,并且包含了高級的數(shù)據(jù)可視化設(shè)計(jì)組件,復(fù)雜曲面、三維統(tǒng)計(jì)圖等多種可視化對象[2]。
MeshViz擴(kuò)展模塊提供了二維等值圖相關(guān)的二維笛卡爾坐標(biāo)網(wǎng)格、顏色映射、網(wǎng)格填充以及等值線等與飽和度場及等值圖相關(guān)對象(節(jié)點(diǎn))。
二維笛卡爾坐標(biāo)系網(wǎng)格節(jié)點(diǎn),可以用來構(gòu)建笛卡爾坐標(biāo)系的平面網(wǎng)格[3],該網(wǎng)格的拓?fù)浣Y(jié)構(gòu)是規(guī)則的,但是其幾何形狀可以是不規(guī)則的,組成每個網(wǎng)格單元的4條邊,相對的兩條不要求平行,整個平面網(wǎng)格的拓?fù)溆蓌方向和y方向的網(wǎng)格個數(shù)定義,x、y方向網(wǎng)格數(shù)均為4的PoCartesianGrid2D網(wǎng)格結(jié)構(gòu)如圖1所示:
圖1 PoCartesianGrid2D網(wǎng)格結(jié)構(gòu)圖
非線性顏色映射節(jié)點(diǎn),為數(shù)據(jù)體表面提供色彩映射方式。首先根據(jù)一組浮點(diǎn)數(shù)值定義了相應(yīng)的一組顏色值,顏色映射節(jié)點(diǎn)會根據(jù)一個數(shù)值的大小決定該數(shù)值對應(yīng)的顯示顏色,于是相應(yīng)的顏色就會在一個數(shù)據(jù)集合對應(yīng)的數(shù)據(jù)體表面上顯示出來,顏色映射節(jié)點(diǎn)提供兩種映射方式分別是:LINEAR_PER_LEVEL和 NON_LINEAR_PER_LEVEL。LINEAR_PER_LEVEL映射方式中如果一個數(shù)值f在區(qū)間[fi,fi+1]中,其相對應(yīng)的映射顏色將是在[ci,ci+1]區(qū)間的線性內(nèi)插得到的RGB或HLS顏色,因此這種映射方式必須提供與顏色數(shù)量相同數(shù)值個數(shù)。而NON_LINEAR_PER_LEVEL映射方式不進(jìn)行插值,如果一個數(shù)值f在區(qū)間[fi,fi+1]中,其相對應(yīng)的映射顏色將是ci+1對應(yīng)的RGB或HLS顏色,如果f小于c1 則對應(yīng)的顏色就是 f1, NON_LINEAR_PER_LEVEL映射方式必須提供數(shù)值個數(shù)是顏色數(shù)量加1。
此外 PoNonLinearDataMapping2顏色映射節(jié)點(diǎn)可以指定與顏色相關(guān)聯(lián)的閾值,以過濾到無效數(shù)值。通過PoDataMapping:: minThresholdand指定最小閾值,PoDataMapping:: maxThresholdfields指定最大閾值,當(dāng)啟用閾值設(shè)定時,處于設(shè)定好的閾值之外的數(shù)值(小于等于最小閾值或大于等于最大閾值的數(shù)值)對應(yīng)的顏色將使用預(yù)定義好的無效顏色。
二維平面網(wǎng)格可視化節(jié)點(diǎn)包括:網(wǎng)格填充節(jié)點(diǎn)PoMeshFilled,根據(jù)預(yù)定義好的映射方式對平面網(wǎng)格進(jìn)行填充;網(wǎng)格邊界節(jié)點(diǎn)PoMeshLimit,繪制網(wǎng)格幾何體的邊界線;網(wǎng)格邊線節(jié)點(diǎn)PoMeshLines,繪制網(wǎng)格幾何體中的每個單元的線框;等值線節(jié)點(diǎn)PoMeshContouring,在二維平面網(wǎng)格中繪制等值線,同時可以選擇是否加上數(shù)值注釋,等值線分為主等值線和次等值線,數(shù)值注釋只能加在主等值線上[4]。
圖例節(jié)點(diǎn),以一個矩形的方式給出當(dāng)前色譜的彩色圖例,在這個矩形圖例上可以設(shè)置圖例的名稱,最大值與最小值等,同時利用PoNonLinearValueLegend2提供的編程接口可以實(shí)現(xiàn)展示形狀、方向、顏色映射類型的動態(tài)設(shè)定等功能。利用MeshViz模塊創(chuàng)建一個圖例需要首先初始化圖例節(jié)點(diǎn),通過指定圖例大小,坐標(biāo)以及標(biāo)題和數(shù)值的位置,來定義圖例節(jié)點(diǎn);然后在場景中插入PoDataMapping類型對象;接著在場景中插入PoIsovaluesList類型對象并與和圖例節(jié)點(diǎn)關(guān)聯(lián);最后指定圖例中所要顯示數(shù)據(jù)的最大值,最小值以及過渡數(shù)值。如果定義了數(shù)據(jù)顏色映射節(jié)點(diǎn)對象或者 PoIsovaluesList節(jié)點(diǎn)對象,可以通過這兩類節(jié)點(diǎn)圖例指定數(shù)值范圍。
不同數(shù)模軟件具有不同的油藏體數(shù)據(jù)文件格式,雖然文件的組織格式不同,但基本都包含了油藏體結(jié)構(gòu)信息與屬性信息。油藏體結(jié)構(gòu)主要包括拓?fù)浣Y(jié)構(gòu),以及每個網(wǎng)格的坐標(biāo)和網(wǎng)格有效性等;屬性信息包含了某個時間點(diǎn)下,每個網(wǎng)格的某種屬性對應(yīng)的數(shù)值。油藏體數(shù)模信息的數(shù)據(jù)量很大,特別的在大區(qū)塊中包含網(wǎng)格數(shù)目多的情況下,頻繁掃描讀取油藏體數(shù)據(jù)會引起程序運(yùn)行效率下降,降低用戶體驗(yàn)。采用動態(tài)內(nèi)存創(chuàng)建的方式將所需的數(shù)據(jù)一次加載到內(nèi)存中[5],后續(xù)的處理直接在內(nèi)存中操作,可以有效節(jié)約數(shù)據(jù)加載時間,提高程序運(yùn)行效率。
2.1.1 模型結(jié)構(gòu)數(shù)據(jù)加載
用動態(tài)3維數(shù)組model[i,j,k]存儲模型結(jié)構(gòu),以當(dāng)前國內(nèi)外主流的油藏?cái)?shù)模軟件斯倫貝謝公司Eclipse的網(wǎng)格模型數(shù)據(jù)為例,其數(shù)據(jù)格式主要是一種柱狀(pillar)模型,如圖2所示:
圖2 pillar模型網(wǎng)格結(jié)構(gòu)圖
一種點(diǎn)線結(jié)構(gòu):模型中i,j坐標(biāo)相同且處于不同位置處所有網(wǎng)格同一方位的棱邊位于一條直線上,其中100網(wǎng)格的“100-101”棱邊和101網(wǎng)格的“100-101”棱邊在三維空間內(nèi)共線。根據(jù)目標(biāo)網(wǎng)格某一方位棱邊所在線段頂?shù)c(diǎn)的三維坐標(biāo)和該棱邊某角點(diǎn)的 z坐標(biāo),就可以計(jì)算出該角點(diǎn)的三維坐標(biāo),按照i,j,k的順序可以得到網(wǎng)格的屬性值和有效性數(shù)據(jù)[6]。
2.1.2 網(wǎng)格屬性數(shù)據(jù)加載
用 5維動態(tài)數(shù)組來存儲油藏體屬性數(shù)據(jù),例如數(shù)組varray[t,p,i,j,k]中的下標(biāo) i,j,k分別表示油藏體中三維網(wǎng)格序號坐標(biāo),下標(biāo)t表示時間點(diǎn)序號,下標(biāo)p表示屬性類別序號。后續(xù)處理就可以根據(jù)具體時間點(diǎn)、屬性值、單層信息從varray[t,p,i,j,k]數(shù)組檢索出用戶所需要的屬性值。
2.1.3 網(wǎng)格有效性標(biāo)志加載
整個油藏體模型中有些網(wǎng)格是不需要關(guān)心的,定義為無效網(wǎng)格,在展示的時候需要忽略掉,因此每個網(wǎng)格對對應(yīng)著一個有效標(biāo)志數(shù)值,如果該標(biāo)識為1則該網(wǎng)格是有效的,需要展示出來,反之如果該標(biāo)識為0則該網(wǎng)格是無效的,展示時需要過濾掉。為避免頻繁加載此標(biāo)志信息,本文采用 1維動態(tài)數(shù)組m_actnum[m]的形式來存儲網(wǎng)格有效性標(biāo)志,后續(xù)程序判斷網(wǎng)格 model[i,j,k]的有效性時,可以直接訪問m_actnum[k*num_y*num_x +j*num_x+i]的值是1還是0。
1)首先將油藏體模型結(jié)構(gòu)數(shù)據(jù)與屬性信息加載到內(nèi)存中;
2)利用MeshViz中的PoCartesianGrid2D類創(chuàng)建節(jié)點(diǎn)笛卡爾坐標(biāo)系的平面二維網(wǎng)格pmesh,設(shè)定拓?fù)浣Y(jié)構(gòu),并將屬性值添加到網(wǎng)格中;
3)再根據(jù)飽和度場數(shù)據(jù)定義數(shù)據(jù)映射,用PoNonLinearDataMapping2類創(chuàng)建節(jié)點(diǎn)pdataMapping,該節(jié)點(diǎn)定義一系列顏色和浮動的數(shù)值相對應(yīng),選擇 LINEAR_PER_LEVEL方式,設(shè)置 PoDataMapping:: maxThresholdfields指定最大閾值,啟用閾值設(shè)定,設(shè)置大于最大閾值的數(shù)值對應(yīng)的顏色透明度為100%。判斷每一個網(wǎng)格的有效性,若網(wǎng)格無效,則將該網(wǎng)格屬性數(shù)值設(shè)定為最大閾值的數(shù)值,于是可以過濾掉該網(wǎng)格。
4)利用PoMeshFilled創(chuàng)建可視化填充節(jié)點(diǎn)pmeshFilled,應(yīng)用數(shù)據(jù)到顏色的映射,填充二維實(shí)心飽和度場,選擇COLOR_MAPPING作為顏色類型,網(wǎng)格的每一個屬性值對應(yīng)一種顏色,網(wǎng)格通過這些插值的顏色填滿,描述的每一個
網(wǎng)格邊或網(wǎng)格單元通過由 pDataMapping對象定義的“數(shù)據(jù)映射”的方法著色,該pDataMapping對象定義網(wǎng)格值(由值索引域關(guān)聯(lián))轉(zhuǎn)變成顏色的方法;利用PoMeshContouring創(chuàng)建可視化節(jié)點(diǎn) pmeshContouring與二維網(wǎng)格的屬性值相關(guān)聯(lián)繪制出二維等值線圖,利用PoMeshLimit創(chuàng)建可視化節(jié)點(diǎn) pmeshLimit網(wǎng)格邊界節(jié)點(diǎn),繪制網(wǎng)格幾何體的邊界線;利用PoMeshLines創(chuàng)建可視化節(jié)點(diǎn) pmeshLines網(wǎng)格邊線節(jié)點(diǎn),繪制網(wǎng)格幾何體中的每個單元的線框[7]。
5)最后通過定義圖例來說明飽和度場中的顏色相對應(yīng)的飽和度值,先通過 PoIsovaluesList 類創(chuàng)建節(jié)點(diǎn) pisoValues,連接對象到可視化節(jié)點(diǎn),兩個連續(xù)等值之間的步進(jìn)尺度是一個常數(shù),再運(yùn)用PoLinearValueLegend類創(chuàng)建節(jié)點(diǎn)plegend 繪制圖例。將上述 pmesh、pdataMapping、pmeshFilled、pisoValues 和 plegend 節(jié)點(diǎn)依次添加到場景圖節(jié)點(diǎn) root中,然后創(chuàng)建渲染區(qū)域并顯示場景[8]。
本文基于Open Inventor中MeshViz 擴(kuò)展模塊研究油藏飽和度繪制方法,基于 VC++實(shí)現(xiàn)了油藏飽和度動態(tài)展示,該方法實(shí)現(xiàn)簡便,便于用戶直觀理解油藏模型結(jié)構(gòu),分析剩余油分布情況。由于采用了模塊化的設(shè)計(jì)思想因此具有較強(qiáng)的擴(kuò)展性,可以方便的與其他業(yè)務(wù)模塊集成。
[1]滕貽健,柴山,荊旭,等.基于 Open Inventor的虛擬駕駛仿真系統(tǒng)[J].計(jì)算機(jī)應(yīng)用, 2009,29(s1):323-325
[2]閻鋒欣,候增選,張定華,等.Open Inventor程序設(shè)計(jì)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[3]孟鑫,張樺.Open Inventor開發(fā)的關(guān)鍵技術(shù)與應(yīng)用[J].天津理工大學(xué)學(xué)報(bào).2005,21(1):69-73.
[4]Open Inventor 8 User’s Guide.[M]Mercury Computer System Inc.2009.
[5]Josie Wernecke.The Inventor Mentor:Programming Object-Oriented 3D Graphics with Open Inventor,Release 2[M],Addison-Wesley Publishing Company,1994.
[6]白永良,劉展,魏合龍等.基于 Open Inventor油藏四維展示方法研究 [J].西安石油大學(xué)學(xué)報(bào)(自然科學(xué)版).2012,12(1):94-98.
[7]Alan Ezust,Paul Ezust.An Introduction to Design Patterns in C++ with Qt4[M]Prentice Hall,2006.
[8]胡貴華,朱文華 ,俞 濤,王 棟.PECVD 熱流場數(shù)值模擬的可視化研究[J].系統(tǒng)仿真學(xué)報(bào).2008,20(21):5885-5888.