您的位置:主页 > 成功案例 > 斯伦贝谢软件使用技巧 > ECLIPSE操作技巧 >
成功案例
- 34.泡沫油 – 稠油油藏不容忽视的开发阶段
- 33.ECLIPSE泡沫油模拟
- 32.如何将Eclipse和IAM输出的RSM类型文件自动转换为CSV格式
- 31.ECLIPSE中饱和度叠加图的制作
- 30.ECLIPSE化学驱系列专题(5)— 低矿化度水驱
- 29.ECLIPSE化学驱系列专题(4)— 泡沫驱
- 28.ECLIPSE化学驱系列专题(3)— 三元复合驱
- 27.ECLIPSE化学驱系列专题(2)— 表活剂驱
- 26.ECLIPSE化学驱系列专题(1)— 聚合物驱
- 25.通过Thermal+Blackoil模拟不同注水温度下的含蜡原油开发效果
- 24.ECLIPSE/INTERSECT定压差生产控制设置
- 23.在Eclipse中如何实现周期注采
- 22.老油田开发结构优化
- 21.使用示踪剂分析注采情况
- 20.独立油藏模型的合并
- 19.ECLIPSE_模型文件的归档管理
- 18.如何通过NWM模拟压裂水平井
- 17.如何用PVTi拟合状态方程
- 16.如何用VFPi模块平滑VFPi曲线
- 15.如何选择VFPi相关式
- 14.如何在FloViz中利用计算器新建属性
- 13.如何在FloViz创建并导出FIP分区
- 12.如何用Office查看平均含油饱和度
- 11.如何定义非水平的油水界面
- 10.如何定义煤层气初始含气量
- 9.如何采用UDQ计算生产利润
- 8.如何采用UDQ计算分区采气速度
- 7.如何理解关键字DATES的有效控制范围
- 6.如何快速在理想模型中进行水平井设计
- 5.如何理解端点标定
- 4.如何输出ECLIPSE计算结果到OFM
- 3.如何用macros命令转化ECLIPSE二进制文件
- 2.如何在Linux RedHat 下启动多个许可
- 1.如何使用ECLIPSE 批处理命令计算
ECLIPSE操作技巧>>
32.如何将Eclipse和IAM输出的RSM类型文件自动转换为CSV格式1. RSM文件介绍
Eclipse和IAM中的模型结果输出为RSM为后缀的文件。此文件的数据为文本型,内部是以块表的形式保存了所有已定义的结果数据:每个数据块为10列的块表,块表的行内容为模型的数据结果值,行数是基于模拟的天数的变值,达到最大列数(10)后,将其他参数再继续写入下一个块表,重复此过程,直到将将所有参数结果写入完毕。
此文件结构中的列定义和行定义都不是一个固定值,是基于模型的数据结果而定,所以很难直接将这些结果直接导入其他软件使用。为了解决此问题,可以用编程的方法自动化的将RSM文件转换为csv文件,这样其他软件都可以轻松的导入csv文件来使用Eclipse或IAM的模拟结果。以下示例是用C# .NET编写,当然也可以用其他的编程语言,实现思路可参考此文实现。
2. 技术实现
如介绍中所述,RSM文件具有非常规文件结构。 要将此文件转换为csv文件,需要首先解析RSM文件。 因此,首先编写一个解析器,它遍历RSM文件中的所有块表,并将它们存储在表的数组中,再循环遍历解析每个块表中的数据将其写入到csv文件。
创建的类结构如下:
•RsmFile:表示实际的RSM文件
•RsmBlock:每个RSM文件由许多块表组成,块列为1个日期列和9个参数列
•RsmTable:包含参数值的实际表
2.1 RSMFile数据结构
RSMFile结构定义如下:
•块1
ØBlockHeader1
ØTableHeader1
ØTableValues1
•块2
ØBlockHeader2
ØTableHeader2
ØTableValues2
•等等
为了显示RSM文件结构,使用了Eclipse示例中的SPE9示例。
这是RSM块表的示例。红色标题显示模型的名称,使用的Eclipse版本,执行的日期戳和电脑名,以虚线结束。
绿色的表头显示表的列定义。在此示例中,表头的第一行是参数类型,第二行是参数单位,第三行是井名称。
蓝色表格包含所有值。第一列始终是日期或时间戳(使用关键字DATE或TIME)。该表在新块开始的位置结束,或者在到达最后一个块的位置结束,为空行。
块的开始由数字1识别。这可用于解析RSM文件中的不同块。
2.2 RsmFile.Parse()
为了解析RSM文件,我们需要调用RsmFile.Parse()。 这将创建RsmFile对象的新实例。
RsmFile rsmFile = RsmFile.Parse(File.ReadAllLines(rsmPath).ToArray());
.Parse()方法要求包含实际文件的所有行的字符串数组。
2.3 RsmFile.ToCsv()
创建RsmFile对象时,我们可以使用ToCsv()方法创建csv文件。 下一个示例显示如何调用ToCsv()方法并将结果写入文件:
3. 工具使用
此示例中实现的转换工具编写为命令行,应用举例:
C:\EclipseRsmToCsv>EclipseRsmToCsv.exe EclipseRsmToCsv 1.0.0.0
Copyright c 2017
-i, --input 必填项. RSM文件.
-o, --output 必填项..csv文件.
-m, --measurements 必填项. 参数项.
-s, --start [可选] 开始日期.
Format[dd/MM/yyyy].
-e, --end [可选] 结束日期.
Format[dd/MM/yyyy].
-h, --help 显示帮助信息.
前三个参数是必需的:
-i 输入RSM文件的路径
-o csv文件写入的位置
-m 输出中需要哪些参数类型(例如WGPR和WGIR)。
最后两个参数是可选的:可以指定开始日期和结束日期,以便仅将部分模拟结果写入csv。
注意:如果TIME关键字用作RSM文件中的时间戳,则需要开始日期才能计算日期戳。 如果未选择开始日期,则使用默认的开始日期01/01/1900。 如果使用DATE关键字,则不必指定开始日期。
例子:
C:\ EclipseRsmToCsv> EclipseRsmToCsv.exe -i SPE9.RSM -o SPE9.csv -m WGPR
将WGPR写入SPE9.csv。
C:\ EclipseRsmToCsv> EclipseRsmToCsv.exe -i SPE9.RSM -o SPE9.csv -m WGPR WGIR
将WGPR和WGIR写入SPE9.csv。
C:\ EclipseRsmToCsv> EclipseRsmToCsv.exe -i SPE9.RSM -o SPE9.csv -m WGPR -s 01/01/2015 -e 31/12/2015
将2015年的WGPR和WGIR写入SPE9.csv。
4. CSV结果文件
EclipseRsmToCsv以下列格式输出csv:
WGPR,MSCF/DAY,,PROD2,1-1-2015,0 WGPR,MSCF/DAY,,PROD2,2-1-2015,2054.024
WGPR,MSCF/DAY,,PROD2,3-1-2015,2028.551 WGPR,MSCF/DAY,,PROD2,7-1-2015,2004.881
WGPR,MSCF/DAY,,PROD2,13-1-2015,2004.653
第一列是参数类型,第二列是单位,第三列是可选倍数,第四列是井名,第五列是日期戳,第六列是参。