[廃版] WRF / WPS > v3.9セットアップ > 失敗: GFortran v4.4.7のバグにはまる

**<font color=red>以下の情報はセットアップが成功しなかったため廃版とします。 失敗自体が参考になる場合もあるため記事として残しています。</font>**

<hr>

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WRF(Weather Research and Forecasting Model)とその前処理であるWPS。


http://qiita.com/7of9/items/8ff328ed1c144d659335
においてWRF3.7.1 / WPS3.7.1をセットアップした環境に、v3.9をインストールする。

## WRF3.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ファイルの変更が少しだけ違う。

```diff
$ diff configure.wrf.orginal configure.wrf
123c123
< DM_CC           =       mpicc -cc=$(SCC) -DMPI2_SUPPORT
---
> 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     
```

v3.7.1にはあった`-lnetcdf`がv3.9のもともとの`configure.wrf`ではなくなっている。
今回は`-lnetcdf`も追加してexeファイルをcompileした。


## WPS3.9 > 要検討

### 試したこと

[WPS3.7.1 > 成功](http://qiita.com/7of9/items/8ff328ed1c144d659335#wps371--%E6%88%90%E5%8A%9F)を参考にcompileを行った。

~~こちらは特にv3.7.1との違いはなかった。~~

metgrid.exeとungrib.exeがビルドされていなかった。

scan_input.modなどが生成されておらず、原因を追うとscan_input.f90のuse netcdfの部分でエラーが出ていた。

http://qiita.com/7of9/items/b61c88f5debde19227ac
を参考に`configure.wps`の以下FFLAGSの部分を以下のようにした (NETCDFMODのインクルード追加)。

```
NETCDFMOD           = /usr/lib64/gfortran/modules/
FFLAGS              = -I${NETCDFMOD} -ffree-form -O -fconvert=big-endian -frecord-marker=4
```

```
./compile metgrid
```
にてmetgrid.exeがビルドされることを確認した。

ungrib.exeがビルドできない問題がある。

### 分かったこと

関連: [WRF / gfortran > Error: NAMELIST attribute conflicts with ALLOCATABLE attribute > gfortranのバージョンv4.4.7で発生](http://qiita.com/7of9/items/186a1a81d889d6aa4ff0)

GFortran v4.4.7-17
- geogrid.exe: ビルド可能
- ungrib.exe: <font color=red>ビルド不可</font> (NAMELIST関連のエラー)
- metgrid.exe: ビルド可能

GFortran v4.9.2
- geogrid.exe: ビルド可能
- ungrid.exe: ビルド可能
- metgrid.exe: <font color=red>ビルド不可</font> (netcdf.modがv4.4.7-17で生成されていることによる)

異なるバージョンのGFortranで生成したexeを順次実行させた場合に「はまる」だろうか。
(出力ファイルのバイナリ互換性について未消化）。

.modファイルに関しては互換性の問題でビルド時に失敗するようだ。
(v4.4.7-17で生成した.modファイルをuseするf90ファイルを、v4.9.2でビルドしようとすると失敗する)。

.exeファイル実行については未消化。

### 案 > ソース改変 > 失敗

ungribに関してread_namelist.Fの改変をするとv4.4.7-17でもビルドはできるようになる。

```diff
$ diff read_namelist.F.old read_namelist.F
56c56,57
<   real, dimension(:), allocatable :: new_plvl
---
>   ! real, dimension(:), allocatable :: new_plvl
>   real, dimension(100000) :: new_plvl
74c75
<   allocate(new_plvl(size(new_plvl_in)))
---
>   ! allocate(new_plvl(size(new_plvl_in)))
297c298
<   deallocate(new_plvl)
---
>   ! deallocate(new_plvl)
```

new_plvlのサイズをどれくらい取ればいいかは不明。

実際のデータで処理したらSegmentation fault (core dumped)になった。
サイズを増やしても回避できない。

### 採択案

関連: [WRF / GFortran > v4.7.7とv4.9.2のバイナリ互換](http://qiita.com/7of9/items/eebd532e8ca9092fde1c)

~~v4.7.7とv4.9.2の出力ファイルの混在は問題がないと思っている。~~

以下とした。

- geogrid.exe : v4.4.7でビルド
- ungrib.exe : v4.9.2でビルド
- metgrid.exe : v4.4.7でビルド

v4.9.2で統一するにはnetcdf.modと他のどのmodファイルを作り直すことになるだろうか。