微信一键登录

科吉思石油论坛

搜索
查看: 2942|回复: 0
打印 上一主题 下一主题

tNavigator-Graph Calculator-输出指定格式的月产报表(时间序列+多参数+多井)

[复制链接]

136

主题

205

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
跳转到指定楼层
楼主
发表于 2021-1-22 18:13:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 乔聪颖 于 2021-1-22 18:16 编辑

一般而言,数值模拟计算的结果数据是时间序列形式的多对象、多参数数据,常规的数据处理手段单次仅能展现、处理类似“时间序列+多参数+多井”形式中的两类数据。
tNavigator中的Python API– Graph Calculator可以更加高效地同时处理三类数据。
------------------------------------------------
【问题描述与分析】
输出月报数据,格式为“井 时间 月产油 月产液 月产气 月注水”。
初看时可能觉得并不麻烦,但是实际操作时却不那么简单。
通常我们可以轻松处理两类数据“多井+多参数+单一时间”、“多井+多时间+单一参数”、“多时间+多参数+单一井”,如:
也可以“多井+多参数+单一时间”,但是这里井数据横向排列,不是想要的效果:
还可以直接将所有数据导出,但是数据是以报告时间点为基础生成的,也不是想要的效果:

【Graph Calculator的考量】
Graph Calculator是内嵌在tNavigator中的Python接口,利用编程语言的特性,可以实现高质量的后处理功能。
需要考量的关键点:
1.不规律的时间步处理;
2.通过累产生成月产数据。

【Graph Calculator的实现】
不多说,上图和代码:
  1. m = get_model_by_name('BLACK_OIL_DEMO')

  2. opt_diff = diff(wopt)
  3. opt_diff_month = opt_diff.aggregate_by_time_interval(interval = 'month', type = 'avg')

  4. for w in get_all_wells():
  5.     num_month = 5   # 模型中第一个报告步的月份
  6.     for t in get_all_timesteps():
  7.         t_temp = t.to_datetime()
  8.         if t_temp.month > num_month:   # 为防止月份不连续,加入了判断
  9.             num_month = t_temp.month
  10.             if t_temp.month == num_month:
  11.                 print(t_temp.year, t_temp.month, w.name, opt_diff_month[m,w,t])
  12.             num_month += 1
  13.             if num_month > 12:
  14.                 num_month = 1
复制代码
【反思与拓展】
上面仅展示了单一属性的输出,可以轻松拓展至多个属性;
可以通过Python的第三方库调用Excel。

更多Python应用,可导航贴。
------------------------------------------------
更多tNavigator技巧及应用,欢迎加入tNavigator技术交流QQ群:777385939。
更多石油行业前沿资讯与应用,请关注科吉思石油:
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|服务支持:DZ动力|科吉思石油技术咨询有限公司 ( 京ICP备15057753号

GMT+8, 2024-5-3 11:03 , Processed in 0.344726 second(s), 33 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表