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でのアドバイス「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++コマンドがない)。
$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に以下を追加した。
### 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のビルド > 成功と同じ流れであるが、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 > 成功と同じ流れであるが、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
.bashrc
今後はGFortran v4.9.2を使うため、ログイン時にメッセージを出すようにした。
# 2017/06/06 for gfortran 4.9.2
echo "scl enable devtoolset-3 bash"
echo " for gfortran v4.9.2"
自動実行でもいいが、標準とは違うことをしていると意識するため。