最近の機械学習ポテンシャルのための参照データ形式として,ASEパッケージで用いられている?extxyzフォーマットが良く利用されているのでメモしておく.

下のようなフォーマットとなっている.

128
Lattice="13.348 0.000 0.000 0.000 15.725 0.000 0.000 0.000 12.223" Properties=species:S:1:pos:R:3:forces:R:3 energy=-437.76068789171956
Li          1.8857           4.0571           4.3377      -2.921e-02       -1.009e-01       -1.176e-01
Li         11.0545           4.0424           1.8293      -1.132e-01       -3.853e-01        3.531e-01
Li          4.4235           3.5972           1.7773       3.852e-01       -5.604e-01       -4.473e-01
...
  • 1行目:原子数
  • 2行目:系に関する付加的情報
    • Lattice — セルベクトル要素
    • Properties — 各原子の行に何が書かれているかの情報.上の例では,species情報として文字列Sが1つ,pos情報として実数Rが3つ,forces情報として実数Rが3つ.
    • energy — エネルギー
    • 他にもいくらでも追記可能.
  • 3行目以降:各原子情報.原子の位置座標は絶対座標(セルベクトルの相対座標ではない).

ASEでの出力方法

# atoms変数に構造情報が入っているとする
ase.io.write(filename='hoge.extxyz', 
			 images=atoms,
			 format='extxyz')
  • 他にも append=True というオプションを付けると,ファイルの末尾にデータを追加することになる.

nappyでの出力方法

# atoms変数にASEの構造情報が入っているとする
import nappy
nsys = nappy.io.from_ase(atoms, get_forces=True)
nappy.io.write(nsys, fname='hoge.extxyz')
  • nappy.io.write()はファイル名にextxyzが入っている場合にはフォーマットを自動判定する.