xTAPPのインストールについてノートします。対象のバージョンはxTAPP-develop-180420.tgz
です。公式ページではdevelop付きのものとそうでないものがありますが、develop付きの物を使った方がバグ修正や最適化もされていて良いそうです。
また、ここで例示するOSはUbuntuですが、CentOSや、WSLでも殆ど同じ方法でインストールできると思います。
必要なものをダウンロード
公式ページから次のファイルをダウンロードします。
- xTAPP-develop-180420.tgz
- xTAPP-util-dev-180420.tgz
- xTAPP-PS-PBE.tgz
Linuxの作業ディレクトリとしてxTAPPを作り、そこに配置します。
mkdir xTAPP
cd xTAPP
#ここにSCP等で上記のファイルを配置
ls ./
xTAPP-PS-PBE.tgz xTAPP-develop-180420.tgz xTAPP-util-dev-180420.tgz
必要ライブラリのインストール
次に、必要なライブラリをインストールします。必要なものは
- gfortran, gcc, g++ (たぶんgfortranだけでもいいですが、おまけで)
- libfftw3-dev
- liblapack-dev
- libblas-dev
- libopenmpi-dev
- libopenblas-dev
- libopenblas-base
blasが二つありますが、マシンによって速い方を選びましょう。
これをOSの作法に習ってインスコします。
sudo apt install gfortran gcc g++
sudo apt install libfftw3-dev liblapack-dev libblas-dev libopenmpi-dev
sudo apt install libopenblas-dev libopenblas-base
sudo apt install make
どちらのブラスを使うかの選択は、次のコマンドでやれるようです。
sudo update-alternatives --config libblas.so.3-x86_64-linux-gnu
libblas.so.3以降はマシンによって変わるようなので、3まで入力してtabキーを押すなどで適宜調整してください。またリンクで失敗するときはsudo ldconfig
コマンドで調整してください。
xTAPPのコンパイル
以下の手順で展開とコンパイルです。
tar xvfz xTAPP-develop-180420.tgz
cd xTAPP-develop-180420/src
cp Makefile-dist Makefile
ここからMakefileを編集します。デフォルトではIntelコンパイラ向けに書かれていますので、240行目までを目途に、コメントを付け替えてみてください。72行目のUncomment your machine's part and comment out all others.
と書いてある行から133行目までを全てコメントアウトし、134行目のfor x86_64 Debian Linux by S. Todo (2014.3)
と書いてある行から16行目までの項目を有効にすれば、幸せになれるかもしれません。
ここでmakeコマンドでコンパイルするわけですが、xTAPPは複数のアプリの集合体です。色々と設定やライブラリがうまく入ってお要らずコンパイルできない場合もあるでしょう。取り急ぎDFTを解くのに用いるのはinipotとcgmrptだけですので、これらだけコンパイルしてもよいでしょう。
make inipot cgmrpt
また、getpy.F90のコンパイルには時間が掛かります。
擬ポテンシャルの展開
計算に必要な擬ポテンシャルはxTAPP-PS-PBE.tgzです。
おもむろに展開してください
#xTAPPディレクトリ直下にて
tar xvfz xTAPP-PS-PBE.tgz
テスト計算
動作確認としてSiO2結晶を計算してみます。
xTAPP直下にtestという名前のディレクトリを作成し、その中にさらに、SiO2という名前のディレクトリを作りましょう。
mkdir test
cd test
mkdir SiO2
そして、アプリや擬ポテンシャルデータにシンボリックリンクを張ります。
#testディレクトリ直下にて
ln -s ../xTAPP-develop-180420/src/inipot
ln -s ../xTAPP-develop-180420/src/cgmrpt
ln -s ../xTAPP-PS-PBE
ここまでで、ディレクトリの階層構造は次の様になっていると思います。
xTAPP
+--xTAPP-develop-180420
| +--src
| +--inipot
| +--cgmrpt
+--xTAPP-PS-PBE
+--test
+--SiO2
+--cgmrpt -> ../xTAPP-develop-180420/src/cgmrpt
+--inipot -> ../xTAPP-develop-180420/src/inipot
+--xTAPP-PS-PBE -> ../xTAPP-PS-PBE
この状況で、SiO2ディレクトリの中に、SiO2.cg
というテキストファイルを作ります。その中には以下の様に記述してみてください。これがSiO2の計算の入力ファイルとなります。
# file map data
&filemap
basename = 'SiO2',
number_PP_file = 2
/
"../xTAPP-PS-PBE/PS/ps-Si" "../xTAPP-PS-PBE/PS/ps-Si.ichr"
"../xTAPP-PS-PBE/PS/ps-O" "../xTAPP-PS-PBE/PS/ps-O.ichr"
# main data
&tappinput
lattice_factor = 1.8897261245651 ! bohr / angstrom
lattice_list =
7.5 +0.0000000000 +0.0000000000
0.0000000000 7.5 +0.0000000000
0.0000000000 +0.0000000000 7.5
cutoff_wave_function = 4.000000 !
xtrap_beta = 0.300000 !
number_element = 2 !
number_atom = 24 !
number_band = 96 ! num_valence_electron * num_atom
ELEC_KBT = 1.0E-3
chain_calc = 0 ! calc. is continue or not
scf_converge = 1.000000e-008
scf_converge_energy = 1.0e-008
scf_number_iter_1st = 100
scf_number_iter = 100
number_spin = 1
xc_type = 'PBE'
control_uptime = 7200
store_wfn = 1 !{0,1}: wave func is {deleted, stored} after calculation
/
# symmetry data
&symmetry
symmetry_format = 'reciprocal'
number_sym_op = 1
/
1 0 0 0 1 0 0 0 1 0 0 0 ! (+a,+b,+c)
# atom data
4.00 14.00 # valence_electron atomic_number
6.00 8.00 # valence_electron atomic_number
1 0.0000 0.0000 0.0000
1 0.2500 0.2500 0.2500
2 0.1250 0.1250 0.1250
2 0.3750 0.3750 0.1250
2 0.3750 0.1250 0.3750
2 0.1250 0.3750 0.3750
1 0.5000 0.5000 0.0000
1 0.7500 0.7500 0.2500
2 0.6250 0.6250 0.1250
2 0.8750 0.8750 0.1250
2 0.8750 0.6250 0.3750
2 0.6250 0.8750 0.3750
1 0.5000 0.0000 0.5000
1 0.7500 0.2500 0.7500
2 0.6250 0.1250 0.6250
2 0.8750 0.3750 0.6250
2 0.8750 0.1250 0.8750
2 0.6250 0.3750 0.8750
1 0.0000 0.5000 0.5000
1 0.2500 0.7500 0.7500
2 0.1250 0.6250 0.6250
2 0.3750 0.8750 0.6250
2 0.3750 0.6250 0.8750
2 0.1250 0.8750 0.8750
# k-points data
&smpl_kpt
dos_mode = 'COS',
dos_mesh = 8, 8, 8,
bz_mesh = 8,
bz_number_tile = 1
/
5 5 5 # begin points in bz mesh (this point is not included)
2 2 2 # interval in bz mesh
# struct_opt data
&struct_opt
number_cycle = 0 ! if value is 0, structure is not optimized.
/
# str_opt_constr data
1 # only unit matrix
0 # no atoms fixed
また、計算を実行するための簡単なシェルスクリプトとしてjob.sh
を作ります。job.sh
には次の様に記述してみてください。
#!/bin/sh
export OMP_NUM_THREADS=1
NP = 8
rm -f fort.10; cp SiO2.cg fort.10
mpirun -np $NP ../inipot
mpirun -np $NP ../cgmrpt
あとは、chmodコマンドでjob.shに実行権限を付与して、実行しましょう
chmod 775 job.sh
./job.sh
テスト計算にしてはちょっと重いですが、、、
計算が終わると、次のように出力されると思います。
TOTAL STRESS = 0.5112548553E-02
STRESS TENSOR = -0.14555E+02 -0.14555E+02 -0.14555E+02 0.97320E-05 0.58199E-05 -0.21487E-06
FERMI ENERGY = 0.1167615441E+00
EWALD = -0.1295441786E+03
HARTREE ENERGY = 0.1269097721E+03
EXCHANGE ENERGY = -0.6354298694E+02 EXA = 0.1902822973E+02
POTENTIAL ENERGY = -0.3555797204E+03 LOCAL PART = -0.3499406778E+03 NONLOCAL PART = -0.5639042662E+01
KINETIC ENERGY = 0.1475458399E+03
TOTAL ENERGY = -0.2742112740E+03
------- CONVERGENCE ACHIEVED IN CGMAIN -------
FORCE: MAX, CONVERGE = 0.2255616E-04 0.1000E-02 a.u.
STRESS: MAX, CONVERGE = 0.0000000E+00 0.1000E-02 a.u./atom
THE 1ST SCF IS DONE. ITMAX & FMAX= 4 0.2255616E-04 Ht/A.U.
THE 1st SCF END TIME= 748.54645957299999
SCF calculaton is done.
storing wave function...
TOTAL TIME= 751.71612728000002
その他warningメッセージもたくさん出る場合もありますが、環境によるものの場合が多いので、とりあえずここまでできればご愛嬌ということに、本記事では致しましょう。
備考1:FX100の場合のメモ
Makefile内のK-computer設定を有効にする。
FFTWを使うために、以下のコマンドを入力
module load fftw-rx/3.3.4
コンパイラオプションに-lfftw3を指定
makefileの中のSCGDGOBJのコメントアウトを取る
cmpstr.F90の32行目に integer:: iargc を追加
入力ファイル hoge.cg 指定は export FORT10=hoge.cg によって装置番号10番に関連付けることで行う。
備考2:擬ポテンシャルの種類
- xTAPP-PS-PBE:ノルム非保存の擬ポテンシャル
- xTAPP-PS-PBE-nc:ノルム保存の擬ポテンシャル
- xTAPP-PS-PBE-SO:ノルム非保存かつスピン軌道相互作用ありの擬ポテンシャル(開発版)
- xTAPP-PS-PBE-nc/PS/ps-Si と xTAPP-PS-PBE/PS/ps-Si は同じもの
公式マニュアルより抜粋 inipotは擬ポテンシャルの入力データを必要とするが、一番目の擬ポテンシャルは論理機番34 から二番目は論理機番34+ 1からと言うように順に読み込まれる。この他、論理機番28から一番 目の擬ポテンシャルに対応する原子電荷分布データ、論理機番28+ 1から二番目の擬ポテンシャ ルに対応する原子電荷分布データと順に原子電荷分布データを順に読み込ませることもできる。 ここで読んだ原子電荷分布は初期ローカルポテンシャルを作成する時に使用させることができる。 論理機番28などに与えるファイルは、擬ポテンシャルを用いて原子を解くプログラム(solps、 solspin)を用いて計算することができる。なお、このファイルには spin 偏極を含めることもで き、初期条件を偏極させたい場合に使用する。