関連ツール¶
py2dmat_neighborlist
¶
離散空間をモンテカルロ探索する場合に使用する近傍リスト定義ファイルを メッシュ定義ファイルから生成するツールです。
pip
でインストールした場合は py2dmat
と同様に bin
以下に py2dmat_neighborlist
という名前でインストールされます。
もしくは、ディレクトリ中の src/py2dmat_neighborlist.py
を直接実行することも可能です。
使い方¶
引数としてメッシュ定義ファイルを渡します。
生成される近傍リスト定義ファイルの名前は -o
オプションで指定可能です。
$ py2dmat_neighborlist -o neighborlist.txt MeshData.txt
もしくは
$ python3 src/py2dmat_neighborlist.py -o MeshData.txt
次のようなオプションが利用できます。
-o output
or--output output
出力ファイル名 (default:
neighborlist.txt
)
-u "unit1 unit2..."
or--unit "unit1 unit2"
各次元の長さスケール (default: すべて 1.0)
空間次元の数だけ値を空白区切りで並べ、全体を引用符でくくってください
各座標はあらかじめこれらの長さスケールで除算されます
-r radius
or--radius radius
近傍とみなされるユークリッド距離 (default: 1.0)
距離は
-u
で除されたあとの座標に対して計算されます
-q
or--quiet
進捗バーを表示しません
なお、進捗バーの表示には
tqdm
python パッケージが必要です
--allow-selfloop
自分自身を隣接リストに含めます(自己ループ)
--check-allpairs
すべての点対に対して距離を計算します
デバッグ用のオプションです
なお、 MPI を用いて計算を高速化できます。
tool/to_dft/to_dft.py
¶
本ツールでは、Si等四面体構造のボンドネットワークを有する系の(001)および(111)表面系モデルについて、その原子構造から第一原理電子状態計算ソフトウェア Quantum Espresso (QE) 用の入力データを作成します。これにより、得られた構造の妥当性検証や、電子状態等の微視的な情報を取得します。なお、注目する表面と反対の表面から生じるダングリングボンド由来の電子の影響を排除するため、最下層のダングリングボンドの位置に水素原子を置く水素終端というテクニックを用いています。
必要な環境¶
Python3 >= 3.6
以下のパッケージが必要です。
Atomic Simulation Environment(ASE) (>= 3.21.1)
Numpy
Scipy
Matplotlib
スクリプトの概要¶
XYZ形式で記載された構造ファイルのファイル名および、2次元的な周期構造を表すための格子ベクトルの情報などが記載された入力ファイルを読み込み、得られた座標データから、最下層と、その次の層にあたる原子の座標を抽出します。 最下層の原子は取り除き、対応する位置に H 原子を置いて次層の原子との距離を四面体構造となる距離(例えば、Siの場合はシラン分子となる距離)に調整したモデルを作成します。 水素終端を行ったモデルはXYZ形式で保存され、cifファイルとQuantum Espresso (QE)の入力ファイルも作成します。 なお、QEをインストールしている場合には、そのまま計算実行することもできます。
チュートリアル¶
参照用のXYZファイルを作成します。
以下では、 tool/todft/sample/111
フォルダにある surf_bulk_new111.xyz
を用います。ファイルの中身は以下の通りです。
12
surf.txt / bulk.txt
Si 1.219476 0.000000 4.264930
Si 6.459844 0.000000 4.987850
Si 1.800417 1.919830 3.404650
Si 5.878903 1.919830 3.404650
Si 3.839660 1.919830 2.155740
Si 0.000000 1.919830 1.900440
Si 3.839660 0.000000 0.743910
Si 0.000000 0.000000 0.597210
Si 1.919830 0.000000 -0.678750
Si 5.759490 0.000000 -0.678750
Si 1.919830 1.919830 -2.036250
Si 5.759490 1.919830 -2.036250
次に各種パラメータを設定するための入力ファイルを作成します。
入力ファイルのファイル形式は toml
を採用しています。以下、 tool/todft/sample/111
フォルダにある input.toml
を用いて、その内容について説明します。ファイルの中身は以下の通りです。
[Main]
input_xyz_file = "surf_bulk_new111.xyz"
output_file_head = "surf_bulk_new111_ext"
[Main.param]
z_margin = 0.001
slab_margin = 10.0
r_SiH = 1.48 #angstrom
theta = 109.5 #H-Si-H angle in degree
[Main.lattice]
unit_vec = [[7.67932, 0.00000, 0.00000], [0.00000, 3.83966, 0.00000]]
[ASE]
solver_name = "qe"
kpts = [3,3,1] # sampling k points (Monkhorst-Pack grid)
command = "mpirun -np 4 ./pw.x -in espresso.pwi > espresso.pwo"
[Solver]
[Solver.control]
calculation='bands' # 'scf','realx','bands',...
pseudo_dir='./' # Pseudopotential directory
[Solver.system]
ecutwfc = 20.0 # Cut-off energy in Ry
nbands=33 # # of bands (only used in band structure calc
[Solver.pseudo]
Si = 'Si.pbe-mt_fhi.UPF'
H = 'H.pbe-mt_fhi.UPF'
入力ファイルは、 Main
, ASE
, Solver
の3セクションから構成されます。
以下、各セクション毎に変数の説明を簡単に記載します。
Main
セクション¶
このセクションでは、水素終端を行う際に必要なパラメータに関する設定を行います。
input_xyz_file
形式: string型
説明:入力するxyzファイルの名前
output_file_head
形式: string型
説明:出力ファイル(xyzファイルおよびcifファイル)につくヘッダ
Main.Param
セクション¶
z_margin
形式: float型
説明: 最下層および下から2番目の原子を抽出する際に用いられるマージン。例えば、最下層にいる原子のz座標を
z_min
とした場合に、z_min - z_margin <= z <= z_min + z_margin
の中にいる原子が抽出されます。slab_margin
形式: float型
説明: スラブの大きさに下駄をはかせるためのマージン。最下層および一番上の層にいる原子のz座標を
z_min
,z_max
とした場合に、スラブの大きさはz_max-z_min+slab_margin
で与えられます。r_SiH
形式: float型
説明: 四面体構造の頂点(例えばSi)とH間の距離を与えます(単位は \(\mathrm{\mathring{A}}\) )。
theta
形式: float型
説明: 四面体構造の頂点とH間の角度(例えばSi-H-Siの間の角)を与えます。
Main.lattice
セクション¶
unit_vec
形式: list型
説明: 2次元平面を形成するユニットベクトル を指定します (ex.
unit_vec = [[7.67932, 0.00000, 0.00000], [0.00000, 3.83966, 0.00000]]
)。
ASE
セクション¶
このセクションでは、 ASE
に関連したパラメータを設定します。
solver_name
形式: string型
説明: ソルバーの名前を与えます。現状では
qe
のみ。kpts
形式: list型
説明: サンプリングするkポイントを指定します(Monkhorst-Pack grid)。
command
形式: string型
説明: ソルバーを実行するときのコマンドを記載します。
Solver
セクション¶
このセクションでは、 Solver
に関連したパラメータを設定します。
ASEの機能を用いてそのまま第一原理計算を実行する場合に指定が必要となります。
基本的には各ソルバーの入力ファイルで指定したものと同じ構成で記載します。
例えば、QEの場合には Solver.control
に、
QEの control
セクションで設定するパラメータを記載します。
以下のコマンドを実行します。
python3 to_dft.py input.toml
これを実行すると、
surf_bulk_new111_ext.xyz
surf_bulk_new111_ext.cif
espresso.pwi
が生成されます。QEおよび擬ポテンシャルへのパス設定が行われている場合には、第一原理計算がそのまま行われます。行われていない場合には、第一原理計算が実行されないため、 Calculation of get_potential_energy is not normally finished.
というメッセージが最後にでますが、上記ファイルの出力は行われています。
以下、出力ファイルについて説明します。
surf_bulk_new111_ext.xyz
最下層原子のHへの置換と四面体構造を形成するためのHの追加が行われた結果が出力されます。 実際の出力内容は以下の通りです。
14
Lattice="7.67932 0.0 0.0 0.0 3.83966 0.0 0.0 0.0 17.0241" Properties=species:S:1:pos:R:3 pbc="T T T"
Si 1.219476 0.000000 4.264930
Si 6.459844 0.000000 4.987850
Si 1.800417 1.919830 3.404650
Si 5.878903 1.919830 3.404650
Si 3.839660 1.919830 2.155740
Si 0.000000 1.919830 1.900440
Si 3.839660 0.000000 0.743910
Si 0.000000 0.000000 0.597210
Si 1.919830 0.000000 -0.678750
Si 5.759490 0.000000 -0.678750
H 1.919830 -1.208630 -1.532925
H 1.919830 1.208630 -1.532925
H 5.759490 -1.208630 -1.532925
H 5.759490 1.208630 -1.532925
このファイルは通常のXYZ形式の座標データとして適当な可視化ソフト等に読ませることができますが、通常コメントを書く場所に周期構造の格子ベクトルの情報が書き込まれています。出力されたファイルの3行目以降の「元素名+3次元座標」のデータをそのままQEの入力ファイルにコピーして使用する事もできます。
espresso.pwi
はQEのscf計算用の入力ファイルで、構造最適化やバンド計算は本ファイルを適宜修正することで行うことができます。 各種設定については QEのオンラインマニュアル を参考にしてください。