九州大学スパコンITO-AでDelft3Dのインストール
九州大学情報基盤センターのスパコンITO-AでDeflt3Dのビルドを行った備忘録です.ITO-AのOSはRedhat Enterprise Linux 7.3で,インテルコンパイラを用い,ホームディレクトリ直下に Delft3D/
ディレクトリを作成し,その中でビルドしました.NetCDFはセンターで用意されているものを利用します.
ソースコードの入手
Delft3Dのユーザー登録を済ませ,こちらのサイトのDelft3D
をクリックして,trunkのrevision番号を確認しましょう.2019年6月22日時点では64186でした.次のように subversion で入手します.
svn checkout https://svn.oss.deltares.nl/repos/delft3d/trunk/ 64186
これで,64186
ディレクトリにソースコードがダウンロードされます. なお,revision 59659 を以下のように入手し,全く同様にビルドできることを確認しています.
svn checkout https://svn.oss.deltares.nl/repos/delft3d/tags/delft3d4/59659 59659
環境変数の設定
インテルコンパイラの利用のため,環境変数を設定します.最後の2つは見落としがちです.
export CC=icc
export CXX=icpc
export CFLAGS=-O3 -no-prec-div -fp-model fast=2 -xHost
export CXXFLAGS=-O3 -no-prec-div -fp-model fast=2 -xHost
export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS=-O3 -no-prec-div -fp-model fast=2 -xHost
export CPP=icc -E
export CXXCPP=icpc -E
export MPIF77=mpiifort
export MPICXX=mpiicpc
NetCDFおよびインテルコンパイラの利用準備
インテルコンパイラから利用できる NetCDF がセンターで準備されています.こちらを参照し,NetCDF のインストールディレクトリを以下のように把握しておきます.
/home/app/a/NetCDF-4.4.1.1
また,インテルコンパイラを利用するため,こちらを参照し,以下のように環境を設定します.
module load intel/2018.3
さらに,which ifort
でインテルコンパイラがインストールされているディレクトリを把握しておきましょう.後の build.sh
の設定で必要になります.
build.shの編集
64186/src/
に存在する build.sh
を以下のように編集します.
## 50行目付近 echo -intel16 (-intel16.0.3)の下に以下を追記
echo -ito (-intel18 on ITO-A)
## 122行目付近 -m|-make) の前行に以下を追記
-ito)
compiler='ito'
;;
## 169行目付近 intel16) の前行に以下を追記
ito)
echo Using Intel 18.3 Fortran ($platform) compiler
;;
## 253行目から256行目を以下の様にコメントアウト
#addpath PATH \
# /opt/automake/bin \
# /opt/autoconf/bin \
# /opt/libtool/bin
## 272行目から274行目を以下の様にコメントアウト
#addpath PATH /opt/mpich2-1.0.8-intel64/bin
#export MPI_INCLUDE=/opt/mpich2-1.0.8-intel64-PIC/include
#export MPILIBS_ADDITIONAL=-L/opt/mpich2-1.0.8-intel64-PIC/lib -lfmpich -lmpich
## 276行目のexport MPIFC=を以下のように変更
export MPIFC=/home/app/intel/intel2018_up3/compilers_and_libraries_2018.3.222/linux/mpi/intel64/bin/mpiifort
## 283行目から288行目を以下の様にコメントアウト
#if [ $compiler = 'gnu' ]; then
# fflags=''
#else
# # Intel compilers
# fflags='-threads'
#fi
## 293行目から298行目を以下の様にコメントアウト
#if [ $compiler = 'gnu' ]; then
# export LDFLAGSMT_ADDITIONAL=
#else
# # Intel compilers
# export LDFLAGSMT_ADDITIONAL=-lifcoremt
#fi
## 302行目の export NETCDFROOT= を以下のように変更
export NETCDFROOT=/home/app/a/NetCDF-4.4.1.1
## 369行目のflags='-O2' を以下のように変更
#flags='-O2'
flags=''
ビルド
準備ができたので,以下のように 64186/src/
ディレクトリでビルドしましょう.かなり時間がかかります.
./build -ito
しかし,ITO-A のログインノードの制限時間内にコンパイルが終わらない場合は(64186 は終わりませんでした),バッチジョブとしてコンパイルします.適当なディレクトリで以下のバッチ処理スクリプト build_batch.sh
を作成します.-X
はジョブを投入したときのコンソールの環境変数を引き継ぐという意味で,上述の環境変数が設定されている必要があります.その他詳細はこちらを参照ください.
#!/bin/bash
#PJM -L rscunit=ito-a
#PJM -L rscgrp=ito-ss
#PJM -L vnode=1
#PJM -L vnode-core=36
#PJM -L elapse=2:00:00
#PJM -j
#PJM -X
cd /home/usr*/your_account/Delft3D/64186/src
./build.sh -ito
やり直す場合は make clean
できれいにしてから,以下のようにジョブを投入します.
pjsub build_batch.sh
pjstat
コマンドで投入したジョブの状態を確認できます.ジョブが終了すると,build_batch.sh.o*******
というファイルが生成され,この中に標準出力と標準エラー出力の両者が書き込まれています.最後が Build finished
となっていれば成功です.
examplesの実行
ビルドが成功したら,examples/
ディレクトリにあるテストケースを実行してみましょう(parallelでの実行は未確認です).最初のテストは,01_standard/
ディレクトリに移動し,以下のように実行します.
./run.sh
同様に他のテストケースも実行してみましょう.なお,例05では,05_mormerge/merge/
に移動し,同様に ./run.sh
で実行しますが,以下のエラーが出ました.
ERROR: Environment parameter ARCH not defined
この場合は環境変数 ARCH
を以下のように設定し,やり直します.
export ARCH=$(uname -m)
./run.sh
ITO-Aでは ARCH=x86_64
となりました.