專利名稱:面向?qū)ο蟮臒N儲(chǔ)集層系統(tǒng)模擬的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)值模擬,尤其涉及模擬烴系統(tǒng)的一種改進(jìn)方法,烴系統(tǒng)包括下面的一個(gè)或多個(gè)地下含烴地層,穿過該地層的注入井,穿透該地層的生產(chǎn)井,地面流送管,相關(guān)含水層,以及地面流體處理設(shè)施。
背景技術(shù):
數(shù)值模擬作為一種使用計(jì)算機(jī)來模擬物理系統(tǒng)的方法被廣泛用于工業(yè)領(lǐng)域中。在大多數(shù)情況下,希望模擬在物理系統(tǒng)中發(fā)生的輸運(yùn)過程。被輸運(yùn)的典型地是質(zhì)量,能量,動(dòng)量,或其某種組合。通過使用數(shù)值模擬,能夠模擬并觀察物理現(xiàn)象,以及確定設(shè)計(jì)參數(shù),而不需要實(shí)際的實(shí)驗(yàn)室試驗(yàn)和實(shí)地試驗(yàn)。
儲(chǔ)集層模擬法是很有意義的,因?yàn)樗鼜膬?chǔ)集層模型的性能推斷真實(shí)含烴儲(chǔ)集層的性狀。儲(chǔ)集層模擬的典型目的在于充分地了解在儲(chǔ)集層中發(fā)生的復(fù)雜的化學(xué),物理和流體流動(dòng)過程來預(yù)測儲(chǔ)集層將來的性狀使烴的開采達(dá)到最大。儲(chǔ)集層模擬經(jīng)常指的是儲(chǔ)集層中流的流體力學(xué),但是在更大的意義上,儲(chǔ)集層模擬也可以指整個(gè)烴系統(tǒng),其可以不僅包括儲(chǔ)集層,而且包括注入井,生產(chǎn)井,地面流送管,相關(guān)含水層,以及地面處理設(shè)施。這種烴系統(tǒng)中的儲(chǔ)集層模擬計(jì)算基于通過被模擬的整個(gè)烴系統(tǒng)的流體流動(dòng)。這些計(jì)算以不同的精確度來執(zhí)行,依賴于具體模擬研究的需求和所使用的模擬軟件的能力。
數(shù)值模擬的原理是使用計(jì)算機(jī)來數(shù)值地求解描述物理現(xiàn)象的方程。這種方程通常是常微分方程和偏微分方程。作為用于數(shù)值地求解這種方程的方法,已知的有有限元法,有限差分法,有限容積法等。不管使用哪種方法,被模擬的物理系統(tǒng)被分成單元(稱為格或網(wǎng)格的集),并且在整個(gè)模型的空間中變化的狀態(tài)變量由每個(gè)單元的值的集來表示。儲(chǔ)集巖的性質(zhì)例如孔隙率和滲透率在單元內(nèi)典型地被假設(shè)為常數(shù)。其他變量例如流體壓力和相飽和度在單元內(nèi)規(guī)定點(diǎn),有時(shí)稱作節(jié)點(diǎn)處指定。兩個(gè)節(jié)點(diǎn)之間的鏈接稱作“連接”。
因?yàn)閮?chǔ)集層模擬可以包括非常不同的流體流動(dòng)環(huán)境(例如,多孔巖石,油管,處理設(shè)施),單元集可以包括不同流動(dòng)環(huán)境的多個(gè)段。雖然各個(gè)段,例如生產(chǎn)設(shè)施和地面管段,可以由單個(gè)單元來表示,但是有時(shí)儲(chǔ)集層模擬程序?qū)⑦@些段細(xì)分成多個(gè)單元。
一組方程被開發(fā)來表示每個(gè)單元內(nèi)質(zhì)量,能量和/或動(dòng)量守恒的基本原理以及單元之間質(zhì)量,能量和/或動(dòng)量運(yùn)動(dòng)的基本原理。這些方程可以百萬來計(jì)算。用每個(gè)單元的有限數(shù)目的變量值來代替在整個(gè)模型的空間中變化的狀態(tài)變量稱作“離散化”。為了分析隨時(shí)間變化的現(xiàn)象,需要在稱作時(shí)間步的離散時(shí)間間隔計(jì)算物理量,而不管為時(shí)間函數(shù)的連續(xù)變化條件。因此,輸運(yùn)過程的時(shí)間依賴模擬以時(shí)間步序列進(jìn)行。在希望的一段時(shí)間中的流的模擬通過增量地向前移過時(shí)間,并且在每個(gè)時(shí)間步對(duì)每個(gè)節(jié)點(diǎn)的壓力和流體含量求解方程來進(jìn)行。
已經(jīng)作出努力來以單一計(jì)算機(jī)代碼執(zhí)行廣泛變化的儲(chǔ)集層模擬方法。但是,這種“通用”模擬系統(tǒng)非常復(fù)雜,主要因?yàn)樗鼈儽辉O(shè)計(jì)來具有下面能力的一個(gè)或多個(gè)(1)表示許多不同類型的單元(例如,儲(chǔ)集層的不同疇,油管,地面油氣集輸和分配設(shè)施,以及地面處理設(shè)施);(2)使用不同的時(shí)間步計(jì)算方法(例如,IMPES,全隱式,順序隱式,自適應(yīng)隱式,和/或逐級(jí)測量法);(3)使用不同的表示儲(chǔ)集層流體的方法;(4)使用多種計(jì)算單元之間輸運(yùn)的方法;(5)執(zhí)行把烴看作由兩種成分組成的所謂的“黑油模型”,并且也具有執(zhí)行組成表示的能力,其中烴被假設(shè)包含化合物例如甲烷,乙烷,丙烷以及更重的烴;(6)模擬蒸汽噴射或就地燃燒過程,其必須考慮為時(shí)間函數(shù)的溫度變化,這需要能量平衡和相關(guān)計(jì)算;(7)使用專門的流體性質(zhì)和輸運(yùn)計(jì)算來模擬可混合開采過程;(8)模擬烴開采過程,其考慮表面活性劑,聚合物或其他化合物的注入,以及這些流體流入儲(chǔ)集層的流動(dòng);(9)模擬相互之間,與儲(chǔ)集層烴或儲(chǔ)集巖起化學(xué)反應(yīng)的化合物的注入;(10)模擬烴和地質(zhì)沉積物在地質(zhì)時(shí)期的遷移。
在歷史上,因?yàn)橥ㄓ媚M系統(tǒng)是復(fù)雜的,儲(chǔ)集層模擬程序典型地僅模擬地下儲(chǔ)集層中的流體運(yùn)動(dòng),或者它們模擬地下流體運(yùn)動(dòng)并包括簡化計(jì)算,例如水力學(xué)模型,來模擬儲(chǔ)集層和地面之間的井管中的流動(dòng)。為了更逼真地模擬通過井的以及在附接的地面生產(chǎn)設(shè)施(例如歧管,泵,壓縮機(jī),分離機(jī)和管道)中的流,典型地需要不同于儲(chǔ)集層模擬模型的分立的設(shè)施模擬模型。因?yàn)檫@些儲(chǔ)集層和設(shè)施模擬模型試圖描述很長一段時(shí)期,典型地許多年的流動(dòng)特性,并且模擬被離散化成覆蓋希望的模擬時(shí)期的時(shí)間步,試圖基于這兩個(gè)不同的模型設(shè)計(jì)集成的模擬過程是麻煩而且昂貴的。這種過程通常涉及在兩個(gè)模型之間交替時(shí)間步,使得在一個(gè)模型中發(fā)生的變化可以并入第二模型的隨后時(shí)間步的輸入中。
在過去的儲(chǔ)集層模擬中的一個(gè)挑戰(zhàn)性問題是缺乏通過儲(chǔ)集層模擬系統(tǒng)中的井管和地面設(shè)施的輸運(yùn)現(xiàn)象的精確模擬。傳統(tǒng)的儲(chǔ)集層模擬器典型地具有兩個(gè)重大的限制。首先,許多儲(chǔ)集層管理研究需要比可能在儲(chǔ)集層模擬器中的更高級(jí)的地面設(shè)施流動(dòng)模型。為了解決該問題,模擬器用戶典型地為儲(chǔ)集層特性開發(fā)并維持一個(gè)模擬模型而為設(shè)施特性開發(fā)并維持另一個(gè)模擬模型,沒有方便的方法來綜合來自兩個(gè)模型的結(jié)果,或者來容易地計(jì)算一個(gè)模型中的變化對(duì)另一個(gè)的特性的影響。其次,儲(chǔ)集層管理典型地涉及井或設(shè)施比率的動(dòng)態(tài)變化。因?yàn)樵O(shè)施率用作儲(chǔ)集層模擬計(jì)算的邊界條件,那些邊界條件的動(dòng)態(tài)變化經(jīng)常導(dǎo)致難于管理的模擬計(jì)算中的數(shù)值不穩(wěn)定性。
儲(chǔ)集層模擬中的另一個(gè)挑戰(zhàn)性問題是模擬器用戶指定模擬中的設(shè)施管理邏輯的能力。為了優(yōu)化烴從油田的生產(chǎn)需要一個(gè)連續(xù)的過程來在持續(xù)30或更多年的油田生命期內(nèi)監(jiān)測并控制生產(chǎn)和注入設(shè)施。為了使用儲(chǔ)集層模擬器來更準(zhǔn)確地預(yù)測儲(chǔ)集層的特性要求地面設(shè)施控制的影響在模擬過程中被考慮。專門的控制,以及它們的順序和同步難以編程到模擬器中,如果不是特別不可能的話,因?yàn)榕帕袑⑹菬o限的并且依賴于每個(gè)油田和每個(gè)模擬器用戶管理油田的方法。因此,儲(chǔ)集層模擬器用戶需要一個(gè)工具來能夠給模擬器指定用戶相信會(huì)優(yōu)化儲(chǔ)集層生產(chǎn)的自定義檢驗(yàn)和控制。然后,那些檢驗(yàn)和控制需要變成模擬器計(jì)算的組成部分。簡而言之,需要一個(gè)直觀的工具來捕捉每個(gè)模擬器用戶的自定義設(shè)施管理邏輯,將其轉(zhuǎn)換成與儲(chǔ)集層模擬器代碼集成的可執(zhí)行代碼,然后執(zhí)行作為結(jié)果產(chǎn)生的系統(tǒng)來預(yù)測儲(chǔ)集層在其生命期內(nèi)的全部特性。
該問題的典型解決方法是向用戶提供結(jié)構(gòu)能力的軟件的開發(fā)。模擬器用戶被提供有基于文本的編輯器或者他或她能夠從中獲得結(jié)構(gòu)集和固定的關(guān)鍵字集的界面。使用這些結(jié)構(gòu),模擬器用戶可以定義可能的條件,這些條件如果在模擬中被滿足,那么觸發(fā)修改井的特性的某種響應(yīng)。該方法對(duì)于用戶不是很直觀。匯編結(jié)構(gòu)和關(guān)鍵字的過程會(huì)是令人厭煩的,并且結(jié)果不容易讀或解釋,尤其是對(duì)于原來不涉及儲(chǔ)集層工程的人。沒有清晰的邏輯視圖,意味著不容易跟蹤邏輯背后推理的高級(jí)線。用戶在過程中具有有限的控制,并且可用于執(zhí)行的補(bǔ)救也被模擬器識(shí)別的有限的一組組合所限制,導(dǎo)致系統(tǒng)適應(yīng)非傳統(tǒng)儲(chǔ)集層管理策略的有限的適應(yīng)性。
在工業(yè)中需要一種儲(chǔ)集層模擬系統(tǒng)(1)提供通過井管和地面設(shè)施的流的更逼真的模擬(2)捕捉由儲(chǔ)集層模擬器用戶自定義的設(shè)施管理邏輯并將它作為儲(chǔ)集層模擬的一部分來執(zhí)行。
本發(fā)明概述本發(fā)明涉及一種用于模擬復(fù)雜系統(tǒng)中的輸運(yùn)現(xiàn)象的計(jì)算機(jī)系統(tǒng)和方法。該計(jì)算機(jī)系統(tǒng)包括內(nèi)存裝置,存儲(chǔ)裝置,以及一種面向?qū)ο蟮能浖a(chǎn)品。該軟件產(chǎn)品包括面向?qū)ο蟮目蓴U(kuò)展的類層次結(jié)構(gòu),其具有表示多種對(duì)象類型的通用類和表示對(duì)象類型的成員變量的分立的通用類。該可擴(kuò)展類層次結(jié)構(gòu)允許添加額外的對(duì)象類型或額外的成員變量,而不修改類層次結(jié)構(gòu)本身。
本發(fā)明對(duì)模擬儲(chǔ)集層系統(tǒng)特別有用。在將本發(fā)明應(yīng)用于儲(chǔ)集層系統(tǒng)模型中,設(shè)施網(wǎng)絡(luò)模型(“FNM”)被開發(fā),其擴(kuò)展離散化的儲(chǔ)集層模擬模型(包括節(jié)點(diǎn)和流連接)超出儲(chǔ)集層來包括用于模擬井管以及地面生產(chǎn)和注入設(shè)施(例如歧管,泵,壓縮機(jī),集輸管線,分離器和管道)中的流體流動(dòng)的節(jié)點(diǎn)和連接。每個(gè)不同的設(shè)施類型被模擬成專門類型的節(jié)點(diǎn),連接或幾個(gè)節(jié)點(diǎn)和連接的組合。在其最基本的形式中,整個(gè)模擬模型可以包括油田的每個(gè)部分,從地下儲(chǔ)集層,所有井和井硬件,以及地面設(shè)施一直到包括產(chǎn)品輸出口。
儲(chǔ)集層模擬系統(tǒng)優(yōu)選地隨儲(chǔ)集層模擬器使用設(shè)施管理邏輯(“FML”)。FML提供容易被模擬方法的用戶使用的邏輯視圖。FML的使用是靈活的并且可以與儲(chǔ)集層模擬器集成。FML包括三個(gè)部分(1)邏輯圖界面,(2)從邏輯圖的C++代碼(工業(yè)標(biāo)準(zhǔn)編程語言)生成器(3)將代碼與儲(chǔ)集層模擬器本身集成的專門的軟件設(shè)計(jì)。
附圖簡述新的儲(chǔ)集層模擬系統(tǒng)及其優(yōu)點(diǎn)通過參考下面的詳細(xì)描述和附圖將變得更加明白。
圖1說明離散化的儲(chǔ)集層模擬模型以及它的油井和地面設(shè)施的附接網(wǎng)絡(luò)。
圖2和3說明顯示設(shè)施網(wǎng)絡(luò)模型的通用C++類層次結(jié)構(gòu)。圖3是圖2中所示的類層次結(jié)構(gòu)的一部分。
圖4用其表示的設(shè)施的名字來標(biāo)記的圖標(biāo)和箭頭的圖形表示來說明一個(gè)簡單的設(shè)施網(wǎng)絡(luò)。
圖5說明顯示簡化的設(shè)施管理邏輯的邏輯圖。
圖6說明實(shí)例模擬器類層次結(jié)構(gòu)一小部分的示意圖。
圖7擴(kuò)展圖6中的圖,說明動(dòng)態(tài)專門化如何被用來支持用戶編寫操作。
附圖并不打算著將作為這些具體實(shí)施方案的正常和期望修改的結(jié)果的其他實(shí)施方案排斥在新的儲(chǔ)集層模擬系統(tǒng)的范圍之外。
本發(fā)明詳述本發(fā)明的具有內(nèi)存裝置,存儲(chǔ)裝置,和面向?qū)ο蟮能浖a(chǎn)品的計(jì)算機(jī)系統(tǒng)可以用于模擬復(fù)雜的系統(tǒng),例如被離散化為結(jié)構(gòu)網(wǎng)格,非結(jié)構(gòu)網(wǎng)格,或兩者組合的烴系統(tǒng)的二維和三維疇。該計(jì)算機(jī)系統(tǒng)也可以用于計(jì)算方法得到具有多于三維的拓?fù)?,例如在模擬通過斷裂多孔介質(zhì)的流體流動(dòng)時(shí)發(fā)生的情況中。模擬系統(tǒng)對(duì)模擬其中發(fā)生輸運(yùn)現(xiàn)象的復(fù)雜系統(tǒng)的特性是有用的。術(shù)語“輸運(yùn)現(xiàn)象”在廣泛意義上用于本描述中,包括動(dòng)量輸運(yùn)(粘滯流動(dòng)),能量輸運(yùn)(熱傳導(dǎo),對(duì)流和輻射)以及質(zhì)量輸運(yùn)(擴(kuò)散)。例如,模擬系統(tǒng)對(duì)模擬烴從儲(chǔ)集巖中使用各種輔助開采技術(shù)的提取特別有用,這些技術(shù)例如,但不局限于,基于熱方法的開采方法例如注蒸汽操作,注水操作,以及可以在可混合或不可混合條件下操作的基于氣體驅(qū)動(dòng)的方法。模擬系統(tǒng)也可以用于模擬通過地層的雜質(zhì)運(yùn)送。在本描述中,模擬系統(tǒng)將關(guān)于在非結(jié)構(gòu)網(wǎng)格系統(tǒng)上執(zhí)行通用的儲(chǔ)集層模擬來描述,并且對(duì)于模擬不僅包括儲(chǔ)集層,而且包括相關(guān)含水層,生產(chǎn)井,注入井,地面流送管,歧管,分離器,閥,泵,壓縮機(jī),或者任何其他地面處理或輸運(yùn)設(shè)施的含烴系統(tǒng)中的并行計(jì)算特別有用。
出于詳細(xì)描述本發(fā)明的目的,幾個(gè)術(shù)語被定義來闡明它們的意思?!皟?chǔ)集層模擬模型”是真實(shí)烴儲(chǔ)集層的專門數(shù)學(xué)表示。管理烴儲(chǔ)集層的工程師可以創(chuàng)建可能具有不同復(fù)雜度的許多不同的儲(chǔ)集層模擬模型,以便量化儲(chǔ)集層過去的性能并預(yù)測它未來的性能。在本發(fā)明中,儲(chǔ)集層模擬模型是儲(chǔ)集層的物理空間以及在烴流體開采中使用的井和地面設(shè)施的離散化表示。在本描述中使用的“設(shè)施”是烴流體通過其從儲(chǔ)集層中生產(chǎn)或者注入儲(chǔ)集層的有形物理裝備。在其最廣泛的意義上,術(shù)語設(shè)施適用于沿著儲(chǔ)集層和作為烴流體離開模型(生產(chǎn)流體)或者進(jìn)入模型(注入流體)的位置的其輸出口之間的流動(dòng)路徑出現(xiàn)的任何裝備。設(shè)施可以包括生產(chǎn)井,注入井,井管,井源裝備,集輸管線,歧管,泵,壓縮機(jī),分離器,地面流線和輸出口。在某些情況下,術(shù)語“地面設(shè)施”用來區(qū)分那些設(shè)施和油井?!霸O(shè)施網(wǎng)絡(luò)”是在模型中出現(xiàn)的設(shè)施的全集,其包括所有的井以及井源和輸出口之間的地面設(shè)施。
包括三維含烴儲(chǔ)集層及其相關(guān)設(shè)施的儲(chǔ)集層模擬模型在圖1中說明。在圖1中示意地說明的儲(chǔ)集層模擬模型包括被用虛線表示的井106a,108a和110a穿過的離散化的儲(chǔ)集層100,并且包含另外的設(shè)施節(jié)點(diǎn)102,103和104以及設(shè)施連接112,114,116,118和120。在圖1中,儲(chǔ)集層100被表示為包括用窄實(shí)線畫出的許多體積單元101。雖然在圖1中沒有明確地顯示,每個(gè)單元101表示在其中心包含一個(gè)節(jié)點(diǎn)的三維的空間容積。雖然沒有明確地顯示,每對(duì)相鄰的儲(chǔ)集層節(jié)點(diǎn)具有相應(yīng)節(jié)點(diǎn)之間的連接。在儲(chǔ)集層模擬模型中,烴流體基于節(jié)點(diǎn)之間的壓力差和連接的傳輸性質(zhì)流過一對(duì)節(jié)點(diǎn)之間的連接。這樣,烴流體可以從一個(gè)體積單元輸運(yùn)到一個(gè)相鄰的體積單元。每個(gè)井106a,108a和110a分別包括各自的一個(gè)節(jié)點(diǎn)106b,108b和110b。雖然同樣在圖1中沒有明確地顯示,每個(gè)井節(jié)點(diǎn)經(jīng)由連接附接到相應(yīng)井軌道所經(jīng)過的每個(gè)儲(chǔ)集層節(jié)點(diǎn)。設(shè)施節(jié)點(diǎn)103和104以及設(shè)施連接112,114,116,118和120表示將從儲(chǔ)集層100生產(chǎn)到井106a,108a和110a中的流體運(yùn)送到公共傳送點(diǎn)102的流線的集輸網(wǎng)絡(luò)。
面向?qū)ο缶幊瘫景l(fā)明的實(shí)現(xiàn)使用面向?qū)ο缶幊?“OOP”)技術(shù)。最通用OOP的編程語言是Simula,Eiffel,C++,Smalltalk,Objective-C,或其變種。但是,本發(fā)明的實(shí)踐并不局限于具體的OOP語言。C++在本詳述中用來幫助讀者更好地理解和認(rèn)識(shí)OOP的好處。OOP的設(shè)計(jì)對(duì)OOP系統(tǒng)領(lǐng)域的技術(shù)人員是眾所周知的,并且僅一般地描述。
在面向?qū)ο蟮某绦蛑?,焦點(diǎn)主要集中在數(shù)據(jù)上,其次集中在訪問該數(shù)據(jù)的函數(shù)上,而不是主要集中在函數(shù)上,而其次集中在它們需要的數(shù)據(jù)上。與數(shù)據(jù)輸入到每個(gè)過程或從每個(gè)過程輸出的主要通過過程來描述的程序(例如用FORTRAN或COBOL編寫的程序)不同,面向?qū)ο蟮某绦驀@“對(duì)象”來組織。對(duì)象是一種數(shù)據(jù)結(jié)構(gòu)以及可以訪問該數(shù)據(jù)結(jié)構(gòu)的一組操作或函數(shù)。OOP系統(tǒng)典型地將包含大量的對(duì)象。可以訪問數(shù)據(jù)結(jié)構(gòu)的每個(gè)操作(函數(shù))稱作“方法”。出于本發(fā)明的目的,對(duì)象包含的數(shù)據(jù)稱作“成員變量”,而對(duì)象具有的方法稱作“成員函數(shù)”。對(duì)象可以被認(rèn)為是巧妙的數(shù)據(jù)集,因?yàn)閷?duì)象的成員函數(shù)給予對(duì)象改變自身,也就是,改變其成員變量的值的能力。
“類”是專門類型對(duì)象的模板。類定義與對(duì)象相關(guān)聯(lián)的信息(它的數(shù)據(jù))以及它可以執(zhí)行的操作(它的方法)。當(dāng)對(duì)象被創(chuàng)建時(shí),類被用作模板來定義該對(duì)象具有的什么數(shù)據(jù)和方法。對(duì)象被稱作定義它的類的“實(shí)例”。可以有許多不同的對(duì)象,都是同一個(gè)類的實(shí)例,但是每個(gè)實(shí)例具有其自己的數(shù)據(jù)和方法。
典型的面向?qū)ο蟮能浖O(shè)計(jì)在其核心包含可以集體地稱作“數(shù)據(jù)模型”的一組類。數(shù)據(jù)模型中給定的類定義一個(gè)專門類型的“對(duì)象”,其可以包含數(shù)據(jù)(“成員變量”)和方法(“成員函數(shù)”)。數(shù)據(jù)模型是面向?qū)ο筌浖摹绑w系結(jié)構(gòu)”的主要部分。面向?qū)ο筌浖a(chǎn)品的“體系結(jié)構(gòu)”包括軟件的全部設(shè)計(jì),包括它圍繞之建立的數(shù)據(jù)模型。
OOP使得對(duì)象能夠用由數(shù)據(jù)表示的其特征和由可以使用數(shù)據(jù)來執(zhí)行的方法表示的其行為來模擬實(shí)際上任何真實(shí)世界的實(shí)體。這樣,對(duì)象可以模擬具體事物象儲(chǔ)集層模擬中的單元以及抽象概念象數(shù)字。出于本發(fā)明的目的,OOP的好處起于三個(gè)基本的原理封裝,繼承和多態(tài)。
對(duì)象隱藏或封裝其數(shù)據(jù)的內(nèi)部結(jié)構(gòu),即對(duì)象包含的成員變量的顯式集,以及其成員函數(shù)用來工作的算法。代替暴露這些實(shí)現(xiàn)細(xì)節(jié),對(duì)象給出明確表示其抽象的沒有任何無關(guān)信息的接口。接口僅允許外部世界和對(duì)象之間有限數(shù)目的交互。在C++編程中,大部分這些交互涉及調(diào)用對(duì)象的成員函數(shù)。通過調(diào)用對(duì)象的成員函數(shù),外部世界可以告訴對(duì)象去做一些事情,但是對(duì)象如何執(zhí)行該動(dòng)作的細(xì)節(jié)對(duì)外部世界是不可見的。實(shí)際上,對(duì)象封裝其數(shù)據(jù)和方法,并且對(duì)外部世界隱藏它們。
例如,計(jì)算節(jié)點(diǎn)性質(zhì)的軟件系統(tǒng)的面向?qū)ο髷?shù)據(jù)模型可能具有稱作“BaseNode”的類。BaseNode類可以具有成員變量例如包含數(shù)值來定義BaseNode對(duì)象在空間中的位置的“x_位置”,“y_位置”和“z_位置”,以及包括成員函數(shù)來改變BaseNode對(duì)象的x,y或z坐標(biāo)值的值。建立于該實(shí)例數(shù)據(jù)模型上的軟件系統(tǒng)可能包含代碼來創(chuàng)建和修改任何數(shù)目的不同的BaseNode對(duì)象。每個(gè)BaseNode對(duì)象都包含其自己獨(dú)一無二的其成員變量的值,并且每個(gè)都具有內(nèi)部的成員函數(shù)來修改那些成員變量。從軟件系統(tǒng)的角度,BaseNode對(duì)象如何維護(hù)其位置信息是無關(guān)緊要的。軟件系統(tǒng)僅需要BaseNode成員函數(shù)來設(shè)置和取得該數(shù)據(jù)。這種將數(shù)據(jù)(成員變量)和代碼(成員函數(shù))組織成類稱作封裝。
繼承允許軟件開發(fā)者以“類層次結(jié)構(gòu)”的形式來設(shè)計(jì)數(shù)據(jù)模型,使得相關(guān)的類模仿對(duì)象類型的自然分類。繼承的三個(gè)主要好處在于,它允許軟件開發(fā)者來設(shè)計(jì)有效地封裝數(shù)據(jù)的代碼,它允許在專門類上實(shí)現(xiàn)方法使得這些方法可以用于許多專門化類型的對(duì)象,以及它促進(jìn)先存在設(shè)計(jì)和代碼的重用。在類層次結(jié)構(gòu)中,通用的數(shù)據(jù)和方法屬于“基”類或“超類”。更專門化的類(“子類”)“繼承”基類的數(shù)據(jù)和方法,并且定義它們自己的另外的數(shù)據(jù)和方法。這些專門化的類從基類派生。繼承允許軟件開發(fā)者定義類以及隨后從它們創(chuàng)建的并且通過類層次結(jié)構(gòu)相關(guān)聯(lián)的對(duì)象。特別地,類可以指定為其他基類的子類。子類繼承并且具有到其基類的所有函數(shù)的通路據(jù)就好像這些函數(shù)出現(xiàn)在子類中。繼承允許以前編寫的程序通過創(chuàng)建對(duì)象新的超類和子類來擴(kuò)展。新的對(duì)象通過它們?nèi)绾尾煌谙却嬖诘膶?duì)象使得不需要編寫完全新的程序來處理新的數(shù)據(jù)類型或函數(shù)來描述。
作為說明繼承的類層次結(jié)構(gòu)的一個(gè)實(shí)例,擴(kuò)展先前的BaseNode類的實(shí)例,稱作“WellNode”的第二個(gè)類從BaseNode類繼承。WellNode的對(duì)象既是WellNode又是BaseNode,但是WellNode類可以定義專門對(duì)WellNode的數(shù)據(jù)和代碼。如果定義第三個(gè)類“NetworkNode”,其也從BaseNode繼承,但是不從WellNode繼承,那么NetworkNode的對(duì)象將不包含WellNode專用的數(shù)據(jù)或代碼。但是,WellNode的對(duì)象和NetworkNode的對(duì)象都將包含BaseNode專用的數(shù)據(jù)和代碼。該簡單的實(shí)例僅顯示具有一級(jí)附加專門化(WellNode和NetworkNode類)的BaseNode類。但是,繼承允許任意數(shù)目的專門化層次,使得WellNode類可以具有進(jìn)一步的子類,并且BaseNode也可以具有進(jìn)一步的超類。
多態(tài)使得封裝更進(jìn)一步。一個(gè)軟件成分可以請(qǐng)求另一個(gè)成分而不用確切地知道該成分是什么。接收請(qǐng)求的成分解釋它并根據(jù)其變量和數(shù)據(jù)來確定如何執(zhí)行請(qǐng)求。使用先前作為例子來描述的簡單的類層次結(jié)構(gòu),軟件成分可以調(diào)用BaseNode的對(duì)象的成員函數(shù)。軟件成分不需要知道BaseNode的對(duì)象實(shí)際上是WellNode的對(duì)象還是NetworkNode的對(duì)象。但是,類層次結(jié)構(gòu)使得WellNode的對(duì)象和NetworkNode的對(duì)象能夠包含被調(diào)用成員函數(shù)的不同的實(shí)現(xiàn)。層次結(jié)構(gòu)中的每個(gè)類可以包含成員函數(shù)的相同的抽象接口,但是他們可以具有適合于執(zhí)行成員函數(shù)的專門類型對(duì)象的不同的功能性。
設(shè)施網(wǎng)絡(luò)模型本發(fā)明的儲(chǔ)集層模擬系統(tǒng)包括設(shè)施網(wǎng)絡(luò)模型(“FNM”)。FNM被設(shè)計(jì)來使代碼改變和重新編譯的需要達(dá)到最小。這通過在FNM C++類層次結(jié)構(gòu)中定義通用類來實(shí)現(xiàn)。典型的通用C++類層次結(jié)構(gòu)在圖2和3中顯示。圖2中的每個(gè)方框(編號(hào)200到218)表示一個(gè)C++類。類之間的在一端具有空三角形的實(shí)線表示類之間的繼承關(guān)系,基類在具有三角形的一端而派生類在相對(duì)的一端。兩個(gè)類之間的虛線表示那兩個(gè)類的對(duì)象之間的關(guān)聯(lián)。標(biāo)注虛線的文本表示關(guān)聯(lián)的名字,并且在每個(gè)關(guān)聯(lián)兩端的數(shù)字標(biāo)注表示關(guān)聯(lián)的基數(shù)。例如,關(guān)聯(lián)“node_is_child_of”220在“Node”端具有“1”標(biāo)注,在“Connection”端具有“0..*”標(biāo)注。這些標(biāo)注表示每個(gè)Connection的對(duì)象正好具有為該Connection的對(duì)象的孩子的1個(gè)Node,并且每個(gè)Node的對(duì)象具有該Node的對(duì)象為其孩子的零或許多Connection的對(duì)象。每個(gè)通用類僅包含成員變量和成員函數(shù)的最小集來定義所有的該類對(duì)象的通用行為。例如,通用節(jié)點(diǎn)類(圖2中的Node 203)是通過節(jié)點(diǎn)的某些專門化來模擬的所有設(shè)施類型的類層次結(jié)構(gòu)中最專門化類型的類,不管該節(jié)點(diǎn)表示井中的位置,地面流線,分離器,還是可以通過節(jié)點(diǎn)來表示的某種其他設(shè)施。分立的通用類被用來定義專門化設(shè)施類型的命名“屬性”(參看AttributeValue 211及其派生類212和213)。使用通用的設(shè)施類型類(200到205)和通用的命名屬性類(207和213)允許希望的設(shè)施類型的基本上所有專門化行為在“定義數(shù)據(jù)文件”(以下稱作“DDF”)中定義。在本描述末尾的附錄6列出該文件的一個(gè)實(shí)例。使用通用設(shè)施和通用屬性類的關(guān)鍵設(shè)計(jì)特點(diǎn)使得FNM能夠可變通和可擴(kuò)展,使得新的設(shè)施類型或新的屬性可以通過增加或修改DDF的內(nèi)容而被并入。該特點(diǎn)避免增加或改變數(shù)據(jù)模型中的類,這需要大大地修改源代碼并且重新編譯修改后代碼。
FNM數(shù)據(jù)模型在圖3中繼續(xù),其顯示記住在DDF中定義的設(shè)施類型和屬性類型的一系列類。
DDF包含每個(gè)可能設(shè)施類型的文本描述,例如“WellNode”,“NetworkNode”,“SeparatorNode”,“Well”以及“NetworkConnection”。它也包含那些設(shè)施類型的每個(gè)專門化命名屬性的文本描述。當(dāng)DDF被軟件處理時(shí),它為DDF中的每個(gè)專門化設(shè)施類型創(chuàng)建FacilityTypeSystemAttributes對(duì)象(303),并且為DFF中的每個(gè)命名屬性創(chuàng)建AttributeDefinition對(duì)象(304)。FacilityTypeSystemAttributes對(duì)象從基類VarBase300,VariableAttributesBase 301和FacilityType 302繼承。facility_has_system_attribute關(guān)聯(lián)(305)將專門的FacilityTypeSystemAttributes對(duì)象(具體設(shè)施類型的定義)關(guān)聯(lián)到該設(shè)施類型的所有AttributeDefinition的對(duì)象(專門的命名屬性的定義)。在DDF已被完全處理之后,儲(chǔ)集層模擬系統(tǒng)包含定義可能的設(shè)施類型(FacilityTypeSystemAttributes對(duì)象303的集合)的對(duì)象和那些設(shè)施類型中的每個(gè)必須具有的屬性(AttributeDefinition對(duì)象304的集合)??捎玫脑O(shè)施類型和命名屬性的定義在軟件中保持不變,直到DDF被修改并被再次處理,這典型地僅當(dāng)新的設(shè)施類型或?qū)傩员恍枰獣r(shí)發(fā)生。
使用本發(fā)明的儲(chǔ)集層模擬系統(tǒng)包括用于定義作為給定模擬模型一部分的設(shè)施的網(wǎng)絡(luò)(“設(shè)施網(wǎng)絡(luò)”)的圖形用戶界面(GUI)。GUI將設(shè)施網(wǎng)絡(luò)顯示為通過連接箭頭相互附接的圖標(biāo)的集合。
圖4說明簡單設(shè)施網(wǎng)絡(luò)的這種圖形用戶界面。不同的圖標(biāo)可以被用來表示不同的設(shè)施類型(井,分離器,網(wǎng)絡(luò)結(jié)點(diǎn)),而連接箭頭表示“象節(jié)點(diǎn)”的設(shè)施之間的流線。在圖4中,每個(gè)文本框(以“b”為后綴的401b到410b)表示用圖標(biāo)或箭頭(以“a”為后綴的401a到410a)表示的設(shè)施的名字。圖4中的實(shí)例設(shè)施網(wǎng)絡(luò)包含三個(gè)井406a,408a,410a,以及這些井附接到的地面流動(dòng)網(wǎng)絡(luò)。該地面網(wǎng)絡(luò)包含網(wǎng)絡(luò)節(jié)點(diǎn)403a和404a,終端節(jié)點(diǎn)401a,網(wǎng)絡(luò)連接405a,407a和409a,以及終端連接402a。井406a和408a生產(chǎn)通過網(wǎng)絡(luò)連接405a和407a移到網(wǎng)絡(luò)節(jié)點(diǎn)404a的流體。來自井410a的流體在網(wǎng)絡(luò)節(jié)點(diǎn)403a與來自其他兩個(gè)井的產(chǎn)品融合。從網(wǎng)絡(luò)節(jié)點(diǎn)403a,流體繼續(xù)到輸出口終端節(jié)點(diǎn)401a。
FNM GUI提供自定義的對(duì)話框,菜單和工具條,使得用戶可以相對(duì)容易地構(gòu)建并修改設(shè)施網(wǎng)絡(luò)。當(dāng)用戶為了儲(chǔ)集層模擬研究向設(shè)施網(wǎng)絡(luò)增加專門設(shè)施時(shí),儲(chǔ)集層模擬系統(tǒng)使用適當(dāng)?shù)腇acilityTypeSystemAttributes對(duì)象303(給出用戶增加的設(shè)施的類型)來定位AttributeDefinition對(duì)象(304)的集合,這向系統(tǒng)提供需要用來創(chuàng)建實(shí)際設(shè)施對(duì)象(202,203,204或205)以及所有其系統(tǒng)定義的屬性對(duì)象(212)的信息。
自定義設(shè)施管理邏輯的支持FNM的通用C++數(shù)據(jù)模型簡化下面描述的補(bǔ)充自定義設(shè)施管理邏輯系統(tǒng)(“FML”)。FML系統(tǒng)被設(shè)計(jì)用于在正在運(yùn)行的模擬模型中監(jiān)測和控制設(shè)施的操作來最優(yōu)化烴在油田生命期內(nèi)的生產(chǎn)。FML在模擬運(yùn)行期間操作從FNM數(shù)據(jù)模型的對(duì)象創(chuàng)建并類似于FNM數(shù)據(jù)模型的對(duì)象的設(shè)施對(duì)象。為了使FML的可定制性達(dá)到最大,F(xiàn)NM數(shù)據(jù)模型包括用戶定義的命名屬性(UserAttributeValue,213,圖2)。用戶可以為任何一個(gè)可用的設(shè)施類型創(chuàng)建另外的命名屬性(超出用戶在DDF中定義的那些),然后在其自定義FML中使用那些自定義的命名屬性。用戶定義的命名屬性的定義保存為AttributeDefinition對(duì)象(218,圖2),并且與對(duì)應(yīng)于屬性已經(jīng)為其定義的設(shè)施類型的FacilityTypeUserAttributes對(duì)象(217,圖2)相關(guān)聯(lián)。
FNM可以用任何適合的面向?qū)ο缶幊陶Z言來使用。包括通用設(shè)施類型,通用命名屬性,和用戶定義屬性的數(shù)據(jù)模型設(shè)計(jì)并不局限于C++實(shí)現(xiàn)。但是,F(xiàn)NM將優(yōu)選地使用與儲(chǔ)集層模擬程序中使用的相同的面向?qū)ο缶幊陶Z言來促進(jìn)與儲(chǔ)集層模擬器的其他成分的兼容性。
OOP類層次結(jié)構(gòu)的新穎用法對(duì)于本發(fā)明的計(jì)算機(jī)系統(tǒng),新的方法已經(jīng)被用來分開大量成員變量和它們所屬的對(duì)象。類層次結(jié)構(gòu)包括兩個(gè)類子層次結(jié)構(gòu),一個(gè)子層次結(jié)構(gòu)包含定義多種“設(shè)施類型”的類,而另一個(gè)子層次結(jié)構(gòu)包含定義多種“屬性值”的類。兩個(gè)子層次結(jié)構(gòu)通過它們各自的基類來相互引用-基本的設(shè)施類型類(FacBase,圖2中的200)具有通過ValueUse類(206,圖2)到基本的命名屬性值類(Value,圖2中的207)的關(guān)聯(lián)或引用。在本用法中,設(shè)施對(duì)象將引用許多不同的屬性值對(duì)象。每個(gè)屬性值對(duì)象包含幫助定義設(shè)施對(duì)象的特征的專門化的數(shù)據(jù)單元。概念地,設(shè)施由相關(guān)對(duì)象的集合-設(shè)施對(duì)象本身加上所有其相關(guān)屬性值對(duì)象來定義。這種類體系結(jié)構(gòu)并不嚴(yán)格遵循傳統(tǒng)的OOP封裝慣例,因?yàn)樵O(shè)施的數(shù)據(jù)并不全部地包含于單個(gè)對(duì)象中。但是,屬性值對(duì)象被有效地封裝,因?yàn)樗鼈兊脑L問仍然通過設(shè)施對(duì)象的方法來提供。
本發(fā)明的計(jì)算機(jī)系統(tǒng)的另一個(gè)獨(dú)特的特征在于設(shè)施類型類和屬性值類都是“通用的”。特別地,這意味著在兩個(gè)先前描述的子層次結(jié)構(gòu)的每個(gè)中最專門化的類能夠表示許多不同的,更專門化的設(shè)施類型,以及許多不同的屬性值。例如,一種類型的專門化設(shè)施類是Node(203,圖2)。該類是通用的因?yàn)镹ode的對(duì)象可以被實(shí)例化來表示多種不同的節(jié)點(diǎn)設(shè)施類型,即使類層次結(jié)構(gòu)不具有每個(gè)節(jié)點(diǎn)設(shè)施類型的不同的專門化節(jié)點(diǎn)類。同樣地,SystemAttributeValue(212,圖2)是通用屬性類因?yàn)镾ystemAttributeValue對(duì)象可以被實(shí)例化來表示多種不同的屬性類型,例如浮點(diǎn)標(biāo)量,整型標(biāo)量,字符串,枚舉類型,浮點(diǎn)數(shù)組,以及整型數(shù)組。
包含通用的設(shè)施類型和屬性值類的類層次結(jié)構(gòu)的關(guān)鍵優(yōu)點(diǎn)在于軟件系統(tǒng)中支持的設(shè)施類型和屬性值的集合可以被修改(另外的設(shè)施類型和屬性值被定義,或現(xiàn)有的設(shè)施類型和屬性值被刪除)而不改變類層次結(jié)構(gòu),從而避免需要重新編譯源代碼來適應(yīng)對(duì)設(shè)施類型或?qū)傩灾档母淖?。在?dāng)前系統(tǒng)中,可以稱作“數(shù)據(jù)定義文件”的明文文件,例如,ASCII文件包含定義每種設(shè)施類型和每種設(shè)施類型的所有屬性值的文本輸入。該數(shù)據(jù)定義文件被程序處理來創(chuàng)建軟件系統(tǒng)中的定義。設(shè)施類型定義是FacilityType類(302,圖3)的對(duì)象。屬性值定義是AttributeDefinition類(305,圖3)的對(duì)象。當(dāng)用戶操作系統(tǒng)來創(chuàng)建模擬模型時(shí),定義對(duì)象被軟件使用,無論什么時(shí)候用戶需要?jiǎng)?chuàng)建設(shè)施的實(shí)例及其附隨屬性值的實(shí)例時(shí)。
本發(fā)明的FNM解決了地下含烴儲(chǔ)集層及相關(guān)生產(chǎn)設(shè)施的復(fù)雜模擬模型的開發(fā)者所面臨的三個(gè)挑戰(zhàn)性問題1.設(shè)施和儲(chǔ)集層的流體流動(dòng)計(jì)算的集成,在過去這需要每個(gè)的模型,這些模型足夠相似以致允許統(tǒng)一的解決方法。
2.本發(fā)明的設(shè)施流體流動(dòng)計(jì)算模型是可變通而且可容易擴(kuò)展的,使得現(xiàn)有設(shè)施類型的性狀可以被擴(kuò)展或另外的設(shè)施類型可以被加入,而相對(duì)較小地改變軟件。
3.設(shè)施模型體系結(jié)構(gòu)支持自定義設(shè)施管理邏輯系統(tǒng),其被希望在模擬運(yùn)行期間動(dòng)態(tài)地控制設(shè)施的性狀。
設(shè)施管理邏輯設(shè)施管理邏輯(“FML”)是為物理系統(tǒng)例如儲(chǔ)集層模擬系統(tǒng)中的井及相關(guān)地面設(shè)施的操作控制而設(shè)計(jì)的一種編程系統(tǒng)。FML包括三個(gè)部分(1)邏輯界面,這里稱作“邏輯圖”,(2)從邏輯圖的C++代碼(工業(yè)標(biāo)準(zhǔn)編程語言)產(chǎn)生器,以及(3)將FML代碼和儲(chǔ)集層模擬器本身集成的專門軟件設(shè)計(jì)。
邏輯圖邏輯圖包括圖形用戶界面,模擬器用戶可以用它來動(dòng)態(tài)地構(gòu)建設(shè)施管理邏輯的流程圖,從而使得用戶能夠自定義被模擬的物理系統(tǒng)的模擬。動(dòng)態(tài)構(gòu)建邏輯的能力指用戶構(gòu)建需要用來解決設(shè)施管理問題的邏輯的能力。邏輯可以由用戶通過邏輯界面來構(gòu)建。邏輯界面可以用來執(zhí)行選自下面的至少一步開發(fā)新的邏輯;選擇并使用用戶或其他人以前可能為其他設(shè)施管理問題而構(gòu)建的現(xiàn)有邏輯;選擇并修改現(xiàn)有邏輯。流程圖包括表示基本的邏輯控制結(jié)構(gòu)的圖標(biāo)和表示邏輯從一個(gè)圖標(biāo)前進(jìn)到另一個(gè)的箭頭。邏輯圖的出發(fā)點(diǎn)包括開始圖標(biāo)(表示邏輯的入口點(diǎn)),結(jié)束圖標(biāo)(表示邏輯的出口點(diǎn)),以及兩者之間的單箭頭。箭頭具有單方向,它們表示圖標(biāo)被計(jì)算的順序。用戶的任務(wù)是思考希望的邏輯,并且通過建立代表性的流程圖來模擬該邏輯。所有邏輯可以在一個(gè)高級(jí)圖中,或者它可以被分解為多個(gè)圖,每個(gè)表示邏輯的一個(gè)模塊。邏輯的每個(gè)模塊稱作操作。主操作是最高級(jí)的操作。這種邏輯的一個(gè)簡化實(shí)例在圖5中顯示。
圖5圖解地說明顯示一個(gè)簡單設(shè)施管理邏輯的簡化邏輯圖的一個(gè)實(shí)例。該邏輯使用三種圖標(biāo)類型(三個(gè)處理圖標(biāo)512,520和526,兩個(gè)邏輯測試圖標(biāo)516和522,以及一個(gè)循環(huán)圖標(biāo)514)。在執(zhí)行儲(chǔ)集層模擬的過程中,該邏輯以規(guī)則的間隔重復(fù)地執(zhí)行,每次在生產(chǎn)井上執(zhí)行檢驗(yàn)和控制。特別地,在生產(chǎn)井上有一個(gè)循環(huán)(循環(huán)圖標(biāo)514),其在“生產(chǎn)者”集的所有成員上重復(fù)。在循環(huán)體(圖標(biāo)516,520,522,526,528,530以及將這些圖標(biāo)相互連接和連接到循環(huán)圖標(biāo)514的箭頭)中,“生產(chǎn)者”集中專門的生產(chǎn)井的水率被檢驗(yàn)兩次(在邏輯測試圖標(biāo)516和522處)。如果在邏輯測試圖標(biāo)516處水率超過每天4000桶,那么井被修理(處理圖標(biāo)520)試圖減少水率。如果在邏輯測試圖標(biāo)522處水率超過每天5000桶,那么井被關(guān)閉(處理圖標(biāo)526)。
三種類型的圖標(biāo)形成流程圖的構(gòu)件塊。處理圖標(biāo)用來表示等式或者對(duì)作用于設(shè)施來用某種方法改變它們的狀態(tài)的操作(例如打開或關(guān)閉井)的調(diào)用。處理圖標(biāo)表示語句執(zhí)行,并且總是具有單一向內(nèi)箭頭和單一向外箭頭,表明只有一條執(zhí)行路徑通過該處理圖標(biāo)。邏輯測試圖標(biāo)用來在流程圖中作出判斷。邏輯測試圖標(biāo)包含計(jì)算為真(是)或假(否)的用戶指定的表達(dá)式。邏輯測試圖標(biāo)具有兩個(gè)向外箭頭,沿著一個(gè)如果表達(dá)式為真(在圖5中,邏輯測試圖標(biāo)516的箭頭518和邏輯測試圖標(biāo)522的箭頭524),沿著另一個(gè)如果表達(dá)式為假(在圖5中,邏輯測試圖標(biāo)516的箭頭519和邏輯測試圖標(biāo)522的箭頭525)?!斑壿嫓y試結(jié)構(gòu)”包括邏輯測試“圖標(biāo)”,以及沿著是和否邏輯分支直到邏輯測試結(jié)構(gòu)的結(jié)束標(biāo)記(邏輯測試圖標(biāo)522的圖標(biāo)528和邏輯測試圖標(biāo)516的圖標(biāo)530)的所有邏輯。循環(huán)圖標(biāo)用于在邏輯上循環(huán),例如無論什么時(shí)候邏輯必須在流程圖中被重復(fù)地計(jì)算時(shí)。循環(huán)圖標(biāo)包含控制什么類型的循環(huán)將發(fā)生的邏輯(在圖5中,循環(huán)圖標(biāo)514是在一個(gè)集的成員上的循環(huán))?!把h(huán)結(jié)構(gòu)”包括循環(huán)圖標(biāo)以及在循環(huán)圖標(biāo)的開始箭頭(515)和下一個(gè)箭頭(531)之間的所有邏輯圖標(biāo)。經(jīng)常地,設(shè)施管理邏輯實(shí)際上是重復(fù)的,并且循環(huán)圖標(biāo)和循環(huán)結(jié)構(gòu)是支持這一概念的方法。
FML用戶通過在適當(dāng)?shù)膱D形用戶界面(邏輯圖)中使用鼠標(biāo)光標(biāo)瞄準(zhǔn)并點(diǎn)擊來為模擬模型中希望的應(yīng)用建立流程圖。使用在GUI中顯示的流程圖,用戶決定下一步需要三種圖標(biāo)類型中的哪種,然后通過在希望的按鈕上點(diǎn)擊來激活三個(gè)工具條按鈕中的一個(gè)。接下來,用戶將光標(biāo)移到流程圖中表示下一個(gè)圖標(biāo)的插入點(diǎn)的現(xiàn)有箭頭上。當(dāng)用戶通過在其上點(diǎn)擊來選擇箭頭時(shí),系統(tǒng)插入圖標(biāo)并管理現(xiàn)有和新的箭頭的創(chuàng)建和附接。
模擬器用戶的下一個(gè)任務(wù)是給插入的圖標(biāo)填上關(guān)于該圖標(biāo)具體地作什么的信息。例如,如果它是邏輯測試圖標(biāo),那么用戶定義作為真/假測試的基礎(chǔ)的表達(dá)式。如果它是循環(huán)圖標(biāo),那么需要信息來指定重復(fù)的基礎(chǔ),以及重復(fù)應(yīng)該執(zhí)行多少次。對(duì)于處理圖標(biāo),用戶可能需要編寫等式或指定關(guān)于操作將如何被調(diào)用的細(xì)節(jié)。對(duì)于這些任務(wù)中每個(gè),用戶可以鍵入信息,或者可以利用指導(dǎo)用戶通過建立圖標(biāo)內(nèi)容所需的許多步驟的一系列上下文相關(guān)菜單和對(duì)話框。
對(duì)于信息在每個(gè)圖標(biāo)中被指定的方式,專門的語法是優(yōu)選的。語法可以通過稱作設(shè)施管理控制語言的FML專門格式來定義。當(dāng)使用菜單和對(duì)話框時(shí),許多語法細(xì)節(jié)被自動(dòng)處理。如果用戶直接為每個(gè)圖標(biāo)鍵入信息,那么遵守語法規(guī)則是用戶的責(zé)任。如果用戶不喜歡用圖形邏輯圖來操作,他或她可以可選地專門在基于文本的邏輯代碼界面(稱作文本模式視圖)中工作,其中用戶可以輸入直接作為文本的所有設(shè)施管理控制語言,而沒有在FML邏輯圖視圖中提供的可見的幫助(圖標(biāo),箭頭,菜單或?qū)υ捒?。一旦用戶開始在文本模式視圖中工作,他或她不能回到與他們正在指定的邏輯相對(duì)應(yīng)的邏輯圖。
在本說明書末尾的附錄1包含來自圖5中以流程圖形式表示的邏輯的文本模式視圖的文本。在附錄1中出現(xiàn)的文本符合設(shè)施管理控制語言的語法。一旦用戶已經(jīng)使用流程圖視圖輸入邏輯,F(xiàn)ML自動(dòng)生成該文本模式視圖。用戶不需要看到該視圖或以該視圖來操作,如果他或她不想的話。另一方面,一些用戶可能選擇直接在文本模式視圖中輸入所有的邏輯,或者它們可能喜歡編輯,包括輸入,修改或刪除一旦處于這種形式中的邏輯。如果他們是這樣,那么邏輯圖視圖對(duì)該組邏輯不再可用。只要用戶僅使用邏輯圖視圖來創(chuàng)建或編輯邏輯,那么用戶可以在兩種視圖之間來回切換。
C++代碼的生成當(dāng)邏輯被完成,并且用戶準(zhǔn)備開始模擬時(shí),系統(tǒng)必須將設(shè)施管理控制語言轉(zhuǎn)換成C++代碼,使得它可以和模擬器一起執(zhí)行。如果使用邏輯圖,那么系統(tǒng)首先將流程圖轉(zhuǎn)換成設(shè)施管理控制語言。邏輯到面向?qū)ο蟠a的轉(zhuǎn)換可以使用任何適合的轉(zhuǎn)換方法來執(zhí)行。這是對(duì)用戶隱藏的自動(dòng)步驟。如果使用文本模式,那么已經(jīng)在視圖中的設(shè)施管理控制語言被使用。
然后系統(tǒng)開始解析設(shè)施管理控制語言的處理來驗(yàn)證語法。隨著解析的進(jìn)行,句法上正確而且完整的表示邏輯的設(shè)施管理控制語言自動(dòng)地轉(zhuǎn)換成ANSI標(biāo)準(zhǔn)面向?qū)ο驝++代碼。如果發(fā)現(xiàn)語法錯(cuò)誤,那么它們被報(bào)告。如果沒有錯(cuò)誤,那么C++代碼的完整集與其他的模擬器輸入數(shù)據(jù)一起寫入文件。
位于本說明書末尾的附錄2到5描述為圖5和附錄1中的樣本邏輯而生成的C++代碼。
在附錄2中,指向網(wǎng)絡(luò)中每個(gè)設(shè)施的全局指針被聲明并初始化。該列表基于網(wǎng)絡(luò)中的設(shè)施的數(shù)目和類型以及由用戶指定的設(shè)施名字而不同。指針指向在隨后部分以及圖6和7中描述的接口類。
在附錄3中,附錄2中所示的所有的全局設(shè)施指針被初始化來指向模擬器中的實(shí)際設(shè)施對(duì)象。
在附錄4中,在每個(gè)時(shí)間步,模擬器調(diào)用名為wm initialize()的函數(shù)。這保證全局設(shè)施指針指向模擬器對(duì)象(通過調(diào)用附錄3中的wm_initialize_globals()),然后它調(diào)用實(shí)際的設(shè)施管理邏輯。剩余的聲明描述動(dòng)態(tài)專門化的一個(gè)實(shí)例,其中當(dāng)Functor0類出于定義用來形成生產(chǎn)井集的方法的唯一目的而被聲明時(shí),SimWmWellInterface類被專門化。動(dòng)態(tài)專門化關(guān)于圖6來討論,在本說明書后面將更詳細(xì)地討論。
附錄5列出圖5和附錄1中描述的設(shè)施管理邏輯的C++代碼。
當(dāng)主模擬器產(chǎn)生時(shí),它從輸入文件中提取C++代碼,并將該代碼放入編譯文件。主模擬器啟動(dòng)模擬器運(yùn)行平臺(tái)本地的C++編譯器,然后編譯器將代碼轉(zhuǎn)換成目標(biāo)文件。然后C++鏈接器被啟動(dòng)來創(chuàng)建動(dòng)態(tài)鏈接庫(NT上)或共享程序庫(UNIX上)。然后模擬器裝載該庫,準(zhǔn)備執(zhí)行代碼。當(dāng)主模擬器已經(jīng)裝載庫時(shí),集成模擬系統(tǒng)被創(chuàng)建,包括主模擬器和自定義邏輯。
當(dāng)集成模擬系統(tǒng)正在執(zhí)行的適當(dāng)時(shí)間,模擬器調(diào)用與如前所述包含所有設(shè)施管理邏輯或者調(diào)用包含邏輯模塊的其他操作的主操作相對(duì)應(yīng)的C++代碼。在任何一種情況下,所有邏輯被執(zhí)行,并且一旦完成,代碼將控制返回給模擬器。然后模擬器繼續(xù)它的計(jì)算,這可能受邏輯改變?cè)O(shè)施狀態(tài)的方式的影響。然后模擬器繼續(xù)隨時(shí)間“前移”來計(jì)算儲(chǔ)集層的性狀。有規(guī)律地貫穿該推進(jìn),相同的設(shè)施管理邏輯被執(zhí)行,從而不斷地影響油田在其模擬生命期內(nèi)的性狀。然后模擬器用戶可以檢查結(jié)果,并且可能改進(jìn)設(shè)施管理邏輯或模擬器輸入數(shù)據(jù)。最終,當(dāng)結(jié)果可以接受時(shí),該設(shè)施管理邏輯可以形成實(shí)際的設(shè)施管理策略的基礎(chǔ)然后將被用于實(shí)際的儲(chǔ)集層。
與儲(chǔ)集層模擬器的結(jié)合為了使邏輯影響模擬器使用的設(shè)施的狀態(tài),模擬器執(zhí)行邏輯是不夠的。邏輯,或者更特別地從邏輯生成的面向?qū)ο驝++代碼,與主模擬器的數(shù)據(jù)模型集成。主模擬器系統(tǒng)和與主模擬器的數(shù)據(jù)模型集成的面向?qū)ο驝++代碼的組合總體地稱作集成模擬系統(tǒng)。為了將面向?qū)ο驝++代碼和數(shù)據(jù)模型集成,并且為了使處理更有效,利用面向?qū)ο蟮臄?shù)據(jù)模擬技術(shù),尤其是多繼承和多態(tài),以及動(dòng)態(tài)專門化?,F(xiàn)在將描述使用面向?qū)ο蠹夹g(shù)的優(yōu)選方法。
多繼承和多態(tài)為了編譯和鏈接C++代碼并將它與模擬器集成,C++代碼必須知道模擬器的數(shù)據(jù)和方法的各個(gè)方面。這通過包含數(shù)據(jù)和方法的描述的“包含”文件來實(shí)現(xiàn)。這些文件稱作頭文件。這些頭文件優(yōu)選地與模擬器一起提供,使得編譯和鏈接可以被執(zhí)行。當(dāng)更多的頭文件被包含于C++代碼中時(shí),編譯和鏈接的處理會(huì)慢下來。為了提高性能,優(yōu)選地減少頭文件的數(shù)目及其包含的數(shù)據(jù)。多繼承和多態(tài)優(yōu)選地用來實(shí)現(xiàn)這一目的。
一系列空的“接口”對(duì)象被創(chuàng)建,其表示實(shí)際上包含數(shù)據(jù)和方法的模擬器對(duì)象。該方法在圖6中概述。
圖6示意地說明模擬器數(shù)據(jù)模型的一小部分。虛線對(duì)角線608隔開“接口”端的類和“模擬器”端的類。在一端具有空三角形的實(shí)線表示繼承關(guān)系,基類在關(guān)系的三角形一端,派生類在相對(duì)的一端。虛線608左邊的接口類600和602基本上是空的。它們不包含成員變量,僅包含空的成員函數(shù)聲明(數(shù)據(jù)模型的C++實(shí)現(xiàn)中的“純虛”操作)。接口類WellInterface 602包含空操作“shut_in”和“open”。Well的模擬器端版本(606)具有Well的對(duì)象的成員變量和成員函數(shù)“sbut_in”和“open”的真實(shí)實(shí)現(xiàn)。多繼承允許接口類的使用和聲明。模擬器端的Well類606既經(jīng)由繼承箭頭609從接口類WellInterface 602繼承,又經(jīng)由繼承箭頭610從模擬器類Object 604繼承。WellInterface類602是ObjectInterface 600的專門化。模擬器端的基類Object 604經(jīng)由繼承箭頭611從ObjectInterface類600繼承。多態(tài)允許空接口操作“open”在接口類WellInterface 602上被調(diào)用,然后在實(shí)際的模擬器類Well 606上執(zhí)行真實(shí)的“open”操作。該范例用來用相應(yīng)的接口類表示每個(gè)模擬器設(shè)施類。
只有接口對(duì)象需要能夠編譯和鏈接邏輯。因?yàn)榫幾g器只看到簡單的接口類,復(fù)雜部分和私有信息仍然對(duì)編譯器和可能查看文件的任何人隱藏。附錄2中所示的設(shè)施管理控制語言僅包含接口對(duì)象指針,而不包含模擬器對(duì)象指針。因?yàn)榻涌趯?duì)象是空的,編譯/連接處理快,并且有關(guān)模擬器需要的數(shù)據(jù)和方法集的細(xì)節(jié)不公開(例如對(duì)可能掃描計(jì)算機(jī)磁盤以獲取文件的人)。多繼承允許接口類與模擬器類相關(guān)聯(lián),而多態(tài)允許使用在接口類中聲明的空方法來間接調(diào)用真實(shí)的方法。
動(dòng)態(tài)專門化由模擬器用戶開發(fā)的每個(gè)邏輯操作與一般的設(shè)施網(wǎng)絡(luò)或?qū)iT的設(shè)施相關(guān)聯(lián)。用戶依賴于邏輯的本質(zhì)來作選擇。為了使這些操作可以在已經(jīng)描述的模擬器數(shù)據(jù)模型框架中執(zhí)行,操作需要變成類的方法。因?yàn)镃++不允許向現(xiàn)有的類增加方法而不重新編譯模擬器(或其重要部分),方法必須增加到只有邏輯代碼知道的新的類中。這導(dǎo)致在運(yùn)行時(shí)間新的類從現(xiàn)有的接口類專門化的設(shè)計(jì)。該方法在圖7中示意地顯示。
圖7擴(kuò)展圖6中的圖,說明動(dòng)態(tài)專門化如何被用來支持用戶編寫操作。對(duì)角虛線710隔開接口類700,702和704以及模擬器類706和708。這里,用戶已經(jīng)為Well類型的設(shè)施編寫名為“special_well_logic”的新的操作。為了支持新操作的聲明,接口類通過使用由設(shè)施管理控制語言到C++的語法分析器編寫的類聲明在運(yùn)行時(shí)間自動(dòng)地被專門化。在本實(shí)例中,類“WellInterface_User”704被語法分析器創(chuàng)建,并且它包含新的邏輯操作的聲明以及包括新的邏輯操作的代碼。因此,對(duì)于屬于Well類型的設(shè)施,既可以調(diào)用內(nèi)部操作(來自WellInterface 702和ObjectInterface 700),又可以調(diào)用用戶操作(來自WellInterface_User704)。
數(shù)據(jù)模型被擴(kuò)展,但是僅對(duì)于邏輯代碼。模擬器的其他部分并不知道該擴(kuò)展,所以從模擬器的角度,數(shù)據(jù)模型并沒有改變,因此模擬器代碼不需要被編譯來使用用戶定義的邏輯。同時(shí),邏輯知道新的類并認(rèn)識(shí)新的操作。從用戶的角度,模擬器知道的內(nèi)部操作和模擬器不知道的自定義操作都用完全相同的方法來調(diào)用。而且,屬于從接口類派生的類的新操作,具有與接口類相同的到內(nèi)部操作和數(shù)據(jù)的通道。結(jié)果是模擬器代碼和自定義代碼之間的表面無縫集成。
FML系統(tǒng)可以通過本領(lǐng)域技術(shù)人員而與使用面向?qū)ο笤O(shè)計(jì)的優(yōu)選地使用C++來編碼的儲(chǔ)集層模擬器集成在一起。FML系統(tǒng)的先決條件是它必須與具有面向?qū)ο笤O(shè)計(jì)的模擬器集成在一起。
正是面向?qū)ο笤碇С侄嗬^承,多態(tài)和類專門化的概念,這對(duì)于無縫集成FML和模擬器是必須的。FML可以和使用C++之外的面向?qū)ο笳Z言來實(shí)現(xiàn)的模擬器一起使用。其他面向?qū)ο缶幊?“OOP”)技術(shù)可以被使用,包括但不局限于,Simula,Eiffel,Smalltalk,Objective-C,或其變種。FML的實(shí)施并不局限于具體的OOP語言。
如果使用C++之外的其他OOP系統(tǒng),C++代碼生成步驟將需要修改來生成替換的OOP語言,并且這也隱含著模擬器也具有面向?qū)ο蟮臄?shù)據(jù)模型。
具有FML系統(tǒng)結(jié)構(gòu)的儲(chǔ)集層模擬模型允許用戶開發(fā)自定義設(shè)施管理邏輯來實(shí)際地模擬任何策略。因而,邏輯的排列實(shí)際上是無窮的。
可變通而且可擴(kuò)展的數(shù)據(jù)模型設(shè)計(jì)儲(chǔ)集層模擬系統(tǒng)優(yōu)選地也使用C++的面向?qū)ο筇卣鱽斫鉀Q可擴(kuò)展性問題。軟件設(shè)計(jì)優(yōu)選地使用C++類的集合(集體地稱作“數(shù)據(jù)模型”)來定義具有指定數(shù)據(jù)(成員變量)和行為(成員函數(shù))的對(duì)象。成員變量和成員函數(shù)是硬編碼的,也就是說,它們?cè)陬愖陨碇卸x,意味著對(duì)類作擴(kuò)展;例如,新的成員變量,新的成員函數(shù),新的類需要代碼改變和重新編譯。
在典型的OOP類層次結(jié)構(gòu)中,給定類的所有成員變量都被封裝在該類中。因此,作為該類的實(shí)例的對(duì)象通過作為成員函數(shù)的其公用接口來保護(hù)并控制到它們的成員變量的訪問。
已經(jīng)描述了新的儲(chǔ)集層模擬系統(tǒng)的原理以及試圖應(yīng)用該原理的最佳方式。對(duì)本領(lǐng)域技術(shù)人員明顯的是,可以不背離于上面描述的本儲(chǔ)集層模擬系統(tǒng)的精神和范圍而對(duì)上面描述的實(shí)施方案作各種改變。因此,應(yīng)該理解的是,本發(fā)明并不局限于所顯示和描述的具體細(xì)節(jié)。
附錄1<pre listing-type="program-listing"><![CDATA[∥ Start of Global Variable Declarations∥ End of Global Variable Declarationswm_main( ){ ∥ Start of module code∥ Start of Local Variable DeclarationsSet<Well> producers;Ref<Well> well in set;∥ End of Local Variable Declarations{ ∥ Start of Process icon constructproducers.form_set(candidate.facility_descriptor==″producer″);} ∥ End of Process icon construct{ ∥ Start of loop constructforeach well_in_set in producers{ ∥ Start of loop body{ ∥ Start of logical test constructif (( well_in_set.get_phase_rate(WATER) >4000. )){{ ∥ Start of Process icon constructwell_in_set.workover(WRKOVR_CLOSE,BY_RESCONN,″WCUT>. 6″);} ∥ End of Process icon construct{ ∥ Start of logical test constructif ((well_in_set.get_phase_rate(WATER)>5000.)){{ ∥ Start of Process icon constructwell_in_set.shut_in(NO_CROSS_FLOW);} ∥ End of Process icon construct}else{}} ∥ End of logical test construct}else{} ∥ End of logical test construct} ∥ End of loop body} ∥ End of loop construct{return;}} ∥ End of module code]]></pre>
附錄2<pre listing-type="program-listing"><![CDATA[#include″q\rell_sim\bin\runtime_includes\wm_headers.h″SimWmWellNodeInterface* wellnode_potnorth = NULL;SimWmWellNodeInterface* wellnode_potsouth = NULL;SimWmWellNodeInterface* wellnode_prod100 = NULL;SimWmWellNodeInterface* wellnode_prod82 = NULL;SimWmNetworkNodeInterface* netnode_injector = NULL;SimWmNetworkNodeInterface* netnode_producer = NULL;SimWmTerminalNodeInterface* termnode_injector = NULL;SimWmTerminalNodeInterface* termnode_producer = NULL;SimWmReservoirConnectionInterface* potnorth_rc_0 = NULL;SimWmReservoirConnectionInterface* potnorth_rc_1 = NULL;SimWmReservoirConnectionInterface* potnorth_rc_2 = NULL;SimWmReservoirConnectionInterface* potsouth_rc_0 = NULL;SimWmReservoirConnectionInterface* potsouth_rc_1 = NULL;SimWmReservoirConnectionInterface* potsouth_rc_2 =NULL;SimWmReservoirConnectionInterface* prod100_rc_0 = NULL;SimWmReservoirConnectionInterface* prod100_rc_1 = NULL;SimWmReservoirConnectionInterface* prod100_rc_2 = NULL;SimWmReservoirConnectionInterface* prod82_rc_0 = NULL;SimWmReservoirConnectionInterface* prod82_rc_1 = NULL;SimWmReservoirConnectionInterface* prod82_rc_2 = NULL;SimWmTerminalConnectionInterface* termconn_injector = NULL;SimWmNetworkConnectionInterface* netconn_potnorth = NULL;SimWmNetworkConnectionInterface* netconn_potsouth = NULL;SimWmNetworkConnectionInterface* netconn_prod100 = NULL;SimWmTerminalConnectionInterface* termconn_producer = NULL;SimWmNetworkConnectionInterface* netconn_prod82 = NULL;SimWmWellInterface* potnorth = NULL;SimWmWellBranchInterface* wellbranch1 = NULL;SimWmWellInterface* potsouth = NULL;SimWmWellBranchInterface* wellbranch2 = NULL;SimWmWellInterface* prod100 = NULL;SimWmWellBranchInterface* wellbranch3 = NULL;SimWmWellInterface* prod82 = NULL;SimWmWellBranchInterface* wellbranch4 = NULL;]]></pre>
附錄3<pre listing-type="program-listing"><![CDATA[void wm_initialize_globals(){static int wmig_was_called = 0;if (wmig_was_called) return;wmig_was_called = 1;wellnode_potnorth = (SimWmWellNodeInterface*) SimWmFNControllerUtility∷lookup_object(″wellnode_potnorth″, VM_GetInterfaceID<SimWmWellNodeInterface>() ());wellnode_potsouth = (SimWmWellNodeInterface*) SimWmFNControllerUtility∷lookup_object(″wellnode_potsouth″, VM_GetInterfaceID<SimWmWellNodeInterface>() ());wellnode_prod100 = (SimWmWellNodeInterface*) SimWmFNControllerUtility∷lookup_object(″wellnode_prod100″, VM_GetInterfaceID<SimWmWellNodeInterface>() ());wellnode_prod82 = (SimWmWellNodeInterface*) SimWmFNControllerUtility∷lookup_object(″wellnode_prod82″, VM_GetInterfaceID<SimWmWellNodeInterface>()());netnode_injector = (SimWmNetworkNodeInterface*) SimWmFNControllerUtility∷lookup_object(″netnode_injector″, VM_GetInterfaceID<SimWmNetworkNodeInterface>()());netnode_producer = (SimWmNetworkNodeInterface*) SimWmFNControllerUtility∷lookup_object(″netnode_producèr″, VM_GetInterfaceID<SimWmNetworkNodeInterface>()());termnode_injector = (SimWmTerminalNodeInterface*) SimWmFNControllerUtility∷lookup_object(″termnode_injector″, VM_GetInterfaceID<SimWmTerminalNodeInterface>()());termnode_producer = (SimWmTerminalNodeInterface*) SimWmFNControllerUtility∷lookup_object(″termnode_producer″, VM_GetInterfaceID<SimWmTerminalNodeInterface>() ());potnorth_rc_0 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″potnorth_rc_0″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());potnorth__rc_1 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″potnorth_rc_1″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());potnorth_rc_2 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″potnorth_rc_2″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>() ());potsouth_rc_0 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″potsouth_rc_0″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>() ());potsouth_rc_1 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″potsouth_rc_1″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());potsouth_rc_2 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″potsouth_rc_2″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());prod100_rc_0 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″prod100_rc_0″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());prod100_rc_1= (SimWmReservoirConnectionInterface* ) SimWmFNControllerUtility∷lookup_object(″prod100_rc_1″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());prod100_rc_2 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″prod100_rc_2″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>() ());prod82_rc_0 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″prod82_rc_0″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()());prod82_rc_1 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″prod82_rc_1″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()()); prod82_rc_2 = (SimWmReservoirConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″prod82_rc_2″, VM_GetInterfaceID<SimWmReservoirConnectionInterface>()()); termconn_injector = (SimWmTerminalConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″termconn_injector″, VM_GetInterfaceID<SimWmTerminalConnectionInterface>()()); netconn_potnorth = (SimWmNetworkConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″netconn_potnorth″, VM_GetInterfaceID<SimWmNetworkConnectionInterface>()()); netconn_potsouth = (SimWmNetworkConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″netconn_potsouth″, VM_GetInterfaceID<SimWmNetworkConnectionInterface>()()); netconn_prod100 = (SimWmNetworkConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″netconn_prod100″, VM_GetInterfaceID<SimWmNetworkConnectionInterface>()()); termconn_producer = (SimWmTerminalConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″termconn_producer″, VM_GetInterfaceID<SimWmTerminalConnectionInterface>()()); netconn_prod82 = (SimWmNetworkConnectionInterface*) SimWmFNControllerUtility∷lookup_object(″netconn_prod82″, VM_GetInterfaceID<SimWmNetworkConnectionInterface>()()); potnorth = (SimWmWellInterface*) SimWmFNControllerUtility∷lookup_object(″potnorth″, VM_GetInterfaceID<SimWmWellInterface>()()); wellbranchl = (SimWmWellBranchInterface*) SimWmFNControllerUtility∷lookup_object(″wellbranchl″, VM_GetInterfaceID<SimWmWellBranchInterface>()()); potsouth = (SimWmWellInterface*) SimWmFNControllerUtility∷lookup_object(″potsouth″, VM_GetInterfaceID<SimWmWellInterface>() ()); wellbranch2 = (SimWmWellBranchInterface*) SimWmFNControllerUtility∷lookup_object(″wellbranch2″, VM_GetInterfaceID<SimWmWellBranchInterface>()()); prod100 = (SimWmWellInterface*) SimWmFNControllerUtility∷lookup_object(″prod100″, VM_GetInterfaceID<SimWmWellInterface>()()); wellbranch3 = (SimWmWellBranchInterface*) SimWmFNControllerUtility∷lookup_object(″wellbranch3″, VM_GetInterfaceID<SimWmWellBranchInterface>()()); prod82 = (SimWmWellInterface*) SimWmFNControllerUtility∷lookup_object(″prod82″, VM_GetInterfaceID<SimWmWellInterface>()()); wellbranch4 = (SimWmWellBranchInterface*) SimWmFNControllerUtility∷lookup_object(″wellbranch4″, VM_GetInterfaceID<SimWmWellBranchInterface>() ()); }]]></pre>
附錄4<pre listing-type="program-listing"><![CDATA[ void wm_main(); extern ″C″{ void wm_initialize() { wm_initialize_globals(); wm_main(); } } class Functor0public Selector<SimWmWellInterface> { public Functor0(); virtual ~Functor0(); virtual Bool operator() (SimWmWellInterface* candidate) const; }; Functor0∷Functor0() { ∥ do nothing else } Functor0∷~Functor0() { ∥ do nothing else } Bool Functor0∷operator() (SimWmWellInterface* candidate) const { return (*((String*)(candidate->lookup_attribute(″facility_descriptor″,0, TYPE_String))) == ″producer″); }]]></pre>
附錄5<pre listing-type="program-listing"><![CDATA[ void wm_main() { Set<SimWmWellInterface>producers; SimWmWellInterface* well_in_set = NULL; { producers.foRM_set(new Functor0()); } { producers.reset(); while(producers.get_next(well_in_set)) { PhaseTypeEnum scratch_0 = (PhaseTypeEnum)(WATER); if ((well_in_set->get_phase_rate(scratch_0) > 4000.)) { { WorkoverTypeEnum scratch_1 =(WorkoverTypeEnum)(WRKOVR_CLOSE); WorkoverLevelTypeEnum scratch_2 = (WorkoverLevelTypeEnum)(BY_RESCONN); String scratch_3 = ″WCUT>.6″; well_in_set->workover(scratch_1,scratch_2,scratch_3); } { PhaseTypeEnum scratch_4 = (PhaseTypeEnum)(WATER); if ((well_in_set->get_phase_rate(scratch_4)>5000.)) { ShutInTypeEnum scratch_5 =ShutInTypeEnum)(NO_CROSS_FLOW); well_in_set->shut_in(scratch_5); } else { } } } else { } } } return; }]]></pre>
附錄6這一來自數(shù)據(jù)定義文件的摘錄說明設(shè)施類型定義和命名屬性定義的層次結(jié)構(gòu)本質(zhì)。包含于該摘錄中的設(shè)施類型示范了定義終端用戶設(shè)施類型“網(wǎng)絡(luò)節(jié)點(diǎn)”的基本設(shè)施類型級(jí)。摘錄包括網(wǎng)絡(luò)節(jié)點(diǎn)具有的三個(gè)命名屬性的定義。命名屬性中兩個(gè)在設(shè)施對(duì)象級(jí)定義,第三個(gè)在節(jié)點(diǎn)級(jí)定義。
<pre listing-type="program-listing"><![CDATA[∥ Comments in the Data Definitions File begin with ″∥″∥ ″\″at the end of a line indicates continuation on the subsequent line∥ Highest level base facility type is FacBaseName ″FacBase″ Definition ″FacBase Definition″ Is Obsolete F IOArchive Class Name ″NA″ Long Name ″FacBase″ View Name ″View Name″ Decomp Hierarchy″″ Dimensionality ″″ Req by Restart Rule ″restart rule″ Req by Simulator Rule ″simulator rule″ Req by User Rule″user rule″ Valid Rule ″valid rule″ Bitmap Resource it is only defined in the DataDefinitions File. Name ″GeneralFacilityNode″ Definition ″generic class used to represent mostfacility types″ Is Obsolete F IOArchive Class Name ″NA″ Long Name ″GeneralFacilityNode″ View Name ″View Name″ Decomp Hierarchy″″ Dimensionality ″″ Req by Restart Rule ″restart rule″ Req by Simulator Rule ″simulator rule″ Req by User Rule″user rule″ Valid Rule ″valid rule″ Bitmap Resource it is only defined in the DataDefinitions ∥File. Name ″NetworkNode″ Definition ″NetworkNode Definition″ Is Obsolete F IOArchive Class Name ″NA″ Long Name ″NetworkNode″ View Name ″View Name″ Decomp Hierarchy″″ Dimensionality ″″ Req by Restart Rule ″restart rule″ Req by Simulator Rule ″simulator rule″ Req by User Rule″user rule″ Valid Rule ″valid rule″ Bitmap Resource ID 0 Instantiable F Member of Granule F Simulator Variable F Time Variant FDecomposable F Spec for all Nodes F Change Invalidates F Parent Facility ″GeneralFacilityNode″ Is Abstract F]]></pre>
權(quán)利要求
1.一種計(jì)算機(jī)系統(tǒng),包括內(nèi)存裝置,存儲(chǔ)裝置和面向?qū)ο蟮能浖a(chǎn)品,該軟件產(chǎn)品包含用于存儲(chǔ)輸運(yùn)現(xiàn)象模擬數(shù)據(jù)的面向?qū)ο蟮目蓴U(kuò)展類層次結(jié)構(gòu),該類層次結(jié)構(gòu)包括表示多種對(duì)象類型的通用類的第一集合和表示對(duì)象類型的成員變量的通用類的第二集合,該可擴(kuò)展的類層次結(jié)構(gòu)允許增加另外的對(duì)象類型和另外的成員變量,而不修改類層次結(jié)構(gòu)本身。
2.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中輸運(yùn)現(xiàn)象包括下列一種或多種地下含烴儲(chǔ)集層中以及地下含烴儲(chǔ)集層和地面上的一個(gè)或多個(gè)輸送位置之間的動(dòng)量、能量、和質(zhì)量輸運(yùn)。
3.權(quán)利要求2的計(jì)算機(jī)系統(tǒng),其中地下含烴儲(chǔ)集層和一個(gè)或多個(gè)輸送位置之間的輸運(yùn)包括一種或多種輸運(yùn)路徑,輸運(yùn)路徑包括至少一種生產(chǎn)和注入井類型和一種或多種設(shè)施類型,它們被鏈接在一起來形成一種設(shè)施網(wǎng)絡(luò),通過該設(shè)施網(wǎng)絡(luò)烴流體在地下儲(chǔ)集層和輸送位置之間輸運(yùn)。
4.權(quán)利要求3的計(jì)算機(jī)系統(tǒng),其中包含于輸運(yùn)路徑中的設(shè)施類型包括選自地面流線,歧管,分離器,閥,泵和壓縮機(jī)中的至少一種設(shè)施。
5.權(quán)利要求4的計(jì)算機(jī)系統(tǒng),其中文本文件(數(shù)據(jù)定義文件)包含可以包含于模擬模型中的可能設(shè)施類型的定義和每種設(shè)施類型的可能成員變量類型的定義。
6.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中面向?qū)ο蟮能浖a(chǎn)品包括圖形用戶界面,由此計(jì)算機(jī)系統(tǒng)的用戶定義包含井和設(shè)施對(duì)象的專門網(wǎng)絡(luò)的模擬模型來模擬進(jìn)出專門含烴儲(chǔ)集層的輸運(yùn)現(xiàn)象。
7.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中另外的數(shù)據(jù)成員類型由權(quán)利要求1的面向?qū)ο筌浖a(chǎn)品計(jì)算機(jī)系統(tǒng)的用戶來定義,其中計(jì)算機(jī)系統(tǒng)的用戶通過圖形用戶界面來定義另外的設(shè)施數(shù)據(jù)成員,所述另外的數(shù)據(jù)成員以用戶自定義的方式擴(kuò)展計(jì)算機(jī)系統(tǒng)的功能性。
8.權(quán)利要求1的面向?qū)ο蟮能浖a(chǎn)品,其中面向?qū)ο筌浖肅++來編寫。
9.權(quán)利要求1的計(jì)算機(jī)系統(tǒng),其中存儲(chǔ)裝置包括面向?qū)ο蟮臄?shù)據(jù)庫。
10.一種通過使用具有內(nèi)存裝置,存儲(chǔ)裝置和面向?qū)ο筌浖挠?jì)算機(jī)來模擬設(shè)施網(wǎng)絡(luò)中的輸運(yùn)現(xiàn)象的方法,該方法包括步驟(a)構(gòu)建包括設(shè)施網(wǎng)絡(luò)的模型;(b)為每種設(shè)施指定成員變量的值;(c)在設(shè)施網(wǎng)絡(luò)中的輸運(yùn)現(xiàn)象的數(shù)學(xué)模擬中使用成員變量的指定值作為時(shí)間的函數(shù)。
11.權(quán)利要求10的方法,其中設(shè)施網(wǎng)絡(luò)是更大的模擬模型的一部分,所述設(shè)施網(wǎng)絡(luò)能夠與該模擬模型的至少一個(gè)其他部分交換流體。
12.權(quán)利要求11的方法,其中模擬模型包括設(shè)施網(wǎng)絡(luò)和含烴地層。
13.一種模擬物理系統(tǒng)中輸運(yùn)現(xiàn)象的方法,其中物理系統(tǒng)包括被多個(gè)井穿過的含烴儲(chǔ)集層以及連接到井的地面設(shè)施,該方法包括a.將物理系統(tǒng)離散化為許多體積單元,其中每個(gè)體積單元被模擬為一個(gè)節(jié)點(diǎn),并且相鄰的節(jié)點(diǎn)能夠通過節(jié)點(diǎn)之間的連接來交換流體;b.使用權(quán)利要求1的類層次結(jié)構(gòu)的設(shè)施對(duì)象和成員變量對(duì)象來模擬離散化模型的表示井和表面設(shè)施的部分中的節(jié)點(diǎn)和連接;c.指定每個(gè)節(jié)點(diǎn)和連接的幾何和輸運(yùn)性質(zhì);d.指定每個(gè)節(jié)點(diǎn)和連接的初始條件;e.以時(shí)間的函數(shù)來模擬離散化系統(tǒng)中的輸運(yùn)現(xiàn)象。
14.一種具有多個(gè)類的面向?qū)ο筌浖到y(tǒng)結(jié)構(gòu),其將成員變量和成員變量邏輯上從屬的類分開,所述軟件系統(tǒng)結(jié)構(gòu)包括a.設(shè)施類的層次結(jié)構(gòu),其中設(shè)施類的層次結(jié)構(gòu)中最專門化的派生類(Node,Connection,Compound,Well)被設(shè)計(jì)來一般地表示可以被模擬的設(shè)施的類型;b.成員變量類的層次結(jié)構(gòu),其中成員變量類的層次結(jié)構(gòu)中最專門化的派生類(SystemAttributeValue,UserAttributeValue,RateConstraint,PressureConstraint)被設(shè)計(jì)來一般地表示設(shè)施可以具有的成員變量的類型,所述成員變量是下列類型的一種浮點(diǎn)標(biāo)量或數(shù)組,整型標(biāo)量或數(shù)組,字符串,布爾,枚舉類型,流動(dòng)速率限制,和壓力限制;c.ValueUse類(206,圖2),其具有與數(shù)據(jù)成員類的層次結(jié)構(gòu)中的基類(Value,207,圖2)的多對(duì)一的關(guān)聯(lián)以及與設(shè)施類的層次結(jié)構(gòu)中的基類(FacBase,200,圖2)的多對(duì)一的關(guān)聯(lián),使得每個(gè)Value對(duì)象具有到ValueUse對(duì)象一個(gè)或多個(gè)引用,ValueUse對(duì)象將Value對(duì)象的使用關(guān)聯(lián)到邏輯上擁有它并控制到它的訪問的FacBase對(duì)象。
15.權(quán)利要求14的面向?qū)ο筌浖到y(tǒng)結(jié)構(gòu),其中類的完整層次結(jié)構(gòu)包括除前述設(shè)施類和成員變量類之外的類,所述另外的類提供可變通性來在多種模擬實(shí)現(xiàn)中重用設(shè)施對(duì)象,每種不同的實(shí)現(xiàn)能夠重用使用設(shè)施對(duì)象的一種或多種其他實(shí)現(xiàn)中的成員變量對(duì)象的全部、一些或沒有,所述另外的類包括a.WmSystem控制器類(217,圖2),其具有與設(shè)施類的層次結(jié)構(gòu)中的基類(FacBase,200,圖2)的直接一對(duì)多的關(guān)聯(lián),使得模擬實(shí)現(xiàn)的集合中的WmSystem類的對(duì)象具有到用于那些模擬實(shí)現(xiàn)中的所有設(shè)施對(duì)象的超集的直接引用;b.Case類(215,圖2),其具有與WmSystem類的多對(duì)一的關(guān)聯(lián),使得WmSystem類的對(duì)象可以被Case類的許多對(duì)象使用,Case對(duì)象包括用于模擬實(shí)現(xiàn)的數(shù)據(jù)的完整集;c.ValueUse類(206,圖2),其具有與數(shù)據(jù)層次結(jié)構(gòu)中的基類(Value,207,圖2)的多對(duì)一的關(guān)聯(lián)以及與Case類的多對(duì)一的關(guān)聯(lián),使得在給定模擬Case中,Value類的每個(gè)對(duì)象直接引用ValueUse類的一個(gè)或多個(gè)對(duì)象,ValueUse類的每個(gè)被引用的對(duì)象將Value對(duì)象的使用關(guān)聯(lián)到使用它的Cases或模擬實(shí)現(xiàn),包括該給定的Case。
16.一種用于模擬物理系統(tǒng)的計(jì)算機(jī)系統(tǒng),包括內(nèi)存裝置,存儲(chǔ)裝置和在主模擬系統(tǒng)中的面向?qū)ο筌浖?,所述?jì)算機(jī)系統(tǒng)還包括a)使計(jì)算機(jī)系統(tǒng)的用戶能夠動(dòng)態(tài)地構(gòu)造邏輯來自定義物理系統(tǒng)的模擬的邏輯界面;b)用于將構(gòu)造的邏輯轉(zhuǎn)換成相應(yīng)的面向?qū)ο蟠a的裝置;c)用于將面向?qū)ο蟠a與包括模擬數(shù)據(jù)模型和模擬算法的主模擬系統(tǒng)集成在一起的,導(dǎo)致集成模擬系統(tǒng)的裝置;d)用于執(zhí)行集成模擬系統(tǒng)的裝置。
17.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中構(gòu)造的邏輯包括設(shè)施管理邏輯,設(shè)施管理邏輯表示用于監(jiān)測和控制與物理系統(tǒng)相關(guān)聯(lián)的機(jī)械設(shè)施的步驟。
18.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中邏輯界面包括邏輯流程圖界面。
19.權(quán)利要求18的計(jì)算機(jī)系統(tǒng),其中邏輯流程圖界面包括圖標(biāo),箭頭,菜單,對(duì)話框,工具條按鈕以及文本中的一個(gè)或多個(gè),來使計(jì)算機(jī)系統(tǒng)的用戶能夠構(gòu)建、編輯和顯示流程圖的形式的設(shè)施管理邏輯。
20.權(quán)利要求18的計(jì)算機(jī)系統(tǒng),其中邏輯流程圖界面包括表示用于循環(huán),判斷,語句執(zhí)行,以及邏輯進(jìn)入和退出的基本邏輯控制結(jié)構(gòu)的圖標(biāo)。
21.權(quán)利要求20的計(jì)算機(jī)系統(tǒng),其中表示邏輯控制機(jī)制的圖標(biāo)使計(jì)算機(jī)系統(tǒng)的用戶能夠構(gòu)造自定義的邏輯流程圖。
22.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中邏輯界面包括基于文本的邏輯代碼界面。
23.權(quán)利要求22的計(jì)算機(jī)系統(tǒng),其中基于文本的邏輯代碼界面包括用于執(zhí)行輸入,修改和刪除字母數(shù)字文本行的一種或多種操作的圖形文本編輯器。
24.權(quán)利要求22的計(jì)算機(jī)系統(tǒng),其中基于文本的邏輯代碼,其是設(shè)施管理控制語言,能夠從邏輯流程圖自動(dòng)地創(chuàng)建。
25.權(quán)利要求24的計(jì)算機(jī)系統(tǒng),其中設(shè)施管理控制語言能夠自動(dòng)地轉(zhuǎn)換成C++形式的面向?qū)ο蟮脑O(shè)施管理代碼。
26.權(quán)利要求24的方法,其中設(shè)施管理控制語言是具有適合于具體化設(shè)施管理邏輯的特征和范圍的面向?qū)ο笳Z言。
27.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中面向?qū)ο蟠a是C++形式的設(shè)施管理面向?qū)ο蟠a。
28.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中邏輯界面使計(jì)算機(jī)系統(tǒng)的用戶能夠使用邏輯流程圖界面或者基于文本的邏輯代碼界面來開發(fā)邏輯。
29.權(quán)利要求16的計(jì)算機(jī)系統(tǒng),其中面向?qū)ο蟠a具有通過創(chuàng)建從模擬數(shù)據(jù)模型繼承的新的類來擴(kuò)展模擬數(shù)據(jù)模型,從而使面向?qū)ο蟠a能夠調(diào)用模擬數(shù)據(jù)模型的函數(shù)和使用模擬數(shù)據(jù)模型的成員數(shù)據(jù)的能力。
30.權(quán)利要求16的計(jì)算機(jī)系統(tǒng)還包括用于將面向?qū)ο蟠a編譯成面向?qū)ο笤O(shè)施管理目標(biāo)代碼的裝置,以及用于鏈接設(shè)施管理目標(biāo)代碼來產(chǎn)生共享程序庫,從而能夠?qū)⒐蚕沓绦驇煅b載到主模擬系統(tǒng)中的裝置。
31.權(quán)利要求16的計(jì)算機(jī)系統(tǒng)還包括用于將面向?qū)ο蟠a編譯成面向?qū)ο笤O(shè)施管理目標(biāo)代碼的裝置,以及用于鏈接設(shè)施管理目標(biāo)代碼來產(chǎn)生動(dòng)態(tài)連接庫,從而能夠?qū)?dòng)態(tài)連接庫裝載到主模擬系統(tǒng)中的裝置。
32.權(quán)利要求16的計(jì)算機(jī)系統(tǒng)能夠通過在模擬期間的多個(gè)時(shí)間步調(diào)用面向?qū)ο笤O(shè)施管理代碼來執(zhí)行集成模擬系統(tǒng)。
33.權(quán)利要求32的計(jì)算機(jī)系統(tǒng),其中面向?qū)ο笤O(shè)施管理代碼能夠在設(shè)施管理代碼已經(jīng)完成當(dāng)前時(shí)間步的執(zhí)行之后,將控制返回給主模擬系統(tǒng)。
34.權(quán)利要求16的計(jì)算機(jī)系統(tǒng)包括多個(gè)連接的處理器來執(zhí)行模擬。
35.一種在計(jì)算機(jī)系統(tǒng)中模擬物理系統(tǒng)的方法,其中計(jì)算機(jī)系統(tǒng)包括內(nèi)存裝置,存儲(chǔ)裝置,以及主模擬系統(tǒng)中的面向?qū)ο筌浖?,該方法包括步驟a)動(dòng)態(tài)地構(gòu)造邏輯來自定義物理系統(tǒng)的模擬;b)通過啟動(dòng)下面的步驟,來開始物理系統(tǒng)的模擬i)自動(dòng)地將邏輯轉(zhuǎn)換成相應(yīng)的面向?qū)ο蟠a;ii)將面向?qū)ο蟠a與包括模擬數(shù)據(jù)模型和模擬算法的主模擬系統(tǒng)集成在一起,導(dǎo)致用于模擬物理系統(tǒng)的集成模擬系統(tǒng);iii)執(zhí)行集成模擬系統(tǒng)來模擬物理系統(tǒng)。
36.權(quán)利要求35的方法,其中物理系統(tǒng)包括含烴地層。
37.權(quán)利要求36的方法,其中物理系統(tǒng)包括與烴從含烴地層的生產(chǎn)相關(guān)的包含流體的設(shè)施。
38.權(quán)利要求35的方法,其中邏輯的構(gòu)造包括使用圖形用戶界面來執(zhí)行選自下面的至少一步a)選擇并使用現(xiàn)有邏輯;b)選擇并修改現(xiàn)有邏輯;c)開發(fā)新的邏輯。
39.權(quán)利要求38的方法,其中邏輯的構(gòu)造產(chǎn)生邏輯流程圖。
40.權(quán)利要求35的方法,其中邏輯的構(gòu)造產(chǎn)生基于文本的邏輯代碼。
41.權(quán)利要求39的方法,其中邏輯流程圖的構(gòu)造包括使用圖標(biāo),箭頭,菜單,對(duì)話框,工具條按鈕和文本的一種或多種,來使計(jì)算機(jī)系統(tǒng)的用戶能夠構(gòu)建、編輯和顯示流程圖形式的設(shè)施管理邏輯。
42.權(quán)利要求39的方法,其中邏輯流程圖的構(gòu)造包括使用基于文本的邏輯代碼界面,該界面包括用于執(zhí)行輸入,修改和刪除字母數(shù)字文本行的圖形文本編輯器。
43.權(quán)利要求35的方法,其中邏輯的轉(zhuǎn)換是轉(zhuǎn)換成C++代碼。
44.權(quán)利要求35的方法,其中轉(zhuǎn)換的面向?qū)ο蟠a具有通過創(chuàng)建從模擬數(shù)據(jù)模型繼承的新的類來擴(kuò)展模擬數(shù)據(jù)模型,從而使面向?qū)ο蟠a能夠調(diào)用模擬數(shù)據(jù)模型的函數(shù)和使用模擬數(shù)據(jù)模型的成員數(shù)據(jù)的能力。
45.權(quán)利要求35的方法,其中被啟動(dòng)的模擬系統(tǒng)的執(zhí)行產(chǎn)生預(yù)測物理系統(tǒng)整體行為的結(jié)果。
46.權(quán)利要求35的方法,其中被啟動(dòng)的模擬系統(tǒng)的執(zhí)行使用多個(gè)相連的處理器來實(shí)施。
全文摘要
本發(fā)明公開一種用于模擬復(fù)雜系統(tǒng)中輸運(yùn)現(xiàn)象的計(jì)算機(jī)系統(tǒng)。該系統(tǒng)包括內(nèi)存裝置,存儲(chǔ)裝置,和面向?qū)ο筌浖T撥浖嫦驅(qū)ο蟮目蓴U(kuò)展類層次結(jié)構(gòu),該類層次結(jié)構(gòu)包括表示多種對(duì)象類型的通用類的第一集合和表示對(duì)象類型的成員變量的通用類的第二集合??蓴U(kuò)展的類層次結(jié)構(gòu)允許增加另外的對(duì)象類型或另外的成員變量,而不修改類層次結(jié)構(gòu)本身。在另一種實(shí)施方案中,計(jì)算機(jī)系統(tǒng)也包含使計(jì)算機(jī)系統(tǒng)的用戶能夠動(dòng)態(tài)地構(gòu)造邏輯來自定義物理系統(tǒng)的模擬的邏輯界面,用于將構(gòu)造的邏輯轉(zhuǎn)換成相應(yīng)的面向?qū)ο蟠a的裝置,用于將面向?qū)ο蟠a與主模擬系統(tǒng)集成在一起的裝置,以及用于執(zhí)行集成模擬系統(tǒng)的裝置。
文檔編號(hào)G06F9/44GK1483181SQ01821462
公開日2004年3月17日 申請(qǐng)日期2001年12月11日 優(yōu)先權(quán)日2000年12月29日
發(fā)明者阿蒂拉·D·班基, 阿蒂拉 D 班基, C 奈特梅爾, 斯蒂芬·C·奈特梅爾 申請(qǐng)人:埃克森美孚上游研究公司