blueCFD-Core のインストール

2018年12月1日

はじめに

非公式 Windows 版 OpenFOAM パッケージ blueCFD-Core のインストールについて。

利用環境

  • Windows 7 64 bit
  • blueCFD-Core 2017-2

blueCFD-Core のインストール

  1. ここ からパッケージをダウンロードする。結構時間がかかるかもしれない。ダウンロードが途中で切れたりしたので、wget などダウンロードを再開できるツールを用いるのがおすすめ。
  2. ダウンロードしたパッケージをクリックする。
  3. インストール開始。Next
  4. ライセンス。"I accept the agreement" を選んで Next。
  5. インストール先の指定。たぶんドライブの直下のほうがよいと思う ("Program Files" のスペースが悪さをしそうなので)。
  6. インストール内容を選ぶ。インストールされるものは、OpenFOAM/ParaView、MSYS2、MS-MPI、Gnuplot、Notepad2 である。MS-MPI 以外は blueCFD-Core インストール先にインストールされるので、もしすでに同じものがインストールされていても影響しない。MS-MPI については、古いものが入っていたら入れ替えようとする。同じバージョンが入っていたら、単純にインストールをあきらめる。こだわりがなければ "Full Instration" でよい。
  7. Next。
  8. 好きなようにする。。
  9. "Install" でインストールが始まる。しばし待つ。
  10. インストール完了。
  11. スタートメニューから、"blueCFD-Core terminal" を起動する。
  12. MSYS2 のターミナルが起動する。初回起動時のみセットアップのメッセージがいくつか出る。

ホームディレクトリは、スタートメニューの "blueCFD-Core folder" から "msys64\home\ofuser" にある。

チュートリアルケースの実行

チュートリアルケースを実行する。

  1. ケースファイルをコピーし、blockMesh を実行する。
    $ cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity .
    $ cd cavity
    $ blockMesh
    

  2. icoFoam を実行。
    $ icoFoam
    

  3. paraFoam を実行すると、ParaView が起動する。Linux 版の paraFoam と違い、OpenFOAM のプラグインではなくて、ParaView のネイティブリーダーが起動する。
    $ paraFoam
    

    ※ここで用いた環境では、blueCFD-Core 付属の ParaView 5.1.2 が起動しなかった。代わりに ParaView 4.4.0 を利用した。
  4. ソルバーのコンパイル

    ソルバーのコンパイルを行う。ソルバーをコピーする。

    $ 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 を単体でコンパイルしなおしたらエラーは出なくなった。