vasp_plot_epsilon.py Technical Documentation
プログラムの動作
vasp_plot_epsilon.py は、VASP (Vienna Ab-initio Simulation Package) によって計算された光学誘電率を OUTCAR ファイルから抽出し、グラフとしてプロットし、Excelファイルに保存するためのPythonスクリプトです。VASP計算で LEPSILON = .TRUE. が設定されている場合に生成される誘電率データを解析することを目的としています。
主な機能:
VASPの
OUTCARファイルから、頻度依存の複素誘電率テンソル \(\epsilon(\omega) = \epsilon_1(\omega) + i\epsilon_2(\omega)\) を抽出します。誘電率テンソルの実部 (\(\epsilon_1\)) と虚部 (\(\epsilon_2\)) を、各テンソル成分 (XX, YY, ZZ, XY, YZ, ZX) について読み取ります。
VASPが計算する "density-density" 応答と "current-current" 応答のいずれかを選択してプロットできます。
抽出した誘電率データを
epsilon.xlsxというExcelファイルに保存します。Matplotlibライブラリを使用して、各テンソル成分の実部と虚部をエネルギー (eV) の関数としてプロットし、インタラクティブなグラフウィンドウで表示します。
プロットするエネルギー範囲をコマンドライン引数で指定できます。
解決する課題:
VASPの OUTCAR ファイルはテキスト形式であり、誘電率データが複数のセクションにわたって記述されているため、手動でデータを抽出して可視化するのは手間がかかります。このスクリプトは、その抽出と可視化のプロセスを自動化し、解析を効率化します。
原理
このプログラムは、VASPの出力ファイルである OUTCAR の特定のキーワードを検索し、その後の行から誘電率データを数値として読み取ります。
VASPが LEPSILON = .TRUE. オプションで計算を実行すると、OUTCAR には以下のようなセクションが出力されます。
frequency dependent IMAGINARY DIELECTRIC FUNCTION (independent particle, no local field effects) density-densityfrequency dependent REAL DIELECTRIC FUNCTION (independent particle, no local field effects) density-densityfrequency dependent IMAGINARY DIELECTRIC FUNCTION (independent particle, no local field effects) current-currentfrequency dependent REAL DIELECTRIC FUNCTION (independent particle, no local field effects) current-current
これらのセクションには、エネルギー (eV) と対応する誘電率テンソル成分 \(\epsilon_{ij}\) の値が表形式で記述されています。誘電率は複素量であり、実部 \(\epsilon_1\) と虚部 \(\epsilon_2\) で構成されます。各成分は通常、XX, YY, ZZ, XY, YZ, ZX の6つの独立な要素として報告されます。
プログラムは、指定されたVASP計算ディレクトリ内の OUTCAR ファイルを読み込み、read_spectrum 関数を使用して上記のキーワードを正規表現で検索し、対応するエネルギーと誘電率のデータを抽出します。
ユーザーはコマンドライン引数 mode を介して、"density-density" 応答または "current-current" 応答のどちらをプロット対象とするかを選択できます。
抽出されたデータは、NumPy配列に格納され、以下の形式でExcelファイルに保存されます。
E(eV) |
e1xx |
e2xx |
e1yy |
e2yy |
e1zz |
e2zz |
e1yz |
e2yz |
e1zx |
e2zx |
e1xy |
e2xy |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
... |
そして、Matplotlibライブラリを用いて、エネルギー \(E\) を横軸、誘電率 \(\epsilon\) を縦軸とする2次元プロットを作成します。6つの独立なテンソル成分 (XX, YY, ZZ, XY, YZ, ZX) それぞれについて、実部と虚部が個別のサブプロットに表示されます。軸ラベルにはLaTeX表記が使用され、実部は $\epsilon_1$, 虚部は $\epsilon_2$ と表示されます。
必要な非標準ライブラリとインストール方法
このプログラムは以下の非標準Pythonライブラリに依存しています。
numpy: 数値計算、特に配列操作に使用されます。
pip install numpy
scipy: 科学技術計算ライブラリ。
interp1dがインポートされていますが、このプログラムの現在のバージョンでは直接使用されていません。pip install scipy
matplotlib: データの可視化、グラフ描画に使用されます。
pip install matplotlib
tklib: このプログラムが依存するカスタムライブラリ群です。VASPのファイルパス取得 (
tkVASP)、ファイル操作 (tkFile)、データのエクスポート (tkVariousData) など、様々なユーティリティ機能を提供します。 通常、このライブラリはpipで直接インストールできる形式ではない可能性があります。このプログラムを実行するには、tklibディレクトリを、vasp_plot_epsilon.pyと同じディレクトリ、またはPythonのモジュール検索パスが通っている場所に配置する必要があります。 例:vasp_plot_epsilon.pyと同じ階層にtklibディレクトリが存在するように配置します。. ├── vasp_plot_epsilon.py └── tklib/ ├── __init__.py ├── tkfile.py ├── tkre.py └── ... (その他のtklibモジュール)
必要な入力ファイル
このプログラムの実行には、VASPによって光学誘電率が計算された結果を含む OUTCAR ファイルが必須です。
OUTCAR:VASPの計算結果ファイル。
INCARファイルにLEPSILON = .TRUE.が設定されているVASP計算の出力である必要があります。このファイルには、エネルギーの関数として実部および虚部の誘電率テンソル成分(density-density応答とcurrent-current応答の両方)のデータが含まれている必要があります。
vasp_plot_epsilon.pyは、指定されたVASP計算ディレクトリ (CAR_dir) 内のOUTCARを自動的に検出して読み込みます。
VASP計算ディレクトリ (
CAR_dir):OUTCARファイルを含むディレクトリを指します。プログラムは
tkVASPモジュールを使用して、このディレクトリからOUTCARのパスを特定します。INCAR,POSCAR,CONTCARなどの他のVASPファイルも同じディレクトリにあることが想定されますが、プログラムが直接これらのファイルを読み込むことはありません。
生成される出力ファイル
プログラムは以下の出力ファイルを生成します。
epsilon.xlsx:ファイル名:
epsilon.xlsx場所: プログラムが実行されたVASP計算ディレクトリ内に保存されます。
内容: 抽出された誘電率データがExcel形式で保存されます。1列目にエネルギー (E(eV))、続く列に各誘電率テンソル成分の実部と虚部 (e1xx, e2xx, e1yy, e2yy, e1zz, e2zz, e1yz, e2yz, e1zx, e2zx, e1xy, e2xy) が含まれます。
Matplotlibグラフウィンドウ:
内容: Matplotlibによって生成されるグラフィカルなウィンドウが表示されます。このウィンドウには、6つのサブプロット(XX, YY, ZZ, XY, YZ, ZX)があり、それぞれに誘電率の実部 (\(\epsilon_1\)) と虚部 (\(\epsilon_2\)) がエネルギー \(E\) の関数としてプロットされます。
保存: このグラフは自動的にファイルに保存されません。ユーザーは表示されたウィンドウから手動で画像を保存できます。プログラムの実行後、Enterキーを押すか、グラフウィンドウを閉じることで終了します。
コマンドラインでの使用例 (Usage)
vasp_plot_epsilon.py は、コマンドライン引数を使用して実行モード、VASP計算ディレクトリ、およびプロットするエネルギー範囲を指定します。
python vasp_plot_epsilon.py [mode] [CAR_dir] [Emin] [Emax]
[mode](必須):誘電率の応答タイプを指定します。
有効な値:
density(density-density応答) またはcurrent(current-current応答)。
[CAR_dir](オプション):VASP計算ディレクトリのパス。
OUTCARファイルが存在するディレクトリを指定します。デフォルト値は
.(カレントディレクトリ) です。
[Emin](オプション):プロットするエネルギー範囲の下限値 (eV)。
デフォルト値は
0.0eV です。
[Emax](オプション):プロットするエネルギー範囲の上限値 (eV)。
デフォルト値は
8.0eV です。
コマンドラインでの具体的な使用例
以下の例では、プログラムの実行方法と、それによって生成される結果について説明します。
基本的な実行例 (density-density応答、カレントディレクトリ、デフォルトエネルギー範囲): VASPの
OUTCARファイルがカレントディレクトリにあり、density-density応答をプロットしたい場合。python vasp_plot_epsilon.py density .
または、明示的にエネルギー範囲を指定する場合:
python vasp_plot_epsilon.py density . 0.0 8.0
実行結果:
カレントディレクトリに
epsilon.xlsxファイルが生成されます。このファイルには、OUTCARから抽出されたエネルギーと誘電率テンソル成分 (実部・虚部) のデータが含まれます。Matplotlibによるグラフウィンドウが表示されます。ウィンドウには6つのサブプロットがあり、それぞれXX, YY, ZZ, XY, YZ, ZX成分の誘電率実部と虚部が \(0.0 \sim 8.0\) eV の範囲でプロットされます。
プログラムはグラフウィンドウを閉じるか、コンソールでEnterキーが押されるまで待機します。
特定のディレクトリとエネルギー範囲を指定した実行例 (current-current応答): VASP計算ディレクトリが
./my_vasp_calc/にあり、current-current応答を \(2.0 \sim 15.0\) eV の範囲でプロットしたい場合。python vasp_plot_epsilon.py current ./my_vasp_calc/ 2.0 15.0
実行結果:
./my_vasp_calc/ディレクトリ内にepsilon.xlsxファイルが生成されます。このファイルには、OUTCARから抽出されたエネルギーと誘電率テンソル成分 (current-current応答の実部・虚部) のデータが含まれます。Matplotlibによるグラフウィンドウが表示されます。ウィンドウには6つのサブプロットがあり、それぞれXX, YY, ZZ, XY, YZ, ZX成分の誘電率実部と虚部が \(2.0 \sim 15.0\) eV の範囲でプロットされます。
プログラムはグラフウィンドウを閉じるか、コンソールでEnterキーが押されるまで待機します。
無効なモードを指定した場合の例:
python vasp_plot_epsilon.py invalid_mode .
実行結果:
以下のエラーメッセージが表示され、プログラムが終了します。
Error: Invalide mode [invalid_mode] Usage: (a) python vasp_plot_epsilon.py mode CAR_dir Emin, Emax ex: python vasp_plot_epsilon.py density . 0.0 8.0