用于改进的垫板定位的系统和方法

申请号 CN200980104807.7 申请日 2009-02-11 公开(公告)号 CN101952539B 公开(公告)日 2013-11-20
申请人 兰德马克绘图国际公司; 哈里伯顿公司; 发明人 加里·舒特乐; 丹·科尔文;
摘要 一种用于自动 定位 垫板和定向垫板的 槽口 模板的系统和方法。该系统和方法还包括油井路径规划从垫板到所选的油井目标的自动调整。
权利要求

1.一种用于定向槽口模板的计算机实现的方法,包括:
基于槽口的预定数量、规划的预定数量、每个规划的轨迹和初始度,计算所述槽口模板的最优槽口分配值;
以预定角度将所述槽口模板旋转至新的角度;
基于所述槽口的预定数量、所述规划的预定数量、所述每个规划的轨迹和所述新的角度,计算所述槽口模板的另一个最优槽口分配值;
重复步骤:ⅰ)以预定角度将所述槽口模板旋转至新的角度;以及ⅱ)计算另一个最优槽口分配值,直至所述槽口模板旋转至另一个预定角度;
当所述另一个最优槽口分配值小于所述最优槽口分配值时,识别每一个新的角度;以及
以最后识别的新的角度定向所述槽口模板;
其中,所述最优槽口分配值是代表所述最优槽口分配的数值。
2.如权利要求1所述的方法,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括确定所述槽口的预定数量是否等于所述规划的预定数量。
3.如权利要求2所述的方法,其中,每一个规划包括起斜,并且计算最优槽口分配值和所述另一个最优槽口分配值进一步包括确定每一个起斜是否大约相同。
4.如权利要求3所述的方法,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括确定所述槽口模板是否是矩形。
5.如权利要求4所述的方法,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括基于每一个规划的最优槽口,使每一个规划初始分配至各自的槽口。
6.如权利要求4所述的方法,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括基于每一个规划的起斜,使每一个规划初始分配至各自的槽口。
7.如权利要求5所述的方法,其中,将至少一个规划再分配至另一个各自的槽口,从而确定是否有能够消除的任何问题。
8.如权利要求7所述的方法,其中,如果将所述至少一个规划再分配至所述另一个各自的槽口没有消除任何问题,将所述至少一个规划分配至所述各自的槽口。
9.如权利要求1所述的方法,其中,所述预定角度是大约5度。
10.如权利要求1所述的方法,其中,所述另一个预定角度是360度。
11.一种用于定向槽口模板的计算机实现的系统,包括:
计算模,其用于:基于槽口的预定数量、规划的预定数量、每个规划的轨迹和初始角度,计算所述槽口模板的最优槽口分配值;以预定角度将所述槽口模板旋转至新的角度;
基于所述槽口的预定数量、所述规划的预定数量、所述每个规划的轨迹和所述新的角度,计算所述槽口模板的另一个最优槽口分配值;重复步骤:ⅰ)以预定角度将所述槽口模板旋转至新的角度;以及ⅱ)计算另一个最优槽口分配值,直至所述槽口模板旋转至另一个预定角度;
识别模块,其用于当所述另一个最优槽口分配值小于所述最优槽口分配值时识别每一个新的角度;以及
定向模块,其用于以最后识别的新的角度定向所述槽口模板;
其中,所述最优槽口分配值是代表所述最优槽口分配的数值。
12.如权利要求11所述的计算机实现的系统,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括确定所述槽口的预定数量是否等于所述规划的预定数量。
13.如权利要求12所述的计算机实现的系统,其中,每一个规划包括起斜,并且计算最优槽口分配值和所述另一个最优槽口分配值进一步包括确定每一个起斜是否大约相同。
14.如权利要求13所述的计算机实现的系统,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括确定所述槽口模板是否是矩形。
15.如权利要求14所述的计算机实现的系统,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括基于每一个规划的最优槽口,使每一个规划初始分配至各自的槽口。
16.如权利要求14所述的计算机实现的系统,其中,计算所述最优槽口分配值和所述另一个最优槽口分配值进一步包括基于每一个规划的所述起斜,使每一个规划的初始分配至各自的槽口。
17.如权利要求15所述的计算机实现的系统,其中,将至少一个规划再分配至另一个各自的槽口,从而确定是否有能够消除的任何问题。
18.如权利要求17所述的计算机实现的系统,其中,如果将所述至少一个规划再分配至所述另一个各自的槽口没有消除任何问题,将所述至少一个规划分配至所述各自的槽口。
19.如权利要求11所述的计算机实现的系统,其中,所述预定角度是大约5度。
20.如权利要求11所述的计算机实现的系统,其中,所述另一个预定角度是360度。

说明书全文

用于改进的垫板定位的系统和方法

[0001] 对相关申请的交叉引用
[0002] 本申请要求于2008年2月11日提交的、第61/027,694号美国临时专利申请的优先权,并将其以引用的方式并入于此。
[0003] 关于联邦资助研究的声明
[0004] 不适用。

技术领域

[0005] 本发明一般涉及用于定位垫板(pad)的系统和方法。更具体地,本发明涉及垫板(有时称作平台)的自动定位,以及垫板的槽口模板的定向。本发明还涉及油井路径规划从垫板到所选的油井目标的自动调整。

背景技术

[0006] 在历史上,陆上垫板的定位已涉及很多关于适当的垫板定位的问题。例如,在石油和天然气行业中,石油和天然气钻探设备的陆上垫板的适当定位需要考虑表面地形和斜率约束。此外,也必须考虑位于每一个垫板上并用于安排垫板上的每一个油井的位置的槽口模板的方向。最后,必须考虑每一个油井路径,有时称作从垫板到所选油井目标的规划。
[0007] 例如,对于石油和天然气公司,大型陆上油田开发规划产生了独特的问题。非常规和致密地层天然气的花费通常包含大量开采的子表面目标。直接的结果是有大量的必须从表面垫板或区(sites)规划和钻孔的油井,这类似于海上平台。为了充分地对此规划,必须完成几个目标。例如,完成开发所需的表面垫板或区块的数量和位置是需要的,其依赖于从每一个垫板钻孔的油井的数量,置于单个油井路径上的工程约束(也就是,最大达到范围、狗腿严重度、倾等等),子表面目标的位置和地形约束-诸如标高和梯度。也需要限定每一个垫板的槽口模板几何结构和方向。槽口模板通常包含槽口之间很紧密的间隔,这需要推断将从每一个槽口产生的油井路径,以使得油井之间的碰撞危险最小化。并且,需要将油井路径分配到正确的槽口。也可能需要改变单个油井路径,从而最小化对从相同或不同的槽口模板规划或钻孔的其它油井的干扰。
[0008] 每个目标的主要问题是规划周期时间。规划每个垫板具有20个油井的50个垫板(即,总共1000个油井)是工作量大、重复过程的反复试验的项目。例如,通过将地形图形象化来在目标族群上从视觉上定位垫板。目测、估计标高,并将其用作起始参考点标高。随后必须计算建议的槽口模板几何形状的油井位置,并且每一个单个的油井路径必须被分配给槽口并被设计。在油井路径设计进行的过程中,可以确定由于油井路径约束仅区块定位不进行并且一次次重复该过程直至成功。在此时,必须改变每一个单个的油井路径,从而最小化与将从相同或不同区块钻孔的其它油井碰撞的危险。对于仅一个垫板,在任何地方上述过程实际上会花费3-5天。将该过程乘以50,那么所需的时间长度变得很可观。
[0009] 可以认为最经常使用的用于确定平台位置的一种方法是基于“移动和计算英尺数”的方法。在该方法中,一次性使用狗腿、倾角、达到范围和防碰撞作为平台位置的规划标准,手动建立一组油井路径规划。将通过很多油井路径遍历的累计测量深度求和,并作为测量的基础方案位置。
[0010] 一旦建立了油井路径,油井规划者随后通常沿四个罗盘方向中的一个将基础方案平台的表面位置移动固定距离,并重新计算累计测量深度。如果累计测量深度从基础方案测量减少,那么油井规划者知道有“优”于基础方案位置的潜在位置。然后规划者经历从基础方案位置将平台位置向不同罗盘方向移动不同的距离,以便根据从油井到平台位置钻孔所需的油井路径的总的计算的英尺长度找到最佳位置的多次重复过程。
[0011] 上述方法论有很多缺点。例如,其劳动量大、耗费时间、并需要达到固定规划的数量和要达到的目标。使用该方法论,油井规划者只在一个项目上就花费三到四个星期并非少见。
[0012] 其它用于平台设置的自动方法使用基于蒙特卡洛(Monte-Carlo)或随机数的、用于平台设置的统计计算,并考虑了出油井对注入井、处理设施的成本以及现存的管道。然而,它们没有考虑在美国专利第7,200,540号中讨论的目标加权。转让给兰德克图形公司(LandmarkGraphics Corporation)并以引用的方式并入于此的该‘540专利进一步讨论了,如果因而产生的平台组提供了这样的规划:a)达到更多的目标;b)以更小的距离达到相同数量的目标;或c)达到相同数量的目标,但包括基于油藏参数的、具有更高加权值的目标,对改变平台数量和位置并且最优化使用目标的方法的需求。简而言之,该‘540专利描述的系统实施用于选择一组平台位置,确定附加的平台位置,并确定在该组平台位置中的每一个平台位置的最优化位置。
[0013] 然而‘540专利没有讨论当工作在大型陆上油田开发规划特别是多山的区域时,在定位之后需要使用表面地形以自动抽取垫板标高。此外,‘540专利没有讨论使用表面网格更新现存的垫板标高的能或者基于斜率约束限制垫板的设置的能力。
[0014] 还需要通过沿表面标高模型的走向排列它们或基于规划的轨迹旋转它们,来最优化槽口模板定向,这在现有技术没有解决并且将减少碰撞的危险。由于槽口模板的紧密间隔,还需要最优地将规划分配给适合的槽口以及交错起斜(kick-off)并微移单个规划。

发明内容

[0015] 因此,本发明通过提供用于使用增量旋转定向槽口模板和使用增量微移定位垫板的系统和方法,满足了上述需要并克服了现有技术中的一个或更多的缺点。
[0016] 在一个实施例中,本发明包括计算机实现的、用于定向槽口模板的方法,其包括:i)基于槽口的预定数量、规划的预定数量、每个规划的轨迹和初始角度,计算槽口模板的最优槽口分配值;ii)以预定角度将槽口模板旋转至新的角度;iii)基于槽口的预定数量、规划的预定数量、每个规划的轨迹和新的初始角度,计算该槽口模板的另一个最优槽口分配值;iv)重复步骤:i)以预定角度将槽口模板旋转至新的角度;以及ii)计算另一个最优槽口分配值,直至槽口模板旋转至另一个预定值;v)当另一个最优槽口分配值小于该最优槽口分配值时,识别每一个新的角度;以及vi)以最后识别的新的角度定向该槽口模板。
[0017] 在另一个实施例中,本发明包括一种程序载体装置,其用于承载计算机可执行指令以定向槽口模板。指令是可执行的,以实现:i)基于槽口的预定数量、规划的预定数量、每个规划的轨迹和初始角度,计算槽口模板的最优槽口分配值;ii)以预定角度将槽口模板旋转至新的角度;iii)基于槽口的预定数量、规划的预定数量、每个规划的轨迹和新的角度,计算槽口模板的另一个最优槽口分配值;iv)重复步骤:i)以预定角度将槽口模板旋转至新的角度;以及ii)计算另一个最优槽口分配值,直至槽口模板旋转至另一个预定角度;v)当另一个最优槽口分配值小于该最优槽口分配值时,识别每一个新的角度;以及vi)以最后识别的新的角度定向槽口模板。
[0018] 在又一个实施例中,本发明包括一种用于定位垫板的计算机实现的方法,包括:i)基于垫板上槽口的预定数量和位置,计算垫板的槽口模板几何形状;ii)基于槽口模板几何形状,计算分配给各自的槽口的每一个规划的微移参数;iii)基于每一个各自的规划的微移参数,调整每一个规划的微移;iv)如果从每一个微移至各自的槽口的一个方位角和从每一个微移至各自的目标的另一方位角之差不满足预定的允许值,那么朝目标方位角将每一个微移移动预定的角度;v)重复调整每一个规划的微移并移动每一个微移的步骤,直至每一个规划的位置满足在最终起斜深度的最小分离距离并且每一个各自的微移的一个方位角和另一个方位角的差满足预定的允许值;以及vi)应用每一个各自的规划的微移。
[0019] 在另一个实施例中,本发明包括一种程序载体装置,其用于承载计算机可执行指令以定位垫板。指令是可执行的,以实现:i)基于垫板上槽口的预定数量和位置,计算垫板的槽口模板几何形状;ii)基于槽口模板几何形状,计算分配给各自的槽口的每一个规划的微移参数;iii)基于每一个各自的规划的微移参数,调整每一个规划的微移;iv)如果从每一个微移至各自的槽口的一个方位角和从每一个微移至各自的目标的另一方位角之差不满足预定的允许值,朝目标方位角将每一个微移移动预定的角度;v)重复调整每一个规划的微移并移动每一个微移的步骤,直至每一个规划的位置满足在最终起斜深度的最小分离距离并且每一个各自的微移的一个方位角和另一个方位角的差满足预定的允许值;以及vi)应用每一个各自的规划的微移。
[0020] 从下面的各种实施例和相关附图的描述,本发明的其它方面、优点和实施例对本领域的技术人员将会变得显而易见。

附图说明

[0021] 下面将参考附图描述本发明,其中,相同的部分使用相同的参考标号,其中:
[0022] 图1是例示出用于实现本发明的方法的一个实施例的流程图
[0023] 图2是例示出用于执行图1中的步骤116b的算法的一个实施例的流程图。
[0024] 图3是例示出用于执行图1中的步骤118b的算法的一个实施例的流程图。
[0025] 图4是例示出用于图3中的步骤302和308的算法的一个实施例的流程图。
[0026] 图5是例示出用于图4中的步骤422的算法的一个实施例的流程图。
[0027] 图6A是例示出用于图4中的步骤404的算法的一个实施例的流程图。
[0028] 图6B是图6A例示出的流程图的继续。
[0029] 图7是例示出用于图4中的步骤414和428的算法的一个实施例的流程图。
[0030] 图8是例示出用于图4中的步骤416和图7中的步骤702,710的算法的一个实施例的流程图。
[0031] 图9A是例示出用于执行图1中的步骤122的算法的一个实施例的流程图。
[0032] 图9B是图9A例示出的流程图的继续。
[0033] 图10是例示出用于图9A中的步骤920b的算法的一个实施例的流程图。
[0034] 图11是例示出用于图10中的步骤1056的算法的一个实施例的流程图。
[0035] 图12是例示出用于图9A中的步骤916的算法的一个实施例的流程图。
[0036] 图13是例示出用于图9A中的步骤918b的算法的一个实施例的流程图。
[0037] 图14是例示出用于图9A中的步骤920b的算法的一个实施例的流程图。
[0038] 图15是例示出用于图9A中的步骤922b的算法的一个实施例的流程图。
[0039] 图16是例示出用于图15中的步骤1504的算法的一个实施例的流程图。
[0040] 图17是例示出用于图15中的步骤1056的算法的一个实施例的流程图。
[0041] 图18是例示出用于图9B中的步骤924的算法的一个实施例的流程图。
[0042] 图19是例示出用于图18中的步骤1804的算法的一个实施例的流程图。
[0043] 图20是例示出用于图18中的步骤1806的算法的一个实施例的流程图。
[0044] 图21是例示出用于图18中的步骤1808的算法的一个实施例的流程图。
[0045] 图22是例示出用于图18中的步骤1810的算法的一个实施例的流程图。
[0046] 图23是例示出用于图19中的步骤1902、1914、1926,图20中的步骤2002、2014、2026,图21中的步骤2102、2114、2126和图22中的步骤2202、2214、2226的算法的一个实施例的流程图。
[0047] 图24是例示出用于图9B中的步骤926的算法的一个实施例的流程图。
[0048] 图25A是例示出用于图9B中的步骤936的算法的一个实施例的流程图。
[0049] 图25B是图25A例示出的流程图的继续。
[0050] 图26是例示出用于图25B中的步骤2578的算法的一个实施例的流程图。
[0051] 图27是例示出用于图10中的步骤1002,图14中的步骤1402,图15中的步骤1502和图25A中的步骤2502的算法的一个实施例的流程图。
[0052] 图28是四个油井路径规划和四槽口垫板的平面图。
[0053] 图29是图28的四个油井路径规划和四个槽口的特写(close up)。
[0054] 图30是在将微移用于所有的规划之后,图28的四个油井路径规划的平面图,具有90度最大方位角变化。
[0055] 图31是在将微移用于所有的规划之后,图28的四个油井路径规划的平面图,具有20度最大方位角变化。
[0056] 图32是图31的四个油井路径规划和四个槽口的特写。
[0057] 图33是例示出用于实现本发明的计算机系统的一个实施例的方框图

具体实施方式

[0058] 具体地描述了优选实施例的主题,但其不用于限制本发明的范围。因而,结合其它现有或未来的技术,该主题也可以以其它方式实施,以包括不同的步骤或类似于在此描述的步骤的结合。虽然在此可以使用术语“步骤”以描述采用的方法的不同组成部分,但不应该将术语解释为暗示在此公开的各种步骤之间的任何特定的顺序,除非通过特定顺序的描述明确限制。
[0059] 工作流程描述
[0060] 现在参考图1,例示出了实现本发明的方法的一个实施例的流程图。方法100总体例示了用于最优化垫板设置和槽口配置的工作流程,其可以用于将规划时间从8-9个月减少到仅仅几天。虽然下面的实施例描述参考了石油和天然气操作的陆上垫板,本发明的某些方面也可以应用于石油和天然气操作的海上垫板和其它行业使用的其它垫板。
[0061] 在步骤102中,加载表面标高模型和子表面数据,其可以用于构成3D浏览器。最重要的是子表面目标将规定表面垫板定位以及油井路径轨迹设计。目标可以从ASCII定界的文本文件输入,或根据转让给兰德马克图形公司并以引入的方式并入于此的美国专利第7,096,172号自动产生。
[0062] 在步骤104中,限定垫板参数,诸如槽口的数量和油井的数量。
[0063] 在步骤106中,顺着其优先次序限定要使用的油井路径类型(也就是,S形的、倾斜的、平的、等等)。对于每一个所选的油井路径类型也限定轨迹约束,其具体明确了每一个轨迹是否将穿入单一目标、多个目标或二者的结合。在该步骤也应该限定每个垫板的槽口(油井)的数量。
[0064] 在步骤108中,方法100确定表面标高模型是否为了用于垫板定位。如果表面标高模型是为了用于垫板定位,则转到步骤108b。如果表面标高模型不是为了用于垫板定位,那么转到步骤110。
[0065] 在步骤108b中,以几种方式基于表面标高模型定位垫板(预先存在或新的)。表面标高模型可以用于垫板的原始定位和最终设置的垫板的定向。对标高和斜率(或梯度)的限制可以影响是否可以或不可以使用特定位置。作为举例,因为收集站低于该标高(即,出于液体处理的考虑),使用者可以将垫板定位限制在斜率小于15度或标高大于7000英尺的位置。通过在定位垫板时抽取标高,并将它们分配给每一个各自的垫板(加上使用者指定的空气间隙),使用者可以为建议的油井创立方钻杆补心(Rotary Kelly Bushing)标高,其通常用作油井路径的起始参考点。这是对于‘540专利中使用的算法的修改。还有更巧妙的方式,其中所抽取的标高能够影响垫板定位。当正在估算特定区块时,相对于正在考虑使用的目标的几何定位与施加于正在考虑的油井类型的工程约束作对比。所以,对于特殊目标,在一个标高的位置可以能够以在相同的侧距的另一个位置的特殊油井设计横向命中该目标,但在较低的标高不可以。还提供了标高的定向。使用该信息以定向轮廓走向上(也就是,平行于轮廓)的垫板。
[0066] 在步骤110中,定位垫板。现存的垫板适用于可提供的槽口。在这种情况下,使用者必须按现存的油井将槽口分配为“占用(taken)”并且从这些垫板设计的轨迹的数量将限于可提供的槽口的数量。如果需要任何附加的垫板以命中剩余的目标,其将根据‘540专利自动产生并定位。如果没有垫板存在,根据‘540专利将自动定位新的垫板,每一个垫板的规划数量随着每一个垫板的槽口数量由规划约束规定。一种情况可能存在,即,仅仅存在当前使用的垫板。在这种情况下,没有新的垫板产生并且产生的油井路径的数量将限制在一个最大量,为每一个垫板上可提供的槽口的数量。
[0067] 在步骤112中,自动产生每一个垫板的规划。一旦通过步骤108b或在替代步骤110中定位所有“新的”垫板,从表面标高网格抽取表面标高并且应用空气间隙(如果适用),以产生起始参考点标高-其应用于在步骤112自动产生的所有规划。对于“现存的”垫板,可以基于标高模型更新标高。
[0068] 在步骤114中,限定了每一个垫板的槽口模板几何形状。这包括行和列的数量、间隔和方向。
[0069] 在步骤116中,方法100确定是否使用标高模型以定向模板。如果模板几何形状延长并且地形相当地陡,使用者可能希望最优化模板的定向,以使得垫板尽可能地平-也就是沿着走向定向。当其发生时,标高模型将用于基于标高网格轮廓定向槽口模板。如果应该使用标高模型,那么方法100进行至步骤116b。如果不应该使用标高模型,那么方法100进行至步骤118。
[0070] 在步骤116b中,根据图2例示的方法200,基于标高网格轮廓定向槽口模板。
[0071] 在步骤118中,方法100确定是否自动定向每一个槽口模板。使用者可以优选定向槽口模板以使得相互相交或与其它槽口相互干扰的规划所产生的问题最少。在这种情况下,基于最小化规划之间的干扰来自动定向槽口模板。如果每一个槽口模板应该自动定向,那么方法100进行至步骤118b。如果每一个槽口模板不应该自动定向,那么方法100进行至步骤120。
[0072] 在步骤118b中,根据图3中例示的方法300,基于最小化规划之间的干扰来最优化每一个槽口模板的定向。
[0073] 在步骤120中,基于其轨迹,将规划自动分配给适合的槽口以最小化碰撞的危险。
[0074] 在步骤122中,估计关于槽口分配的垫板的当前状态,因为其属于防碰撞问题。如果所有规划的起斜都工作,那么不需要最优化或微移规划。如果规划不满足所需的分离标准(也就是,ft分离/1000英尺的测量深度),可能有必要最优化起斜以获得例如在图10中所例示的所需要的分离。如果通过最优化起斜不能获得最小的分离,那么可能需要如图9A和图9B所例示的微移。因此,基于例如图25A和图25B中所例示的使用者限定的标准/约束,通过交错起斜点,调整方位角和倾角或者二者的结合,可以将微移算法应用于改变单个油井路径。
[0075] 槽口模板定向和最优化
[0076] 现在参考图2-8,参考图1描述了用于最优化步骤116b和118b中的槽口模板的定向的算法的两个主要实施例。
[0077] 例如,在图2中,方法200总体例示了用于执行图1中的步骤116b的算法的一个实施例-也就是,用于基于标高网格轮廓最优化槽口模板的定向。如图2所例示的,可以使用表面或海底的地形的网格化模型。
[0078] 在步骤202中,找到了最东北的槽口(Slot1)。必须确定代表模板长轴的两端的两个槽口。确定最北的槽口和最东的槽口之间为最东北的槽口。
[0079] 在步骤204中,找到了从Slot1的位置的最常见的方位角(Azm)。随后,从该槽口建立了其它槽口的方位角的直方图。
[0080] 在步骤206中,找到了沿着Azm的距Slot1最远的槽口(Slot2)。
[0081] 在步骤208中,将最佳位移(Bestshift)设置为等于零。使用Bestshift以保持到达用于最优化槽口模板的最优角度所需的旋转量。
[0082] 在步骤210中,找到了Slot1和Slot2之间的标高中的距离(MinDiff)。
[0083] 在步骤212中,通过从0到359度以1度的增量围绕着Slot1将Slot2旋转1度,以改变Slot2的值。
[0084] 在步骤214中,使用本领域公知的技术计算Slot1和新的Slot2之间的差,并将结果(Diff)存储。由新的Slot2形成的每一个角度,通过测量步骤214中的两个槽口之间的标高差来检查网格。标高差的绝对值最小时的方位角是最佳角度。
[0085] 在步骤216中,对比Diff和Mindiff。如果在步骤216中Mindiff小于Diff,转到步骤222。如果Mindiff大于Diff,转到步骤218。
[0086] 在步骤218中,设置Mindiff等于Diff。
[0087] 在步骤220中,将Bestshift设置为等于i。
[0088] 在步骤222中,将变量i初始化为0。如果i小于360,则将i增加5并转到步骤212。如果i不小于360,那么转到步骤224。在该处理的过程中,Bestshift不断地更新,以找到旋转槽口模板所需的最佳角度。
[0089] 在步骤224中,将模板旋转至最佳角度Bestshift。然后方法200转到步骤120。
[0090] 在图3中,方法300总体例示出了用于执行图1中的步骤118b的算法的一个实施例-也就是,用于基于最小化规划(油井轨迹)之间的干扰最优化槽口模板的定向。将基于最小化与每一个可能的方位角相关的问题的定向考虑得更复杂,因为为了完成它,必须有最优的方式确定将哪个规划分配给什么槽口,这是因为特定方向的效能与在该方向上规划是如何分配地直接相关。所以如果该分配没有以最优的方式作出,那么确定为最佳的角度不可能确实是最优。槽口分配的第二个要求是,具有测量与特定方向和槽口分配结合相关的问题的数量和大小的手段。由于分配槽口的方法也依赖测量技术,槽口分配仅变为与槽口分配和同时解决二者相关的问题的定量。因此,找到最优角度的方法类似于图2所例示的基于网格的算法。然而,由于其需要在每一个测量点实际执行模板旋转和槽口分配,替代每度以每5度执行检查。
[0091] 在步骤302中,设置MinProblems等于“findOptimumSlotAssignment()”。算法“findOptimumSlotAssignment()”在图4中例示。
[0092] 在步骤304中,设置MinAngle等于0.0并且设置Angle等于0。
[0093] 在步骤306中,以5度的增量旋转模板。
[0094] 在步骤307中,设置Angle等于Angle加5度。
[0095] 在步骤308中,设置Problems等于“findOptimumSlotAssignment()”。
[0096] 在步骤310中,方法300确定Problems是否小于MinProblems。如果Problems小于MinProblems,那么转到步骤312。如果Problems不小于MinProblems,那么转到步骤316。
[0097] 在步骤312中,设置MinProblems等于Problems。
[0098] 在步骤314中,设置MinAngle等于Angle。
[0099] 在步骤316中,方法300确定Angle是否小于360度。如果Angle小于360度,那么转到步骤306。如果Angle大于或等于360度,那么转到步骤318。在该过程中,不断地更新MinAngle以找到旋转槽口模板所需的最优角度。
[0100] 在步骤318中,将模板旋转MinAngle角度。然后方法300回到步骤120。
[0101] 在图4 中,方 法400总体 例示 出 了用 于图3中 的 步骤302和308 的“FindOptimumSlotAssignment”算法的一个实施例。
[0102] 在步骤402中,方法400确定槽口的数量是否等于规划的数量,或所有起斜是否大约相等,或模板是否不是矩形。如果槽口的数量等于规划的数量,或如果所有起斜大约相等,或如果模板不是矩形,那么转到步骤404。如果槽口的数量不等于规划的数量,或如果所有起斜的数量不大约相等,或如果模板是矩形,那么转到步骤420。
[0103] 在步骤404中,执行“MakeInitialAssignmentOnMaximumBasis”算法。该算法旨在将每一个规划放入其规划的最佳可能槽口。为了完成它,遍历规划的列表,并且对于每一个,基于距该规划中的初始目标最近的和从垫板的中心到初始目标的方向最接近的,找到最佳槽口。参考图6A-6B进一步讨论了步骤404。
[0104] 在步骤406中,替代将规划直接分配给槽口,将规划加入对于该槽口的可能情况的列表。一旦其对于每一个规划已经完成,在其列表中发现具有最多规划的槽口。通过起斜深度将规划排序,然后从列表的底部(最深)向上试图找到为该规划工作的最佳可能空槽口(具有空列表的一个)。
[0105] 在步骤408中,将规划移动到在步骤406中找到的正确的槽口。
[0106] 在步骤410中,方法400确定是否有更多未分配的规划。如果有更多未分配的规划,那么方法400进行至步骤406和408,重复步骤406和408直至所有在其列表中具有规划的槽口都被解决。如果没有更多分配的规划,那么方法400进行至步骤412。
[0107] 在步骤412中,将任何前面分配的槽口增加至现存油井的列表。由于现存油井的存在意味着过于晚而不能重新定向模板,这在最优工作流程中是决不发生的情况,但当从现存的区块规划新的油井时其是有用的。
[0108] 在步骤414中,执行“FixAnyProblems”算法。该算法是一系列的重复尝试,以观察是否可以通过交换槽口分配消除问题。注意槽口的每一个结合,决定它们是否可以交换或不可以,那么如果它们可以,交换它们中的规划并估计结果。如果结果得到更少的问题,认为交换是成功的。否则,交换回规划。其继续10次重复或直至使得全部通过而没有成功的交换。两个槽口是否可以交换的标准是它们中的至少一个是否具有规划,都没有被定,都不具有现存的油井,并且每一个都是对于其它规划的合法的槽口类型(一些槽口为特定的油井类型而保留)。参考图7,进一步讨论步骤414。
[0109] 在步骤416中,执行“CountProblems”算法。参考图8讨论该算法。
[0110] 在步骤418中,方法400回到作为MinProblems的步骤302或作为Problems的步骤308。
[0111] 在步骤420中,算法以通过减少起斜深度来将规划分类为开始。该算法设计为将具有最深的起斜的规划放入模板的中心并将任何空的槽口留在外面。当内部和外部有足够的行和列(>2x2)并且起斜深度有一些变化并且有一些空槽口时,主要使用该算法。
[0112] 在步骤422中,通过将每一个规划分配至具有最低成本的槽口而进行初始分配。参考图5进一步讨论了步骤422。
[0113] 在步骤424中,将任何前面分配的槽口增加至现存油井的列表。由于现存油井的存在意味着过于晚而不能重新定向模板,这在最优工作流程中是决不发生的情况,但当从现存的区块规划新的油井时其是有用的。
[0114] 在步骤426中,锁定未使用的槽口,使得它们不具有在步骤428中分配至其的规划。
[0115] 在步骤428中,执行“FixAnyProblems”算法。该算法是一系列的重复尝试,以观察是否可以通过交换槽口分配消除问题。注意槽口的每一个结合,决定它们是否可以交换或不可以,那么如果它们可以,交换它们中的规划并估计结果。如果结果得到更少的问题,认为交换是成功的。否则,交换回规划。其继续10次重复或直至使得全部通过而没有成功的交换。两个槽口是否可以交换的标准是它们中的至少一个是否具有规划,都没有被锁定,都不具有现存的油井,并且每一个都是对于其它规划的合法的槽口类型(一些槽口为特定的油井类型而保留)。参考图7,进一步讨论步骤428。在图5-8中,流程图例示出了用于图4中的步骤404、414、416、422、428和图7中的步骤702、710的算法的各种实施例。
[0116] 在图5中,方法500总体例示出了用于图4的步骤422的“MakeInitialAssignmentOnMinimumBasis”算法的一个实施例。
[0117] 在步骤502中,设置MinCost等于10000000。
[0118] 在步骤504中,方法500确定是否没有使用槽口以及槽口类型是否与规划类型兼容。如果没有使用槽口并且槽口与规划类型兼容,那么方法500继续至步骤506。如果使用槽口并且槽口与规划类型不兼容,那么方法500进行至步骤520。
[0119] 在步骤506中,Cost限定为从槽口到目标的距离乘以从模板中心到槽口的距离。Cost乘以最小的5度或从中心到槽口的角度和中心到第一目标的角度的差。
[0120] 在步骤508中,Angle限定为方位角中心到槽口和中心到第一目标之间的差。
[0121] 在步骤510中,方法500确定Angle是否小于5。如果Angle小于5,那么方法500继续至步骤510b。如果Angle不小于5,那么方法500继续至步骤512。当作为除数时,使用最小的5度以避免零除问题并且避免使小于5度的差具有不适当的过大重要性。这应该将最深的起斜规划放得距中心最近,并且空的槽口距中心最远。
[0122] 在步骤510b中,设置Angle等于5。
[0123] 在步骤512中,设置Cost等于Cost乘以Angle。
[0124] 在步骤514中,方法500确定Cost是否小于MinCost。如果Cost小于MinCost,那么方法500继续至步骤516。如果Cost不小于MinCost,那么方法500继续至步骤504。
[0125] 在步骤516中,设置MinCost等于Cost。
[0126] 在步骤518中,设置MinSlot等于Slot。
[0127] 在步骤520中,方法500确定是否有更多的槽口。如果有更多的槽口,则方法500继续至步骤504。如果没有更多的槽口,则方法500继续至步骤522。
[0128] 在步骤522中,方法500确定MinSlot是否等于Null。如果MinSlot不等于Null,则方法500继续至步骤522b。如果MinSlot等于Null,则方法500继续至步骤524。
[0129] 在步骤522b中,规划分配给MinSlot。
[0130] 在步骤524中,方法500确定是否有更多待分配的规划。如果有更多待分配的规划,则方法500继续至步骤502。如果没有更多待分配的规划,则方法500回到步骤424。
[0131] 在图6A中,方法600总体例示出了图4中的步骤404的“MakeInitialAssignmentsOnMaximumBasis”算法的一个实施例。
[0132] 在步骤602中,设置MaxVal等于-10000000。
[0133] 在步骤604中,方法600确定是否没有使用槽口,以及槽口类型是否与规划类型兼容。如果没有使用槽口并且槽口与规划类型兼容,则方法600继续至步骤606。如果没有使用槽口并且槽口与规划类型不兼容,则方法600继续至步骤620。
[0134] 在步骤606中,找到了从中心到第一目标的距离和从目标到槽口的距离之间的差。
[0135] 在步骤608中,找到了方位角中心到槽口和中心到第一目标之间的差(Angle)。
[0136] 在步骤610中,方法600确定Angle是否小于0.01。如果Angle小于0.01,则方法600继续至步骤610b。如果Angle不小于0.01,则方法600继续至步骤612。
[0137] 在步骤610b中,设置Angle等于5。
[0138] 在步骤612中,设置Val等于Val除以Angle。
[0139] 在步骤614中,方法600确定Val是否大于MaxVal。如果Val大于MaxVal,则方法600继续至616。如果Val不大于MaxVal,则方法600继续至步骤620。
[0140] 在步骤616中,设置MaxVal等于Val。
[0141] 在步骤618中,设置MaxSlot等于Slot。
[0142] 在步骤620中,方法600确定是否有更多的槽口。如果有更多的槽口,则方法600继续至步骤604。如果没有更多的槽口,则方法600继续至步骤622。
[0143] 在步骤622中,方法600确定MaxSlot是否不等于Null。如果MaxSlot不等于Null,则方法600继续至步骤622b。如果MaxSlot等于Null,则方法600继续至步骤624。
[0144] 在步骤622b中,将规划分配给槽口的列表。
[0145] 在步骤624中,方法600确定是否有更多的规划待分配。如果有更多的规划待分配,则方法600继续至步骤602。如果没有更多的规划,则方法600继续至图6B。
[0146] 图6B继续方法600,其总体例示出了用于图4中的步骤404的“MakeInitialAssignmentsOnMaximumBasis”算法的一个实施例。
[0147] 在步骤626中,设置Slot等于在其列表中具有最多规划的槽口。
[0148] 在步骤628中,在Slot的列表中的规划通过起斜深度划分。
[0149] 在步骤630中,通过以最深规划起始并遍历每一个规划,找到了规划的最佳替代空槽口。
[0150] 在步骤632中,方法600确定是否找到了替代槽口。如果找到了替代槽口,那么方法600继续至步骤634。如果没有找到替代槽口,方法600继续至步骤638。
[0151] 在步骤634中,将规划分配给替代槽口。
[0152] 在步骤636中,从所选的槽口列表中移除规划。
[0153] 在步骤638中,方法600确定Length是否等于1。Length是Slot的列表中的规划的数量。如果Length等于1,则方法600继续至步骤406。如果Length不等于1,则方法600继续至步骤640。
[0154] 在步骤640中,从规划的列表中移除元素1。
[0155] 在步骤642中,方法600确定Length是否大于1。如果length大于1,则方法600继续至步骤640。如果Length不大于1,则方法600继续至步骤644。
[0156] 在步骤644中,方法600确定是否有更多的规划。如果有更多的规划,则方法600继续至步骤630。如果没有更多的规划,则方法600继续至步骤646。
[0157] 在步骤646中,将剩余的槽口分配给规划。
[0158] 在步骤648中,将变量k初始化为0。如果k小于槽口的数量,将k增加1并回到步骤626。如果k大于槽口的数量,方法600回到步骤406。
[0159] 在图7中,方法700总体例示了用于图4中的步骤414和418的“FixAnyProblems”算法的一个实施例。“FixAnyProblems”是一系列的重复尝试,以观察是否可以通过交换槽口分配消除问题。注意槽口的每一个结合,决定它们是否可以交换,那么如果它们可以,交换它们中的规划并估计结果。如果结果得到更少的问题,认为交换是成功的。否则,交换回规划。其继续10次重复或直至使得全部通过而没有成功的交换。两个槽口是否可以交换的标准是它们中的至少一个是否具有规划,都没有被锁定,都不具有现存的油井,并且每一个都是对于其它规划的合法的槽口类型(一些槽口为特定的油井类型而保留)。用于确定方法700是否有帮助或者特定方位角是否优于另一方位角的估计函数检查每一对槽口,并确定彼此是否相互相交。如果它们确实是那样,并且使用者正在规划以最优化起斜,那么由于这大概会被确定,因此仅分配1的惩罚。如果使用者没有在规划以最优化起斜,那么分配3的惩罚。同样,如果两个规划都不干扰彼此的槽口,那么分配5或3的惩罚,这依赖于是否有规划分配给另一方的槽口。也分配给穿过模板的对角线的任何规划2的惩罚或者如果有空槽口保留给特定的类型那么分配10的惩罚。
[0160] 在步骤702中,如参考图8所讨论的,将通过“CountProblems”算法确定的值分配给MinProblems。
[0161] 在步骤704中,设置Changed等于false。
[0162] 在步骤706中,方法700确定是否可能交换槽口中的规划。如果不可能交换槽口中的规划,则方法700继续至步骤720。如果可能交换槽口中的规划,则方法700继续至步骤708。
[0163] 在步骤708中,交换槽口中的规划I和J。
[0164] 在步骤710中,如参考图8所讨论的,将“CountProblems”算法确定的值分配给Problems。
[0165] 在步骤712中,方法700确定Problems是否小于MinProblems。如果problems小于MinProblems,则方法700继续至步骤714。如果Problems不小于MinProblems,则方法700继续至步骤718。
[0166] 在步骤714中,设置MinProblems等于Problems。
[0167] 在步骤716中,设置Changed等于True。
[0168] 在步骤718中,将规划I和J交换回其最初的位置。
[0169] 在步骤720中,将变量j初始化等于i+1。如果j小于槽口的数量,将j增加1并转向步骤706。如果j大于槽口的数量,则转向步骤722。
[0170] 在步骤722中,将变量i初始化等于0。如果i小于槽口的数量减去1,则将i增加1并转向步骤706。如果i大于槽口的数量减去1,则转向步骤724。
[0171] 在步骤724中,设置Changed等于false。
[0172] 在步骤726中,方法700确定方法700是否完成10次重复。如果没有方法700的10次重复,则方法700回到步骤704。如果已完成方法700的10次重复,则方法700回到步骤416。
[0173] 在图8中,方法800总体例示出了图4和7中的步骤416、702和710的“CountProblems”算法的一个实施例。该算法计算在规划分配中遇到的各种问题的数字值。
[0174] 在步骤802中,设置Problems等于0.0。
[0175] 在步骤804中,方法800确定规划I和J是否相交。如果规划I和J确实相交,则方法800继续至步骤806。如果规划I和J不相交,则方法800继续至步骤810。
[0176] 在步骤806中,方法800确定是否有任何起斜最优化。如果有起斜最优化,则方法800继续至步骤808。如果没有起斜最优化,则方法800继续至步骤806b。
[0177] 在步骤806b中,设置Problems等于Problems加3。
[0178] 在步骤808中,设置Problems等于Problems加1。
[0179] 在步骤810中,方法800确定规划I是否干扰槽口J。如果规划I干扰槽口J,则方法800继续至步骤812。如果规划I不干扰槽口J,则方法800继续至步骤818。
[0180] 在步骤812中,设置Problems等于Problems加3。
[0181] 在步骤814中,方法800确定槽口J是否为空。如果槽口J不为空,则方法800继续至步骤816。如果槽口J为空,则方法800继续至步骤818。
[0182] 在步骤816中,设置Problems等于Problems加2。
[0183] 在步骤818中,方法800确定规划J是否干扰槽口I。如果规划J干扰槽口I,则方法800继续至步骤820。如果规划J不干扰槽口I,则方法800继续至步骤826。
[0184] 在步骤820中,设置Problems等于Problems加3。
[0185] 在步骤822中,方法800确定槽口I是否不为空。如果槽口I为空,则方法800继续至步骤826。如果槽口I不为空,则方法800继续至步骤824。
[0186] 在步骤824中,设置Problems等于Problems加2。
[0187] 在步骤826中,将变量j初始化等于i+1。如果j小于槽口的数量,则将j增加1并回到步骤804。如果j大于槽口的数量,则转至步骤828。
[0188] 在步骤828中,将变量i初始化等于0。如果i小于槽口的数量减去1,则将i增加1并回至步骤804。如果i大于槽口的数量减去1,则转向步骤830。
[0189] 在步骤830中,方法800确定槽口是否具有规划。如果槽口不具有规划,则方法800继续至步骤828。如果槽口具有规划,则方法800继续至步骤832。
[0190] 在步骤832中,设置Problems等于Problems加从槽口到第一目标的距离除以100。
[0191] 在步骤834中,方法800确定规划是否穿过模板的对角线。如果规划穿过模板的对角线,则方法800继续至步骤834b。如果规划没有穿过模板的对角线,则方法800继续至步骤836。
[0192] 在步骤834b中,设置Problems等于Problems加2。
[0193] 在步骤836中,方法800确定槽口是否为特定的类型保留。如果槽口已经为特定的类型保留,则方法800继续至步骤836b。如果槽口没有为特定的类型保留,则方法800继续至步骤838。
[0194] 在步骤836b中,设置Problems等于Problems加10。
[0195] 在步骤838中,将变量j初始化等于0。如果j小于槽口的数量减去1,则将j增加1并回到步骤830。如果j大于槽口的数量减去1,则转至步骤840。
[0196] 在步骤840中,Problems回到步骤416、702,或710。
[0197] 微移和起斜最优化
[0198] 现在参考图9-27,参考图1描述了算法的两个主要实施例,用于最优化规划以在步骤122中最小化碰撞的危险。
[0199] 在图9A中,方法900总体例示出了最优化规划的一个实施例,从而如图1的步骤122所需的通过自动微移最小化防碰撞。如果已经选择微移,则使用一个算法(步骤936)并且当不选择微移时使用另一个算法(步骤902b)。
[0200] 在步骤902中,方法900确定是否使用微移进行最优化。如果不选择微移进行最优化,则转至步骤902b。如果选择微移进行最优化,则转至步骤904。为了设计微移图案,有4个重要的几何形状:单线、二重线、圆形和包含3行或更多行和3列或更多列的矩形图案。为了该算法,二重线和圆形被认为是相同的几何形状,因为其被相同地处理。一旦已经建立了几何形状,将执行用于确定初始倾角和方位角的适合的算法。那么将解决关于重叠的微移位置或规划已被微移距其期望的方位角太远的任何问题。一旦明白了这些,就将微移应用于规划,那么将这组微移最优化。
[0201] 在步骤902b中,执行“OptimizeWithoutNudges”算法。参考图10进一步讨论了步骤902。
[0202] 在步骤904中,方法900确定规划是否事先被微移。如果规划事先被微移,则方法900结束。如果规划事先没有被微移,则转至步骤906。
[0203] 在步骤906中,方法900确定是否将规划分配给槽口。如果规划已经被分配给槽口,则转至步骤908。如果规划没有被分配给槽口,则方法900结束。
[0204] 在步骤908中,方法900确定最小的起斜是否小于水深度。如果最小的起斜小于水深度,则方法900结束。如果最小的起斜不小于水深度,则转至步骤910。
[0205] 在步骤910中,方法900确定最大的初始起斜是否小于最小的初始起斜。如果最大的初始起斜小于最小的初始起斜,则方法900结束。如果最大的初始起斜不小于最小的初始起斜,则转至步骤912。
[0206] 在步骤912中,方法900确定最大的最终起斜是否小于最小的最终起斜。如果最大的最终起斜小于最小的最终起斜,则方法900结束。如果最大的最终起斜不小于最小的最终起斜,则转至步骤914。
[0207] 在步骤914中,方法900确定微移的初始和最终起斜之间是否有足够的差。如果微移的初始和最终起斜之间有足够的差,则方法900结束。如果微移的初始和最终起斜之间没有足够的差,则转至步骤916。
[0208] 在步骤916中,执行“ComputeGeometry”算法。参考图12进一步讨论了该算法。
[0209] 在步骤918中,方法900确定是否已将Geometry设置等于1。如果Geometry等于1,则转至步骤918b。如果Geometry不等于1,则转至步骤920。
[0210] 在步骤918b中,执行“computeNudgeParametersForEachPlanUsingSingleLineAlgorithm”算法。参考图13进一步讨论了该算法。方法900继续至图9B。
[0211] 在步骤920中,方法900确定Geometry是否已经被设置等于2。如果Geometry等于2,则转至步骤920b。如果Geometry不等于2,则转至步骤922。
[0212] 在步骤920b中,执行“computeNudgeParametersForEachPlanUsingDoubleLineOrCircleAlgorithm”算法。参考图14进一步讨论了该算法。方法900继续至图9B。
[0213] 在步骤922中,设置Geometry等于3。
[0214] 在步骤922b中,执行“computeNudgeParametersForEachPlanUsingRectangularAlgorithm”算法。参考图15进一步讨论了该算法。方法900继续至图9B。
[0215] 在图9B中,方法900继续总体例示出了最优化规划的一个实施例,从而如图1的步骤122所需的通过自动微移最小化防碰撞。
[0216] 在步骤924中,执行“GetPointsClear”算法。参考图18进一步讨论了该算法。
[0217] 在步骤926中,将Done设置等于“FixAzimuths”算法返回的值。该算法相当简单。对于每个规划,检查槽口到微移方位角和微移到目标方位角之间的差,且如果绝对值超过允许值,使微移一次向目标方位角走1度,直至其在允许值之内。由于微移方位角是基于保持分离而选择的并且该算法牺牲了使方位角在使用者限定的界限内的分离,将这两个算法被结合因而-执行“GetPointsClear”(步骤924),和随后的“FixAzimuths”(步骤926),直至两个算法被固定并且获得适合的分离量。参考图24进一步讨论了“FixAzimuths”算法。
[0218] 在步骤928中,方法900确定Done是否等于True。如果Done等于True,则转向步骤932。如果Done不等于True,则转向步骤930。
[0219] 在步骤930中,方法900返回步骤924,为了最大的5次重复,重复该循环。将5次重复的限制置于该过程,从而在不满足步骤924-26的目的的情况下,防止其无限运行。
[0220] 在步骤932中,将初始微移应用于其各自的规划。
[0221] 在步骤934中,方法900确定是否有更多的规划。如果有更多的规划,则转至步骤932。如果没有更多的规划,则转至步骤936。
[0222] 在步骤936中,执行“OptimizeNudges”算法。最优化应用于步骤932的微移以减去小碰撞的危险。在执行“OptimizeNudges”的过程中,有多种可以估计规划的方式,从而确保其与另一个不靠的太近并保持在工程约束范围内。几乎不可能同时达到这两个目的,所以通常首先解决分离问题,并随后解决其它目的而不引入分离问题。有三种类型的分离问题。首先是规划在哪里主动进一步接近另一个规划并进入最小分离距离内。第二个是在其已从原始的垂直轨迹规划偏离之前,规划在哪里已经与另一个靠得太近。第二种类型的例子是,两个油井在哪里被从间隔5英尺的槽口规划,并且使用者已经特定化了每1000英尺6英尺的最小分离和500英尺的最小微移深度。一旦两个规划都在500英尺,就已经有总共1000英尺被钻孔。所以规划需要至少6英尺间隔,但槽口只是5英尺间隔。因为“OptimizeNudges”算法不解决这个,其仅是确认这个而并不使最优化变得被其负面影响。分离问题的第三种类型是规划在哪里和彼此移开,但以低于期望的分离的增长的速率移开。如果使用者已经将最小微移深度设置为400英尺,这可能会发生在上述举例中。在400英尺,规划需要间隔4.8英尺,因为槽口间隔5英尺。除非其以大于每100英尺1度或大于间隔90度的方位角建立,到它们位于沿着油井孔500英尺测量深度(md)处的时间可能不会有大于6英尺的间隔。“OptimizeNudges”算法对该类型的分离的控制大于其对第二种类型的分离的控制,但小于其对第一种类型的分离的控制。由于该原因,算法在不同的时间测量这些类型的分离问题,首先集中在使规划不主动移向另一个,随后确保它们偏离得足够快。同样,该算法检查在算法的不同步骤规划的不同长度。通过其使用微移和改变起斜,该算法不可能消除或减少发生在第一目标之外的油井规划之间的分离问题,所以其不试图测量或考虑它们。同样,在微移被最优化的点,其不测量或考虑发生在最终的起斜之外的任何分离问题,因为改变微移将对它们没有影响。参考图25A和25B进一步讨论了该算法。
[0223] 在图10中,方法1000总体例示出了图9A的步骤902b所需的没有微移情况下最优化规划的一个实施例。方法1000工作与图25A和25B所例示的“OptimizeNudges”算法的一些部分几乎相同。然而,它要简单的多,因为除了不必须找到微移到哪里,只有一个深度需要调整-起斜深度。使用相同的总逻辑:以从中心的减少槽口距离来将规划分类并且以前面规划的初始空组工作。对于每个规划,努力尝试找到没有消耗(分离或工程)的点,那么如果尝试没有找到最小然而消耗仍减少。使用这些计算的md的作为起始点,在每一个规划运行步骤1056中的“OptimizeKickoff”算法,通过全部启动达10次,直至其具有未修正起斜的通路。
[0224] 在步骤1002中,执行“FindCenter”算法。参考图27进一步讨论了该算法。
[0225] 在步骤1004中,通过减少从Center测量的槽口距离,将规划分类。
[0226] 在步骤1006中,通过创建空设置,将前面规划的列表清除。
[0227] 在步骤1008中,设置Incr等于最大的起斜减去最小的起斜,再除以规划的数量减1。
[0228] 在步骤1010中,设置md等于最小的起斜深度。
[0229] 在步骤1012中,设置分配给起斜的规划的量等于md。
[0230] 在步骤1014中,设置Cost等于参考图11中的步骤1102更加全面地描述的“calculateOptimizationValue”。
[0231] 在步骤1016中,设置md等于md加Incr。
[0232] 在步骤1018中,设置规划起斜的量等于md。
[0233] 在步骤1020中,设置Cost等于参考图11中的步骤1102更加全面描述的“calculateOptimizationValue”。
[0234] 在步骤1022中,方法1000确定cost是否大于0并且md是否小于最大的起斜减去Incr。如果cost大于0并且md小于最大的起斜减去Incr,则回到步骤1016。如果cost不大于0并且md不小于最大的起斜减去Incr,则转至步骤1024。
[0235] 在步骤1024中,方法1000确定Cost是否大于0。如果Cost大于0,则转至步骤1026。如果Cost不大于0,则转至步骤1046。
[0236] 在步骤1026中,设置md等于最小的起斜。
[0237] 在步骤1030中,设置PreviousCost等于cost。
[0238] 在步骤1032中,设置md等于md加Incr。
[0239] 在步骤1034中,设置规划起斜的量等于md。
[0240] 在步骤1036中,设置Cost is set等于参考图11中的步骤1102更加全面描述的“calculateOptimizationValue”。
[0241] 在步骤1038中,方法1000确定Cost是否小于或等于PreviousCost并且Cost是否大于0。如果Cost小于或等于PreviousCost并且Cost大于0,则回到步骤1030。如果Cost不小于或等于PreviousCost并且Cost大于0,则转至步骤1040。
[0242] 在步骤1040中,方法1000确定Cost是否大于PreviousCost。如果Cost大于PreviousCostIf,则转至步骤1042。如果Cost小于PreviousCostIf,则转至步骤1046。
[0243] 在步骤1042中,设置md等于md减去Incr。
[0244] 在步骤1044中,设置规划起斜的量等于md。
[0245] 在步骤1046中,将当前规划增加至先前的规划。
[0246] 在步骤1048中,方法1000确定是否有更多的规划。如果有更多的规划,则转向步骤1010。如果没有更多的规划,则转向步骤1050。
[0247] 在步骤1050中,设置Changed等于False。
[0248] 在步骤1052中,设置Value等于0。
[0249] 在步骤1054中,方法1000确定是否有更多的规划。如果有更多的规划,则转向步骤1056。如果没有更多的规划,则转向步骤1064。
[0250] 在步骤1056中,设置Result等于从算法“OptimizeKickoff”返回的布尔值。参考图11进一步讨论了该算法。
[0251] 在步骤1058中,方法1000确定Result是否等于True。如果Result等于True,则转向步骤1060。如果Result不等于True,则转到步骤1062。
[0252] 在步骤1060中,设置Change等于True。
[0253] 在步骤1062中,设置Value等于Value加calculateOptimizationValue。
[0254] 在步骤1064中,方法1000确定Changed是否等于false。如果Changed等于false,则方法1000结束。如果Changed不等于false,则转向步骤1066。
[0255] 在步骤1066中,将变量i初始化等于0。如果i小于10,那么将i增加1并返回步骤1050。如果i大于10,则方法1000结束。
[0256] 在图11中,方法1100总体例示出了图10的步骤1056所需的最优化起斜的一个实施例。
[0257] 在步骤1102中,通过下面代表初始值的消耗,计算最优值(或由于可能的情况是消耗):
[0258] 1)从分界线算md;
[0259] 2)不开始执行任何分离检查,直至最小的起斜(如果使用它们情况下的最小微移),因为控制不能在其上保持;
[0260] 3)因为涉及两个规划,所以使用通常的Minimum AllowableSeparation=Y*MD(实际上是Y*(MD1+MD2));
[0261] 4)如果距离不减少,则不将其作为问题计入;
[0262] 5)如果计算数字值,在有分离问题的每一个点将消耗计为10000*((minseparation(最小分离)-separation(分离))/minseparation),这反映了大小和持续时间;
[0263] 6)每5英尺或2米做一次分离检查;
[0264] 7)超过最大保持角度=200*最大保持角度大于大于最大值的量;
[0265] 8)未获得的最小保持角度=150*不足;
[0266] 9)有害问题=2500*有害穿入的数量;以及
[0267] 10)其它工程约束违反=违反部分加根据违反的大小和违反的类型的成比例的惩罚。
[0268] 在步骤1104中,方法1100确定InitialValue是否小于0.1。如果InitialValue小于0.1,则转到步骤1106。如果InitialValue大于0.1,则转到步骤1108。
[0269] 在步骤1106中,将False值返回步骤1056。
[0270] 在步骤1108中,设置起始深度等于起斜深度。
[0271] 在步骤1110中,设置md等于起始深度。
[0272] 在步骤1112中,以在md之上1的增量和在md下1的增量,使用本领域的公知技术计算最优值。
[0273] 在步骤1114中,设置md等于在步骤1112中最小的最优值。
[0274] 在步骤1116中,方法1100确定最优md是否等于当前md。如果最优md等于当前md,则转到步骤1112。如果最优md不等于当前md,则转到步骤1118。
[0275] 在步骤1118中,将Incr分成两半。
[0276] 在步骤1120中,方法1100确定Incr是否大于1.0。如果Incr大于1.0,则转到步骤1112。如果Incr小于1.0,则转到步骤1122。
[0277] 在步骤1122中,方法1100确定md是否等于原始的、起始的起斜深度。除非给定通路,达到5个通路经设计处理,没有起斜深度被移动。如果md等于起始深度,则转到步骤1126。如果md不等于起始深度,则转到步骤1124。
[0278] 在步骤1124中,将True值返回步骤1056。
[0279] 在步骤1126中,将False值返回步骤1056。
[0280] 在图12中,方法1200总体例示出了图9A的步骤916所需的“ComputeGeometry”算法的一个实施例。通过找到最东北(最大y中的最大x)的槽口并从该槽口测量相互槽口的方位角,来执行“ComputeGeometry”算法。这些方位角四舍五入为整数(0-360),然后用作360数组的指数以建立方位角的直方图。如果从所选的槽口所有的槽口在相同的方位角,则有直线几何形状。如果它们在不同的方位角,那么有可能是圆形几何形状。如果最大计数大于超过3的槽口数量(即,一半左右)则可能是二重线几何形状。否则,应认为是矩形几何形状(大于2行和2列)。
[0281] 在步骤1202中,设置N等于槽口的数量。
[0282] 在步骤1204中,找到了具有最大Y值的槽口,与最大X一起解决,有效地找到最东北的槽口。
[0283] 在步骤1206中,计数从该槽口在每一个方向的槽口的数量。
[0284] 在步骤1208中,找到了具有最大槽口数量的定向。
[0285] 在步骤1210中,方法1200确定maxCount是否大于N减去2,此处maxCount是在步骤1208中找到的具有最大槽口数量的方向的槽口的数量。如果maxCount大于N减去2,则转到步骤1210b。如果maxCount小于N减去2,则转到步骤1212。
[0286] 在步骤1210b中,将1返回到步骤916,代表单线几何形状。
[0287] 在步骤1212中,方法1200确定maxCount是否等于1。如果maxCount等于1,则转向步骤1212b。如果maxCount不等于1,则转向步骤1214。
[0288] 在步骤1212b中,将2返回步骤916,这代表圆形几何形状。
[0289] 在步骤1214中,将3返回步骤916,这代表具有大于3行和3列的矩形。
[0290] 为了理解微移的初始定位,需要考虑垫板具有两个模板。一个在表面,包含规划的原始表面位置,一个在(期望的)最终起斜深度,其包含规划被微移后的位置。在此的目的是使每一个规划在该深度距任何其它规划大于最小分离的位置,方位角与规划的期望轨迹相兼容并且不与到达那里的另一个规划相交。遗憾的是,没有一种尺寸适合所有的(one-size-fits-all)算法,其为每一个可能的几何形状完成该目的并且同时将槽口分配应用到规划。需要确定哪个算法工作得最好,执行该算法并随后固定任何分离或方位角问题。
[0291] 在图13中,方法1300总体例示出了图9A的步骤918b所需的单线计算算法的一个实施例。
[0292] 在步骤1302中,使用本领域公知的技术计算原始规划的方位角并存储为微移方位角。该步骤确定对于每一个规划的原始规划轨迹。
[0293] 在步骤1304中,方法1300确定当前槽口y是否是最大的y。如果当前槽口y是最大的y,则转到步骤1304b。如果当前槽口y不是最大的y,则转到步骤1306。
[0294] 在步骤1304b中,将规划的方位角存储作为最大的y方位角。该步骤完成找到哪个规划的槽口具有最大的y值(最北)的过程。
[0295] 在步骤1306中,方法1300确定是否有更多的规划。如果有更多的规划,则返回步骤1302。如果没有更多的规划,则转到步骤1308。
[0296] 在步骤1308中,方法1300确定微移方位角是否小于最大的y方位角。如果微移方位角小于最大的y方位角,则转到步骤1308b。如果微移方位角不小于最大的y方位角,则转到步骤1310。
[0297] 在步骤1308b中,设置Azimuth等于azimuth加360。这造成所有较小的槽口增加了360。
[0298] 在步骤1310中,方法1300确定是否有更多的规划。如果有更多的规划,则返回步骤1308。如果没有更多的规划,则转到步骤1312。当执行该步骤时,最北的槽口将具有最小的方位角。
[0299] 在步骤1312中,通过增长方位角将规划分类。
[0300] 在步骤1314中,将n个规划的360的方位角分配给每一个规划。
[0301] 在步骤1316中,将0.0的微移方位角(正北)分配给具有最北的槽口的规划。
[0302] 在步骤1318中,设置微移方位角等于Azm。
[0303] 在步骤1320中,设置Azm等于Azm加AzmIncr。以这种方式,将产生有一些圆形的方位角位置的图案,尽管被原始模板的长度拉伸。例如,假设直线上有一系列8个槽口,其规划具有轨迹35、0、340、110、300、250、165和175度(从东北到西南列出),顺序是方位角35、110、165、175、250、300、340、0(即,槽口中的规划1、4、7、8、6、5、3、2)。将Slot1向正北(0度)微移。下一个规划,槽口号4,在其110度方位角的航向(heading)之前被微移45度(360/8)。槽口7的规划全部围绕着槽口2中的规划(其会被微移315度)被微移90度等等。这应该最大化在最终起斜深度的规划之间的距离并最小化相交问题。
[0304] 在步骤1322中,方法1300确定是否有更多的规划。如果有更多的规划,则返回步骤1318。如果没有更多的规划,则转到步骤924。
[0305] 在图14中,方法1400总体例示了图9A的步骤920b所需的二重线和圆形模板计算算法的一个实施例。用于处理二重线和圆形模板几何形状(图14)的算法类似于图13所例示的单线算法。然而,使用的方位角是从模板的中心到每一个规划的槽口的方位角,而不是从槽口到第一目标的方位角。这防止算法计算通过其它槽口下面的微移。
[0306] 在步骤1402中,执行“FindCenter”算法。
[0307] 在步骤1404中,使用本领域公知的技术计算从规划的中心到原始槽口的方位角。
[0308] 在步骤1406中,方法1400确定当前槽口y是否是最大的y。如果当前槽口y是最大的y,则转到步骤1406b。如果当前槽口y不是最大的y,则转到步骤1408。
[0309] 在步骤1406b中,将规划的方位角存储作为最大的y方位角。该步骤完成找到哪个规划的槽口具有最大的y值(最北)。
[0310] 在步骤1408中,方法1400确定是否有更多的规划。如果有更多的规划,则返回步骤1404。如果没有更多的规划,则转到步骤1410。
[0311] 在步骤1410中,方法1400确定微移方位角是否小于最大的y方位角。如果微移方位角小于最大的y方位角,则转到步骤1410b。如果微移方位角不小于最大的y方位角,则转到步骤1412。
[0312] 在步骤1410b中,设置Azimuth等于方位角加360。这造成所有的较小槽口增加360。
[0313] 在步骤1412中,方法1400确定是否有更多的规划。如果有更多的规划,则转到步骤1410。如果没有更多的规划,则转到步骤1414。当完成该步骤,最北的槽口将具有最小方位角。
[0314] 在在步骤1414中,通过增长方位角将规划分类。
[0315] 在步骤1416中,将n个规划360的方位角分配给每一个规划。
[0316] 在步骤1418中,0.0的微移方位角(正北)分配给具有最北槽口的规划。
[0317] 步骤1420,设置微移方位角等于Azm。
[0318] 步骤1422,设置Azm等于Azm加AzmIncr。
[0319] 步骤1424,方法1400确定是否有更多规划。如果有更多规划,则返回步骤1420。如果没有更多规划,则转到步骤924。
[0320] 在图15中,方法1500总体例示出了图9A的步骤922b所需的矩形模板计算算法的一个实施例。用于处理具有多于2行和2列的矩形模板的算法(图15)不同于图13和图14所例示的算法。算法试图建立类似于表面图案的图案,而不是建立圆形图案,但以规划可以在每个方向上的微移的最大量扩大。不像图13和图14所例示的其它两种算法,假设所有规划都将在大约相同的深度微移并且以相同的速率建立,该算法假设从内部槽口规划的油井将等待稍晚于起斜,并且以更慢的速率建立,从而不干扰从外面槽口的规划。
[0321] 在步骤1502中,执行“FindCenter”算法。参考图27进一步讨论了该算法。
[0322] 在步骤1504中,执行“CalculateFactors”算法。参考图16进一步讨论了该算法。
[0323] 在步骤1506中,执行“calculateMaximumStepOut”算法。参考图17进一步讨论了该算法。
[0324] 在步骤1508中,获得来自Center(中心)的原始X偏移和Y偏移。
[0325] 在步骤1510中,X和Y偏移乘以X和Y系数,其分别在图16的步骤1606和1608中确定。
[0326] 在步骤1512中,利用来自步骤1510的新的X和Y偏移使用本领域公知的技术计算方位角和距离。
[0327] 在步骤1514中,方法1500确定是否有更多的规划。如果有更多的规划,则转到步骤1508。如果没有更多的规划,则转到步骤924。
[0328] 在图16中,方法1600总体例示出了图15的步骤1504所需的计算系数算法的一个实施例。
[0329] 在步骤1602中,获得槽口X和Y偏移的最小和最大值。
[0330] 在步骤1604中,将图17中的“CalculateMaximumStepout”算法的结果乘以1.4,其大约是45的正弦的两倍,因为规划不需要沿正北、南或东、西方向微移。
[0331] 在步骤1606中,扩大的X界限除以原始界限,以获得每一个X的倍增系数,其可以用于计算应该被微移的规划的偏移。
[0332] 在步骤1608中,扩大的Y界限除以原始界限,以获得每一个Y的倍增系数,其可以用于计算应该被微移的规划的偏移。完成之后,方法1600返回步骤1506。
[0333] 在 图 17 中,方 法 1700 总 体 例 示 了 图 15 的 步 骤 1506 所 需 的“CalculateMaximumStepout”算法的一个实施例。
[0334] 在步骤1702中,使用狗腿严重度和最大微移倾角计算从最小初始起斜深度到最小最终起斜深度的探边距离(step out distance)。该探边距离是在微移期间的过程中规划将移动的的侧距。它包括其建立到微移倾角时的移动距离和在保持部分过程中的移动距离。如果微移是建立-保持-下落(build-hold-drop)类型,也包括当规划落回到垂直位置的移动距离。同样,在建立-保持-下落类型中,使用者将特定化期望的探边,所以如果计算的最大探边大于使用者提供的值,使用使用者提供的最大探边。由于探边依赖于微移起斜和最终的起斜深度(或者它们之间的距离)并且这些值可以改变,使用二者的最小值和最大微移倾斜度,以获得对于该计算的代表性的探边。
[0335] 在步骤1704中,方法1700确定useSShaped是否等于True。如果useSShaped等于True,则转到步骤1708。如果useSShaped不等于True,则转到步骤1706。
[0336] 在步骤1706中,将StepOutDistance返回步骤1506。
[0337] 在步骤1708中,方法1700确定StepOutDistance是否大于maxStepOut。如果StepOutDistance大于maxStepOut,则转向步骤1710。如果StepOutDistance小于maxStepOut,则转向步骤1706。
[0338] 在步骤1710中,将maxStepOut返回步骤1506。
[0339] 在图18中,方法1800总体例示出了图9的步骤924所需的“GetPointsClear”算法的一个实施例。一旦找到较低模板上的微移定位的初始位置,“GetPointsClear”算法将估计确保使它们保持足够分离并且它们不引起规划离其规划的轨迹过远的位置。分离距离可以由使用者特定化为:(分离系数)/1000。例如,如果使用者特定化6.0的分离系数,这意味着在钻孔的1000英尺(每个油井500英尺)之后,任何两个规划必须至少相隔6英尺或者在钻孔的2000英尺(每个油井1000英尺)之后任何两个规划必须至少相隔12英尺。为了在图9B的步骤924执行“GetPointsClear”算法,将分离距离计算为规划的最终起斜深度乘以分离系数除以1000的2倍。使用者也输入最大方位角变化,这是微移方位角和从微移点到第一目标的方位角之间的最大允许差。设计“GetPointsClear”算法以确保(如果有一点可能)每一个微移将其规划至一个位置,该位置至少是远离在最终起斜深度的所有其它规划所需的分离。认识到的事实是,可以通过各种规划进行几次小移动,而不是通过一个规划进行一个大移动,算法重复执行3次,每次做相对小的移动。通过改变规划的倾角和方位角完成移动。当倾角改变时,根据倾角减少或增加,微移点或者靠近原始槽口或远离原始槽口。“GetPointsClear”算法首先尝试增加具有不足的分离的每一个规划的倾角,随后增加方位角,随后减小方位角,随后减小倾角。随着每一次尝试,如果最小分离已经减少,那么其仅保持这个结果。该算法对于整个微移最优化非常有帮助,同时,其不是绝对需要获得全部成功。即使在其微移向点,两个规划不需要足够的侧向分离,仍可以可能通过改变其深度适当地将其分离(即,垂直地获得分离)。
[0340] 在步骤1802中,设置Clear等于True。
[0341] 在步骤1804中,执行“TryFixingSeparationProblemsByIncreasingInclination”算法。参考图19进一步讨论了该算法。
[0342] 在步骤1806中,执行“TryFixingSeparationProblemsByIncreasingAzimuth”算法。参考图20进一步讨论了该算法。
[0343] 在步骤1808中,执行“TryFixingSeparationProblemsByDecreasingAzimuth”算法。参考图21进一步讨论了该算法。
[0344] 在步骤1810中,执行“TryFixingSeparationProblemsByDecreasingInclination”算法。参考图22进一步讨论了该算法。
[0345] 在步骤1812中,方法1800确定Clear是否等于True。如果Clear等于True,则转到步骤926。如果Clear不等于True,则转到步骤1814。
[0346] 在步骤1814中,方法1800确定其是否有3次重复。如果有3次重复,则转到步骤926。如果没有3次重复,则转到步骤1802。
[0347] 在图19中,方法1900总体例示出了图18的步骤1804所需的“TryFixingSeparationProblemsByIncreasingInclination”算法的一个实施例。
[0348] 在步骤1902中,方法1900确定NudgePointClear是否不为True。 如果NudgePointClear不为True,则转到步骤1904。如果NudgePointClear为True,则转到步骤1924。根据图23中的方法2300确定NudgePointClear结果。
[0349] 在步骤1904中,设置原始倾角(origInclination)等于规划倾角(planinclination)。
[0350] 在步骤1906中,设置prevDistance等于getMinSeparation。
[0351] 在步骤1908中,设置maxInclination等于userInclination和origInclination加2中最大的。
[0352] 在步骤1910中,设置规划倾角等于倾角(inclination)。
[0353] 在步骤1912中,使用本领域公知的技术计算位置。
[0354] 在 步 骤1914 中,方 法1900 确 定 NudgePointClear是 否 是true。 如 果NudgePointClear是true,则转到步骤1924。如果NudgePointClear不是true,则转到步骤1916。
[0355] 在步骤1916中,设置距离(distance)等于getMinSeparation。
[0356] 在步骤1918中,方法1900确定distance是否大于prevDistance。如果distance大于prevDistance,则转到步骤1918b。如果distance不大于prevDistance,则转到步骤1920。
[0357] 在步骤1918b中,设置prevDistance等于distance。
[0358] 在步骤1920中,设置规划倾角等于规划倾角减去0.25。
[0359] 在步骤1922中,使用本领域公知的技术计算位置
[0360] 在步骤1924中,将变量incl初始化为origInclination加0.25。如果incl小于maxInclination,将规划倾角增加0.25并返回步骤1910。如果incl大于maxInclination,则转至步骤1926。
[0361] 在 步 骤1926中,方 法 1900确 定NudgePointClear是 否 为 false。 如 果NudgePointClear是false,则转至步骤1926b。如果NudgePointClear不是false,则转至步骤1928。
[0362] 在步骤1926b,设置Clear等于false。
[0363] 在步骤1928中,方法1900确定是否有更多规划。如果有更多规划,则返回步骤1902。如果没有更多规划,转至步骤1806。
[0364] 在图20中,方法2000总体例示出了图18的步骤1806所需的“TryFixingSeparationProblemsByIncreasingAzimuth”算法的一个实施例。
[0365] 在步骤2002中,方法2000确定NudgePointClear是否不是True。 如果NudgePointClear不是True,则转至步骤2004。如果NudgePointClear是True,则转至步骤2024。
[0366] 在步骤2004中,设置origAzimuth等于规划微移方位角。
[0367] 在步骤2006中,设置prevDistance等于getMinSeparation。
[0368] 在步骤2008中,设置maxAzimuth等于Azimuth加10。
[0369] 在步骤2010中,设置规划微移方位角等于Azm。
[0370] 在步骤2012中,使用本领域的公知技术计算微移点的位置。
[0371] 在 步 骤2014 中,方 法2000 确 定NudgePointClear 是 否 为true。 如 果NudgePointClear为true,则转至步骤2024。如果NudgePointClear不是true,则转至步骤2016。
[0372] 在步骤2016中,设置distance等于getMinSeparation。
[0373] 在步骤2018中,方法2000确定distance是否大于prevDistance。如果distance大于prevDistance,则转至步骤2018b。如果distance不大于prevDistance,则转至步骤2020。
[0374] 在步骤2018b中,设置prevDistance等于distance。
[0375] 在步骤2020中,设置规划微移方位角等于规划微移方位角减去1。
[0376] 在步骤2022中,使用本领域的公知技术计算微移点的位置。
[0377] 在步骤2024中,将变量azm初始化等于origAzimuth。如果azm小于maxAzimuth,则将azm增加1并返回步骤2010。如果azm大于maxAzimuth,则转至步骤2026。
[0378] 在 步 骤2026中,方 法 2000确 定NudgePointClear是 否 为 false。 如 果NudgePointClear是false,则转至步骤2026b。如果NudgePointClear不是false,则转至步骤2028。
[0379] 在步骤2026b中,设置Clear等于false。
[0380] 在步骤2028中,方法2000确定是否有更多的规划。如果有更多的规划,则返回步骤2002。如果没有更多的规划,转至步骤1808。
[0381] 在图21中,方法2100总体例示出了图18的步骤1808所需的“TryFixingSeparationProblemsByDecreasingAzimuth”算法的一个实施例。
[0382] 在步骤2102中,方法2100确定NudgePointClear是否不是True。 如果NudgePointClear不是True,则转至步骤2104。如果NudgePointClear是True,则转至步骤2124。
[0383] 在步骤2104中,设置origAzimuth等于规划微移方向角(plannudge Azimuth)。
[0384] 在步骤2106中,设置prevDistance等于getMinSeparation。
[0385] 在步骤2108中,设置maxAzimuth等于Azimuth减去10。
[0386] 在步骤2110中,设置规划微移方位角等于azm。
[0387] 在步骤2112中,使用本领域的公知技术计算微移点的位置。
[0388] 在 步 骤2114 中,方 法2100 确 定NudgePointClear 是 否 是true。 如 果NudgePointClear是true,则转至步骤2124。如果NudgePointClear不是true,则转至步骤2116。
[0389] 在步骤2116中,设置distance等于getMinSeparation。
[0390] 在步骤2118中,方法2100确定distance是否大于prevDistance。如果distance大于prevDistance,则转至步骤2118b。如果distance不大于prevDistance,则转至步骤2120。
[0391] 在步骤2118b中,设置prevDistance等于distance。
[0392] 在步骤2120中,设置Azimuth等于规划微移方位角加1。
[0393] 在步骤2122中,使用本领域的公知技术计算微移点的位置。
[0394] 在步骤2124中,将变量azm初始化等于origAzimuth。如果azm大于minAzimuth,将azm减去1并返回步骤2110。如果azm小于mixAzimuth,则转至步骤2126。
[0395] 在 步 骤2126中,方 法 2100确 定NudgePointClear是 否 是 false。 如 果NudgePointClear是false,则转至步骤2126b。如果NudgePointClear不是false,则转至步骤2128。
[0396] 在步骤2126b中,设置Clear等于false。
[0397] 在步骤2128中,方法2100确定是否有更多的规划。如果有更多的规划,则返回步骤2102。如果没有更多的规划,则转到步骤1808。
[0398] 在图22中,方法2200总体例示出了图18的步骤1810所需的“TryFixingSeparationProblemsByDecreasingInclination”算法的一个实施例。
[0399] 在步骤2202中,方法2200确定NudgePointClear是否不是True。 如果NudgePointClear不是True,则转至步骤2204。如果NudgePointClear是True,则转至步骤2224。
[0400] 在步骤2204中,设置origInclination等于规划倾角。
[0401] 在步骤2206中,设置prevDistance等于getMinSeparation。
[0402] 在步骤2208中,设置minInclination等于1.0和origInclination减去2中最小的一个。
[0403] 在步骤2210中,设置规划倾角等于inclination。
[0404] 在步骤2212中,使用本领域的公知技术计算微移点的位置。
[0405] 在 步 骤2214 中,方 法2200 确 定NudgePointClear 是 否 是true。 如 果NudgePointClear是true,则转至步骤2224。如果NudgePointClear不是true,则转至步骤2216。
[0406] 在步骤2216中,设置distance等于getMinSeparation。
[0407] 在步骤2218中,方法2200确定distance是否大于prevDistance。如果distance大于prevDistance,则转至步骤2218b。如果distance小于prevDistance,则转至步骤2220。
[0408] 在步骤2218b中,设置prevDistance等于distance。
[0409] 在步骤2220中,设置规划倾角等于规划倾角加0.25。
[0410] 在步骤2222中,使用本领域的公知技术计算微移点的位置。
[0411] 在步骤2224中,将变量incl初始化为origInclination减去0.25。如果incl大于或等于mixInclination,则将inclination减去0.25并返回步骤2210。如果incl小于minInclination,则转至步骤2226。
[0412] 在 步 骤2226中,方 法 2200确 定NudgePointClear是 否 是 false。 如 果NudgePointClear是false,则转至步骤2226b。如果NudgePointClear不是false,则转至步骤2228。
[0413] 在步骤2226b中,设置Clear等于false。
[0414] 在步骤2228中,方法2200确定是否有更多的规划。如果有更多的规划,则返回步骤2202。如果没有更多的规划,则转至步骤1812。
[0415] 在图23中,方法2300总体例示出了图19-22中的步骤1902、1914、1926、2002、2014、2026、2102、2114、2126、2202、2214和2226所需的is nudge point clear算法的一个实施例。
[0416] 在步骤2302中,设置safeDistance等于最终的最小起斜(finalmimimumkick-off)减去水深(waterdepth),再除以1000乘以误差百分比percentage乘以2.1。
[0417] 在步骤2304中,方法2300确定nudge是否等于nudgeIn,其作为微移点输入图23所例示的方法。如果nudge等于nudgeIn,则转至步骤2306。如果nudge不等于nudgeIn,则转至步骤2310。
[0418] 在步骤2306中,方法2300确定是否有更多的微移。如果有更多的微移,则返回步骤2304。如果没有更多的微移,则转至步骤2308。
[0419] 在步骤2308中,将true返回步骤1902、1914、1926、2002、2014、2026、2102、2114、2126、2202、2214和2226。
[0420] 在步骤2310中,方法2300确定distance是否小于safeDistance。如果distance小于safeDistance,则转至步骤2312。如果distance不小于safeDistance,则转至步骤2306。
[0421] 在步骤2312中,将false返回步骤1902、1914、1926、2002、2014、2026、2102、2114、2126、2202、2214和2226。
[0422] 在图24中,方法2400总体例示出了图9B的步骤926所需的固定方位角(fix azimuths)算法的一个实施例。设计该算法以纠正规划的微移使规划距其原始期望轨迹之外过远的问题。例如,在一个应用中,在最终的起斜之前,可以允许在恰恰相反方向微移规划(例如,在转向180度之前向正南微移,从而命中在垫板北方的目标)。然而在另一个应用中,使用者可以确定微移不可以从规划的原始期望轨迹偏离多于几度。在前面的举例中,“FixAzimuths”算法没有真正做什么,因为不需要固定方位角。然而,在后面的举例中,使用了算法。
[0423] 在步骤2402中,设置isOK等于true。
[0424] 在步骤2404中,设置deltaAzm等于槽口到微移方位角减去微移到目标方位角。
[0425] 在步骤2406中,方法2400确定deltaAzm是否大于allowableDeltaAzm。如果deltaAzm大于allowableDeltaAzm,则转 至步 骤2408。如 果deltaAzm不大 于allowableDeltaAzm,则转至步骤2404。
[0426] 在步骤2408中,设置Angle1等于微移方位角。
[0427] 在步骤2410中,设置Angle2等于原始规划方位角。
[0428] 在步骤2412中,方法2400确定Angle2是否大于Angle1加180。如果Angle2大于Angle1加180,则转至步骤2412b。如果Angle2不大于Angle1加180,则转至步骤2414。
[0429] 在步骤2412b中,设置Angel2等于Angle2减去360。
[0430] 在步骤2414中,方法2400确定Angle2是否小于Angle1减去180。如果Angle2小于Angle1减去180,则转至步骤2414b。如果Angle2不小于Angle1减去180,则转至步骤2416。
[0431] 在步骤2414b中,设置Angel2等于Angle2加360。
[0432] 在步骤2416中,方法2400确定Angle2是否大于Angle1。如果Angle2大于Angle1,则转至步骤2418。如果Angle2不大于Angle1,则转至步骤2428。
[0433] 在步骤2418中,设置微移方位角等于angle。
[0434] 在步骤2420中,使用本领域的公知技术计算应用微移之后的规划位置。
[0435] 在步骤2422中,使用本领域的公知技术计算deltaAzm。
[0436] 在步骤2424中,方法2400确定deltaAzm是否小于或等于allowableDeltaAzm。如果deltaAzm小于或等于allowableDeltaAzm,则转至步骤2438。如果deltaAzm不小于或等于allowableDeltaAzm,则转至步骤2426。
[0437] 在步骤2426中,将Azm初始化为Angle1加1。如果angle小于Angle2,则将angle增加1并转至步骤2418。如果angle不小于Angle2,则转至步骤2438。
[0438] 在步骤2428,设置微移方位角等于angle。
[0439] 在步骤2430中,使用本领域的公知技术计算位置。
[0440] 在步骤2432中,使用本领域的公知技术计算deltaAzm。
[0441] 在步骤2434,方法2400确定deltaAzm是否小于或等于allowableDeltaAzm。如果deltaAzm小于或等于allowableDeltaAzm,则转至步骤2438。如果deltaAzm不小于或等于allowableDeltaAzm,则转至步骤2436。
[0442] 在步骤2436中,将Azm初始化为Angle1减去1。如果angle小于Angle2,则将angle减去1并转至步骤2428。如果angle不小于Angle2,则转至步骤2438。
[0443] 在步骤2438中,方法2400确定isNudgePointClear是否等于false。如果isNudgePointClear等于false,则转至步骤2440。如果isNudgePointClear不等于false,则转至步骤2442。
[0444] 在步骤2440中,设置isOk等于false。
[0445] 在步骤2442中,方法2400确定是否有更多的规划。如果有更多的规划,则转至步骤2404。如果没有更多的规划,则转至步骤2444。
[0446] 在步骤2444中,将OK返回(其已经被设置为True或False)到步骤926。
[0447] 在图25A中,方法2500总体例示出了图9B的步骤936所需的“OptimizeNudges”算法的一个实施例。微移的最优化主要由修改发生微移处的深度(微移深度)或规划从微移至开始其期望的轨迹起斜处的深度(起斜深度)组成。
[0448] 在步骤2502中,执行“FindCenter”算法。参考图27进一步讨论了该算法。
[0449] 在步骤2504中,通过减少自中心的槽口距离对规划进行分类。通过在距垫板中心最远的当前微移深度处起始并且不必须对其做很多,并且向内工作,应该在距所需的分离尽可能近地获得早的通过。
[0450] 在步骤2506中,设置Incr等于最大微移深度(maximum nudgedepth)减去最小微移深度(minimum nudge depth)再除以规划的数量(number of plans)减去1。
[0451] 在步骤2508中,通过设置排序后的组等于空组,将先前的规划清除。在通过该排序后的规划的组的每一个通路中,算法将保持前面工作的规划列表并且使用该列表作分离对比。以这种方式,不为规划B的问题而调整规划A,只要规划B解决其马上被固定。规划只与已经有一些“固定”的其它规划做对比。
[0452] 在步骤2510中,设置md等于当前微移md。
[0453] 在步骤2512中,设置md等于md加incr。
[0454] 在步骤2514中,通过在步骤2510中尝试将微移md设置为当前(原始)的md并观察是否有当前规划全部清除了前面规划的深度,顺序解决该组规划。
[0455] 在步骤2516中,当规划没有清除先前的规划,并且md小于最大微移深度减去incr,转至步骤2512。
[0456] 在步骤2518中,方法2500确定规划是否清除先前的规划。如果规划没有清除先前的规划,则转至步骤2520。当规划没有清除先前的规划,方法2500返回最小微移深度并向下工作以找到尽可能清除前面规划的点。在这种情况下,因为目的是最优化微移深度,只解决了在最终起斜之前规划接近另外一个的问题。如果规划清除了先前的规划,则转至步骤2534。
[0457] 在步骤2520中,设置md等于最小微移深度。
[0458] 在步骤2522中,设置md等于md加incr。
[0459] 在步骤2524中,通过尝试将微移md设置为当前(原始)md并观察是否有当前规划全部清除了前面规划的深度,顺序解决规划。
[0460] 在步骤2526中,当plan没有清除先前的规划并且md小于最大微移深度减去incr,转至步骤2522。
[0461] 在步骤2528中,方法2500确定消耗(cost)是否更低。如果cost更低,则转至步骤2534。如果cost不是更低,则转至步骤2530。
[0462] 在步骤2530中,设置md等于md减去incr。
[0463] 在步骤2532中,设置微移深度(nudge depth)等于md。
[0464] 在步骤2534中,将当前规划(current plan)增加至先前的规划组(previous plan set)。
[0465] 在步骤2536中,方法2500确定是否有更多的规划。如果有更多的规划则转至步骤2510。如果没有更多的规划,则转至步骤2538。
[0466] 在步骤2538中,设置Incr等于最大的起斜深度(the maximumkick-off depth)减去最小的起斜深度(minimum kick-off depth),再除以规划的数量减去1。
[0467] 在步骤2540中,通过使组(set)等于空组(empty set),将先前的规划(previous plans)清除。
[0468] 在步骤2542中,方法2500确定规划(plan)是否没有清除先前的规划。如果规划没有清除先前的规划,则转至步骤2544。如果规划清除了先前的规划,则转至步骤2558。
[0469] 在步骤2544中,设置md等于最小起斜深度。通过规划组执行第二通路,这次在起斜深度而不是在微移深度工作。需要起始于最小起斜的一个通路,从而观察所有的深度并看看是否可以使规划完全清除其它规划。
[0470] 在步骤2546中,设置md等于md加incr。
[0471] 在步骤2548中,尝试改变起斜深度,意味着根据实验基础重新计算规划,而在当前md值起斜。
[0472] 在步骤2550中,当规划没有清除先前的规划并且md小于最大起斜深度减去incr并进一步清除(cost),转至步骤2546。
[0473] 在步骤2552中,方法2500确定cost是否更低。如果cost更低,则转至步骤2558。如果cost不是更低,则转至步骤2554。如果不能找到完全清除其它规划的规划,算法返回最小值并重新尝试-这次只观察cost是否提高。以这种方式,由于cost不可能低至0.0(没有分离问题),该算法将至少使cost尽可能低。
[0474] 在步骤2554,设置md等于md减去incr。
[0475] 在步骤2556,设置起斜深度等于md。
[0476] 在步骤2558,将plan增加至先前的规划组。
[0477] 在步骤2560中,方法2500确定是否有更多的规划。如果有更多地规划,则转至步骤2544。如果没有更多的规划,则转至步骤2562。
[0478] 在步骤2562中,设置Changed等于False。
[0479] 在步骤2564中,方法2500确定最优化起斜是否成功。如果最优化kick-off成功,则转至步骤2564b。如果最优化kick-off没有成功,则转至步骤2566。在该点,可以最优化工程约束和长度的kick-off,而不引入任何新的分离问题。
[0480] 在步骤2564b中,设置Changed i等于true。
[0481] 在步骤2566中,方法2500确定是否有更多的规划。如果有更多的规划,则转至步骤2564。如果没有更多的规划,则转至步骤2568。
[0482] 在步骤2568中,方法2500确定Changed是否等于false。如果Changed等于false,方法2500结束。如果Changed不等于false,则转至步骤2570。
[0483] 在步骤2570中,方法2500确定起斜是否变得更好。如果kick-off没有变得更好,则方法2500结束。如果kick-off变得更好,则转至步骤2572。
[0484] 在步骤2572,方法2500确定是否已经有5次重复。如果已经有5次重复,则转至图25B。如果没有5次重复,则转至步骤2562。
[0485] 在图25B中,方法2500继续例示出图9B的步骤936所需的最优化微移(optimize nudges)算法的一个实施例。
[0486] 在步骤2574中,设置先前的规划等于空组。
[0487] 在步骤2576中,方法2500确定规划是否完全清除plan2。如果规划完全清除plan2则转至步骤2578。如果规划完全清除plan2则转至步骤2580。
[0488] 在步骤2578中,执行“FixNudgeKickoffProblem”算法。参考图26进一步讨论了该算法。
[0489] 在步骤2580中,方法2500确定是否有更多的plan2的在先前的规划中。如果有更多的plan2的在previous plans中,则转至步骤2576。如果没有更多的plan2在previous plans中,则转至步骤2582。
[0490] 在步骤2582中,将plan增加至previous plans的列表中。
[0491] 在步骤2584中,方法2500确定是否有更多的规划(plans)。如果有更多的规划,则转至步骤2580。如果没有更多地规划,则转至步骤2586。
[0492] 在步骤2586中,方法2500确定微移(nudges)是否是可选的。如果微移是可选的,则转至步骤2588。如果nudges不是可选的,则方法2500结束。
[0493] 在步骤2588中,获得未微移版本(un-nudged version)的plan。
[0494] 在步骤2590中,方法2500确定未微移版本是否全部清除所有其它规划。如果未微移版本全部清除所有其它规划,则转至步骤2592。如果未微移版本没有全部清除所有其它规划,则转至步骤2594。
[0495] 在步骤2592中,从plan去除nudge。
[0496] 在步骤2594中,方法2500确定是否有更多的规划。如果有更多的plans,则转至步骤2588。如果没有更多的plans,则方法2500结束。
[0497] 在 图26 中,方 法 2600总 体 例 示 出 了 图25B 的 步 骤 2578所 需 的“FixNudgeKickoffProblem”的一个实施例。在方法2500最优化kick-offs之后,对于任意的分离问题检查每一个规划,该问题是规划获得靠近另一个太近或没有分开足够快,通过该规划得到最终的通路。如果有这种问题,执行方法2600以进行图25B中的步骤2578。
[0498] 在步骤2602中,找到规划首先距离太近的深度。
[0499] 在步骤2604中,找到在该深度处两个规划的位置。
[0500] 在步骤2606中,方法2600确定plan 1是否移动距离槽口位置侧向最远。如果plan 1移动距离槽口位置侧向最远,则转至步骤2608。如果plan 1没有移动距离槽口位置侧向最远,则转至步骤2612。
[0501] 在步骤2608,设置plan 1为更深的plan(Plan A)。
[0502] 在步骤2610,设置plan 2为更浅的plan(Plan B)。
[0503] 在步骤2612中,设置plan 2为更深的plan(Plan A)。
[0504] 在步骤2614中,设置plan 1为更浅的plan(Plan B)。
[0505] 在步骤2616中,方法2600确定是否有更多的空间以在任一规划上移动微移。如果有更多的空间以在任意规划上移动微移,则转至步骤2618。如果没有更多的空间以在任意规划上移动微移,则转至步骤2616b。算法可替代地试图(如果可能)将plan A从其当前微移深度移动至最大微移深度的一半并且将plan B从其当前微移深度移动至最小的一半。
[0506] 在步骤2616b中,将Failed返回步骤2578。
[0507] 在步骤2618中,移动plan A的微移深度至最大微移深度的一半。
[0508] 在步骤2620中,移动plan B的微移深度至最小微移深度的一半。
[0509] 在步骤2622中,方法2600基于预定标准确定规划是否太近。如果规划太近,则转至步骤2624。如果规划不是太近,则转至步骤2622b。
[0510] 在步骤2622b中,将Succeeded返回步骤2578。
[0511] 在步骤2624中,使用本领域的公知技术计算微移之间的方位角之差。
[0512] 在步骤2626中,将plan B的微移方位角远离plan A移动1度。
[0513] 在步骤2628中,方法2600基于预定标准确定规划是否太近。如果规划不是太近,则转至步骤2628b。如果规划太近,则转至步骤2630。如果将plan A从其当前微移深度移动至最大微移深度的一半并且将plan B从其当前微移深度移动至最小的一半不工作,步骤2628计算plan A和plan B之间的方位角差,并将plan B远离plan A移动3度。重复该过程直至规划不再太靠近或者没有更多的空间上下移动微移。当没有其它工作时,这是固定微移的最后的解决方法。
[0514] 在步骤2628b中,将Succeeded返回步骤2578。
[0515] 在步骤2630中,将变量i初始化等于0。如果i小于3,则i增加1并转至步骤2632中。如果i大于3,则方法2600结束。
[0516] 在步骤2632中,方法2600基于预定标准确定规划是否太近。如果规划太近,则转至步骤2616。如果规划不是太近,则转至步骤2622b。如果使用者已经选择使算法微移一些规划而不是微移所有规划,可以进行另一个通路,如果去掉微移那么为此而进行的测试每一个规划都会发生。如果在没有微移情况下规划仍会完全清除所有其它规划,该微移被去除。因为最优化将几乎总是需要一些结合的微移规划,并且尝试各种结合会导致极大量的重复,所以全部微移它们并随后尝试逐一去除它们要效率高得多。
[0517] 在图27中,方法2700总体例示出了图10、14、15和25A的步骤1002、1402、1502和2502所需的“FindCenter”算法的一个实施例。该算法基于平均x和y槽口位置计算了中心位置。
[0518] 在步骤2702中,设置N等于槽口数量。
[0519] 在步骤2704中,找到Slot X值的总和。
[0520] 在步骤2706中,找到slot Y值的总和。
[0521] 在步骤2708中,设置CenterX等于SumX除以N。
[0522] 在步骤2710中,设置CenterY等于SumY除以N。
[0523] 微移和起斜最优化的举例
[0524] 下面的举例说明图1的步骤122的对象。在图28中,平面图例示了从4槽口垫板规划的4油井组(目标)。垫板既没有优化定位也没有优化定向。为了说明该特定算法(步骤122)的工作,这是有意而为,同时保持了举例简单和可理解。最初,油井全部被规划为深度是1600英尺的起斜,为了该举例的目的,这已经被限定为最小深度。如果所有规划在相同的深度起斜,则在图29中最初的扫描突出Plan4过于接近Plan3的明显问题,由于直接朝向slot3其是图28的特写。Plan3以正切的角度从其槽口移开。
[0525] 为了不使用微移最优化起斜,而从最小的1600英尺到最大的2500英尺改变起斜并保持每1000英尺6英尺的分离,算法将向下移动Plan4的起斜点至1880英尺,这将解决Plan4移动太靠近Plan3的问题。然而,随着1600英尺的最小起斜,每1000英尺6英尺的分离以及与另一个间隔7-10英尺的槽口,需要微移,因为所有的规划比在起斜的最小分离更近。
[0526] 为了对所有规划使用微移,赋予其每100英尺1度的建立速率和5度的最大微移倾斜,90度的最大方位角变化和400-800英尺的微移深度范围,算法将以图30例示出的方式微移它们。所有的微移将发生在400英尺的最小深度,因为不需要变化它们。微移图案默认目标是最大化分离。如图30所示,4个规划初始航向正北、正东、正南以及正西的有一些偏南。Plan4没有正西微移的原因是,其预期轨迹是正南的偏东和强加90度的最大方位角变化。因此FixAzimuths算法(图24)已经执行,以使其走过符合标准的位置。
[0527] 另一方面,如果方位角变化限制于大约20度,导致的微移与原始轨迹符合得多,如图31所例示。通过限制方位角变化,Plan4的微移轨迹与Plan3相当接近,如图32所例示,其是图31的特写(closeup)。这次该算法在400英尺已微移了所有规划,除了Plan2,其在600英尺微移从而使其不与Plan3干扰。
[0528] 可替代地,通过将其特定化,该算法仅在需要它们的地方使用微移,将从Plan4去除微移。由于槽口的间隔和1600英尺的最小起斜,最大的一个规划不能被微移。任意两个规划在1600英尺的起斜将会过于靠近。它可以任意发生为Plan4。例如,除了Plan3可以是任意规划,其必须在比Plan4更浅的深度微移。由于4个槽口的间隔,它们从图32的中心都有相同的距离,所以分类将产生随机顺序。
[0529] 计算机系统
[0530] 本发明可以通过计算机可执行程序指令实现,诸如程序模块,一般称作由计算机执行的软件应用或应用程序。软件可以包括,例如,执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件和数据结构。软件形成接口以使计算机根据输入源而反应。兰德TM TM马克图形公司销售的商业软件AssetPlanner 和/或TracPlanner 可以作为接口应用,以实现本发明。该软件也可以与其它代码段合作,以初始化多种任务,从而响应与接收数据的源一起接收的数据。可以将软件存储和/或加载在任一种存储媒体上,诸如CD-ROM、磁盘、磁泡存储器半导体存储器(例如,各种类型的RAM或ROM)上。而且,可以通过诸如光纤、金属线、自由空间的多种载体媒体和/或诸如互联网的任意多种网络传输软件及其结果。
[0531] 此外,本领域的技术人员将认识到本发明可以用多种计算机-系统配置实施,包括手持装置、多处理器系统、基于微处理器的或用户可编程电子产品、微型计算机、大型计算机等。任意数量的计算机-系统和计算机网络都可以使用本发明。可以在分布式计算环境中实施本发明,在分布式计算环境中,任务由通过通信网络链接的远程处理装置执行。在分布式计算环境中,程序模块可以位于本地和远程计算机-存储媒体中,包括记忆存储装置。因此,可以连同各种硬件、软件或其结合在计算机系统或其它处理系统中实施本发明。
[0532] 现在参考图33,例示出了在计算机上实施本发明的系统的方框图。该系统包括计算单元,该计算单元有时称作计算系统,其包括存储器、应用程序,数据库、浏览器、ASCII文件、用户接口和处理单元。计算单元只是一个适合的计算环境的示例,而并不用于限制本发明的用途或功能的范围。
[0533] 存储器主要存储由计算单元执行以实现在此描述的并在图1-32中例示的本发明的应用程序,也可描述为包括计算机可执行指令的程序模块。因此,存储器包括定位和优化TM TM模块,其可以用于与AssetPlanner and TracPlanner 接口,从而确定所需的每个垫板的位置、每个槽口模板的最优方向和从垫板至所选油井目标的每一个油井路径规划之间的调TM
整。存储器还包括OpenWorks ,其是兰德马克图形公司销售的另一个商业软件应用并可以作为数据库,以提供数据和/或存储数据结果。ASCII文件也可以用于提供数据和/或存储TM
数据结果。存储器还包括AssetView ,其仍是兰德马克图形公司销售的另一个商业软件应用并可以作为浏览器,以显示数据和数据结果。
[0534] 虽然所示计算单元具有广义存储器,该计算单元一般包括多种计算机可读媒体。通过举例的方式但不限制,计算机可读媒体可以包括计算机存储媒体和通信媒体。计算系统存储器可以包括诸如只读存储器(ROM)和随机存储器(RAM)的形式为易失性存储器和/或非易失性存储器的计算机存储媒体。基本输入/输出系统(BIOS)一般存储在ROM中,BIOS包括帮助在计算单元内的组成部分(element)之间传送信息的基本例程,诸如在启动过程中。RAM一般包括数据和/或程序模块,其可以由处理单元立即访问和/或即将操作。
通过举例的方式但不限制,计算单元包括操作系统、应用程序、其它程序模块和程序数据。
[0535] 存储器中示出的组件也可以包括在其它可擦除/不可擦除、易失性/非易失性计算机存储媒体中。仅例如,硬盘驱动器可以从不可擦除、非易失磁性媒体中读出,或写入不可擦除、非易失磁性媒体,磁盘驱动器可以从可擦除、非易失磁盘中读出,或写入可擦除、非易失磁盘,以及光盘驱动器可以从诸如CD ROM或其它光学媒体的可擦除、非易失光盘中读出,或写入可擦除、非易失光盘。可以在示例性操作环境中使用的其它可擦除/不可擦除,易失性/非易失性计算机存储媒体可以包括但不限于盒式磁带、闪存卡、数字多用盘、数字视频磁带、固态RAM、固态ROM等等。上面讨论的驱动器和其相关的计算机存储媒体提供了计算单元的计算机可读指令、数据结构、程序模块和其它数据的存储。
[0536] 用户可以通过用户接口将命令和信息输入计算单元,该用户接口可以是输入装置,诸如键盘和指点装置,其通常称作鼠标轨迹球触摸板。输入装置可以包括麦克、控制杆、卫星天线、扫描仪或类似物。
[0537] 通常这些和其它输入装置通过用户接口连接至处理单元,用户接口连接至系统总线,但是这些和其它输入装置也可以通过诸如并行端口或通用串行总线(USB)的其它接口和总线结构连接。监视器或其它类型的显示装置可以通过诸如视频接口的接口连接至系统。除了监视器以外,计算机也可以包括其它外围输出装置,诸如扬声器和打印机,其可以通过输出外围接口连接。
[0538] 虽然没有示出计算单元的很多其它内部组件,本领域的普通技术人员应认识到这些组件和互连是众所周知的。
[0539] 因为在此描述的系统和方法可以用于选择性地并自动地定位各种平台类型,它们可以特定用于定位手机塔、电线、家庭、石油和天然气钻井设备以及类似物的垫板。
[0540] 虽然已经结合优选实施例描述了本发明,本领域的技术人员将理解本发明不限于这些实施例。例如,虽然本发明所例示的实施例涉及垫板和用于石油和天然气行业的槽口模板,但是本发明可以应用于其它领域和学科的钻孔应用。因此,预期在不脱离所附权利要求及其等同的精神和范围的情况下,可以对公开的实施例作出各种替代实施例和修改。
QQ群二维码
意见反馈