XfoilをmacOS Catalinaで使う

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

# 事前準備
`Xfoil`のコンパイルには，`gcc`，`gfortran`，`XQuartz`が必要です。初めにこれらをダウンロードするために`Homebrew`を用意します。以下のコマンドを実行してください。

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

次に，`gcc`と`gfortran`をダウンロードします。`gfortran`は`gcc`をダウンロードすると一緒にダウンロードされます。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](https://www.xquartz.org)をダウンロードします。全てダウンロードできたら準備完了です。

# Xfoilのソースコードのダウンロード
[Xfoilのホームページ](https://web.mit.edu/drela/Public/web/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行目付近にある

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

を

```fortran: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`に変え，

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

を

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

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

```makefile
# 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`を開いて

```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 
```

を

```make: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:Makefile
BINDER = /home/codes/bin/
#BINDER = .
```

を

```makefile:Makefile
#BINDER = /home/codes/bin/
BINDER = .
```

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

```makefile:Makefile
PLTLIB = -L/usr/X11R6/lib -lX11
```

を

```makefile:Makefile
PLTLIB = -L/usr/local/X11/lib -lX11
```

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

```makefile: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: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`などに

```shell
export PATH=/Users/user/Xfoil/bin:$PATH
```
と記述すれば，

```shell
$ xfoil
```

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

# 参考資料
[Xfoil](https://web.mit.edu/drela/Public/web/xfoil/)
[Macのgcc, g++をHomebrewを使って最新版にする](https://qiita.com/wawawa/items/50c2c612b0937f28d92b)
[Compiling Xfoil on OS X](https://solarianprogrammer.com/2014/01/23/xfoil-mac-os-x/)
[How to install Xfoil? (MacOS example)](https://www.youtube.com/watch?v=6oz03Fk9DKc&list=LL&index=1)