vasp_watch.py 技術ドキュメント
プログラムの動作
vasp_watch.py は、VASP (Vienna Ab initio Simulation Package) による計算、特に構造最適化(緩和計算)の進捗をリアルタイムで監視するためのPythonスクリプトです。
プログラムの目的
VASP計算の実行中に、その進捗状況、特に収束状況を効率的に把握することを目的としています。長時間にわたる計算において、計算が正常に進行しているか、あるいは収束に問題が生じていないかを、手動でログファイルを監視する手間なく、視覚的に確認できるようになります。
主な機能
VASPファイルの監視と解析: 指定されたVASP計算ディレクトリ内の
OUTCARおよびOSZICARファイルを定期的に監視します。ファイルが更新されると、その内容を読み込み、計算の主要な情報を解析します。コンソール出力:
INCAR,POSCAR,OUTCAR,OSZICARから抽出された設定情報、格子定数、フェルミエネルギー、収束基準(EDIFF,EDIFFG)、および各電子ステップ・イオンステップでのエネルギーと力の詳細な履歴をリアルタイムでコンソールに出力します。リアルタイムグラフ表示:
matplotlibライブラリを使用して、以下の3種類のグラフを動的に更新し、VASP計算の収束トレンドを可視化します。エネルギー差の対数グラフ: 各電子ステップにおける最終エネルギーとの絶対エネルギー差 (\(|E - E_{final}|\)) を対数スケールでプロットします。電子的な収束基準
EDIFFも合わせて表示されます。スケーリングされたエネルギー差グラフ: 各電子ステップにおけるエネルギー差を \(dE^{1/npower}\) の形でスケーリングしてプロットします(\(npower=10.0\))。これにより、小さなエネルギー変化を視覚的に強調し、
EDIFFに対応するスケーリングされた基準線も表示します。スケーリングされた力のグラフ: 各イオンステップにおける最終力との絶対力の差を \(|F - F_{final}|^{1/npower}\) の形でスケーリングしてプロットします(\(npower=10.0\))。イオン的な収束基準
EDIFFGに対応するスケーリングされた基準線も表示します。
自動更新:
OUTCARファイルの最終更新時刻をチェックし、変更があれば自動的に情報を再解析し、グラフを更新します。
解決する課題
このプログラムは、VASP計算の安定性と収束状態を直感的に理解するための手段を提供します。特に、構造最適化の途中でエネルギーが振動したり、力が収束しなかったりする問題が発生した場合に、その傾向を早期に発見し、計算パラメータの調整などの対策を講じるのに役立ちます。
原理
vasp_watch.py は、VASPの出力ファイルを解析し、計算の進捗と収束状況を視覚化します。
VASP出力ファイルの解析
OUTCAR: このファイルから、VASP計算の全体的な設定(例:ISPIN、IsHF)、電子的な収束基準(EDIFF)、イオン的な収束基準(EDIFFG)、フェルミエネルギー(EF)などの情報が抽出されます。これらの値は、グラフの基準線やコンソール出力に利用されます。OSZICAR: このファイルは、各電子緩和ステップおよび各イオンステップにおけるエネルギーや力の詳細な履歴を含んでいます。プログラムはここから以下の情報を取得します。電子ステップのエネルギー (\(E\)): 各電子ステップで計算された全エネルギー。
イオンステップの力 (\(F\)): 各イオンステップで計算された最大残余力(または力のRMS)。
収束の監視と可視化
プログラムは、OSZICAR から読み取ったエネルギーと力の履歴データを使用して、収束トレンドを評価します。
エネルギー収束 (\(dE\)): 各電子ステップ \(i\) におけるエネルギー \(E_i\) と、
OSZICAR内で記録された最終ステップのエネルギー \(E_{final}\) との差分を計算します。 $\(dE_i = E_i - E_{final}\)\( グラフでは、この絶対値 \)|dE_i|\( を対数スケールでプロットし、`INCAR` で設定された `EDIFF` と比較します。また、小さな変化を強調するために、スケーリングされたエネルギー差をプロットします。 \)\(dE_{i, \text{scaled}} = \text{sign}(dE_i) \cdot |dE_i|^{1/npower}\)\( ここで \)npower = 10.0$ です。このスケーリングは、収束が近づくにつれてエネルギー変化が小さくなる傾向を、より明確に視覚化するのに役立ちます。力収束 (\(dF\)): 各イオンステップ \(j\) における最大力 \(F_j\) と、
OSZICAR内で記録された最終ステップの最大力 \(F_{final}\) との差分を計算します。 $\(dF_j = F_j - F_{final}\)\( グラフでは、この絶対値 \)|dF_j|\( をスケーリングしてプロットします。 \)\(dF_{j, \text{scaled}} = |dF_j|^{1/npower}\)\( ここでも \)npower = 10.0\( です。`INCAR` で設定された `EDIFFG` は力の収束基準であり、通常は最大力の絶対値と比較されます。プログラムはスケーリングされた力の絶対値 `\)|F-F_{final}|^{1/npower}\(` をプロットし、収束基準 `\)|EDIFFG|^{1/npower}$` を正負両方向に描画します。
リアルタイム更新メカニズム
プログラムは、OUTCAR ファイルの最終更新時刻(os.path.getmtime())を定期的にチェックします。更新が検出されると、すべての出力ファイルを再読み込みし、コンソールと matplotlib のグラフを最新のデータに基づいて更新します。これにより、VASP計算の進捗がほぼリアルタイムで反映されます。time.sleep() と plt.pause() を組み合わせることで、ポーリングとGUIの描画更新を効率的に行っています。
必要な非標準ライブラリとインストール方法
vasp_watch.py を実行するために、以下の非標準Pythonライブラリが必要です。
numpy: 数値計算(配列操作、数学関数など)scipy: 科学技術計算(プログラム内ではinterp1dがインポートされていますが、直接使用はされていません)matplotlib: データのプロットとグラフ描画
これらのライブラリは pip を使ってインストールできます。
pip install numpy scipy matplotlib
tklib: このプログラムはtklibというカスタムライブラリ(tklib.tkfile,tklib.tkutils,tklib.tkre,tklib.tkcrystal.tkcif,tklib.tkcrystal.tkcrystal,tklib.tkcrystal.tkatomtype,tklib.tkcrystal.tkvaspなど)に依存しています。tklibは標準のPythonパッケージインデックスでは提供されていないため、上記pipコマンドではインストールできません。このライブラリは、おそらくvasp_watch.pyの開発者によって作成されたものであり、別途入手・インストール(または、適切なPythonのパスに配置)する必要があります。
必要な入力ファイル
vasp_watch.py は、VASP計算が実行されている(またはその入力ファイルが配置されている)ディレクトリ(CAR_dir)内の以下のファイルを読み込みます。
CAR_dir/INCAR: VASPの計算設定を記述したファイル。プログラムはここから、計算のタイトル (SYSTEM) や電子・イオン緩和の収束基準 (EDIFF,EDIFFG) などの情報を抽出して表示します。CAR_dir/POSCAR: 計算対象の初期構造を記述したファイル。プログラムはここから、格子定数などの結晶構造情報を読み込んで表示します。CAR_dir/KPOINTS: K点サンプリングに関する設定ファイル。プログラムはファイルの存在を確認し、パスを表示します。CAR_dir/OUTCAR: VASPの標準出力ファイル。計算の詳細なログ、フェルミエネルギー (EF)、INCARとPOSCARの内容の反映、および計算パラメータの実際の値などが記録されています。プログラムは主にこのファイルの更新時刻を監視し、EDIFF,EDIFFG,EFなどの情報を抽出します。CAR_dir/OSZICAR: VASPの構造最適化や電子緩和の進行状況に関する簡潔なログファイル。各電子ステップおよび各イオンステップにおけるエネルギー (E)、エネルギー差 (dE)、最大力 (F) などの情報が記録されており、プログラムはこれらのデータをグラフ描画の元データとして使用します。
生成される出力ファイル
vasp_watch.py は、実行中にいかなるファイルも出力しません。
プログラムの出力は、以下の2つの形式で提供されます。
コンソール出力: 監視対象のVASPファイルのパス、計算設定、現在の構造情報、および
OUTCARやOSZICARから抽出された各ステップでのエネルギーと力の数値データがリアルタイムで標準出力(ターミナル)に表示されます。グラフィカル出力:
matplotlibによって生成される独立したウィンドウに、エネルギーと力の収束トレンドを示す3つのリアルタイムグラフが表示されます。
これらの出力は一時的なものであり、プログラムの終了とともに消滅します。グラフの画像をファイルとして保存する機能は、このプログラムには含まれていません。
コマンドラインでの使用例 (Usage)
vasp_watch.py の基本的な使用法は以下の通りです。
Usage:
python vasp_watch.py relax CAR_dir
relax: 監視モードを指定します。現在のバージョンでは「relax」(構造最適化)モードのみがサポートされています。CAR_dir: VASPの入力/出力ファイル(INCAR,POSCAR,OUTCAR,OSZICARなど)が格納されているディレクトリのパスを指定します。現在のディレクトリを監視する場合は.を指定します。
コマンドラインでの具体的な使用例
VASPの構造最適化計算が /home/user/vasp_calc/structure_relaxation ディレクトリで実行されており、OUTCAR および OSZICAR ファイルがこのディレクトリに生成されていると仮定します。
VASP計算ディレクトリに移動し、
vasp_watch.pyを実行する場合:cd /home/user/vasp_calc/structure_relaxation python vasp_watch.py relax .
このコマンドは、現在のディレクトリ (
.) を監視対象としてvasp_watch.pyを「relax」モードで実行します。任意のディレクトリから、特定のVASP計算ディレクトリを監視する場合:
python vasp_watch.py relax /home/user/vasp_calc/structure_relaxation
このコマンドは、
/home/user/vasp_calc/structure_relaxationディレクトリを監視対象としてvasp_watch.pyを「relax」モードで実行します。
実行結果の説明
上記コマンドを実行すると、以下のような動作と出力が得られます。
コンソール出力:
プログラムの起動メッセージと、監視モード (
relax) および対象ディレクトリ (CAR_dir) が表示されます。OUTCARやOSZICARファイルが更新されるたびに、その時刻が報告され、以下の情報が順次出力されます。監視対象VASPファイルのパス一覧 (
INCAR,POSCAR,KPOINTS,OUTCAR,OSZICAR)。INCARから読み取られたSYSTEM名。POSCARから読み取られた格子定数。OUTCARから読み取られたISPIN,IsHF, フェルミエネルギー (EF), 収束基準 (EDIFF,EDIFFG)。OSZICARからの詳細なログ。各電子ステップ (e) のエネルギー (E) と最終エネルギーからの差分 (dE)、および各イオンステップ (ion) での最大力 (F) と最終力からの差分が表形式で表示されます。
プログラムは
Ctrl-Cで終了するまで、この監視と出力のサイクルを繰り返します。
グラフィカル出力:
matplotlibによって新しいウィンドウが開き、3つのサブプロットが表示されます。上段: 横軸に電子ステップの反復回数、縦軸に最終エネルギーからの絶対エネルギー差 \(|E - E_{final}|\) (対数スケール) がプロットされます。
INCARで設定されたEDIFFの基準線も表示されます。中段: 横軸に電子ステップの反復回数、縦軸にスケーリングされたエネルギー差 \(dE^{1/10}\) がプロットされます。
EDIFFに対応するスケーリングされた基準線も表示されます。下段: 横軸にイオンステップの反復回数、縦軸にスケーリングされた力の差 \(|F - F_{final}|^{1/10}\) がプロットされます。
EDIFFGに対応するスケーリングされた基準線も表示されます。
これらのグラフは、VASPの計算が進み
OUTCARやOSZICARが更新されるたびに自動的に再描画され、最新の収束状況を視覚的に提供します。グラフは
Ctrl-Cでプログラムを終了すると閉じられます。