马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
x
本帖最后由 sniper 于 2018-5-18 09:12 编辑
tNavigator 18.1开放Python接口——实现图形输出的“私人定制”
乔聪颖
我个人很关注Python。Why?因为Python是现在做数据统计、大数据分析最热门的语言。作为引领新一代GPU级高效精准数值模拟技术,tNavigator与技术前沿紧密结合,在18.1版本中,Python不仅可以应用在后处理中,也可以应用在AHM & Uncertainty(辅助历史拟合及敏感性分析)及ModelDesigner GUI(模型设计交互界面)中。 本次将与大家分享Python在图形输出方面的应用。 Graph Calculator操作界面示例 well、group、connection、model、temestep、graph和global,这里定义了几类对象,每类对象都有自己的属性和方法,接触过python的小伙伴是不是很熟悉?! Graph Calculator可以将对象的属性/方法和关键字直接应用到代码块中。为了方便编程,tNavigator设计者将其直接放置在界面的右侧及下方,非常贴心! 左上部分是代码输入窗口及调试窗口,输入好代码后,只需轻轻按下Calculate……看到输出框中的Complete了吗?!可以小小的高兴一下了! Tips:所有执行后的程序都会保存在当前模型中。 执行Python代码后的输出展示 而在常规的操作中,则较为繁琐: 需要3处设置,sum、param、对应的层位 查看不同的井时,需要重新勾选!
常规操作的输出展示 Python一段代码就可以省却频繁的选项操作! 说明:代码的含义是计算单井在70≤k<100层的产油量之和。 这个例子来源于tNavUserGuideEnglish-Graph Calculator中三个例子中最简单的那个,稍加改动(原例中计算的是70≤k<100层的产油量之和占单井产量的比例,这个功能在现有情况下无法直接呈现)。 原始代码如下: tmp = graph(type='well', default_value=0) for c in get_all_connections(): if c.k in range(70,100): tmp[c.well] += copr[c] wopr_layer2 = tmp/wopr
--------------------------------------------- Python的应用可以使我们完成常规操作无法实现的功能! 接下来可以看第二个例子(只作验证、说明):计算某个子集的油井(名称以'3'开头)的平均产油量,并将其与历史数据进行比较,二者之差的平方可以作为拟合的目标函数。 注意:此处示例需要一个额外的文件-历史数据,经过对sch部分的处理可以得到,如下图所示: 依据历史数据整理的文件 结果展示 原始代码如下:
s=','.join ([x.name for x inget_wells_by_mask ('3*')]) obs = wopr.avg (objects = s) inpf =open('C:/Users/Administrator/Desktop/well.txt', 'r') arr = [(line.split()[0],float(line.split()[1])) for line in inpf ] hist = create_table_vs_time(arr) fuobj = (obs - hist)**2
验证: 结果验证 -------------------------------------------- 这是非常好的尝试!编程正在“全民化”,数模(包括其他行业)与编程的结合不仅简化了工作流程和强度,带来更多的可能性,如同手握刀尺的工匠,随心所欲去打造自己的作品!相信随着tNavigator版本的不断更新,这部分的内容会更加完善和强大!
附:
有时间我们会推出Python在AHM & Uncertainty及ModelDesigner GUI中的应用。 若是需要定制Python代码,从而实现某项操作复杂却又重复性较多的功能,或者想实现某些常规操作无法实现的功能,可以联系我们一起交流!也欢迎您将自己的应用实例分享出来!
原文链接:https://mp.weixin.qq.com/s/jlkj8p8kFfgy8p6IOf0H-w |