龔 安 井曉萌 費(fèi) 凡 李華昱 付 彤
(中國石油大學(xué)(華東)計算機(jī)與通信工程學(xué)院 青島 266580)
近年來,隨著油氣資源量不斷減少以及國內(nèi)油藏開采成本相對較高,我國油藏開采的現(xiàn)代化程度迫切需要進(jìn)一步地提高。油藏數(shù)值模擬及可視化系統(tǒng)是當(dāng)今石油工業(yè)中油藏分析最有效的工具之一,隨著計算機(jī)軟硬件技術(shù)以及油藏工程科學(xué)的不斷發(fā)展,油藏數(shù)值模擬在探索復(fù)雜滲流問題、衡量油田開發(fā)好壞、提高采收率和開發(fā)調(diào)整上具有重大意義。目前常見的油藏數(shù)值模擬商業(yè)軟件有:Eclipse、Vip、More等,這些商業(yè)軟件經(jīng)過長期的發(fā)展和完善能處理大部分的油藏模擬問題。然而,油藏實(shí)際地質(zhì)條件是非常復(fù)雜的,并且在實(shí)際應(yīng)用中也存在著各種各樣的問題。隨著中高品位儲層的油氣資源量不斷減少,低滲油藏已經(jīng)逐漸成為我國油田增產(chǎn)的主要來源,然而上述商業(yè)軟件都是基于廣義達(dá)西定律的黑油模型或組分模型上,在低滲油藏下并不適用[1]。本文針對低滲油藏的特點(diǎn),設(shè)計開發(fā)了一種基于Windows平臺的低滲油藏壓裂水平井?dāng)?shù)值模擬及可視化系統(tǒng)。
油藏數(shù)值模擬系統(tǒng)一般包括:前處理系統(tǒng)、油藏數(shù)值模型計算器、后處理可視化系統(tǒng)這三個部分。前處理系統(tǒng)目的是為計算提供最直接的輸入數(shù)據(jù)。油藏模擬數(shù)據(jù)是復(fù)雜的,它不僅表現(xiàn)在格式類型上,還在精度、可信度等很多方面都有要求。前處理系統(tǒng)一般包括下面這些模塊:文件管理、控制參數(shù)輸入、網(wǎng)格剖分、輸出控制等;油藏數(shù)值模型計算器是建立在數(shù)學(xué)模型之上的,它將一套用于描述油藏物理性質(zhì)的數(shù)學(xué)模型轉(zhuǎn)化為數(shù)值模型,再應(yīng)用各種數(shù)值解法從計算機(jī)上得到所需結(jié)果;而后處理系統(tǒng)是將這些結(jié)果以各種形式直觀、生動地展示出來,以提高分析效率。
隨著科技的發(fā)展,計算機(jī)軟硬件得到了飛速的發(fā)展,這使得油藏數(shù)值模擬系統(tǒng)在普通PC機(jī)上得到很好的支持。普通PC機(jī)的操作系統(tǒng)主要為Win?dows和linux。因為linux環(huán)境下安裝虛擬機(jī)可以支持大多數(shù)語言編寫的程序,所以對開發(fā)語言并沒有嚴(yán)格的要求。
圖形開發(fā)模塊:Xlib、OpenGl、AWT繪圖系統(tǒng)(Java)、VTK、調(diào)用Matlab畫圖模塊進(jìn)行混編等技術(shù)。
網(wǎng)絡(luò)傳輸協(xié)議:TCP/IP協(xié)議。
數(shù)據(jù)庫模塊:鑒于數(shù)據(jù)規(guī)模大小、穩(wěn)定性以及使用成本,推薦使用Oracle或者SQL Server。
計算模塊:計算模型普遍較為復(fù)雜,其中包含偏微分方程、二次積分等復(fù)雜數(shù)學(xué)公式,為了編程的方便性以及計算的準(zhǔn)確性,一般均是使用混編技術(shù)進(jìn)行封裝,常見的組合有:C(或C#或C++或Ja?va)+Matlab(或Python或Fortran)。
目前油田礦場生產(chǎn)實(shí)踐和室內(nèi)實(shí)驗結(jié)果均表明,低滲儲層基質(zhì)滲流不符合經(jīng)典的達(dá)西定律,存在較強(qiáng)的非線性滲流現(xiàn)象。考慮到這種非線性滲流現(xiàn)象的影響,本系統(tǒng)開發(fā)采用了一種新型的油藏模型[1],它針對低滲、致密儲層的滲流規(guī)律,同時考慮分段壓裂水平井基質(zhì)中的非線性流動、裂縫中的達(dá)西流動、水平井井筒內(nèi)的水力壓降流動,是一種經(jīng)由實(shí)踐檢驗準(zhǔn)確率非常高的計算模型。
1)前處理系統(tǒng)。該模塊主要是進(jìn)行項目文件管理、參數(shù)數(shù)據(jù)處理、網(wǎng)格劃分。用戶在前處理系統(tǒng)中可以對井的數(shù)據(jù)進(jìn)行增刪改查,可以對各種數(shù)據(jù)格式的文件進(jìn)行格式統(tǒng)一。現(xiàn)今各種數(shù)據(jù)格式(如Simbest數(shù)據(jù)、Vip數(shù)據(jù)等等)繁雜,基于這種現(xiàn)狀,本系統(tǒng)在解決數(shù)據(jù)兼容性問題時選擇將各種數(shù)據(jù)類型通過函數(shù)轉(zhuǎn)換將數(shù)據(jù)轉(zhuǎn)換成統(tǒng)一的矩陣格式以便核心計算模塊進(jìn)行計算。此外,本系統(tǒng)還支持從EXCEL、TXT文檔中讀取已經(jīng)編輯好格式的數(shù)據(jù),還集成了對數(shù)據(jù)單位格式統(tǒng)一的功能。
2)產(chǎn)能計算。主要根據(jù)前處理模塊得到數(shù)據(jù)通過核心計算組件來計算出各水平井各裂縫在不同時間不同條件下的產(chǎn)量。
3)參數(shù)優(yōu)化。該系統(tǒng)通過對數(shù)據(jù)進(jìn)行分析,并且應(yīng)用核心算法進(jìn)行計算可以對參數(shù)進(jìn)行優(yōu)化以得到最高產(chǎn)量,降低產(chǎn)油成本,對實(shí)踐有巨大指導(dǎo)意義。
4)圖形顯示及動畫模擬。該系統(tǒng)在使用時為了方便用戶更直觀地分析油藏和油井,對油藏實(shí)現(xiàn)了2D、3D模型可視化,對水平井實(shí)現(xiàn)了產(chǎn)能變化動態(tài)展示、壓力及壓力梯度場動態(tài)展示、壓力等值線等多種功能。
圖1 軟件架構(gòu)
本系統(tǒng)采用C/S結(jié)構(gòu),即Client/Server(客戶機(jī)/服務(wù)器)結(jié)構(gòu)[2~3],主要由數(shù)據(jù)庫服務(wù)器及軟件系統(tǒng)組成。數(shù)據(jù)庫采用微軟公司的SQL Server 2008平臺,它是一種廣泛使用的數(shù)據(jù)庫系統(tǒng),具有強(qiáng)大的數(shù)據(jù)存儲和管理能力。
油藏數(shù)據(jù)庫的關(guān)系模式如下。
1)油藏表:保存油藏名稱、油藏編號、包含水平井?dāng)?shù)、開始日期、結(jié)束日期、創(chuàng)建人員等,其中油藏編號是主鍵;
2)油井表:保存基本信息如:油井名稱、油井編號、坐標(biāo)、類型、描述、裂縫條數(shù)、所屬油藏名稱等,其中油井編號為主鍵;
3)公共參數(shù)表:保存每一口井的孔隙度、初始滲透率、地層原始壓力、油層厚度、原油粘度、原油密度等,其中油井編號為主鍵;
4)裂縫參數(shù)表:保存每條裂縫的裂縫半長,裂縫寬度、裂縫間距、滲透率以及裂縫的坐標(biāo)信息。
5)用戶表:保存用戶ID、登錄名、密碼、第二密碼、權(quán)限。
由于各種數(shù)據(jù)格式文件繁多,本系統(tǒng)設(shè)計了數(shù)據(jù)格式轉(zhuǎn)換功能。其主要思想是對不同的關(guān)鍵字分別進(jìn)行處理,這其中又涉及到文件中關(guān)鍵字的順序、數(shù)據(jù)單位的變換、數(shù)組的排列與重新組合、默認(rèn)項的重新設(shè)置等復(fù)雜因素的影響。由于從Txt和Excel中提取數(shù)據(jù)實(shí)現(xiàn)較為簡單,本文以VIP格式轉(zhuǎn)換為例,其工作主要流程如下:1)打開一個VIP格式文件。2)逐行讀取數(shù)據(jù),如若為空行或者注釋行則跳過讀取下一行,若為文件尾則結(jié)束。3)如若該行中包含有關(guān)鍵字,則對關(guān)鍵字進(jìn)行提取,并且進(jìn)行關(guān)鍵字?jǐn)?shù)據(jù)字典的查詢。根據(jù)查詢結(jié)果判定數(shù)據(jù)行是否可以進(jìn)行處理,如果可以處理,則轉(zhuǎn)入相應(yīng)處理功能模塊;如若不能處理,則跳過該關(guān)鍵字并且記錄入日志,進(jìn)入下一行處理。
在數(shù)據(jù)格式轉(zhuǎn)換模塊中,系統(tǒng)設(shè)計了一套數(shù)據(jù)字典,并且設(shè)計了關(guān)鍵字類對關(guān)鍵字進(jìn)行數(shù)據(jù)封裝。VIP格式轉(zhuǎn)換的主要工作是在VIPParsing類中實(shí)現(xiàn)的,其主要操作如下:
void Vip_processing();//打開VIP格式文件,進(jìn)行掃描提取關(guān)鍵字
Keyword Kd_search(const Csting&);//查詢關(guān)鍵字?jǐn)?shù)據(jù)字典,返回一個關(guān)鍵字對象
void Parsingsting(const Csting&,int);//將一個字符串行轉(zhuǎn)換為一個字符串?dāng)?shù)組
……
油藏模擬計算模型一般較為復(fù)雜,其中包含較多且復(fù)雜的數(shù)學(xué)計算(如隱式積分、偏微分方程組等),用java、c++、c#這種常用開發(fā)語言較難實(shí)現(xiàn)并且計算速度較為緩慢,因此本系統(tǒng)的核心計算模塊采用Matlab語言編寫,將之打包成dll庫混編入程序,更高效地在計算機(jī)上實(shí)現(xiàn)了油藏數(shù)值模型。
4.2.1 Matlab計算組件
Matlab是matrix&laboratory兩個詞的組合,意為矩陣工廠(矩陣實(shí)驗室)。它將數(shù)值分析、矩陣計算、科學(xué)數(shù)據(jù)可視化以及非線性動態(tài)系統(tǒng)的建模和仿真等諸多強(qiáng)大功能集成在一個易于使用的視窗環(huán)境中,為科學(xué)研究、工程設(shè)計以及必須進(jìn)行有效數(shù)值計算的眾多科學(xué)領(lǐng)域提供了一種全面的解決方案,并在很大程度上擺脫了傳統(tǒng)非交互式程序設(shè)計語言(如C、Fortran)的編輯模式,代表了當(dāng)今國際科學(xué)計算軟件的先進(jìn)水平。本系統(tǒng)的核心計算就是基于Matlab編寫的,以其中一個多裂縫壓力干擾函數(shù)為例:
function f=F(x,y,i,j,t,fai,ct,h,k0,miu)
yitay=k0/(fai*miu*ct/86.4);
yitax=yitay;
g=@(deta)((1。/(4*x(i)*sqrt(pi*yitay。*(t-deta)))).*exp((-(y(j)-y(i))^2./(4*yitay*(t-de?ta)))).*(erf(x(i)./(2*sqrt(yitax*(t-deta))))));
f=(quadl(@(beta)g(beta),0,1))/(fai*ct*h);//對一個時間步隱式積分
系統(tǒng)的產(chǎn)能計算、壓力及壓力梯度計算、參數(shù)優(yōu)化等功能均是建立在Matlab計算組件上,通過復(fù)雜的數(shù)學(xué)模型[1]設(shè)計實(shí)現(xiàn)的。
4.2.2 Matlab與.Net混編
Matlab擁有一些.Net平臺所沒有的強(qiáng)大的科學(xué)函數(shù)庫,并且可以直接提供給.net使用,將Matlab與.net混編可以提高生產(chǎn)力,提高開發(fā)效率和增加代碼的復(fù)用率。Matlab與.Net混編的步驟主要如下。
1)在Matlab中編寫好M函數(shù);
2)輸入deploytool命令,選擇.Net Assembly,編譯為dll文件;
3)在開發(fā)項目中添加生成的dll文件引用,進(jìn)行調(diào)用操作。
4.2.3 多線程技術(shù)
線程是指進(jìn)程中的一條執(zhí)行路徑(控制流),它包含獨(dú)立的堆棧和CPU寄存器狀態(tài),每個進(jìn)程內(nèi)允許包含多個并行執(zhí)行的路徑,這就是多線程[4~5]。多線程技術(shù)可以很好地提升軟件計算速度與效率,使軟件在處理大型數(shù)據(jù)時擁有更快地速度。示例代碼如下:
Thread th=new Thread(new ThreadStart(On?GuoTeng)); /*新建線程*/
th.Start();//開始線程
th.IsBackground=true;//設(shè)置為后臺線程
th1.Abort();//終止線程
/*自定義函數(shù)*/
public void Compute()
{
while(true)
{/*詳細(xì)代碼*}
}
系統(tǒng)在可視化展示模塊中對于各類統(tǒng)計圖使用了.Net平臺下的最常用的開源控件ZedGraph,ZedGraph有很多優(yōu)點(diǎn):它可以動態(tài)生成,不用保存文件,可以減少IO的讀寫消耗,能快速簡潔地實(shí)現(xiàn)多種二維統(tǒng)計圖。在畫各類統(tǒng)計圖時只需調(diào)用Zedgraph函數(shù),傳遞參數(shù)設(shè)置必要的屬性即可快速畫出各類統(tǒng)計圖。
系統(tǒng)在繪制油藏2D、3D模型及水平井壓力圖、水平井壓力梯度等各種圖時采用了GDI+繪圖技術(shù),通過自定義函數(shù)繪制出所需圖片再經(jīng)由Pic?turebox控件進(jìn)行展示,由于系統(tǒng)的自定義畫圖函數(shù)較為復(fù)雜,本文不展示具體代碼。
動畫展示指定時間段內(nèi)的壓力變化時,僅需調(diào)用System.Windows.Forms.Timer控件,在Timer_Tick事件中切換圖片即可實(shí)現(xiàn)動畫效果。
系統(tǒng)采用Visual Studio 2010集成開發(fā)環(huán)境,數(shù)據(jù)庫服務(wù)器則采用SQL Server 2008關(guān)系型數(shù)據(jù)庫,系統(tǒng)架構(gòu)采用C/S結(jié)構(gòu)。圖2~圖4分別為公共參數(shù)界面、產(chǎn)能計算和水平井壓力圖界面。
圖2 水平井公共參數(shù)模塊圖
圖3 水平井產(chǎn)能計算模塊圖
圖4 水平井壓力場模擬模塊圖
本文針對低品味油藏數(shù)值模擬軟件較少的問題,基于低滲油藏的特點(diǎn),采用了多線程技術(shù)設(shè)計并實(shí)現(xiàn)了低滲油藏壓裂水平井?dāng)?shù)值模擬系統(tǒng),在理論研究和指導(dǎo)實(shí)踐生產(chǎn)中有廣闊的應(yīng)用前景和一定的研究價值。