poscar

Ippei Kishida

Last-modified:2018/10/17 11:33:12.

1 概要

POSCAR, CONTCAR に対する解析、操作を行います。

2 selectivedynamics

selective dynamics を付加した POSCAR の内容を出力します。 元々 selective dynamics が入っている POSCAR ならば、 その情報をベースとして操作します。

出力先はデフォルトでは標準出力です。 オプション、引数をつけなければそのまま出力します。

% poscar selectivedynamics
sample0
1.0
   1.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     1.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     1.000000000000000
Li Ge O
1 1 1
Direct
     0.000000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.500000000000000     0.000000000000000

引数で固定する原子を指定します。 全原子を1からカウントアップします。 複数指定可能です。

 % poscar selectivedynamics 1 3
sample0
1.0
   1.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     1.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     1.000000000000000
Li Ge O
1 1 1
Selective dynamics
Direct
     0.000000000000000     0.000000000000000     0.000000000000000 F F F
     0.500000000000000     0.000000000000000     0.000000000000000 T T T
     0.500000000000000     0.500000000000000     0.000000000000000 F F F

–flag オプションで固定する原子の固定方向を上書き的に制御できます。 ただし、固定原子全て同じ方向となります。 別個の方向に固定したい場合は poscar selectivedynamics を複数回使用しましょう。

% poscar selectivedynamics 1 3 --flag='F F T'
sample0
1.0
   1.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     1.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     1.000000000000000
Li Ge O
1 1 1
Selective dynamics
Direct
     0.000000000000000     0.000000000000000     0.000000000000000 F F T
     0.500000000000000     0.000000000000000     0.000000000000000 T T T
     0.500000000000000     0.500000000000000     0.000000000000000 F F T

対象 POSCAR はデフォルトでカレントディレクトリの POSCAR ですが、 –poscar オプションで変更できます。

% poscar selectivedynamics 1 3 --flag='F F T' --poscar=POSCAR.00

–overwrite オプションを付けた場合は標準出力に表示する代わりに、 POSCAR ファイルを上書きします。

3 png4in1

POSCAR の 3D イメージを描画する。 x,y,z 軸それぞれと、<-1,-1,-1> 方向の4つの視点からの画像を1つにまとめたものを生成する。

poscar png4in1 POSCAR_file                  # Generate a PNG file from 4 view points.

4 pair

指定した距離以下の 原子のペアを出力します。

poscar pair distance [POSCAR]

たとえば、

% poscar pair 3.0
Na1-555,Cl1-555
Na2-555,Cl1-555

555 は cif 形式のセル位置の指定で、以下のような感じです。

5 pov

オブジェクトを表す文字列を povray 形式で標準出力に出力します。 ファイルに落とすにはリダイレクトしてください。

example/poscar/pov/run.sh に使用例を置いてあります。

poscar pov --atom #原子の描画
poscar pov --cell #セルの描画
poscar pov --bond='Na1,Cl2' #Na1 と Cl2 の間に連結棒を作ります。
poscar pov --triangle='Na1,Na2,Na3' # 3つの原子で三角形を作ります。
poscar pov --tetrahedron='Cl1,Cl2,Cl3,Cl4' #4つの原子で四面体を作ります。
poscar pov --axes=pos # 座標軸
poscar pov --camera='10,90,120' # カメラに関する設定を出力
poscar pov --atom --transmit=0.7 # 原子の透明度

原子の指定には上記のように 「元素記号+番号」で指定します。 番号は 1 始まりです。

以下のようにすれば、コマンド実行ごとにオブジェクトを随時追加していくことができます。

touch objects.pov
poscar pov --atom >> objects.pov
poscar pov --cell >> objects.pov
poscar pov --bond='Na1,Cl2' >> objects.pov
poscar pov --triangle='Na1,Na2,Na3' >> objects.pov
poscar pov --tetrahedron='Cl1,Cl2,Cl3,Cl4' >> objects.pov
poscar pov --axes='-1,-1,-1' >> objects.pov

Note: –transmit オプションは今のところ –atom に関してしか作用しません。[2017-04-21]

6 snapgeomopt

構造最適化の途中経過の構造を出力する。

poscar snapgeomopt

vasprun.xml から、もしくはオプションで XDATCAR から 構造最適化の ionic step ごとの構造の情報を POSCAR 形式でファイル出力します。 XDATCAR はセル形状の情報がないので、 できるだけ vasprun.xml から読んだ方が良いでしょう。

0.vasp, 1.vasp などの名前で生成します。 拡張子が vasp になっているのは、 Windows でダブルクリックで VESTA が起動してくれるかなー、と思ったからです。

7 distance

POSCAR 内で原子間の距離を算出します。 第1引数に対象の POSCAR(CONTCAR)を与え、 第2, 3引数に原子 IDを与えます。 原子 ID は「Li2」のように、元素記号と整数の組み合わせで指定します。 POSCAR 内で Li の2番目という意味になります。 この原子の番号は 0 からではなく 1 からカウントします。

% poscar distance POSCAR Li1 Li2
atom1 [a       , b       , c       ], atom2 [a       , b       , c       ], distance, periodic_distance
  Li1 [0.000000, 0.000000, 0.500000],   Li2 [0.666667, 0.333333, 0.833333],  4.96759,  4.96723

出力の1行目はタイトルで、 2行目以下が情報になります。 情報部分では各原子の指定した原子ID, 内部座標を出力したあと、 unit cell 内での距離 (distance ) と 周期境界を跨いだものも含めた最短距離(periodic_distance) を出力します。

第3引数を省略した場合、 POSCAR 内に記述されている全ての原子それぞれとの距離を出力します。

% poscar distance POSCAR Li2
atom1 [a       , b       , c       ], atom2 [a       , b       , c       ], distance, periodic_distance
  Li2 [0.666667, 0.333333, 0.833333],   Li1 [0.000000, 0.000000, 0.500000],  4.96759,  4.96723
  Li2 [0.666667, 0.333333, 0.833333],   Li2 [0.666667, 0.333333, 0.833333],  0.00000,  0.00000
  Li2 [0.666667, 0.333333, 0.833333],   Li3 [0.333333, 0.666667, 0.166667],  9.52676,  4.96724
  Li2 [0.666667, 0.333333, 0.833333],   Co1 [0.000000, 0.000000, 0.000000], 11.84570,  2.85533
  Li2 [0.666667, 0.333333, 0.833333],   Co2 [0.666667, 0.333333, 0.333333],  7.04000,  7.04000
  Li2 [0.666667, 0.333333, 0.833333],   Co3 [0.333333, 0.666667, 0.666667],  2.85595,  2.85533
  Li2 [0.666667, 0.333333, 0.833333],    O1 [0.000000, 0.000000, 0.260000],  8.23501,  6.22380
  Li2 [0.666667, 0.333333, 0.833333],    O2 [0.000000, 0.000000, 0.740000],  2.09202,  2.09117
  Li2 [0.666667, 0.333333, 0.833333],    O3 [0.666667, 0.333333, 0.593333],  3.37920,  3.37920
  Li2 [0.666667, 0.333333, 0.833333],    O4 [0.666667, 0.333333, 0.073333], 10.70080,  3.37920
  Li2 [0.666667, 0.333333, 0.833333],    O5 [0.333333, 0.666667, 0.926667],  2.09202,  2.09117
  Li2 [0.666667, 0.333333, 0.833333],    O6 [0.333333, 0.666667, 0.406667],  6.22409,  6.22380

8 latticeconstant

格子定数を出力します。 複数ファイルをコマンドライン引数で指定できます。 当然ですが、CONTCAR も OK です。

% poscar latticeconstant *.POSCAR
      a,       b,       c,  alpha,   beta,  gamma,   volume, file
 1.0000,  1.0000,  1.0000,  90.00,  90.00,  90.00,    1.000, 1.POSCAR
 1.0000,  1.0000,  1.0000,  90.00,  90.00,  90.00,    1.000, 2.POSCAR

9 axes

引数で指定した POSCAR(s) の格子ベクトルを出力します。

% poscar axes 1.POSCAR
  1.0000  0.0000  0.0000
  0.0000  1.0000  0.0000
  0.0000  0.0000  1.0000

複数の POSCAR を一度に指定できます。 上記のように一つだけのときは POSCAR 名を出しませんが、 複数のときには POSCAR 名を出します。

% poscar axes *.POSCAR
1.POSCAR
  1.0000  0.0000  0.0000
  0.0000  1.0000  0.0000
  0.0000  0.0000  1.0000

2.POSCAR
  1.0000  0.0000  0.0000
  0.0000  1.0000  0.0000
  0.0000  0.0000  1.0000

–decimal オプションで、小数部の長さを指定できます。

% poscar axes 1.POSCAR --decimal=10
  1.0000000000  0.0000000000  0.0000000000
  0.0000000000  1.0000000000  0.0000000000
  0.0000000000  0.0000000000  1.0000000000

10 setaxes

POSCAR の格子ベクトルを変更します。 引数には 3つのベクトルの x, y, z 成分を与えます。 たとえば、 POSCAR ファイルの中身が以下であるとします。

sample0
1.0
        2.0  0.0  0.0
        0.0  2.0  0.0
        0.0  0.0  2.0
  Li Ge O
  1 1 2
Selective dynamics
Direct
        0.0  0.0  0.0  F F F #Li-001
        0.5  0.0  0.0  F T F #Ge-002
        0.5  0.5  0.0  T T T #O--003
        0.5  0.5  0.5  T T T #O--004

以下のコマンドは 1辺10Åの立方晶にします。

% poscar setaxes 10 0 0 0 10 0 0 0 10
sample0
1.0
   10.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     10.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     10.000000000000000
Li Ge O
1 1 2
Selective dynamics
Direct
     0.000000000000000     0.000000000000000     0.000000000000000 F F F
     0.500000000000000     0.000000000000000     0.000000000000000 F T F
     0.500000000000000     0.500000000000000     0.000000000000000 T T T
     0.500000000000000     0.500000000000000     0.500000000000000 T T T

一次独立でないベクトルを与えたときには、エラーを吐きます。

% poscar setaxes 1 0 0 0 1 0 1 1 0
dependent vectors
Exit.

対象となる POSCAR はデフォルトではカレントディレクトリの POSCAR ですが、 これは –poscar オプションで変更できます。

% poscar setaxes 10 0 0 0 10 0 0 0 10 --poscar=1.POSCAR
sample0
1.0
   10.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     10.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     10.000000000000000
Li Ge O
1 1 1
Direct
     0.000000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.500000000000000     0.000000000000000

他の POSCAR ファイルの格子ベクトルを使う場合は、 axes コマンドの出力を使えば良いでしょう。

% poscar setaxes `poscar axes 1.POSCAR --decimal=10`
sample0
1.0
   1.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     1.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     1.000000000000000
Li Ge O
1 1 2
Selective dynamics
Direct
     0.000000000000000     0.000000000000000     0.000000000000000 F F F
     0.500000000000000     0.000000000000000     0.000000000000000 F T F
     0.500000000000000     0.500000000000000     0.000000000000000 T T T
     0.500000000000000     0.500000000000000     0.500000000000000 T T T

–overwrite オプションを使えば、標準出力ではなく上書きします。

10.1 原子座標の固定

デフォルトでは、内部座標が維持されるように軸を変更します。 直交座標が維持されるように軸を変更するには、 –fix オプションを付加します。

% poscar setaxes 10 0 0 0 10 0 0 0 10 --fix
sample0
1.0
   10.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     10.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     10.000000000000000
Li Ge O
1 1 2
Selective dynamics
Direct
     0.000000000000000     0.000000000000000     0.000000000000000 F F F
     0.100000000000000     0.000000000000000     0.000000000000000 F T F
     0.100000000000000     0.100000000000000     0.000000000000000 T T T
     0.100000000000000     0.100000000000000     0.100000000000000 T T T

10.2 原子座標の固定かつセンタリング

セルサイズを変更したときに、 原子の座標を原子間の距離を保ったまま、セル中央付近にシフトさせます。 –fix オプションが自動的にオンになります。

% ~/git/vasputils/bin/poscar setaxes 10 0 0 0 10 0 0 0 10 --center
sample0
1.0
   10.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     10.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     10.000000000000000
Li Ge O
1 1 2
Selective dynamics
Direct
     0.400000000000000     0.400000000000000     0.400000000000000 F F F
     0.500000000000000     0.400000000000000     0.400000000000000 F T F
     0.500000000000000     0.500000000000000     0.400000000000000 T T T
     0.500000000000000     0.500000000000000     0.500000000000000 T T T

10.3 メモ

11 substitute

元素置換します。

poscar substitute POSCAR Ge P

のようにすれば、 POSCAR に含まれる Ge を P に置換した POSCAR を標準出力に出力します。

% cat POSCAR
sample0
1.0
        1.0  0.0  0.0
        0.0  1.0  0.0
        0.0  0.0  1.0
  Li Ge O
  1  1  1
Direct
        0.0  0.0  0.0  #Li-001
        0.5  0.0  0.0  #Ge-002
        0.5  0.5  0.0  #O--003

% poscar substitute POSCAR Ge P
sample0
1.0
   1.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     1.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     1.000000000000000
Li P O
1 1 1
Direct
     0.000000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.500000000000000     0.000000000000000

ここで、Ge を O に置換しても、元々ある O と統合して POSCAR を生成します。

% poscar substitute POSCAR Ge O
sample0
1.0
   1.000000000000000     0.000000000000000     0.000000000000000
   0.000000000000000     1.000000000000000     0.000000000000000
   0.000000000000000     0.000000000000000     1.000000000000000
Li O
1 2
Direct
     0.000000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.500000000000000     0.000000000000000

置換元と置換先をコマンドライン引数で与えなければ、 POSCAR に含まれる元素と数を出力します。

% poscar substitute POSCAR
    Li     Ge      O
    1      1      1

11.1 –atomic-radii オプション

–atomic-radii オプションで、 原子半径を参考に格子定数を簡易調整することができます。

% poscar substitute POSCAR Li Na --atomic-radii
sample0
1.0
   1.067647058823529     0.000000000000000     0.000000000000000
   0.000000000000000     1.067647058823529     0.000000000000000
   0.000000000000000     0.000000000000000     1.067647058823529
Na Ge O
1 1 1
Direct
     0.000000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.000000000000000     0.000000000000000
     0.500000000000000     0.500000000000000     0.000000000000000

原子半径の総和の比をかけた格子定数にします。 科学的に厳密なものではありませんのでご注意ください。 ざっくりと、原子半径の総和の比で拡大・縮小します。

12 interpolate

poscar interpolate POSCAR.0 POSCAR.8 --images=3 --postfix=POSCAR

{0..4}.POSCAR を作ります。 images は最初と最後の間にある構造の数を指定します。

–images のデフォルト値は 1

–postfix のデフォルト値は POSCAR

13 supercell

以下の例では 1x2x3 スーパーセルを作ります。 標準出力に出力するので、リダイレクトしてファイルにしましょう。

poscar supercell POSCAR 1 2 3
poscar supercell POSCAR 1 2 3 > 1x2x3.POSCAR

14 shake

原子座標をランダムに移動した poscar を出力します。 以下は、各軸に 0.01 Åの範囲でランダムに動かします。

poscar shake 0.01

動かす原子を指定 省略すると全原子

poscar shake 0.01 Li1 O2

第1引数で指定する数値は、移動距離ではありません。 a, b, c 軸それぞれでの正負方向の距離の上限です。 たとえば 0.01 を指定した場合、-0.01〜+0.01 Å の幅 0.02 Å の範囲となり、 この範囲内でランダムに移動します。 また内部座標軸(a, b, c 軸)を用いており、直交座標系ではありません。

カレントディレクトリの POSCAR のみを対象とします。 POSCAR ファイルのパス指定する機能はありません。

–overwrite オプションで POSCAR を上書きします。

15 composition

Li1O2

のように表示します。