顧永濤, 步凌飛, 王海文*
(1.中石化勝利油田分公司孤東采油廠, 東營 257237; 2.中國石油大學(xué)(華東)石油工程學(xué)院, 青島 266580)
在油井產(chǎn)出液經(jīng)多通路集輸管網(wǎng)運輸?shù)郊驼镜倪^程中,需要對管網(wǎng)內(nèi)的流量、流向以及壓力分布做出預(yù)測計算,以滿足安全生產(chǎn)的需要[1-2]。其中,管道內(nèi)的流量和流向決定了管道的各項參數(shù)以及使用壽命,壓力分布[3]即管網(wǎng)節(jié)點壓力和油井回壓,它們反映了流體在地面集輸管網(wǎng)內(nèi)流動過程中水力損失的大小[4],從而決定了管道以及井口設(shè)施的強度。
實際生產(chǎn)中,多口油井公用集輸管網(wǎng),有枝狀、環(huán)狀或兩者組合[5]。集輸管網(wǎng)上油井生產(chǎn)參數(shù)發(fā)生改變時,管網(wǎng)內(nèi)的流量、流向以及壓力分布也隨之改變,為了滿足安全生產(chǎn)的需要,需要建立能夠遍歷計算出集輸管網(wǎng)內(nèi)流量、流向以及壓力分布的方法[6]。地面管網(wǎng)的分布模式對集輸管網(wǎng)壓力分布影響較大[7],關(guān)德慧[8]、王強等[9]針對枝狀注水地面管網(wǎng)提出了新型矩陣分塊水力計算方法。王力等[10]針對單管環(huán)狀摻熱水的油氣集輸管網(wǎng)提出了一種基于二叉樹算法的水力計算方法。以實例化對象組合為基礎(chǔ),將管網(wǎng)節(jié)點封裝成不同的類,建立了水力計算分析模型,利用二叉樹數(shù)據(jù)結(jié)構(gòu)對系統(tǒng)管網(wǎng)的管線流量、節(jié)點壓力、等采用不同類的迭代順序進行求解。王力等[11]通過分析油田污水系統(tǒng)的結(jié)構(gòu)及來水調(diào)度情況,建立了一套適用于有固定流向的污水環(huán)狀管網(wǎng)水力計算模型,并根據(jù)流體的連續(xù)性方程及管網(wǎng)環(huán)能量方程對污水管網(wǎng)進行水力計算。但上述成果大多適用于枝狀注水管網(wǎng)以及有已知流向的摻水環(huán)狀管網(wǎng),對于集油、集氣管網(wǎng)的計算大多利用管元的能量平衡方程和節(jié)點流量方程構(gòu)造方程組求解[12-13],計算量大且不易收斂。目前油田采用的多井多通路的環(huán)狀管網(wǎng),因其拓撲結(jié)構(gòu)復(fù)雜,油井壓力、流量調(diào)節(jié)時會互相影響,公用管道內(nèi)流體流向不確定等因素造成用上述方法計算往往難以精確[14]。所以提出基于圖論思想,將復(fù)雜管網(wǎng)元件利用鄰接表數(shù)據(jù)結(jié)構(gòu)儲存,廣度優(yōu)先搜索遍歷管網(wǎng)各元件進行迭代計算,實現(xiàn)油田多通路環(huán)狀管網(wǎng)拓撲結(jié)構(gòu)的建立以及管網(wǎng)各個參數(shù)的水力計算。
干線貫穿油氣田中心,將位于干線兩側(cè)的油井管線接到干線上,干線連接至集油站,形如樹枝[15]。其布置形式如圖1所示。
圖1 枝狀集輸管網(wǎng)Fig.1 Dendritic pipe network
對于枝狀管網(wǎng),可將管網(wǎng)拓撲結(jié)構(gòu)簡化為二叉樹,由于管網(wǎng)中流體流向一定,所以可確定各管段內(nèi)的流體流量,根據(jù)管道自身屬性和壓降公式計算出各管段的壓降,在集油站壓力已知的情況下,便可累加計算出各個節(jié)點壓力和井口回壓,最終完成整個管網(wǎng)的計算。
每口油井管線連至集輸環(huán)路干線,干線呈環(huán)狀,每口油井的產(chǎn)出液有2條通道到達集油站,可在環(huán)狀干線上某處中斷的情況下維持管網(wǎng)上油井繼續(xù)生產(chǎn)[16],其布置形式如圖2所示。
編號1~5為連接節(jié)點,6~9為油井,10為集油站;①~⑤為環(huán)形環(huán)網(wǎng)管段,⑥~⑩為連接集油站和油井的運輸管道;箭頭方向為環(huán)狀管道內(nèi)預(yù)設(shè)流體流動方向圖2 環(huán)狀集輸管網(wǎng)Fig.2 Ring pipe network
在求解環(huán)狀管網(wǎng)時,由于每口油井產(chǎn)出液有2條通道到達集油站,所以環(huán)狀環(huán)網(wǎng)內(nèi)各管段的流量和流體方向無法確定,無法利用二叉樹模型簡單的累加計算出節(jié)點壓力和井口回壓。所以應(yīng)建立一個數(shù)學(xué)模型,將管網(wǎng)中的各個元件賦予一個唯一的編號,用于儲存管網(wǎng)的拓撲結(jié)構(gòu),并按照編號順序遍歷計算,在計算的過程中可預(yù)先選定流體流動方向,待根據(jù)迭代計算收斂后,可得到壓力分布以及管段內(nèi)流量,并通過管段兩端連接節(jié)點壓力大小判斷管道內(nèi)正確流向。
對一個管網(wǎng)進行遍歷計算時,一般需要一個完整的數(shù)學(xué)模型表達整個管網(wǎng)的拓撲結(jié)構(gòu)[17],然而,某些管網(wǎng)含有太多管段且結(jié)構(gòu)復(fù)雜[18],傳統(tǒng)分析方法工作量很大,若是根據(jù)圖論[19]的思想,將管網(wǎng)視為一個個元件按照特定順序連接而成,各個元件不僅表達各自的物理特性,同時也包含連接信息。其中,基本屬性是元件的各種物理參數(shù),用于管道的壓降計算;連接屬性是元件之間相連順序的依據(jù),用于構(gòu)成管網(wǎng)拓撲結(jié)構(gòu)。如表1所示常見元件的基本信息。
表1 常見元件基本信息Table 1 Basic information for common components
管網(wǎng)的主體為管段,管段具有多種屬性,如管長、管徑、內(nèi)部粗糙度等構(gòu)造屬性;流量,阻力等流體屬性;所處管網(wǎng)位置,起點、終點、方向等連接屬性。其中,管段的構(gòu)造屬性和流體屬性用于管段壓降計算,根據(jù)不同的流體條件,可采用相應(yīng)的壓降計算公式,目前兩相管流壓降計算公式主要包括: Beggs-Brill法、DuklerII法和Baker法等方法[20]。下面以DuklerII法為例計算集輸管段壓降,計算管段壓降的公式[12]為
(1)
式(1)中:λ為管道摩阻系數(shù);L為管路的長度,m;d為管路內(nèi)徑,m;W為集輸管道內(nèi)的混合速度,m3/h;ρm為校正密度,m3/h。
在管網(wǎng)拓撲結(jié)構(gòu)中,油井可看作為源。在計算過程中,源的作用主要是提供產(chǎn)出液流量以及產(chǎn)出液的物性參數(shù),如溫度、黏度、含水率等。每口井的產(chǎn)出液通過管道運輸最終匯入公用環(huán)形管網(wǎng)流入集油站,通常情況下忽略沿程流量損失,產(chǎn)出液匯入公用環(huán)形管道時的流量以及物性參數(shù)與剛從油井產(chǎn)出時相同。
集油站是環(huán)形管網(wǎng)中流體流動的終點,各個油井的產(chǎn)出液經(jīng)過環(huán)形管網(wǎng)的運輸最終流入集油站,在計算過程中,集油站的進站壓力已知,作為迭代條件之一求解管道遍歷計算。
在管網(wǎng)拓撲結(jié)構(gòu)中,油井以及集油站通過各自運輸管道與環(huán)形管道相連的點即為連接節(jié)點。連接節(jié)點具有流量和壓力兩種物理屬性以及位置信息,連接節(jié)點的壓力決定了管道內(nèi)的流體流向以及集輸管網(wǎng)的壓力分布;連接節(jié)點作為環(huán)形管道中各管段的起點和終點,其位置信息決定了管網(wǎng)的拓撲結(jié)構(gòu)。在迭代計算過程中,與油井相連的連接節(jié)點提供流入環(huán)形管道的初始流量,并且各連接節(jié)點處應(yīng)滿足基爾霍夫第一定律,即流入節(jié)點的流量與流出節(jié)點的流量相等,表達式為
(2)
式(2)中:f(p)為節(jié)點壓力p下算出的節(jié)點處進出節(jié)點的流量之和,m3/h;n為與節(jié)點相連的管段數(shù)量;qv,i為節(jié)點處第i條與該節(jié)點相連管段的流量,m3/h,進入節(jié)點的流量取正,離開取負。
鄰接表是圖的一種鏈?zhǔn)酱鎯Y(jié)構(gòu)[21],在儲存管網(wǎng)拓撲結(jié)構(gòu)時,對管網(wǎng)中每一個連接節(jié)點建立一個單鏈表,鄰接表中第i個單鏈表的結(jié)點表示為起點為vi的管段,每個結(jié)點由三個屬性組成,分別為鄰接點屬性(adj)、鏈屬性(nex)和數(shù)據(jù)屬性(len),在計算中用數(shù)組存儲這三個屬性,N個表結(jié)點則一共包含3個長度為N的數(shù)組。表結(jié)點的鄰接點屬性(adj)儲存的是與起點鄰接的點的編號,即該管段終點編號;鏈屬性(nex)指向下一條相鄰管道;數(shù)據(jù)屬性(len)存儲管段的構(gòu)造屬性和流體屬性,用于壓降計算。每個鏈表上附設(shè)一個頭結(jié)點,頭結(jié)點同樣用數(shù)組儲存兩個屬性,分別為鏈屬性(head)以及數(shù)據(jù)屬性(data)。頭結(jié)點中,鏈屬性(head)指向起點vi連接的第一個管段,數(shù)據(jù)屬性(data)儲存起點vi的編號以及計算時該點的輸入流量以及初設(shè)壓力。以圖2中管段②為例,其為起點是編號1的邊,鏈表中表結(jié)點和頭結(jié)點存儲結(jié)構(gòu)如圖3所示,圖2中整個管網(wǎng)的鄰接表結(jié)構(gòu)如圖4所示,鄰接表實現(xiàn)代碼如下:
圖3 管段②的鏈表結(jié)構(gòu)Fig.3 Linked list structure of pipe segment②
圖4 圖2中管網(wǎng)鄰接表結(jié)構(gòu)Fig.4 Pipe network adjacency list structure in fig.2
double p[N],in[N];//p數(shù)組存儲連接節(jié)點壓力,in數(shù)組存儲節(jié)點輸入流量,兩個數(shù)組存儲在頭結(jié)點的數(shù)據(jù)屬性
int n,m,ee=0;//定義變量,n為節(jié)點總數(shù),m為管道總數(shù),ee為中間變量。
int adj[M<<1];//定義表結(jié)點鄰接點屬性數(shù)組。
int nex[M<<1];//定義表結(jié)點鏈屬性數(shù)組。
int head[N];//定義頭結(jié)點鏈屬性數(shù)組。
double len[M];//定義表結(jié)點數(shù)據(jù)屬性。
void add(int u,int v,double c)//u為管段作為起點的連接節(jié)點編號,v為管段作為終點的連接節(jié)點編號,c為管段的數(shù)據(jù)屬性,如管段的內(nèi)徑,長度,管段內(nèi)流體黏度等。
{
adj[++ee]=v;nex[ee]=head[u];head[u]=ee;len[ee]=c;// 建立鄰接表結(jié)構(gòu)。
}
int main()
{
scanf("%d%d",&n,&m);//輸入連接節(jié)點總數(shù)n,管段總數(shù)m。
int u,v,c;//u為管段作為起點的連接節(jié)點編號,v為管段作為終點的連接節(jié)點編號,c為管段的數(shù)據(jù)屬性,如管段的內(nèi)徑,長度,管段內(nèi)流體黏度等。
for (int i=1;i<=m;i++)
{
scanf("%d%d%d",&u,&v,&c);//輸入u、v、c。
add(u,v,c);
add(v,u,c);//根據(jù)輸入的編號建立鄰接表儲存拓撲結(jié)構(gòu)。
}
}
在遍歷管網(wǎng)時,需要從某一連接節(jié)點出發(fā),訪問該連接節(jié)點后依次訪問該點的鄰接點,然后分別從這些鄰接點出發(fā)再依次訪問它們的鄰接點,直至圖中所有的連接節(jié)點的鄰接點都被訪問到[21]。所以,基于廣度優(yōu)先搜索的方法(breadth-first search,BFS)適合進行整個管網(wǎng)的遍歷。在管網(wǎng)拓撲結(jié)構(gòu)中,集油站作為管道流體的終點,其連接節(jié)點唯一,所以從集油站連接節(jié)點開始訪問鄰接點,最后將訪問后的連接節(jié)點倒序存入數(shù)組,即管網(wǎng)中距離集油站最遠的連接節(jié)點編號為數(shù)組中首個數(shù)字,集油站連接節(jié)點編號為數(shù)組中末尾數(shù)字,在之后的迭代計算中,則調(diào)取數(shù)組中的順序進行遍歷計算。廣度優(yōu)先搜索的實現(xiàn)代碼如下:
void bfs(int x)
{
int t[N];//建立存儲連接節(jié)點順序的數(shù)組t。
int a[N];//建立輔助隊列a,用于存放節(jié)點。
int vis[N];//建立輔助隊列vis,用于存放為訪問過的節(jié)點。
int head,tail;//建立隊首指針head和隊尾指針tail。
head=tail=1;
a[1]=x;//將集油站連接節(jié)點編號放入隊列。
vis[x]=1;//這個點x被標(biāo)記為被訪問過。
while (head<=tail)//當(dāng)隊列不為空。
{
int u=a[head];//給出隊首節(jié)點。
t[n-num]=u;//給隊首節(jié)點標(biāo)記求解順序,其中n為連接節(jié)點總數(shù),num為被訪問過的節(jié)點總數(shù)。
num++;
for (int j=head[u];j>0;j=nex[j])
{
if (vis[e[j]]==0)
{
a[++tail]=e[j];
vis[e[j]]=1;
}
}//將隊首節(jié)點相鄰的未被訪問的節(jié)點加入隊列。
head++;//隊首節(jié)點出隊。
}
return;
}
在迭代求解時,參考趙丹銘等[22]提出的牛頓迭代法進行計算,該方法穩(wěn)定性好、收斂快、結(jié)果準(zhǔn)確。表達式為
(3)
γ=γδ
(4)
式中:p′為節(jié)點壓力p的修正值;γ為收斂因子,初始取1;f(p)為壓力p下算出的連接節(jié)點的進出流量之和;f(p′)為節(jié)點壓力p′下算出的連接節(jié)點的進出流量之和;f(p′)為f(p)的導(dǎo)數(shù);δ為收斂系數(shù),取值為0~1。
在遍歷計算時,p0為設(shè)置的初始壓力,p為待求的連接節(jié)點壓力,qvi為待求的管段流量,p′為壓力p的修正值,ε為設(shè)置的迭代精度。該迭代法步驟如下[15]:
Step 1從數(shù)組中調(diào)取連接節(jié)點編號順序,設(shè)置各連接節(jié)點壓力初值p0,按式(1)依次算出各環(huán)狀管段流量qvi。
Step 2根據(jù)式(2),按順序計算得到f(p),再依據(jù)式(3)算出新的連接節(jié)點壓力p′。
Step 3判斷連接節(jié)點是否同時滿足符合收斂條件f(p)<ε,若是,結(jié)束計算并顯示結(jié)果。若否,進行step 4。
Step 4采用step 2計算出的p′根據(jù)式(1)、式(2)計算出f(p′),并判斷是否符合收斂條件。若符合收斂條件,結(jié)束計算并顯示結(jié)果。若不符合收斂條件,繼續(xù)判斷;若f(p′)≤f(p),p′代替p回到step1進行新一輪迭代,γ取1; 否則,進入step5并循環(huán)直到f(p′)≤f(p)。
Step 5根據(jù)式(4)和設(shè)置的δ計算γ,再把算得的新γ代回式(3)和式(2)重新計算p′和f(p′),如此不斷縮小γ值更新p′,直到滿足f(p′)≤f(p)。
迭代計算結(jié)束后,輸出結(jié)果為各連接節(jié)點壓力和各管段流量,通過判斷各管段兩端的壓力大小即可得到流體流向,再根據(jù)式(1),求得各個油井運輸管段(如圖2管段⑦~⑩)的壓降,與連接節(jié)點壓力相加,可計算出各個油井的回壓,從而可得到整個集輸管網(wǎng)的計算結(jié)果。
某區(qū)塊集輸管網(wǎng)示意圖如圖5所示,區(qū)塊中有四口油井,一個集油站,油井的產(chǎn)液量以及流體參數(shù)、環(huán)形管網(wǎng)中管段的構(gòu)造屬性和流體屬性、集油站壓力等參數(shù)已知。實際測量值與算法計算值數(shù)據(jù)如表2與表3所示。
圖5 環(huán)狀管網(wǎng)計算模型示意圖Fig.5 Schematic diagram of ring pipe network calculation model
表2 計算壓力與實測壓力Table 2 Calculate the pressure value and the measured pressure value
表3 計算流量與實測流量Table 3 Calculate the flow value and the measured flow value
計算后可根據(jù)管道兩端的壓力差判別流動方向,流動方向如圖5所示,由計算結(jié)果表明,該算法計算的環(huán)狀管網(wǎng)壓力值相對誤差最大3.5%,流量值絕對誤差最大3.1%,工程應(yīng)用具有較高的精度,可作為集輸管網(wǎng)的遍歷計算方法。
(1)針對實際生產(chǎn)中管網(wǎng)拓撲結(jié)構(gòu)復(fù)雜的特點,利用圖論的思想將復(fù)雜管網(wǎng)模型簡化為各種元件順序相連的拓撲結(jié)構(gòu),每個管網(wǎng)元件包含了用于構(gòu)成管網(wǎng)拓撲結(jié)構(gòu)的連接屬性和進行壓降計算中所需的各種參數(shù)。
(2)由于環(huán)狀管網(wǎng)公用管道內(nèi)流向不確定造成各個管段內(nèi)的壓降以及連接節(jié)點壓力難以計算,無法通過簡單的壓降累加管網(wǎng)的壓力分布,所以提出了一種基于圖論算法,將簡化管網(wǎng)拓撲結(jié)構(gòu)中的各種元件賦予唯一編號,利用鄰接表儲存管網(wǎng)拓撲結(jié)構(gòu),廣度優(yōu)先搜索遍歷管網(wǎng)連接節(jié)點確定求解順序,在連接節(jié)點處建立方程并采用牛頓迭代法迭代計算,最終完成整個環(huán)狀管網(wǎng)的遍歷計算。
(3)通過計算實例表明,利用該算法的計算結(jié)果與實測數(shù)據(jù)誤差較小,工程應(yīng)用具有較高的精度,可以成為遍歷計算集輸管網(wǎng)流向、流量和壓力的分布的有效工具。