本帖最后由 乔聪颖 于 2021-1-22 18:16 编辑
一般而言,数值模拟计算的结果数据是时间序列形式的多对象、多参数数据,常规的数据处理手段单次仅能展现、处理类似“时间序列+多参数+多井”形式中的两类数据。 tNavigator中的Python API– Graph Calculator可以更加高效地同时处理三类数据。 ------------------------------------------------ 【问题描述与分析】 输出月报数据,格式为“井 时间 月产油 月产液 月产气 月注水”。 初看时可能觉得并不麻烦,但是实际操作时却不那么简单。 通常我们可以轻松处理两类数据“多井+多参数+单一时间”、“多井+多时间+单一参数”、“多时间+多参数+单一井”,如: 也可以“多井+多参数+单一时间”,但是这里井数据横向排列,不是想要的效果: 还可以直接将所有数据导出,但是数据是以报告时间点为基础生成的,也不是想要的效果:
【Graph Calculator的考量】 Graph Calculator是内嵌在tNavigator中的Python接口,利用编程语言的特性,可以实现高质量的后处理功能。 需要考量的关键点: 1.不规律的时间步处理; 2.通过累产生成月产数据。
【Graph Calculator的实现】 不多说,上图和代码: - m = get_model_by_name('BLACK_OIL_DEMO')
- opt_diff = diff(wopt)
- opt_diff_month = opt_diff.aggregate_by_time_interval(interval = 'month', type = 'avg')
- for w in get_all_wells():
- num_month = 5 # 模型中第一个报告步的月份
- for t in get_all_timesteps():
- t_temp = t.to_datetime()
- if t_temp.month > num_month: # 为防止月份不连续,加入了判断
- num_month = t_temp.month
- if t_temp.month == num_month:
- print(t_temp.year, t_temp.month, w.name, opt_diff_month[m,w,t])
- num_month += 1
- if num_month > 12:
- num_month = 1
复制代码【反思与拓展】 上面仅展示了单一属性的输出,可以轻松拓展至多个属性; 可以通过Python的第三方库调用Excel。
更多Python应用,可导航贴。 ------------------------------------------------ 更多tNavigator技巧及应用,欢迎加入tNavigator技术交流QQ群:777385939。 更多石油行业前沿资讯与应用,请关注科吉思石油: |