DFTの研究では平面波基底のコードが圧倒的に多いです。その差別化の意味でも、これまで研究では原子基底(局在基底)を用いるOpenMXをメインで使っておりました。OpenMXではコードの改造パッチ等も作っておりますし、今後も利用を続けていくつもりです。
一方で、MDのポテンシャルを作るというもう一つの研究において、コード毎に算出されるエネルギーや力の差はどの程度あるのか、自分でも検証してみたいと思い、平面波コードを色々と試しておりました。その中でも、やはり開発者の先生と交流があり相談もできるものが良いという点から、国産の平面波コードのうちxTAPPを最近は利用しています。
ここでは、xTAPPの利用に関する個人的なメモを纏めます。OpenMXと比較することで、原子基底と平面波基底コードの違いを認識出来ればと思います。
入力項目
OpenMXとxTAPPの入力ファイルにおいて、記述が必要なものを以下に纏めます。記述が必要な場合には入力項目名を記しています。xTAPPはFORTRANのNAMELIST形式ですので、group.variable
の形式でピリオドで結んで記載します。
OpenMX | xTAPP | |
---|---|---|
システムネーム (出力ファイル名等に使う) | System.Name | filemap.basename |
カレントディレクトリ | System.CurrrentDirectory | |
擬ポテンシャルのディレクトリ | DATA.PATH | |
標準出力内容の調整 | level.of.stdout | |
ファイル出力内容の調整 | level.of.fileout | |
継続計算か否か | scf.restart | |
利用する元素の種類の数 | Species.Number | filemap.number_PP_file TAPPINPUT.NUMBER_ELEMENT |
利用する元素名 | Definition.of.Atomic.Speciesの中に記述 | atom dataセクションに記入 |
利用する基底の数 | Definition.of.Atomic.Speciesの中に記述 | TAPPINPUT.NUMBER_BAND |
利用する擬ポテンシャルファイル | Definition.of.Atomic.Speciesの中に記述 | file map dataセクションの列挙データとして記載 |
原子数 | Atoms.Number | TAPPINPUT.NUMBER_ATOM |
原子毎の座標の単位 | Atoms.SpeciesAndCoordinates.Unit | (unit cellで規格化されている) |
原子毎の元素の指定 | Atoms.SpeciesAndCoordinatesに記載 | atom dataセクションに記入 |
原子毎の座標 | Atoms.SpeciesAndCoordinatesに記載 | atom dataセクションに記入 |
原子毎の初期スピン電荷配置 | Atoms.SpeciesAndCoordinatesに記載 | |
シミュレーションボックス長の単位 | Atoms.UnitVectors.Unit | 原子単位系[Bohr] |
シミュレーションボックスのa,b,c軸のベクトル | Atoms.UnitVectors | TAPPINPUT.LATTICE_FACTOR TAPPINPUT.LATTICE_LIST |
相関交換ポテンシャル | scf.XcType | TAPPINPUT.XC_TYPE |
スピンを考慮した計算をするか | scf.SpinPolarization | TAPPINPUT.NUMBER_SPIN |
電子温度(SCF収束を楽にする) | scf.ElectronicTemperature [K] | TAPPINPUT.ELEC_KBT [Hartree or Ry (要確認)] |
カットオフエネルギー | scf.energycutoff [Ry] もしくはscf.Ngrid [grid数] | TAPPINPUT.CUTOFF_WAVE_FUNCTION [波数] (波数)^2 = カットオフエネルギー[Ry] |
SCFのiteration回数 | scf.maxIter | SCF_NUMBER_ITER_1ST |
MDや構造緩和で2step目以降のSCFのiteration回数 | SCF_NUMBER_ITER | |
SCF収束の終了条件の閾値 | scf.criterion | TAPPINPUT.SCF_CONVERGE TAPPINPUT.SCF_CONVERGE_ENERGY |
SCF収束計算の打ち切り時間 | TAPPINPUT.CONTROL_UPTIME | |
固有値ソルバー(バルクor孤立系) | scf.EigenvalueSolver | (固定?) |
固有値ソルバー(数値ソルバー) | scf.lapack.dste | |
固有値ソルバー(MPI数値ソルバー) | scf.eigen.lib | |
k点サンプリング | scf.Kgrid | SMPL_KPTグループに記述 |
SCF収束の手法(電子密度mixing) | scf.Mixing.Type scf.Init.Mixing.Weight scf.Min.Mixing.Weight scf.Max.Mixing.Weight scf.Mixing.History scf.Mixing.StartPulay scf.Mixing.EveryPulay | |
中性原子ポテンシャルVNAの展開法 | scf.ProExpn.VNA | |
追加の電荷 | scf.system.charge | TAPPINPUT.EXTRA_CHARGE |
応力テンソルを計算するか | scf.stress.tensor | (標準で計算する) |
要調査 | TAPPINPUT.XTRAP_BETA | |
計算終了後に波動関数を保存するか破棄するか | TAPPINPUT.STORE_WFN | |
系の対称性の指定 | symmetry dataセクションに記入 | |
構造最適化やMDをするか | MD.Type | STRUCT_OPT.NUMBER_CYCLEが0か1以上か |
構造最適化やMDのステップ数 | MD.maxIter | STRUCT_OPT.NUMBER_CYCLE |
MDの時間ステップ | MD.TimeStep | |
構造最適化の終了条件の閾値 | MD.Opt.criterion | STRUCT_OPT.CONVERGE_ENERGY STRUCT_OPT.CONVERGE_FORCE |
要調査 | STRUCT_OPT.SEARCH_1D_FRATIO | |
要調査 | STRUCT_OPT.DISPLACEMENT_MAX | |
要調査 | STRUCT_OPT.NUMBER_CYCLE | |
要調査 | STRUCT_OPT.REFRESH_CYCLE | |
要調査 | STRUCT_OPT.SEARCH_1D_MAX_STEP |
入力ファイルの例
OpenMXの場合
OpenMXの入力ファイルにはテキスト形式で以下の様に入力します。各行のシャープ以降はコメントととして扱われます。
#
# File Name
#
System.CurrrentDirectory ./ # default=./
System.Name Ar2 # becomes output filename
DATA.PATH ../DFT_DATA13 # relative path to PAO and VPS
level.of.stdout 1 # default=1 (1-3)
level.of.fileout 0 # default=1 (1-3)
#
# restart using a restart file, *.rst
#
scf.restart off # on|off,default=off
#
# Definition of Atomic Species
#
Species.Number 1
<Definition.of.Atomic.Species
Ar Ar9.0-s3p3d2 Ar_PBE13 # Species, orbital, pseudo-potential
Definition.of.Atomic.Species>
#
# Atoms
#
Atoms.Number 2
Atoms.SpeciesAndCoordinates.Unit Ang # Ang|AU
<Atoms.SpeciesAndCoordinates
1 Ar 0.00000 10.0000 10.0000 4 4
2 Ar 2.0 10.0000 10.0000 4 4
Atoms.SpeciesAndCoordinates>
Atoms.UnitVectors.Unit Ang # Ang|AU
<Atoms.UnitVectors
30.000000000 0.00000000 0.00000000
0.00000000 30.000000000 0.00000000
0.00000000 0.00000000 30.0000000000
Atoms.UnitVectors>
#
# SCF or Electronic System
#
scf.XcType GGA-PBE # LDA|LSDA-CA|LSDA-PW|GGA-PBE
scf.SpinPolarization on # On|Off
scf.ElectronicTemperature 300.0 # default=300 (K)
scf.energycutoff 300.0 # default=150 (Ry)
#scf.Ngrid 200 200 200
scf.maxIter 160 # default=40
scf.EigenvalueSolver cluster # Recursion|Cluster|Band
scf.lapack.dste dstedc # dstegr|dstedc|dstevx, default=dstegr
scf.eigen.lib elpa1 # elpa1|scalapack|lapack
scf.Kgrid 1 1 1 # means 4x4x4
scf.Mixing.Type rmm-diisk # Simple|Rmm-Diis|Gr-Pulay
scf.Init.Mixing.Weight 0.30 # default=0.30
scf.Min.Mixing.Weight 0.001 # default=0.001
scf.Max.Mixing.Weight 0.400 # default=0.40
scf.Mixing.History 20 # default=5
scf.Mixing.StartPulay 5 # default=6
scf.Mixing.EveryPulay 1 # default=5
scf.criterion 1.0e-7 # default=1.0e-6 (Hartree)
scf.ProExpn.VNA off # default=on
scf.system.charge 0.0
scf.stress.tensor off
#
# MD or Geometry Optimization
#
MD.Type nomd # Nomd|Opt|EF|BFGS|RF|DIIS|NVE|NVT_VS|NVT_NH|OptC1-5|RFC5
MD.maxIter 1 # default=1
#MD.TimeStep 1.0 # default=0.5 (fs)
#MD.Opt.criterion 1.0e-4 # default=1.0e-4 (Hartree/bohr)
拡張子は.dat
とするのが推奨仕様の模様です。
xTAPPの場合
xTAPPの入力ファイルにはテキスト形式で以下の様に入力します。
# file map data
&filemap
basename = 'Ar2',
number_PP_file = 1
/
ps-Ar ps-Ar.ichr
# main data
&TAPPINPUT
LATTICE_FACTOR = 40.0,
LATTICE_LIST = 1.0, 0.0, 0.0,
0.0, 1.0, 0.0,
0.0, 0.0, 1.0,
CUTOFF_WAVE_FUNCTION = 3.8,
XTRAP_BETA = 0.8,
NUMBER_ELEMENT = 1,
NUMBER_ATOM = 2,
NUMBER_BAND = 16,
ELEC_KBT = 1.0E-004,
STORE_WFN = 1,
SCF_CONVERGE = 1.0E-014,
SCF_CONVERGE_ENERGY = 1.0E-008,
SCF_NUMBER_ITER_1ST = 50,
SCF_NUMBER_ITER = 10,
CONTROL_UPTIME = 3600.0,
XC_TYPE = "PBE"
/
# symmetry data
&SYMMETRY
SYMMETRY_FORMAT = "reciprocal",
NUMBER_SYM_OP = 1
/
1 0 0 0 1 0 0 0 1 0 0 0 ! rg(3,3), pg(3)
# atom data
8.0 18.0 ! zo, zn
1 0.00000000000E+00 0.00000000000E+00 0.00000000000E+00 ! atom_kind, pos_a, pos_b, pos_c (in lattice coordiate)
1 0.01415094339622641509433962264151 0.0 0.0
# k-points data
&SMPL_KPT
DOS_MODE = "COS", !COS or FERMI
DOS_BAND_LOWER = 1,
DOS_BAND_UPPER = 8,
DOS_MESH = 2, 2, 2,
BZ_MESH = 2,
BZ_NUMBER_TILE = 1,
CUTOFF_DOS_COS = 30.0
/
2 2 2
2 2 2
# struct_opt data
&STRUCT_OPT
CONVERGE_ENERGY = 1.0E-008,
CONVERGE_FORCE = 1.0E-003,
SEARCH_1D_FRATIO = 0.1,
DISPLACEMENT_MAX = 0.5,
NUMBER_CYCLE = 0
REFRESH_CYCLE = 10,
SEARCH_1D_MAX_STEP = 5
/
# str_opt_constr data
1
0
#
シャープで始まる行はコメント文ではなく、入力項目のセクション名ですので、正しい記入が必要です。以下の様なデータ構造になっており、セクションの中に、FORTRANのNAMELISTとその他の列挙データ(擬ポテンシャルファイル名、原子座標、対称性など)があります。
#セクション名
$namelist_group
namelist_variable = value
...
namelist_variable = value
/
その他の列挙項目
#次のセクション名
...
NAMELISTの仕様を満たすように記述しなければファイル読み込みエラーになります。私自身もNAMELISTの仕様を完全には頭に入っていないのでよく間違えて読み込みエラーになります(かつてはFORTRANでコードを書いていた時期もありましたがその時もNAMELISTではなく自身で文字列解析させていたこともあり)。&
で始まる文字がグループ名になり、それ以降が変数になります。グループの終了は/
の文字になります。変数の値として文字列を与えたい時はダブルクォーテーションでくくることが推奨されます。
拡張子は.cg
とするのが推奨仕様の模様です。ただし、実際の入力はFORTRANのファイル番号10番のファイルを読み込むので、ジョブ投入時にはfort.10
というファイル名にリネームorコピーして実行することになります。