运行和验证
- 使用PuTTY工具,以root用户登录服务器。
- 执行以下命令加载环境变量。
export PATH=/path/to/OPENMPI/bin:$PATH export LD_LIBRARY_PATH=/path/to/OPENMPI/lib:$LD_LIBRARY_PATH
该步骤为声明MPI环境变量,如果前面已经声明,可跳过该步骤。
- 执行以下命令创建“hostfile”文件并添加节点信息。
echo -e 'node1\nnode2\n…\nnodex' > /path/to/HOSTFILE
- “node1、node2、…、nodex”分别为各节点的主机名,可通过命令“hostname”查询各主机名,“\n”为换行符。
- 该步骤在多节点运行时为必须执行,单节点可跳过。
- 执行以下命令加载OpenFOAM应用程序。
Node_list=$(cat /path/to/HOSTFILE | xargs | tr ' ' ',') clush -w ${Node_list} "cp /root/.bashrc /root/.bashrc_bak;echo source /path/to/OPENFOAM/OpenFOAM-v1906/etc/bashrc >> /root/.bashrc"
- 执行以下命令在计算环境中任意位置复制算例文件。
cp -r /path/to/OPENFOAM/OpenFOAM-v1906/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike ./
- 执行以下命令修改“RunFunctions”文件。
- 打开“RunFunctions”文件。
vi /path/to/OPENFOAM/OpenFOAM-v1906/bin/tools/RunFunctions
- 按“i”进入编辑模式。
- 多节点运行时修改如下:
在mpirun命令后加上“--allow-run-as-root -x PATH -x LD_LIBRARY_PATH --hostfile /path/to/HOSTFILE”。
修改前:
$mpirun -n $nProcs $appRun $appArgs "$@" </dev/null >> $logFile 2>&1
修改后:
$mpirun --allow-run-as-root -x PATH -x LD_LIBRARY_PATH --hostfile /path/to/HOSTFILE -n $nProcs $appRun $appArgs "$@" </dev/null >> $logFile 2>&1
- 单节点修改如下:
在mpirun命令后加上“--allow-run-as-root”。
修改前:
$mpirun -n $nProcs $appRun $appArgs "$@" </dev/null >> $logFile 2>&1
修改后:
$mpirun --allow-run-as-root -n $nProcs $appRun $appArgs "$@" </dev/null >> $logFile 2>&1
- 多节点运行时修改如下:
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开“RunFunctions”文件。
- 执行以下命令修改配置文件。
sed -ri "s/\(20 8 8\)/\(64 12 8\)/" motorBike/system/blockMeshDict
- 两节点场景。
sed -ri "s/8/256/" motorBike/system/{decomposeParDict,decomposeParDict.hierarchical,decomposeParDict.ptscotch} sed -ri "s/\(4 2 1\)/\(32 4 2\)/" motorBike/system/{decomposeParDict,decomposeParDict.hierarchical,decomposeParDict.ptscotch}
- 单节点场景。
sed -ri "s/8/128/" motorBike/system/{decomposeParDict,decomposeParDict.hierarchical,decomposeParDict.ptscotch} sed -ri "s/\(4 2 1\)/\(16 4 2\)/" motorBike/system/{decomposeParDict,decomposeParDict.hierarchical,decomposeParDict.ptscotch}
- 若执行节点为两节点,每个节点128个任务并行,128*2=256,32*4*2=256。
- 若执行节点为单节点,128个任务并行,128*1=128,16*4*2=128。
- 单节点的任务并行个数(即128)可通过lscpu |grep ^CPU\(s\) 命令查看,并根据执行节点的实际配置进行修改。
- 两节点场景。
- 执行以下命令进入算例文件夹执行计算脚本。
cd motorBike ./Allrun
计算过程中屏幕打印信息如下:Running blockMesh on /hpcstore/ysf/openfoam-test/1020_motorBike Running decomposePar on /hpcstore/ysf/openfoam-test/1020_motorBike Running snappyHexMesh (256 processes) on /hpcstore/ysf/openfoam-test/1020_motorBike Restore 0/ from 0.orig/ for processor directories Running renumberMesh (256 processes) on /hpcstore/ysf/openfoam-test/1020_motorBike Running potentialFoam (256 processes) on /hpcstore/ysf/openfoam-test/1020_motorBike Running checkMesh (256 processes) on /hpcstore/ysf/openfoam-test/1020_motorBike Running simpleFoam (256 processes) on /hpcstore/ysf/openfoam-test/1020_motorBike
- 计算结束正常退出后,生成计算日志文件,可执行以下命令进行查看。
vi log.simpleFoam
forceCoeffs forceCoeffs1 execute: Coefficients Cd : 0.413353 (pressure: 0.398578 viscous: 0.0147753) Cs : 0.0100002 (pressure: 0.00999416 viscous: 6.01357e-06) Cl : 0.0683827 (pressure: 0.0683764 viscous: 6.2544e-06) CmRoll : -0.0101679 (pressure: -0.0102318 viscous: 6.39234e-05) CmPitch : 0.15315 (pressure: 0.146948 viscous: 0.00620151) CmYaw : 0.0118663 (pressure: 0.0120074 viscous: -0.000141087) Cd(f) : 0.196509 Cd(r) : 0.216844 Cs(f) : 0.0168664 Cs(r) : -0.00686619 Cl(f) : 0.187341 Cl(r) : -0.118959 ensightWrite ensightWrite write: ( k omega p U ) End Finalising parallel run