OpenFOAM 1.7.x on Windows 64 bit (MPICH2 版)2011年3月8日 | ||||||
はじめにSymscape の OpenFOAM 1.7.x on Windows 64-bit with Native MPI をもとに Windows バイナリを作ってみた。MPICH2 により並列計算に対応した。 環境
MinGW-w64 のセットアップここ の "Toolchains targetting Win64" - "Automated Builds" から "mingw-w64-1.0-bin_x86_64-linux_20110214.tar.bz2" をダウンロードし、展開。 $ mkdir ~/mingw-w64 $ tar xvjf mingw-w64-1.0-bin_x86_64-linux_20110214.tar.bz2 -C ~/mingw-w64 ~/.bashrc にパスを追加。 export PATH=~/mingw-w64/bin:$PATH ~/.bashrc を読み込む。 $ . ~/.bashrc また、上のリンクの "External binary packages (Win64 hosted)" - "Binaries (64-bit)" から "zlib-1.2.5-bin-x64.zip" をダウンロードし、展開。 $ unzip zlib-1.2.5-bin-x64.zip ファイルを配置。 $ cp zlib/include/zconf.h ~/mingw-w64/x86_64-w64-mingw32/include $ cp zlib/include/zlib.h ~/mingw-w64/x86_64-w64-mingw32/include $ cp zlib/bin/zlib1.dll ~/mingw-w64/bin $ cp zlib/lib/libz.a ~/mingw-w64/x86_64-w64-mingw32/lib $ cp zlib/lib/libzdll.a ~/mingw-w64/x86_64-w64-mingw32/lib mingw-w64/lib/gcc/x86_64-w64-mingw32/4.5.3/include/float.h の最後に以下の行を追加。 #include_next <float.h> OpenFOAM のセットアップOpenFOAM の入手。 $ git clone git://github.com/OpenCFD/OpenFOAM-1.7.x.git 設置。 $ mv OpenFOAM-1.7.x ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich checkout。 $ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich $ git checkout 14b79332ee4a1827656951db39fe81cc5ba52d78 パッチ を当てる。 $ gzip -d v5-mingw-openfoam-1-7-x.patch.gz $ mv v5-mingw-openfoam-1-7-x.patch ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich $ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich $ patch -p0 < v5-mingw-openfoam-1-7-x.patch ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/etc/bashrc の WM_PROJECT_VERSION を修正。 export WM_PROJECT_VERSION=1.7.x-mingw-mpich また、その下に以下を追加。 export WM_OSTYPE=MSwindows export WM_COMPILER=mingw-w64 export WM_ARCH_OPTION=64 export WM_CC='x86_64-w64-mingw32-gcc' export WM_CXX='x86_64-w64-mingw32-g++' export compilerInstall=system export WM_MPLIB='MPICH' ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/etc/settings.sh の MPICH のバージョンを使用するものに修正する。
MPICH)
#mpi_version=mpich2-1.1.1p1
mpi_version=mpich2-1.3.2p1
~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/etc/bashrc を読み込む。 $ . ~/OpenFOAM/OpenFOAM-1.7.x-mingw/etc/bashrc ThirdParty は 1.7.1 のものを使う。 $ tar xvzf ThirdParty-1.7.1.gtgz $ mv ThirdParty-1.7.1 ~/OpenFOAM/ThirdParty-1.7.x-mingw-mpich MPICH2 のセットアップここ から MPICH2 の Windows 版を入手し Windows マシンにインストールする。インストールされたフォルダ ("C:\Program Files\MPICH" など) を丸ごと Linux マシンに持ってくる。 MPICH のディレクトリを作成。 $ mkdir -p $MPI_ARCH_PATH Windows 版 MPICH2 の中身を $MPI_ARCH_PATH にコピーする。 リンクされるライブラリを修正する。 ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/wmake/rules/linux64mingw-w64/mplibMPICH #PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpich -lrt PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi -lmpicxx Scotch のコンパイルScotch のコードを修正する。 $ cd ~/OpenFOAM/ThirdParty-1.7.x-mingw-mpich $ cp ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/mingw-extra/scotch/src/Make.inc/* scotch_5.1/src/Make.inc $ cp ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/mingw-extra/scotch/src/libscotch/* scotch_5.1/src/libscot ch ~/OpenFOAM/ThirdParty-1.7.x-mingw-mpich/Allwmake から Scotch をコンパイルする部分 echo ======================================== echo Build Scotch decomposition library echo if [ -r $FOAM_LIBBIN/libscotch.so -a -r $FOAM_LIBBIN/libscotcherrexit.so ] thenから if [ -d "$MPI_ARCH_PATH" ]の前までを取り出して makeScotch というファイルを作り、実行する。 $ chmod +x makeScotch $ ./makeScotch エラーで止まるかもしれないが気にしない。 さらに続けてコンパイル。 $ cd scotch_5.1/src $ rm Makefile.inc $ ln -s Make.inc/Makefile.inc.mingw-w64 $ cd libscotch $ make libscotch.dll などができていれば OK。できたファイルをコピー。 $ mkdir -p $FOAM_LIBBIN $ cp libscotch.* $FOAM_LIBBIN OpenFOAM のコンパイル$FOAM_SRC/OpenFOAM/Make/options の以下の部分 ifeq ($(LINK_PLIB),) LIB_LIBS = $(FOAM_LIBBIN)/dummy/libPstream.o else LIB_LIBS = -L$(FOAM_LIBBIN)/dummy -lPstream endifを次の 1 行に置き換える。 LIB_LIBS = -L$(FOAM_LIBBIN)/dummy -lPstream $FOAM_APP/utilities/mesh/manipulation/setSet/Allwmake を下記のように修正。 READLINE=0 #if [ "mingw32" != "$WM_COMPILER" -a -f /usr/include/readline/readline.h ] #then # echo "Found readline/readline.h -- enabling readline support." # READLINE=1 # export READLINELINK="-lreadline -lncurses" # break #fi export READLINE $FOAM_APP/utilities/parallelProcessing/Allwmake の実行権限がはずれているので、実行権限を与える。 $ cd $FOAM_APP/utilities/parallelProcessing $ chmod +x Allwmake コンパイル。 $ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich/wmake/src $ make $ cd ../.. $ ./Allwmake Windows 用パッケージを作成する。 $ mkdir -p ~/OpenFOAM-1.7.x-mingw-w64-mpich/bin $ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw-mpich $ cp -r etc ~/OpenFOAM-1.7.x-mingw-w64-mpich $ cp applications/bin/linux64mingw-w64DPOpt/*.exe ~/OpenFOAM-1.7.x-mingw-w64-mpich/bin $ cp lib/linux64mingw-w64DPOpt/*.dll ~/OpenFOAM-1.7.x-mingw-w64-mpich/bin $ cp lib/linux64mingw-w64DPOpt/mpich2-1.3.2p1/*.dll ~/OpenFOAM-1.7.x-mingw-w64-mpich/bin $ cp -r tutorials ~/OpenFOAM-1.7.x-mingw-w64-mpich MinGW-w64 のライブラリもコピー。 $ cd ~/mingw-w64/bin $ cp zlib1.dll libgcc_s_sjlj-1.dll libstdc++-6.dll ~/OpenFOAM-1.7.x-mingw-w64-mpich/bin 圧縮。 $ cd $ zip -r OpenFOAM-1.7.x-mingw-w64-mpich.zip OpenFOAM-1.7.x-mingw-w64-mpich Windows での OpenFOAM のセットアップ作成したパッケージを MSYS のホームディレクトリに設置。 環境変数を設定。 ~/.bashrc export WM_PROJECT_DIR=~/OpenFOAM-1.7.x-mingw-w64-mpich export USERNAME="openfoam" export PATH=~/OpenFOAM-1.7.x-mingw-w64-mpich/bin:$PATH export PATH="/c/Program Files/MPICH2/bin":$PATH export MPI_BUFFER_SIZE=20000000 .bashrc を読み込む。 $ . ~/.bashrc 実行icoFoam のチュートリアルケース cavity を実行。 $ cp -r ~/OpenFOAM-1.7.x-mingw-w64-mpich/tutorials/incompressible/icoFoam/cavity . $ cd cavity $ blockMesh $ icoFoam 結果を ParaView で見るために cavity.foam を作成。 $ touch cavity.foam 並列計算の実行並列計算を行う場合は、管理者でサーバー smpd を起動し、mpiexec で計算を実行する。 Windows XP の場合、smpd 起動時にレジストリのエラーが出た。regedit で HKEY_LOCAL_MACHINE\SOFTWARE\MPICH を消してから作り直したら、smpd が起動した。 Windows 7 の場合もエラーで smpd が起動しなかった。コントロールパネルのユーザーアカウントの "ユーザーアカウント制御設定の変更" で "コンピューターに対する変更の通知を受け取るタイミングの選択" を "通知しない" に設定してコンピュータを再起動すると、smpd が起動した。 smpd のインストールおよび起動。 $ smpd -install interFoam のチュートリアルケース damBreak を実行。 $ cp -r ~/OpenFOAM-1.7.x-mingw-w64-mpich/tutorials/multiphase/interFoam/laminar/damBreak . $ cd damBreak $ blockMesh $ vi system/decomposeParDict ... decomposeParDict を編集 ... $ decomposePar $ mpiexec -localonly 2 interFoam -parallel ベンチマークdamBreak に 1 度だけ refineMesh を適用したモデル (セル数約 9,000) でベンチマークを行った。計算は Core i5 M450 2.4 GHz のマシンで行った。
うーん…微妙。 | ||||||
| PENGUINITIS | ||||||