GerrisをUbuntuにインストール

この記事は流体解析のオープンソースソフトウェアであるGerrisを，Ubuntuにソースからインストールした際の手順を備忘録としてまとめたものです．

# Gerrisとは？

GerrisはStéphane Popinetによって開発されたオープンソースの流体解析コードであり，先進的な機能の開発はBasiliskというコードに引き継がれています．Gerrisに関する情報は[Wikiのページ](http://gfs.sourceforge.net/wiki/index.php/Main_Page)でほぼ網羅的に入手できます．

# インストールの種類

各種プラットフォームにインストールすることができます．

* Linuxの場合，Ubuntu/Debian，Open SUSE，Fedra，CentOS用にバイナリが用意されています．
* Macの場合，brewでインストールできます．
* Windowsの場合，cygwin上でソースからコンパイルできたという情報があります．
* どのようなプラットフォームでもソースからビルドできます．
* 開発者向け(ソースを拡張する人)には，[darcs](http://darcs.net/)を使うことが推奨されています．darcsはgitのようにソースコードのバージョン管理ができます．

# インストールするもの

Gerrisでプリ・ポストを含めた流体解析を行うためには以下の3つをインストールする必要があります．

* Gerris Flow Solver本体
* GTS(GNU Triangulated Surface)，形状データを扱うために必要
* GfsView，可視化画像・動画を出力するために必要

# darcsを用いたバージョン管理

今回はUbuntu 20.04にインストールを行います．はじめに，Wikiを参照してdarcsをインストールします．

```bash
$ sudo apt-get install darcs
```
darcsがインストールできたら，darcsを用いてGerrisのlatest stable versionのソースを持ってきます．

```bash
$ darcs get http://gerris.dalembert.upmc.fr/darcs/gerris-stable
```

同様にdarcsでGTS(GNU Triangulated Surface)のソースを持ってきます．

```bash
$ darcs get http://gerris.dalembert.upmc.fr/darcs/gts-stable
```

同様にdarcsでGfsView(可視化用ユーティリティ)のソースを持ってきます．

```bash
$ darcs get http://gerris.dalembert.upmc.fr/darcs/gfsview-stable
```
Gerris本体，GTS，GfsViewをインストールするためにはautomake(バージョン1.6以上)が必要であり，無ければ以下のようにインストールします．

```bash
$ sudo apt-get install automake libtool libtool-bin
```

今回，`libtool --version`でlibtoolが見つからなかったので，以下のようにlibtool-binをインストールした．

```bash
$ sudo apt-get install libtool-bin
```

# GTSのインストール

glib development packageをインストールします．

```bash
$ sudo apt-get install libglib2.0-dev
```

依存パッケージをインストールしておきます．

```bash
$ sudo apt-get install libglib2.0-dev libnetpbm10-dev m4 libproj-dev \
libgsl0-dev libnetcdf-dev libode-dev libfftw3-dev libhypre-dev \ 
libgtkglext1-dev libstartup-notification0-dev ffmpeg
```

さらに，以下のようにOpenMPIのライブラリをインストールします(今回は必要なし，インストール済み)．

```bash
$ sudo apt-get install libopenmpi-dev
```

`autogen.sh`スクリプトで`configure`スクリプトを生成し，`make`でインストールします．

```bash
$ cd gts-stable
$ sh autogen.sh
$ make
$ sudo make install
```

prefixを指定しない場合は`/usr/local`以下にライブラリがインストールされます．新しくイントールされたライブリをシステムに認識させる必要があります．いま，`/etc/ld.so.conf`の中身は以下のようになっています．

```bash
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
```

自分の環境では，`/etc/ld.so.conf.d/libc.conf`の中に`/usr/local/lib`が見つかりましたので，何も追記する必要はありません(`/usr/local/lib`が見つからないようだったら適当な`.conf`を作成して追記する)．

```bash
$ cat /etc/ld.so.conf.d/libc.conf
# libc default configuration
/usr/local/lib
```

`ldconfig`を実行します．

```bash
$ sudo /sbin/ldconfig
```

`HOME`ディレクトリ以下などにライブラリをインストールした場合は，適当なパス(`PATH`, `LD_LIBRARY_PATH`)を設定してあげます．

# Gerris本体のインストール

Gerrisは並列計算が可能なのでOpenMPIをインストールしておきます(今回は必要なし，インストール済み)

```bash
$ sudo apt-get install openmpi-bin libopenmpi-dev
```

`autogen.sh`スクリプトで`configure`スクリプトを生成し，`make`でインストールします．

```bash
$ cd ../gerris-stable
$ sh autogen.sh
$ make
$ sudo make install
```

`make`中に以下のようなエラーが出てコンパイルできませんでした．

```bash
gerris.c:38:10: fatal error: version.h: そのようなファイルやディレクトリはありません
   38 | #include "version.h"
      |          ^~~~~~~~~~~
compilation terminated.
```

`version.h`にはソフトウェアのバージョンが記載されているのですが，darcsで持ってきたソースコードにはこのファイルが含まれていないようでした．仕方ないので，source tarballを持ってきてコンパイルすることにします．

```bash
$ wget http://gerris.dalembert.upmc.fr/gerris/gerris-snapshot.tar.gz
$ tar zxvf gerris-snapshot.tar.gz
$ mv gerris-snapshot-131206 gerris
```

ソースを無事に持って来れたら，`configure`して`make`します．

```bash
$ ./configure
$ make
```

また`make`の途中で以下のようなエラーを出力して止まってしまいました．

```
init.c:416:5: error: call to 'MPI_Errhandler_set' declared with attribute error: MPI_Errhandler_set was removed in MPI-3.0.  Use MPI_Comm_set_errhandler instead.
  416 |     MPI_Errhandler_set (MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL);
```

MPI関連のエラーで，新しいエラーハンドラーに変えてくださいね，ということなので該当ソースを修正します．

```c
    else
      MPI_Init (argc, argv);
//      MPI_Errhandler_set (MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL);
      MPI_Comm_set_errhandler (MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL);
  }
```

修正したら，`make`してインストールします．

```bash
$ make
$ sudo make install
$ sudo /sbin/ldconfig
```

無事にインストールできたら，以下のようにバージョンを確認してみます．

```bash
$ gerris2D -V 
gerris: using 2D libgfs version 1.3.2 (131206-155120)
  compiled with flags: 
  MPI:          yes
  pkg-config:   yes
  m4:           yes
Copyright (C) 2001-2011 NIWA.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

# GfsViewのインストール

依存パッケージライブラリをインストールします．

```bash
$ sudo apt-get install libgtk2.0-dev libgtkglext1-dev libstartup-notification0-dev libftgl-dev
```

バッチ処理でGUIビューワーを介さずに可視化動画の作成を行うためにOSMesaをインストールします．

```bash
$  sudo apt-get install libosmesa6-dev
```

`configure`，`make`でインストールします．

```bash
$ cd ../gfsview-stable
$ sh autogen.sh
$ make
$ sudo make install
```
以上でGTS，Gerris本体，GfsViewのインストールは完了です．

# まとめ

Gerris Flow Solverの本体と，形状データを扱うためのGTS，及び可視化用のGfsViewをUbuntuにインストールできました．無事にインストールできましたら，[Gerris Tutorial](http://gfs.sourceforge.net/tutorial/tutorial/tutorial1.html)に従って使い方を学びましょう．