3.1. チュートリアル

H-waveを波数空間モード(UHFk)で実行するには、入力ファイルとして

  1. 環境設定入力ファイル

  2. 相互作用定義ファイル

を用意した後、プログラムを実行します。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