read_car.py プログラムドキュメント
プログラムの動作
read_car.py は、VASP (Vienna Ab initio Simulation Package) の計算結果ファイルの一つである CHGCAR ファイルを解析し、構造情報と電荷密度データをPythonのデータ構造として読み込むプログラムです。
主な機能:
CHGCARファイルから以下の構造情報を抽出します。タイトル行
グローバルなスケール因子
単位格子の基底ベクトル(3次元)
含まれる原子の化学種リスト
各原子種の原子数リスト
原子座標の指定形式(DirectまたはCartesian)
各原子の分数または直交座標
電荷密度データのグリッドサイズ(\(N_x, N_y, N_z\))を特定します。
グリッド上の電荷密度値を読み込み、NumPy配列を経由して、Pythonのネストされたリスト形式(
P[ix][iy][iz]のようにアクセス可能)で提供します。プログラムが直接実行された場合、読み込んだ
CHGCARファイルのタイトル、グリッドサイズ、およびグリッド点 \((0,0,0)\) における電荷密度の値を標準出力に表示します。
解決する課題:
VASPの CHGCAR ファイルは複雑なテキスト形式であり、Pythonで直接解析して電荷密度データにアクセスするのは手間がかかります。本プログラムは、ファイルフォーマットの詳細を抽象化し、Pythonの使いやすいデータ構造(辞書とネストされたリスト)として電荷密度データを提供することで、後続のデータ解析や可視化を容易にします。
原理
read_car.py は、VASPの CHGCAR ファイルの標準的な構造とフォーマットに基づいてデータを解析します。
CHGCARファイルのフォーマット:
CHGCAR ファイルは以下の順序で情報が記述されています。
タイトル: 任意の文字列。
スケール因子: 単位格子ベクトルをスケーリングするための浮動小数点数。
格子ベクトル: 3行にわたる3つのベクトル(各行に3つの浮動小数点数)で、単位格子の基底を定義します。これらは通常、スケール因子によってスケーリングされます。
原子種: 含まれる原子種のリスト(スペース区切りの文字列)。
原子数: 上記の原子種に対応する各原子種の原子数(スペース区切りの整数)。
座標の種類: 原子座標が "Direct"(分数座標)または "Cartesian"(直交座標)であるかを示す文字列。
原子座標: 合計原子数(各原子種の原子数の合計)分の行。各行に3つの浮動小数点数で原子の座標が記述されます。
グリッド分割数: 空行またはコメント行の後に、電荷密度グリッドの分割数 \(N_x, N_y, N_z\) が1行にスペース区切りで記述されます。
電荷密度データ: 連続する行に、合計 \(N_x \times N_y \times N_z\) 個の電荷密度値が浮動小数点数としてスペース区切りで記述されます。VASPはこれらのデータをFortran順で出力します。
データ読み込みと構造化:
プログラムは
with open(filename, 'r') as f:を用いてファイルをオープンし、f.readline().strip()やl.split()などの標準的なファイルI/O操作と文字列操作で各行から必要な情報を抽出します。抽出された構造情報は、Pythonの辞書
infoに格納されます。例えば、格子ベクトルはnp.array(lattice)を使ってNumPy配列に変換され、info['lattice']に格納されます。電荷密度データは、まず一次元リスト
dataとして読み込まれます。その後、
numpyライブラリのnp.array(data).reshape((nx, ny, nz), order='F')を使用して、一次元のデータリストを3次元のNumPy配列に変換します。ここでorder='F'は非常に重要で、VASPの出力がFortran順(すなわち、最初のインデックスが最も速く変化する)であることを正確に処理するために指定されます。最終的に、このNumPy配列はPythonのネストされたリスト
Pに変換されます。これにより、NumPyライブラリに依存しない形でP[ix][iy][iz]のように電荷密度データにアクセスできるようになります。
必要な非標準ライブラリとインストール方法
このプログラムは、数値計算を効率的に行うために numpy ライブラリを使用しています。
NumPy: Pythonで高性能な数値計算を行うための基本的なパッケージです。多次元配列オブジェクトや、それらを操作するためのツールを提供します。
インストール方法:
NumPyがシステムにインストールされていない場合、以下の pip コマンドでインストールできます。
pip install numpy
必要な入力ファイル
プログラムはデフォルトで CHGCAR という名前のファイルを読み込みます。
ファイル名:
CHGCAR形式: VASPで生成される標準的なテキスト形式の
CHGCARファイル。データ構造: 前述の「原理」セクションで説明した
CHGCARファイルのフォーマットに従っている必要があります。具体的な例としては、以下のような構造が期待されます。(タイトル行) (スケール因子) (格子ベクトル1) (格子ベクトル2) (格子ベクトル3) (原子種リスト) (各原子種の原子数リスト) (座標の種類 "Direct" または "Cartesian") (原子1の座標) ... (原子Nの座標) (グリッド分割数 Nx Ny Nz) (電荷密度データ (Nx*Ny*Nz個の浮動小数点数))
グリッド分割数の行の前に、空行またはコメント行が一つ以上挿入される場合があります。
生成される出力ファイル
このプログラムは、いかなるファイル出力も生成しません。すべての結果は標準出力(コンソール)に表示されます。
コマンドラインでの使用例 (Usage)
read_car.py は、スクリプト内部で入力ファイル名を 'CHGCAR' に固定しているため、コマンドライン引数でファイル名を指定することはできません。プログラムを実行するには、単純にPythonインタープリタを使ってスクリプトを呼び出します。
python read_car.py
コマンドラインでの具体的な使用例
ここでは、架空の CHGCAR ファイルを想定し、その実行例と結果を説明します。
仮定する CHGCAR ファイルの内容
プログラムが実行されるディレクトリに、以下の内容を持つ CHGCAR という名前のファイルが存在すると仮定します。
My Custom VASP CHGCAR Calculation
1.0
12.00000000 0.00000000 0.00000000
0.00000000 12.00000000 0.00000000
0.00000000 0.00000000 12.00000000
Cu O
1 1
Cartesian
6.00000000 6.00000000 6.00000000
1.00000000 1.00000000 1.00000000
4 4 4
0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010 0.011 0.012 0.013 0.014 0.015 0.016
0.017 0.018 0.019 0.020 0.021 0.022 0.023 0.024 0.025 0.026 0.027 0.028 0.029 0.030 0.031 0.032
0.033 0.034 0.035 0.036 0.037 0.038 0.039 0.040 0.041 0.042 0.043 0.044 0.045 0.046 0.047 0.048
0.049 0.050 0.051 0.052 0.053 0.054 0.055 0.056 0.057 0.058 0.059 0.060 0.061 0.062 0.063 0.064
実行コマンド
上記の CHGCAR ファイルが存在するディレクトリで、以下のコマンドを実行します。
python read_car.py
実行結果の説明
このコマンドを実行すると、プログラムは CHGCAR ファイルを読み込み、main 関数内で指定された情報を標準出力に出力します。具体的には、ファイルのタイトル、電荷密度グリッドの分割数、およびグリッド点 \( (i_x=0, i_y=0, i_z=0) \) における電荷密度値が表示されます。
上記の仮定する CHGCAR ファイルに対しては、以下の出力が得られます。
My Custom VASP CHGCAR Calculation
(4, 4, 4)
0.001
ここで、0.001 は CHGCAR ファイル内の電荷密度データシーケンスの最初の値であり、グリッドの最初の点 \( (0,0,0) \) に対応します。