运行和验证

  1. 使用PuTTY工具,以root用户登录服务器。
  2. 执行以下命令加载环境变量。

    export PATH=/path/to/OPENMPI/bin:$PATH
    export LD_LIBRARY_PATH=/path/to/OPENMPI/lib:$LD_LIBRARY_PATH

    该步骤为声明MPI环境变量,如果前面已经声明,可跳过该步骤。

  3. 执行以下命令创建“hostfile”文件并添加节点信息。

    echo -e 'node1\nnode2\n…\nnodex' > /path/to/HOSTFILE
    • “node1、node2、…、nodex”分别为各节点的主机名,可通过命令“hostname”查询各主机名,“\n”为换行符。
    • 该步骤在多节点运行时为必须执行,单节点可跳过。

  4. 执行以下命令加载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"

  5. 执行以下命令在计算环境中任意位置复制算例文件。

    cp -r /path/to/OPENFOAM/OpenFOAM-v1906/tutorials/incompressible/pisoFoam/LES/motorBike/motorBike ./

  6. 执行以下命令修改“RunFunctions”文件。

    1. 打开“RunFunctions”文件。
      vi /path/to/OPENFOAM/OpenFOAM-v1906/bin/tools/RunFunctions
    2. 按“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
    3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

  7. 执行以下命令修改配置文件。

    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\) 命令查看,并根据执行节点的实际配置进行修改。

  8. 执行以下命令进入算例文件夹执行计算脚本。

    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

  9. 计算结束正常退出后,生成计算日志文件,可执行以下命令进行查看。

    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