APP下载

低渗油藏压裂水平井数值模拟系统的设计与实现∗

2020-07-13井晓萌李华昱

计算机与数字工程 2020年5期
关键词:模拟系统关键字油藏

龚 安 井晓萌 费 凡 李华昱 付 彤

(中国石油大学(华东)计算机与通信工程学院 青岛 266580)

1 引言

近年来,随着油气资源量不断减少以及国内油藏开采成本相对较高,我国油藏开采的现代化程度迫切需要进一步地提高。油藏数值模拟及可视化系统是当今石油工业中油藏分析最有效的工具之一,随着计算机软硬件技术以及油藏工程科学的不断发展,油藏数值模拟在探索复杂渗流问题、衡量油田开发好坏、提高采收率和开发调整上具有重大意义。目前常见的油藏数值模拟商业软件有:Eclipse、Vip、More等,这些商业软件经过长期的发展和完善能处理大部分的油藏模拟问题。然而,油藏实际地质条件是非常复杂的,并且在实际应用中也存在着各种各样的问题。随着中高品位储层的油气资源量不断减少,低渗油藏已经逐渐成为我国油田增产的主要来源,然而上述商业软件都是基于广义达西定律的黑油模型或组分模型上,在低渗油藏下并不适用[1]。本文针对低渗油藏的特点,设计开发了一种基于Windows平台的低渗油藏压裂水平井数值模拟及可视化系统。

2 油藏模拟系统开发研究概述

2.1 油藏数值模拟系统开发任务

油藏数值模拟系统一般包括:前处理系统、油藏数值模型计算器、后处理可视化系统这三个部分。前处理系统目的是为计算提供最直接的输入数据。油藏模拟数据是复杂的,它不仅表现在格式类型上,还在精度、可信度等很多方面都有要求。前处理系统一般包括下面这些模块:文件管理、控制参数输入、网格剖分、输出控制等;油藏数值模型计算器是建立在数学模型之上的,它将一套用于描述油藏物理性质的数学模型转化为数值模型,再应用各种数值解法从计算机上得到所需结果;而后处理系统是将这些结果以各种形式直观、生动地展示出来,以提高分析效率。

2.2 油藏数值模拟系统开发环境

随着科技的发展,计算机软硬件得到了飞速的发展,这使得油藏数值模拟系统在普通PC机上得到很好的支持。普通PC机的操作系统主要为Win⁃dows和linux。因为linux环境下安装虚拟机可以支持大多数语言编写的程序,所以对开发语言并没有严格的要求。

图形开发模块:Xlib、OpenGl、AWT绘图系统(Java)、VTK、调用Matlab画图模块进行混编等技术。

网络传输协议:TCP/IP协议。

数据库模块:鉴于数据规模大小、稳定性以及使用成本,推荐使用Oracle或者SQL Server。

计算模块:计算模型普遍较为复杂,其中包含偏微分方程、二次积分等复杂数学公式,为了编程的方便性以及计算的准确性,一般均是使用混编技术进行封装,常见的组合有:C(或C#或C++或Ja⁃va)+Matlab(或Python或Fortran)。

3 压裂水平井数值模拟平台设计与实现

3.1 油藏数值模拟模型

目前油田矿场生产实践和室内实验结果均表明,低渗储层基质渗流不符合经典的达西定律,存在较强的非线性渗流现象。考虑到这种非线性渗流现象的影响,本系统开发采用了一种新型的油藏模型[1],它针对低渗、致密储层的渗流规律,同时考虑分段压裂水平井基质中的非线性流动、裂缝中的达西流动、水平井井筒内的水力压降流动,是一种经由实践检验准确率非常高的计算模型。

3.2 系统主要功能设计

1)前处理系统。该模块主要是进行项目文件管理、参数数据处理、网格划分。用户在前处理系统中可以对井的数据进行增删改查,可以对各种数据格式的文件进行格式统一。现今各种数据格式(如Simbest数据、Vip数据等等)繁杂,基于这种现状,本系统在解决数据兼容性问题时选择将各种数据类型通过函数转换将数据转换成统一的矩阵格式以便核心计算模块进行计算。此外,本系统还支持从EXCEL、TXT文档中读取已经编辑好格式的数据,还集成了对数据单位格式统一的功能。

2)产能计算。主要根据前处理模块得到数据通过核心计算组件来计算出各水平井各裂缝在不同时间不同条件下的产量。

3)参数优化。该系统通过对数据进行分析,并且应用核心算法进行计算可以对参数进行优化以得到最高产量,降低产油成本,对实践有巨大指导意义。

4)图形显示及动画模拟。该系统在使用时为了方便用户更直观地分析油藏和油井,对油藏实现了2D、3D模型可视化,对水平井实现了产能变化动态展示、压力及压力梯度场动态展示、压力等值线等多种功能。

图1 软件架构

3.3 数据库设计

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

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

1)油藏表:保存油藏名称、油藏编号、包含水平井数、开始日期、结束日期、创建人员等,其中油藏编号是主键;

2)油井表:保存基本信息如:油井名称、油井编号、坐标、类型、描述、裂缝条数、所属油藏名称等,其中油井编号为主键;

3)公共参数表:保存每一口井的孔隙度、初始渗透率、地层原始压力、油层厚度、原油粘度、原油密度等,其中油井编号为主键;

4)裂缝参数表:保存每条裂缝的裂缝半长,裂缝宽度、裂缝间距、渗透率以及裂缝的坐标信息。

5)用户表:保存用户ID、登录名、密码、第二密码、权限。

4 关键技术

4.1 数据格式转换

由于各种数据格式文件繁多,本系统设计了数据格式转换功能。其主要思想是对不同的关键字分别进行处理,这其中又涉及到文件中关键字的顺序、数据单位的变换、数组的排列与重新组合、默认项的重新设置等复杂因素的影响。由于从Txt和Excel中提取数据实现较为简单,本文以VIP格式转换为例,其工作主要流程如下:1)打开一个VIP格式文件。2)逐行读取数据,如若为空行或者注释行则跳过读取下一行,若为文件尾则结束。3)如若该行中包含有关键字,则对关键字进行提取,并且进行关键字数据字典的查询。根据查询结果判定数据行是否可以进行处理,如果可以处理,则转入相应处理功能模块;如若不能处理,则跳过该关键字并且记录入日志,进入下一行处理。

在数据格式转换模块中,系统设计了一套数据字典,并且设计了关键字类对关键字进行数据封装。VIP格式转换的主要工作是在VIPParsing类中实现的,其主要操作如下:

void Vip_processing();//打开VIP格式文件,进行扫描提取关键字

Keyword Kd_search(const Csting&);//查询关键字数据字典,返回一个关键字对象

void Parsingsting(const Csting&,int);//将一个字符串行转换为一个字符串数组

……

4.2 核心计算

油藏模拟计算模型一般较为复杂,其中包含较多且复杂的数学计算(如隐式积分、偏微分方程组等),用java、c++、c#这种常用开发语言较难实现并且计算速度较为缓慢,因此本系统的核心计算模块采用Matlab语言编写,将之打包成dll库混编入程序,更高效地在计算机上实现了油藏数值模型。

4.2.1 Matlab计算组件

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

function f=F(x,y,i,j,t,fai,ct,h,k0,miu)

yitay=k0/(fai*miu*ct/86.4);

yitax=yitay;

g=@(deta)((1。/(4*x(i)*sqrt(pi*yitay。*(t-deta)))).*exp((-(y(j)-y(i))^2./(4*yitay*(t-de⁃ta)))).*(erf(x(i)./(2*sqrt(yitax*(t-deta))))));

f=(quadl(@(beta)g(beta),0,1))/(fai*ct*h);//对一个时间步隐式积分

系统的产能计算、压力及压力梯度计算、参数优化等功能均是建立在Matlab计算组件上,通过复杂的数学模型[1]设计实现的。

4.2.2 Matlab与.Net混编

Matlab拥有一些.Net平台所没有的强大的科学函数库,并且可以直接提供给.net使用,将Matlab与.net混编可以提高生产力,提高开发效率和增加代码的复用率。Matlab与.Net混编的步骤主要如下。

1)在Matlab中编写好M函数;

2)输入deploytool命令,选择.Net Assembly,编译为dll文件;

3)在开发项目中添加生成的dll文件引用,进行调用操作。

4.2.3 多线程技术

线程是指进程中的一条执行路径(控制流),它包含独立的堆栈和CPU寄存器状态,每个进程内允许包含多个并行执行的路径,这就是多线程[4~5]。多线程技术可以很好地提升软件计算速度与效率,使软件在处理大型数据时拥有更快地速度。示例代码如下:

Thread th=new Thread(new ThreadStart(On⁃GuoTeng)); /*新建线程*/

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

th.IsBackground=true;//设置为后台线程

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

/*自定义函数*/

public void Compute()

while(true)

{/*详细代码*}

4.3 绘图及动画技术

系统在可视化展示模块中对于各类统计图使用了.Net平台下的最常用的开源控件ZedGraph,ZedGraph有很多优点:它可以动态生成,不用保存文件,可以减少IO的读写消耗,能快速简洁地实现多种二维统计图。在画各类统计图时只需调用Zedgraph函数,传递参数设置必要的属性即可快速画出各类统计图。

系统在绘制油藏2D、3D模型及水平井压力图、水平井压力梯度等各种图时采用了GDI+绘图技术,通过自定义函数绘制出所需图片再经由Pic⁃turebox控件进行展示,由于系统的自定义画图函数较为复杂,本文不展示具体代码。

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

5 系统实现与应用

系统采用Visual Studio 2010集成开发环境,数据库服务器则采用SQL Server 2008关系型数据库,系统架构采用C/S结构。图2~图4分别为公共参数界面、产能计算和水平井压力图界面。

图2 水平井公共参数模块图

图3 水平井产能计算模块图

图4 水平井压力场模拟模块图

6 结语

本文针对低品味油藏数值模拟软件较少的问题,基于低渗油藏的特点,采用了多线程技术设计并实现了低渗油藏压裂水平井数值模拟系统,在理论研究和指导实践生产中有广阔的应用前景和一定的研究价值。

猜你喜欢

模拟系统关键字油藏
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
深层超稠油油藏蒸汽吞吐后转汽驱实验研究
页岩油藏提高采收率技术及展望
复杂断块油藏三维地质模型的多级定量评价
成功避开“关键字”
玉米淀粉水解液的制备及对油藏中产甲烷菌的激活
玉米淀粉水解液的制备及对油藏中产甲烷菌的激活
采煤机模拟试验台在梁宝寺煤矿研究及推广应用
实培计划—初中开放性科学实践课程
智能垃圾箱