请选择 进入手机版 | 继续访问电脑版

微信一键登录

科吉思石油论坛

搜索
查看: 2464|回复: 0

tNavigator-PythonAction-自动改变射孔层位

[复制链接]

136

主题

205

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2020-7-20 17:22:55 | 显示全部楼层 |阅读模式
本帖最后由 乔聪颖 于 2020-7-20 17:25 编辑

1.png
“他山之石,可以攻玉。”--《诗经·小雅·鹤鸣》
近日应客户需求,想要实现射孔层位的自动转换。
粗看一下,貌似不难实现,用传统的ACTION*+UDQ就能解决。实际上也确实如此,不过在想要进行优化设计或者更加复杂的操作时,就变得有点力不从心。tNavigator中的API-PythonAction可以提供更灵活、更强大的解决方案,何不试试呢?!
本文将介绍两种方案的实现方式以及拓展,已尽量做的通俗易懂,请各位看官一审。
-----------------------------------------
案例描述与分析
问题描述:实现射孔层位的自动转换,判断条件为含水率达到90%(下文案例中为了突出效果,采用的是含水率35%)。
粗看之下,需求很简单,但是实现起来却有两个主要难点:
  • 判断标准单一;
  • 层位变化设置不好定义。
这会给解决方案带来转换控制方面的小小难度。

解决方案1:ACTION*+UDQ
实际上,仅用ACTIONW即可,通过嵌套的形式可以将多个ACTIONW顺序执行。
来看下具体实现:
2.png

当第一层ACTIONW达到触发条件时,就会执行内部的语句,包括COMPDAT以及嵌套的ACTIONW,并会在下一个计算步执行,也即在下个计算步中,射孔层位已经改变,并会第一次执行ACTIONW-A2;当满足A2的条件时,A2即会被触发,再次修改射孔层位。

解决方案2:PythonAction
PythonAction的中设置的内容,一般是在每个计算步都执行的,本质上与解决方案1相同。但是,为了能够更清晰的表达以及后续可能的拓展,将解决方案2稍微复杂化了,添加了临时变量layer。有兴趣的话可以尝试去简化。
Tips: ACTION*+UDQ形式中可以定义多种形式的自变量,但是局限性也比较明显。而Python作为编程语言,定义变量/特定结构的数据则要高效得多。

具体代码实现:
3.png

代码并不复杂,详细解读可以参考注释内容。
特别提醒:fc是一个内置类型的变量,可以做数学运算,但是不能作为字典的索引,所以才引入了临时变量layer。当然,字典的索引还可以通过触发次数等手段来设置。

分析与拓展
更新、完善、反思,是一种态度,责任。
我们可以分析下上面的功能有哪些方面可以拓展,以满足更多的需求:
  • 实现多井同时处理。解决方案1-定义WLIST设置井列表;解决方案2-自定义列表,容纳多个井名,添加循环语句即可;
  • PythonAction可以直接输出、改变触发次数,获取时间步,意味着更加灵活的判断、处理;
……
总体上,PythonAction方式比ACTION*+UDQ方式在处理简单情况时稍显复杂,入门门槛更高,但在面对复杂需求时,其可拓展性、灵活性会更有优势。

参考资料:
《tNavigator-Python API-PythonAction解读》
《tNavigator-PythonAction-自动控制生产动态》
《tNavigator-PythonAction-自动生成裂缝》

End.

欢迎提出各种需求,请在文末留言!
想要获取示例数据体,请发送申请至邮箱support@colchispetro.com
(请注明详细信息,谢谢!)
------------------------------------------------
更多tNavigator技巧及应用,欢迎加入tNavigator技术交流QQ群:777385939。
更多石油行业前沿资讯与应用,请关注科吉思石油:
tail.png

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 21:15 , Processed in 0.265225 second(s), 34 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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