论文部分内容阅读
在油田的二次开发及多元部署中,剩余油研究是工作的核心。这需要通过搞清开发过程中井网、井距、生产层、井别的变化以分析油水运动规律。这就需要将变化情况按时间以图形方式体现出来,便于分析。目前,大型软件操作较为复杂,而且由于有时本身会自带数据管理系统,需要进行额外的数据整理,有时需要另存有备份文件;而较小的软件功能并不十分完善。大量的井数据和井别变动数据的整理需要花费工作人员很多精力和时间,而实用油藏软件通过较为简捷的处理,提高了工作效率。
1 程序设计1.1 流程设计
基本思路为,通过读取常用格式文件或数据库获得数据,采用J2EE技术进行开发。通过对业务流程与数据流程的详细分析,制定 本软件的程序流程图,如图1。
1.2 结构设计
1.2.1?程序结构设计
通过对需求进行分析,本软件共设计数据读取模块,处理模块,图形绘制模块及保存模块四个模块。
1.2.2?数据结构设计
就分析设计层面来说,面向对象技术提供了更高级的抽象能力以及更多的方法和工具,如设计模式;就实现维护层面来说,面向对象技术使代码重用更容易,且使代码具有可扩展性,便于软件的维护和升级更新。
因此,针对井的属性特点和用户需求,采用面向对象的设计思路,将“井”作为一个基本对象,存储生产数据和属性数据,封装绘制和计算方法。如图2所示。
2 数据获取
本软件支持Excel文件和SqlServer数据库两种不同形式的数据源,在应用中用户可根据实际情况随意指令。
2.1 Excel文件
Jxl.jar是通过java操作excle表格的类库。他支持目前的所有excel版本,所具有的功能均能很好的满足当前的需要。将jxl.jar放入classpath或放入指定的External JARs即可使用。
使用语句如下:
Workbook wb = Workbook.getWorkbook(new File(filename));
S h e e t s h e e t = w b . g e t S h e e t(sheetname);
Cell cell1=sheet.getCell(0,0);
通過读取Workbook,到读取sheet,最终得到各个单元格的数据。
为兼容文件中数据的无序性,本软件采用了以下步骤进行数据读取:
(1)建立二级生产数据集合,一级为存放整体数据,二级为存放单井数据
(2)建立生产属性类,比较井名加入二级集合,当井名不同后,将二级集合加入一级集合,依次循环2.2 SqlServer数据库
本软件通过J D B C数据接口连接到SQLServer数据库,建立一个数据库连接对象,利用此连接生产Statement对象,再利用此对象执行SQL语句,完成对数据库的查找和更新[1]。主要执行语句如下:
sqlConn = baseDataS.ConSqlServer(sqlConn,ip,user,passwd);
st = sqlConn.createStatement();
rs1 = st.executeQuery("sql语句 ");rs1.next();
rs1.getString(“条件”);
利用SQL语句比较容易实现数据的排序和分类,只需在语句中给定排序条件和分组
3 数据处理3.1 井轨迹计算
斜度、大斜度井和水平井是目前油田开发的主要井型,在钻井实施过程中,要使实际轨迹完全符合设计是不可能的,因此有必要进行井斜的计算,以满足工程和地质对井眼轨道控制要求。通过对测量数据进行计算,可得到井的垂深及各测量深度的偏移量。
实钻轨迹计算的基本方法是:计算出各测段的坐标增量,然后从井口开始自上而下依次累加,得到各测点的坐标值。
程序中采用了其中较为常见的五种计算井轨迹的算法进行编写,包括平均角法、校正平均角法、曲率半径法和国内外最小曲率法的算法。具体算法参见《井眼轨道几何学》及《钻井工程理论与技术》中提供的十种计算方法。3.2 层位计算
由于井斜的存在,斜井在各个层位的具体位置都不相同,这直接关系到井间距离,和井的构造位置。因此在绘图时必须考虑到目的层的井位。取到分层数据后,通过线性方法计算分层深度所对应的斜深和方位角、井斜角,再通过井轨迹的计算方法计算相应垂深,绘图时,标在目标位置。
公式如下
pointY =(y2-y1)*(x-x1)/(x2-x1)
+y1 (式1)
其中,x是目标层斜深,x1、x2是上下测点的斜深,y1、y2为上下测点相对应的井斜角或方位角,通公式(1)计算目标层的井斜角和方位角,然后即可利用软件提供的5种计算方法计算目标层的垂深等参数。
3.3 坐标换算3.3.1?坐标转换
坐标转换包括坐标轴方向的转换和坐标值缩放两个方面。Java本身坐标轴的方向,与工程中使用的第一象限为正不同,Java的y轴以我们的第三象限方向为正,因此在计算时,首先需要把y坐标反方向。另外,井位坐标采用的是大地坐标,而绘图时,电脑上取点采用的是像素,单位不同,需要进行转换。同时,由于经常需要不同比例尺绘图,坐标也需要同时随之扩大或缩小,Panel的大小也需要根据坐标范围进行调整
public double setValue(double a,float b){
a =(a - b)/(scal * ss.calScreenScale
());
return a;
}
这里a是目标值,b是选定原点,scal是给定比例,ss.calScreenScale()是屏幕的尺寸,经过这个函数的计算后,目标值由大地坐标,转为像素坐标。
3.3.2?坐标平移
此程序中,有必要进行原点的选取,选取方法如下:
(1)取到井口x坐标两个最值;(2)取到井口y坐标两个最值;(3)确定x,y最小的值为原点以及确定了绘制范围。
虽然确定了原点,但原点并不是绘制的最小值,另外当加入构造后,构造的最小值将小于原定原点,这时需要进行坐标的平
移,计算出变化的差值。使用语句如下:
g2.translate(x,y);
4 图形处理
4.1 图形绘制
采用java.awt和java.swing图形编程。创建好窗体后,布置好框架的结构,在Panel中调用封装在井对象中的绘制方法。最终可在相应的Jpanel中得到井底或目的层绘制日产饼状图及累产柱状图。
4.2 图片保存
首先利用BufferedImage在内存中生成图像缓冲区,然后建立BufferedOutputStream输出流。通过输出流,程序就可将字节写入底层输出流中,再经过JPEGImageEncoder类进行转码,将数据流转为图片(jpg),并保存。
5 结论
通过一系列设计,此软件实现了最初设计的目标,并在辽河马20块化学驱筛选、 海1块调驱方案的剩余油研究中进行了实际应用。图5-1为某块的实际应用图。应用效果良好,将大量繁琐的工作变得轻松容易,极大的提高了工作效率,在未来的工作中可以进行进一步的改进和更大范围的应用。