はじめに
PIMDは高度に並列化された分子動力学シミュレーションプログラムで、経路積分分子動力学をはじめとした高度な分子動力学シミュレーションを実行することが可能です。またDFTB++などの半経験的計算プログラムやQuantum-ESPRESSO、CP2K、VASPなどの密度汎関数プログラムとのカップリングにより様々なレベルの精度での分子動力学シミュレーションが可能です。さらに人工ニューラルネットワークに基づいたポテンシャルをAENETを用いて生成することも可能です。
ここでは以下の環境でQuantum-ESPRESSO(QE)とAENETの使用を可能としたPIMD(2.4.0)のコンパイルの手順を記述しま。
- システム:Intel(R) Xeon(R) CPU E5-1620 v3 @ 3.50GHz
- コンパイラ:ifort version 19.1.2.254
準備
~/.bashrc
に以下を追加し必要なモジュールをログイン時に読み込むように設定します。
module load intel/2020.2.254
module load intelmpi/2020.2.254
module load python/3.8
PIMDプログラムのビルドは以下で行うことにします。
~/PIMD/src
PIMDのダウンロード
~/PIMD/src
以下でPIMD 2.4.0用ディレクトリを作成します(ディレクトリ名は好みでつけて下さい)。ここではpimd-2.4.0
とします。~/PIMD/src/pimd-2.4.0
で以下を実行しpimd-2.4.0のソースコードをダウンロード、解凍します。
wget https://ccse.jaea.go.jp/software/PIMD/download/pimd.2.4.0.tar
tar xvf pimd.2.4.0.tar
コンパイル用のディレクトリを作成します。
mkdir compile
compile
ディレクトリに移動してsource
ディレクトリにあるファイルをコピーします。
cd compile
cp ../source/* .
compile
ディレクトリに移動しmakefileを編集します。
cd compile
makefile
のコンパイラとコンパイラオプションをシステムにあわせて変更します。これらは以下で記述するQEと矛盾しないようにしておく必要があります(QEのコンパイルの経験が無い場合には先にスタンドアローンのQEのコンパイルを行ってオプションを確定しておくと良いでしょう)。
- コンパイラ
FCMP = mpiifort
- コンパイラオプション
OPTS = -O2 -g -traceback -w \
-xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX \
-static-intel -qopenmp \
-I ${MKLROOT}/include/fftw
ここで二行目の
-xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX \
というオプションは、我々が使用しているクラスタシステムに複数の異なるマシンが存在するために指定しているものです。また-static-intel
というオプションは不要かもしれません。また古いintelコンパイラでは問題ありませんでしたが、最近のバージョンでは-O3
オプションを指定するとコンパイラの内部エラーのためうまくいきませんでした。この問題は-O2
を指定することで解消されました。
- QE用オプション
QE = -Dqe
LIBQE = -L../lib/qe/q-e-qe-6.2.1/qelib -lqe -L.
LIBMKL = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 \
-lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core
- AENET用オプション
AENET = -Daenet
LIBAENET = -I../lib/aenet/aenet-2.0.3/src \
../lib/aenet/aenet-2.0.3/src/libaenet.a \
../lib/aenet/aenet-2.0.3/lib/liblbfgsb.a
モジュールの準備
compile
ディレクトリで以下を実行します。
make common_variables.o
QEのダウンロード
compile
からライブラリ用ディレクトリに移動します。
cd ../lib/qe
以下を実行しQE 6.2.1をダウンロードし解凍します。
wget https://github.com/QEF/q-e/archive/qe-6.2.1.zip
unzip qe-6.2.1.zip
次にパッチをあてます。
patch -p0 < qe-6.2.1_to_pimdlib.patch
QEのコンパイル
qe-qe-6.2.1
に移動し、以下を実行します。
MPIF90=mpiifort DFLAGS='-D__OPENMP -D__FFTW3 -D__MPI -D__SCALAPACK' SCALAPACK_LIBS='-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64' ./configure --enable-openmp
生成されたmake.inc
を手動で編集します。
FFLAGS = -O2 -assume byterecl -g -traceback -qopenmp -xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX
FFLAGS_NOMAIN = -nofor_main -xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX
さらにmake.inc
中のIFLAG
に以下を追加します。
-I$(MKLROOT)/include/fftw -I../../../compile
これで準備ができましたのでpw.x(libqepw.a)をビルドします。
make pw
AENETのダウンロード
q-q-qe-6.2.1
からAENET用ディレクトリに移動します。
cd ../../aenet
以下を実行しAENET 2.0.3をダウンロードし解凍します。
wget http://ann.atomistic.net/files/aenet-2.0.3.tar.bz2
tar jxvf aenet-2.0.3.tar.bz2
AENETのディレクトリに移動しパッチを当てます。
cd aenet-2.0.3
patch -u -p1 -d src < ../src.patch
ライブラリのディレクトリに移動しMakefile
のコンパイラとコンパイラオプションを変更します。
FC = ifort -c
FCFLAGS = -O2 -xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX
コンパイルを実行します。
make
次にソースディレクトリに移動します。
cd ../src
makefiles
というディレクトリ以下にプラットフォーム毎のmakefileが用意されていますので、makefiles/Makefile.ifort_intelmpi
を編集します。FCLFAGS
に以下のオプションを追加します。
-O2 -xSSE4.2 -axCOMMON-AVX512,CORE-AVX512,CORE-AVX2,CORE-AVX-I,AVX
最後にmakeを実行します。
make -f makefiles/Makefile.ifort_intelmpi lib
PIMDのコンパイル
QEのディレクトリのPW/src/
にlibqepw.a
ができていることを確認し、PIMDのコンパイルを行います。
cd ../../../compile
make