blueCFD-Core のインストール2018年12月1日 | |
はじめに非公式 Windows 版 OpenFOAM パッケージ blueCFD-Core のインストールについて。 利用環境
blueCFD-Core のインストール
ホームディレクトリは、スタートメニューの "blueCFD-Core folder" から "msys64\home\ofuser" にある。 チュートリアルケースの実行チュートリアルケースを実行する。
ソルバーのコンパイルソルバーのコンパイルを行う。ソルバーをコピーする。 $ cp -r $FOAM_SOLVERS/incompressible/icoFoam $ cd icoFoam "Make/files" を編集する。以下の行を変更。 EXE = $(FOAM_APPBIN)/icoFoam カレントディレクトリに実行ファイルができるように、次のようにする。 EXE = ./icoFoam ※Linux 版だと "EXE = icoFoam" と書いてもよいのだが、blueCFD-Core ではスクリプトの処理の関係で ("/" を想定しているので) コンパイルが上手くいかない。 wmake を実行する。 $ wmake ![]() "icoFoam.exe" が作成されていれば OK。 ParaView が動かない場合付属の ParaView が動かない場合、古いバージョンの ParaView を試すとよい。もしそれが動くなら、入れ替える。インストールフォルダの "AddOns\ParaView" を動くバージョンの ParaView のフォルダとそっくり置き換えればよい。 foamMonitor を使う場合の注意foamMonitor を使うと、残差などを gnuplot を用いて表示できるが、foamMonitor が gnuplot に対して "set term x11 ..." という設定をしているため、Windows ではうまく動かない。そこで、この行を変更するか、単純にコメントにする。 $WM_PROJECT_DIR/bin/foamMonitor plotFileHeader() { cat<<EOF #set term x11 1 font "helvetica,17" linewidth 1.5 persist noraise <-- この行 $LOGSCALE $YRANGE set title "Data Monitoring" set xlabel "$XLABEL" plot \\ EOF } コマンドプロンプトからの OpenFOAM の実行コマンドプロンプからの実行blueCFD-Core 2017 には、スタートメニューにコマンドプロンプトからの起動方法が追加されている。これを使えばよいのだが、カレントディレクトリがインストール先になってしまう。また、PATH を上書きしているようである。これでは少々使いにくいので、カレントディレクトリが起動ディレクトリになるように試みてみた。 コマンドプロンプからの起動の本体は、DOS_Mode.bat と setvars.bat である。DOS_Mode.bat は setvars.bat を用いてコマンドプロンプトを起動するもので、setvars.bat は環境変数を設定する。DOS_Mode.bat を編集して以下のようなものを作った。 DOS_Mode2.bat @echo off for /f "usebackq tokens=*" %%i IN (`cd`) DO @set wd=%%i call "%˜dp0\setvars.bat" cd %wd% rem 必要があればここに PATH の設定を入れる %COMSPEC% ショートカットを起動したいフォルダに入れておき、ショートカットのプロパティの作業フォルダを空にして起動する。 MSYS2 経由での実行blueCFD-Core の OpenFOAM 環境は MSYS2 上で構築されているが、コマンドプロンプトから OpenFOAM を実行するために、以下のような強引な方法を考えた。 まず、bash はしっかり起動させる必要がある。そうでないと OpenFOAM の設定が完了しない。そこで、.bashrc の最後でコマンド実行スクリプトを実行させることにした。コマンドプロンプトから MSYS2 にコマンドを実行させたいときは、実行スクリプトを置いておく。bash は .bashrc の読み込みの最後で実行スクリプトを見つければ、それを実行し、削除、bash を終了する。 ~/.bashrc if [ -f $HOME/post_run.sh ] ; then trap "rm $HOME/post_run.sh" 1 2 3 15 $HOME/post_run.sh rm $HOME/post_run.sh exit fi コマンドプロンプト側では、MSYS2 の起動および実行スクリプト作成のためのバッチファイルを用意する。 run.bat @echo off set USERNAME=ofuser set USER=ofuser set HOME=/home/ofuser set MSYSTEM=MINGW64 set MSYSDIR=C:\blueCFD-Core-2017\msys64\ set WD=%MSYSDIR%usr\bin\ set HOMEA=%MSYSDIR%home\ofuser\ set CURRENT=%CD:\=/% set CURRENT=%CURRENT:C:=/c% set SCRIPT=%HOMEA%post_run.sh echo #!/bin/sh > %SCRIPT% echo cd %CURRENT% >> %SCRIPT% echo %* >> %SCRIPT% start "" "%WD%mintty" /usr/bin/bash --login 変数 MSYS はインストール先による。変数 CURRENT の部分では、DOS のパスを MSYS2 のパスに変換している。変数 SCRIPT で blueCFD のホームディレクトリに実行スクリプトを作成するようにしている。実行スクリプトは、カレントディレクトリに移動後、バッチファイルの引数を実行するようにしているので、バッチファイルにコマンドを渡してやればよい。たとえば、デスクトップでもよいので、チュートリアルケースの中にこのスクリプトを置き、その中で次のようにソルバーを指定して実行する。 >run.bat icoFoam MSYS2 (mintty) が起動して、ソルバーが実行されて終了する。ログを取りたい場合は foamJob を使えばよいが、そのままだとバックグラウンド実行であり、実行スクリプト終了後はシェルが終了してしまってソルバーが落ちるので、"-wait" オプションを用いる。 >run.bat foamJob -wait icoFoam paraFoam も起動できるが、ただ "paraFoam" とするとシェルスクリプト版 "paraFoam" が起動するようなので、バッチ版 "paraFoam.bat" を直接指定する。 >run.bat paraFoam.bat Python からの OpenFOAM の実行Python から OpenFOAM のコマンドを実行したい場合、次のようにすればできなくもない。コマンドプロンプトからの起動方法を利用する。 import os import subprocess as sp bluecfd_core_path = r"c:\blueCFD-Core-2017" def run_command(command): sp.call("call {}\setvars.bat & cd {} & {}" \ .format(bluecfd_core_path, os.getcwd(), command), shell=True) run_command("blockMesh") run_command("simpleFoam") OpenFOAM のアップデートこちら にしたがってアップデートする。 以下は blueCFD-Core 2016 でのもの (2016年11月3日メモ)。実行する時期によって挙動が変わる可能性あり。 その前に、Locale を "C" にしておいたほうがよいかもしれない。コマンドウインドウ (mintty) で右クリックして [Options...] を選び、"Text" の "Locale" で "C" を選び [Save]、再起動する。 ソースコードを更新。 $ foam $ git pull $ cd $WM_THIRD_PARTY_DIR $ git pull ビルド。 $ foam $ wcleanPlatform -current $ wcleanLnIncludeAll $ ./Allwmake -j -k > log.make 2>&1 & 上記ページではこのあとにも指示があるのだが、どうも様子が違うようである。log.make を見ると、次のようなエラーが見られた。 /bin/sh: /home/ofuser/blueCFD/OpenFOAM-4.x/wmake/scripts/makeReinterpretExePath: Permission denied make: execvp: /home/ofuser/blueCFD/OpenFOAM-4.x/wmake/scripts/makeVersionResourceFile: Permission denied 実行権限がないのが問題のようである。実行権限を設定する。 $ chmod +x /home/ofuser/blueCFD/OpenFOAM-4.x/wmake/scripts/makeReinterpretExePath $ chmod +x /home/ofuser/blueCFD/OpenFOAM-4.x/wmake/scripts/makeVersionResourceFile ビルドしなおす。※クリーンして最初からやりなおしたほうがよかったかも。 $ ./Allwmake -j -k > log.make2 2>&1 & エラーが出ていたが、とりあえず使えそうなので放置する。 foamListTimes の実行で次のようなエラーが出た。 bash: /home/ofuser/blueCFD/OpenFOAM-4.x/platforms/mingw_w64GccDPInt32Opt/bin/foamListTimes.exe: Accessing a corrupted shared library クリーンせずに再ビルドしたせいかもしれない。foamListTimes を単体でコンパイルしなおしたらエラーは出なくなった。 cfMesh のコンパイルこちら に従って作業すれば、cfMesh をコンパイルできる。 ターミナルを起動し、ユーザーディレクトリに移動。 $ user ソースをダウンロード。 $ git clone https://github.com/blueCFD/cfMesh.git -b blueCFD-Core-2017 移動。 $ cfMesh 並列コンパイルの設定。 $ wmMC cfMesh のコンパイル。 $ ./Allwmake > log.make 2>&1 cartesianMesh が実行できるようになっていれば多分 OK。 | |
PENGUINITIS |