【读MFiX源代码笔记】1程序入口mfix.f文件
2020/4/11 第一天
本文以19.3.1版本为例
主要的源代码都在mfix的源代码文件夹(一般在anaconda安装位置的envs文件夹下能找到)下的model文件夹
我的mfix安装在D:\App\Anaconda3\envs
程序的入口是mfix.f
找到PROGRAM MFIX
这就是程序的入口
END PROGRAM就是程序的终点
在这个源代码里,定义了多个subroutine,有的与并行有关,有的与C++接口有关,其中最主要的就是run_mfix这个subroutine.
我们忽略一切并行,C++等相关的代码,只看最关键的部分
PROGRAM MFIX 做了三件事
- CHARACTER(LEN=1000) :: MFIX_DAT_FILENAME = “mfix.dat” 读入dat文件的名字
- MFIX_DAT_SIZE = FILE_SIZE(MFIX_DAT_FILENAME) 给dat文件分配了一个大小
- CALL RUN_MFIX(MFIX_DAT_FILENAME, MFIX_DAT_SIZE) 调用了RUN_MFIX这个子程序
现在看run_mfix
也是只看最关键的部分
它里面嵌套了三个最关键的subroutine
- subroutine run_fluid
- subroutine run_dem
- subroutine run_pic
都是干什么的一目了然。 假如我们运行的是带化学反应的DEM算例(以后都以这个为例)。
run_mfix 做了这么几件事
- 读入主程序中的MFIX_DAT_SIZE和MFIX_DAT_FILENAME
并且 用108行的do循环 读入dat文件的每一行,真正地读入了dat文件(注释中称为deck file)。其中最重要的是CALL GET_DATA(MFIX_DAT)这一行。 - 初始化CALL INITIALIZE(MFIX_DAT)
- 时间步循环 dt_loop ! Time march loop。到这一步开始,分算例的类型,纯流体则用run_fluid,dem用run_dem, pic用run_pic。当然不论dem还是pic都需要先run_fluid。从这点看出来,每个时间步内,都是计算流体相,再计算颗粒相的
- 结束运行CALL FINALIZE
其中最主体的部分在第3步,也就是时间步循环这里。
需要细看run_flud和run_dem
下期再谈