本帖最后由 乔聪颖 于 2021-2-20 11:31 编辑
针对数值模拟中生产动态的自动控制,tNavigator中的PythonAction功能愈发强大。 ------------------------------------------------ 【案例分析】 目标:顺次开井以达到井组/全区稳产控制。 要解决这个问题需要两点考量: 1.需要理解井组控制; 2.难点在于井组中井的数量太多时如何处理。 关于井组控制可参考网上资料,此处不做详解,可参考后续截图。 当井组中的井数不多时,通过Action+UDQ的方式可以轻松实现,多层嵌套即可。但是当井数达到十几口甚至几十口上百口时,这种嵌套形式显然太过笨拙。 本次以tNavigator中的PythonAction功能来实现该需求,跳出传统框架,更加灵活、强大。
【代码解析】 - # open wells subsequently to maintain group production rate
- # define well_list containing all the wells which will change
- well_list = ['1', '3', '15', '22', '24', '26', '27', '31', '33', '34', '35', '36', '40', '48', '50']
- def action_for_specific_wells():
- # get well name
- wlist = [get_well_by_name(w) for w in well_list]
-
- # judge by group oil rate
- g = get_group_by_name('FIELD')
-
- if gopr[g] < 300:
- temp = 0
- for i in range(len(wlist)):
- temp = i
- if wopr[wlist[i]] < 0.00001:
- # print(wlist[i].name)
- add_keyword(
- """
- welopen
- """+wlist[i].name+""" open /
- /
- """)
- print("At",get_current_date().strftime("%d.%m.%Y %H:%M:%S"),
- "well ",wlist[i].name," was open.")
- break
- print(temp)
- if temp == (len(wlist) - 1):
- script_off()
复制代码红框内容需要重点注意,也是有可能需要修改的地方。
参考链接:
End. ------------------------------------------------ 更多tNavigator技巧及应用,欢迎加入tNavigator技术交流QQ群:777385939。 更多石油行业前沿资讯与应用,请关注科吉思石油:
|