3.1. チュートリアル¶
H-waveを波数空間モード(UHFk)で実行するには、入力ファイルとして
環境設定入力ファイル
相互作用定義ファイル
を用意した後、プログラムを実行します。2.は RESPACK 等の外部プログラムの出力を利用する他、StdFaceライブラリを使って生成することもできます。
以下では、 docs/tutorial/Hubbard/UHFk
ディレクトリにあるサンプルを例にチュートリアルを実施します。
相互作用定義ファイルは StdFace ライブラリを用いて生成することもできます。詳細は StdFaceを用いた相互作用ファイルの作成 の章をご覧ください。
3.1.1. 環境設定入力ファイルの作成¶
環境設定入力ファイルには、基本パラメータの指定と入出力を制御する情報を記述します。
docs/tutorial/Hubbard/UHFk
ディレクトリ内に input.toml
というファイルがありますが、これが入力パラメータファイルになります。
以下、ファイルの内容を記載します。
[log]
print_level = 1
print_step = 10
[mode]
mode = "UHFk"
[mode.param]
# 2Sz = 0
Ncond = 16
IterationMax = 1000
EPS = 8
Mix = 0.5
RndSeed = 123456789
# ene_cutoff = 1.0e+2
T = 0.0
CellShape = [ 4, 4, 1 ]
SubShape = [ 2, 2, 1 ]
[file]
[file.input]
path_to_input = ""
# initial = "green_init.dat.npz"
[file.input.interaction]
path_to_input = "./"
Geometry = "geom.dat"
Transfer = "transfer.dat"
CoulombInter = "coulombinter.dat"
[file.output]
path_to_output = "output"
energy = "energy.dat"
eigen = "eigen"
green = "green"
このファイルはTOML形式で記述され、内容ごとにセクションに分類されています。
[log]
セクション¶
ログ出力に関する設定を行います。
print_level
で標準出力のレベル、 print_step
でログ出力を行う繰り返し間隔を指定します。
[mode]
セクション¶
実行モードに関する設定および基本パラメータの指定を行います。
mode
で実空間版(UHF
)または波数空間版(UHFk
)を選択します。
[mode.param]
サブセクションには計算実行時のパラメータを指定します。
[file]
セクション¶
[file.input]
サブセクションでは、入力ファイルを格納するディレクトリ path_to_input
および
初期配位データファイルのファイル名 initial
を指定します。指定がない場合は乱数を用いて初期化されます。
[file.input.interaction]
サブセクションには、幾何情報および相互作用定義を格納するファイルのファイル名を相互作用のタイプごとに列挙します。
[file.output]
サブセクションには、エネルギーなどの物理量を出力するファイル名 energy
、
ハミルトニアンの固有値・固有ベクトルを出力するファイル名 eigen
、一体グリーン関数を書き出す出力ファイル名 green
を指定します。
これらのキーワードがない場合にはその項目は出力されません。
詳細については ファイルフォーマット の章をご覧ください。
3.1.2. 相互作用定義ファイルの作成¶
Hamiltonianを構築するための格子の幾何情報および相互作用係数を格納したデータファイルを作成します。
項目とファイル名の対応付けは、入力パラメータファイルの [file.input.interaction]
セクションで行います。
Geometry
¶
格子の幾何情報を記述します。ファイル例を以下に示します。
1.000000000000 0.000000000000 0.000000000000
0.000000000000 1.000000000000 0.000000000000
0.000000000000 0.000000000000 1.000000000000
1
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
基本ベクトル(1〜3行目)、軌道の数(4行目)、各軌道のWannier center(5行目以降)を記載します。
Transfer
, CoulombIntra
, CoulombInter
, Hund
, etc¶
Transferに指定するファイルは、電子系のTransferに相当するHamiltonianの係数を格納します。 また、二体相互作用の係数は相互作用のタイプごとに係数を格納するファイルを指定します。
相互作用のタイプは、実空間版UHFの入力ファイル形式と対応して、CoulombItra, CoulombInter, Hund, Ising, Exchange, PairLift, PairHop が定義されています。
これらのファイルはWannier90(-like)形式で記述されます。以下に例を示します。
Transfer in wannier90-like format for uhfk
1
9
1 1 1 1 1 1 1 1 1
-1 0 0 1 1 -1.000000000000 -0.000000000000
0 -1 0 1 1 -1.000000000000 -0.000000000000
0 1 0 1 1 -1.000000000000 0.000000000000
1 0 0 1 1 -1.000000000000 0.000000000000
コメント行(1行目)、軌道の数(2行目)、並進ベクトルをすべて収める直方体内のセルの総数 nrpts
(3行目)、
縮重度 ( nrpts
個を1行あたり15個ずつ)、係数行列の要素を記載します。
行列要素の各行は、並進ベクトル \(r_x, r_y, r_z\) 、軌道のインデックス \(\alpha, \beta\) 、係数の値の実部・虚部です。
3.1.3. 計算の実行¶
全ての入力ファイルが準備できた後、プログラムを実行して計算を行います。
入力パラメータファイル(ここでは input.toml
)を引数とし、ターミナルからH-waveを実行します。
$ hwave input.toml
計算が開始されると以下のようなログが出力されます。
2022-12-02 13:48:11,641 INFO qlms: Read definitions from files
2022-12-02 13:48:11,641 INFO qlms.read_input: QLMSkInput: read Gemoetry from ./geom.dat
2022-12-02 13:48:11,641 INFO qlms.read_input: QLMSkInput: read interaction Transfer from ./transfer.dat
2022-12-02 13:48:11,641 INFO qlms.read_input: QLMSkInput: read interaction CoulombInter from ./coulombinter.dat
2022-12-02 13:48:11,641 INFO qlms: Get Hamiltonian information
2022-12-02 13:48:11,641 INFO qlms: Get Green function information
2022-12-02 13:48:11,667 INFO qlms.uhfk: Show parameters
2022-12-02 13:48:11,668 INFO qlms.uhfk: Cell Shape = (4, 4, 1)
2022-12-02 13:48:11,668 INFO qlms.uhfk: Sub Shape = (2, 2, 1)
2022-12-02 13:48:11,668 INFO qlms.uhfk: Block = (2, 2, 1)
2022-12-02 13:48:11,668 INFO qlms.uhfk: Block volume = 4
2022-12-02 13:48:11,668 INFO qlms.uhfk: Num orbit = 1
2022-12-02 13:48:11,668 INFO qlms.uhfk: Num orbit eff = 4
2022-12-02 13:48:11,668 INFO qlms.uhfk: nspin = 2
2022-12-02 13:48:11,668 INFO qlms.uhfk: nd = 8
2022-12-02 13:48:11,668 INFO qlms.uhfk: Ncond = 16
2022-12-02 13:48:11,669 INFO qlms.uhfk: T = 0.0
2022-12-02 13:48:11,669 INFO qlms.uhfk: E_cutoff = 100.0
2022-12-02 13:48:11,669 INFO qlms.uhfk: Mix = 0.5
2022-12-02 13:48:11,669 INFO qlms.uhfk: RndSeed = 123456789
2022-12-02 13:48:11,669 INFO qlms.uhfk: IterationMax = 1000
2022-12-02 13:48:11,669 INFO qlms.uhfk: EPS = 1e-08
2022-12-02 13:48:11,669 INFO qlms.uhfk: strict_hermite = False
2022-12-02 13:48:11,669 INFO qlms.uhfk: hermite_tol = 1e-08
2022-12-02 13:48:11,669 INFO qlms: Start UHF calculation
2022-12-02 13:48:11,670 INFO qlms.uhfk: Start UHFk calculations
2022-12-02 13:48:11,670 INFO qlms.uhfk: step, rest, energy, NCond, Sz
2022-12-02 13:48:11,671 INFO qlms.uhfk: initialize green function with random numbers
2022-12-02 13:48:11,673 INFO qlms.uhfk: 0, 0.015588886, -139.86928, 16, 1.732e-14
2022-12-02 13:48:11,684 INFO qlms.uhfk: 10, 0.00043101981, 91.751578, 16, -1.029e-11
2022-12-02 13:48:11,690 INFO qlms.uhfk: 20, 0.00097917933, 92.129093, 16, -0.0001693
2022-12-02 13:48:11,694 INFO qlms.uhfk: 30, 0.0002328601, -0.49699902, 16, -2.492e-09
2022-12-02 13:48:11,697 INFO qlms.uhfk: 40, 8.9087396e-07, -2.2626401, 16, -2.354e-14
2022-12-02 13:48:11,699 INFO qlms.uhfk: UHFk calculation succeeded: rest=9.905239155412216e-09, eps=1e-08.
2022-12-02 13:48:11,699 INFO qlms: Save calculation results.
2022-12-02 13:48:11,699 INFO qlms.uhfk: save_results: save energy in file output/energy.dat
2022-12-02 13:48:11,699 INFO qlms.uhfk: save_results: save eigenvalues and eigenvectors in file output/eigen.dat
2022-12-02 13:48:11,699 INFO qlms.uhfk: save_results: save green function to file output/green.dat
2022-12-02 13:48:11,700 INFO qlms: All procedures are finished.
--------------------------------------------------------------------------------
Statistics
function : total elapsed : average elapsed : ncalls
--------------------------------------------------------------------------------
hwave.solver.uhfk._init_param : 0.004 msec : 0.004 msec : 1
hwave.solver.uhfk._init_lattice : 0.004 msec : 0.004 msec : 1
hwave.solver.uhfk._init_orbit : 0.001 msec : 0.001 msec : 1
hwave.solver.uhfk._check_interaction : 0.176 msec : 0.176 msec : 1
hwave.solver.uhfk._reshape_geometry : 23.000 msec : 23.000 msec : 1
hwave.solver.uhfk._reshape_interaction : 0.222 msec : 0.111 msec : 2
hwave.solver.uhfk._init_interaction : 23.313 msec : 23.313 msec : 1
hwave.solver.uhfk._show_param : 2.149 msec : 2.149 msec : 1
hwave.solver.uhfk.__init__ : 28.129 msec : 28.129 msec : 1
hwave.solver.uhfk._make_ham_trans : 0.501 msec : 0.501 msec : 1
hwave.solver.uhfk._make_ham_inter : 0.414 msec : 0.414 msec : 1
hwave.solver.uhfk._reshape_green : 0.202 msec : 0.202 msec : 1
hwave.solver.uhfk._initial_green : 0.494 msec : 0.494 msec : 1
hwave.solver.uhfk._make_ham : 6.999 msec : 0.143 msec : 49
hwave.solver.uhfk._diag : 3.533 msec : 0.072 msec : 49
hwave.solver.uhfk._green : 8.698 msec : 0.178 msec : 49
hwave.solver.uhfk._calc_energy : 3.960 msec : 0.081 msec : 49
hwave.solver.uhfk._calc_phys : 3.559 msec : 0.073 msec : 49
hwave.solver.uhfk.solve : 29.349 msec : 29.349 msec : 1
hwave.solver.uhfk._deflate_green : 0.035 msec : 0.035 msec : 1
hwave.solver.uhfk._save_green : 0.202 msec : 0.202 msec : 1
hwave.solver.uhfk.save_results : 0.559 msec : 0.559 msec : 1
--------------------------------------------------------------------------------
入力ファイル読み込みに関するログが出力されたあと、波数空間UHF計算の計算過程に関する情報が出力されます。
出力ファイルは input.toml
の [file.output]
セクションの指定に従い、
output
ディレクトリに energy.dat
, eigen.npz
, green.npz
ファイルが出力されます。
出力ファイルの詳細については ファイルフォーマット の章をご覧ください。
3.1.4. 状態密度の計算 (hwave_dos
)¶
ポストツール hwave_dos
を用いることで、状態密度を計算することができます。
ブリルアンゾーン積分を精度良く計算するために libtetrabz を利用しています。 pip
を利用してインストールしてください。
$ python3 -m pip install libtetrabz
hwave_dos
は、 hwave
で利用した入力パラメータファイルを引数として受け取ります
$ hwave_dos input.toml
hwave_dos
は、 hwave
と同様に [file.output]
セクションの指定に従い、
output
ディレクトリに dos.dat
ファイルを出力します。
ファイル名は --output
オプションで変更することができます。
$ hwave_dos input.toml --output dos.dat
状態密度を計算するエネルギーの範囲は --ene-window
オプションで指定します。
省略した場合は、 hwave
で得られたエネルギーの最小値と最大値を \(E_\text{min}\), \(E_\text{max}\) として、 \([E_\text{min}-0.2, E_\text{max}+0.2]\) で計算されます。
エネルギーの点数は --ene-num
オプションで指定します(デフォルトは101)
$ hwave_dos input.toml --ene-window -10.0 5.0 --ene-num 201
--plot
オプションを指定すると、状態密度をプロットします。 matplotlib
が必要です。
$ hwave_dos input.toml --plot dos.png