聶永丹,李福慶,張巖
油藏體飽和度場與等值圖展示是油藏數模軟件前后處理程序包的一個重要組成部分。利用油藏飽和度場可以有效反映油藏地層飽和度變化以及剩余油分布情況。研究油藏飽和度及等值圖的繪制方法對提高數模結果展示技術有重要意義。Open Inventor是目前世界上使用最廣泛的面向對象的繪圖軟件接口,允許用戶通過搭積木的方式來構建復雜的三維場景,使得用戶只需花費很少的時間就可以構造出復雜的三維場景[1]。Open Inventor中根據不同行業的需求提供了若干擴展模塊,其中 MeshViz 擴展模塊提供了強大的應用科學領域中模型網格繪制、提取和數據匹配功能,并且包含了高級的數據可視化設計組件,復雜曲面、三維統計圖等多種可視化對象[2]。
MeshViz擴展模塊提供了二維等值圖相關的二維笛卡爾坐標網格、顏色映射、網格填充以及等值線等與飽和度場及等值圖相關對象(節點)。
二維笛卡爾坐標系網格節點,可以用來構建笛卡爾坐標系的平面網格[3],該網格的拓撲結構是規則的,但是其幾何形狀可以是不規則的,組成每個網格單元的4條邊,相對的兩條不要求平行,整個平面網格的拓撲由x方向和y方向的網格個數定義,x、y方向網格數均為4的PoCartesianGrid2D網格結構如圖1所示:

圖1 PoCartesianGrid2D網格結構圖
非線性顏色映射節點,為數據體表面提供色彩映射方式。首先根據一組浮點數值定義了相應的一組顏色值,顏色映射節點會根據一個數值的大小決定該數值對應的顯示顏色,于是相應的顏色就會在一個數據集合對應的數據體表面上顯示出來,顏色映射節點提供兩種映射方式分別是:LINEAR_PER_LEVEL和 NON_LINEAR_PER_LEVEL。LINEAR_PER_LEVEL映射方式中如果一個數值f在區間[fi,fi+1]中,其相對應的映射顏色將是在[ci,ci+1]區間的線性內插得到的RGB或HLS顏色,因此這種映射方式必須提供與顏色數量相同數值個數。而NON_LINEAR_PER_LEVEL映射方式不進行插值,如果一個數值f在區間[fi,fi+1]中,其相對應的映射顏色將是ci+1對應的RGB或HLS顏色,如果f小于c1 則對應的顏色就是 f1, NON_LINEAR_PER_LEVEL映射方式必須提供數值個數是顏色數量加1。
此外 PoNonLinearDataMapping2顏色映射節點可以指定與顏色相關聯的閾值,以過濾到無效數值。通過PoDataMapping:: minThresholdand指定最小閾值,PoDataMapping:: maxThresholdfields指定最大閾值,當啟用閾值設定時,處于設定好的閾值之外的數值(小于等于最小閾值或大于等于最大閾值的數值)對應的顏色將使用預定義好的無效顏色。
二維平面網格可視化節點包括:網格填充節點PoMeshFilled,根據預定義好的映射方式對平面網格進行填充;網格邊界節點PoMeshLimit,繪制網格幾何體的邊界線;網格邊線節點PoMeshLines,繪制網格幾何體中的每個單元的線框;等值線節點PoMeshContouring,在二維平面網格中繪制等值線,同時可以選擇是否加上數值注釋,等值線分為主等值線和次等值線,數值注釋只能加在主等值線上[4]。
圖例節點,以一個矩形的方式給出當前色譜的彩色圖例,在這個矩形圖例上可以設置圖例的名稱,最大值與最小值等,同時利用PoNonLinearValueLegend2提供的編程接口可以實現展示形狀、方向、顏色映射類型的動態設定等功能。利用MeshViz模塊創建一個圖例需要首先初始化圖例節點,通過指定圖例大小,坐標以及標題和數值的位置,來定義圖例節點;然后在場景中插入PoDataMapping類型對象;接著在場景中插入PoIsovaluesList類型對象并與和圖例節點關聯;最后指定圖例中所要顯示數據的最大值,最小值以及過渡數值。如果定義了數據顏色映射節點對象或者 PoIsovaluesList節點對象,可以通過這兩類節點圖例指定數值范圍。
不同數模軟件具有不同的油藏體數據文件格式,雖然文件的組織格式不同,但基本都包含了油藏體結構信息與屬性信息。油藏體結構主要包括拓撲結構,以及每個網格的坐標和網格有效性等;屬性信息包含了某個時間點下,每個網格的某種屬性對應的數值。油藏體數模信息的數據量很大,特別的在大區塊中包含網格數目多的情況下,頻繁掃描讀取油藏體數據會引起程序運行效率下降,降低用戶體驗。采用動態內存創建的方式將所需的數據一次加載到內存中[5],后續的處理直接在內存中操作,可以有效節約數據加載時間,提高程序運行效率。
2.1.1 模型結構數據加載
用動態3維數組model[i,j,k]存儲模型結構,以當前國內外主流的油藏數模軟件斯倫貝謝公司Eclipse的網格模型數據為例,其數據格式主要是一種柱狀(pillar)模型,如圖2所示:

圖2 pillar模型網格結構圖
一種點線結構:模型中i,j坐標相同且處于不同位置處所有網格同一方位的棱邊位于一條直線上,其中100網格的“100-101”棱邊和101網格的“100-101”棱邊在三維空間內共線。根據目標網格某一方位棱邊所在線段頂底點的三維坐標和該棱邊某角點的 z坐標,就可以計算出該角點的三維坐標,按照i,j,k的順序可以得到網格的屬性值和有效性數據[6]。
2.1.2 網格屬性數據加載
用 5維動態數組來存儲油藏體屬性數據,例如數組varray[t,p,i,j,k]中的下標 i,j,k分別表示油藏體中三維網格序號坐標,下標t表示時間點序號,下標p表示屬性類別序號。后續處理就可以根據具體時間點、屬性值、單層信息從varray[t,p,i,j,k]數組檢索出用戶所需要的屬性值。
2.1.3 網格有效性標志加載
整個油藏體模型中有些網格是不需要關心的,定義為無效網格,在展示的時候需要忽略掉,因此每個網格對對應著一個有效標志數值,如果該標識為1則該網格是有效的,需要展示出來,反之如果該標識為0則該網格是無效的,展示時需要過濾掉。為避免頻繁加載此標志信息,本文采用 1維動態數組m_actnum[m]的形式來存儲網格有效性標志,后續程序判斷網格 model[i,j,k]的有效性時,可以直接訪問m_actnum[k*num_y*num_x +j*num_x+i]的值是1還是0。
1)首先將油藏體模型結構數據與屬性信息加載到內存中;
2)利用MeshViz中的PoCartesianGrid2D類創建節點笛卡爾坐標系的平面二維網格pmesh,設定拓撲結構,并將屬性值添加到網格中;
3)再根據飽和度場數據定義數據映射,用PoNonLinearDataMapping2類創建節點pdataMapping,該節點定義一系列顏色和浮動的數值相對應,選擇 LINEAR_PER_LEVEL方式,設置 PoDataMapping:: maxThresholdfields指定最大閾值,啟用閾值設定,設置大于最大閾值的數值對應的顏色透明度為100%。判斷每一個網格的有效性,若網格無效,則將該網格屬性數值設定為最大閾值的數值,于是可以過濾掉該網格。
4)利用PoMeshFilled創建可視化填充節點pmeshFilled,應用數據到顏色的映射,填充二維實心飽和度場,選擇COLOR_MAPPING作為顏色類型,網格的每一個屬性值對應一種顏色,網格通過這些插值的顏色填滿,描述的每一個
網格邊或網格單元通過由 pDataMapping對象定義的“數據映射”的方法著色,該pDataMapping對象定義網格值(由值索引域關聯)轉變成顏色的方法;利用PoMeshContouring創建可視化節點 pmeshContouring與二維網格的屬性值相關聯繪制出二維等值線圖,利用PoMeshLimit創建可視化節點 pmeshLimit網格邊界節點,繪制網格幾何體的邊界線;利用PoMeshLines創建可視化節點 pmeshLines網格邊線節點,繪制網格幾何體中的每個單元的線框[7]。
5)最后通過定義圖例來說明飽和度場中的顏色相對應的飽和度值,先通過 PoIsovaluesList 類創建節點 pisoValues,連接對象到可視化節點,兩個連續等值之間的步進尺度是一個常數,再運用PoLinearValueLegend類創建節點plegend 繪制圖例。將上述 pmesh、pdataMapping、pmeshFilled、pisoValues 和 plegend 節點依次添加到場景圖節點 root中,然后創建渲染區域并顯示場景[8]。
本文基于Open Inventor中MeshViz 擴展模塊研究油藏飽和度繪制方法,基于 VC++實現了油藏飽和度動態展示,該方法實現簡便,便于用戶直觀理解油藏模型結構,分析剩余油分布情況。由于采用了模塊化的設計思想因此具有較強的擴展性,可以方便的與其他業務模塊集成。
[1]滕貽健,柴山,荊旭,等.基于 Open Inventor的虛擬駕駛仿真系統[J].計算機應用, 2009,29(s1):323-325
[2]閻鋒欣,候增選,張定華,等.Open Inventor程序設計從入門到精通[M].北京:清華大學出版社,2007.
[3]孟鑫,張樺.Open Inventor開發的關鍵技術與應用[J].天津理工大學學報.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].西安石油大學學報(自然科學版).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 熱流場數值模擬的可視化研究[J].系統仿真學報.2008,20(21):5885-5888.