超算或者没有配备显卡的远程服务器一般只能用命令行(MFiX中成为Batch solver)。
所有含有UDF(化学反应必须用UDF)的MFiX算例必须先编译后运行。
采用命令行的运行方式有两种
- 从源代码运行
- 从anaconda环境运行
适用于命令行的编译方式有三种
- 从源代码编译
- 从anaconda环境编译
- 从GUI编译
原理都是一样的,只是操作方式不同罢了。这几种可以相互交叉。
工具:
这里采用的版本是MFiX-20.1.2
系统是Ubuntu18
参考:
参考MFiX user guide P158-P163 5.2节
算例:
8核心DMP并行
从anaconda编译
- 激活anaconda mfix环境
conda activate mfix-20.1.2
- 编译
build_mfixsolver --batch -j 8 --dmp FC=mpifort -FCFLAGS="-Wall"
解释:
-
build_mfixsolver
是主要的命令,后面是它的参数
-
--batch
表示采用batch solver,即命令行
-
j 8
表示用8个核心编译(注意是编译不是运行,只是节省一两分钟,可去掉)
-
--dmp
表示采用DMP并行,在编译的时候不需要指定并行的核心数
-
FC=mpifort
指定编译器为mpifort,这个编译器才能做并行,gfortran是不行的。
-
-FCFLAGS="-Wall"
是编译器的参数。这里表示显示出编译器所有的警告。其他参数的见User guide
从anaconda运行
已经激活了环境的情况下
mpirun -np 8 ./mfixsolver -f 算例名称.mfx NODESI=2 NODESJ=4 NODESK=1
解释:
-
mpirun
是主要的命令,后面是它的参数
-
-np 8
表示用8个核心运行
-
./mfixsolver
是要运行的可执行文件
-
-f 算例名称.mfx
是./mfixsolver的参数,指定算例名称
-
NODESI=2 NODESJ=4 NODESK=1
指定并行分割方式,I方向上两个块,J方向上切成4块,K方向上一块。
编译运行命令存储成alias
打开bashrc
sudo gedit ~/.bashrc
给命令以别名。在末尾添加这几行(请更改算例名字)
# This is a 8 cores DMP with Batch solver
alias buildmfix='build_mfixsolver --batch -j 8 --dmp FC=mpifort -FCFLAGS="-Wall"'
alias runmfix='mpirun -np 8 ./mfixsolver -f 算例的名字.mfx NODESI=2 NODESJ=4 NODESK=1'
此后就用buildmfix和runmfix代替编译运行命令