FrontFlow/red のコンパイル (Windows 版)

2015年11月16日

はじめに

FrontFlow/red を MinGW の gfortran でコンパイルする。

バージョン

  • FrontFlow/red Ver. 3.1.004 (2015.9.24 修正版)
  • MinGW x86_64 5.2.0 / MSYS2 64 bit
  • Microsoft MPI / Microsoft MPI SDK Ver. 6.0.12436.10
  • Windows 7 64 bit

環境について

MSYS2 から MinGW をインストールできるようだが、先に MinGW を入れてあったので、MSYS2 を後入れして、以下のものだけインストールした。

  • vim
  • unzip
  • tar
  • patch
  • make

インストールコマンド

$ pacman -S vim

C コンパイラには gcc、Fortran コンパイラには gfortran を用いる。

準備

FrontFlow/red を ここ から入手し、展開する。

Microsoft MPI (本体と SDK) を ここ から入手し、インストールする。

FrontFlow/red のコンパイル

FrontFlow/red はいくつかのプログラムから構成される。コンパイルはそれぞれの Mekefile.in を環境に合わせて修正して make を実行すればよい。基本的には付属の文書 ("OPEN_FFR/FFR_V3.1.004/readMe") 通りに実行すればよいはずだが、いくつか問題にぶつかったので、手順を自動化した。

以下の手順でコンパイルする。

  1. 上記のパッケージを展開して、その中のファイルをすべて FrontFlow/red のディレクトリ (OPEN_FFR) に放り込む。
    $ cp FFR_V3.1.004-gfortran-mingw64/* OPEN_FFR
    
  2. プログラムを修正するためにパッチを当てる。
    $ cd OPEN_FFR
    $ patch -p1 < FFR_V3.1.004-gfortran-mingw64.patch
    
  3. Makefile.in は以下の通り。必要に応じて書き換える。
  4. ###
    ### macro definitions
    ###
    ###
    
    ### compile for OS
    OS = Linux
    
    ### Fortran compiler related macros
    F90 = gfortran
    F90LINKER = gfortran
    FOPTIONS = -O2 -ffixed-line-length-128 -fno-range-check -static
    
    
    ### C compiler related macros
    CC = gcc
    COPTIONS = -O2 -D__VC__ -UWIN32 -static
    
    
    ### C linker related macros
    LDOPTIONS =
    AR = ar rv
    RANLIB = ar -ts
    
    
    ### MPI related macros
    MPI_F90 = gfortran -O2 -ffixed-line-length-128 -fno-range-check -static
    MPI_INC = -I"/c/Program Files (x86)/Microsoft SDKs/MPI/Include" -I"/c/Program Files (x86)/Microsoft SDKs/MPI/Include/x64"
    MPI_LIBS = "/c/Program Files (x86)/Microsoft SDKs/MPI/Lib/x64/msmpifec.lib" "/c/Program Files (x86)/Microsoft SDKs/MPI/Lib/x64/msmpifmc.lib" "/c/Program Files (x86)/Microsoft SDKs/MPI/Lib/x64/msmpi.lib"
    # eof
    
  5. Makefile.in の修正が済んだら、コンパイルを実行するのだが、このままではうまくいかない。下記のようなエラーが出る。
    $ make
    
    ...
    
    mpif.h:407:35: Error: Function 'int_ptr_kind' in initialization expression at (1) must be an intrinsic function
    
    mpif.h ("C:\Program Files (x86)\Microsoft SDKs\MPI\Include\mpif.h") の問題の行は次のものである。
           PARAMETER (MPI_ADDRESS_KIND=INT_PTR_KIND())
    
    この "INT_PTR_KIND()" は Intel Fortran の関数のようだが、8 を返すだけのようなので、直接書き換えてしまう。
           PARAMETER (MPI_ADDRESS_KIND=8)
    
    コンパイルを実行。
    $ make
    
  6. コンパイルに成功したら、"OPEN_FFR/FFR_V3.1.004/bin_FFR" にパスを通すなり、適当なところにインストールするなりする。

    参考

    並列実行について

    並列実行には mpiexec を使う。

    $ mpiexec -n 2 fflowHPC