WRF > setup まとめ > CentOS 6.8 with GFortran v4.9.2 > WRF v3.9 | WPS v3.9

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
gcc version 4.9.2 (とgfortran): Software Collections (SCL) で有効にした状態
NCAR Command Language Version 6.3.0
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WRF(Weather Research and Forecasting Model)に関して。

## 背景

WRF/WPS v3.7.1からWRF/WPS v3.9へソフトウエアをアップデートしようとした。
WPS v3.9においてGFortran v4.4.7のバグによりungrib.exeがコンパイルできない状況になった。

[stackoverflow](https://stackoverflow.com/questions/44380418/output-binary-data-file-compatibilityfor-different-gfortran-versions?noredirect=18)でのアドバイス「And forgrt gfortran 4.4.7, its WAY too obsolete and buggy. – Vladimir F 」に従ってみることにした。

### 関連ソフト
以下のソフトをバージョンアップすることになった。

- GFortran v4.9.2
- NetCDF
- Open MPI

## 更新

### GFortran v4.9.2 と g++ v4.9.2

参考: http://qiita.com/phanect/items/45c67fa55d624e45367b

```
$ sudo yum install centos-release-scl
$ sudo yum install devtoolset-3-gcc-gfortran
```

GFortran v4.9.2使用時に以下を実行する。
(実行しない場合はGFortran v4.4.7)。

(追記 2018/02/21)
別途、g++がOpen MPIのセットアップに必要となる ([Open MPI > ./configure ... > "/lib/cpp" fails sanity check > g++コマンドがない](https://qiita.com/7of9/items/aa8a7a56c106a5b6db99))。

```bash
$sudo yum install devtoolset-3-gcc-c++
```

以下でv4.9.2を使用可能。

```
$ scl enable devtoolset-3 bash
```

### NetCDF v4.4.1.1 | NetCDf (Fortran API) v4.4.4

インストールに関して以下に記載した。
http://qiita.com/7of9/items/c58db1b8ece4d915e402

以下にインストールされる。
/usr/local/netcdf-4.4.1.1/gcc492

netcdf.modは以下に生成される。
/usr/local/netcdf-4.4.1.1/gcc492/include/netcdf.mod

netcdf.incは以下に生成される。
/usr/local/netcdf-4.4.1.1/gcc492/include/netcdf.inc

### Open MPI v2.1.1

参考: http://qiita.com/chojuku/items/f800cfc98811e2d0bda6

```
$./configure --prefix=/usr/local/openmpi-2.1.1_gcc492 CC=gcc CXX=g++
$make -j 4 all 2>&1 | tee make_170606.log
$sudo make -j 4 install 2>&1 | tee install_170606.log
```

以下にインストールされる。
/usr/local/openmpi-2.1.1_gcc492/

mpi.modは以下に作成された。
/usr/local/openmpi-2.1.1_gcc492/lib/mpi.mod

.bashrcに以下を追加した。

```.bashrc
### for openMPI (GFortran v4.9.2)
OLDPATH=$PATH
export OPENMPI=/usr/local/openmpi-2.1.1_gcc492/bin
export PATH=${OPENMPI}:$PATH
```

### WRF v3.9

[WRF3.7.1のビルド > 成功](http://qiita.com/7of9/items/8ff328ed1c144d659335#wrf371%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89--%E6%88%90%E5%8A%9F)と同じ流れであるが、configure.wrfは以下のように変更した。
(configure.wrf.originalはconfigureコマンドで生成されるconfigure.wrfから改名したもの)

```
$ diff configure.wrf.original configure.wrf
123c123
< DM_CC           =       mpicc 
---
> DM_CC           =       mpicc -DMPI2_SUPPORT
217c217
<                       -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf -L/usr/lib       
---
>                       -L$(WRF_SRC_ROOT_DIR)/external/io_netcdf -lwrfio_nf -L/usr/lib -lnetcdf -lnetcdff    
```

./compile em_real >& log.compile_170606
にて関連ファイルが生成された。
ndown.exe, real, tc.exe, wrf.exe

### WPS v3.9

[WPS3.7.1 > 成功](http://qiita.com/7of9/items/8ff328ed1c144d659335#wps371--%E6%88%90%E5%8A%9F)と同じ流れであるが、NetCDF関連の指定で以下のように変更した。
(configure.wps.originalはconfigureコマンドで生成されたファイルから改名したもの)

```
$ diff configure.wps.original configure.wps
35a36,37
> MYNETCDF        =  /usr/local/netcdf-4.4.1.1/gcc492
> 
41c43
<                         -I$(NETCDF)/include
---
>                         -I$(MYNETCDF)/include
47c49
<                         -L$(NETCDF)/lib  -lnetcdf
---
>                         -L$(MYNETCDF)/lib  -lnetcdf -lnetcdff
64,65c66,67
< DM_FC               = mpif90 -f90=gfortran
< DM_CC               = mpicc -cc=gcc 
---
> DM_FC               = mpif90
> DM_CC               = mpicc
69c71,73
< FFLAGS              = -ffree-form -O -fconvert=big-endian -frecord-marker=4
---
> #NETCDFMOD           = /usr/lib64/gfortran/modules/
> NETCDFMOD           = /usr/local/netcdf-4.4.1.1/gcc492/include/
> FFLAGS              = -I${NETCDFMOD} -ffree-form -O -fconvert=big-endian -frecord-marker=4
```

./compile
./compile util
にて関連ファイルが生成された。

geogrid.exe, ungrib.exe, metgrid.exe

以下の対応も必要。
[WPS > error: error while loading shared libraries: libnetcdf.so.11: cannot open shared object file: No such file or directory](http://qiita.com/7of9/items/61983964b3e05becfd16)

### .bashrc

今後はGFortran v4.9.2を使うため、ログイン時にメッセージを出すようにした。

```.bashrc
# 2017/06/06 for gfortran 4.9.2
echo "scl enable devtoolset-3 bash"
echo "  for gfortran v4.9.2"
```

自動実行でもいいが、標準とは違うことをしていると意識するため。