FrontFlow/red で並列計算

2010年7月7日

はじめに

FrontFlow/red による並列計算の実行手順を示す。バージョンは 3.1.004。環境は Linux (Fedora 9)。可視化には ParaView を使う。

用意するもの

  • サンプルデータ
  • ParaView

サンプルの実行

FrontFlow/red Ver. 3.1.004 に付属のサンプル NACA65410 を実行してみよう。

  1. ディレクトリを作り、そこにサンプルのファイルをコピーする。
    $ mkdir NACA65410
    $ cp OPEN_FFR_rev/example-NACA65410/* NACA65410
    
  2. 並列用に fflow.ctl を編集する。ここでは 2 CPU で計算することにする。"&hpc" で ncpu に 2 を指定。
    &hpc
        ncpu    = 2
        MONITOR = 10
    /
    
    その下に以下を追加。
    &hpc_cntl
        NPE          = 2
        mtsfil       = 'test.m'
        subdir       = 'hpc'
        hpc_vertex   = 'Grid_hpc'
        hpc_boundary = 'Bund_hpc'
        hpc_comm     = 'Comm_hpc'
        hpc_source   = 'source'
        hpc_result   = 'result'
        hpc_restart  = 'restart'
        hpc_anim     = 'animHPC'
        hpc_initial  = 'restart_1000'
        hpc_probe    = 'probe'
        walflg       = 0
        wall         = './wall.law'
        ucdflg       = 0
        ucdfile      = 'test.inp'
    /
    
    NPE は ncpu と同じ数にする。それ以外はあまり気にしなくてよい (というかよくわからない)。関係ありそうなのは subdir と hpc_initial で、subdir で指定されている名前のサブディレクトリを用意する必要があるのと、リスタートするときはリスタートファイルを hpc_initial で指定する。
  3. プロセスの個数分だけサブディレクトリを用意する。
    $ mkdir hpc_0000 hpc_0001
    
  4. 用意したディレクトリに入り、prefflow を実行する。
    $ cd NACA65410
    $ prefflow
    
  5. fflowHPC を実行する。計算が開始される。
    $ mpirun -n 2 fflowHPC
    
  6. 計算が終わったら可視化の準備をする。可視化用の処理は ffr2viz で行うが、めんどくさいので、以下のようなスクリプト ffr2vtkP を作る。
    #!/bin/sh
    
    if [ $# -lt 1 ] ; then
    	echo "usage: ffr2vtkP <num cpu> <result>"
    	exit
    fi
    
    ffr2viz -m $1 -d hpc -r $2 -g geom.frontflow -gf FF -rf VTK -o $2
    
    ParaView で見るためのデータ (VTK ファイル) を作るには、つぎのようにする。
    $ ffr2vtkP 2 result.frontflow_5
    
    result.frontflow_5.vtk ができる。
  7. ParaView で VTK ファイルを開き、結果をチェックする。

環境特有の問題についてのメモ

実行で使用した環境には OpenFOAM が入っている。これが使っている OpenMPI と FrontFlow/red のそれとは別にしてあるが、OpenMPI 用の環境設定は 1 つなのでややこしいことになる。

とりあえず OpenFOAM 用の MPI を正としておく。それで FrontFlow/red が動くのかというと、残念ながら FrontFlow/red (fflowHPC) が必要とする Fortran サポートが OpenFOAM の OpenMPI では有効になっていない (だからわざわざ別に FrontFlow/red 用の OpenMPI を用意したわけである)。

fflowHPC を実行しても、OpenFOAM 用の OpenMPI を見てしまうため、Fortran 用ライブラリが見つからず実行できない。

$ ldd fflowHPC
    ...
    libmpi_f90.so.0 => not found
    libmpi_f77.so.0 => not found
    ...

fflowHPC 実行時だけ FrontFlow/red 用の OpenMPI を参照させるため、fflowP というシェルスクリプトを作る。

#!/bin/sh

LD_LIBRARY_PATH=$HOME/OPEN_FFR_rev/openmpi-1.4.2/build/lib:$LD_LIBRARY_PATH
fflowHPC

ライブラリのパスを示す環境変数 LD_LIBRARY_PATH の先頭 (先頭でないと OpenFOAM の OpenMPI のほうが先に見つかってしまう) に OpenMPI のライブラリのパスを追加している (パスは環境に合わせて修正する)。

実行は fflowHPC の代わりに次のようにする。

$ mpirun -n 2 fflowP

不都合がなければ、mpirun ごと fflowP でラッピングしてもよいかもしれない。