科吉思石油论坛

标题: tNavigator-PythonAction-自动改变射孔层位 [打印本页]

作者: 乔聪颖    时间: 2020-7-20 17:22
标题: tNavigator-PythonAction-自动改变射孔层位
本帖最后由 乔聪颖 于 2020-7-20 17:25 编辑

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

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

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

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

具体代码实现:

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

分析与拓展
更新、完善、反思,是一种态度,责任。
我们可以分析下上面的功能有哪些方面可以拓展,以满足更多的需求:
……
总体上,PythonAction方式比ACTION*+UDQ方式在处理简单情况时稍显复杂,入门门槛更高,但在面对复杂需求时,其可拓展性、灵活性会更有优势。

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

End.

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






欢迎光临 科吉思石油论坛 (http://bbs.colchis.cn/) Powered by Discuz! X3.2