用于油井管理编程的高级图形编程语言和工具

申请号 CN200680022659.0 申请日 2006-04-25 公开(公告)号 CN101203862A 公开(公告)日 2008-06-18
申请人 埃克森美孚上游研究公司; 发明人 L·N·杜; J·W·密特谢; A·R·凯施林;
摘要 一种油藏模拟方法,其包括构建具有一个或更多个组件的分级逻辑图(10)。每个组件表示一组编程代码。该方法进一步包括转换分级逻辑图为编程代码(20),该代码被配置为管理油藏(40)的模拟。
权利要求

1.一种油藏模拟方法,其包括:
构建具有一个或更多个组件的分级逻辑图,其中每个组件表示一 组编程代码;以及
转换所述分级逻辑图为编程代码,该编程代码被配置成管理油藏 的模拟。
2.如权利要求1所述的方法,进一步包括在图形用户界面上显示 所述分级逻辑图。
3.如权利要求1所述的方法,其中所述编程代码是C++和 FORTRAN之一。
4.如权利要求1所述的方法,其中所述分级逻辑图提供用于管理 所述油藏的模拟的高级结构化视图。
5.如权利要求1所述的方法,其中每个组件可扩展成一个或更多 个子组件。
6.如权利要求1所述的方法,进一步包括在转换所述分级逻辑图 为编程代码的过程中生成调试代码。
7.如权利要求1所述的方法,进一步包括生成每个组件的文档资 料。
8.如权利要求1所述的方法,进一步包括执行所述编程代码从而 生成模拟油藏。
9.如权利要求8所述的方法,进一步包括使用所述模拟油藏来预 测油藏动态。
10.如权利要求8所述的方法,进一步包括用所述模拟油藏来从 所述油藏生产氢化合物。
11.如权利要求1所述的方法,其中所述组件包括被配置成描述 或定义设施的设施组件。
12.如权利要求11所述的方法,其中所述设施包括油井、钻井平 台和油田之一。
13.如权利要求11所述的方法,其中所述设施组件包括一个或更 多个次序组件,每个次序组件被配置成标记所述编程代码中主逻辑部 分的开始。
14.如权利要求13所述的方法,其中每个次序组件包括一个或更 多个通配组件,每个通配组件被配置成执行一个或更多个逻辑操作从 而管理所述油藏的模拟。
15.如权利要求14所述的方法,其中每个通配组件包括被配置成 规定逻辑条件的“是否测试”组件。
16.如权利要求15所述的方法,其中转换所述分级逻辑图包括转 化所述“是否测试”组件的逻辑条件为编程代码。
17.如权利要求16所述的方法,其中转换所述分级逻辑图包括为 所述逻辑条件解析所述编程代码中设施的引用。
18.如权利要求17所述的方法,其中为所述逻辑条件解析所述编 程代码中所述设施的引用包括,如果所述“是否测试”组件所属的通 配组件是set循环组件的一部分,就设置所述设施的引用为由所述set 循环组件定义的设施。
19.如权利要求17所述的方法,其中为所述逻辑条件解析所述编 程代码中所述设施的引用包括,如果所述“是否测试”组件所属的通 配组件是至少一个所述次序组件的一部分,则设置所述设施的引用为 由所述设施组件描述定义的设施。
20.如权利要求17所述的方法,其中为所述逻辑条件解析所述编 程代码中所述设施的引用进一步包括,如果所述“是否测试”组件所 属的所述通配组件没有嵌套在任何set循环组件下,且如果所述通配 组件是被配置为子程序的次序组件的一部分,则设置所述设施的引用 为调用所述逻辑条件是其一部分的次序组件的设施。
21.如权利要求14所述的方法,其中每个通配组件包括被配置成 执行循环结构的循环组件。
22.如权利要求21所述的方法,其中所述循环结构是while循环, for循环和set循环的之一。
23.如权利要求21所述的方法,其中每个通配组件包括“退出循 环条件”,该“退出循环条件”被配置成判断所述循环结构的结束。
24.如权利要求23所述的方法,其中转换所述分级逻辑图包括转 化所述“退出循环条件”为编程代码。
25.如权利要求24所述的方法,其中转换所述分级逻辑图包括为 所述“退出循环条件”解析所述编程代码中设施的引用。
26.如权利要求25所述的方法,其中为所述“退出循环条件”解 析所述编程代码中所述设施的引用包括设置所述设施的引用为“是否 测试”组件定义的逻辑条件。
27.如权利要求21所述的方法,其中所述循环组件包括被配置成 规定逻辑条件的“是否测试”组件。
28.如权利要求14所述的方法,其中转换所述分级逻辑图包括转 化所述循环组件的过滤条件为编程代码。
29.如权利要求14所述的方法,其中每个通配组件包括被配置成 执行命令的“执行动作”组件。
30.如权利要求29所述的方法,其中转换所述分级逻辑图包括转 化所述“执行动作”组件的命令为编程代码。
31.如权利要求30所述的方法,其中转换所述分级逻辑图包括为 所述命令解析所述编程代码中设施和/或流体相的引用。
32.如权利要求31所述的方法,其中为所述命令解析所述编程代 码中设施和/或流体相的引用包括为“是否测试”组件引用条件,该 “是否测试”组件定义所述“执行动作”组件所属的每个通配组件。
33.如权利要求31所述的方法,其中为所述命令解析所述编程代 码中设施和/或流体相的引用包括,如果所述“执行动作”组件是set 循环组件的一部分,则设置所述设施的引用为由所述set循环组件定 义的设施。
34.如权利要求29所述的方法,其中所述“执行动作”组件引用 函数。
35.如权利要求29所述的方法,其中所述“执行动作”组件包括 嵌套通配组件,其被配置成执行一个或更多个逻辑操作从而管理所述 油藏的模拟。
36.如权利要求29所述的方法,其中转换所述分级逻辑图包括转 化所述“执行动作”组件为编程代码。
37.如权利要求14所述的方法,其中转换所述分级逻辑图包括转 化所述通配组件为编程代码。
38.如权利要求14所述的方法,其中每个通配组件包括嵌套通配 组件,其被配置成执行一个或更多个逻辑操作以管理所述油藏的模 拟。
39.如权利要求13所述的方法,其中转换所述分级逻辑图包括转 化所述次序组件为编程代码。
40.如权利要求1所述的方法,其中所述组件包括设施组件,其 被配置成描述或定义设施,且其中转换所述分级逻辑图为编程代码包 括存储所述设施的名称。
41.如权利要求28所述的方法,其中转换所述分级逻辑图包括为 所述过滤条件解析所述编程代码中设施的引用。
42.如权利要求41所述的方法,其中为所述过滤条件解析所述编 程代码中所述设施的引用包括,如果所述循环组件是set循环结构, 则设置所述设施的引用为由所述循环组件定义的设施。
43.如权利要求1所述的方法,其中所述组件被分组成一个或更 多个容器组件。
44.一种计算机系统,其包括:
处理器;以及
存储器,其包括可由所述处理器执行的指令,从而:
建立具有一个或更多个组件的分级逻辑图,其中每个组件表示一 组编程代码;以及
转换所述分级逻辑图为编程代码,该编程代码被配置成管理油藏 的模拟。
45.如权利要求44所述的计算机系统,其中所述存储器进一步包 括在图形用户界面上显示所述分级逻辑图的程序指令。
46.如权利要求44所述的计算机系统,其中所述编程代码是C++ 和FORTRAN之一。
47.如权利要求44所述的计算机系统,其中所述分级逻辑图提供 所述编程代码的高级结构化视图,用于管理所述油藏的模拟。
48.一种预测油藏动态的方法,其包括:
用图形用户界面构建分级逻辑图,其中所述分级逻辑图包括一个 或更多个组件,其中每个组件表示一组编程代码;
通过所述图形用户界面显示所述分级逻辑图;
转换所述分级逻辑图为编程代码,该编程代码被配置成管理油藏 的模拟;以及
执行该编程代码从而生成模拟的油藏模型。
49.如权利要求48所述的方法,进一步包括用模拟的油藏来预测 所述油藏动态。
50.如权利要求48所述的方法,进一步包括用模拟的油藏来从所 述油藏生产碳氢化合物。
51.如权利要求48所述的方法,其中所述分级逻辑图是可调整的。
52.如权利要求48所述的方法,其中所述编程代码是C++和 FORTRAN之一。
53.如权利要求48所述的方法,其中所述分级逻辑图提供所述编 程代码的高级结构化视图,用于管理所述油藏的模拟。
54.如权利要求48所述的方法,进一步包括在转换所述分级逻辑 图为所述编程代码的过程中生成调试代码。
55.如权利要求48所述的方法,其中所述组件包括设施组件,其 被配置成描述或定义设施。
56.如权利要求55所述的方法,其中所述设施包括油井、钻井平 台和油田之一。
57.如权利要求55所述的方法,其中所述设施组件包括一个或更 多个次序组件,每个次序组件被配置成标记所述编程代码中主逻辑部 分的开始。
58.如权利要求13所述的方法,其中每个次序组件包括一个或更 多个通配组件,每个通配组件被配置成执行一个或更多个逻辑操作从 而管理所述油藏的模拟。
59.如权利要求58所述的方法,其中每个通配组件包括被配置成 规定逻辑条件的“是否测试”组件。
60.如权利要求59所述的方法,其中转换所述分级逻辑图包括转 化所述“是否测试”组件的所述逻辑条件为编程代码。
61.如权利要求60所述的方法,其中转换所述分级逻辑图包括为 所述逻辑条件解析所述编程代码中设施的引用。
62.如权利要求61所述的方法,其中为所述逻辑条件解析所述编 程代码中所述设施的引用包括,如果所述“是否测试”组件所属的所 述通配组件是set循环组件的一部分,则设置所述设施的引用为由所 述set循环组件定义的设施。
63.如权利要求61所述的方法,其中为所述逻辑条件解析所述编 程代码中所述设施的引用进一步包括,如果所述“是否测试”组件所 属的所述通配组件是至少一个所述次序组件的一部分,则设置所述设 施的引用为由所述设施组件描述定义的设施。
64.如权利要求61所述的方法,其中为所述逻辑条件解析所述编 程代码中所述设施的引用进一步包括,如果所述“是否测试”组件所 属的所述通配组件没有嵌套在任何set循环组件下,且如果所述通配 组件是被配置为子程序的次序组件的一部分,则设置所述设施的引用 为调用所述逻辑条件是其一部分的次序组件的设施。
65.如权利要求59所述的方法,其中每个通配组件包括被配置成 执行循环结构的循环组件。
66.如权利要求65所述的方法,其中所述循环结构是while循环, for循环和set循环之一。
67.如权利要求65所述的方法,其中每个通配组件包括“退出循 环条件”,该“退出循环条件”被配置成判断所述循环结构的结束。
68.如权利要求67所述的方法,其中转换所述分级逻辑图包括转 化所述“退出循环条件”为编程代码。
69.如权利要求68所述的方法,其中转换所述分级逻辑图包括为 所述“退出循环条件”解析所述编程代码中设施的引用。
70.如权利要求69所述的方法,其中为所述“退出循环条件”解 析所述编程代码中所述设施的引用包括设置所述设施的引用为由所 述“是否测试”组件定义的逻辑条件。
71.如权利要求65所述的方法,其中所述循环组件包括被配置成 规定逻辑条件的“是否测试”组件。
72.如权利要求58所述的方法,其中转换所述分级逻辑图包括转 化所述循环组件的过滤条件为编程代码。
73.如权利要求58所述的方法,其中每个通配组件包括被配置成 执行命令的“执行动作”组件。
74.如权利要求73所述的方法,其中转换所述分级逻辑图包括转 化所述“执行动作”组件的命令为编程代码。
75.如权利要求75所述的方法,其中转换所述分级逻辑图包括为 所述命令解析所述编程代码中设施和/或流体相的引用。
76.如权利要求75所述的方法,其中为所述命令解析所述编程代 码中设施和/或流体相的引用包括为“是否测试”组件引用条件,该 “是否测试”组件定义所述“执行动作”组件所属的每个通配组件。
77.如权利要求75所述的方法,其中为所述命令解析所述编程代 码中设施和/或流体相的引用包括,如果所述“执行动作”组件是set 循环组件的一部分,则设置所述设施的引用为由所述set循环组件定 义的设施。
78.如权利要求73所述的方法,其中所述“执行动作”组件引用 函数。
79.如权利要求73所述的方法,其中所述“执行动作”组件包括 嵌套通配组件,该嵌套通配组件被配置成执行一个或更多个逻辑操作 从而管理所述油藏的模拟。
80.如权利要求73所述的方法,其中转换所述分级逻辑图包括转 化所述“执行动作”组件为编程代码。
81.如权利要求58所述的方法,其中转换所述分级逻辑图包括转 化所述通配组件为编程代码。
82.如权利要求58所述的方法,其中每个通配组件包括嵌套通配 组件,该嵌套通配组件被配置成执行一个或更多个逻辑操作,用于管 理所述油藏的模拟。
83.如权利要求57所述的方法,其中转换所述分级逻辑图包括转 化所述次序组件为编程代码。
84.如权利要求48所述的方法,其中所述组件包括被配置成描述 或定义设施的设施组件,且其中转换所述分级逻辑图为编程代码包括 存储所述设施的名称。
85.如权利要求84所述的方法,其中转换所述分级逻辑图包括为 所述过滤条件解析所述编程代码中设施的引用。
86.如权利要求85所述的方法,其中为所述过滤条件解析所述编 程代码中所述设施的引用包括,如果所述循环组件是set循环结构, 则设置所述设施的引用为由所述循环组件定义的设施。
87.一种用于油藏模拟的计算机实施的方法,其包括:
构建表示油井管理程序的分级逻辑图,其中所述分级逻辑图包括 一个或更多个组件,每个组件表示一组编程代码;
解码所述分级逻辑图为低级编程代码;
编译低级编程代码;
链接低级编程代码到油藏模拟程序;
从所述油藏模拟程序生成油藏模拟模型;和
存储来自所述油藏模拟模型的结果。
88.如权利要求87所述的方法,进一步包括根据所述油藏模拟模 型评估油藏。
89.如权利要求87所述的方法,进一步包括生成关于评估的报告。
90.如权利要求87所述的方法,其中所述分级逻辑图被配置成为 所述油藏模拟模型设置油井产量和边界条件。
91.如权利要求87所述的方法,其中所述油藏模拟器模型包括油 藏和设施,其中所述设施表示油藏和输送位置之间的流动路径中的物 理设备。
92.如权利要求91所述的方法,其中所述设施是钻井平台、歧管压缩机、分离器、管路和钻塔中的一个或更多个。
93.如权利要求87所述的方法,其中模拟被用来建模发生在油藏 中的化学、物理和流体流动过程,从而预测所述油藏的未来行为并提 高来自所述油藏的碳氢化合物开采量。

说明书全文

技术领域

【0002】本发明实施例一般涉及油藏模拟,例如油井管理计算 机程序,其可与用来解油藏方程的油藏模拟计算机程序结合使用。

背景技术

【0003】本部分打算向读者介绍本领域的各个方面,它们可能与 本发明的示例性实施例关联并在下面进行描述和/或要求保护。相信这 个论述有助于向读者提供促进对本发明特殊技术的更好理解的信息。 因此,应该理解,这些陈述应从这个度理解而非对现有技术的介绍。
【0004】油藏模拟是从油藏模型的动态推断实际油藏状态的过程。 因为石油油藏中质量转移和流体流动过程如此复杂,所以油藏模拟都 是用计算机完成的。执行计算从而模拟油藏的计算机程序被称为油藏 模拟器。油藏模拟的目的是理解出现在石油油藏中的复杂的化学、物 理和流体流动过程,从而预测油藏的未来状态,并增加氢化合物的 采收率。油藏模拟器可解决通常不能以其他方式解决的油藏问题。例 如,油藏模拟器可预测油藏管理决定的后果。油藏模拟通常被称为油 藏内流动的流体动学,但在更大的意义上,也可称为总石油系统, 该系统包括油藏、地表设施以及任何相互关联的重要活动。
【0005】用于判断每个时间点的油藏情况的方程系统的求解受边 界条件约束,如源汇项(sink and source term)。例如,源汇项描述了模 拟模型中多少流体被注入到不同位置的油井中或从其中抽出。这些源 汇项被规定为时间的函数,从而控制方程的解。而且,它们表示根据 如何操作油井和管理油藏选择的操作限制。
【0006】在进行模拟研究时,表示油井开工率或作业率(operating rate)的源汇项可被不同地设置。根据模拟模型的大小和复杂度和模拟 研究的目的,选择这些源汇项作为时间函数的过程可能是非常错综复 杂的并可能涉及编写复杂的算法和程序。为模拟模型设置这些油井产 量和边界条件所编写的程序通常被称为油井管理逻辑或油井管理程 序。同样地,油井管理程序可经配置来判断关于在预测周期的持续时 间油井的各种方面,如哪些油井生产;产量多少;如何满足不同地表 设备的多个限制;何时关闭油井和何时再开采油井;何时安排油井维 修或新井钻探;以及在不同位置注入多少气或来帮助保持油藏压力。
【0007】油井管理程序通常是经训练的程序员以标准编程语言, 如FORTRAN,C或C++编写的,这些程序通常很大,即,一般生成数 千行代码。因此,通常需要相当量的时间来设计、实施、测试和让最 终用户接受油井管理程序。因为程序是以低级语言编写的,因此对于 最终用户不易读。进一步地,调查在预测研究过程中出现的许多情景 的需求可能涉及在短时间内频繁修改程序。因为程序是以低级语言编 写的,所以最终用户也必须依靠程序员修改程序,这进一步延迟了该 过程。
【0008】因此,现有技术需要改进的方法和系统来生成使得最终 用户能够频繁修改程序的油井管理程序。

发明内容

【0009】本发明的实施例针对油藏模拟方法,其包括构建具有一 个或更多个组件的分级逻辑图。每个组件表示一组编程代码。该方法 进一步包括转换分级的逻辑图为编程代码,该代码被配置为管理油藏 模拟。
【0010】在一个实施例中,该方法进一步包括(即,包含)在图 形用户界面上显示分级的逻辑图。
【0011】在另一个实施例中,编程代码是C++和FORTRAN中的 一种。
【0012】在又一个实施例中,分级的逻辑图提供管理油藏模拟的 编程代码的高级结构化的视图。
【0013】在又一个实施例中,每个组件可扩展成一个或更多个子 组件。
【0014】在又一个实施例中,该方法进一步包括在分级逻辑图转 换为编程代码的过程中生成调试代码。
【0015】在又一个实施例中,该方法进一步包括为每个组件生成 文档资料。
【0016】在又一个实施例中,该方法进一步包括执行编程代码从 而生成模拟的油藏。
【0017】在又一个实施例中,该方法进一步包括使用模拟的油藏 来预测油藏的动态。
【0018】在又一个实施例中,该方法进一步包括使用模拟的油藏 来从油藏生产碳氢化合物。
【0019】在又一个实施例中,组件包括经配置来描述或定义设施 的设施组件。
【0020】在又一个实施例中,设施包括油井、钻井平台和油田之 一。
【0021】在又一个实施例中,设施组件包括一个或更多个次序组 件(sequence components),每个次序组件经配置来标记编程代码中主 逻辑部分的开始。
【0022】在再一个实施例中,每个次序组件包括一个或更多个通 配组件(generic component),每个通配组件经配置来执行一个或更多 个逻辑步骤以管理油藏的模拟。
【0023】在又一个实施例中,每个通配组件包括经配置来规定逻 辑条件的if_test(是否测试)组件。
【0024】在又一个实施例中,转换分级逻辑图包括转化是否测试 if_test组件的逻辑条件为编程代码。
【0025】在又一个实施例中,转换分级逻辑图包括为逻辑条件解 析编程代码中设施的引用(reference)。
【0026】在又一个实施例中,为逻辑条件解析编程代码中设施的 引用包括,如果是否测试if_test组件所属的通配组件是set_loop(set 循环)组件的一部分,则将设施的引用设置为由set循环set_loop组件 定义的设施。
【0027】在又一个实施例中,为逻辑条件解析编程代码中对设施 的引用进一步包括,如果是否测试if_test组件所属的通配组件是至少 一个次序组件的一部分,则将设施的引用设置为由设施组件描述 (facility component description)定义的设施。
【0028】在又一个实施例中,为逻辑条件解析编程代码中设施的 引用进一步包括,如果是否测试if_test组件所属的通配组件没有嵌套 在任何set循环set_loop组件中,且如果通配组件是配置为子程序 (subroutine)的次序组件的一部分,则将设施的引用设置为调用次序 组件的设施,这个逻辑条件是次序组件的一部分。
【0029】在又一个实施例中,每个通配组件包括经配置来执行循 环结构的循环组件。
【0030】在又一个实施例中,循环结构是while循环、for循环和 set循环(set_loop)之一。
【0031】在又一个实施例中,每个通配组件包括退出循环条件 quit_loop_condition,其经配置来判断循环结构的结束。
【0032】在又一个实施例中,转换分级逻辑图包括转化退出循环 条件quit_loop_condition为编程代码。
【0033】在又一个实施例中,转换分级逻辑图包括为退出循环条 件quit_loop_condition解析编程代码中设施的引用。
【0034】在又一个实施例中,为退出循环条件quit_loop_condition 解析编程代码中设施的引用包括设置设施的引用为是否测试if_test组 件定义的逻辑条件。
【0035】在又一个实施例中,循环组件包括经配置来规定逻辑条 件的是否测试if_test组件。
【0036】在又一个实施例中,转换分级逻辑图包括转化循环组件 的过滤条件为编程代码。
【0037】在又一个实施例中,每个通配组件包括经配置执行命令 的执行动作execute_action组件。
【0038】在又一个实施例中,转换分级逻辑图包括转化执行动作 execute_action组件的命令为编程代码。
【0039】在又一个实施例中,转换分级逻辑图包括为命令解析编 程代码中设施和/或流体相的引用。
【0040】在又一个实施例中,为命令解析编程代码中设施和/或流 体相的引用包括为是否测试if_test组件引用条件,是否测试if_test组 件定义执行动作execute_action组件所属的每个通配组件。
【0041】在又一个实施例中,为命令解析编程代码中设施和/或流 体相的引用包括,如果执行动作execute_action组件是set循环set_loop 组件的一部分,则设置设施的引用为由set循环set_loop组件定义的设 施。
【0042】在又一个实施例中,执行动作execute_action组件引用函 数。
【0043】在又一个实施例中,执行动作execute_action组件包括嵌 套通配nested_generic组件,其经配置来执行一个或更多个逻辑操作从 而管理油藏的模拟。
【0044】在又一个实施例中,转换分级逻辑图包括转化执行动作 execute_action组件为编程代码。
【0045】在又一个实施例中,转换分级逻辑图包括转化通配组件 为编程代码。
【0046】在又一个实施例中,每个通配组件包括嵌套通配 (nested_generic)组件,其经配置来执行管理油藏模拟的一个或更多 个逻辑操作。
【0047】在又一个实施例中,转换分级逻辑图包括转化次序组件 为编程代码。
【0048】在又一个实施例中,组件包括设施组件,其经配置来描 述或定义设施,且转换分级逻辑图为编程代码包括存储设施名称。
【0049】在又一个实施例中,转换分级逻辑图包括为过滤条件解 析编程代码中设施的引用。
【0050】在又一个实施例中,为过滤条件解析编程代码中设施的 引用包括,如果循环组件是set循环set_loop结构,则设置设施的引用 为由循环组件定义的设施。
【0051】在又一个实施例中,组件被分组成一个或更多个容器 (container)组件。
【0052】本发明的实施例也针对计算机系统,其包含处理器和包 括程序指令的存储器,所述指令可由处理器执行从而构造具有一个或 更多个组件的分级逻辑图,其中每个组件表示一组编程代码;并转换 分级逻辑图为被配置用来管理油藏的模拟的编程代码。
【0053】在又一个实施例中,存储器进一步包括在图形用户界面 上显示分级逻辑图的程序指令。
【0054】在另一个实施例中,编程代码是C++和FORTRAN之一。
【0055】在又一个实施例中,分级逻辑图提供管理油藏模拟的编 程代码的高级结构化视图。
【0056】本发明的实施例也针对预测油藏动态(performance of a reservoir)的方法。该方法包括用图形用户界面构建分级逻辑图。分级 逻辑图包括一个或更多个组件,且每个组件表示一组编程代码。该方 法进一步包括通过图形用户界面显示分级逻辑图,转换分级逻辑图为 被配置用来模拟油藏动态的编程代码,并执行编程代码从而生成模拟 的油藏。
【0057】在一个实施例中,该方法进一步包括使用模拟的油藏来 预测油藏的动态。
【0058】在另一个实施例中,该方法进一步包括使用模拟的油藏 来从油藏生产碳氢化合物。
【0059】在再一个实施例中,分级逻辑图是可调整的。
【0060】本发明的实施例也针对用来执行油藏模拟的计算机实施 的方法或模拟系统。该方法进一步包括构建表示油井管理程序的分级 逻辑图,其中分级逻辑图包括一个或更多个组件,每个组件都表示一 组编程代码;将该分级逻辑图解码为低级编程代码;编译低级编程代 码;将低级编程代码链接为油藏模拟程序;从油藏模拟程序生成油藏 模拟模型;和存储来自油藏模拟模型的结果。
【0061】此外,本方法可包括其他方面。例如,该方法可包括根 据油藏模拟模型评估油藏或生成评估报告。而且,该分级逻辑图可被 配置为设置油井产量和油藏模拟模型的边界条件。油藏模拟器模型可 包括油藏和设施,其中设施表示油藏和输送位置之间流动路径上的物 理设备,其中设施是钻井平台、歧管压缩机、分离器、管路和 钻塔之一。此外,油藏模拟模型的模拟可用来对油藏中发生的化学, 物理和流体流动过程进行建模,从而预测油藏的未来状态和提高来自 油藏的碳氢化合物开采量。
附图说明
【0062】本技术的前面和其他优点可在阅读下面的详细说明并参 考附图后而变得明显。
【0063】图1A示出按照本发明一个或多个实施例预测油藏动态的 方法的示例性流程图
【0064】图1B示出按照本发明一个或多个实施例构建分级逻辑图 的示例性流程图。
【0065】图2示出按照本发明一个或多个实施例的具有FAC图标 和S图标的占位符号的示例性显示。
【0066】图3示出按照本发明一个或多个实施例的分级逻辑图的 示例性开端视图(preliminary view)。
【0067】图4示出按照本发明一个或多个实施例的分级逻辑图的 第二示例性开端视图。
【0068】图5示出按照本发明一个或多个实施例的OMAX,其作 为用在油井管理编程环境中的预定义条件的例子。
【0069】图6示出按照本发明一个或多个实施例的分级逻辑图的 第三示例性开端视图。
【0070】图7示出按照本发明一个或多个实施例的示例性数据窗 口,其提示用户选择循环类型。
【0071】图8示出按照本发明一个或多个实施例的预定义条件的 示例性列表。
【0072】图9示出按照本发明一个或多个实施例的示例性次序组 件,其具有带三个独立通配组件的容器组件。
【0073】图10示出按照本发明一个或多个实施例的分级逻辑图的 第四示例性开端视图。
【0074】图11示出按照本发明一个实施例的示例性预定义条件“无 违反(NoViolation)”。
【0075】图12示出按照本发明一个或多个实施例的分级逻辑图的 第五示例性开端视图。
【0076】图13示出按照本发明一个或多个实施例的预定义命令“每 次减少一个”(Decrease ONE_AT_A_TIME)的示例性选择。
【0077】图14示出按照本发明一个或多个实施例的分级逻辑图的 第六示例性开端视图。
【0078】图15示出按照本发明一个或多个实施例的示例性最终形 式的分级逻辑图,其中没有移去未选择的组件或未定义的组件。
【0079】图16示出按照本发明一个或多个实施例的示例性的执行 动作execute_action组件,其具有经配置来调用被显示出来的函数的次 序组件。
【0080】图17示出按照本发明一个或多个实施例的用于解码分级 逻辑图的方法的示例性流程图。
【0081】图18A和18B示出按照本发明一个或多个实施例的解码 通配组件的方法的示例性流程图。
【0082】图19示出示例性计算机网络,本发明实施例可在其中实 施。
【0083】图20示出按照本发明一个或多个实施例的具有嵌套通配 nested_generic组件的示例性分级逻辑图。

具体实施方式

【0084】下面给出了详细的说明。每个所附的权利要求定义一个 独立发明,为了侵权用途,独立发明被当作包括权利要求中限定的多 种元素或限制的等价物。根据上下文内容,下面所说的“发明”在某 些情形中仅指某些特定实施例。在其他情形中,应该认识到,对“发 明”的引用指在一个或多个,但不必是所有权利要求中陈述的主题。 下面更详细地描述每个发明,包括具体实施例、形式和例子,但本发 明不局限于这些实施例、形式或例子,它们都包括在此,从而使得在 该专利中的信息与可用信息和技术结合时,本领域技术人员能够做出 和使用本发明。下面定义这里使用的各种术语。就权利要求中所使用 的术语在下面没有定义来说,其应给予本领域技术人员已经给予该术 语的最广定义,如一个或多个印刷出版物或授权的专利给出的那样。
附图中的特定实施例
【0085】本发明的各种实施例涉及油藏模拟,油藏模拟是多孔和 可渗透岩石中一个、两个或三个流体相的三维(3D)流动数值模拟。 三个流体相是碳氢化合物液体(油)、碳氢化合物蒸汽(气体)和水相 (水)。
【0086】计算机程序被用来构建油藏模拟模型,该模型适当地表 征岩石和流体特性,且该计算机程序也用来响应规划的油井作业而计 算模拟模型随时间的演化,从而除去可销售流体,并在某些情形中取 代这些价值较低的流体来维持压力。
【0087】油藏模拟模型是通过将感兴趣体积细分(离散化或网格 化)为许多多边形单元。单元的数目通常在几万到几十万。感兴趣体 积是以油和气累积的范围和与油及气体压力连通的水的范围区域性地 且垂直地定义的。其面积可以是几个平方英里,且厚度可以是几百, 甚至几千英尺。
【0088】模拟单元的状态是其由压力及其内容定义的,即,单元 内的油、气和水的量。模拟的目标是计算单元状态随时间的演化。演 化由初始状态并由通过油井从系统时间相关地移出(生产)流体或将 流体加入系统(注入)控制。
【0089】单元状态由于在成对的相邻单元之间或单元与井之间的 流体流动而随时间变化。流体从高压流到低压。压力梯度是通过井筒 从油藏移出流体(生产)或将流体加入油藏(注入)而导致产生的, 井筒穿过多孔和渗透性岩石。在油藏内,流体汇聚(流向)生产井筒 并从注入井筒分散(流出)。
【0090】在有限差油藏模拟模型的背景中,流体流动是在邻近单 元对之间计算的,且对于井筒穿过的单元,是在单元和井筒之间计算 的。为了将流体流动模型化,相关方程的近似形式是为每个单元建立 的,从而表达质量转换和相流速和压力差之间的关系。单元集合的这 些方程的联立(近似)解可得到在单个时间每个单元的压力和内容物。 可求解这些方程来确定边界条件控制下每个时间点的油藏状态,如源 汇项,其说明多少流体被注入到模拟模型中不同位置的油井中或从其 中排出。
【0091】表示油井作业率的源汇项可在进行模拟研究时作不同设 定。开始时,历史匹配过程可用来验证模拟模型。为了确保模拟模型 是实际油藏的优良表示,用历史动态数据校准该模拟模型,该数据通 常包括在规则间隔的生产的流体容积的测量值和油井中压力的周期性 测量值。在该相中,用为油井产量收集的数据规定源汇项。然后,执 行模拟模型并调整油藏特性从而与从油田观察的数据对应。
【0092】在验证模拟模型后,模拟模型可用来提供预报未来油藏 和油井动态的预测。在该操作模式中,即使对于未来日期的油井产量 数据是不可知的,也可规定源汇项。模拟模型可用来研究许多可能的 预测情形。对于每个情形,可为边界条件集选择某些设定,从而研究 操作油藏的可能策略并与不同操作限制一致。
【0093】无论在历史匹配还是预测模式中,选择和规定边界条件 来操作模拟模型可能都不是简单的过程,且在很多情形中,可能涉及 大量的编程。在预测模式中,编程通常被用来设定油井产量和边界条 件。编写成设定模拟模型的油井产量和边界条件的程序通常也称为油 井管理逻辑或油井管理程序。照此,油井管理程序是增加到油藏模拟 程序的组件,该模拟程序被用来求解油藏方程。
【0094】油井管理程序通常被设计成灵活的并解决许多类型的油 藏要求。该程序通常包括许多步骤或代码,它们是以预定义的次序 可执行,从而分析对设施强加的限制和要求。如果任何限制被违反或 破坏,则程序可执行一系列调整从而修改油井作业条件直到限制不再 被违反。对于每个限制违反,可做出大量调整,且大量不同的井可以 是调整的候选。在开发并编码油井管理程序后,通常该程序被编译并 与其余油藏模拟器代码链接,且最终组合的软件包被用于油藏的预测 研究。
【0095】因此,本发明的不同实施例根据开发一层由图形界面支 持的组件提出了一种编程解决方案,从而创建高级编程方法。该程序 是用特殊高级语言通过图形环境创建的。最终的程序然后被转换为低 级编程语言,如C++、FORTRAN等等。
【0096】在构建计算机程序方面,本发明的实施例给出一个范例 性转化,因为用户通过使用组件作为图形环境中的构建块来组装逻辑 分支而构建程序,而非在文本编辑器环境中编写低级C++指令。因此, 该实施例以分级形式显示高级逻辑组件的分支,而非显示数千行低级 编程代码。这些逻辑组件的分支经配置转化为数千行低级编程代码。 为了使组装程序的任务更容易,可开发预造(pre-fabricated)逻辑分支 库,且其可作为额外的预定义构建块利用。
【0097】图1A示出按照本发明一个或多个实施例预测油藏动态的 方法1的示例性流程图。在方块10,构建表示油井管理程序的分级逻 辑图。本发明的多种实施例针对构造构建分级逻辑图的方法,其在下 文中参考图1B更详细地描述。在方块20,分级逻辑图被解码为低级 编程代码。本发明的各种实施例针对解码过程,其在下面参考图17- 18描述。在方块30,低级编程代码可被编译并和油藏模拟程序链接。 低级编程代码可通过本领域人员公知的传统方法编译和链接。在方块 40,油藏模拟程序被执行,以生成油藏模拟模型。在方块50,油藏模 拟模型被用来预测油藏动态。该油藏模拟模型可生成报告,这些报告 被用来从油藏生产碳氢化合物,如方块60所示。油藏模拟模型可包括 油藏和/或设施,其中设施表示油藏和输送位置之间流动路径中的物理 设备。设施可包括平台、歧管、泵、压缩机、分离器、管路、钻塔和 其他合适设施中的一个或更多个。进一步,油藏模拟模型的模拟可用 来模拟油藏中发生的化学、物理和流体流动过程,从而预测油藏的未 来行为和提高来自所述油藏的碳氢化合物开采量。
【0098】图1B示出按照本发明一个或多个实施例构建分级逻辑图 的方法100的示例性流程图。分级逻辑图可转化为计算机语言,如C++、 FORTRAN等。解码和转化过程在下面参考图17-18描述。图形用户 界面可与构建分级逻辑图结合使用,从而促进用户和本发明软件应用 实施例之间的交流。如此,图2-4、6、10、12、14和15示出示例性 分级逻辑图,如同它们是按照本发明一个或多个实施例构建的。此外, 图5、7-8、11和13示出可显示的各种示例性数据窗口,以构建分级 逻辑图。
【0099】参考图1B中方块110,具有FAC图标的占位符号和具有 S图标的占位符号显示在计算机显示屏上。FAC图标表示分级体系内 最高级组件,而S图标表示分级体系内的次最高级组件。图2示出按 照本发明一个或多个实施例的示例性分级逻辑图200,其具有FAC图 标210的占位符号和S图标220的占位符号。S图标220的占位符号向 内首行缩排地显示在FAC图标210的占位符号下面。
【00100】这里所用的组件被定义为用于构建分级逻辑图的对象或 元素。每个组件表示一组编程代码,其可在分级逻辑图转化为低级编 程代码时生成。转化过程下面参考图18A和18B更详细地说明。每个 组件可通过输入数据定义,输入数据可转化为低级编程代码的一部分。
【00101】在方块120,FAC图标的描述是从用户接收的。该描述 可以是设施的名称,如油井、钻井平台、油田等。FAC图标的描述也 可以是正在构建的分级逻辑图的分支名称。类似地,FAC图标表示设 施组件,其经配置来开始分级逻辑图的新分支和/或引入设施。回去参 考示例性分级图200,设施组件的描述是钻井平台ABC,如图3所示。 在接收设施组件的描述后,该描述显示给用户。分级逻辑图中可表示 一个以上的设施组件。
【00102】在方块120,S图标的描述也是从用户接收的。S图标表 示一连串的通配组件(“次序组件”),其中通配组件是主要组件,其经 配置来执行分级逻辑图中的某些逻辑步骤。通配组件在下面更详细地 说明。次序组件标记分级逻辑图中逻辑部分的开始。逻辑部分可以是 主程序的一部分,或次序组件可引入新子程序。每个设施组件可具有 一个或更多个次序组件。回去参考示例性分级图200,次序组件的描述 是钻井平台处理逻辑(Platform_Processing_Logic),如图3所示。
【00103】在方块130,在接收到次序组件的描述后,该描述被显 示给用户且具有G图标的占位符号被显示在S图标下面。回去参考示 例性分级图200,G图标230的占位符号显示在S图标220的占位符号 下面,如图3所示。G图标表示次最高级组件,该组件为通配组件。 每个次序组件可以由一个或更多个通配组件定义。
【00104】在方块140,在接收到通配组件描述后,显示该描述且 通配组件的可能子组件的一个或更多个占位符号显示在G图标下面。 回去参考示例性分级图200,通配组件的描述是应用钻井平台最大产油 量约束(Apply_Platform_MaximumOilRate_Constraint),如图4所示。 可能的子组件包括是否测试if_test组件、循环组件、退出循环条件 quit_loop_condition组件、执行动作execute_action组件和嵌套通配 nested_generic组件。在一个实施例中,可能的子组件以其被处理的次 序显示。这些子组件中的每个都可用来定义通配组件。回去参考示例 性分级图200,是否测试if_test组件可由C图标410表示,循环组件 可由循环图标420表示,执行动作execute_action组件可由EA图标430 表示,且嵌套通配nested_generic组件可由G图标440表示,它们都显 示在图4中。然而,应该注意虽然用户可定义子组件的任何顺序,但 显示和最终处理子组件的顺序遵从预定次序。
【00105】开始,是否测试if_test组件允许用户规定一个或更多个 逻辑限制或条件。如果通过接收其描述来选择是否测试if_test组件, 则可提示用户从预定义条件的列表中选择,如方块150中所示。用在 油井管理编程环境中的预定义条件的例子可包括测试是否违反设施的 油产量、气产量、水产量、气油比率、水油比率等的最大或最小限制。 图5示出显示OMAX 510的示例性数据窗口,作为用在油井管理编程 环境中预定义条件的例子。OMAX 510的低级编程代码是TestCondition =CurrentFacility.OilRate>CurrentFacility.MaximumOilRate(测试条件= 当前设施的油产量>当前设施的最大油产量)。OMAX经配置来对照设 施的最大地表相油产量测试设施的地表相油产量。可替换地,用户可 在方块150中构建或规定他/她自己的条件。一旦预定义条件确定,预 定义条件的描述邻近对应于是否测试if_test组件的C图标显示,如方 块155所示。回去参考示例性分级图200,OMAX邻近C图标600显 示,如图6所示。一个以上的是否测试if_test条件可由“AND”或“OR” 运算符接合规定,从而定义通配组件的复杂测试条件。
【00106】循环组件允许用户在所需计算机程序中建模循环结构。 循环结构通常被用来以重复方式执行某个逻辑块,直到满足某些条件 或限制。循环结构的例子包括while_loop(while循环),for_loop(for 循环)和set_loop(set循环)。在油井管理编程中,set_loop循环结构 通常被用来重复一组设施的元素。例如,set_loop循环结构可用来为预 定义油井集合中的候选油井重复某些调整。如上所述,可通过接收循 环组件的描述选择循环组件。基于该选择,可提示用户从列表中选择 循环类型,如方块160所示。为了示例目的,图7示出示例性数据窗 口,其显示按照本发明一个或多个实施例的设置定义参数列表730和 循环类型列表720。SetType(设置类型)740和UserSet(用户设置) 710已经被选择用来指示set_loop循环结构作为循环类型。
【00107】一旦选择特定的循环类型,可提示用户为循环组件规定 一个或更多个条件。循环组件的条件通常可称为过滤条件。对于 set_loop循环结构,过滤条件定义要穷尽循环的设施集合应包括或应排 除哪个设施。用在油井管理编程中的过滤条件的例子包括以超过某个 规定值的气产量过滤油井子集。可提示用户从预定义条件列表810中 选择,如图8所示。在该示例性数据窗口中,图8示出用户已经选择 预定义条件ACTIVE(活动的)AND FACILITY_DESCRIPTOR_PRODUCER(设施_描述符_生产者)。应用 到油井的条件ACTIVE(活动的)指没有关闭的油井。
条件FACILITY_DESCRIPTOR_PRODUCER(设施_描述符_生产 者)指是生产井(不是注入井)的油井。条件AND显然是逻辑运算符。 可替换地,用户也可规定他/她自己的条件。一旦选择或规定条件,如 方块166所示,为每个规定的条件显示C图标,如方块168所示。回 去参考示例性分级图200,图10示出循环图标1000和3个C图标1010, 描述Active_Producers(活动的_生产者)显示在循环图标上面,ACTIVE AND FACILITY_DESCRIPTOR_PRODUCER(活动的AND设施_描述 符_生产者)显示在C图标上面。
【00108】定义循环组件的条件后,用户可定义一个或更多个退出 循环条件quit_loop_condition组件,它们与循环组件关联。退出循环条 件quit_loop_condition组件通常由决定循环何时结束或退出的条件或限 制定义。这样,退出循环条件quit_loop_condition组件通常被称为“何 时停止(stop when)”条件。可提示用户从预定义条件列表中选择,类 似于以是否测试if_test组件的预定义条件列表提示用户的方式。图11 示出示例性数据窗口1100,其显示NoViolation(无违反)1110作为退 出循环条件quit_loop_condition组件的所选的预定义条件。NoViolation 条件被配置为当是否测试if_test组件定义的条件(如OMAX)不再被 违反时,停止循环操作。可替换地,用户也可定义另一个条件。在接 收退出循环条件quit_loop_condition组件的描述和退出循环条件 quit_loop_condition组件的条件后,如方块170所示,一个或更多个对 应于这些条件的C图标可以邻近它的描述显示,如方块172所示。回 去参考示例性分级图200,图12示出其上方有NoViolation的C图标 1200。
【00109】用户也可定义一个或更多个执行动作execute_action组 件,其经配置来执行某个命令或函数。在接收执行动作execute_action 组件的描述后,可提示用户从预定义命令列表中选择,如方块180所 示。油井管理编程环境中命令的例子包括对油井执行某些调整,关闭 油井,钻探油井,改变油井产量,减小油井产量等。用户可提供额外 的数据,以进一步定义所选命令。图13示出示例性数据窗口1300,其 中的Decrease_Type(减小类型)1310和ONE_AT_A_TIME(每次一个) 1320被选择作为执行动作execute_action组件的预定义命令。在方块 185,一旦执行动作execute_action组件已经描述和定义,则显示EA图 标,描述邻近其显示。回去参考示例性分级图200,图14示出EA图 标1400,描述Reduce_wells_1×1(减少_油井_1×1)邻近其显示。已经 除去未选择或未定义组件的最终形式的分级逻辑图200在图15中示 出。
【00110】进一步,执行动作execute_action组件也可由次序组件 定义,该次序组件被配置成调用另一个实施例中的函数或子程序。以 该方式,执行动作execute_action组件可经配置来调用特定的子程序。 作为例子,图16示出具有次序组件1620的执行动作execute_action组 件1610,其经配置来调用函数或子程序。此外,执行动作execute_action 组件可包括嵌套通配nested_generic组件1630。
【00111】嵌套通配nested_generic组件被定义为另一个通配组件 内的通配组件(或在执行动作execute_action组件内)。嵌套通配 nested_generic组件也可由G图标表示。在接收到嵌套通配 nested_generic组件的描述后,如方块190所示,该嵌套通配 nested_generic组件可能的子组件的占位符号显示在G图标下面,如方 块195所示。这些子组件包括是否测试if_test组件、循环组件、退出 循环条件quit_loop_condition组件、执行动作execute_action组件和嵌 套通配nested_generic组件。然后用户可选择这些组件中的任一个来定 义嵌套通配nested_generic组件。进一步,每个通配组件可具有一个以 上的嵌套通配nested_generic组件。使用该嵌套能力,可以用许多层嵌 套的逻辑构建复杂的逻辑链,其中每个层都以一个或更多个通配组件 模型化。以该方式,嵌套通配nested_generic组件提供通配组件,其具 有建模复杂逻辑结构的灵活性。
【00112】如果嵌套通配nested_generic组件被选择来定义执行动 作execute_action组件,则嵌套通配nested_generic组件可在执行动作 execute_action组件被处理后立即被处理。以一个或更多个嵌套通配 nested_generic组件定义的执行动作execute_action组件可用来处理取决 于执行动作execute_action组件中定义的命令的成败的逻辑。例如,如 果命令被首先执行,然后检查其成败从而判断是否执行另一个命令。 例如,可检查维修油井的命令来判断其是否成功。如果维修不成功, 则关闭油井。
【00113】虽然本发明的实施例是参考一个设施组件、一个次序组 件、一个通配组件和一个执行动作execute_action组件描述的,但其他 实施例可包括具有一个或更多个设施组件、次序组件、通配组件和/或 执行动作execute_action组件的分级逻辑图。设施组件、次序组件、通 配组件和执行动作execute_action组件可以它们自顶向下显示的顺序被 处理。
【00114】一旦分级逻辑图建立,则分级逻辑图被解码为低级可编 译代码,如C++,FORTRAN等。解码过程可通过执行“输出步骤” 进行,在该步骤中分级逻辑图的所有组件被转化为低级代码。用户也 可在完成分级逻辑图之前的任意时刻查看任意组件的低级代码。图17 示出按照本发明一个或多个实施例的方法1700的示例性流程图,其用 于解码以方法100构建的分级逻辑图。在方块1710,设施组件和次序 组件的描述存储在存储器中。回去参考图15所示的示例性分级逻辑图 200,钻井平台ABC是作为设施组件的描述存储的, Platform_Processing_Logic(钻井平台处理逻辑)是作为次序组件的描 述存储的。在方块1720,每个次序组件被解码。在方块1725,次序组 件的每个通配组件以它们出现在分级逻辑图中自顶向下的顺序被解 码。通配组件的解码过程在下面参考图18A和18B更详细地说明。在 方块1730,判断设施组件是否包括任何其他次序组件。如果还有更多 的次序组件,那么下一个次序组件如方块1720所示那样处理。次序组 件可以以分级逻辑图规定的顺序被处理。然而,如果没有更多次序组 件,则判断分级逻辑图是否含有任何更多的设施组件,如方块1740所 示。设施组件也可以以分级逻辑图中规定的顺序被处理。如果有更多 的设施组件,则下一设施组件和相关的次序组件的描述被存储到存储 器中,如方块1710所示。然而,如果没有更多设施组件,则处理结束。 以该方式,所有设施和次序组件被解码。
【00115】图18A和18B示出按照本发明一个或多个实施例解码通 配组件方法的示例性流程图。在方块1805,判断待解码通配组件是否 具有是否测试if_test组件。如果有是否测试if_test组件,则是否测试 if_test组件的条件或限制被转化为低级编程代码,如方块1810所示。 如果条件是预定义的,则从存储在存储器的库中检索对应于这些条件 的低级编程代码。回去参考分级逻辑图200,结合参考图5说明的 OMAX的选择,OMAX的低级编程代码是TestCondition= CurrentFacility.OilRate>CurrentFacility.MaximumOilRate。然后,在方 块1815,设施引用得以解析。也就是,低级代码条件中的任何设施引 用被解析。如果与是否测试if_test组件关联的通配组件嵌入到set循环 set_loop组件定义的循环中,则CurrentFacility(当前设施)的引用被 设定为由循环定义的设施。可替换地,如果与是否测试if_test组件关 联的通配组件没有嵌入到循环中,则CurrentFacility的引用被设定为由 设施组件描述定义的设施。继续上面引用的例子,CurrentFacility是引 用是否测试if_test条件OMAX中设施的代码变量,而含OMAX的通 配组件不是set循环set_loop组件的一部分。因此,CurrentFacility被设 定为Platform ABC(钻井平台ABC),其是设施组件的设施名称。如果 没有是否测试if_test组件出现,则处理继续到方块1820,其在下面的 段落详细说明。
【00116】在方块1820,判断通配组件是否具有循环组件。如果有 循环组件,则循环组件被转化为低级代码。作为该转化的一部分,基 于循环组件下面的组件上下文中规定的内容,循环组件可以判断是否 需要循环结构。如果需要循环结构,则转化可建立循环结构并创建变 量从而用作访问单个元素的循环计数器变量。然而,如果没有通配组 件具有循环组件,则判断通配组件是否包括执行动作组件,如下面在 方块1850中描述的那样。
【00117】在方块1825,判断循环组件是否具有过滤条件。如果没 有过滤条件,循环组件的循环类型在方块1838中被解码。然而,如果 过滤条件存在,则过滤条件转化为低级编程代码,如方块1830所示。 如上所述,如果过滤条件是预定义的,那么对应于过滤条件的低级编 程代码可从存储在存储器的库中获取。回去参考分级逻辑图200,并结 合参考图8说明的ACTIVE AND FACILITY_DESCRIPTOR_PRODUCER的选择,预定义条件ACTIVE (活动的)的低级编程代码可以是candidate.get_is_active(),且预定义条 件FACILITY_DESCRIPTOR_PRODUCER(设施_描述符_生产者)的 低级编程代码可以是candidate.facility_descriptor=“Producer”。在方块 1835,解析过滤条件中的设施的引用。例如,如果循环组件是set循环 set_loop组件,则由set循环set_loop组件定义的设施可用作供该set 循环set_loop组件下面的组件使用的引用设施。结合参考图10说明的 Active_Producers(活动的生产者)的选择,回去参考分级逻辑图200, Active_Producers是set循环set_loop组件,其被配置为对油井集合执 行循环。同样地,set循环set_loop组件下面的逻辑的引用设施被设定 为当前被Acitve_Producers的set循环set_loop组件处理的油井。和set 循环set_loop组件过滤条件有关的术语“候选者(candidate)”指为该 集合所考虑的设施类型。称为“候选者”的设施类型由set循环set_loop 组件的数据定义。在该情形中,Active_Producers是set循环set_loop 组件,其经配置来对油井集合执行循环,且因此,术语“候选者”指 油井。一旦设施引用被解析,循环组件的循环类型在方块1838被解码。 循环类型可以是while循环、for循环或set循环。
【00118】一旦循环组件被解码,则判断通配组件是否具有退出循 环条件quit_loop_condition组件,如方块1840所示。如果存在退出循 环条件quit_loop_condition组件,则条件转化为低级编程代码,如方块 1845所示。然而,如果没有退出循环条件quit_loop_condition组件存在, 则处理进入到方块1850,其在下面的段落详细说明。如上所述,如果 条件是预定义的,那么对应于该条件的低级编程代码可从存储在存储 器的库中获取。在一个实施例中,如果退出循环条件quit_loop_condition 是预定义条件“无违反”NoViolation,则该条件被配置成在是否测试 if_test组件定义的条件不再有效时停止循环。因此,在这类实施例中, 引用为是否测试if_test组件定义的条件。回去参考分级逻辑图200并 参考图15,退出循环条件quit_loop_condition是预定义条件“无违反” NoViolation,其参考预定义条件OMAX,该条件被配置为对照最大油 产量测试钻井平台的油产量。
【00119】在方块1850,判断通配组件是否具有执行动作 execute_action组件。如果存在执行动作execute_action组件,则执行动 作execute_action组件的命令被转化为低级编程代码,如方块1855所 示。如果没有执行动作execute_action组件存在,则处理进入到方块 1880,其在下面的段落详细说明。如上所述,如果命令是预定义的, 则对应于预定义命令的低级编程代码可从存储在存储器的库中获取。 回去参考分级逻辑图200,并参考图13,Decrease ONE_AT_A_TIME (每次减少一个)的低级编程代码是调用预定义函数,从而一次减少 一个油井的油井产量。
【00120】在方块1860,解析执行动作execute_action组件中任何 设施引用和/或流体相引用。在一个实施例中,流体相引用可通过参考 是否测试if_test组件的条件来解析,该条件定义执行动作execute_action 组件所属的通配组件。在另一个实施例中,如果执行动作execute_action 组件在set循环set_loop组件创建的循环内,那么CurrentFacility的任 意引用被设定为由set循环set_loop组件定义的设施。可替换地,如果 执行动作execute_action组件不是set循环set_loop组件的一部分,则 任何CurrentFacility引用可被设定为:1)如果当前通配组件是嵌套在 某些前面通配组件中的组件,则是前面的set循环set_loop组件中定义 的设施,或2)设施组件描述中定义的设施。回去参考分级逻辑图200, 并参考图15,执行动作execute_action组件1510与Active_Procedures set 循环(set_loop)组件1520成对,并因此,Decrease ONE_AT_A_TIME (每次减少一个)的低级代码中CurrentFacility的任何引用由 Active_Producers set循环组件正在处理的当前油井定义。此外,流体相 的引用指回OMAX,它是是否测试if_test组件的条件。减少每个油井 的量是在每次减少调整之前和之后从限制OMAX和油井产量确定的, 该限制OMAX引用钻井平台的当前油产量。
【00121】在方块1865,判断执行动作execute_action组件是否有 任何嵌套通配nested_generic组件。如果嵌套通配nested_generic组件 存在,则按照这里所述的方法1800中说明的方块解码属于执行动作组 件的嵌套通配组件。回去参考分级逻辑图200并参考图15,执行动作 execute_action组件1510,即Reduce_wells_1x1,没有嵌套通配 nested_generic组件。因此,在方块1860解析设施引用和/或流体相引 用后,对第一通配组件的处理结束。回去参考在方块1865的查询,如 果没有嵌套通配nested_generic组件存在,则处理进入方块1880,其将 在下面的段落详细说明。
【00122】图20示出按照本发明一个或多个实施例的具有嵌套通 配nested_generic组件的分级逻辑图。该实施例包括通配组件,其具有 循环组件set_of_all_wells(所有油井集)和第一嵌套通配 (nested_generic)组件 check_water_cut_try_workover_then_if_not_successful_shut_in_well(检 查含水量,然后尝试油井维修,如果不成功就关闭油井)。第一嵌套通 配nested_generic组件包括是否测试if_test组件 Check_if_water_cut_exceeds_maximum_value(检查含水量是否超过最 大值),其已经被预定义为TestCondition=CurrentFacility.water_cut> CurrentFacility.water_cut_maximum,这里water_cut(含水量)=生产的 液体中水的部分。第一嵌套通配nested_generic组件进一步包括执行动 作execute_action组件 Perform_workover_then_test_result_if_not_successful_shut_in_well(进行 油井维修,然后测试结果如果不成功就关闭油井),其被配置为关闭油 井穿孔从而减少油井中的水产量。执行动作execute_action组件包括第 二嵌套通配nested_generic组件If_adjustment_fails_shut_in_well(如果 调整失败就关闭油井),其包括是否测试if_test组件 Execution_of_command_not_successful(执行命令不成功),该组件已经 被预定义,以判断当前命令是否成功。当前命令指在执行动作 execute_action组件中定义的命令,执行动作execute_action组件是嵌套 的通配组件最靠近的父层嵌套,在这里是否测试if_test组件被调用。 在该实施例中,如果油井维修执行动作(execute_action)不成功(即 条件为真),那么油井可用执行动作execute_action组件Shut_in_well (关闭油井)关闭。
【00123】在方块1875,判断通配组件是否具有任何其他执行动作 execute_action组件。如果执行动作execute_action组件存在,那么处理 返回到方块1855,在这里下一执行动作execute_action组件的命令被转 化为低级编程代码。如果没有执行动作execute_action组件存在,则判 断通配组件是否具有任何嵌套通配nested_generic组件,如方块1880 所示。如果嵌套通配nested_generic组件存在,那么每个嵌套通配 nested_generic组件是按照方法1800中描述的方块解码的,解码顺序是 分级逻辑图上显示的顺序,如方块1885所示。如果嵌套通配 nested_generic组件不存在,则处理结束。
【00124】除了条件和命令,其他组件,如通配组件、执行动作 execute_action组件和set循环set_loop组件也可转化为编程代码。例如, 通配组件可被配置成检查其子组件并要求子组件将其自身转化为编程 代码片段。那么,通配组件可被配置成采用最终的代码片段,注意可 能需要的变量声明,并将片段组合到一起完成转化任务。类似地,执 行动作execute_action组件可被配置成检查其子组件,决定其是否应调 用函数(如果次序子组件存在)或执行某个标准命令。执行动作 execute_action组件也可被配置成检查是否定义任何嵌套通配 nested_generic子组件,且如果定义了,则激活每个嵌套通配 nested_generic子组件的转化。类似地,set循环set_loop组件可被配置 成判断是否建立循环结构,且如果建立,则创建循环结构所需的变量 并生成处理循环结构的代码。组件转化为低级代码也可用面向对象的 编程方法执行且不必以线性的自顶向下(top-down)次序执行。
【00125】可按照这里所述的本发明实施例创建并解码的另一类组 件是容器组件,其可用来将其他组件,如次序组件、通配组件或执行 动作execute_action组件分组到单个容器即组件中。用户可定义仅在容 器内使用的局部变量。虽然许多变量是程序按需要自动建立的,但是 用户总需要能够规定他/她自己的局部变量。在图形用户界面环境中, 容器组件可扩展或收缩。例如,可建立包括二十个通配组件的次序组 件,通配组件被分到4个容器组件中,每个容器组件具有5个通配组 件。当次序组件被扩展时,用户可仅看到在次序组件下面的4个容器 组件。当容器组件扩展时,用户可看到5个通配组件,其构成扩展的 容器组件。图9示出次序组件的例子,其具有带有3个独立通配组件 的容器组件。
【00126】虽然本发明的多个实施例是参考为油井管理的目的而创 建的计算机程序描述的,这些实施例也可以用于为其他应用创建计算 机程序。而且,其他实施例考虑各种组件组合从而创建更适于其他应 用的组件集合。
【00127】这里所述的各种实施例可结合硬件或软件实施,如果合 适,也可两者都结合。因此,本发明的该方法和设备,或某些方面或 其部分可采取程序代码(即指令)的形式,程序代码包括在有形的介 质中,如软盘、CD-ROM(光盘只读存储器)、硬盘驱动器或任何其他 机器可读的存储介质,其中当程序代码被加载到机器中并被机器如计 算机执行时,机器就成为实践本发明的设备。在可编程计算机上的程 序代码执行的情形中,计算装置通常可包括处理器、处理器可读的存 储介质(包括易失性存储器和非易失性存储器和/或存储元件)、至少一 个输入装置、至少一个输出装置。一个或多个程序可利用本发明的领 域专用编程模型的创建和/或实现,如通过使用数据处理API等,该一 个或多个程序优选以高级过程或面向对象的编程语言实现,从而与计 算机系统通信。然而,如果需要,(多个)程序可以汇编语言或机器语 言实现。在任何情形下,语言可以是编译或解释型的语言,并可与硬 件实现结合。
【00128】图19示出计算机网络1900,本发明实施例可在其中实 施。计算机网络1900包括系统计算机1930,其可以实施为任何传统个 人计算机或工作站。系统计算机1930可与一个或多个硬盘存储装置 1950通信,其可以是外部硬盘存储器装置。设想硬盘存储装置1950 是传统的硬盘驱动器,且类似地,可以通过局域网或远程访问的方式 实施。硬盘存储装置1950可用来存储任何和/或全部程序指令、测量数 据和所需结果。
【00129】在一个实施例中,系统计算机1930可从硬盘存储器装 置1950检索适当的数据从而构建分级逻辑图,并按照对应于这里所述 方法的程序指令将该图解码或转化为低级编程代码。程序指令可以计 算机编程语言,如C++、Java等编写。程序指令可存储在计算机可读 存储器中,如程序盘存储器装置1960。当然,存储程序指令的存储介 质可以是用于存储计算机程序的任何传统类型,包括硬盘驱动器、软 盘、CD-ROM和其他光学介质、磁带等。
【00130】按照优选实施例,系统计算机1930主要将输出呈现在 图形显示器1927上,或可替换地经打印机1928输出。系统计算机1930 可在硬盘存储介质上存储上述方法的结果供以后使用和进一步分析。 键盘1926和指向装置(如鼠标轨迹球等)1925可提供给计算机系统 1930,使得能够进行交互操作。
【00131】按照本发明的一个实施例,程序盘存储装置1960包括 图形用户界面1970,其允许用户通过查看、编辑和操纵图形环境中的 逻辑分支而编程。图形用户界面1970被配置成和集成的开发环境 (IDE)一起工作。IDE可包括编辑器,其和文本和图形模式的逻辑、 交叉引用和搜索能力、扩展/折叠(collapse)特征一起工作,从而控制 逻辑分支的显示和用来比较不同逻辑分支的比较工具。IDE和在图形 环境中工作的能力使得构建程序和维护程序的任务更容易并更有效。
【00132】图形用户界面1970提供不同控件来创建组件和构建树 分支。界面实现利用了多级组件架构,从而促进自顶向下设计和构建 程序的实现。以该方式,程序可自顶向下逐层构建。
【00133】使用分级逻辑图方法来编程的许多优点中的一个是它自 动强加程序的高度结构化设计和视图。程序被分成逻辑部分,每个逻 辑部分由独立的逻辑分支表示。每个逻辑分支是高度结构化的,从具 有固定架构的一组构建方块(即,组件)构建。每个分支是用IDE中 内置的图形界面强加的自顶向下过程构建的。本发明实施例的另一个 优点是分级逻辑图提供高级、紧凑形式的完整计算机程序。
【00134】以低级代码,如C++编写的复杂程序可能难于阅读和 理解,即使它是良好结构化的。代码趋向于以多次函数调用展开,函 数可嵌套几层深。使用程序的分级表示提供管理荧屏上的逻辑显示的 简易方式。分级结构的分支可折叠或扩展,从而帮助阅读和管理逻辑, 特别是在处理复杂分支时。分支可折叠从而隐藏细节并显示逻辑的高 级视图,或它们可扩展从而示出任意所选层的详细信息。分支可在同 一窗口中串联展开,或可扩展到新窗口中从而帮助查看和管理荧屏显 示。当因为质量控制要对程序执行代码走查时,查看图形化逻辑的能 力表示显著优势。通过隐藏/扩展树的各个层或分支,诸如审阅程序设 计,执行代码的详细分析和检查逻辑的任务可更容易并更有效地执行。 代码走查可以顾客参与审阅的方式执行从而确保所有用户规范都满 足。审阅和检查逻辑的能力导致更好质量的程序。
【00135】当需要快速改变时,为了帮助维护程序,树结构的每个 分支可以是活动的或非活动的,以便尝试不同逻辑形式。在最终的程 序转化为低级代码时,非活动分支可忽略。用户界面实现允许分支被 临时去激活且随后再激活。特殊符号(如“X”)可用在图形界面上从 而标记分支为非活动的。这个功能允许用户查看和比较不同的逻辑实 施。不同编程解决方案可在同一程序文件内保持并评注。
【00136】本发明实施例的另一个优点涉及调试。编写帮助测试、 调试和验证C++程序的调试指令可能是单调并费时的工作。本发明实 施例的一个重要益处是能够实施自动调试技术,从而使得验证块更自 动化和高效。在转化为低级代码时可产生分级结构的每个分支,以生 成其自己的调试代码。此外,分级逻辑图可被用作帮助跟踪由调试代 码生成的不同级输出的精确路标。可产生调试代码的每个部分,以自 动引用分级结构中的精确位置,在这里调试代码被配置成创建某些中 间输出。因为调试代码仅在转化为低级代码时生成,所以其不和分级 逻辑图一起显示也不妨碍读取图的能力。在转化块中可启用或关闭自 动调试代码生成。对于程序的生产发行,当不再需要调试代码时,关 闭调试代码可将其从交付的程序中除去,从而避免与执行嵌入的调试 代码关联的任何计算开销处罚。
【00137】本发明实施例的另一个优点针对评注。组件可被分配唯 一的描述,其有助于读取和理解每个分支及分级逻辑图的每个层的过 程。这进而使执行代码走查更容易,如前面的讨论。此外,描述可用 来评注由组件实现的逻辑。描述可以是高级伪代码,其清楚说明可由 组件执行的(多个)指令。例如,是否测试if_test组件的描述可以是 check_if_maximum_gas_rate_is_exceeded(检查是否超过最大的气产 量),且通配组件的描述可以是 check_minimum_oil_production_rate_and_if_violated_drill_more_wells (检查最小的油生产率,并且如果违反了它就钻更多的油井)。给组件 分配清楚并有意义的描述可导致为代码创建即时评注,这有助于对程 序的后续维护。此外,每个组件便于用户存储额外的评注,包括假设、 解释、方法、经验/学习等,从而帮助理解逻辑并辅助程序的维护。
【00138】本发明实施例的另一个益处是在分级逻辑程序内删除、 拷贝或粘贴逻辑分支的功能。为了使得这些操作安全,在每次操作之 后对分级逻辑程序执行验证检查。规则可被编程到待检查和分解的组 件中。内建在组件设计中的通信模型允许组件访问分级结构上上下下 的所有层中的数据从而分解具有上下文依赖(context dependency)的 规则。例如,当拷贝分支到新位置时,检查可能无效的上下文。新位 置可能没有使拷贝分支的执行有效所需的限制违反测试的类型。可替 换的,拷贝的分支可能需要访问设施(例如,钻井平台)的数据,该 设施没有在目的地节点定义。另一个常见问题包括未声明的局部变量。 在拷贝分支后,检查需要声明并在目的地节点插入的局部变量。
【00139】本发明实施例的另一个优点是能够创建高度通配并高度 可再利用的逻辑。通配代码可用逻辑段或分支编程,该逻辑段或分支 是上下文敏感的并含最少量的硬编码数据。每个逻辑分支适配在分级 树的特定位置并可从周围树提取信息从而分解上下文敏感指令。这使 逻辑对程序其他部分或其他程序容易地“可即插即用”。编写通配、可 即插即用代码的能力使得可能构建可再用逻辑的模板库,其可提供给 用户从而帮助建立他们的油井管理程序。
【00140】在组合分级逻辑图的过程中执行的另一个常见操作是再 使用内建在其他程序中或来自模板库的逻辑分支。在该情形中,操纵 涉及跨不同逻辑“容器”拷贝逻辑分支。可能要执行额外的检查来使 该拷贝操作安全。组件名称、数据和定义的冲突,以及用在逻辑中的 变量的冲突可能需要检测和解决。组件可被编程从而检查这些冲突, 并要么自动解决冲突要么警告用户从而在需要是采取行动。例如,当 从外部源拷贝分支时,所拷贝分支的某些子分支可能具有已经存在于 目标树中的描述。可检查具有相同描述的组件是否具有相同的数据/定 义。如果组件是复合或混合组件,则检查可包括详细研究和比较属于 该组件的每个节点。如果定义同意,则不执行校正块。否则,拷贝的 具有描述冲突的节点可能自动被再次描述从而解决冲突,且可发出警 告从而警告用户。这些内部检查使得从外部源拷贝逻辑分支更容易也 更安全。
【00141】虽然本发明的技术易受各种修改和变化的形式影响,但 是上面讨论的示例性实施例已经作为例子示出。然而,应该再次理解, 本发明不局限于这里公开的特定实施例。实际上,本发明的技术涵盖 落在所附权利要求限定的本发明精神和范围内的所有修改、等价物和 可替换方案。
相关申请的交叉参考
【0001】本申请要求2005年6月28日申请的美国临时申请 60/694738号的权益。
QQ群二维码
意见反馈