xTAPPのインストール

xTAPPのインストールについてノートします。対象のバージョンはxTAPP-develop-180420.tgzです。公式ページではdevelop付きのものとそうでないものがありますが、develop付きの物を使った方がバグ修正や最適化もされていて良いそうです。

また、ここで例示するOSはUbuntuですが、CentOSや、WSLでも殆ど同じ方法でインストールできると思います。

必要なものをダウンロード

公式ページから次のファイルをダウンロードします。

Linuxの作業ディレクトリとしてxTAPPを作り、そこに配置します。

mkdir xTAPP
cd xTAPP
#ここにSCP等で上記のファイルを配置
ls ./
xTAPP-PS-PBE.tgz  xTAPP-develop-180420.tgz  xTAPP-util-dev-180420.tgz

必要ライブラリのインストール

次に、必要なライブラリをインストールします。必要なものは

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:擬ポテンシャルの種類

公式マニュアルより抜粋 inipotは擬ポテンシャルの入力データを必要とするが、一番目の擬ポテンシャルは論理機番34 から二番目は論理機番34+ 1からと言うように順に読み込まれる。この他、論理機番28から一番 目の擬ポテンシャルに対応する原子電荷分布データ、論理機番28+ 1から二番目の擬ポテンシャ ルに対応する原子電荷分布データと順に原子電荷分布データを順に読み込ませることもできる。 ここで読んだ原子電荷分布は初期ローカルポテンシャルを作成する時に使用させることができる。 論理機番28などに与えるファイルは、擬ポテンシャルを用いて原子を解くプログラム(solps、 solspin)を用いて計算することができる。なお、このファイルには spin 偏極を含めることもで き、初期条件を偏極させたい場合に使用する。