李仁忠
关键词:压裂设计;深度剖面;井筒;可视化;PyQtGraph
页岩气分布广泛,开发潜力巨大,是常规石油天然气的理想接替能源。近年来,页岩气在非常规天然气中的异军突起已成为全球油气资源勘探开发的新亮点,并逐步向全方位的变革演进,世界主要资源国都加大了对页岩气的勘探开发力度[1]。但是,页岩气成藏规律、储集空间、渗流规律以及开发模式有其自身特点,特别是储层具有低孔特征和极低的基质渗透率, 给有效开发带来很大的困难和挑战。研究表明,水平井是页岩气藏的最佳开发方式,而分段压裂是水平井的关键配套技术[2]。分段压裂工艺通过使用桥塞、射孔枪以及连续油管等工具辅助,在地层产生裂缝网络,尽可能提高水平井的产能[3]。
压裂设计,是压裂施工前一项十分重要的工作。它根据已知的井筒条件(水平段长度、套管接箍深度、地质层位、地层特性等)确定井筒各段的划分、射孔簇位置、桥塞位置,制定泵注程序、液体用量、施工步骤等内容[4]。以往的工作中,所有的设计结果均是以数据表格的方式呈现,如套管接箍数据表、分段数据表、射孔数据表等,形式单一,不够直观,也不利于发现设计隐患。因此,对水平井井筒剖面进行可视化研究,直观呈现井下各种设计元素的相对位置与关系,对减少设计失误、避免工程事故,具有非常重要的现实意义。
1 井筒剖面可视化研究
1.1 目标
井筒剖面可视化涉及的内容非常广泛,包括井筒、套管、水泥环、地层、井眼轨迹等内容,需要的数据量非常大[5]。为了突出主要矛盾、简化工作量,本文仅针对压裂设计过程中涉及的水平段的套管接箍数据、射孔数据、分段数据、桥塞深度数据等内容进行处理,形成按空间实际位置进行图形显示的效果[6]。由于水平井的水平段长度一般都达到了几千米,相对于井筒直径100多毫米来说,井筒是一个又细又长的管子。因此,可视化研究非常重要的一项功能就是:形成的井筒剖面图形必须要具备平移、缩放等功能,这样才能让使用者既了解全貌,又能细查局部,像查看电子地图一样查看井筒内部各元素的位置、有效长度、相对关系等情况,将数据表格的内容,变成二维剖面的图形。
1.2 编程语言的选择
通过对比C++、Java、Python、JavaScript 等各种编程语言在图形化方面的功能与效果,最终选择了Py?thon作为软件的基础框架。Python语言是一种语法简洁易懂,编程速度快、容易学习、扩展功能强的解释型语言。其应用领域涵盖Web网站、自动化、爬虫、图形界面、数据分析、图像处理、科学计算、游戏、人工智能等。由于Python语言的简洁性、易读性、可扩展性,以及免费、开源的特点,国内外使用Python语言的人越来越多,目前已经成为编程领域的第四大语言[7]。
1.3 图形模块的选择
Python语言的本身的功能不算强大,但是依托其开源及可扩展性,全世界的程序员们为其开发了20多万种模块(第三方库),各种功能应有尽有,形成了一个庞大的生态系统。Python中能够实现图形输出的模块较多,应用较广的有Pyecharts、Matplotlib、tkinter、PyQtGraph、Turtle等,通过对比其功能与效果,最终选择了PyQtGraph模块作为实现手段。PyQtGraph是一种功能强大的2D/3D绘图库,支持Linux、Windows和OSX系统。虽然该库完全用Python编写,但因其内部使用了Qt的GraphicsView框架及Numpy计算库,使其在图形绘制及数据处理速度方面有着极其优异的表现,特别适合于实时数据采集和动态图形绘制场合[8]。
使用PyQtGraph设计绘图功能,无须进行人机交互的设计,因为交互功能已经集成在模块内部了,省却了许多精力。编程的重点在于数据的准备,即各种参数与深度的映射關系,这是研究的核心。而将数据输出到图形,仅仅需几行语句(见图1) ,以最小的工作量实现了数据的可视化。
1.4 实现过程
第一步,准备数据。将压裂设计中采集到的套管接箍数据表、射孔数据表、分段数据表(含桥塞深度),整理后分别另存为.csv数据文件。用文本编辑器检查.csv文件格式,将其中文件末尾的空白行、空字符串等内容删除。
第二步,软件读取以上数据,根据其各自的深度范围,确定一个合适的深度上界与深度下界,将上述深度范围涵盖其中,一般将分段范围的顶部与底部各外延50m,以便图形更加美观。
第三步,从深度上界开始,到下界结束,以0.1m为增量,使用循环语句,生成类似于测井数据的井筒深度剖面数据。数据的第1列为深度值,第2列为接箍深度值,第3列为射孔深度值,第4列为桥塞深度值,第5列为分段深度值。具体到每条曲线的数值的确定,经过反复模拟,得出了如下经验:接箍曲线的取值范围为0~6,没有接箍的地方,取值为0,有接箍的地方,取值为6。
射孔曲线的取值范围为-4~0,没有射孔的地方取值为0,有射孔的地方取值为-4。为了形成尖峰状的效果,在连续射孔部位,每两个-4之间,强行插入一个0,使曲线出现震荡波形。
桥塞曲线的取值范围为0~3。桥塞位置一般只给一个中心点深度值,而不是一个深度范围。为了模拟出桥塞的折线形状,采用了如下的算法:距离桥塞深度点±1m的地方,取值2;距离桥塞深度点±0.5m的地方,取值3;其余地方取值为0。采用填充模式绘制曲线,在曲线值与0之间填充颜色。
分段曲线的取值范围为-2或-3,其中奇数段取值为-2,偶数段取值为-3,以便区分各段的边界。采用填充模式绘制曲线,在曲线值与0之间填充颜色,正好又实现了模拟套管外水泥环的目的。
第四步,数据校验。将射孔深度、桥塞深度与接箍深度进行比对,凡是间距小于2m的,显示警告信息(见图3) ,提示设计人员进行整改,避免事故隐患。以往一直靠人眼根据深度数据查找错误,效率低且容易漏报。软件的这个功能大大减轻了人员劳动强度。
第五步,讀取文件数据,在绘图窗口绘制曲线。X 轴为深度,Y轴为井筒直径。每个参数绘制两条曲线,沿井筒中心线(y=5) 对称分布。8条曲线合成到一起,就得到了仿真的井筒剖面样式,见图2。
依托PyQtGraph模块强大的交互操作功能,就可以用鼠标左键对图形进行平移操作,用鼠标右键进行缩放操作,其中X轴(深度)可以无级缩放,在屏幕上全屏显示的深度范围可以从0.1m到10 000米,缩放比例达到惊人的十万倍以上。
2 可视化实现方法
2.1 软件界面设计
软件操作界面设计见图3,主要包括6个按钮、一个文本输入框、一个信息提示窗。
软件的图形显示界面见图4和图5。图4是井筒全貌显示的时候,显示区域为某井约2 000m长度的水平段井筒、划分为23段。图5是将图形拖放到10米左右,只显示一根套管的井筒情况。
图形在X轴和Y轴方向可以单独缩放,依靠鼠标右键拖动实现,操作十分顺滑,既能总揽全局,又可以细窥局部,操作体验十分友好。
2.2 软件的功能设计
软件的运行流程主要有三步:1) 依次点击“打开数据文件”按钮,选择对应的数据文件。2) 点击“数据处理”按钮,进行数据处理,生成类似于测井数据格式的文件,同时校对射孔、桥塞与接箍的距离,距离小于2m时显示警告信息。3) 点击“显示图形”按钮,软件将新开一个窗口,全貌显示井筒剖面图形,等待用户的操作。
在图形显示窗口,单击鼠标右键,可以调出一个功能菜单,用其中的“Export”功能,可以将窗口内的图形导出成图片文件,方便汇报展示。
软件有3个贴心的设计:一是选择数据文件后,软件会自动从文件名上提取出井号信息,显示在图形界面标题上,省去了手工输入的麻烦。二是设计了一根光标线,见图6,可以用鼠标拖动位置,并跟随显示光标线对应的深度值,方便对井筒某处的深度进行精确读值。三是软件可以智能判断数据的完整度,不必须要接箍、射孔、分段这三个数据文件齐备才可以显示,例如手上只有接箍数据,依然可以在其他数据缺省的情况下显示出接箍剖面图形。
3 结论
基于Python语言及PyQtGraph图形引擎开发的井筒剖面可视化软件,在涪陵页岩气田的压裂设计工作中得到了应用,对压裂施工的井筒剖面进行精细显示和交互化操作,可以更加直观、形象地观察不同井段的工具位置及施工部位,进行设计验证,达到了检查施工隐患、提高设计效率、提升设计水平的良好效果。
下一步,可以在此基础上对软件进一步完善,拓展功能。比如增加自动分段分簇功能、实现图形化的泵注程序设计等,形成一套智能化、可视化的压裂设计辅助软件,为页岩气开发提供技术支撑。