XfoilをmacOS Catalinaで使う


macOS Catalinaで32bitアプリケーションが使えなくなったことにより,さまざまな弊害が生じています。その一つがXfoilと呼ばれる翼型の解析ソフトです。鳥人間コンテストで機体設計を行っている人は使ったことがあるかと思います。これまではXFOIL4MACからmacOS用のXfoilをダウンロードするのが一般的でしたが,これでダウンロードできるソフトウェアは32bitアプリケーションのため,今はもう使えません。そこで,ソースコードからコンパイルする方法を紹介します。

事前準備

Xfoilのコンパイルには,gccgfortranXQuartzが必要です。初めにこれらをダウンロードするためにHomebrewを用意します。以下のコマンドを実行してください。

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

次に,gccgfortranをダウンロードします。gfortrangccをダウンロードすると一緒にダウンロードされます。macにもgccはダウンロードされていますが,これを使うとコンパイル時にエラーが生じるため,Homebrewからダウンロードしましょう。

$ brew install gcc

少々時間がかかります。ダウンロードされたら,

$ gcc --version
$ gfortran --version

をそれぞれ実行してください。以下のように表示されれば成功です。

$ gcc -v
gcc (Homebrew GCC 9.3.0_1) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

$ gfortran -v
GNU Fortran (Homebrew GCC 10.2.0_2) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

次にXQuartzをダウンロードします。全てダウンロードできたら準備完了です。

Xfoilのソースコードのダウンロード

Xfoilのホームページからxfoil6.99.tgzをダウンロードします。これを解凍するとXfoilというディレクトリが作られるので,homeに移動させます。

Xfoil/orrs/src/osmap.fの変更

orrsに移動。

$ cd ~
$ cd Xfoil
$ cd orrs

次にorrsの絶対パスを取得。

$ pwd
/Users/user/Xfoil/orrs

Xfoil/orrs/src/に移動。

osmap.fを開き,101行目付近にある

osmap.f
DATA OSFILE / '/home/codes/orrs/osmapDP.dat' /

osmap.f
DATA OSFILE / '/Users/user/Xfoil/orrs/osmapDP.dat' /

に変更し保存。

Xfoil/orrs/bin/Makefileの変更

Xfoil/orrs/binに移動。
Makefileを開き,/home/codes/Xplot/Users/user/Xfoil/plotlibに変え,

FC = f77
FLG = -O
PLTLIB = -lX11
FTNLIB =

FC = gfortran
FLG = -O2 -fdefault-real-8
PLTLIB = -L/usr/local/X11/lib -lX11
FTNLIB =

に変更。Intel Fortran Compilerのコンパイラフラッグはコメントアウト。

# FC = ifort
# FLG = -O -fpe0 -CB
# PLTLIB = -L/usr/X11R6/lib -lX111
# FTNLIB =

Makefileを保存し,Terminal

$ make osgen
$ make osmap.o
$ cd ..
$ bin/osgen osmaps_ns.lst

を実行。次にXfoilで用いられているプロットライブラリのビルドを行います。

Xfoil/plotlib/config.makeの変更

まずconfig.makeを作る。

$ cp config.make.gfortranDP config.make

config.makeを開いて

config.make
...
FFLAGS  = -m64 -O2 $(DP)
CFLAGS  = -m64 -O2 $(DEFINE) -I/usr/X11/include
AR = ar r
RANLIB = ranlib 
LINKLIB = -L/usr/X11R6/lib -lX11 

config.make
...
FFLAGS  = -m64 -O2 $(DP)
CFLAGS  = -m64 -O2 $(DEFINE) -I/usr/local/X11/include
AR = ar r
RANLIB = ranlib 
LINKLIB = -L/usr/local/X11/lib -lX11

にして保存。次に,

$ make

を実行。

その後

$ make test

を実行してエラーが出なければ良い。

Xfoil/bin/Makefileの変更

Makefileの9行目付近にある

Makefile
BINDER = /home/codes/bin/
#BINDER = .

Makefile
#BINDER = /home/codes/bin/
BINDER = .

に変更。43行目付近にある

Makefile
PLTLIB = -L/usr/X11R6/lib -lX11

Makefile
PLTLIB = -L/usr/local/X11/lib -lX11

に変更。また、119行目付近にある

Makefile
...
FC = gfortran
CHK = 
CHK = -fbounds-check -finit-real=inf -ffpe-trap=invalid,zero
DBL = -fdefault-real-8
FFLAGS = -O $(CHK) $(DBL)
FFLOPT = -O $(CHK) $(DBL)
FTNLIB =
...

Makefile
...
FC = gfortran
CHK = 
CHK = -fbounds-check -finit-real=inf -ffpe-trap=invalid,zero
DBL = -fdefault-real-8
FIX = -std=legacy
FFLAGS = -O $(CHK) $(DBL) $(FIX)
FFLOPT = -O $(CHK) $(DBL)
FTNLIB =
...

に変更して保存。

xfoilのビルド

最後にxfoilをビルドする。

$ make xfoil
$ make pplot
$ make pxplot

これで

$ cd ~/Xfoil/bin
$ ./xfoil

でXfoilを使えるようになりました。
なお,bash_profileなどに

export PATH=/Users/user/Xfoil/bin:$PATH

と記述すれば,

$ xfoil

でXfoilを起動できるようになります。

参考資料

Xfoil
Macのgcc, g++をHomebrewを使って最新版にする
Compiling Xfoil on OS X
How to install Xfoil? (MacOS example)