用于定位边界内水平井的系统和方法 相关申请的交叉参考 不适用。 关于联邦政府赞助研究声明 不适用。技术领域 本发明主要涉及用于定位边界内水平分支 (laterals) 的系统和方法。更加具体 地, 本发明涉及为水平分支创建目标从而定位边界内水平分支的自动方法。
背景技术 在如今的石油和天然气工业中, 斜井是最普遍的并且多半是偏离水平方向的 - 也 就是大致 75-90 度的倾斜。存在许多已建立的成藏组合, 其利用大量设计和目标进行水平 钻探, 例如加拿大以及 Marcellus、 Hornriver 和 Barnett 页岩气成藏组合中的 SAGD(蒸汽 辅助重力泄油) 。为了最优化井数量以充分开发这些成藏组合中的一个, 各公司正在为限定 区域内的整个资产设计数以百计、 在某些情况下数以千计的井, 这通常很耗时并需要大量 资源。因此, 存在大量类型的资源成藏组合, 其需要定位并间隔水平分支, 从而填充规则或
不规则形状的井区或单元边界。 利用这种水平分支的布置的两种特定成藏组合是页岩和重 油成藏组合。其目的是最大化该基于分支约束的区域内的覆盖, 分支约束为例如最小 / 最 大分支长度、 分支间隔和跟 / 趾 (heel/toe) 、 跟/跟 (heel/heel) 或者趾 / 趾 (toe/toe) 间 隔。在 SAGD(蒸汽辅助重力泄油技术) 应用中, 这些分支与顶部分支 (其为蒸汽喷射器) 和 底部分支 (其为产油井) 成对。各公司通常依靠常规技术来帮助完成这个目的, 其结果是, 经 常在能被分析的方案数量方面受到限制。 一旦钻探操作开始并且来自正被钻探的井的信息 从油田涌入, 工程师再次依靠常规技术更新基于实际数据的设计, 并且工程师在重新分配 剩余分支的选择方面受到限制。完成这个工程无疑会花费数月, 其取决于油田的大小和设 计中的井数量。
因此, 存在对更加有效的方法的需求, 通过在减少设计有限的预定义边界内的水 平分支的时间的同时访问在常规方法中访问的相同关注点, 该方法会极其大地降低设计水 平井的成本。 发明内容 因此, 基于用于水平井的不同模式, 通过提供用于创建在有限的预定义边界内创 建水平井的目标的系统和方法, 本发明满足上述需求并克服了现有技术中的一个或多个缺 点。
在一个实施例中, 本发明包括用于确定预定边界内地表下目标位置的方法, 其包 括: i) 选择预定边界内的参考井 ; ii) 基于参考井的完钻井深处的点, 计算方位和偏距 ; iii) 创建垂直于所述方位并通过预定边界中心位置的线 ; iv) 在所述线上离预定边界内中
心位置的距离最大处创建一点 ; v) 沿着所述线, 从离所述线上所述点的距离为所述偏距处 开始, 并通过所述中心位置, 直到达到所述最大距离的两倍处为止, 创建一系列点, 所述一 系列点中的每个点以井间距与所述一系列点中的另一个点隔开 ; 以及 vi) 为所述一系列 点中的每个点计算跟 / 趾对列表, 并且将用于所述一系列点中每个点的列表添加至列表集 合, 该列表集合包括当每个列表被计算时的跟 / 趾对, 该列表集合代表预定边界内的目标 位置。
在另一个实施例中, 本发明包括程序载体装置, 该装置用于携载确定预定边界内 地表下目标位置的计算机可执行指令。 实施可执行指令从而 : i) 在预定边界内选择参考井 ; ii) 基于所述参考井的完钻井深处的点, 计算方位和偏距 ; iii) 创建垂直于所述方位并通 过预定边界中心位置的线 ; iv) 在所述线上离预定边界内中心位置的距离最大处创建一点 ; v) 沿着所述线, 从离所述线上的所述点的距离为所述偏距处开始, 并通过所述中心位置, 直 到达到所述最大距离的两倍处为止, 创建一系列点, 所述一系列点中的每个点以井间距与 所述一系列点中的另一个点隔开 ; 以及 vi) 为所述一系列点中的每个点计算跟 / 趾对列表, 并且将用于所述一系列点中每个点的列表添加至列表集合, 该列表集合包括当每个列表被 计算时的跟 / 趾对, 该列表集合代表预定边界内的目标位置。
在另一个实施例中, 本发明包括用于确定预定边界内地表下目标位置的方法, 该 方法包括 : i) 选择包括至少一个预定方位的方位范围 ; ii) 选择包括至少一个预定偏距的 偏距范围 ; iii) 创建垂直于所述方位范围内的至少一个预定方位并通过预定边界中心位置 的线 ; iv) 在所述线上离预定边界内中心位置的距离最大处创建一点 ; v) 沿着所述线, 从离 所述点的距离为所述偏距范围内的至少一个预定偏距处开始, 并通过中心位置, 直到达到 所述最大距离的两倍处为止, 创建一系列点, 所述一系列点中的每个点以井间距与所述一 系列点中的另一个点隔开 ; 以及 vi) 为所述一系列点中的每个点计算跟 / 趾对列表, 并且将 用于所述一系列点中每个点的列表添加至列表集合, 该列表集合包括当每个列表被计算时 的跟 / 趾对, 该列表集合代表预定边界内的目标位置 ; vii) 对于所述方位范围内的每个预 定方位以及所述偏距范围内的每个预定偏距重复 c) -f) ; 以及 viii) 确定代表所述预定边 界内目标位置的最佳列表集合。
在另一个实施例中, 本发明包括程序载体装置, 该装置用于携载用于确定预定边 界内地表下目标位置的计算机可执行指令。 所述指令是可实施的, 从而 : i) 选择包括至少一 个预定方位的方位范围 ; ii) 选择包括至少一个预定偏距的偏距范围 ; iii) 创建垂直于所 述方位范围内的至少一个预定方位并通过预定边界中心位置的线 ; iv) 在所述线上离预定 边界内中心位置的距离最大处创建一点 ; v) 沿着所述线, 从离所述点的距离为所述偏距范 围内的至少一个预定偏距处开始, 并通过中心位置, 直到达到所述最大距离的两倍处为止, 创建一系列点, 所述一系列点中的每个点以井间距与所述一系列点中的另一个点分开 ; 以 及 vi) 为所述一系列点中的每个点计算跟 / 趾对列表, 并且将用于所述一系列点中每个点 的列表添加至列表集合, 该列表集合包括当每个列表被计算时的跟 / 趾对, 该列表集合代 表预定边界内的目标位置 ; vii) 对于方位范围内的每个预定方位以及偏距范围内的每个预 定偏距重复 c) -f) ; 以及 viii) 确定代表预定边界内目标位置的最佳列表集合。
从下面各种实施例和相关附图的描述, 对于本领域那些技术人员来说, 本发明的 其他方面、 优点和实施例将变得显而易见。附图说明
下面参考附图描述本发明, 在附图中, 以相同的参考数字表示相同的元件, 其中 : 图 1 是阐释实施本发明方法的一个实施例的流程图。 图 2 是阐释用于执行图 1 中步骤 104 的算法的一个实施例的流程图。 图 3 是阐释用于图 2 中步骤 204 的算法的一个实施例的流程图。 图 4 是阐释用于图 3 中步骤 304 的算法的一个实施例的流程图。 图 5 是阐释用于图 16 中步骤 1604 的算法的一个实施例的流程图。 图 6 是阐释用于图 4 中步骤 418 和图 5 中步骤 504、 508 的算法的一个实施例的流 图 7 是阐释用于执行图 1 中步骤 108 的算法的一个实施例的流程图。 图 8 是阐释用于图 7 中步骤 708 的算法的一个实施例的流程图。 图 9 是阐释用于图 7 中步骤 716 的算法的一个实施例的流程图。 图 10 是阐释用执行于图 1 中步骤 114 的算法的一个实施例的流程图 图 11 是阐释用于图 10 中步骤 1024 和图 13 中步骤 1312 的算法的一个实施例的 图 12 是阐释用于图 11 中步骤 1116 的算法的一个实施例的流程图。 图 13 是阐释用于执行图 1 中步骤 116 的算法的一个实施例的流程图。 图 14 是阐释用于图 12 中步骤 1212 的算法的一个实施例的流程图。 图 15 是阐释用于图 12 中步骤 1208 的算法的一个实施例的流程图。 图 16 是阐释用于图 9 中步骤 910 和图 12 中步骤 1220 的算法的一个实施例的流 图 17A 是阐释用于图 12 中步骤 1218 的算法的一个实施例的流程图。 图 17B 是图 17A 中示出的流程图的后续。 图 18 是阐释用于图 17 中步骤 1708 和 1720 的算法的一个实施例的流程图。 图 19 是阐释用于图 17 中步骤 1738 的算法的一个实施例的流程图。 图 20 是填充有水平目标的不规则边界的平面视图, 各水平目标通过各水平分支 图 21 是阐释用于实施本发明的计算机系统的一个实施例的框图。程图。
流程图。
程图。
连接。
具体实施方式
虽然特定地描述了优选实施例的发明主题, 然而其不是旨在限制本发明的范围。 因此, 也可以其他方式实施本发明的发明主题, 从而包括结合其他目前或未来技术的、 类似 于在此描述的那些步骤的不同步骤或步骤的组合。尽管在此使用术语 “步骤” 来描述所实 施方法的不同元素, 但是该术语不应被解释为暗示在此公开的各种步骤中或之间的任何特 殊顺序, 除非另外通过说明明确限定了这种特殊顺序。虽然下面的说明涉及石油和天然气 井, 但是本发明的系统和方法不限于此, 也可以应用到其他工业获得相似效果。
方法描述
本发明提出了用于为有限的预定边界内的水平井定位目标的若干关键区域。 首先假定可以将衬垫 / 平台定位在任何地方, 也就是平原、 没有环境限制的地方、 无人区域等。 在这种情况中, 可以填充边界以使覆盖范围最大化。在有坡度 / 地势起伏问题的山地中或 者在环境易受破坏或人口众多的区域中, 衬垫的定位是受限的并且经常是固定的。在这种 情况中, 本发明可以使基于衬垫固定定位的分支的覆盖范围最大化。当进行水平设计工作 时, 通常具有至少一个已经被钻探的井, 该已经被钻探的井建立一模式, 其他剩余的井必须 与该模式匹配。 这经常伴随着实际数据的获取, 其使得目前设计的水平分支构造 (也就是间 隔和 / 或长度) 无效。在其他情况中, 或许没有事先钻探的井, 而是存在必须被使用的精确 方位。 在另外一些情况中, 存在所需方位的常识, 但是对于精确方位, 也存在一些灵活性。 当 为水平井定位目标时, 本发明考虑了这些需要重视的情况的各种组合。
现在参考图 1, 其阐释了实施本发明的方法的一个实施例的流程图。 方法 100 通常 阐释一工作流, 该工作流用于确定使用哪种算法来为基于特殊模式和 / 或标准的水平井创 建目标。可以产生四种水平目标的模式类型。同心模式是围绕一圆形来切向地定向水平目 标对 (target pairs) 。径向模式是向外定向水平目标对, 但是其垂直于一圆形。单向模式 是促使目标对附着在跟 - 趾跟 - 趾 (Heel-Toe Heel-Toe) 方案上, 而双向模式是促使目标对 附着在趾 - 跟跟 - 趾 (Toe Heel Heel Toe) 方案上。 “跟” 指的是水平截面的输入点 (或者 触地点) , 而 “趾” 指的是水平井的终止或者水平分支的终点。在确定优选算法后, 方法 100 减少目标 (x, y) 位置对 (location pairs) 的集合, 然后通过现有技术中熟知的、 用于由位 置对 (目标) 创建水平分支的方法进行处理。 “目标” 是当被连接时形成水平分支部分的点。 当该分支部分通过某轨迹连接至原点时, 通常称为水平井。 因此, 水平分支仅是不完善的水 平井 (因此称为断井 (stub) ) 。参考图 1 和其他相关附图中使用的 V, 其是目标位置集合的 集合, 并且也称为单个集合或者一组或点阵列。各独立集合中的每一个集合表示一对或多 对目标位置, 因此总是存在偶数个目标位置。
在步骤 102 中, 方法 100 确定模式类型是否是同心的。如果模式类型是同心的, 那 么进行至步骤 104。如果模式类型不是同心的, 那么进行至步骤 106。
在 步 骤 104 中, 设定 V 等于 “findPerpendicularTargetLocations(中 心 位 置 Center Location, 半径 Radius) ” 。在图 2 中阐释了算法 “findPerpendicularTargetLocat ions(中心位置 Center Location, 半径 Radius) ” 。
在步骤 106 中, 方法 100 确定模式类型是否是径向的。如果模式类型是径向的, 那 么进行至步骤 108。如果模式类型不是径向的, 那么进行至步骤 110。
在 步 骤 108 中, 设 定 V 等 于 “findRadialTargetLocations(中 心 位 置 CenterLocation,初 始 规 划 Initial Plans) ” 。 在 图7中 阐 释 了 算 法 “findRadialTargetLocations(中心位置 CenterLocation, 初始规划 Initial Plans) ” 。
在步骤 110 中, 方法 100 确定模式类型是否是单向或双向的。如果模式类型是单 向或双向的, 那么进行至步骤 112。如果模式类型既不是双向也不是单向的, 那么进行至步 骤 118。
在步骤 112 中, 方法 100 确定参考井是否为空。如果参考井不为空, 那么进行至步 骤 114。如果参考井为空, 那么进行至步骤 116。因此, 步骤 112 确定是否要求单向或双向 模式与参考井对齐。如果需要该模式与参考井对齐, 那么在步骤 114 中调用与参考井对齐 的算法。如果不需要该模式与参考井对齐, 那么在步骤 116 中调用算法来确定哪个偏距和方位提供最佳覆盖范围。
在步骤 114 中, 设定 V 等于 “findTargetLocations (参考井 ReferenceWell) ” 。在 图 10 中阐释算法 “findTargetLocations(参考井 ReferenceWell) ” 。
在步骤 116 中, 设定 V 等于 “findOptimalTargetLocations” 。在图 13 中阐释算法 “findOptimalTargetLocations” 。
在步骤 118 中, 可以使用现有技术中熟知的、 用于由步骤 104、 108、 114 或 116 中计 算得到的位置对创建目标的任何方法。在图 20 中显示了在执行步骤 116 和 118 后会产生 什么样的结果的示例性阐释, 其是不规则边界的平面视图, 该不规则边界填充有通过水平 分支连接的水平目标。显然, 其模式类型是双向的, 并且根据步骤 112 参考井为空。
以同心模式为水平分支创建目标
现在参考图 2, 其阐释了用于图 1 中步骤 104 的算法的一个实施例 “findPerpendi cularTargetLocations(中心位置 CenterLocation, 最大半径 MaxRadius) ” 。方法 200 通 常创建以同心圆形式的位置对的集合, 其从最大直径处开始, 并且向内进行到不产生目标 位置对为止。
在步骤 202 中, 设定半径等于最大半径 MaxRadius, 设定起始角度 StartingAngle 等于零, 并且将 V 初始化为空集。 在 步 骤 204 中, 设 定 V1 等 于 “createTargetsForRadius(中 心 位 置 CenterLocation,半 径 Radius,起 始 角 度 StartingAngle) ” 。在图3中阐释了算 法 “createTargetsForRadius(中 心 位 置 CenterLocation,半 径 Radius,起 始 角 度 StartingAngle) ” 。
在步骤 206 中, 方法 200 确定 V1 是否为空。如果 V1 不为空, 那么进行至步骤 208。 如果 V1 是空, 那么进行至步骤 222。
在步骤 208 中, V1 被增加至 V。
在步骤 210 中, 设定位置 A 等于 V1 的第一元素。
在步骤 212 中, 设定位置 B 等于 V1 的第二元素。
在步骤 214 中, 设定位置 C 等于分段 AB 的中点。
在步骤 216 中, 设定半径 Radius 等于从中心位置 CenterLocation 至位置 C- 井间 距 LocationC-WellSpacing 的距离。在步骤 210-216 中, 通过采用位置对集合中的第一对 的两点之间的直线的中点, 并计算从中心位置 CenterLocation(其代表该模式中的一预定 位置, 以该预定位置为中心) 至位置 C 的距离, 并且减去优选的井间距 WellSpacing 距离, 从而计算下一个向内半径。 以这种方式, 对于位于其中一个同心圆内的井上的点来说, 没有 任何一个点离位于其他同心圆内的井上的任一点之间的距离比期望的井间距 WellSpacing 更近。
在步骤 218 中, 起始角度 StartingAngle 增加 17 度。以这种方式, 位于同心圆内 的井会彼此重叠而不具有共同的起始点。尽管使用了 17 度, 因为 17 度是不会被 360 除的 质数, 但是也可使用其他数字。
在步骤 220 中, 方法 200 确定半径 Radius 是否大于零。如果半径 Radius 大于零, 那么进行至步骤 204, 方法 200 从步骤 204 重复。如果半径 Radius 不大于零, 那么进行至步 骤 222。
在步骤 222 中, 方法 200 将 V 返回至图 1 中的步骤 104。
现在参考图 3, 其阐释了用于图 2 中步骤 204 的 “CreatTargetsForRadius(中心 位置 CenterLocation, 半径 Radius, 起始角度 StartingAngle) ” 算法。方法 300 以度数而 不是距离计算井的长度和间隔长度。 对于间隔长度, 其会是弧度, 该弧的弦长是该半径的期 望间距。对于井长度, 计算会更复杂些, 因为实际的井长度是变化的。一旦在步骤 304 和 308 中确定了两个角度值, 那么围绕圆创建点是简单的事情, 圆从起始角度 StartingAngle 开始并进行大约 360 度, 直到下个点返回到起始位置。角距离将在角度井长和角度间距之 间交替增加。
在步骤 302 中, V 被初始化为空集。
在步骤 304 中, 设定长度角度 LengthAngle 等于 “computerAngularWellLengthFo rRadius(半径 Radius) ” 。在图 4 中阐释了算法 “computerAngularWellLengthForRadius (半径 Radius) ” 。
在步骤 306 中, 方法 300 确定长度角度 LengthAgnle 是否小于零。如果长度角度 LengthAngle 小于零, 这代表错误条件, 那么进行至步骤 322。如果长度角度 LengthAngle 不小于零, 那么进行至步骤 308。
在步骤 308 中, 使用一弧 (其弦长为该半径处的期望间距) 的弧度, 设定间隔角度 SpacingAngle 等于 “findAngleOnCircle(半径 Radius, 趾跟间隔 ToeHeel Spacing) ” 。
在 步 骤 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 度。
在步骤 311 中, 变量 I 被初始化为等于零。如果 I 小于 nlats, 那么 I 加 1 并进行 至步骤 312。如果 I 不小于 nlats, 那么进行至步骤 322。Nlats 是在步骤 310 中计算的分 支的数量。因此, 循环被重复 nlats 次。
在步骤 312 中, 创建一点, 中心位置 CenterLocation 的半径 Radius 距离 North, 并 以 Angle 角度顺时针旋转该点。以这种方式创建一点, 其是从另一点的 North 顺时针旋转 的指定度数和沿着该矢量的特定距离。
在步骤 314 中, 在步骤 312 中创建的点被增加至 V。
在步骤 316 中, 对角度 Angle 增加长度角度 LengthAngle, 并创建一点, 其是中心位 置 CenterLocation 的半径 Radius 距离 North, 并以角度 Angle 顺时针旋转该点。以这种 方式创建了一点, 该点是从另一点的 North 顺时针旋转的指定度数和沿着该矢量的特定距 离。
在步骤 318 中, 在步骤 316 中创建的点被增加至 V, 并且设定角度 Angel 等于角度 Angle+ 间隔角度 SpacingAngle。角度 Angle 是当前角度 (也就是, 创建最后点时的角度) , 并且间隔角度 SpacingAngle 是在创建下个点之前围绕圆的优选运动量。步骤 320 中, 方法 300 确定角度 Angle 是否小于 360 度 + 起始角度 StartingAngle, 以及确定 I 是否小于 nlats。如果角度 Angle 小于 360 度 + 起始角度 StartingAngle, 并且 I 小于 nlats, 那么进行至步骤 311, 方法 300 在步骤 312 重复, 直到不再满足步骤 311 中的 条件。如果角度 Angle 不小于 360 度 + 起始角度 StartingAngle, 并且 I 不小于 nlats, 那 么进行至步骤 322。
在步骤 322, 方法 300 将 V 返回至图 2 中的步骤 204。
现在参考图 4, 其阐释了用于图 3 中步骤 304 的 “ComputerAnglularWellLengthFo rRadius(半径 Raduis) ” 算法的一个实施例。总之, 通过弦 - 角计算, 方法 400 将最小分支 长度、 最大分支长度和趾跟间隔从距离转换成角度。
在 步 骤 402 中,使 用 现 有 技 术 中 的 已 知 技 术,设 定 最 小 角 度 长 度 MinAngularLength 等 于 find AngleOnCircle(半 径 Radius, 最 小 分 支 长 度 MinimumLateralLength) 。 Find AngleOnCircle 代表一角度, 该角度等于 2* 反正弦 (弦距离 /(2* 半径) ) 。
步骤 104 中, 使用现有技术中已知的技术, 设定最大角度长度 MaxAngularLength 等于 findAngleOnCircle(半径 Radius, 最大分支长度 MaximumLateralLength) 。 在步骤 406 中, 方法 400 确定最大角度长度 MaxAngularLength 是否小于零。如 果最大角度长度 MaxAngularLength 小于零, 那么进行至步骤 408。如果最大角度长度 MaxAngularLength 不小于零, 那么进行至步骤 416。
在 步 骤 408 中,设 定 最 大 长 度 MaxLength 等 于 最 大 分 支 长 度 MaximumLateralLength-5。
在 步 骤 410 中,使 用 现 有 技 术 中 已 知 的 技 术,设 定 最 大 角 度 长 度 MaxAngularLength 等于 findAngleOnCircle(半径 Radius, 最大长度 MaxLength) 。
在步骤 412 中, 设定最大长度 MaxLength 等于最大长度 MaxLength-5。
在 步 骤 413 中, 方 法 400 确 定 最 大 长 度 MaxLength 是 否 大 于 最 小 分 支 长 度 MinimumLateralLength 以 及 确 定 最 大 角 度 长 度 MaxAngularLength 是 否 小 于 零。 如 果 最 大 长 度 MaxLength 大 于 最 小 分 支 长 度 MinimumLateralLength 并 且 最 大 角 度 长 度 MaxAngularLength 小于零, 那么进行至步骤 410, 方法 400 从步骤 410 开始重复。如果 最 大 长 度 MaxLength 不 大 于 最 小 分 支 长 度 MinimumLateralLength 并 且 最 大 角 度 长 度 MaxAngularLength 不小于零, 那么进行至步骤 414。
在步骤 414 中, 方法 400 确定最大角度长度 MaxAngularLength 是否小于零。如 果最大角度长度 MaxAngularLength 小于零, 那么进行至步骤 424。如果最大角度长度 MaxAngularLength 不小于零, 那么进行至步骤 416。步骤 406 至 414 的程序寻址以下情况 : 即对于特定半径, 最大分支长度太长以致不能转换成弦长。当这种情况发生时, 方法 400 保 持对最大长度执行减法, 直到能够计算出角度长度或者直到最大长度小于或等于最小分支 长度。
在步骤 416 中, 使用现有技术中已知的技术, 设定间隔角度 SpacingAngle 等于 findAngleOnCircle(半径 Radius, 跟趾间隔 ToeHeelSpacing) 。
在步骤 418 中, 设定长度等于 “computerWellLengthForDistance(360.0- 间隔 角度 SpacingAngle, 最小角度长度 MinAngularLength, 最大角度长度 MaxAngularLength,
间 隔 角 度 SpacingAngle,间 隔 角 度 SpacingAngle) ” 。 在 图6中 阐 释 了 算 法 “computerWellLengthForDistance(360.0- 间 隔 角 度 SpacingAngle, 最小角度长度 MinAngularLenth, 最大角度长度 MaxAngularLength, 间隔角度 SpacingAngle, 间隔角度 SpacingAngle) ” 。
在步骤 420 中, 方法 400 将长度 Length 返回至图 3 中的步骤 304。
在步骤 424 中, 方法 400 将 -1 返回至图 3 中的步骤 304。
现在参考图 6, 其阐释了用于图 4 中步骤 418 的 “ComputerWellLengthForDistance (距 离 Distance, 最 小 长 度 MinLength, 最 大 长 度 MaxLength, 间 隔 1Spacing1, 间隔 2Spacing2) ” 算法。方法 600 通常用于计算填充特定距离所使用的最佳井长度, 在给定最小 和最大可能长度以及以交替方式使用的两个间距的情况下。虽然距离通常是实际距离, 但 是也可以使用角度。
在 步 骤 602 中,方 法 600 确 定 距 离 Distance 是 否 小 于 最 小 长 度 - 点 1MinLength-Point1。 如果距离 Distance 小于最小长度 - 点 1MinLength-Point1, 那么进行 至步骤 604。如果距离 Distance 不小于最小长度 - 点 1MinLength-Point1, 然后进行至步 骤 606。 在步骤 604 中, 方法 600 将零返回至步骤 418、 504 或者 508。
在步骤 606 中, 方法 600 确定距离 Distance 是否小于或等于最大长度 MaxLength。 如果距离 Distance 小于或等于最大长度 MaxLength, 那么进行至步骤 608。如果距离 Distance 不小于或者等于最大长度 MaxLength, 那么进行至步骤 610。
在步骤 608 中, 方法 600 将距离 Distance 返回至步骤 418、 504 或 508。
在步骤 610 中, 方法 600 确定距离 Distance 是否小于或等于最大长度 MaxLength+ 间隔 1Spacing1。如果距离 Distance 小于或等于最大长度 MaxLength+ 间隔 1Spacing1, 那 么 进 行 至 步 骤 612。 如 果 距 离 Distance 不 小 于 或 等 于 最 大 长 度 MaxLength+ 间 隔 1Spacing1, 那么进行至步骤 616。
在步骤 612 中, 方法 600 将最大长度 MaxLength 返回至步骤 418、 504 或 508。
使用步骤 602 至步骤 612 来处理待填充的距离小于 (最大长度 + 第一间隔值) 的情 形。方法 600 通常假定存在分支对, 每个相同长度和每对分支将通过间隔 1Spacing1 与其 本身隔开, 并且通过间隔 2Spacing2 与下一对分支隔开。
在 步 骤 616 中, 设 定 测 试 距 离 TestDistance 等 于 距 离 Distance-( (i* 间 隔 1Spacing1) + ( (i-1) * 间隔 2Spacing2) ) 。通过首先减去所有可能需要的间隔, 步骤 616 中 的计算以连续的大量成对分支 (从 1 数起) 开始。然后在步骤 618 至 634 中执行长度核查。 如果被移除的间隔除以分支的对数 (*2) 的结果小于最大长度, 那么其可以被使用, 或者, 如 果其实际较小, 则可以使用最小长度。
在步骤 618 中, 方法 600 确定测试距离 TestDistance/(i*2) 是否小于最小长度 MinLength。如果测试距离 TestDistance/ (i*) 小于最小长度 MinLength, 那么进行至步骤 620。如果 TestDistance/(i*2) 不小于最小长度 MinLength, 那么进行至步骤 622。
在步骤 620 中, 该方法将最小长度 MinLength 返回至步骤 418、 504 或 508。
在步骤 622 中, 方法 600 确定测试距离 TestDistance/ (i*2) 是否小于或等于最大 长度 MaxLength。 如果测试距离 TestDistance/ (i*2) 小于或等于最大长度 MaxLength, 那么
进行至步骤 624。如果测试距离 TestDistance/(i*2) 不小于或等于最大长度 MaxLength, 那么进行至步骤 626。
在步骤 624 中, 方法 600 将测试距离 TestDistance/(i*2) 返回至步骤 418、 504 或 508。
在步骤 626 中, 设定测试距离 TestDistance 等于 T 测试距离 estDistance- 间隔 Spacing2。在步骤 626 至 634 中, 假定不存在偶数个分支, 并且最后一个仅是半对 (也就是 “i” 对 + 多余的一个) 。
在步骤 628 中, 方法 600 确定测试距离 TestDistance/( (i*2) +1) 是否小于最小 长度 MinLength。如果测试距离 TestDistance/( (i*2) +1) 小于最小长度 Minlength, 那么 进行至步骤 630。如果测试距离 TestDistance/( (i*2) +1) 不小于最小长度 MinLength, 那 么进行至步骤 632。
在步骤 630 中, 方法 600 将最小长度 Minlength 返回至步骤 418、 504 或者 508。
在步骤 632 中, 方法 600 确定测试距离 TestDistance/( (i*2) +1) 是否小于或等 于最大长度 MaxLength。如果测试距离 TestDistance/( (i*2) +1) 小于或等于最大长度 MaxLength, 那么进行至步骤 634。如果测试距离 TestDistance/( (i*2) +1) 不小于或等于 最大长度 MaxLength, 那么进行至步骤 635。 在步骤 630 中, 方法 600 将测试距离 TestDistance/( (i*2) +1) 返回至步骤 418、 504 或者 508。
在步骤 635 中, 变量 i 被初始化为等于零。如果 i 小于或等于 100, 那么使 i 加 1 并进行至步骤 616。如果 i 不小于或等于 100, 那么进行至步骤 636。变量 (i) 代表将填充 预定的线性距离的分支的数量。
在步骤 636 中, 方法 600 将零返回至步骤 418、 504 或 508。
以径向模式为水平分支创建目标
现在参考图 7, 其阐释了用于图 1 中步骤 108 的 “findRadialTargetLocations (中 心位置 CenterLocation, 初始规划 InitialPlans) ” 算法的一个实施例。
在步骤 702 中, 设定角度增量 AngleIncr 等于 360/ 初始规划 InitialPlans。初始 规划 InitialPlans 是规划的预定初始量 (也就是第一组径向向外的规划的尺寸) , 其被 360 除从而获得初始角度增量。
步骤 704 中, 初始化 “先前方位表格” , 从而防止多次使用相同方位。
在步骤 706 中, 将角度 Angle 初始化为角度增量 AngleIncr。如果角度 Angle 大于 1, 那么该角度 Angle 除以 2 并且进行至步骤 708。如果角度 Angle 不大于 1, 那么进行至步 骤 720。角度增量 AngleIncr 是分支之间的初始距离。随着循环中的每次通过, 角度 Angle (当前距离) 会被减半。使用一 (1) 度作为截止点, 但也可以为其他优选数字。
在步骤 708 中, 设定距离 Distance 等于 “findDistanceWhereSpacingWorksForDe grees(角度 Angle) ” 。在图 8 中阐释了算法 “findDistanceWhereSpacingWorksForDegree s(角度 Angle) ” 。对于井间距中的给定角度, 存在一半径, 其可用作一系列井的触地点, 其 既是与触地点之间的间隔距离又是围绕一圆的角度距离。因此, 步骤 708 的结果是距离 (半 径) 的值。
在步骤 710 中, 方位 Azimuth 被初始化为等于角度 Angle。如果方位 Azimuth 小
于 360+ 角度 Angle, 那么对方位 Azimuth 增加角度增量 AngleIncr 并且进行至步骤 706, 方法 700 在步骤 708 处重复, 直到不再满足步骤 706 中的条件。如果方位 Azimuth 不小于 360+ 角度 Angle, 那么进行至步骤 712。这是个简单的循环, 从起始位置 (Angle) 开始, 对方 位 Azimuth 增加角度增量 AngleIncr, 直到其变得大于或等于 360+ 角度 Angle。
在步骤 712 中, 方法 700 确定先前是否已用过方位 Azimuth。 如果先前使用过方位 Azimuth, 那么进行至步骤 710。如果先前没有使用过方位 Azimuth, 那么进行至步骤 714。 以这种方式, 根据先前方位表格来核查方位 Azimuth, 从而避免多次使用相同方位。
在步骤 714 中, 将方位 Azimuth 添加至先前方位表格。
在步骤 716 中, 设定 V1 等于 “creatTargetsForPoint (中心位置 CenterLocation, 距 离 Distance, 方 位 Azimuth+ 方 位 偏 移 AzimuthOffset) ” 。在图9中阐释了算法 “creatTargetsForPoint(中心位置 CenterLocation, 距离 Distance, 方位 Azimuth+ 方位 偏移 AzimuthOffset) ” 。围绕圆 (以角度 Angle 为增量) 对于没有使用过的每个方位调用这 种算法。
在步骤 718 中, 将 V1 增加至 V, 并且设定角度增量 AngleIncr 等于角度 Angle。以 这种方式, 重复方法 700, 直到角度 Angle 小于或等于步骤 706 中的一个角度。
在步骤 720 中, 方法 700 将 V 返回至图 1 中的步骤 108。
现在参考图 8, 其阐释了用于图 7 中步骤 708 的 “FindDistanceWhereSpacingWork sForDegrees(角度 Angle) ” 算法的一个实施例。
在步骤 802 中, 算法 800 确定角度 Angle 是否小于 70 度。如果角度 Angle 小于 70 度, 那么进行至步骤 804。如果角度 Angle 不小于 70 度, 那么进行至步骤 806。因此, 根据 被请求的角度是否大于 70 度, 方法 800 在两个三角计算 (步骤 804 或步骤 806) 之间有效地 进行选择。
在步骤 804 中, 方法 800 将井间隔 WellSpacing/Sine(角度 Angle) 返回至图 7 中 的步骤 708。因此, 步骤 804 返回半径标准算法, 给定弧的角度和弦长, 使用井间隔作为弦 长。
在步骤 806 中, 方法 800 将井间隔 WellSpacing/(2*Sine(角度 Angle/2) ) 返回 至图 7 中的步骤 708。因此, 使用步骤 806 来为小于 70 度的角度计算半径。
现 在 参 考 图 9, 其 阐 释 了 图 7 中 用 于 步 骤 716 的 “CreatTargetsForPoint(点 Point, 距离 Distance, 方位 Azimuth) ” 算法的一个实施例。方法 900 创建两个点, 这两个 点从初始点以预定方位延伸, 然后在步骤 910 中使用这两个点来调用算法, 从而获得跟 / 趾 (heal/toe) 位置的实际集。在初始半径和最大半径处创建这两个点。这通过以中心位置 CenterLocation 的正 North 的那些距离处创建各点并且旋转这些点来实现。
在步骤 902 中, 创建 Point 的点 Distance North 并将其设为等于 Point1。
在步骤 904 中, 围绕 Point 将 Point1 以方位 Azimuth 旋转。
在步骤 906 中, 创建 Point 的点 MaximumDistance North 并将其设为等于 Point2。
在步骤 908 中, 围绕 Point 将 Point2 以方位角 Azimuth 旋转。
在 步 骤 910 中,执 行 “extract TargetLocations alongSegment(V, Point1, Point2) ” 算法。 在图 6 中阐释了算法 “extract TargetLocations alongSegment (V, Point1, Point2) ” 。可选择地, 可以使用本领域中用于在初始半径和最大半径处创建两点的其他已知技术。 在步骤 912 中, 方法 900 将 V 返回至图 7 中的步骤 716。
以单向和双向模式为水平分支创建目标
现 在 参 考 图 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, 然而必须从偏距中减去预定井 间距, 直到偏距小于井间距。
在步骤 1002 中, 设定 Point 等于在参考井 ReferenceWell 的 TD 处的 Point。
在步骤 1004 中, 设定方位 Azimuth 等于在参考井 ReferenceWell 的 TD 处的方位 Azimuth。
在 步 骤 1006 中, Line1 被 创 建 为 是 水 平 通 过 投 射 区 域 的 中 心 位 置 (CenterLocation) 的线。
在步骤 1008 中, 将 Line1 以方位 Azimuth 旋转。
在步骤 1010 中, Point1 被创建为是沿着来自中心位置 CenterLocation 的线 Line 1 的点 MaxDistance。
在步骤 1012 中, Line2 被创建为是垂直通过 Point 的线。
在步骤 1014 中, 将 Line2 以方位 Azimuth 旋转。
在步骤 1016 中, 设定 Point0 等于 Line 和 Line2 的交点。
在步骤 1018 中, 设定偏移 Offset 等于 Point0 和 Point1 之间的距离。
在步骤 1020 中, 方法 1000 确定偏移 Offset 是否大于井间隔 Wellspacing。如果 偏移 Offset 大于井间隔 Wellspacing, 那么进行至步骤 1022。如果偏移 Offset 不大于井 间隔 Wellspacing, 那么进行至步骤 1024。
在步骤 1022 中, 设定偏移 Offset 等于偏移 Offset- 井间隔 WellSpacing, 并且返 回至步骤 1020。
在 步 骤 1024 中,设 定 V 等 于 “FindTargetLocations( 偏 移 Offset, 方 位 Azimuth)” 。在图 11 中阐释了算法 “FindTargetLocations( 偏移 Offset, 方位 Azimuth)” 。
在步骤 1026 中, 方法 1000 将 V 返回至图 1 中的步骤 114。
参 考 图 11,其 阐 释 了 用 于 图 10 中 步 骤 1024 和 图 13 中 步 骤 1312 的 “FindTargetLocations( 偏移 Offset, 方位 Azimuth)” 算法的一个实施例。方法 1100 通常 投射垂直于该方位并通过投射区域中心位置的线 (Line1) 。方法 1100 从点 (Poin1) 开始, 该点 (Point1) 是沿着投射垂直线计算的离中心位置的最大距离。方法 1100 进一步沿着那 条线在每个井间距放置一点, 直到其达到在中心位置另一侧上所计算的最大距离。在这些 点中的每一个点处调用步骤 1116 中的 “CreatTargetsForPoint(点 Point) ” 算法, 从而获
得跟 / 趾 heel/toe 对列表, 所述对列表是在那个点处沿着该方位计算的。如果那个列表不 为空, 那么方法 1100 将其添加至总列表 (V) , 其在步骤 1126 中被返回。
在步骤 1104 中, Line1 被创建为是水平延伸通过中心位置 CenterLocation 的线。
在步骤 1106 中, 将 Line1 以方位 Azimuth 旋转。
在步骤 1108 中, 将 Point1 创建为是沿着 Line1 离中心位置的距离为最大的 Point MaxDistance。
在步骤 1110 中, 设定距离 Distance 等于 2* 最大距离 MaxDistance。
在步骤 1112 中, 设定当前位置 CurrentPosition 等于偏移 Offset。
在步骤 1114 中, 将 Point 创建为是沿着 Line1 离 Point1 的距离为当前距离的 Point CurrentPosition。
在步骤 1116 中, 设定矢量 V1 等于 “CreatTargetsForPoint (点 Point) ” 。在图 12 中阐释了 “CreatTargetsForPoint(点 Point) ” 算法。
在步骤 1118 中, 方法 1100 确定 V1 是否为空。如果 V1 不为空, 那么进行至步骤 1120。如果 V1 为空, 那么进行至步骤 1122。
在步骤 1120 中, 将 V1 增加至 V。 在步骤 1122 中, 设定当前位置 CurrentPosition 等于当前位置 CurrentPostion+ 井间隔 WellSpacing。
在 步 骤 1124 中, 方 法 1100 确 定 当 前 位 置 CurrentPosition 是 否 小 于 距 离 Distance。如果当前位置 CurrentPosition 小于距离 Distance, 那么进行至步骤 1114, 在 此重复方法 1100。如果当前位置 CurrentPosition 不小于距离 Distance, 那么进行至步骤 1126。
在步骤 1126 中, 将 V 返回至图 10 中的步骤 1024 或图 13 中的步骤 1312。
现在参考图 12, 其阐释了用于图 11 中步骤 1116 的 “CreateTargetsForPoint(点 Point) ” 的算法。方法 1200 通常创建通过方位方向上的点的线。在这条线与区域边界相交 处提取各点, 使用算法在步骤 1208 中填充该区域。如果存在任何被提取的点, 那么在被提 取的点位于现有规划的井距离 WellDistance(如果需要) 范围内的情况下, 可以通过增加 任意点来修改被提取的点。对于任何剩余的点, 可以使用在步骤 1218 或 1220 中用于由那 些点集来提取实际目标位置的两种算法中的一种算法。 例如, 如果需要匹配现有衬垫位置, 那么可以使用步骤 1218 中的算法。另外, 可以使用步骤 1220 中的算法来获得最佳目标位 置集。
在步骤 1202 中, 将 Line1 创建为垂直延伸通过 Point 的线。
在步骤 1204 中, 将 Line1 以方位 Azimuth 旋转。
在步骤 1206 中, 设定 Point1 和 Point2 为 Line1 的端点。
在步骤 1208 中, 设定 V 等于 “ExtractPointsAlongLine(Point1, Point2) ” 。在 图 15 中阐释了算法 “ExtractPointsAlongLine(Point1, Point2) ” 。
在步骤 1210 中, 方法 1200 确定 V 是否为空。 如果 V 不为空, 那么进行至步骤 1212。 如果 V 是空, 那么进行至步骤 1224。
在 步 骤 1212 中,执 行 “ProcessExisting(V) ” 算 法。 在 图 14 中 阐 释 了 “ProcessExisting(V) ” 算法的一个实施例。
在步骤 1214 中, 设定位置 Location1 等于 V[i-1], 并且设定位置 Location2 等于V[i]。 在 步 骤 1216 中,方 法 1200 确 定 UsePadLocations 是 否 为 真。 如 果 UsePadLocations 为真, 那么进行至步骤 1218。如果 UsePadLocations 不为真, 那么进行至 步骤 1220。
在步骤 1218 中, 执行 “ExtractTargetLocationsAlongSegmentUsingPadLocation s (Vout, 位置 Location1, 位置 Location2) ” 。在图 17A 和图 17B 中阐释了 “ExtractTarget LocationsAlongSegment(Vout, 位置 Location1, 位置 Location2) ” 算法的一个实施例。
在 步 骤 1220 中,执 行 “ExtractTargetLocationsAlongSegment(Vout,位 置 Location1, 位置 Location2) ” 算法。在图 16 中阐释了 “ExtractTargetLocationsAlongSeg ment(Vout, 位置 Location1, 位置 Location2) ” 算法的一个实施例。
在步骤 1222 中, 变量 i 被初始化等于 1。如果 i 小于 V.size() , 那么使 i 增加 2 并且进行至步骤 1214, 在此重复方法 1200。 如果 i 不小于 V.size () , 那么进行至步骤 1224。
在步骤 1224 中, 方法 1200 将 Vout 返回至图 11 中的步骤 1116。Vout 是目标位置 的集合。
现在参考图 13, 阐释了用于图 1 中步骤 116 的 “FindOptimalTargetLocations () ” 算法的一个实施例。方法 1300 使用各种偏距值调用循环中的 “FindTargetLocations (偏移 Offset) ” 算法, 从而查找最佳偏距。如果需要, 方法 1300 也可以对一定范围内的 方位执行这种算法。然而, 优选地, 在大多数情况中方位是固定的, 使得步骤 1312 中的 “FindTargetLocations(偏移 Offset) ” 算法仅执行一次。估算内循环 (步骤 1310 至 1318) 中每个迭代内所查找到的目标位置集的值, 上述过程基于该目标位置集内每个目标位置对 的根 (heel) 和趾 (toe) 之间的距离的简单累计。如果查找到的长度大于先前的最大长度 MaximumLength, 那么更新最大长度 MaximumLength 并且存储目标位置集, 使得当运行完所 有迭代时可将最佳目标对位置集 (VMax) 返回至图 1 中的步骤 116。
在步骤 1302 中, 设定增量等于井间隔 WellSpacing/20。
在步骤 1304 中, 设定最大长度 MaximumLength 等于零。
在步骤 1306 中, 设定方位增量 AzimuthIncrement 等于 Maximum(1(最大方位 MaxAzimuth- 最小方位 MinAzimuth) /10) 。
在 步 骤 1308 中, 方 位 Azimuth 被 初 始 化 为 等 于 最 小 方 位 MinAzimuth。 如 果 方 位 Azimuth 小 于 或 等 于 最 大 方 位 MaxAzimuth, 那 么 使 方 位 Azimuth 增 加 方 位 增 量 AzimuthIncrement, 并且进行至步骤 1310。如果方位 Azimuth 不小于或等于最大方位 MaxAzimuth, 那么进行至步骤 1320。
在 步 骤 1310 中, 初 始 化 偏 移 Offset 等 于 零。 如 果 偏 移 Offset 小 于 井 间 隔 WellSpacing, 那 么 使 偏 移 Offset 增 加 增 量 Increment 并 进 行 至 步 骤 1312。 如 果 偏 移 Offset 不小于井间隔 WellSpacing, 那么进行至步骤 1308。
在 步 骤 1312 中,设 定 V 等 于 “FindTargetLocations(偏 移 Offset,方 位 Azimuth) ” 。在图 11 中阐释了 FindTargetLocations(偏移 Offset, 方位 Azimuth) ” 算法。
在步骤 1314 中, 设定长度 Length 等于 “evaluateTargetLocations(V) ” , 其有效 运行, 以用于每个根 / 趾对的长度的总和, 从而获得用于这个目标位置集的总英尺长度。可
选择地, 可运行这种算法从而获得 “ (根 / 趾) 对” 的总数量或者最大平均长度。
在步骤 1316 中, 方法 1300 确定长度 Length 是否大于最大长度 MaximumLength。 如果长度 Length 大于最大长度 MaximumLength, 那么进行至步骤 1318。如果 Length 不大 于最大长度 MaximumLength, 那么进行至步骤 1310, 方法 1300 在步骤 1312 处重复, 直到不 再满足步骤 1310 中的条件。
在步骤 1318 中, 设定最大长度 MaximumLength 等于长度 Length, 并且设定 Vmax 等 于 V。
在步骤 1320 中, 方法 1300 将 VMax 返回至图 1 中的步骤 116。
现在参考图 14, 其阐释了用于图 12 中步骤 1212 的 “ProcessExisting(V) ” 算法 的一个实施例。方法 1400 搜索一线与现有规划交叉的点, 所述线始于 V 中的第一个点且止 于 V 中的最后一个点。当找到这种点时, 将两个点插入所述集合中, 在交点之前一个井间隔 WellSpacing 和在交点之后一个井间隔 WellSpacing。如果点集合大于 10, 那么存在太多 交叉, 并且在返回至图 12 中的步骤 1212 之前清除 V。
在步骤 1402 中, 设定 Point1 等于 V 的第一元素。
在步骤 1404, 设定 Point2 等于 V 的最后一个元素。
在步骤 1406 中, 创建 Line1 为从 Point1 至 Point2 的分段。
在步骤 1408 中, 对于每个现有规划启动一个循环, 该循环从步骤 1410 开始直到步 骤 1422。当 V 大于 10 或不存在更多规划时, 存在该循环, 并且方法 1400 返回至图 12 中的 步骤 1212。
在步骤 1410 中, 创建 PointA 作为触地点并且创建 PointB 作为在完钻井深 (TD) 处 的点。
在步骤 1412 中, 方法 1400 确定 Line1 是否与分段 PoinA-PointB 相交。 如果 Line1 与分段 PoinA-PointB 相交, 那么进行至步骤 1414。如果 Line1 不与分段 PoinA-PointB 相 交, 那么进行至步骤 1408, 在此对于另一个现有规划重复方法 1400, 或者, 如果不再有其他 规划, 则返回至步骤 1212。
在步骤 1414 中, 设定距离 Distance 等于 Point1 和交点之间的距离, 该交点是 Line1 和分段 PoinA-PointB 的交点。
在步骤 1416 中, 创建位置 Location1 作为沿着 Line1 的点 “距离 Distance- 井间 隔 WellSpacing” 。
在步骤 1418 中, 创建位置 Location2 作为沿着 Line1 的点 “距离 Distance+ 井间 隔 WellSpacing” 。
在步骤 1420 中, 将位置 Location1 和位置 Location2 插入 V 中, 其通过离 Point1 的距离而排序。
在步骤 1422 中, 方法 1400 确定 V 的大小 Size 是否大于 10。如果 V 的大小 Size 大于 10, 那么进行至步骤 1424。如果 V 的大小 Size 不大于 10, 那么进行至步骤 1408, 对于 另一个现有规划重复方法 1400, 或者, 如果不再有其他规划, 则返回至步骤 1212。
在步骤 1424 中, 清空 V。
在步骤 1426 中, 方法 1400 返回至步骤 1212。
在步骤 1428 中, 方法 1400 返回至步骤 1212。现在参考图 15, 其阐释了图 12 中的 “ExtractPointsAlongLine (Point1, Point2) ” 的算法的一个实施例。方法 1500 通常采用两个点, 并且使用步骤 1504 和步骤 1516 中的算 法 (IsGood) , 从而确定特定的点是否在用于目标定位的可接受区域内, 并且获得交点集, 使 得第一点和第二点之间的区域在该可接受区域内并且使得第二点和第三点之间的区域不 在可接受区域内, 等等。如果在沿着位于可接受区域内的 Point1 和 Point2 之间的线上没 有点, 那么在步骤 1532 中返回的集 (V) 将为空。
在步骤 1502 中, 设定增量 Increment 等于 100, 设定最小距离 MinimumDistance 等 于 5, 并且设定最后位置 LastLocation 等于 Point1。
在步骤 1504 中, 设定 LastGood 等于 IsGood( 最后位置 LastLocation)。以这种方 式, 可以跟踪先前被测试的点, 从而确定其是在用于目标定位的可接受区域内还是不在用 于目标定位的可接受区域内。因此, IsGood(最后位置 LastLocation) 可以为现有技术中 用于确定特定 x, y 位置是否为用于水平钻探的有效位置的任何已知的方法, 例如使用边界 和 / 或网格。
在步骤 1506 中, 方法 1500 确定 LastGood 是否为真。如果 LastGood 为真, 那么进 行至步骤 1508。如果 LastGood 不为真, 那么进行至步骤 1510。
在步骤 1508 中, 将 Point1 增加至 V。如果初始点为好点, 那么 LastGood 为真, 并 且将初始点添加至集合 (V) 。
在步骤 1510 中, 设定总距离 TotalDistance 等于从 Point1 至 Point2 的距离。
在 步 骤 1512 中, 将 距 离 Distance 初 始 化 为 等 于 增 量 Increment。 如 果 距 离 Distance 小于总距离 TotalDistance, 那么对距离 Distance 增加增量 Increment, 并且进行 至步骤 1528。如果距离 Distance 不小于总距离 TotalDistance, 那么进行至步骤 1514。
在步骤 1514 中, 将 Point 创建为是沿着从 Point1 至 Point2 的线的点距离。
在步骤 1516 中, 设定 CurrentGood 等于 IsGood(Point) 。
在 步 骤 1518 中, 方 法 1500 确 定 CurrentGood 是 否 不 等 于 LastGood。 如 果 CurrentGood 不等于 LastGood, 那么进行至步骤 1520。如果 CurrentGood 等于 LastGood, 那么进行至步骤 1526。 以这种方式, 方法 1500 搜寻边界点, 其中, 在一侧上的点将是好点并 且在另一侧上的点将是坏点。
在步骤 1520 中, 方法 1500 确定 LastGood 是否为真。如果 LastGood 为真, 那么进 行至步骤 1524。如果 LastGood 不为真, 那么进行至步骤 1522。以这种方式, 方法 1500 搜 索边界点, 其中, 在一侧上的点将是好点并且在另一侧上的点将是坏点。 由于用于搜索边界 的方法 1500 基于好点和坏点的有序集合而运行, 那么根据步骤 1524, 当从好点搜索至坏点 时, 其单向排序 ; 并且根据步骤 1522, 当从坏点搜索至好点时, 其按照另一方向排序。
在步骤 1522 中, 将 getIntercept(点 Point, 最后位置 LastLocation, 最小距离 MinimumDistance) 增加至 V。getIntercept(点 Point, 最后位置 LastLocation, 最小距离 MinimumDistance) 算法可以应用现有技术中已知的技术, 从而沿着线在指定的最小距离内 以从好点至坏点的验收标准查找点。
在步骤 1524 中, 将 getIntercept(最后位置 LastLocation, 点 Point, 最小距离 MinimumDistance) 增加至 V。getIntercept(点 Point, LastLocation, MinimumDistance) 算法可以采用现有技术中已知的技术, 从而沿着线在指定的最小距离内以从好点至坏点的验收标准查找点。
在步骤 1526 中, 设定 LastGood 等于 CurrentGood, 并且设定 LastLocation 等于 Point。
在步骤 1528 中, 方法 1500 确定 IsGood(Point) 是否为真。如果 IsGood(Point) 为真, 那么进行至步骤 1530。如果 IsGood(Point) 不为真, 那么进行至步骤 1532。
在步骤 1530 中, 将 Point2 增加至 V。
在步骤 1532 中, 方法 1500 将 V 返回至图 12 中的步骤 1208。
现在参考图 16, 其阐释了用于图 9 中步骤 910 和图 12 中步骤 1220 的 “ExtractTa rgetLocationsAlongSegment(Vout, 位置 Location1, 位置 Location2) ” 算法的一个实施 例。方法 1600 通常在两个点之间设置一定间距, 并且将该间距分割成等长度根 / 趾对的集 合, 等长度根 / 趾对遵循一定的间隔规则。如果以根 - 趾方式 (也就是, 所有井都面向同一 方向) 布置各井, 那么间隔值是趾根距离 ; 如果以趾 - 跟跟 - 趾顺序布置各井, 那么间隔值是 跟跟和趾趾距离。当将钻垫放置在两个跟之间时, 典型地使用后一顺序, 因此, 跟跟间隔通 常是相当大的值, 该值允许在两个方向上水平建造各井。除了在预定最小和最大分支长度 之间某处的固定间隔和计算井长度, 通常存在另外的剩余空间。根据在步骤 1612-1620 中 确定的判断值, 该空间要么在两端之间等距分割, 要么都放置在队列开始处或队列末端处。 通过在步骤 1620 中设定初始当前位置 CurrentPosition, 对剩余空间寻址。如果模式类型 是双向的 (趾跟 toe-heel 跟趾 heel-toe) , 每个迭代会创建多达四个位置 (用于两个分支) 。 否则, 每个迭代仅会创建最多两个位置 (一分支) 。
在步骤 1602 中, 设定距离 Distance 等于从位置 Location1 至位置 Location2 的 距离。
在步骤 1604 中, 设定井长度 WellLength 等于 “computeWellLengthForDistance (距 离 Distance) ” 。在图5中阐释了算法 “computeWellLengthForDistance(距 离 Distance) ” 。
在 步 骤 1606 中, 方 法 1600 确 定 井 长 度 WellLengt 是 否 等 于 零。 如 果 井 长 度 WellLengt 等于零, 那么进行至步骤 1610。如果井长度 WellLengt 不等于零, 那么进行至步 骤 1608。
在步骤 1608 中, 方法 1600 返回至步骤 910 或步骤 1220。
在步骤 1610 中, 执行用于 ComputeLeftover (距离 Distance, 井长度 WellLength) 的算法。使用现有技术中已知的技术, 通过获得总距离并根据情况相继减去井长度以及跟 跟间隔 HeelHeelSpacing、 趾趾 ToeToeSpacing 或减去跟趾间隔 HeelToeSpacing 的距离, 直 到获得大于或等于零并小于 “井长度 + 适当间隔” 的量, 从而计算得到剩余量。
在步骤 1612 中, 方法 1600 确定判断 Justification 是否为 LEFT。如果判断是 LEFT, 那么进行至步骤 1614。如果判断不是 LEFT, 那么进行至步骤 1616。
在步骤 1614 中, 设定当前位置 CurrentPosition 等于零。
在步骤 1616 中, 方法 1600 确定判断 Justification 是否为 RIGHT。如果判断是 RIGHT, 那么进行至步骤 1618。如果判断不是 RIGHT, 那么进行至步骤 1620。
在步骤 1618 中, 设定当前位置 CurrentPosition 等于剩余量 LeftOver。
在步骤 1620 中, 设定当前位置 CurrentPosition 等于剩余量 LeftOver/2。在步骤 1622 中, 方法 600 确定当前位置 CurrentPosition+ 井长度 WellLength 是否大于距离 Distance。如果当前位置 CurrentPosition+ 井长度 WellLength 大于距离 Distance, 那么进行至步骤 1624, 如果当前位置 CurrentPosition+ 井长度 WellLength 小于 距离 Distance, 那么进行至步骤 1630。
在 步 骤 1624 中, 设 定 井 长 度 WellLength 等 于 距 离 Distance- 当 前 位 置 CurrentPosition。
在 步 骤 1626 中,方 法 1600 确 定 井 长 度 WellLength 是 否 小 于 最 小 分 支 长 度 MinimumLateralLength。 如 果 井 长 度 WellLength 小 于 最 小 分 支 长 度 MinimumLateralLength, 那么进行至步骤 1628。 如果井长度 WellLength 不小于最小分支长 度 MinimumLateralLength, 那么进行至步骤 1630。
在步骤 1628 中, 方法 1600 返回至步骤 910 或步骤 1220。
在步骤 1630 中, 位置 Location 被创建为是沿着来自 Point1 的线 Line 1 的点 CurrentPosition。
在步骤 1632 中, 将位置 Location 添加至 Vout。
在步骤 1634 中, 使当前位置 CurrentPosition 增加井长度 WellLength。
在步骤 1636 中, 当前位置 Location 被创建为是沿着来自 Point1 的线 Line1 的点 CurrentPosition。
在步骤 1638 中, 将位置 Location 添加至 Vout。
在步骤 1640 中, 方法 1600 确定模式类型 PatternType 是否是 BIDIRECTIONAL。 如果模式类型 PatternType 是双向 BIDIRECTIONAL, 那么进行至步骤 1644。如果模式类型 PatternType 不是双向 BIDIRECTIONAL, 那么进行至步骤 1642。
在步骤 1642 中, 使当前位置 CurrentPostion 增加趾跟间隔 ToeHeelSpacing。
在步骤 1644 中, 使当前位置 CurrentPostion 增加跟跟间隔 HeelHeelSpacing。
在步骤 1646 中, 创建位置 Location 为离沿着 Line1 的 Point1 的 Point CurrentPo sition。
在步骤 1648 中, 将位置 Location 添加至 Vout。
在步骤 1652 中, 使当前位置 CurrentPostion 增加井长度 WellLength。
在 步 骤 1654 中, 位 置 Location 被 创 建 为 是 沿 着 来 自 Point1 的 线 Line1 的 点 CurrentPosition。
在步骤 1656 中, 将位置 Location 添加至 Vout。
在步骤 1658 中, 使当前位置 CurrentPostion 增加趾趾间隔 ToeToeSpacing。
在步骤 1660 中, 当当前位置 CurrentPostion 小于距离 Distance 时, 在循环中重 复方法 1600, 并且在步骤 1622 处重复该方法。如果当前位置 CurrentPostion 不小于距离 Distance, 那么在步骤 1660 中的循环命令进行至步骤 1662。
在步骤 1662 中, 方法 1600 返回至步骤 910 或步骤 1220。
现 在 参 考 图 5, 其 阐 释 了 用 于 图 16 中 步 骤 1604 的 “ComputeWellLengthForDistance(距离 Distance) ” 算法的一个实施例。方法 500 通常执 行核查以确定模式类型 PatternType 是否为双向 BIDIRECTIONAL, 并且对于作为间隔参数 的跟跟间隔 HeelHeelSpacing 和趾趾间隔 ToeToeSpacing 或者趾跟间隔 ToeHeelSpacing调用 “ComputeWellLengthForDistance” 算法。
在步骤 502 中, 方法 500 确定模式类型 PatternType 是否为双向 BIDIRECTIONAL。 如果模式类型 PatternType 为双向 BIDIRECTIONAL, 那么进行至步骤 504。如果模式类型 PatternType 不是双向 BIDIRECTIONAL, 那么进行至步骤 508。
在 步 骤 504 中,执 行 “ComputeWellLengthForDistance(距 离 Distance,最 小 分 支 长 度 MinimumLateralLength, 最 大 分 支 长 度 MaximumLateralLength, 跟跟间隔 HeelHeelSpacing, 趾趾间隔 ToeToeSpacing) ” 算法。在图 6 中阐释了这种算法的一个实施 例, 其在上文中已描述过。
在步骤 506 中, 方法 500 将井长度 WellLength 返回至图 16 中的步骤 1604。
在 步 骤 508 中,执 行 “ComputeWellLengthForDistance(距 离 Distance,最 小 分 支 长 度 MinimumLateralLength, 最 大 分 支 长 度 MaximumLateralLength, 趾跟间隔 ToeHeelSpacing, 趾跟间隔 ToeHeelSpacing) ” 算法。在图 6 中阐释了这种算法的一个实施 例, 其在上文中已描述过。
在步骤 510 中, 方法 500 将 WellLength 返回至图 16 中的步骤 1604。
现在参考图 17A 和图 17B, 其阐释了用于图 12 中步骤 1218 的 “ExtractTargetLoc ationsAlongSegmentUsingPadLocations(Vout, 位置 Location1, 位置 Location2) ”算法 的一个实施例。当规划分支井时, 方法 1700 提出了重视特定衬垫位置的需求。方法 1700 并没有在多个衬垫位置之间试图配合尽可能多的分支井, 而是沿着线识别位置 Location1 和位置 Location2 之间的点, 位置 Location1 和位置 Location2 离该线的每个端部都足够 远, 从而满足最小分支长度限制, 并与其中一个衬垫位置足够近, 从而可以从该衬垫到达位 置 Location1 或位置 Location2, 而不需要与衬垫近得没有空间建立 90 度的分支井。
在步骤 1702 中, 设定距离 Distance 等于位置 Location1 和位置 Location2 之间 的距离。
在 步 骤 1704 中, 方 法 1700 确 定 距 离 Distance 是 否 小 于 最 小 分 支 长 度 MinimumLateralLenth。 如果距离 Distance 小于最小分支长度 MinimumLateralLenth, 那么 进行至步骤 1706。如果距离 Distance 不大于最小分支长度 MinimumLateralLenth, 那么进 行至步骤 1708。这个步骤执行核查以确保两个点 (位置 Location1 和位置 Location2) 之间 的距离至少与最小分支长度 MinimumLateralLenth 一样大。
在步骤 1706 中, 方法 1700 返回至步骤 1218。
在步骤 1708 中, 设定距离 Distance 1 等于 “FindFirstDirectionalHell(位置 Location1, 位置 Location2) ” 。在图 18 中阐释了算法 “FindFirstDirectionalHell(位置 Location 1, 位置 Location2) ” 。这一步骤沿着线定位第一方向跟 heel 距离。该距离是沿 着线到第一位置的距离, 其可以用作朝向与线段相同的方向的分支井的触地点。这个距离 通过距离 Distance1 表示。距离 Distance1 可以等于步骤 1702 中的距离 Distance(也就 是, 位置 Location1 和位置 Location2 之间的总距离, 如果 FindFirstDirectionalHeel 不 成功) 。
在 步 骤 1710 中, 方 法 1700 确 定 模 式 Pattern 是 否 为 双 向 BIDIRECTIONAL。 如 果模式 Pattern 为双向 BIDIRECTIONAL, 那么进行至步骤 1712。如果模式 Pattern 不是 双向 BIDIRECTIONAL, 那么进行至图 17B 中的步骤 1740。因此, 如果模式 Pattern 是双向BIDIRECTIONAL, 那么方法 1700 会沿着线识别 Distance1 点之前的点, 在 Distance1 点处, 该方法会开始在其他方向上搜索彼此相对的分支井。
在步骤 1712 中, 设定新距离 NewDistance 等于距离 Distance1。
在步骤 1714 中, 方法 1700 确定距离 Distance1 是否小于距离 Distance。如果 距离 Distance1 小于距离 Distance, 那么进行至步骤 1716。如果距离 Distance1 不小于 Distance, 那么进行至步骤 1718。
在步骤 1716 中, 设定新距离 NewDistance 等于新距离 NewDistance- 跟跟间隔 HeelHeelSpacing。
在步骤 1718 中, 创建新点 NewPoint 为沿着位置 Location1 和位置 Location2 之 间的线的点 NewDistance。现在这个点 (NewPoint) 在步骤 1720 的算法中用作第一个点。
在 步 骤 1720 中, 设 定 距 离 Distance1 等 于 “FindFirstDirectionalHeel(新 点 NewPoint, 位置 Location1) ” 。在图 18 中阐释了算法 “FindFirstDirectionalHeel(新点 NewPoint, 位置 Location1) ” 。
在步骤 1722 中, 设定距离 Distance2 等于新距离 New Distance- 距离 Distance1。 因此, 距离 Distance2 是沿着从新点 NewPoint 至 Point1 的段、 从 Point1 至第一个可能触 地点的距离。 在步骤 1724 中, 方法 1700 确定距离 Distance2 是否大于零。若果距离 Distance2 大于零, 那么进行至步骤 1726。 如果距离 Distance2 不大于零, 那么进行至图 17B 中的步骤 1740。因此, 如果距离 Distance2 是零, 那么没有查找到着落点。
在 步 骤 1726 中,设 定 长 度 Length 等 于 距 离 Distance2- 最 大 分 支 长 度 MaximumLateralLength。
在步骤 1728 中, 方法 1700 确定长度 Length 是否小于零。如果长度 Length 小于 零, 那么进行至步骤 1730。如果长度 Length 不小于零, 那么进行至步骤 1732。
在步骤 1730 中, 设定长度 Length 等于零。
在步骤 1732 中, Heel 被创建为是沿着位置 Location1 和位置 Location2 之间的 线的点 Distance2。
在步骤 1734 中, 方法 1700 确定距离 Distance2- 长度 Length 是否大于或等于最小 分支长度 MinimumLateralLength。如果距离 Distance2- 长度 Length 大于或等于最小分 支长度 MinimumLateralLength, 那么进行至步骤 1736。如果距离 Distance2- 长度 Length 不大于或等于最小分支长度 MinimumLateralLength, 那么进行至步骤 1738。
在步骤 1736 中, Toe 被创建为是沿着位置 Location1 和位置 Location2 之间的线 的点 Length, 并且将 Heel 和 Toe 中的每一个都添加到 Vout。
在步骤 1738 中, 执行 “CheckForOverlappingToes(Vout, Heel) ” 算法。执行这种 算法以确定是否仍然存在规划分支井的方法。在图 19 中阐释了这种算法的一个实施例。
在步骤 1740 中, 设定新距离 NewDistance 等于零。
在步骤 1742 中, 方法 1700 确定距离 Distance1 是否小于距离 Distance。如果距 离 Distance1 小于距离 Distance, 那么进行至步骤 1744。如果距离 Distance1 不小于距离 Distance, 那么进行至步骤 1754。
在 步 骤 1744 中, Heel 被 创 建 为 是 沿 着 位 置 Location1 和 位 置 Location2 之
间 的 线 的 点 Distance1, 并 且 设 定 长 度 Length 等 于 距 离 Distance 1+ 最 大 分 支 长 度 MaximumLateralLenth。
在步骤 1746 中, 方法 1700 确定长度 Length 是否小于距离 Distance。如果长度 Length 小于距离 Distance, 那么进行至步骤 1748。 如果长度 Length 不小于距离 Distance, 那么进行至步骤 1750。
在步骤 1748 中, 设定长度 Length 等于距离 Distance。
在步骤 1750 中, 方法 1700 确定长度 Length- 距离 Distance1 是否大于或等于最 小分支长度 MinimumLateralLength。 如果长度 Length- 距离 Distance1 大于或等于最小分 支长度 MinimumLateralLength, 那么进行至步骤 1752。如果长度 Length- 距离 Distance1 不大于或等于最小分支长度 MinimumLateralLength, 那么进行至步骤 1754。
在步骤 1752 中, Toe 被创建为是点沿着位置 Location1 和位置 Location2 之间的 线的点 Length, 将 Heel 和 Toe 中每一个都添加到 Vout, 并且设定新距离 NewDistance 等于 长度 Length+ 趾趾间隔 ToeToeSpacing。
在步骤 1754 中, 方法 1700 确定新距离 NewDistance 是否大于零。如果新距离 NewDistance 大于零, 那么进行至步骤 1756。如果新距离 NewDistance 不大于零, 那么进行 至步骤 1758。
在步骤 1756 中, 新点 NewPoint 被创建为是沿着位置 Location1 和位置 Location2 之间的线的点 NewDistance。
在步骤 1757 中, 执行 “ExtractTargetLocationsAlongSegmentUsingPadLocation s(Vout, 新点 NewPoint, 位置 Location2) ” 算法。基本上, 为 (Vout, 新点 NewPoint, 位置 Location2) 递归地调用方法 1700。
在步骤 1758 中, 方法 1700 返回至步骤 1218 或步骤 1757。
现 在 参 考 图 18,其 阐 释 了 用 于 图 17 中 的 步 骤 1708 和 1720 的 “FindFirstDirectionalHeel(位置 Location1, 位置 Location2) ” 算法的一个实施例。基 于已知衬垫位置的集合, 方法 1800 通常沿着线段查找用作跟 heel 或触地点的第一点。方 法 1800 递增地遍历该线段。
在步骤 1802 中, 设定距离 Distance 等于位置 Location1 和位置 Location2 之间 的距离。
在步骤 1804 中, 设定增量 Increment 等于 2.5。然而, 可以使用其他增量, 取决于 所需的精确度和性能效率。
在步骤 1806 中, 设定期望方位 DesiredAzimuth 等于从位置 Location1 至位置 Location2 的方位 Azimuth。
在 步 骤 1808 中, 将 当 前 位 置 CurrentPosition 初 始 化 为 零。 如 果 当 前 位 置 CurrentPosition 小于距离 Distance, 那么使当前位置 CurrentPosition 增加增量增量 Increment, 并进行至步骤 1810。如果当前位置 CurrentPosition 不小于距离 Disatnce, 那 么进行至步骤 1832。
在步骤 1810 中, 点 Point 被创建为是沿着位置 Location1 和位置 Location2 之间 的线的点 CurrentPosition。
在步骤 1812 中, 为从步骤 1814 开始到步骤 1828 的预定设计中的每个衬垫执行循环。针对在步骤 1810 中创建的点 Point 核查每个衬垫, 并且在针对该点 Point 核查完设计 中的所有衬垫后, 控制循环返回到步骤 1808 定义另一个点 Point, 并针对该另一个点 Point 核查每个衬垫。
在 步 骤 1814 中, 设 定 衬 垫 距 离 PadDistance 等 于 从 该 点 至 衬 垫 Pad 的 距 离 Distance。
在 步 骤 1816 中, 方 法 1800 确 定 衬 垫 距 离 PadDistance 是 否 大 于 最 大 触 地 距 离 MaximumLandingDistance。 如 果 衬 垫 距 离 PadDistance 大 于 最 大 触 地 距 离 MaximumLandingDistance, 那 么 进 行 至 步 骤 1812。 如 果 衬 垫 距 离 PadDistance 不 大 于 最 大 触 地 距 离 MaximumLandingDistance, 那 么 进 行 至 步 骤 1818。 将 最 大 触 地 距 离 MaximumLandingDistance 定义为衬垫中的狭槽的数量除以 2(为侧面每个方向) ; 如果存 在堆叠的分支井, 那么再次除以 2 ; 并且如果模式是双向的, 那么再次除以 2。其结果乘以 井间隔 WellSpacing。因此, 具有 8 个狭槽的、 双向的但非堆叠的衬垫会具有 2* 井间隔 WellSpacing 的最大触地距离, 因此其可以向外伸出足够远, 从而在在每一侧上每个方向上 获得两个分支井, 总共 8 个, 与狭槽的数量匹配。
在 步 骤 1818 中, 方 法 1800 确 定 衬 垫 距 离 PadDistance 是 否 小 于 最 小 触 地 距 离 MinimunLandingDistance。 如 果 衬 垫 距 离 PadDistance 小 于 最 小 触 地 距 离 MinimunLandingDistance, 那 么 进 行 至 步 骤 1812。 如 果 衬 垫 距 离 PadDistance 不 小 于 最 小 触 地 距 离 MinimunLandingDistance, 那 么 进 行 至 步 骤 1820。 最 小 触 地 距 离 MinimunLandingDistance 是其为井采取的距离, 用于建成水平位置的井。 因此, 最小触地距 离 MinimunLandingDistance 可以被设计为是跟跟间隔 HeelHeelSpacing 的一半, 因为跟跟 间隔 HeelHeelSpacing 是其为了在相对方向上建立两个达到 90 度的井而采取的距离。
在步骤 1820 中, 设定方位 Azimuth 等于从衬垫 Pad 至点的方位 Azimuth。
在 步 骤 1822 中, 设 定 方 位 增 量 DeltaAzimuth 为 方 位 Azimuth- 期 望 方 位 DesiredAzimuth 的绝对值。
在步骤 1824 中, 设定最大增量 MaximumDelta 等于 90-ArcSine(最小触地距离 MinimumLandingDistance/ 衬垫距离 PadDistance) 。这种计算旨在创建与垂直于期望方位 Azimuth 的直线对齐而不是位于围绕衬垫的弧形内的触地点。
在 步 骤 1826 中, 方 法 1800 确 定 方 位 增 量 DeltaAzimuth 是 否 大 于 最 大 增 量 MaximumDelta。 如果方位增量 DeltaAzimuth 大于最大增量 MaximumDelta, 那么进行至步骤 1812。如果方位增量 DeltaAzimuth 不大于最大增量 MaximumDelta, 那么进行至步骤 1828。
在步骤 1828 中, 方法 1800 确定从衬垫 Pad 至点 Point 的段 Segment 是否与任何 障碍物相交。如果从衬垫 Pad 至点 Point 的段 Segment 与任一障碍相交, 那么进行至步骤 1812。如果从衬垫 Pad 至点 Point 的段 Segment 没有与任何障碍物相交, 那么进行至步骤 1830。
在步骤 1830 中, 方法 1800 将当前位置 CurrentPosition 返回至图 17 中的步骤 1708 或步骤 1720。当前位置 CurrentPosition 是沿着位置 Location1 和位置 Location2 之间的分段的当前距离。由于其正被返回, 那么其是在第一点处被核查为是合适距离并在 离衬垫的容许角度内的距离。如果不成功, 在步骤 1832 中返回分段 (距离) 的总长度。
在步骤 1832 中, 方法 1800 将 Distance 返回至图 17 中的步骤 1708 或步骤 1720。现在参考图 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。
在步骤 1902 中, 方法 1900 确定 Vout 的大小 Size 是否小于 2。如果 Vout 的大小 Size 小于 2, 那么进行至步骤 1903。 如果 Vout 的大小 Size 不小于 2, 那么进行至步骤 1904。
在步骤 1903 中, 方法 1900 返回至步骤 1738。
在步骤 1904 中, 设定位置 LocationH 等于 Vout 的第二各至最后一个元素, 并且设 定位置 LocationT 等于 Vout 的最后一个元素。
在步骤 1906 中, 方法 1900 确定从位置 LocationH 至跟 Heel 的方位 Azimuth 是否 等于从位置 LocationT 至跟 Heel 的方位 Azimuth。如果从位置 LocationH 至跟 Heel 的方 位 Azimuth 不等于从位置 LocationT 至跟 Heel 的方位 Azimuth, 那么进行至步骤 1907。如 果从位置 LocationH 至跟 Heel 的方位 Azimuth 等于从位置 LocationT 至跟 Heel 的方位 Azimuth, 那么进行至步骤 1908。
在步骤 1907 中, 方法 1900 返回至步骤 1738。
在 步 骤 1908 中, 方 法 1900 确 定 从 位 置 LocationT 至 跟 Heel 的 距 离 Distance 是否大于最小分支长度 MinimumLateralLength+ 趾趾间隔 ToeToeSpacing。如果从位置 LocationT 至 Heel 的距离 Distance 大于最小分支长度 MinimumLateralLength+ 趾趾间隔 ToeToeSpacing, 那么进行至步骤 1909。如果从位置 LocationT 至跟 Heel 的距离 Distance 不大于最小分支长度 MinimumLateralLength+ 趾趾间隔 ToeToeSpacing, 那么进行至步骤 1910。
在步骤 1909 中, 方法 1900 返回至步骤 1738。
在 步 骤 1910 中, 设 定 距 离 Distance 等 于 从 位 置 LocationH 至 跟 Heel 的 距 离 Distance。
在 步 骤 1912 中, 方 法 1900 确 定 距 离 Distance 是 否 小 于 (2* 最 小 分 支 长 度 MinimumLateralLength) + 趾趾间隔 ToeToeSpacing。如果 Distance 小于 (2* 最小分支长 度 MinimumLateralLength) + 趾趾间隔 ToeToeSpacing, 那么进行至步骤 1913。如果距离 Distance 不小于 (2* 最小分支长度 MinimumLateralLength) + 趾趾间隔 ToeToeSpacing, 那 么进行至步骤 1914。
在步骤 1913 中, 方法 1900 返回至步骤 1738。
在步骤 1914 中, 设定长度 Length 等于 (距离 Distance- 趾趾间隔 ToeToeSpacing)/2。 在步骤 1916 中, 从 Vout 中去除位置 LocationT。
在步骤 1918 中, 位置 LocationT 被创建为是沿着从位置 LocationH 至跟 Heel 的 分段的点 Length。
在步骤 1920 中, 将跟 Heel 添加至 Vout。
在步骤 1922 中, 将趾 Toe 添加至 Vout。
在步骤 1923 中, 方法 1900 返回至步骤 1738。
因此, 本发明能够以单个水平分支或堆叠水平分支来填充边界区域。 使用本发明, 最初可以产生同心和径向水平分支。 预定义参数指示会被用于定位和填充边界区域的几何 形状和方位。如有需要, 可以定义内部边界区域以截去水平分支顶端。此外, 如果在边界 区域中存在断层, 那么将该断层用于终止水平分支并且在离断层一定距离处开始新的水平 分支。本发明还允许将水平分支放置在用于合适深度布置的特定地下网格上, 并且如果需 要也可以从其处偏移设置, 从而保持与例如石油 / 水接触的特定距离。可以指定单向和双 向方向, 并且在后者情况中, 建议计算趾 / 趾 (heel/heel) 分隔从而确保用于衬垫的最佳位 置。
系统说明
可以通过计算机可执行的指令程序来实施本发明, 例如程序模块, 其通常被称为 计算机执行的软件应用或应用程序。例如, 软件可以包括例行程序、 程序、 对象、 组件以 及执行特定任务或实施特定抽象数据类型的数据结构。软件形成了允许计算机根据输 入源作出反应的界面。由 Landmark Graphics Corporation 销售的商业软件应用程序 AssetPlannerTM 可被用作实施本发明的界面应用程序。软件也可以与其他代码段协作, 从 而响应连同所接收的数据源一起接收的数据以开始多种任务。软件可以存储在和 / 或携 载在任何种类的存储介质上, 例如 CD-ROM、 磁盘、 磁泡存储器以及半导体存储器 (例如, 各种 RAM 或 ROM) 。此外, 可以通过各种载体介质, 例如光纤、 金属线和 / 或通过各种网络, 例如 Internet, 传输软件和其结果。
此外, 本领域技术人员会意识到, 可以使用各种计算机系统配置实施本发明, 包括 手提式装置、 多处理器系统、 基于微处理器或消费者可编程电子线路、 迷你计算机、 微型计 算机、 主机计算机等。本发明可以使用任何数量的计算机系统和计算机网络。可以以分布 式计算环境实施本发明, 在这种环境中, 通过远程处理装置执行这些任务, 该远程处理装置 通过通信网络链接。在分布式计算环境中, 程序模块可以位于本地和远程计算机存储介质 中, 包括存储器存储装置。 因此, 结合各种硬件、 软件或它们的组合, 可以在计算机系统或其 他处理系统中实施本发明。
现在参考图 21, 其阐释了用于在计算机上实施本发明的系统的框图。该系统包括 计算单元, 有时称为计算系统, 其包括存储器、 应用程序、 数据库、 浏览器、 ASCII 文件、 客户 端界面、 视频接口和处理单元。 计算单元仅仅是合适的计算环境的一个例子, 并不旨在对本 发明的使用或功能性范围提出任何限制。
存储器主要存储应用程序, 其也可以被描述为包含计算机可执行指令的程序模 块, 由计算单元执行这些指令以实施在此描述和在图 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 销售 的商业软件应用。
尽管显示的计算单元具有通用存储器, 但是计算单元典型地包括多种计算机可读 介质。示例性的但非限制性的, 计算机可读介质可包括计算机存储介质。计算系统存储器 可以包括易失性和 / 或非易失性存储器形式的计算机存储介质, 例如只读存储器 (ROM) 和 随机存取存储器 (RAM) 。 在 ROM 中典型地存储有基本输入 / 输出系统 (BIOS) , 其包含基本例 行程序, 这些程序有助于例如在启动期间计算单元内各元件之间的信息传输。 RAM 典型地包 括数据和 / 或程序模块, 处理单元可以立即使用这些模块或者可以立即通过处理单元运行 这些模块。示例性的但非限制性的, 计算单元包括操作系统、 应用程序、 其他程序模块和程 序数据。
在存储器中显示的元件也可以包含在其他可移动 / 不可移动、 易失性 / 非易失性 计算机存储介质中, 或者可以通过应用程序界面 ( “API” ) 在计算单元中实施这些元件, 其可 以驻留在通过计算机系统或网络连接的分离的计算单元上。例如, 硬盘驱动器可以从非移 动、 非易失性磁性介质读取或对其写入 ; 磁盘驱动器可以从移动、 非易失性磁盘读取或对其 写入 ; 并且光盘驱动器可以从移动、 非易失性光盘读取或对其写入, 例如 CD ROM 或者其他 光学介质。可在示意性操作环境中使用的其他移动 / 非移动、 易失性 / 非易失性计算机存 储介质包括但不限于 : 盒式磁带、 闪存卡、 数字式多功能光盘、 数字视讯磁带、 固态 RAM、 固 数据结构、 态 ROM 等。上述讨论的驱动器及其相关计算机存储介质提供对计算机可读指令、 程序模块和用于计算单元的其他数据的存储。
客户可以通过客户端界面将指令和信息输入计算单元, 客户端界面可以是输入装 置, 比如键盘和定点设备, 通常称为鼠标、 追踪球或触摸板。 输入装置可以包括麦克风、 操纵 杆、 碟式天线、 扫描仪等。这些和其他输入装置通常通过系统总线连接至处理单元, 但是也 可以通过其他界面与总线结构连接, 例如并行端口或通用串行总线 (USB) 。
可以将监视器或其他类型的显示装置经由接口、 例如视频接口连接至系统总线。 图形用户界面 ( “GUI” ) 也可以与视频接口一起使用, 从而从客户端界面接收指令并将指令 传输至处理单元。 除了监视器之外, 计算机还可包括其他外围输出装置, 例如扬声器和打印 机, 其可通过输出外围接口连接。尽管没有显示出计算单元的许多其他内部组件, 本领域技术人员会意识到, 这些 组件和其内部连接是众所周知的。
虽然已经关于目前的优选实施例描述了本发明, 但是本领域技术人员应理解 : 其 不是旨在将本发明限制于那些实施例。 尽管本发明所阐释的实施例涉及水平石油和天然气 井的创建和定位, 但是本发明也可应用于其他领域和学科中的任何其他类型的井。 因此, 在 不偏离通过随附权利要求书和其等同物定义的本发明精神和范围的情况下, 可以设想出各 种可替换实施例并对所附实施例进行修改。