xTAPPとOpenMX:(1)入力ファイル比較

DFTの研究では平面波基底のコードが圧倒的に多いです。その差別化の意味でも、これまで研究では原子基底(局在基底)を用いるOpenMXをメインで使っておりました。OpenMXではコードの改造パッチ等も作っておりますし、今後も利用を続けていくつもりです。

一方で、MDのポテンシャルを作るというもう一つの研究において、コード毎に算出されるエネルギーや力の差はどの程度あるのか、自分でも検証してみたいと思い、平面波コードを色々と試しておりました。その中でも、やはり開発者の先生と交流があり相談もできるものが良いという点から、国産の平面波コードのうちxTAPPを最近は利用しています。

ここでは、xTAPPの利用に関する個人的なメモを纏めます。OpenMXと比較することで、原子基底と平面波基底コードの違いを認識出来ればと思います。

入力項目

OpenMXとxTAPPの入力ファイルにおいて、記述が必要なものを以下に纏めます。記述が必要な場合には入力項目名を記しています。xTAPPはFORTRANのNAMELIST形式ですので、group.variableの形式でピリオドで結んで記載します。

 OpenMXxTAPP
システムネーム (出力ファイル名等に使う)System.Namefilemap.basename
カレントディレクトリSystem.CurrrentDirectory 
擬ポテンシャルのディレクトリDATA.PATH 
標準出力内容の調整level.of.stdout 
ファイル出力内容の調整level.of.fileout 
継続計算か否かscf.restart 
利用する元素の種類の数Species.Numberfilemap.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.NumberTAPPINPUT.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.UnitVectorsTAPPINPUT.LATTICE_FACTOR
TAPPINPUT.LATTICE_LIST
相関交換ポテンシャルscf.XcTypeTAPPINPUT.XC_TYPE
スピンを考慮した計算をするかscf.SpinPolarizationTAPPINPUT.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.maxIterSCF_NUMBER_ITER_1ST
MDや構造緩和で2step目以降のSCFのiteration回数 SCF_NUMBER_ITER
SCF収束の終了条件の閾値scf.criterionTAPPINPUT.SCF_CONVERGE
TAPPINPUT.SCF_CONVERGE_ENERGY
SCF収束計算の打ち切り時間 TAPPINPUT.CONTROL_UPTIME
固有値ソルバー(バルクor孤立系)scf.EigenvalueSolver(固定?)
固有値ソルバー(数値ソルバー)scf.lapack.dste 
固有値ソルバー(MPI数値ソルバー)scf.eigen.lib 
k点サンプリングscf.KgridSMPL_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.chargeTAPPINPUT.EXTRA_CHARGE
応力テンソルを計算するかscf.stress.tensor(標準で計算する)
要調査 TAPPINPUT.XTRAP_BETA
計算終了後に波動関数を保存するか破棄するか TAPPINPUT.STORE_WFN
系の対称性の指定 symmetry dataセクションに記入
構造最適化やMDをするかMD.TypeSTRUCT_OPT.NUMBER_CYCLEが0か1以上か
構造最適化やMDのステップ数MD.maxIterSTRUCT_OPT.NUMBER_CYCLE
MDの時間ステップMD.TimeStep 
構造最適化の終了条件の閾値MD.Opt.criterionSTRUCT_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コピーして実行することになります。