用于定位边界内平井的系统和方法

申请号 CN201080065528.7 申请日 2010-03-15 公开(公告)号 CN102812204B 公开(公告)日 2016-05-25
申请人 兰德马克绘图国际公司; 发明人 丹·科尔文; 格雷·丹尼尔·斯库托; 柯林·麦克唐纳; 菲利普·威廉·乌达德;
摘要 一种用于在有限的预定边界内 定位 水 平井的系统和方法。所述系统和方法包括用于创建连接目标对或水平分支的自动程序,应用该自动程序规划水平井,从而在有限的预定边界内定位水平分支。
权利要求

1.一种用于确定预定边界内地下目标位置的方法,所述方法包括:
选择预定边界内的参考井;
基于参考井的完钻井深处的点,计算方位和偏距;
创建垂直于所述方位并通过所述预定边界中心位置的线;
在所述线上离所述预定边界内中心位置的距离最大处创建一点;
沿着所述线,从离所述线上的所述点的距离为所述偏距处开始,并通过所述中心位置,直到到达所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;以及
使用计算机处理器,为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,所述列表集合包括当计算每个列表时的跟/趾对,所述列表集合代表预定边界内的目标位置。
2.如权利要求1所述的方法,其特征在于,计算偏距包括:
基于所述参考井的完钻井深处的所述点,计算初始偏距;以及
从所述初始偏距中减去所述井间距,直到初始偏距小于所述井间距。
3.如权利要求2所述的方法,其特征在于,所述初始偏距包括所述点和另一个点之间的距离。
4.如权利要求3所述的方法,其特征在于,所述另一个点表示所述线和另一条线之间的交点,所述另一条线垂直通过所述参考井的完钻井深处的点。
5.如权利要求1所述的方法,其特征在于,还包括使用所述列表集合为平井创建地下目标。
6.如权利要求1所述的方法,其特征在于,所述预定边界基于投影面积的最大范围。
7.一种用于确定预定边界内的地下目标位置的系统,其包括:
一装置,其选择预定边界内的参考井;
一装置,其基于参考井的完钻井深处的点,计算方位和偏距;
一装置,其创建垂直于所述方位并通过所述预定边界中心位置的线;
一装置,其在所述线上离所述预定边界内中心位置的距离最大处创建一点;
一装置,其沿着所述线,从离所述线上的所述点的距离为所述偏距处开始,并通过所述中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;以及
一装置,其为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,所述列表集合包括当计算每个列表时的跟/趾对,所述列表集合代表预定边界内的目标位置。
8.如权利要求7所述的系统,其特征在于,所述计算偏距的装置还包括:
一单元,其基于所述参考井的完钻井深处的所述点,计算初始偏距;以及一单元,其从所述初始偏距中减去所述井间距,直到初始偏距小于所述井间距。
9.如权利要求8所述的系统,其特征在于,所述初始偏距包括所述点和另一个点之间的距离。
10.如权利要求9所述的系统,其特征在于,所述另一个点表示所述线和另一条线之间的交点,所述另一条线垂直通过所述参考井的完钻井深处的点。
11.如权利要求7所述的系统,其特征在于,还包括一装置,其使用所述列表集合为水平井创建地下目标。
12.如权利要求7所述的系统,其特征在于,所述预定边界基于投影面积的最大范围。
13.一种用于确定预定边界内地下目标位置的方法,所述方法包括:
a)选择包括至少一个预定方位的方位范围;
b)选择包括至少一个预定偏距的偏距范围;
c)创建垂直于所述方位范围内的至少一个预定方位并通过所述预定边界中心位置的线;
d)在所述线上离所述预定边界内中心位置的距离最大处创建一点;
e)沿着所述线,从离所述点的距离为所述偏距范围内的至少一个预定偏距处开始,并通过所述中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;
f)为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,所述列表集合包括当计算每个列表时的跟/趾对;
g)对于所述方位范围内的每个预定方位以及所述偏距范围内的每个预定偏距重复c)-f);以及
h)确定代表所述预定边界内所述目标位置的最佳列表集合。
14.如权利要求13所述的方法,其特征在于,选择方位范围包括选择最小方位和选择最大方位。
15.如权利要求14所述的方法,其特征在于,所述方位范围包括所述最小方位以及所述最大方位,每个方位以所述最小方位和所述最大方位之间的增量隔开。
16.如权利要求15所述的方法,其特征在于,所述最小方位等于所述最大方位。
17.如权利要求13所述的方法,其特征在于,所述偏距范围包括零和以位于零和所述井间距之间的另一个增量隔开的偏距。
18.如权利要求17所述的方法,其特征在于,所述至少一个预定偏距是零。
19.一种用于确定预定边界内地下目标位置的系统,其包括:
一装置,其a)选择包括至少一个预定方位的方位范围;
一装置,其b)选择包括至少一个预定偏距的偏距范围;
一装置,其c)创建垂直于所述方位范围内的至少一个预定方位并通过所述预定边界中心位置的线;
一装置,其d)在所述线上离所述预定边界内中心位置的距离最大处创建一点;
一装置,其e)沿着所述线,从离所述点的距离为所述偏距范围内的至少一个预定偏距处开始,并通过所述中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;
一装置,其f)为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,所述列表集合包括当计算每个列表时的跟/趾对;
一装置,其g)对于所述方位范围内的每个预定方位以及所述偏距范围内的每个预定偏距重复c)-f);以及
一装置,其h)确定代表所述预定边界内所述目标位置的最佳列表集合。
20.如权利要求19所述的系统,其特征在于,所述选择方位范围的装置包括选择最小方位的单元和选择最大方位单元。
21.如权利要求20所述的系统,其特征在于,所述方位范围包括所述最小方位以及所述最大方位,每个方位以所述最小方位和所述最大方位之间的增量隔开。
22.如权利要求21所述的系统,其特征在于,所述最小方位等于所述最大方位。
23.如权利要求19所述的系统,其特征在于,所述偏距范围包括零和以位于零和所述井间距之间的另一个增量隔开的每个偏距。
24.如权利要求23所述的系统,其特征在于,所述至少一个预定偏距是零。

说明书全文

用于定位边界内平井的系统和方法

[0001] 相关申请的交叉参考
[0002] 不适用。
[0003] 关于联邦政府赞助研究声明
[0004] 不适用。

技术领域

[0005] 本发明主要涉及用于定位边界内水平分支(laterals)的系统和方法。更加具体地,本发明涉及为水平分支创建目标从而定位边界内水平分支的自动方法。

背景技术

[0006] 在如今的石油和天然气工业中,斜井是最普遍的并且多半是偏离水平方向的-也就是大致75-90度的倾斜。存在许多已建立的成藏组合,其利用大量设计和目标进行水平钻探,例如加拿大以及Marcellus、Hornriver和Barnett页岩气成藏组合中的SAGD(蒸汽辅助重泄油)。为了最优化井数量以充分开发这些成藏组合中的一个,各公司正在为限定区域内的整个资产设计数以百计、在某些情况下数以千计的井,这通常很耗时并需要大量资源。因此,存在大量类型的资源成藏组合,其需要定位并间隔水平分支,从而填充规则或不规则形状的井区或单元边界。利用这种水平分支的布置的两种特定成藏组合是页岩和重油成藏组合。其目的是最大化该基于分支约束的区域内的覆盖,分支约束为例如最小/最大分支长度、分支间隔和跟/趾(heel/toe)、跟/跟(heel/heel)或者趾/趾(toe/toe)间隔。在SAGD(蒸汽辅助重力泄油技术)应用中,这些分支与顶部分支(其为蒸汽喷射器)和底部分支(其为产油井)成对。各公司通常依靠常规技术来帮助完成这个目的,其结果是,经常在能被分析的方案数量方面受到限制。一旦钻探操作开始并且来自正被钻探的井的信息从油田涌入,工程师再次依靠常规技术更新基于实际数据的设计,并且工程师在重新分配剩余分支的选择方面受到限制。完成这个工程无疑会花费数月,其取决于油田的大小和设计中的井数量。
[0007] 因此,存在对更加有效的方法的需求,通过在减少设计有限的预定义边界内的水平分支的时间的同时访问在常规方法中访问的相同关注点,该方法会极其大地降低设计水平井的成本。

发明内容

[0008] 因此,基于用于水平井的不同模式,通过提供用于创建在有限的预定义边界内创建水平井的目标的系统和方法,本发明满足上述需求并克服了现有技术中的一个或多个缺点。
[0009] 在一个实施例中,本发明包括用于确定预定边界内地表下目标位置的方法,其包括:i)选择预定边界内的参考井;ii)基于参考井的完钻井深处的点,计算方位和偏距;iii)创建垂直于所述方位并通过预定边界中心位置的线;iv)在所述线上离预定边界内中心位置的距离最大处创建一点;v)沿着所述线,从离所述线上所述点的距离为所述偏距处开始,并通过所述中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;以及vi)使用计算机处理器,为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,该列表集合包括当每个列表被计算时的跟/趾对,该列表集合代表预定边界内的目标位置。
[0010] 在另一个实施例中,本发明包括程序载体装置,该装置用于携载确定预定边界内地表下目标位置的计算机可执行指令。实施可执行指令从而:i)在预定边界内选择参考井;ii)基于所述参考井的完钻井深处的点,计算方位和偏距;iii)创建垂直于所述方位并通过预定边界中心位置的线;iv)在所述线上离预定边界内中心位置的距离最大处创建一点;v)沿着所述线,从离所述线上的所述点的距离为所述偏距处开始,并通过所述中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;以及vi)为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,该列表集合包括当每个列表被计算时的跟/趾对,该列表集合代表预定边界内的目标位置。
[0011] 在另一个实施例中,本发明包括用于确定预定边界内地表下目标位置的方法,该方法包括:i)选择包括至少一个预定方位的方位范围;ii)选择包括至少一个预定偏距的偏距范围;iii)创建垂直于所述方位范围内的至少一个预定方位并通过预定边界中心位置的线;iv)在所述线上离预定边界内中心位置的距离最大处创建一点;v)沿着所述线,从离所述点的距离为所述偏距范围内的至少一个预定偏距处开始,并通过中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点隔开;以及vi)使用计算机处理器,为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,该列表集合包括当每个列表被计算时的跟/趾对,该列表集合代表预定边界内的目标位置;vii)对于所述方位范围内的每个预定方位以及所述偏距范围内的每个预定偏距重复c)-f);以及viii)确定代表所述预定边界内目标位置的最佳列表集合。
[0012] 在另一个实施例中,本发明包括程序载体装置,该装置用于携载用于确定预定边界内地表下目标位置的计算机可执行指令。所述指令是可实施的,从而:i)选择包括至少一个预定方位的方位范围;ii)选择包括至少一个预定偏距的偏距范围;iii)创建垂直于所述方位范围内的至少一个预定方位并通过预定边界中心位置的线;iv)在所述线上离预定边界内中心位置的距离最大处创建一点;v)沿着所述线,从离所述点的距离为所述偏距范围内的至少一个预定偏距处开始,并通过中心位置,直到达到所述最大距离的两倍处为止,创建一系列点,所述一系列点中的每个点以井间距与所述一系列点中的另一个点分开;以及vi)为所述一系列点中的每个点计算跟/趾对列表,并且将用于所述一系列点中每个点的列表添加至列表集合,该列表集合包括当每个列表被计算时的跟/趾对,该列表集合代表预定边界内的目标位置;vii)对于方位范围内的每个预定方位以及偏距范围内的每个预定偏距重复c)-f);以及viii)确定代表预定边界内目标位置的最佳列表集合。
[0013] 从下面各种实施例和相关附图的描述,对于本领域那些技术人员来说,本发明的其他方面、优点和实施例将变得显而易见。

附图说明

[0014] 下面参考附图描述本发明,在附图中,以相同的参考数字表示相同的元件,其中:
[0015] 图1是阐释实施本发明方法的一个实施例的流程图
[0016] 图2是阐释用于执行图1中步骤104的算法的一个实施例的流程图。
[0017] 图3是阐释用于图2中步骤204的算法的一个实施例的流程图。
[0018] 图4是阐释用于图3中步骤304的算法的一个实施例的流程图。
[0019] 图5是阐释用于图16中步骤1604的算法的一个实施例的流程图。
[0020] 图6是阐释用于图4中步骤418和图5中步骤504、508的算法的一个实施例的流程图。
[0021] 图7是阐释用于执行图1中步骤108的算法的一个实施例的流程图。
[0022] 图8是阐释用于图7中步骤708的算法的一个实施例的流程图。
[0023] 图9是阐释用于图7中步骤716的算法的一个实施例的流程图。
[0024] 图10是阐释用执行于图1中步骤114的算法的一个实施例的流程图
[0025] 图11是阐释用于图10中步骤1024和图13中步骤1312的算法的一个实施例的流程图。
[0026] 图12是阐释用于图11中步骤1116的算法的一个实施例的流程图。
[0027] 图13是阐释用于执行图1中步骤116的算法的一个实施例的流程图。
[0028] 图14是阐释用于图12中步骤1212的算法的一个实施例的流程图。
[0029] 图15是阐释用于图12中步骤1208的算法的一个实施例的流程图。
[0030] 图16是阐释用于图9中步骤910和图12中步骤1220的算法的一个实施例的流程图。
[0031] 图17A是阐释用于图12中步骤1218的算法的一个实施例的流程图。
[0032] 图17B是图17A中示出的流程图的后续。
[0033] 图18是阐释用于图17中步骤1708和1720的算法的一个实施例的流程图。
[0034] 图19是阐释用于图17中步骤1738的算法的一个实施例的流程图。
[0035] 图20是填充有水平目标的不规则边界的平面视图,各水平目标通过各水平分支连接。
[0036] 图21是阐释用于实施本发明的计算机系统的一个实施例的框图

具体实施方式

[0037] 虽然特定地描述了优选实施例的发明主题,然而其不是旨在限制 本发明的范围。因此,也可以其他方式实施本发明的发明主题,从而包括结合其他目前或未来技术的、类似于在此描述的那些步骤的不同步骤或步骤的组合。尽管在此使用术语“步骤”来描述所实施方法的不同元素,但是该术语不应被解释为暗示在此公开的各种步骤中或之间的任何特殊顺序,除非另外通过说明明确限定了这种特殊顺序。虽然下面的说明涉及石油和天然气井,但是本发明的系统和方法不限于此,也可以应用到其他工业获得相似效果。
[0038] 方法描述
[0039] 本发明提出了用于为有限的预定边界内的水平井定位目标的若干关键区域。首先假定可以将衬垫/平台定位在任何地方,也就是平原、没有环境限制的地方、无人区域等。在这种情况中,可以填充边界以使覆盖范围最大化。在有坡度/地势起伏问题的山地中或者在环境易受破坏或人口众多的区域中,衬垫的定位是受限的并且经常是固定的。在这种情况中,本发明可以使基于衬垫固定定位的分支的覆盖范围最大化。当进行水平设计工作时,通常具有至少一个已经被钻探的井,该已经被钻探的井建立一模式,其他剩余的井必须与该模式匹配。这经常伴随着实际数据的获取,其使得目前设计的水平分支构造(也就是间隔和/或长度)无效。在其他情况中,或许没有事先钻探的井,而是存在必须被使用的精确方位。在另外一些情况中,存在所需方位的常识,但是对于精确方位,也存在一些灵活性。当为水平井定位目标时,本发明考虑了这些需要重视的情况的各种组合。
[0040] 现在参考图1,其阐释了实施本发明的方法的一个实施例的流程图。方法100通常阐释一工作流,该工作流用于确定使用哪种算法来为基于特殊模式和/或标准的水平井创建目标。可以产生四种水平目标的模式类型。同心模式是围绕一圆形来切向地定向水平目标对(target pairs)。径向模式是向外定向水平目标对,但是其垂直于一圆形。单向模式是促使目标对附着在跟-趾跟-趾(Heel-Toe Heel-Toe) 方案上,而双向模式是促使目标对附着在趾-跟跟-趾(Toe Heel Heel Toe)方案上。“跟”指的是水平截面的输入点(或者触地点),而“趾”指的是水平井的终止或者水平分支的终点。在确定优选算法后,方法100减少目标(x,y)位置对(location pairs)的集合,然后通过现有技术中熟知的、用于由位置对(目标)创建水平分支的方法进行处理。“目标”是当被连接时形成水平分支部分的点。当该分支部分通过某轨迹连接至原点时,通常称为水平井。因此,水平分支仅是不完善的水平井(因此称为断井(stub))。参考图1和其他相关附图中使用的V,其是目标位置集合的集合,并且也称为单个集合或者一组或点阵列。各独立集合中的每一个集合表示一对或多对目标位置,因此总是存在偶数个目标位置。
[0041] 在步骤102中,方法100确定模式类型是否是同心的。如果模式类型是同心的,那么进行至步骤104。如果模式类型不是同心的,那么进行至步骤106。
[0042] 在步骤104中,设定V等于“findPerpendicularTargetLocations(中心位置Center Location,半径Radius)”。在图2中阐释了算法“findPerpendicularTargetLocations(中心位置Center Location,半径Radius)”。
[0043] 在步骤106中,方法100确定模式类型是否是径向的。如果模式类型是径向的,那么进行至步骤108。如果模式类型不是径向的,那么进行至步骤110。
[0044] 在步骤108中,设定V等于“findRadialTargetLocations(中心位置CenterLocation,初始规划Initial Plans)”。在图7中阐释了算法
“findRadialTargetLocations(中心位置CenterLocation,初始规划Initial Plans)”。
[0045] 在步骤110中,方法100确定模式类型是否是单向或双向的。如果模式类型是单向或双向的,那么进行至步骤112。如果模式类型既 不是双向也不是单向的,那么进行至步骤118。
[0046] 在步骤112中,方法100确定参考井是否为空。如果参考井不为空,那么进行至步骤114。如果参考井为空,那么进行至步骤116。因此,步骤112确定是否要求单向或双向模式与参考井对齐。如果需要该模式与参考井对齐,那么在步骤114中调用与参考井对齐的算法。
如果不需要该模式与参考井对齐,那么在步骤116中调用算法来确定哪个偏距和方位提供最佳覆盖范围。
[0047] 在步骤114中,设定V等于“findTargetLocations(参考井ReferenceWell)”。在图10中阐释算法“findTargetLocations(参考井ReferenceWell)”。
[0048] 在步骤116中,设定V等于“findOptimalTargetLocations”。在图13中阐释算法“findOptimalTargetLocations”。
[0049] 在步骤118中,可以使用现有技术中熟知的、用于由步骤104、108、114或116中计算得到的位置对创建目标的任何方法。在图20中显示了在执行步骤116和118后会产生什么样的结果的示例性阐释,其是不规则边界的平面视图,该不规则边界填充有通过水平分支连接的水平目标。显然,其模式类型是双向的,并且根据步骤112参考井为空。
[0050] 以同心模式为水平分支创建目标
[0051] 现在参考图2,其阐释了用于图1中步骤104的算法的一个实施例“findPerpendicularTargetLocations(中心位置CenterLocation,最大半径MaxRadius)”。
方法200通常创建以同心圆形式的位置对的集合,其从最大直径处开始,并且向内进行到不产生目标位置对为止。
[0052] 在步骤202中,设定半径等于最大半径MaxRadius,设定起始度StartingAngle等于零,并且将V初始化为空集。
[0053] 在步骤204中,设定V1等于“createTargetsForRadius(中心位置CenterLocation,半径Radius,起始角度StartingAngle)”。在图3中阐 释了算法“createTargetsForRadius(中心位置CenterLocation,半径Radius,起始角度StartingAngle)”。
[0054] 在步骤206中,方法200确定V1是否为空。如果V1不为空,那么进行至步骤208。如果V1是空,那么进行至步骤222。
[0055] 在步骤208中,V1被增加至V。
[0056] 在步骤210中,设定位置A等于V1的第一元素。
[0057] 在步骤212中,设定位置B等于V1的第二元素。
[0058] 在步骤214中,设定位置C等于分段AB的中点。
[0059] 在步骤216中,设定半径Radius等于从中心位置CenterLocation至位置C-井间距LocationC-WellSpacing的距离。在步骤210-216中,通过采用位置对集合中的第一对的两点之间的直线的中点,并计算从中心位置CenterLocation(其代表该模式中的一预定位置,以该预定位置为中心)至位置C的距离,并且减去优选的井间距WellSpacing距离,从而计算下一个向内半径。以这种方式,对于位于其中一个同心圆内的井上的点来说,没有任何一个点离位于其他同心圆内的井上的任一点之间的距离比期望的井间距WellSpacing更近。
[0060] 在步骤218中,起始角度StartingAngle增加17度。以这种方式,位于同心圆内的井会彼此重叠而不具有共同的起始点。尽管使用了17度,因为17度是不会被360除的质数,但是也可使用其他数字。
[0061] 在步骤220中,方法200确定半径Radius是否大于零。如果半径Radius大于零,那么进行至步骤204,方法200从步骤204重复。如果半径Radius不大于零,那么进行至步骤222。
[0062] 在步骤222中,方法200将V返回至图1中的步骤104。
[0063] 现在参考图3,其阐释了用于图2中步骤204的“CreatTargetsForRadius(中心位置CenterLocation,半径Radius,起始角度StartingAngle)”算法。方法300以度数而不是距离计算井的长度和间隔长度。对于间隔长度,其会是弧度,该弧的弦长是该半径 的期望间距。对于井长度,计算会更复杂些,因为实际的井长度是变化的。一旦在步骤304和308中确定了两个角度值,那么围绕圆创建点是简单的事情,圆从起始角度StartingAngle开始并进行大约360度,直到下个点返回到起始位置。角距离将在角度井长和角度间距之间交替增加。
[0064] 在步骤302中,V被初始化为空集。
[0065] 在步骤304中,设定长度角度LengthAngle等于“computerAngularWellLengthForRadius(半径Radius)”。在图4中阐释了算法“computerAngularWellLengthForRadius(半径Radius)”。
[0066] 在步骤306中,方法300确定长度角度LengthAgnle是否小于零。如果长度角度LengthAngle小于零,这代表错误条件,那么进行至步骤322。如果长度角度LengthAngle不小于零,那么进行至步骤308。
[0067] 在步骤308中,使用一弧(其弦长为该半径处的期望间距)的弧度,设定间隔角度SpacingAngle等于“findAngleOnCircle(半径Radius,趾跟间隔ToeHeel Spacing)”。
[0068] 在步骤310中,设定nlats等于360/(长度角度LengthAngle+间隔角度SpacingAngle),设定间隔角度SpacingAngle等于(360/nlats)-长度角度LengthAngle,并且设定角度Angle等于起始角度StartingAngle。以这种方式,被创建的分支数量等于360/(一个分支的角度长度+角度间距)。如果,例如,每个分支是圆的17度,并且在分支之间存在
3度的间隔,那么对于整个圆,存在18个分支(360/(17+3)=18)。因为间隔角度是近似的,通过以整数个的分支分割360并从该结果中减去角度长度,可以获得用于间隔角度SpacingAngle的精确值。相反,如果分支的角度长度是16.8,那么间隔角度SpacingAngle会是3.2,以使其组合产生均匀的360度。
[0069] 在步骤311中,变量I被初始化为等于零。如果I小于nlats,那么I加1并进行至步骤312。如果I不小于nlats,那么进行至步骤322。 Nlats是在步骤310中计算的分支的数量。因此,循环被重复nlats次。
[0070] 在步骤312中,创建一点,中心位置CenterLocation的半径Radius距离North,并以Angle角度顺时针旋转该点。以这种方式创建一点,其是从另一点的North顺时针旋转的指定度数和沿着该矢量的特定距离。
[0071] 在步骤314中,在步骤312中创建的点被增加至V。
[0072] 在步骤316中,对角度Angle增加长度角度LengthAngle,并创建一点,其是中心位置CenterLocation的半径Radius距离North,并以角度Angle顺时针旋转该点。以这种方式创建了一点,该点是从另一点的North顺时针旋转的指定度数和沿着该矢量的特定距离。
[0073] 在步骤318中,在步骤316中创建的点被增加至V,并且设定角度Angel等于角度Angle+间隔角度SpacingAngle。角度Angle是当前角度(也就是,创建最后点时的角度),并且间隔角度SpacingAngle是在创建下个点之前围绕圆的优选运动量。
[0074] 步骤320中,方法300确定角度Angle是否小于360度+起始角度StartingAngle,以及确定I是否小于nlats。如果角度Angle小于360度+起始角度StartingAngle,并且I小于nlats,那么进行至步骤311,方法300在步骤312重复,直到不再满足步骤311中的条件。如果角度Angle不小于360度+起始角度StartingAngle,并且I不小于nlats,那么进行至步骤322。
[0075] 在步骤322,方法300将V返回至图2中的步骤204。
[0076] 现在参考图4,其阐释了用于图3中步骤304的“ComputerAnglularWellLengthForRadius(半径Raduis)”算法的一个实施例。总之,通过弦-角计算,方法400将最小分支长度、最大分支长度和趾跟间隔从距离转换成角度。
[0077] 在步骤402中,使用现有技术中的已知技术,设定最小角度长度MinAngularLength等于find AngleOnCircle(半径Radius,最小分支 长度MinimumLateralLength)。Find AngleOnCircle代表一角度,该角度等于2*反正弦(弦距离/(2*半径))。
[0078] 步骤104中,使用现有技术中已知的技术,设定最大角度长度MaxAngularLength等于findAngleOnCircle(半径Radius,最大分支长度MaximumLateralLength)。
[0079] 在步骤406中,方法400确定最大角度长度MaxAngularLength是否小于零。如果最大角度长度MaxAngularLength小于零,那么进行至步骤408。如果最大角度长度MaxAngularLength不小于零,那么进行至步骤416。
[0080] 在步骤408中,设定最大长度MaxLength等于最大分支长度MaximumLateralLength-5。
[0081] 在步骤410中,使用现有技术中已知的技术,设定最大角度长度MaxAngularLength等于findAngleOnCircle(半径Radius,最大长度MaxLength)。
[0082] 在步骤412中,设定最大长度MaxLength等于最大长度MaxLength-5。
[0083] 在步骤413中,方法400确定最大长度MaxLength是否大于最小分支长度MinimumLateralLength以及确定最大角度长度MaxAngularLength是否小于零。如果最大长度MaxLength大于最小分支长度MinimumLateralLength并且最大角度长度
MaxAngularLength小于零,那么进行至步骤410,方法400从步骤410开始重复。如果最大长度MaxLength不大于最小分支长度MinimumLateralLength并且最大角度长度
MaxAngularLength不小于零,那么进行至步骤414。
[0084] 在步骤414中,方法400确定最大角度长度MaxAngularLength是否小于零。如果最大角度长度MaxAngularLength小于零,那么进行至步骤424。如果最大角度长度MaxAngularLength不小于零,那 么进行至步骤416。步骤406至414的程序寻址以下情况:即对于特定半径,最大分支长度太长以致不能转换成弦长。当这种情况发生时,方法400保持对最大长度执行减法,直到能够计算出角度长度或者直到最大长度小于或等于最小分支长度。
[0085] 在步骤416中,使用现有技术中已知的技术,设定间隔角度SpacingAngle等于findAngleOnCircle(半径Radius,跟趾间隔ToeHeelSpacing)。
[0086] 在步骤418中,设定长度等于“computerWellLengthForDistance(360.0-间隔角度SpacingAngle,最小角度长度MinAngularLength,最大角度长度MaxAngularLength,间隔角度SpacingAngle,间隔角度SpacingAngle)”。在图6中阐释了算法“computerWellLengthForDistance(360.0-间隔角度SpacingAngle,最小角度长度MinAngularLenth,最大角度长度MaxAngularLength,间隔角度SpacingAngle,间隔角度SpacingAngle)”。
[0087] 在步骤420中,方法400将长度Length返回至图3中的步骤304。
[0088] 在步骤424中,方法400将-1返回至图3中的步骤304。
[0089] 现在参考图6,其阐释了用于图4中步骤418的“ComputerWellLengthForDistance(距离Distance,最小长度MinLength,最大长度MaxLength,间隔1Spacing1,间隔2Spacing2)”算法。方法600通常用于计算填充特定距离所使用的最佳井长度,在给定最小和最大可能长度以及以交替方式使用的两个间距的情况下。虽然距离通常是实际距离,但是也可以使用角度。
[0090] 在步骤602中,方法600确定距离Distance是否小于最小长度-点1MinLength-Point1。如果距离Distance小于最小长度-点1MinLength-Point1,那么进行至步骤604。如果距离Distance不小于最小长度-点1MinLength-Point1,然后进行至步骤606。
[0091] 在步骤604中,方法600将零返回至步骤418、504或者508。
[0092] 在步骤606中,方法600确定距离Distance是否小于或等于最大长度MaxLength。如果距离Distance小于或等于最大长度MaxLength,那么进行至步骤608。如果距离Distance不小于或者等于最大长度MaxLength,那么进行至步骤610。
[0093] 在步骤608中,方法600将距离Distance返回至步骤418、504或508。
[0094] 在步骤610中,方法600确定距离Distance是否小于或等于最大长度MaxLength+间隔1Spacing1。如果距离Distance小于或等于最大长度MaxLength+间隔1Spacing1,那么进行至步骤612。如果距离Distance不小于或等于最大长度MaxLength+间隔1Spacing1,那么进行至步骤616。
[0095] 在步骤612中,方法600将最大长度MaxLength返回至步骤418、504或508。
[0096] 使用步骤602至步骤612来处理待填充的距离小于(最大长度+第一间隔值)的情形。方法600通常假定存在分支对,每个相同长度和每对分支将通过间隔1Spacing1与其本身隔开,并且通过间隔2Spacing2与下一对分支隔开。
[0097] 在步骤616中,设定测试距离TestDistance等于距离Distance-((i*间隔1Spacing1)+((i-1)*间隔2Spacing2))。通过首先减去所有可能需要的间隔,步骤616中的计算以连续的大量成对分支(从1数起)开始。然后在步骤618至634中执行长度核查。如果被移除的间隔除以分支的对数(*2)的结果小于最大长度,那么其可以被使用,或者,如果其实际较小,则可以使用最小长度。
[0098] 在步骤618中,方法600确定测试距离TestDistance/(i*2)是否小于最小长度MinLength。如果测试距离TestDistance/(i*)小于最小长度MinLength,那么进行至步骤620。如果TestDistance/(i*2)不小于最小长度MinLength,那么进行至步骤622。
[0099] 在步骤620中,该方法将最小长度MinLength返回至步骤418、504或508。
[0100] 在步骤622中,方法600确定测试距离TestDistance/(i*2)是否小于或等于最大长度MaxLength。如果测试距离TestDistance/(i*2)小于或等于最大长度MaxLength,那么进行至步骤624。如果测试距离TestDistance/(i*2)不小于或等于最大长度MaxLength,那么进行至步骤626。
[0101] 在步骤624中,方法600将测试距离TestDistance/(i*2)返回至步骤418、504或508。
[0102] 在步骤626中,设定测试距离TestDistance等于T测试距离estDistance-间隔Spacing2。在步骤626至634中,假定不存在偶数个分支,并且最后一个仅是半对(也就是“i”对+多余的一个)。
[0103] 在步骤628中,方法600确定测试距离TestDistance/((i*2)+1)是否小于最小长度MinLength。如果测试距离TestDistance/((i*2)+1)小于最小长度Minlength,那么进行至步骤630。如果测试距离TestDistance/((i*2)+1)不小于最小长度MinLength,那么进行至步骤632。
[0104] 在步骤630中,方法600将最小长度Minlength返回至步骤418、504或者508。
[0105] 在步骤632中,方法600确定测试距离TestDistance/((i*2)+1)是否小于或等于最大长度MaxLength。如果测试距离TestDistance/((i*2)+1)小于或等于最大长度MaxLength,那么进行至步骤634。如果测试距离TestDistance/((i*2)+1)不小于或等于最大长度MaxLength,那么进行至步骤635。
[0106] 在步骤630中,方法600将测试距离TestDistance/((i*2)+1)返回至步骤418、504或者508。
[0107] 在步骤635中,变量i被初始化为等于零。如果i小于或等于100, 那么使i加1并进行至步骤616。如果i不小于或等于100,那么进行至步骤636。变量(i)代表将填充预定的线性距离的分支的数量。
[0108] 在步骤636中,方法600将零返回至步骤418、504或508。
[0109] 以径向模式为水平分支创建目标
[0110] 现在参考图7,其阐释了用于图1中步骤108的“findRadialTargetLocations(中心位置CenterLocation,初始规划InitialPlans)”算法的一个实施例。
[0111] 在步骤702中,设定角度增量AngleIncr等于360/初始规划InitialPlans。初始规划InitialPlans是规划的预定初始量(也就是第一组径向向外的规划的尺寸),其被360除从而获得初始角度增量。
[0112] 步骤704中,初始化“先前方位表格”,从而防止多次使用相同方位。
[0113] 在步骤706中,将角度Angle初始化为角度增量AngleIncr。如果角度Angle大于1,那么该角度Angle除以2并且进行至步骤708。如果角度Angle不大于1,那么进行至步骤720。角度增量AngleIncr是分支之间的初始距离。随着循环中的每次通过,角度Angle(当前距离)会被减半。使用一(1)度作为截止点,但也可以为其他优选数字。
[0114] 在步骤708中,设定距离Distance等于“findDistanceWhereSpacingWorksForDegrees(角度Angle)”。在图8中阐释了算法“findDistanceWhereSpacingWorksForDegrees(角度Angle)”。对于井间距中的给定角度,存在一半径,其可用作一系列井的触地点,其既是与触地点之间的间隔距离又是围绕一圆的角度距离。因此,步骤708的结果是距离(半径)的值。
[0115] 在步骤710中,方位Azimuth被初始化为等于角度Angle。如果方位Azimuth小于360+角度Angle,那么对方位Azimuth增加角度增量AngleIncr并且进行至步骤706,方法700在步骤708处重复,直 到不再满足步骤706中的条件。如果方位Azimuth不小于360+角度Angle,那么进行至步骤712。这是个简单的循环,从起始位置(Angle)开始,对方位Azimuth增加角度增量AngleIncr,直到其变得大于或等于360+角度Angle。
[0116] 在步骤712中,方法700确定先前是否已用过方位Azimuth。如果先前使用过方位Azimuth,那么进行至步骤710。如果先前没有使用过方位Azimuth,那么进行至步骤714。以这种方式,根据先前方位表格来核查方位Azimuth,从而避免多次使用相同方位。
[0117] 在步骤714中,将方位Azimuth添加至先前方位表格。
[0118] 在步骤716中,设定V1等于“creatTargetsForPoint(中心位置CenterLocation,距离Distance,方位Azimuth+方位偏移AzimuthOffset)”。在图9中阐释了算法“creatTargetsForPoint(中心位置CenterLocation,距离Distance,方位Azimuth+方位偏移AzimuthOffset)”。围绕圆(以角度Angle为增量)对于没有使用过的每个方位调用这种算法。
[0119] 在步骤718中,将V1增加至V,并且设定角度增量AngleIncr等于角度Angle。以这种方式,重复方法700,直到角度Angle小于或等于步骤706中的一个角度。
[0120] 在步骤720中,方法700将V返回至图1中的步骤108。
[0121] 现在参考图8,其阐释了用于图7中步骤708的“FindDistanceWhereSpacingWorksForDegrees(角度Angle)”算法的一个实施例。
[0122] 在步骤802中,算法800确定角度Angle是否小于70度。如果角度Angle小于70度,那么进行至步骤804。如果角度Angle不小于70度,那么进行至步骤806。因此,根据被请求的角度是否大于70度,方法800在两个三角计算(步骤804或步骤806)之间有效地进行选择。
[0123] 在步骤804中,方法800将井间隔WellSpacing/Sine(角度Angle)返回至图7中的步骤708。因此,步骤804返回半径标准算法,给定弧的角度和弦长,使用井间隔作为弦长。
[0124] 在步骤806中,方法800将井间隔WellSpacing/(2*Sine(角度Angle/2))返回至图7中的步骤708。因此,使用步骤806来为小于70度的角度计算半径。
[0125] 现在参考图9,其阐释了图7中用于步骤716的“CreatTargetsForPoint(点Point,距离Distance,方位Azimuth)”算法的一个实施例。方法900创建两个点,这两个点从初始点以预定方位延伸,然后在步骤910中使用这两个点来调用算法,从而获得跟/趾(heal/toe)位置的实际集。在初始半径和最大半径处创建这两个点。这通过以中心位置CenterLocation的正North的那些距离处创建各点并且旋转这些点来实现。
[0126] 在步骤902中,创建Point的点Distance North并将其设为等于Point1。
[0127] 在步骤904中,围绕Point将Point1以方位Azimuth旋转。
[0128] 在步骤906中,创建Point的点MaximumDistance North并将其设为等于Point2。
[0129] 在步骤908中,围绕Point将Point2以方位角Azimuth旋转。
[0130] 在步骤910中,执行“extract TargetLocations alongSegment(V,Point1,Point2)”算法。在图6中阐释了算法“extract TargetLocations alongSegment(V,Point1,Point2)”。可选择地,可以使用本领域中用于在初始半径和最大半径处创建两点的其他已知技术。
[0131] 在步骤912中,方法900将V返回至图7中的步骤716。
[0132] 以单向和双向模式为水平分支创建目标
[0133] 现在参考图10,其阐释了用于图1中步骤114的“FindTargetLocations(参考井ReferenceWell)”算法的一个实施例。方法1000使用参考井来确定在“FindTargetLocations(偏移Offset,方位 Azimuth)”算法中使用的方位和偏距,在步骤
1024中调用该算法。最初,方法1000在参考井的端部(完钻井深或TD)处提取点和方位。然后,方法1000投射一线(Line1),该线延伸通过投射区域的中心位置,垂直于另一个点(Point1)的方位,该另一个点是沿着该线离中心位置距离最大的点。Point1与用于步骤
1024中测量的点是同一个点。然后,方法1000投射沿着该方位延伸的另一线(Line2),该线从由参考井提取的点开始。Line1和Line2的交点是Point0。Point0和Point1之间的距离是离原点的偏距。为了获得合适的偏距,进入步骤1024,然而必须从偏距中减去预定井间距,直到偏距小于井间距。
[0134] 在步骤1002中,设定Point等于在参考井ReferenceWell的TD处的Point。
[0135] 在步骤1004中,设定方位Azimuth等于在参考井ReferenceWell的TD处的方位Azimuth。
[0136] 在步骤1006中,Line1被创建为是水平通过投射区域的中心位置(CenterLocation)的线。
[0137] 在步骤1008中,将Line1以方位Azimuth旋转。
[0138] 在步骤1010中,Point1被创建为是沿着来自中心位置CenterLocation的线Line 1的点MaxDistance。
[0139] 在步骤1012中,Line2被创建为是垂直通过Point的线。
[0140] 在步骤1014中,将Line2以方位Azimuth旋转。
[0141] 在步骤1016中,设定Point0等于Line和Line2的交点。
[0142] 在步骤1018中,设定偏移Offset等于Point0和Point1之间的距离。
[0143] 在步骤1020中,方法1000确定偏移Offset是否大于井间隔Wellspacing。如果偏移Offset大于井间隔Wellspacing,那么进行至步骤1022。如果偏移Offset不大于井间隔Wellspacing,那么进行至步骤1024。
[0144] 在步骤1022中,设定偏移Offset等于偏移Offset-井间隔WellSpacing,并且返回至步骤1020。
[0145] 在步骤1024中,设定V等于“FindTargetLocations(偏移Offset,方位Azimuth)”。在图11中阐释了算法“FindTargetLocations(偏移Offset,方位Azimuth)”。
[0146] 在步骤1026中,方法1000将V返回至图1中的步骤114。
[0147] 参考图11,其阐释了用于图10中步骤1024和图13中步骤1312的“FindTargetLocations(偏移Offset,方位Azimuth)”算法的一个实施例。方法1100通常投射垂直于该方位并通过投射区域中心位置的线(Line1)。方法1100从点(Poin1)开始,该点(Point1)是沿着投射垂直线计算的离中心位置的最大距离。方法1100进一步沿着那条线在每个井间距放置一点,直到其达到在中心位置另一侧上所计算的最大距离。在这些点中的每一个点处调用步骤1116中的“CreatTargetsForPoint(点Point)”算法,从而获得跟/趾heel/toe对列表,所述对列表是在那个点处沿着该方位计算的。如果那个列表不为空,那么方法1100将其添加至总列表(V),其在步骤1126中被返回。
[0148] 在步骤1104中,Line1被创建为是水平延伸通过中心位置CenterLocation的线。
[0149] 在步骤1106中,将Line1以方位Azimuth旋转。
[0150] 在步骤1108中,将Point1创建为是沿着Line1离中心位置的距离为最大的Point MaxDistance。
[0151] 在步骤1110中,设定距离Distance等于2*最大距离MaxDistance。
[0152] 在步骤1112中,设定当前位置CurrentPosition等于偏移Offset。
[0153] 在步骤1114中,将Point创建为是沿着Line1离Point1的距离为当前距离的Point CurrentPosition。
[0154] 在步骤1116中,设定矢量V1等于“CreatTargetsForPoint(点Point)”。在图12中阐释了“CreatTargetsForPoint(点Point)”算法。
[0155] 在步骤1118中,方法1100确定V1是否为空。如果V1不为空,那么进行至步骤1120。如果V1为空,那么进行至步骤1122。
[0156] 在步骤1120中,将V1增加至V。
[0157] 在步骤1122中,设定当前位置CurrentPosition等于当前位置CurrentPostion+井间隔WellSpacing。
[0158] 在步骤1124中,方法1100确定当前位置CurrentPosition是否小于距离Distance。如果当前位置CurrentPosition小于距离Distance,那么进行至步骤1114,在此重复方法
1100。如果当前位置CurrentPosition不小于距离Distance,那么进行至步骤1126。
[0159] 在步骤1126中,将V返回至图10中的步骤1024或图13中的步骤1312。
[0160] 现在参考图12,其阐释了用于图11中步骤1116的“CreateTargetsForPoint(点Point)”的算法。方法1200通常创建通过方位方向上的点的线。在这条线与区域边界相交处提取各点,使用算法在步骤1208中填充该区域。如果存在任何被提取的点,那么在被提取的点位于现有规划的井距离WellDistance(如果需要)范围内的情况下,可以通过增加任意点来修改被提取的点。对于任何剩余的点,可以使用在步骤1218或1220中用于由那些点集来提取实际目标位置的两种算法中的一种算法。例如,如果需要匹配现有衬垫位置,那么可以使用步骤1218中的算法。另外,可以使用步骤1220中的算法来获得最佳目标位置集。
[0161] 在步骤1202中,将Line1创建为垂直延伸通过Point的线。
[0162] 在步骤1204中,将Line1以方位Azimuth旋转。
[0163] 在步骤1206中,设定Point1和Point2为Line1的端点。
[0164] 在步骤1208中,设定V等于“ExtractPointsAlongLine(Point1,Point2)”。在图15中阐释了算法“ExtractPointsAlongLine(Point1,Point2)”。
[0165] 在步骤1210中,方法1200确定V是否为空。如果V不为空,那么进行至步骤1212。如果V是空,那么进行至步骤1224。
[0166] 在步骤1212中,执行“ProcessExisting(V)”算法。在图14中阐释了“ProcessExisting(V)”算法的一个实施例。
[0167] 在步骤1214中,设定位置Location1等于V[i-1],并且设定位置 Location2等于V[i]。
[0168] 在步骤1216中,方法1200确定UsePadLocations是否为真。如果UsePadLocations为真,那么进行至步骤1218。如果UsePadLocations不为真,那么进行至步骤1220。
[0169] 在步骤1218中,执行“ExtractTargetLocationsAlongSegmentUsingPadLocations(Vout,位置Location1,位置Location2)”。在图17A和图17B中阐释了“ExtractTargetLocationsAlongSegment(Vout,位置Location1,位置Location2)”算法的一个实施例。
[0170] 在步骤1220中,执行“ExtractTargetLocationsAlongSegment(Vout,位置Location1,位置Location2)”算法。在图16中阐释了“ExtractTargetLocationsAlongSegment(Vout,位置Location1,位置Location2)”算法的一个实施例。
[0171] 在步骤1222中,变量i被初始化等于1。如果i小于V.size(),那么使i增加2并且进行至步骤1214,在此重复方法1200。如果i不小于V.size(),那么进行至步骤1224。
[0172] 在步骤1224中,方法1200将Vout返回至图11中的步骤1116。Vout是目标位置的集合。
[0173] 现在参考图13,阐释了用于图1中步骤116的“FindOptimalTargetLocations()”算法的一个实施例。方法1300使用各种偏距值调用循环中的“FindTargetLocations(偏移Offset)”算法,从而查找最佳偏距。如果需要,方法1300也可以对一定范围内的方位执行这种算法。然而,优选地,在大多数情况中方位是固定的,使得步骤1312中的“FindTargetLocations(偏移Offset)”算法仅执行一次。估算内循环(步骤1310至1318)中每个迭代内所查找到的目标位置集的值,上述过程基于该目标位置集内每个目标位置对的根(heel)和趾(toe)之间的距离的简单累计。如果查找到的长度大于先前的最大长度MaximumLength,那么更新最大长度MaximumLength并且存储目标位置集,使得当运行完所有迭代时可 将最佳目标对位置集(VMax)返回至图1中的步骤116。
[0174] 在步骤1302中,设定增量等于井间隔WellSpacing/20。
[0175] 在步骤1304中,设定最大长度MaximumLength等于零。
[0176] 在步骤1306中,设定方位增量AzimuthIncrement等于Maximum(1(最大方位MaxAzimuth-最小方位MinAzimuth)/10)。
[0177] 在步骤1308中,方位Azimuth被初始化为等于最小方位MinAzimuth。如果方位Azimuth小于或等于最大方位MaxAzimuth,那么使方位Azimuth增加方位增量AzimuthIncrement,并且进行至步骤1310。如果方位Azimuth不小于或等于最大方位MaxAzimuth,那么进行至步骤1320。
[0178] 在步骤1310中,初始化偏移Offset等于零。如果偏移Offset小于井间隔WellSpacing,那么使偏移Offset增加增量Increment并进行至步骤1312。如果偏移Offset不小于井间隔WellSpacing,那么进行至步骤1308。
[0179] 在步骤1312中,设定V等于“FindTargetLocations(偏移Offset,方位Azimuth)”。在图11中阐释了FindTargetLocations(偏移Offset,方位Azimuth)”算法。
[0180] 在步骤1314中,设定长度Length等于“evaluateTargetLocations(V)”,其有效运行,以用于每个根/趾对的长度的总和,从而获得用于这个目标位置集的总英尺长度。可选择地,可运行这种算法从而获得“(根/趾)对”的总数量或者最大平均长度。
[0181] 在步骤1316中,方法1300确定长度Length是否大于最大长度MaximumLength。如果长度Length大于最大长度MaximumLength,那么进行至步骤1318。如果Length不大于最大长度MaximumLength,那么进行至步骤1310,方法1300在步骤1312处重复,直到不再满足步骤1310中的条件。
[0182] 在步骤1318中,设定最大长度MaximumLength等于长度Length,并且设定Vmax等于V。
[0183] 在步骤1320中,方法1300将VMax返回至图1中的步骤116。
[0184] 现在参考图14,其阐释了用于图12中步骤1212的“ProcessExisting(V)”算法的一个实施例。方法1400搜索一线与现有规划交叉的点,所述线始于V中的第一个点且止于V中的最后一个点。当找到这种点时,将两个点插入所述集合中,在交点之前一个井间隔WellSpacing和在交点之后一个井间隔WellSpacing。如果点集合大于10,那么存在太多交叉,并且在返回至图12中的步骤1212之前清除V。
[0185] 在步骤1402中,设定Point1等于V的第一元素。
[0186] 在步骤1404,设定Point2等于V的最后一个元素。
[0187] 在步骤1406中,创建Line1为从Point1至Point2的分段。
[0188] 在步骤1408中,对于每个现有规划启动一个循环,该循环从步骤1410开始直到步骤1422。当V大于10或不存在更多规划时,存在该循环,并且方法1400返回至图12中的步骤1212。
[0189] 在步骤1410中,创建PointA作为触地点并且创建PointB作为在完钻井深(TD)处的点。
[0190] 在步骤1412中,方法1400确定Line1是否与分段PoinA-PointB相交。如果Line1与分段PoinA-PointB相交,那么进行至步骤1414。如果Line1不与分段PoinA-PointB相交,那么进行至步骤1408,在此对于另一个现有规划重复方法1400,或者,如果不再有其他规划,则返回至步骤1212。
[0191] 在步骤1414中,设定距离Distance等于Point1和交点之间的距离,该交点是Line1和分段PoinA-PointB的交点。
[0192] 在步骤1416中,创建位置Location1作为沿着Line1的点“距离Distance-井间隔WellSpacing”。
[0193] 在步骤1418中,创建位置Location2作为沿着Line1的点“距离Distance+井间隔WellSpacing”。
[0194] 在步骤1420中,将位置Location1和位置Location2插入V中,其通过离Point1的距离而排序。
[0195] 在步骤1422中,方法1400确定V的大小Size是否大于10。如 果V的大小Size大于10,那么进行至步骤1424。如果V的大小Size不大于10,那么进行至步骤1408,对于另一个现有规划重复方法1400,或者,如果不再有其他规划,则返回至步骤1212。
[0196] 在步骤1424中,清空V。
[0197] 在步骤1426中,方法1400返回至步骤1212。
[0198] 在步骤1428中,方法1400返回至步骤1212。
[0199] 现在参考图15,其阐释了图12中的“ExtractPointsAlongLine(Point1,Point2)”的算法的一个实施例。方法1500通常采用两个点,并且使用步骤1504和步骤1516中的算法(IsGood),从而确定特定的点是否在用于目标定位的可接受区域内,并且获得交点集,使得第一点和第二点之间的区域在该可接受区域内并且使得第二点和第三点之间的区域不在可接受区域内,等等。如果在沿着位于可接受区域内的Point1和Point2之间的线上没有点,那么在步骤1532中返回的集(V)将为空。
[0200] 在步骤1502中,设定增量Increment等于100,设定最小距离MinimumDistance等于5,并且设定最后位置LastLocation等于Point1。
[0201] 在步骤1504中,设定LastGood等于IsGood(最后位置LastLocation)。以这种方式,可以跟踪先前被测试的点,从而确定其是在用于目标定位的可接受区域内还是不在用于目标定位的可接受区域内。因此,IsGood(最后位置LastLocation)可以为现有技术中用于确定特定x,y位置是否为用于水平钻探的有效位置的任何已知的方法,例如使用边界和/或网格。
[0202] 在步骤1506中,方法1500确定LastGood是否为真。如果LastGood为真,那么进行至步骤1508。如果LastGood不为真,那么进行至步骤1510。
[0203] 在步骤1508中,将Point1增加至V。如果初始点为好点,那么LastGood为真,并且将初始点添加至集合(V)。
[0204] 在步骤1510中,设定总距离TotalDistance等于从Point1至Point2的距离。
[0205] 在步骤1512中,将距离Distance初始化为等于增量Increment。如果距离Distance小于总距离TotalDistance,那么对距离Distance增加增量Increment,并且进行至步骤1528。如果距离Distance不小于总距离TotalDistance,那么进行至步骤1514。
[0206] 在步骤1514中,将Point创建为是沿着从Point1至Point2的线的点距离。
[0207] 在步骤1516中,设定CurrentGood等于IsGood(Point)。
[0208] 在步骤1518中,方法1500确定CurrentGood是否不等于LastGood。如果CurrentGood不等于LastGood,那么进行至步骤1520。如果CurrentGood等于LastGood,那么进行至步骤1526。以这种方式,方法1500搜寻边界点,其中,在一侧上的点将是好点并且在另一侧上的点将是坏点。
[0209] 在步骤1520中,方法1500确定LastGood是否为真。如果LastGood为真,那么进行至步骤1524。如果LastGood不为真,那么进行至步骤1522。以这种方式,方法1500搜索边界点,其中,在一侧上的点将是好点并且在另一侧上的点将是坏点。由于用于搜索边界的方法1500基于好点和坏点的有序集合而运行,那么根据步骤1524,当从好点搜索至坏点时,其单向排序;并且根据步骤1522,当从坏点搜索至好点时,其按照另一方向排序。
[0210] 在步骤1522中,将getIntercept(点Point,最后位置LastLocation,最小距离MinimumDistance)增加至V。getIntercept(点Point,最后位置LastLocation,最小距离MinimumDistance)算法可以应用现有技术中已知的技术,从而沿着线在指定的最小距离内以从好点至坏点的验收标准查找点。
[0211] 在步骤1524中,将getIntercept(最后位置LastLocation,点Point,最小距离MinimumDistance)增加至V。getIntercept(点Point,LastLocation,MinimumDistance)算法可以采用现有技术中已知的技术,从而沿着线在指定的最小距离内以从好点至坏点的验收标准查找点。
[0212] 在步骤1526中,设定LastGood等于CurrentGood,并且设定LastLocation等于Point。
[0213] 在步骤1528中,方法1500确定IsGood(Point)是否为真。如果IsGood(Point)为真,那么进行至步骤1530。如果IsGood(Point)不为真,那么进行至步骤1532。
[0214] 在步骤1530中,将Point2增加至V。
[0215] 在步骤1532中,方法1500将V返回至图12中的步骤1208。
[0216] 现在参考图16,其阐释了用于图9中步骤910和图12中步骤1220的“ExtractTargetLocationsAlongSegment(Vout,位置Location1,位置Location2)”算法的一个实施例。方法1600通常在两个点之间设置一定间距,并且将该间距分割成等长度根/趾对的集合,等长度根/趾对遵循一定的间隔规则。如果以根-趾方式(也就是,所有井都面向同一方向)布置各井,那么间隔值是趾根距离;如果以趾-跟跟-趾顺序布置各井,那么间隔值是跟跟和趾趾距离。当将钻垫放置在两个跟之间时,典型地使用后一顺序,因此,跟跟间隔通常是相当大的值,该值允许在两个方向上水平建造各井。除了在预定最小和最大分支长度之间某处的固定间隔和计算井长度,通常存在另外的剩余空间。根据在步骤1612-1620中确定的判断值,该空间要么在两端之间等距分割,要么都放置在队列开始处或队列末端处。通过在步骤1620中设定初始当前位置CurrentPosition,对剩余空间寻址。如果模式类型是双向的(趾跟toe-heel跟趾heel-toe),每个迭代会创建多达四个位置(用于两个分支)。否则,每个迭代仅会创建最多两个位置(一分支)。
[0217] 在步骤1602中,设定距离Distance等于从位置Location1至位置Location2的距离。
[0218] 在步骤1604中,设定井长度WellLength等于“computeWellLengthForDistance(距离Distance)”。在图5中阐释了算法“computeWellLengthForDistance(距离Distance)”。
[0219] 在步骤1606中,方法1600确定井长度WellLengt是否等于零。 如果井长度WellLengt等于零,那么进行至步骤1610。如果井长度WellLengt不等于零,那么进行至步骤1608。
[0220] 在步骤1608中,方法1600返回至步骤910或步骤1220。
[0221] 在步骤1610中,执行用于ComputeLeftover(距离Distance,井长度WellLength)的算法。使用现有技术中已知的技术,通过获得总距离并根据情况相继减去井长度以及跟跟间隔HeelHeelSpacing、趾趾ToeToeSpacing或减去跟趾间隔HeelToeSpacing的距离,直到获得大于或等于零并小于“井长度+适当间隔”的量,从而计算得到剩余量。
[0222] 在步骤1612中,方法1600确定判断Justification是否为LEFT。如果判断是LEFT,那么进行至步骤1614。如果判断不是LEFT,那么进行至步骤1616。
[0223] 在步骤1614中,设定当前位置CurrentPosition等于零。
[0224] 在步骤1616中,方法1600确定判断Justification是否为RIGHT。如果判断是RIGHT,那么进行至步骤1618。如果判断不是RIGHT,那么进行至步骤1620。
[0225] 在步骤1618中,设定当前位置CurrentPosition等于剩余量LeftOver。
[0226] 在步骤1620中,设定当前位置CurrentPosition等于剩余量LeftOver/2。
[0227] 在步骤1622中,方法600确定当前位置CurrentPosition+井长度WellLength是否大于距离Distance。如果当前位置CurrentPosition+井长度WellLength大于距离Distance,那么进行至步骤1624,如果当前位置CurrentPosition+井长度WellLength小于距离Distance,那么进行至步骤1630。
[0228] 在步骤1624中,设定井长度WellLength等于距离Distance-当前位置CurrentPosition。
[0229] 在步骤1626中,方法1600确定井长度WellLength是否小于最小分支长度MinimumLateralLength。如果井长度WellLength小于最小分 支长度MinimumLateralLength,那么进行至步骤1628。如果井长度WellLength不小于最小分支长度MinimumLateralLength,那么进行至步骤1630。
[0230] 在步骤1628中,方法1600返回至步骤910或步骤1220。
[0231] 在步骤1630中,位置Location被创建为是沿着来自Point1的线Line 1的点CurrentPosition。
[0232] 在步骤1632中,将位置Location添加至Vout。
[0233] 在步骤1634中,使当前位置CurrentPosition增加井长度WellLength。
[0234] 在步骤1636中,当前位置Location被创建为是沿着来自Point1的线Line1的点CurrentPosition。
[0235] 在步骤1638中,将位置Location添加至Vout。
[0236] 在步骤1640中,方法1600确定模式类型PatternType是否是BIDIRECTIONAL。如果模式类型PatternType是双向BIDIRECTIONAL,那么进行至步骤1644。如果模式类型PatternType不是双向BIDIRECTIONAL,那么进行至步骤1642。
[0237] 在步骤1642中,使当前位置CurrentPostion增加趾跟间隔ToeHeelSpacing。
[0238] 在步骤1644中,使当前位置CurrentPostion增加跟跟间隔HeelHeelSpacing。
[0239] 在步骤1646中,创建位置Location为离沿着Line1的Point1的Point CurrentPo sition。
[0240] 在步骤1648中,将位置Location添加至Vout。
[0241] 在步骤1652中,使当前位置CurrentPostion增加井长度WellLength。
[0242] 在步骤1654中,位置Location被创建为是沿着来自Point1的线Line1的点CurrentPosition。
[0243] 在步骤1656中,将位置Location添加至Vout。
[0244] 在步骤1658中,使当前位置CurrentPostion增加趾趾间隔 ToeToeSpacing。
[0245] 在步骤1660中,当当前位置CurrentPostion小于距离Distance时,在循环中重复方法1600,并且在步骤1622处重复该方法。如果当前位置CurrentPostion不小于距离Distance,那么在步骤1660中的循环命令进行至步骤1662。
[0246] 在步骤1662中,方法1600返回至步骤910或步骤1220。
[0247] 现在参考图5,其阐释了用于图16中步骤1604的“ComputeWellLengthForDistance(距离Distance)”算法的一个实施例。方法500通常执行核查以确定模式类型PatternType是否为双向BIDIRECTIONAL,并且对于作为间隔参数的跟跟间隔HeelHeelSpacing和趾趾间隔ToeToeSpacing或者趾跟间隔ToeHeelSpacing调用“ComputeWellLengthForDistance”算法。
[0248] 在步骤502中,方法500确定模式类型PatternType是否为双向BIDIRECTIONAL。如果模式类型PatternType为双向BIDIRECTIONAL,那么进行至步骤504。如果模式类型PatternType不是双向BIDIRECTIONAL,那么进行至步骤508。
[0249] 在步骤504中,执行“ComputeWellLengthForDistance(距离Distance,最小分支长度MinimumLateralLength,最大分支长度MaximumLateralLength,跟跟间隔HeelHeelSpacing,趾趾间隔ToeToeSpacing)”算法。在图6中阐释了这种算法的一个实施例,其在上文中已描述过。
[0250] 在步骤506中,方法500将井长度WellLength返回至图16中的步骤1604。
[0251] 在步骤508中,执行“ComputeWellLengthForDistance(距离Distance,最小分支长度MinimumLateralLength,最大分支长度MaximumLateralLength,趾跟间隔ToeHeelSpacing,趾跟间隔ToeHeelSpacing)”算法。在图6中阐释了这种算法的一个实施例,其在上文中已描述过。
[0252] 在步骤510中,方法500将WellLength返回至图16中的步骤 1604。
[0253] 现在参考图1 7A和图17 B,其阐释了 用于图1 2中步骤121 8的“ExtractTargetLocationsAlongSegmentUsingPadLocations(Vout,位置Location1,位置Location2)”算法的一个实施例。当规划分支井时,方法1700提出了重视特定衬垫位置的需求。方法1700并没有在多个衬垫位置之间试图配合尽可能多的分支井,而是沿着线识别位置Location1和位置Location2之间的点,位置Location1和位置Location2离该线的每个端部都足够远,从而满足最小分支长度限制,并与其中一个衬垫位置足够近,从而可以从该衬垫到达位置Location1或位置Location2,而不需要与衬垫近得没有空间建立90度的分支井。
[0254] 在步骤1702中,设定距离Distance等于位置Location1和位置Location2之间的距离。
[0255] 在步骤1704中,方法1700确定距离Distance是否小于最小分支长度MinimumLateralLenth。如果距离Distance小于最小分支长度MinimumLateralLenth,那么进行至步骤1706。如果距离Distance不大于最小分支长度MinimumLateralLenth,那么进行至步骤1708。这个步骤执行核查以确保两个点(位置Location1和位置Location2)之间的距离至少与最小分支长度MinimumLateralLenth一样大。
[0256] 在步骤1706中,方法1700返回至步骤1218。
[0257] 在步骤1708中,设定距离Distance 1等于“FindFirstDirectionalHell(位置Location1,位置Location2)”。在图18中阐释了算法“FindFirstDirectionalHell(位置Location 1,位置Location2)”。这一步骤沿着线定位第一方向跟heel距离。该距离是沿着线到第一位置的距离,其可以用作朝向与线段相同的方向的分支井的触地点。这个距离通过距离Distance1表示。距离Distance1可以等于步骤1702中的距离Distance(也就是,位置Location1和位置Location2之间的总距离,如果FindFirstDirectionalHeel不成功)。
[0258] 在步骤1710中,方法1700确定模式Pattern是否为双向BIDIRECTIONAL。如果模式Pattern为双向BIDIRECTIONAL,那么 进行至步骤1712。如果模式Pattern不是双向BIDIRECTIONAL,那么进行至图17B中的步骤1740。因此,如果模式Pattern是双向BIDIRECTIONAL,那么方法1700会沿着线识别Distance1点之前的点,在Distance1点处,该方法会开始在其他方向上搜索彼此相对的分支井。
[0259] 在步骤1712中,设定新距离NewDistance等于距离Distance1。
[0260] 在步骤1714中,方法1700确定距离Distance1是否小于距离Distance。如果距离Distance1小于距离Distance,那么进行至步骤1716。如果距离Distance1不小于Distance,那么进行至步骤1718。
[0261] 在步骤1716中,设定新距离NewDistance等于新距离NewDistance-跟跟间隔HeelHeelSpacing。
[0262] 在步骤1718中,创建新点NewPoint为沿着位置Location1和位置Location2之间的线的点NewDistance。现在这个点(NewPoint)在步骤1720的算法中用作第一个点。
[0263] 在步骤1720中,设定距离Distance1等于“FindFirstDirectionalHeel(新点NewPoint,位置Location1)”。在图18中阐释了算法“FindFirstDirectionalHeel(新点NewPoint,位置Location1)”。
[0264] 在步骤1722中,设定距离Distance2等于新距离New Distance-距离Distance1。因此,距离Distance2是沿着从新点NewPoint至Point1的段、从Point1至第一个可能触地点的距离。
[0265] 在步骤1724中,方法1700确定距离Distance2是否大于零。若果距离Distance2大于零,那么进行至步骤1726。如果距离Distance2不大于零,那么进行至图17B中的步骤1740。因此,如果距离Distance2是零,那么没有查找到着落点。
[0266] 在步骤1726中,设定长度Length等于距离Distance2-最大分支长度MaximumLateralLength。
[0267] 在步骤1728中,方法1700确定长度Length是否小于零。如果长度Length小于零,那么进行至步骤1730。如果长度Length不小于零,那么进行至步骤1732。
[0268] 在步骤1730中,设定长度Length等于零。
[0269] 在步骤1732中,Heel被创建为是沿着位置Location1和位置Location2之间的线的点Distance2。
[0270] 在步骤1734中,方法1700确定距离Distance2-长度Length是否大于或等于最小分支长度MinimumLateralLength。如果距离Distance2-长度Length大于或等于最小分支长度MinimumLateralLength,那么进行至步骤1736。如果距离Distance2-长度Length不大于或等于最小分支长度MinimumLateralLength,那么进行至步骤1738。
[0271] 在步骤1736中,Toe被创建为是沿着位置Location1和位置Location2之间的线的点Length,并且将Heel和Toe中的每一个都添加到Vout。
[0272] 在步骤1738中,执行“CheckForOverlappingToes(Vout,Heel)”算法。执行这种算法以确定是否仍然存在规划分支井的方法。在图19中阐释了这种算法的一个实施例。
[0273] 在步骤1740中,设定新距离NewDistance等于零。
[0274] 在步骤1742中,方法1700确定距离Distance1是否小于距离Distance。如果距离Distance1小于距离Distance,那么进行至步骤1744。如果距离Distance1不小于距离Distance,那么进行至步骤1754。
[0275] 在步骤1744中,Heel被创建为是沿着位置Location1和位置Location2之间的线的点Distance1,并且设定长度Length等于距离Distance 1+最大分支长度MaximumLateralLenth。
[0276] 在步骤1746中,方法1700确定长度Length是否小于距离Distance。如果长度Length小于距离Distance,那么进行至步骤1748。如果长度Length不小于距离Distance,那么进行至步骤1750。
[0277] 在步骤1748中,设定长度Length等于距离Distance。
[0278] 在步骤1750中,方法1700确定长度Length-距离Distance1是否大于或等于最小分支长度MinimumLateralLength。如果长度Length-距离Distance1大于或等于最小分支长度MinimumLateralLength,那 么进行至步骤1752。如果长度Length-距离Distance1不大于或等于最小分支长度MinimumLateralLength,那么进行至步骤1754。
[0279] 在步骤1752中,Toe被创建为是点沿着位置Location1和位置Location2之间的线的点Length,将Heel和Toe中每一个都添加到Vout,并且设定新距离NewDistance等于长度Length+趾趾间隔ToeToeSpacing。
[0280] 在步骤1754中,方法1700确定新距离NewDistance是否大于零。如果新距离NewDistance大于零,那么进行至步骤1756。如果新距离NewDistance不大于零,那么进行至步骤1758。
[0281] 在步骤1756中,新点NewPoint被创建为是沿着位置Location1和位置Location2之间的线的点NewDistance。
[0282] 在步骤1757中,执行“ExtractTargetLocationsAlongSegmentUsingPadLocations(Vout,新点NewPoint,位置Location2)”算法。基本上,为(Vout,新点NewPoint,位置Location2)递归地调用方法1700。
[0283] 在步骤1758中,方法1700返回至步骤1218或步骤1757。
[0284] 现在参考图1 8 ,其阐释了 用于图 17中的步骤1 708和1720的“FindFirstDirectionalHeel(位置Location1,位置Location2)”算法的一个实施例。基于已知衬垫位置的集合,方法1800通常沿着线段查找用作跟heel或触地点的第一点。方法
1800递增地遍历该线段。
[0285] 在步骤1802中,设定距离Distance等于位置Location1和位置Location2之间的距离。
[0286] 在步骤1804中,设定增量Increment等于2.5。然而,可以使用其他增量,取决于所需的精确度和性能效率。
[0287] 在步骤1806中,设定期望方位DesiredAzimuth等于从位置Location1至位置Location2的方位Azimuth。
[0288] 在步骤1808中,将当前位置CurrentPosition初始化为零。如果当前位置CurrentPosition小于距离Distance,那么使当前位置CurrentPosition增加增量增量Increment,并进行至步骤1810。如果当 前位置CurrentPosition不小于距离Disatnce,那么进行至步骤1832。
[0289] 在步骤1810中,点Point被创建为是沿着位置Location1和位置Location2之间的线的点CurrentPosition。
[0290] 在步骤1812中,为从步骤1814开始到步骤1828的预定设计中的每个衬垫执行循环。针对在步骤1810中创建的点Point核查每个衬垫,并且在针对该点Point核查完设计中的所有衬垫后,控制循环返回到步骤1808定义另一个点Point,并针对该另一个点Point核查每个衬垫。
[0291] 在步骤1814中,设定衬垫距离PadDistance等于从该点至衬垫Pad的距离Distance。
[0292] 在步骤1816中,方法1800确定衬垫距离PadDistance是否大于最大触地距离MaximumLandingDistance。如果衬垫距离PadDistance大于最大触地距离MaximumLandingDistance,那么进行至步骤1812。如果衬垫距离PadDistance不大于最大触地距离MaximumLandingDistance,那么进行至步骤1818。将最大触地距离
MaximumLandingDistance定义为衬垫中的狭槽的数量除以2(为侧面每个方向);如果存在堆叠的分支井,那么再次除以2;并且如果模式是双向的,那么再次除以2。其结果乘以井间隔WellSpacing。因此,具有8个狭槽的、双向的但非堆叠的衬垫会具有2*井间隔WellSpacing的最大触地距离,因此其可以向外伸出足够远,从而在在每一侧上每个方向上获得两个分支井,总共8个,与狭槽的数量匹配。
[0293] 在步骤1818中,方法1800确定衬垫距离PadDistance是否小于最小触地距离MinimunLandingDistance。如果衬垫距离PadDistance小于最小触地距离MinimunLandingDistance,那么进行至步骤1812。如果衬垫距离PadDistance不小于最小触地距离MinimunLandingDistance,那么进行至步骤1820。最小触地距离
MinimunLandingDistance是其为井采取的距离,用于建成水平位置的井。因此,最小触地距离MinimunLandingDistance可以被设计为是跟跟间隔HeelHeelSpacing的一半,因为跟跟间隔HeelHeelSpacing是其 为了在相对方向上建立两个达到90度的井而采取的距离。
[0294] 在步骤1820中,设定方位Azimuth等于从衬垫Pad至点的方位Azimuth。
[0295] 在步骤1822中,设定方位增量DeltaAzimuth为方位Azimuth-期望方位DesiredAzimuth的绝对值。
[0296] 在步骤1824中,设定最大增量MaximumDelta等于90-ArcSine(最小触地距离MinimumLandingDistance/衬垫距离PadDistance)。这种计算旨在创建与垂直于期望方位Azimuth的直线对齐而不是位于围绕衬垫的弧形内的触地点。
[0297] 在步骤1826中,方法1800确定方位增量DeltaAzimuth是否大于最大增量MaximumDelta。如果方位增量DeltaAzimuth大于最大增量MaximumDelta,那么进行至步骤1812。如果方位增量DeltaAzimuth不大于最大增量MaximumDelta,那么进行至步骤1828。
[0298] 在步骤1828中,方法1800确定从衬垫Pad至点Point的段Segment是否与任何障碍物相交。如果从衬垫Pad至点Point的段Segment与任一障碍相交,那么进行至步骤1812。如果从衬垫Pad至点Point的段Segment没有与任何障碍物相交,那么进行至步骤1830。
[0299] 在步骤1830中,方法1800将当前位置CurrentPosition返回至图17中的步骤1708或步骤1720。当前位置CurrentPosition是沿着位置Location1和位置Location2之间的分段的当前距离。由于其正被返回,那么其是在第一点处被核查为是合适距离并在离衬垫的容许角度内的距离。如果不成功,在步骤1832中返回分段(距离)的总长度。
[0300] 在步骤1832中,方法1800将Distance返回至图17中的步骤1708或步骤1720。
[0301] 现在参考图19,其阐释了用于图17中步骤1738的“CheckForOverlappingtoes(Vout,Heel)”算法的一个实施例。方法1900通常对特定情况的情形寻址,在这些情形中,不能为反向分支井规划特定触地点,因为先前规划的前向分支井被规划成从跟(heel)至趾(toe)的最大分支长度,并且对于最大分支长度的分支井,加上 最小分支长度分支井,加上趾-趾(toe toe)间距,在两个跟(heel)之间没有足够的距离,但是对于两个最小分支长度(或者更大)的分支井加上趾-趾(toe toe)间隔,存在足够的空间。因此,方法1900通常建立为:在集合Vout中第二至最后的位置是跟-趾(heel toe)对中的跟(heel),并且是用于待被调整的趾(toe)的合适距离,其中跟-趾(heel toe)对在与新的反向跟(heel)相同的线上。一旦被建立,那么下面就是简单的事情,即去除最后两个,从两个跟(heel)之间的距离中减去趾-趾(toe toe)间隔,并且将差除以2,从而获得用于两个分支井的长度并在离两个跟(heel)的该距离处创建新的趾(toe)点。新的趾(toes)和新的跟(heel)都可以被添加至集合Vout。
[0302] 在步骤1902中,方法1900确定Vout的大小Size是否小于2。如果Vout的大小Size小于2,那么进行至步骤1903。如果Vout的大小Size不小于2,那么进行至步骤1904。
[0303] 在步骤1903中,方法1900返回至步骤1738。
[0304] 在步骤1904中,设定位置LocationH等于Vout的第二各至最后一个元素,并且设定位置LocationT等于Vout的最后一个元素。
[0305] 在步骤1906中,方法1900确定从位置LocationH至跟Heel的方位Azimuth是否等于从位置LocationT至跟Heel的方位Azimuth。如果从位置LocationH至跟Heel的方位Azimuth不等于从位置LocationT至跟Heel的方位Azimuth,那么进行至步骤1907。如果从位置LocationH至跟Heel的方位Azimuth等于从位置LocationT至跟Heel的方位Azimuth,那么进行至步骤1908。
[0306] 在步骤1907中,方法1900返回至步骤1738。
[0307] 在步骤1908中,方法1900确定从位置LocationT至跟Heel的距离Distance是否大于最小分支长度MinimumLateralLength+趾趾间隔ToeToeSpacing。如果从位置LocationT至Heel的距离Distance大于最小分支长度MinimumLateralLength+趾趾间隔ToeToeSpacing,那么进行至步骤1909。如果从位置LocationT至跟Heel的距离Distance不大于最小分支长度MinimumLateralLength+趾趾间隔 ToeToeSpacing,那么进行至步骤
1910。
[0308] 在步骤1909中,方法1900返回至步骤1738。
[0309] 在步骤1910中,设定距离Distance等于从位置LocationH至跟Heel的距离Distance。
[0310] 在步骤1912中,方法1900确定距离Distance是否小于(2*最小分支长度MinimumLateralLength)+趾趾间隔ToeToeSpacing。如果Distance小于(2*最小分支长度MinimumLateralLength)+趾趾间隔ToeToeSpacing,那么进行至步骤1913。如果距离Distance不小于(2*最小分支长度MinimumLateralLength)+趾趾间隔ToeToeSpacing,那么进行至步骤1914。
[0311] 在步骤1913中,方法1900返回至步骤1738。
[0312] 在步骤1914中,设定长度Length等于(距离Distance-趾趾间隔ToeToeSpacing)/2。
[0313] 在步骤1916中,从Vout中去除位置LocationT。
[0314] 在步骤1918中,位置LocationT被创建为是沿着从位置LocationH至跟Heel的分段的点Length。
[0315] 在步骤1920中,将跟Heel添加至Vout。
[0316] 在步骤1922中,将趾Toe添加至Vout。
[0317] 在步骤1923中,方法1900返回至步骤1738。
[0318] 因此,本发明能够以单个水平分支或堆叠水平分支来填充边界区域。使用本发明,最初可以产生同心和径向水平分支。预定义参数指示会被用于定位和填充边界区域的几何形状和方位。如有需要,可以定义内部边界区域以截去水平分支顶端。此外,如果在边界区域中存在断层,那么将该断层用于终止水平分支并且在离断层一定距离处开始新的水平分支。本发明还允许将水平分支放置在用于合适深度布置的特定地下网格上,并且如果需要也可以从其处偏移设置,从而保持与例如石油/水接触的特定距离。可以指定单向和双向方向,并且在后者情况中,建议计算趾/趾(heel/heel)分隔从而确保用于衬垫的最佳位置。
[0319] 系统说明
[0320] 可以通过计算机可执行的指令程序来实施本发明,例如程序模,其通常被称为计算机执行的软件应用或应用程序。例如,软件可以包括例行程序、程序、对象、组件以及执行特定任务或实施特定抽象数据类型的数据结构。软件形成了允许计算机根据输入源作出反应的界面。由Landmark Graphics Corporation销售的商业软件应用程序AssetPlannerTM可被用作实施本发明的界面应用程序。软件也可以与其他代码段协作,从而响应连同所接收的数据源一起接收的数据以开始多种任务。软件可以存储在和/或携载在任何种类的存储介质上,例如CD-ROM、磁盘、磁泡存储器以及半导体存储器(例如,各种RAM或ROM)。此外,可以通过各种载体介质,例如光纤、金属线和/或通过各种网络,例如Internet,传输软件和其结果。
[0321] 此外,本领域技术人员会意识到,可以使用各种计算机系统配置实施本发明,包括手提式装置、多处理器系统、基于微处理器或消费者可编程电子线路、迷你计算机、微型计算机、主机计算机等。本发明可以使用任何数量的计算机系统和计算机网络。可以以分布式计算环境实施本发明,在这种环境中,通过远程处理装置执行这些任务,该远程处理装置通过通信网络链接。在分布式计算环境中,程序模块可以位于本地和远程计算机存储介质中,包括存储器存储装置。因此,结合各种硬件、软件或它们的组合,可以在计算机系统或其他处理系统中实施本发明。
[0322] 现在参考图21,其阐释了用于在计算机上实施本发明的系统的框图。该系统包括计算单元,有时称为计算系统,其包括存储器、应用程序、数据库、浏览器、ASCII文件、客户端界面、视频接口和处理单元。计算单元仅仅是合适的计算环境的一个例子,并不旨在对本发明的使用或功能性范围提出任何限制。
[0323] 存储器主要存储应用程序,其也可以被描述为包含计算机可执行指令的程序模块,由计算单元执行这些指令以实施在此描述和在图1-20中阐释的本发明。因此,存储器包括OpenWorksTM,其可以用作 数据库,从而提供数据和/或存储数据结果,例如地下网格和表面高度。也可以使用ASCII来提供数据和/或存储数据结果。存储器还包括AssetViewTM,其用作浏览器从而显示数据和数据结果,例如从Open WorksTM载入AssetViewTM的影像、地表和地下网格,其被用来定义井区或土地面积边界。AssetPlannerTM中的水平目标模块使用预定义井区、土地面积或网格边界来确定用于水平分支所需的间隔和定位-也称为目标或目标对。载入AssetViewTM的地下3D网格也可以用作边界。在一个应用中,例如,在AssetViewTM中直接绘制多边形区域并且使用客户端界面和TracPlannerTM将其定义为边界。在另一种应用中,例如,使用客户端界面在TracPlannerTM中直接定义多边形区域或通过从客户端界面指定的ASCII文件进行输入来定义多边形区域。一旦定义了边界,客户端界面可以用于输入水平目标参数。这些参数指示期望的水平模式类型、长度、间隔和方位,通过AssetPlannerTM中的水平目标模块处理这些参数,从而产生期望的水平目标模式。因此,期望的水平目标模式用于在边界内定位水平分支(或者目标对)。使用在此描述和在图1-20中阐释的方法,水平目标模块处理前面的数据,从而产生预期的水平目标模式。AssetPlannerTM、AssetViewTM和Open WorksTM是由Landmark Graphics Corporation销售的商业软件应用。
[0324] 尽管显示的计算单元具有通用存储器,但是计算单元典型地包括多种计算机可读介质。示例性的但非限制性的,计算机可读介质可包括计算机存储介质。计算系统存储器可以包括易失性和/或非易失性存储器形式的计算机存储介质,例如只读存储器(ROM)和随机存取存储器(RAM)。在ROM中典型地存储有基本输入/输出系统(BIOS),其包含基本例行程序,这些程序有助于例如在启动期间计算单元内各元件之间的信息传输。RAM典型地包括数据和/或程序模块,处理单元可以立即使用这些模块或者可以立即通过处理单元运行这些模块。示例性的但非限制性的,计算单元包括操作系统、应用程序、其他程序模块和程序数据。
[0325] 在存储器中显示的元件也可以包含在其他可移动/不可移动、易失性/非易失性计算机存储介质中,或者可以通过应用程序界面(“API”)在计算单元中实施这些元件,其可以驻留在通过计算机系统或网络连接的分离的计算单元上。例如,硬盘驱动器可以从非移动、非易失性磁性介质读取或对其写入;磁盘驱动器可以从移动、非易失性磁盘读取或对其写入;并且光盘驱动器可以从移动、非易失性光盘读取或对其写入,例如CD ROM或者其他光学介质。可在示意性操作环境中使用的其他移动/非移动、易失性/非易失性计算机存储介质包括但不限于:盒式磁带、闪存卡、数字式多功能光盘、数字视讯磁带、固态RAM、固态ROM等。上述讨论的驱动器及其相关计算机存储介质提供对计算机可读指令、数据结构、程序模块和用于计算单元的其他数据的存储。
[0326] 客户可以通过客户端界面将指令和信息输入计算单元,客户端界面可以是输入装置,比如键盘和定点设备,通常称为鼠标、追踪球或触摸板。输入装置可以包括麦克、操纵杆、碟式天线、扫描仪等。这些和其他输入装置通常通过系统总线连接至处理单元,但是也可以通过其他界面与总线结构连接,例如并行端口或通用串行总线(USB)。
[0327] 可以将监视器或其他类型的显示装置经由接口、例如视频接口连接至系统总线。图形用户界面(“GUI”)也可以与视频接口一起使用,从而从客户端界面接收指令并将指令传输至处理单元。除了监视器之外,计算机还可包括其他外围输出装置,例如扬声器和打印机,其可通过输出外围接口连接。
[0328] 尽管没有显示出计算单元的许多其他内部组件,本领域技术人员会意识到,这些组件和其内部连接是众所周知的。
[0329] 虽然已经关于目前的优选实施例描述了本发明,但是本领域技术人员应理解:其不是旨在将本发明限制于那些实施例。尽管本发明所阐释的实施例涉及水平石油和天然气井的创建和定位,但是本发明也可应用于其他领域和学科中的任何其他类型的井。因此,在不偏离通 过随附权利要求书和其等同物定义的本发明精神和范围的情况下,可以设想出各种可替换实施例并对所附实施例进行修改。
QQ群二维码
意见反馈