WRF 3.0.1.1 Install on HA8000 with Intel Compiler
東大情報基盤センターのスパコンHA8000にWRFをインストールしたときの記録です.Serial, OpenMP, MPIそれぞれに対応しています.
ライブラリのインストール
GRIB2をサポートするにはJasPer,libpng,zlibが必要です.ここを参照して確認およびインストールをします.
- zlib: /usr/libと/usr/includeにそれぞれlibz.aとlibz.hが存在することを確認しましたので,HA8000にはインストール済みです
- libpng: /usr/libと/usr/includeにそれぞれlibpng12.so.0およびpng.hが存在することを確認しましたので,HA8000にはインストール済みです.
- JasPer: これはインストールされていないようなので,以下でインストールします.
ここからダウンロードしたら,以下の手順でインストールします.ここも参考になります.
- $ unzip jasper-1.900.1.zip
- $ cd jasper-1.900.1
- $ ./configure --prefix=/home/**ID**/usr #絶対pathが必要
- $ make
- $ make install
- $ export JASPERLIB=~/usr/lib
- $ export JASPERINC=~/usr/include
exportの部分は.bash_profileに記述しておくのがよいでしょう.
NetCDFのインストール
最初にIntel compilerの設定を行います.以下を.bash_profileに記述するとよいでしょう.
- source /opt/intel/fce/10.1.018/bin/ifortvars.sh
- source /opt/intel/cce/10.1.018/bin/iccvars.sh
- source /opt/itc/mpi/mpiswitch.sh mpich-mx-intel
UnidataのHPからnetcdf-4.0.tar.gzをダウンロードし,適当なディレクトリで展開します.
- $ tar -xvzf netcdf-4.0.tar.gz
- $ cd netcdf-4.0
- $ export CC=icc
- $ export FC=ifort
- $ export F90=ifort
- $ export F77=ifort
- $ export CXX=icpc
- $ export PROCESSFLAGS='-DpgiFortran'
- $ export CPPFLAGS='-DpgiFortran'
- $ export CFLAGS='-O3 -xO -ip -no-prec-div -static -no-multibyte-chars'
- $ export CXXFLAGS='-O3 -xO -ip -no-prec-div -static -no-multibyte-chars'
- $ export FFLAGS='-O3 -xO -ip -no-prec-div -static'
- $ export CPP='icc -E'
- $ export CXXCPP='icpc -E'
- $ ./configure -disable-cxx --prefix=/home/**ID**/usr/local/netcdf-4.0
- $ make
- $ make check # 正常にコンパイルされたかcheck
- $ make install
WRF V3のインストール
いよいよWRF V3をインストールしましょう.まず,環境変数NETCDFを以下のように設定します.また,NetCDFのbinにPATHを通しておきます..bash_profileに記入しておきましょう.
- export NETCDF=~/usr/local/netcdf-4.0
- export PATH=~/usr/local/netcdf-4.0/bin:$PATH
ここのページの最後のところでWRFのユーザー登録をします.その後指示に従って,ダウンロードページに入り,最新版をダウンロードしましょう.必要なデータやユーティリティも併せてダウンロードします.なお,WRF-VarとWRF-Chemistryはここでは対象としませんのでダウンロード不要です.執筆時点ではWRFV3.0.1.1.tar.gzが最新版ですので,これを適当なディレクトリで以下の様に展開します.
- tar -xvzf WRFV3.0.1.1.tar.gz
WRFV3ディレクトリに移動し,いよいよコンパイルテストです.まずは,configureからです.
- ./configure
と入力します.すると,以下の画面が現れます.テストですので,もっとも簡単な構成ということで,まずは5番を選びます.なお,Intel Compilerを使用することとしていますから,意味のあるオプションは5番から8番です.
------------------------------------------------------------------------
Please select from among the following supported platforms.
1. Linux x86_64, PGI compiler with gcc (serial)
2. Linux x86_64, PGI compiler with gcc (smpar)
3. Linux x86_64, PGI compiler with gcc (dmpar)
4. Linux x86_64, PGI compiler with gcc (dm+sm)
5. Linux x86_64 i486 i586 i686, ifort compiler with icc (serial)
6. Linux x86_64 i486 i586 i686, ifort compiler with icc (smpar)
7. Linux x86_64 i486 i586 i686, ifort compiler with icc (dmpar)
8. Linux x86_64 i486 i586 i686, ifort compiler with icc (dm+sm)
9. Linux i486 i586 i686 x86_64, PathScale compiler with pathcc (serial)
10. Linux i486 i586 i686 x86_64, PathScale compiler with pathcc (dmpar)
11. x86_64 Linux, gfortran compiler with gcc (serial)
12. x86_64 Linux, gfortran compiler with gcc (smpar)
13. x86_64 Linux, gfortran compiler with gcc (dmpar)
14. x86_64 Linux, gfortran compiler with gcc (dm+sm)
15. Cray XT Catamount/Linux x86_64, PGI compiler with gcc (serial)
16. Cray XT Catamount/Linux x86_64, PGI compiler with gcc (dmpar)
17. Cray XT CNL/Linux x86_64, PGI compiler with gcc (serial)
18. Cray XT CNL/Linux x86_64, PGI compiler with gcc (smpar)
19. Cray XT CNL/Linux x86_64, PGI compiler with gcc (dmpar)
20. Cray XT CNL/Linux x86_64, PGI compiler with gcc (dm+sm)
21. Cray XT CNL/Linux x86_64, Pathscale compiler with gcc (serial)
22. Cray XT CNL/Linux x86_64, Pathscale compiler with gcc (smpar)
23. Cray XT CNL/Linux x86_64, Pathscale compiler with gcc (dmpar)
24. Cray XT CNL/Linux x86_64, Pathscale compiler with gcc (dm+sm)
Enter selection [1-24] : 5
次に現れる選択肢はnestingに関わるものですが,ここでは0を選びます.
------------------------------------------------------------------------
Compile for nesting? (0=no nesting, 1=basic, 2=preset moves, 3=vortex following) [default 0]: 0
以上で,configure.wrf というファイルができます.このファイルを適切に編集することが推奨されていますが,ここでは何もせずに動くか試してみました.以下の様にidealテストケースのem_b_waveを選んでコンパイル,実行してみたところ,成功でした.
- $ export WRF_EM_CORE=1 # 環境変数の設定(不要かも)
- $ ./compile em_b_wave >& compile.log
- $ cd run
- $ ulimit -s unlimited # segmentation faultとなるので必須
- $ ./ideal.exe
- $ ./wrf.exe
もし,ideal.exeとwrf.exeができていなかったら,コンパイルに失敗したということですので,compile.logを調べてみましょう.コンパイルには相当に時間がかかりましたので,気長に待ちましょう.なお,ネスティングオプションで1を選べばOne-way nesting用のコンパイルとなります.
configure.wrfに関する補足
configure.wrfには様々なコンパイルオプションが書かれていますので,ここを適切に書きかえることで,高速な実行ファイルが作られます.ここを参照して,configure.wrfのFCOPTIMを以下のように書き換えてみました.オプションの意味はIntel Fortran Compiler 10.1のマニュアルに出ています.
- FCOPTIM = -O3 -unroll0 -xO -fno-alias -ip
しかし,実行速度の違いはわかりませんでした.
Nestingと並列計算用のコンパイル
./configureで現れる選択肢のうち,6から8番が並列計算用コンパイルです.それぞれ次の意味になります.
- 6番 (smpar): OpenMP(ノード内並列)
- 7番 (dmpar): MPI(ノード間並列)
- 8番(sm+dm): MPI + OpenMP
./configureで上のいずれかを選び,nestingオプション1で以下のコンパイルにすべて成功しました.最後の&はバックグラウンドで実行するためのオプションです.
- ./compile em_real >& compile_em_real.log &
configure.wrfの書き換えは一切行っていませんが,MPIではコンパイラとしてmpif90やmpiccが選択されておりますし,特に問題はなさそうです.なお,さらに高速化を図るためのオプションについては./configureがコンソールにはき出すlogに記載されていますが,まだ検討していません.