cFlow油气藏数值模拟器#

警告

本网站提供内容仅供学习和科研使用,未经许可,请勿用于任何商业或盈利用途。

简介#

cFlow油藏数值模拟器软件是是本站研发的一款三维三相的黑油模型核心模拟器。cFlow研发的主要目的是使用AD(Automatic Differentiation自动微分)技术搭建通用且易于扩充功能的油藏数值模拟核心模拟器框架,便于试验新的渗流机理,也方便初学者操作学习油藏数值模拟器的使用。同时也是为了实验自动微分在油藏数值模拟中的实现方法。

cFlow模拟器的关键字体系、输入文件和输出结果都兼容斯伦贝谢公司的模拟器ECLIPSE,可以用支持ECLIPSE的后处理软件打开查看结果,操作门槛低。cFlow也有自己的特殊功能关键字,使用时可以使用ECLIPSE支持的SKIP100和ENDSKIP关键字前后包括住,用以避免ECLIPSE误处理这些关键字;此类关键字还在测试阶段,会逐步释放。

cFlow采用C++语言开发,支持Win7/10 64位操作系统,使用C++的template能更好的与AD结合。cFlow的核心计算均基于AD实现,这样在模拟器代码中添加不同数学模型会非常方便。这也是研发cFlow使用AD的初衷,因为推导方程偏导数的过程是繁琐和枯燥的,而且还容易出错。

cFlow的线性解法器使用基于BICGSTAB线性解法器,内置使用了OpenMP并行,默认多线程路数为系统的逻辑核数,可以在命令行调用时指定。

备注

cFlow采用C++语言开发,具备跨平台编译的条件,未来可以支持Unix、Linux以及国产的操作系统。

主要功能#

  • 支持黑油模型模拟:油水两相、油气水三相(OIL/WATER/GAS/DISGAS)

  • 支持块中心网格和角点网格

  • 支持Fetcovich水体

  • 支持枚举法和平衡法初始化模型,暂时不支持重启动

  • 支持井控方式为ORAT、WRAT、LRAT、RESV、BHP

  • 支持部分井组控制和经济政策界限控制

  • 支持INCLUDE关键字使用包含文件

  • 支持公制和英制单位制(METRIC、FIELD)

已知问题#

  • 三相模拟器暂时不支持挥发油(VAPOIL),主要是因为黑油模型用于此类油气藏模拟较少,这种基本都用组分模拟器,如果有需要可以增加这个功能的代码。

  • 暂时不支持饱和度函数端点标定(End Point Scaling)功能,主要是很多朋友还不是很明白端点标定修改相渗曲线的原理。cFlow是基于科研和学习为目的,所以要改相渗曲线最好还是直接在DATA文件中修改曲线数据,这样使用者能直观理解自己改了哪些东西。

  • cFlow的设计初衷是使用AD技术让数值模拟新机理功能的开发变得高效,如果用cFlow来对比速度cFlow不是强项,并行效率和内存优化还有很大的提升空间。

  • 由于资源限制,软件的很多BUG目前没有被测试出来,欢迎大家反馈问题和提出改进建议。

使用cFlow#

cFlow可以在非盈利的学习和研究使用,不得用于商业盈利性质的科研、服务等;如果需要用于商业使用,请联系作者获得授权;

点此链接 下载cFlow (SHA1: 03078d0e047d80a77de6d625d510e3f3439e3249),如果需要测试最新的开发版本,也可以给作者发邮件获取;使用前请核实所下载软件包的检校信息。

cFlow的计算结果可以通过 ResKit 查看,也可以使用其它支持数值模拟二进制计算结果的软件查看。如果有问题可以给作者发邮件。

备注

如果同时查看计算结果包括曲线、地质模型和三维场数据计算结果,可以使用支持ECLIPE计算结果的软件查看。这里推荐使用 ResInsight ,一款开源的油藏数值模拟后处理软件;其它软件只要能正常查看ECLIPSE计算结果的都可以,如果有ECLIPSE许可的用户可以使用ECLPSE Office和Floviz来查看曲线和三维结果。

使用命令行启动cFlow#

cFlow可以通过命令行方式调用:

cflow [option] [data_file_path]

其中[data_file_path] 是data文件的全路径文件名,[option]有如下选项:

  • -f [file] file是输入数值模拟模型文件,即data文件路径;对于中文有空格的路径,请使用英文的双引号把路径括起来。

  • -n [x] x是一个整型数,代表需要设置的OpenMP并行路数;-n选项可以忽略,模拟器默认按照最大核数执行并行计算;

示例:要调用D:\test.data,使用2路并行计算,可输入如下命令。

cflow -f D:\test.data -n 2

重要

此外,通过cFlow自带界面程序launcher可以方便地从界面选择数据文件然后计算,对于初级用户建议使用launcher。下面的代码展示了在C++代码中直接嵌入cflow模拟核心功能的例子,目前cflow的SDK库并未释放只是在内部使用,如需合作请联系作者(thecolors@126.com)。

 1#include "simcore.hpp";
 2int main()
 3{
 4    std::string filename("your_data_file_path");
 5    SimulationModel* sim = new simcore::blackoil();
 6    EclDataFile data;
 7    SimulationLog log;
 8    /** 读取DATA数据文件同时调用模拟器计算 **/
 9    return data.read(filename, sim, &log);
10}

使用launcher启动cFlow#

双击“launcher.exe”即可打开cFlow的界面启动程序,launcher的使用很简单,选择添加data文件,然后运行即可(如下图所示)。

../_images/cflow_img002.png

重要

关于“锁定文件”:运行开始后launcher程序会自动调用cFlow模拟器开始计算,此时会显示一个命令行窗口;cFlow计算时会生成一个与计算的data文件同名的“锁定文件”(后缀为lock),这是为了防止在计算时重复调用导致数据被覆盖。如果遇到非正常终止导致cFlow意外退出,这个锁定文件可能会被保留,可以点击launcher程序界面上的解锁按钮删除对应的锁定文件,否则cFlow再次启动计算data文件会提示模型被锁定,无法计算。使用者也可以从资源管理器中手动删除这个锁定文件。

算例测试#