APP下载

油藏产能评价系统的设计与实现

2020-08-26龚安姚鑫杰

电脑知识与技术 2020年20期
关键词:多线程分形油藏

龚安 姚鑫杰

摘要:针对油臧体积压裂水平井生产过程中渗吸对采油的影响,设计实现了一种基于Windows平台下的油藏体积压裂下产能系统。基于分形理论和半解析方法,建立了考虑渗吸的多元线性分形模型,采用Visual Studio与MA'rLAB混合编程和多线程技术,实现了项目管理、模型计算、分析对比可视化等功能,并提升了数据处理速度。为了提高系统的稳定性,减少资源开销,设计了系统异常检测,采用线程池和异步操作。实践表明,油藏体积压裂下产能系统作为现代油田开发技术的科学决策工具,在工程和研究中起着重要的作用。

关键词:油藏;体积压裂;分形;渗吸;多线程;混合编程

中图分类号:TP391.9 文献标识码:A

文章编号:1009-3044(2020)20-0009-04

Design and Implementation of Reservoir Productivity Evaluation System

GONG An. YAO Xin-jie

(College of Computer Science and Technology, China University of Petroleum (East China), Qingda0 2665 80. China)

Abstract: Aiming at the effect of' imhibition on oil recovery during the production of horizontal wells in reservoir volume fracturing,a productivity system under reservoir volume fracturing based on Windc}ws platform is designed and implemented. Based on fractaltheory and semi-analytical method, a multivariate linear fractal model considering imbibition was established. Using Visual Studioand MATLAB mixed programming and multi-threading technology, it realized the functions of project management, model calcula-tion, analysis and comparison visualization and improved data processing speed. In order to improve the stability of the system andreduce resource overhead, the system anomaly detection is designed, using thread pool and asynchronous operation. Practice showsthat the productivity system under reservoir volume fracturing, as a scientific decision tool for modern oilfield development technol-ogy, plays an important role in engineering and research.

Key words: reservoir: volume fracturing; fractal; multithreading; hybrid programming

1背景

隨着国内外学者们不断深入研究,在油藏体积压裂水平井中建立体积压裂水平井多区复合流动模型逐渐发展完善,但是目前的多区复合流动模型并不能准确地描述油藏储层体积压裂水平井渗流特征。因此迫切需要提出一个结合油藏储层特征和体积压裂缝网结构的水平井流动模型来描述流体渗流规律[1]。为了更好地描述油藏体积压裂水平井生产过程中渗吸对采油的影响,利用油藏工程和数值模拟方法,考虑渗吸作用下,对油藏缝网条件下产能计算模型进行研究。拟基于多区耦合的压裂水平井产能计算流动模型,重新划分不同流动特征的渗流区域,考虑引入窜流修正项对渗吸区域进行精细刻画,建立综合考虑启动压力梯度以及渗吸机制的多区耦合渗流数学模型[2],对不同因素影响渗吸的机理进行分析,对不同渗吸机制作用下的压裂水平井产量变化规律及产能计算进行数学建模与软件研制。针对油藏的特点,本文设计开发一种基于Windows平台的油藏体积压裂下产能系统,为有效评价大规模体积压裂改造效果和能量补充效果提供支持。

2油藏体积压裂下产能系统开发研究概述

2.1油藏体积压裂下产能系统开发任务

油藏体积压裂下产能系统一般包括:项目管理子系统、油藏产能计算子系统、可视化子系统。项目管理子系统主要为油藏产能计算提供相关数据。部分油藏数据需要进行大量计算才能得到,这不仅需要多次迭代,还要保证一定的精度。项目管理子系统主要包含模块:项目管理、数据参数等;油藏产能计算子系统是建立在考虑多因素的数学模型之上的,通过将一系列的产能计算问题转换为数学模型,再通过多种半解析解法,用拉普拉斯变换和迭代法,最终给出近似解析解;可视化子系统主要将通过计算数学模型得出的结果以多种形式并在符合相关理论的基础上直观地展示出来,从而便于观察、分析、评价。

2.2油藏体积压裂下产能系统开发环境

油藏体积压裂下产能系统基于Windows操作系统,采用MATLAB 2014a、SQL Server 2008关系数据库管理系统、VisualStudio 2013集成开发环境进行开发[3]。由于产能模型需要大量的计算,所以采用VS与MATLAB混合编程技术,通过将MAT-LAB中的.m文件封装成DLL文件引入VS中。用户可以通过安装对应版本的MCRInstaller搭建运行环境。

3油藏体积压裂下产能系统设计

3.1油藏体积压裂下产能模型

目前大多数油藏多裂缝水平井模型都是基于经典的简化双孔介质模型[4],但是该模型忽略了渗吸的影响。断裂体系的分布具有非均匀性、多尺度性、白相似性等特点,模型能否考虑分形和渗吸的影响,对油藏体积压裂下产能有重要影响。考虑到渗吸现象的影响,本系统开发采用一种考虑渗吸的多元线性分形油藏模型,它基于分形理论和半解析方法,针对致密储层的渗流规律,同时考虑多裂缝水平井在油藏储层中的流体流动,是一种经由实践检验准确率非常高的计算模型;在该模型中,采用分形理论来描述非均匀性[5]。通过模拟流体的横向流动规律,考虑复杂的缝网和渗吸作用并且用拉普拉斯变换和迭代法给出近似解析解。

3.2系统主要功能设计

项目管理子系统主要负责项目文件管理、数据参数存储与处理。用户在项目管理子系统中可以对井的数据参数进行增、删、改、查等操作[6],部分数据参数还可以通过已有的数据参数计算自动获取。由于数据参数的格式繁多,可能会造成计算结果偏差、精度不一等问题。针对此类问题,数据参数存储自动统一格式及精度,便于得到理想的计算结果。此外,本系统的数据参数除了手动输入,还支持EXCEL文件导入方式,且集成对数据单位格式及精度统一的功能。

油藏产能计算子系统主要利用项目管理子系统中存储的数据参数,通过将在MATLAB环境下建立的数学模型封装成DLL文件引入VS中作为核心计算组件来计算得到各直井、水平井在不同时间不同条件下的产量,再通过多线程技术提高计算效率[7-8]。

可视化子系统通过对油藏产能计算子系统计算得到的数据进行分析处理,并且应用控件、绘图函数等进行绘图,可以为有效评价大规模体积压裂改造效果和能量补充效果提供有效支持[9]。该子系统在使用时为了让用户更直观、便捷地观察、分析油藏直井、水平井在各种条件下的日产量、累产量变化,对油藏产量实现可视化,展示直井日产量变化、直井累产量变化、渗吸作用的直井日产量变化、渗吸作用的直井累产量变化、水平井日产量变化、水平井累产量变化、渗吸作用的水平井日产量变化、渗吸作用的水平井累产量变化、直井压力变化、无因次化压力及压力导数图版、无因次化产量及产量导数图版、压力场与压力梯度场对比界面、产能计算界面、裂缝条数优化界面、裂缝半长优化界面、裂缝半长优化界面等。

3.3数据库设计

本系统采用C/S结构,即Client/Server(客户机/服务器)结构[10-11],主要由数据库服务器及软件系统组成。数据库采用微软公司的SQL Server 2008平台,它是一种廣泛使用的数据库系统,具有强大且便捷的数据存储和管理能力。

油藏数据库的关系模式如下:

1)油藏项目表:保存油田名称、项目名称、区块名称、开始日期、结束日期、创建人员等,其中项目名称是主键;

2)油井表:保存油田名称、项目名称、区块名称、井号等,其中项目名称为主键;

3)直井参数表:保存直井的项目名称、起始时间、终止时间、间隔时间、储层物性参数、双重介质参数、渗吸计算参数、油藏几何参数等,其中项目名称为主键;

4)水平井参数表:保存水平井的项目名称、起始时间、终止时间、间隔时间、井端距离、段端距离、缝端距离、段数、簇数、储层物性参数、双重介质参数、渗吸计算参数、油藏几何参数等,其中项目名称为主键;

5)用户表:保存登录账号、登录密码、操作权限等,其中登录账号为主键。

4关键技术

4.1数据参数导入

由于油藏参数种类繁多,手动输入参数效率较低,针对该问题,系统设计了数据参数导入功能。Excel的字段一一对应油藏数据库的字段分别进行处理。其工作流程如下:1)打开一个后缀名为.xlsx格式的Excel文件;2)ExCel文件第一行的字段值对应油藏数据库表里字段值进行设定;3)通过调用函数建立连接,逐行读取数据。

在数据参数导入模块中,系统将核心导人操作进行封装,在导入模块的.cs文件里进行调用即可完成数据参数导人,其主要操作如下:

new System. Data. OleDb. OleDbConneCtion(strCon);//根据链接信息实例化链接对象

new System. Data. OleDb. OleDbDataAdapter(strCom. Conn);//对数据源执行的sql语句或存储过程

myCommand.Fill(ds,"[Sheetl$]");//将Excel文件里的数据存储到内存中的缓存

4.2核心计算

油藏体积压裂下产能模型较为复杂,其中包含大量的计算(如拉普拉斯变换、偏微分方程组等)和较多且复杂的数学公式[12-13],常用开发语言较难实现,例如:C++、C#、Java,并且这些语言操作较为烦琐,因此系统的核心计算模块采用MATLAB实现,将.m文件打包封装成DLL库混编引入程序,提升产能模型计算效率,更高效地优化软件性能。

4.2.1 MATLAB计算组件

MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、For-tran)的编辑模式,代表了当今国际科学计算软件的先进水平。系统的核心计算就是基于MATLAB编写的,以其中无因次化毛管力计算函数为例:

function[pcD]= PCD( AA, SWD, BB, sigma, thet, porm, km,qq,vis,kf,h)

pc=AA*SwD^BB*sigma*cos(thet)*(porm/km/10)^0.5;//有因次化毛管力计算

pcD=pc./(qq*vis/kf/h/10);//无因次化毛管力计算

通过在MATLAB环境下建立复杂的油藏数学模型,从而计算得到数据参数、产能、压力等数据。

4.2.2 VS与MATLAB混编

MATLAB拥有丰富且强大的科学函数库,部分函數库在VS集成开发环境不具备。因此,通过VS与MATLAB混合编程可以给VS直接提供丰富的科学函数库使用,将VS与MATLAB混合编程可以提高计算速度、提升开发效率、简化操作和增加代码的复用率。VS与MATLAB混合编程的步骤主要为:

1)在MATLAB中编写好.m函数;

2)在命令行窗口输入deploytool命令,选择Library Compil-er,在DEPLOYMENT中选择.Net Assembly,添加.m文件并对该封装命名,在Additional Runtime Settings中选择对应版本的Mi-crosoft Framework.最后点击Package进行打包封装得到DLL文件;

3)在开发项目中通过添加DLL文件的引用,实例化对象后调用函数进行操作。

4.2.3多线程技术

线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源[14],但它可与同属一个进程的其他线程共享进程所拥有的全部资源[15]。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效地提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量[16-20]。因此,多线程技术可以使软件在处理大规模数据计算时显著提高运行效率。此外,在设计与实现过程中,分模块处理也为多线程操作打下基础[21]。示例代码如下:

Thread probar= new Thread(Prcx:essBar);//新建线程,Pro-cessBar必须是无返回值的方法

probar.Start();//开始线程

prohar.lsBackground= true;//设置为后台线程

probar.Abort();//终止线程

/*自定义函数*/

public void ProcessBar()

{

{/*详细代码*}

}

4.2.4系统异常检测

针对油藏体积压裂下产能系统计算量较大,通过使用记录消耗的时间来测试性能。当计算操作超时,防止系统出现无响应或等待时长过长,可以使用线程池提高线程的复用。为了提高系统的并发性,采用多线程技术。但是,创建线程会消耗较大的资源,为了提高系统交互性,系统使用异步操作,特别是在短时间内频繁进行异步操作时,频繁创建和销毁线程会造成较多资源的浪费。因此,通过将一些线程存放在线程池中,当系统需要新建线程执行操作时就可以从已有的线程池中取出一个空闲线程使用。如果线程池中没有空闲线程,且线程池中的线程数未达到线程池上限,则新建一个线程,使用完成后再放回到线程池中。这样可以节省大量创建线程的资源,通过CLR管理线程池的策略来管理线程池中线程的最大和最小数。此外,通过全局异常捕捉、UI线程异常捕捉、多线程异常捕捉,记录异常日志,提供用户可选择的异常解决方案。

4.2.5系统绘图技术

系统使用了.Net平台下的开源控件ZedGraph,实现可视化展示的各个模块。ZedGraph可以通过减少IO的读写消耗,从而提高系统性能,且可以动态生成,不用保存文件。

系统在绘制油藏2D、3D模型及水平井压力图、水平井压力梯度等各种图时采用了GDI+和MATLAB绘图技术,通过白定义函数绘制出所需图片再经由Picturebox控件进行展示。

系统在散点绘图并渲染成面参考了MATLAB散点插值函数,为了取得更好的插值效果,使用径向基函数方法,但其运算量和内存需求较大。

动画展示指定时间段内的压力变化时,仅需调用System、Windows、rorms、Timer控件,在Timer Tick事件中切换图片即可实现动画效果。

5系统实现与应用

系统采用Visual Studi0 2013集成开发环境和SOL Server2008关系数据库管理系统,系统架构采用C/S结构。图2~图4分别为压力场与压力梯度场对比界面、产能计算界面、裂缝条数优化界面。

6结束语

本文针对油藏体积压裂水平井生产过程中渗吸对采油的影响,基于油藏的特点,采用多线程技术设计并实现了油藏体积压裂下产能系统。实际应用表明,该系统在理论研究和指导生产实践中有广阔的应用前景和一定的研究价值。

参考文献:

[1]Zhu D W, Yang Z M, Wang X W,et al.New productivity eval-uation model for segregated fracturing horizontal well in lowpermeability and tight reservoir[Jj. Electronic Journal of Ceo-technical Engineering, 2013(18Z): 5981-5992.

[2]徐思勇.致密油藏水平井体积压裂效果影响因素[J].化学工程与装备,2018(10): 94-95.

[3]黄文博,燕杨.C/S结构与B/S结构的分析与比较[J].长春师范学院学报,2006(8): 56-58.

[4]贾婷,何强,孙明.致密油区体积压裂效果分析[J].西安文理学院学报(自然科学版),2017,20(2): 113-116.

[5] Wang Z Y,Yang Z M, Ding Y H,et al.A multi-linear fractalmodel for pressure transient analysis of multiple fractured hori-zontal Wells in tight oil reservoirs including imbibition[Jl.Fractals. 2019. 27(1): 1940004.

[6]趙志升,李桂权.一种基于B/S结构与C/S结构结合的新体系结构[J]电子技术应用,2004(8): 7-9.

[7]范朝阳,张良驹.多线程程序设计的概念与应用[J].小型微型计算机系统,1996(4): 1-6.

[8]骆斌,费翔林.多线程技术的研究与应用[J].计算机研究与发展,2000,37(4): 407-412.

[9]林旺,范洪富,王志平,等.致密油藏体积压裂水平井产量预测研究[J].油气地质与采收率,2018,25(6): 107-113.

[10]陈俊斌.C/S与B/S结合的软件体系结构[J].电子技术与软件工程,2015(3): 68-69.

[11]张红瑞,张彦,吕延岗.结合实例探讨C/S和B/S结构的应用[J].商场现代化,2009(10): 15-16.

[12]苏皓,雷征东,张荻萩,等.致密油藏体积压裂水平井参数优化研究[J].岩性油气藏,2018,30(4): 140-148.

[13]曾凡辉,郭建春,赵金洲,等.水平井分级压裂优化设计软件研制及应用[J].石油地质与T程,2008,22(1):78-81.

[14]张华,卢慧.多线程技术在数据库编程中的应用[J].计算机与信息技术,2005(8): 54-55.

[15]林恒建.多线程技术的实现与研究[J].福建电脑,2011,27(11): 109-110.

[16]徐洪斌,苏铁熊,董小瑞.多线程技术及其实现[J].山西电子技术,2003(3): 15-16,27.

[17]郑宇生,赵长胜.C#多线程编程技术在数控测井软件中的应用[J].国外测井技术,2012(4): 71-73.

[18]彭庆喜,陈军威,周威.基于C#多线程的Web实体抽取设计与实现[J].软件导刊,2013,12(1): 84-86.

[19]崔朝霞,张文婧,张准,等.基于.NET的多线程编程设计与实现[J].数字技术与应用,2014(5): 163.

[20]茅胜荣,肖家文,乔东海.嵌入式C语言中的面向对象与多线程编程[J].单片机与嵌入式系统应用,2017,17(5): 22-26.

[21]魏翠,李文全,徐素萍.基于Web的高校贫困助学管理系统设计与实现[J].电脑知识与技术,2020,16(12): 90-92.

【通联编辑:谢媛媛】

收稿日期:2020-05-08

基金项目:国家油气重大专项(项目编号:2017ZX05013-001)

作者简介:龚安(1971-),男,四川巴中人,副教授,硕士生导师,CCF会员(62929M),硕士,研究方向为大数据智能处理;姚鑫杰(1996一),男(白族),云南大理人,硕士在读,研究方向为大数据智能处理。

猜你喜欢

多线程分形油藏
低渗油藏注采结构调整与挖潜技术
感受分形
基于模糊数学的油藏干层识别研究
分形之美
分形——2018芳草地艺术节
分形空间上广义凸函数的新Simpson型不等式及应用
Java并发工具包对并发编程的优化
注CO2混相驱候选油藏筛选评价新方法
致密油藏多级压裂水平井数值模拟及应用