Macで気象シミュレーションをするためのセットアップ

# はじめに
Macに気象のシミュレーションをするためのソフトSCALEを導入します。
SCALEとは「Scalable Computing for Advanced Library and Environment」の略で、理化学研究所計算機科学センターが中心となって開発している基盤ライブラリです。SCALEでは気候研究や天気予報を容易に様々な計算機上で行うことができます。

一部初心者向けに詳しく書いてある部分もありますが、慣れている方は読み飛ばしていただいても構いません。

# インストール
コンパイルに必要なライブラリ等をインストールします。

## Xcode
[App Store](https://apps.apple.com/jp/app/xcode/id497799835?mt=12)からインストールします。インストールには時間がかかります。
<br>

## Command Line Tools

- ターミナルで使う各種コマンドをインストールするためのものです。 Xcodeを⽴ち上げ、上のメニューバーから
 ```Xcode > Open Developper Tools > More Developper Tools...```
と辿ってクリックすると、 サイトが開きます。

- Apple ID でログインすると```More Downloads for Apple Developers ```というページにたどり着きます。

- 左のサーチ欄に```Command Line Tools```と打ち込み、検索すると⼀覧が表⽰されます。⾃分の MacOS に対応するものをダウンロードしてください。これは少し時間がかかります。

- ターミナルを開いて、以下のコマンドを入力します。
    
```
$ sudo xcodebuild -license
```
スペースを押して⾏き、最後に”agree”と⼊⼒すれば完了です。

## XQuartz
シミュレーション結果を画面で出力するためのツールです。
https://www.xquartz.org にアクセスして、最新版をダウンロードしましょう。
Macでは標準で入っている場合もあります。

## GrADS (Grid Analysis and Display System)

- [GrADSのサイト](http://cola.gmu.edu/grads/downloads.php)の表の下にある「Earlier releases are available for…」と書いてあるところで，grads-2.1というところをクリックして，「grads-2.1.1.b0-bin-darwin13.4-withoutssl.tar」をダウンロードするとうまくいきました。

- ダウンロードされたファイルをクリックすると展開され、 おそらく`grads-2.1.1.b0` というディレクトリが⽣成されます。

- ターミナルで以下のコマンドを実行して実行ファイルをコピーします。
    - もし/usr/local/bin/が無い場合は先に mkdir で作ってください。
    - Downloadsのディレクトリ以外に展開した場合は`Downloads`の部分を適宜変更してください。
    
```
$ cp ~/Downloads/grads-2.1.1.b0/bin/* /usr/local/bin/
```
- gradslibというgradsのライブラリをインストールします。
    - 筑波大学の釜江先生が公開してくださっているライブラリがあるので今回はこちらを利用しました。
    - [こちら](http://web.is.ocha.ac.jp/~tsubasa/scale/gradslib.zip)からgradslib.zipをダウンロードしてください。
    
- ダウンロードされたファイルをクリックすると、解凍されて gradslib というディレクトリが⽣成されます。

- ターミナルでgradsディレクトリを作成します。


```
$ mkdir -p /usr/local/lib/grads
``` 
- 次にgradslib ディレクトリの中⾝を grads ディレクトリに全てコピーします。

    - このディレクトリーには、GrADS 内で使⽤するフォントや、海岸線データ、スクリプト内で使えるコマンドなどが⼊っています。もし今後、GrADS で新たなコマンド（誰かが作ったユーザー定義のコマンドなど）を使いたい場合は、そのコマンドのスクリプトを、この grads ディレクトリにコピーすれば、使えるようになります。

```
$ cp -r ~/Downloads/gradslib/* /usr/local/lib/grads/
```

- 環境変数を設定します。`$ vi ~/.bash_profile` とすると Vi(エディタ)で.bashrc というファイルがターミナル上で起動するので、このファイル内に以下のことを書き込んでください。<br>
(「i」キーを押すと⼊⼒できるようになります。マウスは使えないのでカーソル移動は⽮印キーで。)

```terminal:~/.bash_profile
export PATH="$PATH:/usr/local/bin"
export GASCRP="/usr/local/lib/grads"
export GADDIR="/usr/local/lib/grads"
```

- 書き終わったら、`esc`キーを押したあとで、`:wq`と⼊⼒すると保存されます。保存されると、元のターミナル画⾯に戻ります。`$ source ~/.bash_profile` とすることで、書いた内容を反映させることができます。

- `$ grads` と打つと、⿊い画⾯が出てきて、ターミナルは左端が ga->に変わっていたらインストール成功です。
- もし`grads`と入力してもエラーが出る場合は再起動をしてみてください。
- grads は、`quit` コマンドで終了します。


## Homebrew
最後にHomebrewをインストールします。
Homebrewが入っているかどうかわからない場合はターミナルに`brew`と入力して確認してみてください。
`Command not found`と出た場合は下のコマンドを実行してHomebrewを入れてください。
下のバージョンは最新ではない可能性がありますので[公式サイト]()を確認するようにしてください。

```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

## Homebrewを用いてインストールできるもの

以下はHomebrewを使ってインストールします。

- gcc<br>
後述のwgrib2でXcodeのものだとエラーが出てしまうためインストールします。

```
$ brew install gcc
```
- netcdf

```
$ brew install netcdf
```
- open-mpi

```
$ brew install open-mpi
```
- ncview

```
$ brew install ncview
```
- convert<br>
GrADSで作成した画像をつなげて動画を作成したり、画像の拡張⼦を変えたりするのに便利なコマンドです。convert コマンドそのものをインストールするのではなく、imagemagickをインストールすれば、convert コマンドが使えるようになります

```
$ brew install imagemagick
```

## wgrib2のインストール

SCALE は wgrib と wgrib2 の両方を要求しますが、wgrib は GrADS をダウンロードした時にデフォルトで入っているためここでは wgrib2 のみインストールします。

wgrib2の入手については、こちらの記事にも少し書いてあるので確認してみてください。
[今更ですが、気象データを解析してみた](https://qiita.com/ysomei/items/12d6622bed030f6ac793)

wgrib2を入手するために以下のコマンドを入力します。
[こちら](https://www.ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/)からダウンロードします。（直ダウンロードの[リンク](ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2/wgrib2.tgz)）ダウンロードしたもの解答し、ホームディレクトリ(ターミナルを開いた時にいるディレクトリ)に移します。

```
$ cd grib2/
$ make
```
makeが通った場合は以下のコマンドを打って問題なければwgrib2が通りました。

```
$ ./wgrib2/wgrib2

# リンクを貼る
$ ln -s ~/grib2/wgrib2/wgrib2 /usr/local/bin/wgrib2 
$ wgrib2

# または、wgrib2をコピーする
cp wgrib2/wgrib2 /usr/local/bin/
```

makeが上手く行くといいのですが、大抵の場合は上手く行かないため以下をターミナルに打ち込んでください。

```
export CC=gcc-11
export CXX=c++-11
export FC=gfortran-11
```
※なお以下で示す例は執筆者がインストールした時点でのバージョンなので Homebrew で先ほどインストールしたgcc, c++, gfortranのバージョンを`/usr/local/bin`で確かめてください（Macにデフォルトで入っているgccだとなぜかうまくいかない）。

エラーが出てしまう場合は、[こちら](https://qiita.com/Tori-chan/items/0ef2b904c442edc75d4d#%E8%BF%BD%E8%A8%98-214-wgrib2%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC)を参考に対処してみてください。


# SCALEのコンパイル
## ソースコードの入手
ソースコードは[こちら](https://scale.riken.jp/ja/download/index.html)から入手することができます。

```
$ wget http://scale.riken.jp/download/archives/scale-5.3.6.tar.gz
$ tar -zxvf scale-5.3.6.tar.gz
$ ls ./
scale-5.3.6/
```
tarが上手く開かない場合はクリックして解凍してください。


## Makedefファイルと環境変数の設定
MacOSの場合は以下のように設定します。
他のOSの場合はSCALEユーザーズガイド(P15)を参考。

```terminal:.bash_profile
export SCALE_SYS="MacOSX-gnu-ompi"
export SCALE_NETCDF_LIBS="-L/usr/local/Cellar/netcdf/4.6.3_1/lib -lnetcdf -lnetcdff"
export SCALE_NETCDF_INCLUDE="-I/usr/local/Cellar/netcdf/4.6.3_1/include"
```
### 注意点

- ユーザーズガイドに示された例とは環境が違うため、ガイドを写しても上手く動かないことがあります。
- またガイドでは.bashrcに記述していますが、環境変数は.bash_profileに記述した方がトラブルが少ないです。
- 上記のバージョンは現時点でのバーションですので変わっている可能性もあります。
    - その場合はターミナルに

```
$ nc-config --libs # SCALE_NETCDF_LIBSのディレクトリが表示される
$ nc-config --includedir # SCALE_NETCDF_INCLUDEのディレクトリが表示される
```
と打って表示されるディレクトリにそれぞれ書き換えてください。
**(LIBSに -lnetcdffを追加するのを忘れずに)**


- `nc-config`のバージョンを確認した際に`/usr/local/Cellar/netcdf/バージョン`以外のパスが表示される場合(例えばanacondaのパスが出る場合など)は依存性などでコンパイルが失敗することがあるため、コンパイル時のみ依存先のパスをコメントアウトするなどしてください
- 他にも、[こちら](https://qiita.com/drafts/0ef2b904c442edc75d4d/edit#which%E3%81%A7usrlocalbin%E3%81%8C%E5%87%BA%E3%81%AA%E3%81%84)なども試してみてください。


## SCALEのコンパイル
SCALE-RM のソースディレクトリに移動し、下記のコマンドによってコンパイルします。
SCALE-GMのコンパイルは今回は行わなくて大丈夫です。

```
$ cd scale-5.3.6/scale-rm/src
$ make -j 4
```

`-j 4`はコンパイル時の並列数を示しています。 この場合は4並列です。
並列数は実行環境に応じて設定し、推奨の並列数は 2~8 とユーザーズガイドにはあります。
コンパイルが成功すると、下記の 3 つの実行ファイルが  `scale-5.3.6/bin` に以下に生成されたら成功です。

- scale-rm
- scale-rm_init
- scale-rm_pp

# 後処理ツール(net2g)のコンパイル
```
$ cd ../util/netcdf2grads_h
または、
$ cd scale-5.3.6/scale-rm/util/netcdf2grads_h
$ make -j 2
```
`net2g`という名前の実行ファイルが生成されていれば、コンパイルは成功です。

これが終わればSCALE-RMのチュートリアルができるようになります。



# 追記 '21.5 gradsのエラー
## dyld: Library not loaded: /usr/X11/lib/libX11.6.dylib
もし下記のようなエラーが出る場合はXQuartzが入ってないため、インストールしてください。

```
dyld: Library not loaded: /usr/X11/lib/libX11.6.dylib
 Referenced from: /usr/local/bin/grads
 Reason: image not found
Abort trap: 6
```

## Error in GXSTRT: Unable to connect to X server
このエラーが出る場合は、PCを再起動してください。

# 追記 '21.4 wgrib2のエラー
大抵はgcc, g++, gfortranのpathが適切でない場合に詰まります。

## gcc, g++, gfortranのpath修正
こちらも参考にしてください:
https://qiita.com/DaikiSuyama/items/09f5aa399aad37783146

OKな場合(g++バージョン)

```
$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/11.1.0/libexec/gcc/x86_64-apple-darwin20/11.1.0/lto-wrapper
Target: x86_64-apple-darwin20
Configured with: ../configure --prefix=/usr/local/Cellar/gcc/11.1.0 --libdir=/usr/local/Cellar/gcc/11.1.0/lib/gcc/11 --disable-nls --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran,d --program-suffix=-11 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl --with-pkgversion='Homebrew GCC 11.1.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --enable-libphobos --build=x86_64-apple-darwin20 --with-system-zlib --disable-multilib --without-build-config --with-native-system-header-dir=/usr/include --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.1.0 (Homebrew GCC 11.1.0)  // ここが大事

$ which g++
/usr/local/bin/g++

$ which g++-11
/usr/local/bin/g++-11 // ここのpathをリンクに設定する

$ ls -l /usr/local/bin | grep g++
lrwxr-xr-x     1 tori  admin        21 Apr 28 00:13 g++ -> /usr/local/bin/g++-11
lrwxr-xr-x     1 tori  admin        31 Nov  3 21:40 g++-11 -> ../Cellar/gcc/11.1.0/bin/g++-11
lrwxr-xr-x     1 tori  admin        53 Nov  3 21:40 x86_64-apple-darwin18-g++-11 -> ../Cellar/gcc/11.1.0/bin/x86_64-apple-darwin18-g++-11
```


### brewのg++になっていない場合
brewのg++になるようにリンクを貼ります。

```
ln -s /usr/local/bin/g++-11 /usr/local/bin/g++
```
もし、ここで `ln: /usr/local/bin/gcc: File exists`が出る場合は以下のコマンドを打ってください。

```
unlink /usr/local/bin/g++
ln -s /usr/local/bin/g++-11 /usr/local/bin/g++
```


### Whichでusr/local/binが出ない
localを優先してみるようにpathを通しましょう。

```terminal:.bash_profile
export PATH=/usr/local/bin:$PATH
```
これをとにかく上の方に書いてみてください。

## エラー別の対策
### 1. makefile:256: *** need fortran-95+TR-15581/fortran-2003 compiler, not f77.  Stop.
exportのし忘れです。

```
$ export CC=gcc-11
$ export CXX=c++-11
$ export FC=gfortran-11
```
を打ってみてください。

### 2. configure: error: C++ preprocessor "/lib/cpp" fails sanity check See `config.log' for more details.
`gcc`コマンドを打ってみて壊れてないか確認してみてください。
こちらは、上記のgcc, g++のpath設定がうまく行ってないと起こります。確認してみてください。
また、path設定が適切でもエラーが出る場合は、

```
$ brew reinstall gcc
```
を打ってみて、もう一度gccを入れ直してみてください。

### 3. jas_getopt.c:151:7: error: implicit declaration of function 'jas_eprintf' is invalid in C99 [-Werror,-Wimplicit-function-declaration] jas_eprintf("missing argument for option %s\n", s);

Macデフォルトのgccのpathを使っています。上記のgcc,g++のpathの設定を確認してみてください。

### 4./bin/sh: /usr/local/bin/install: Permission denied make[6]: *** [install-libjasperincludeHEADERS] Error 126

gradsをインストールするときに使った`/usr/local/bin/INSTALL`を消してからmakeする



# 参考文献
SCALE ユーザーズガイド:
https://scale.riken.jp/documents/

筑波大学釜江陽一先生の資料公開:
https://researchmap.jp/ykamae/%E8%B3%87%E6%96%99%E5%85%AC%E9%96%8B/

「MacbookのセットアップとSCALEモデルの最初の第⼀歩」
東京大学大学院理学系研究科 三浦研究室 灘本真実著