関連ツール

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

以下のパッケージが必要です。

スクリプトの概要

XYZ形式で記載された構造ファイルのファイル名および、2次元的な周期構造を表すための格子ベクトルの情報などが記載された入力ファイルを読み込み、得られた座標データから、最下層と、その次の層にあたる原子の座標を抽出します。 最下層の原子は取り除き、対応する位置に H 原子を置いて次層の原子との距離を四面体構造となる距離(例えば、Siの場合はシラン分子となる距離)に調整したモデルを作成します。 水素終端を行ったモデルはXYZ形式で保存され、cifファイルとQuantum Espresso (QE)の入力ファイルも作成します。 なお、QEをインストールしている場合には、そのまま計算実行することもできます。

チュートリアル

  1. 参照用の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
  1. 次に各種パラメータを設定するための入力ファイルを作成します。

入力ファイルのファイル形式は 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 セクションで設定するパラメータを記載します。

  1. 以下のコマンドを実行します。

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のオンラインマニュアル を参考にしてください。