OpenFOAM 1.7.x on Windows 64 bit

2011年3月4日

はじめに

Symscape の OpenFOAM 1.7.x on Windows 64-bit with Native MPI をもとに Windows バイナリを作ってみた。並列計算には対応しない。

環境

  • Ubuntu 10.04 LTS (x86_64)、Windows XP 64 bit、MinGW-w64 & MSYS
  • openSUSE 11.3 (x86_64)、Windows 7 64 bit、MinGW-w64 & MSYS

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

checkout。

$ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw
$ 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
$ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw
$ patch -p0 < v5-mingw-openfoam-1-7-x.patch

~/OpenFOAM/OpenFOAM-1.7.x-mingw/etc/bashrc の WM_PROJECT_VERSION を修正。

export WM_PROJECT_VERSION=1.7.x-mingw

また、その下に以下を追加。

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='NONE'

~/OpenFOAM/OpenFOAM-1.7.x-mingw/etc/bashrc を読み込む。

$ . ~/OpenFOAM/OpenFOAM-1.7.x-mingw/etc/bashrc

OpenFOAM のコンパイル

$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/wmake/src
$ make
$ cd ../..
$ ./Allwmake

Windows 用パッケージを作成する。

$ mkdir -p ~/OpenFOAM-1.7.x-mingw-w64/bin
$ cd ~/OpenFOAM/OpenFOAM-1.7.x-mingw
$ cp -r etc ~/OpenFOAM-1.7.x-mingw-w64
$ cp applications/bin/linux64mingw-w64DPOpt/*.exe ~/OpenFOAM-1.7.x-mingw-w64/bin
$ cp lib/linux64mingw-w64DPOpt/*.dll ~/OpenFOAM-1.7.x-mingw-w64/bin
$ cp lib/linux64mingw-w64DPOpt/dummy/*.dll ~/OpenFOAM-1.7.x-mingw-w64/bin
$ cp -r tutorials ~/OpenFOAM-1.7.x-mingw-w64

MinGW-w64 のライブラリもコピー。

$ cd ~/mingw-w64/bin
$ cp zlib1.dll libgcc_s_sjlj-1.dll libstdc++-6.dll ~/OpenFOAM-1.7.x-mingw-w64/bin

圧縮。

$ cd
$ zip -r OpenFOAM-1.7.x-mingw-w64.zip OpenFOAM-1.7.x-mingw-w64

Windows での OpenFOAM のセットアップ

作成したパッケージを MSYS のホームディレクトリに設置。

環境変数を設定。

~/.bashrc

export WM_PROJECT_DIR=~/OpenFOAM-1.7.x-mingw-w64
export USERNAME="openfoam"
export PATH=~/OpenFOAM-1.7.x-mingw-w64/bin:$PATH

.bashrc を読み込む。

$ . ~/.bashrc

実行

icoFoam のチュートリアルケース cavity を実行。

$ cp -r ~/OpenFOAM-1.7.x-mingw-w64/tutorials/incompressible/icoFoam/cavity .
$ cd cavity
$ blockMesh
$ icoFoam

結果を ParaView で見るために cavity.foam を作成。

$ touch cavity.foam