4.1. チュートリアル

H-waveを乱雑位相近似モード(RPA)で実行するには、入力ファイルとして

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

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

を用意した後、プログラムを実行します。 以下では、 docs/tutorial/Hubbard/RPA ディレクトリにあるサンプルを例にチュートリアルを実施します。 相互作用定義ファイルは StdFace ライブラリを用いて生成することもできます。詳細は StdFaceを用いた相互作用ファイルの作成 の章をご覧ください。

4.1.1. 環境設定入力ファイルの作成

環境設定入力ファイルには、基本パラメータの指定と入出力を制御する情報を記述します。 docs/tutorial/Hubbard/RPA ディレクトリ内に input.toml というファイルがありますが、これが入力パラメータファイルになります。 以下、ファイルの内容を記載します。

[log]
  print_level = 1

[mode]
  mode = "RPA"

[mode.param]
  T = 0.5
  # mu = 0.0
  CellShape = [32,32,1]
  SubShape = [1,1,1]
  nmat = 1024
  # Ncond = 1024
  filling = 0.5
  matsubara_frequency = "all"

[file]
[file.input]
  path_to_input = "input"
  # initial = "initial.dat"
  # chi0q_init = "chi0q.npz"

[file.input.interaction]
  path_to_input = "input"
  Geometry = "geom.dat"
  Transfer = "transfer.dat"
  CoulombIntra = "coulombintra.dat"
  CoulombInter = "coulombinter.dat"

[file.output]
  path_to_output = "output"
  chiq = "chiq"
  chi0q = "chi0q"

このファイルはTOML形式で記述され、内容ごとにセクションに分類されています。

[log] セクション

ログ出力に関する設定を行います。 print_level で標準出力のレベルを指定します。

[mode] セクション

実行モードに関する設定および基本パラメータの指定を行います。 mode で乱雑位相近似(RPA)を選択します。 [mode.param] サブセクションには計算実行時のパラメータを指定します。

[file] セクション

[file.input] サブセクションでは、入力ファイルを格納するディレクトリ path_to_input を指定します。 以前に計算した既約感受率 \(\chi_0(\vec{q})\) のデータを chi0q_init に指定したファイルから読み込んで感受率の計算を行うことができます。 [file.input.interaction] サブセクションには、幾何情報および相互作用定義を格納するファイルのファイル名を相互作用のタイプごとに列挙します。

[file.output] サブセクションには、 既約感受率 \(\chi_0(\vec{q})\) を出力するファイル名 chi0q 、 感受率 \(\chi(\vec{q})\) を出力するファイル名 chiq を指定します。 これらのキーワードがない場合にはその項目は出力されません。

詳細については ファイルフォーマット の章をご覧ください。

4.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   -1    0    1    1  0.500000000000  -0.000000000000
  -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    1    0    1    1  0.500000000000   0.000000000000

コメント行(1行目)、軌道の数(2行目)、 nrpts (3行目)、縮重度 ( nrpts 個を1行あたり15個ずつ)、係数行列の要素を記載します。 nrpts は、相互作用定義の並進ベクトルのx,y,z軸に沿った上限と下限から作られる直方体について、それに含まれるセルの総数です。

行列要素の各行は、並進ベクトル \(r_x, r_y, r_z\) 、軌道のインデックス \(\alpha, \beta\) 、係数の値の実部・虚部です。

4.1.3. 計算の実行

全ての入力ファイルが準備できた後、プログラムを実行して計算を行います。 入力パラメータファイル(ここでは input.toml )を引数とし、ターミナルからH-waveを実行します。

$ hwave input.toml

計算が開始されると以下のようなログが出力されます。

2023-03-07 18:55:44,682 INFO qlms: RPA mode
2023-03-07 18:55:44,682 INFO qlms: Read interaction definitions from files
2023-03-07 18:55:44,682 INFO qlms.read_input: QLMSkInput: read Gemoetry from input/geom.dat
2023-03-07 18:55:44,682 INFO qlms.read_input: QLMSkInput: read interaction Transfer from input/transfer.dat
2023-03-07 18:55:44,682 INFO qlms.read_input: QLMSkInput: read interaction CoulombIntra from input/coulombintra.dat
2023-03-07 18:55:44,682 INFO qlms.read_input: QLMSkInput: read interaction CoulombInter from input/coulombinter.dat
2023-03-07 18:55:44,682 INFO hwave.solver.rpa: Lattice parameters:
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     CellShape       = (32, 32, 1)
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     cell volume     = 1024
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     cell dimension  = 3
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     SubShape        = (1, 1, 1)
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     subshape volume = 1
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     Shape           = (32, 32, 1)
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     shape volume    = 1024
2023-03-07 18:55:44,682 INFO hwave.solver.rpa:     has_sublattice  = False
2023-03-07 18:55:44,683 INFO hwave.solver.rpa: RPA parameters:
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     norbit          = 1
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     nspin           = 2
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     nd              = 2
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     Nmat            = 1024
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     mu              = 0.0
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     T               = 0.5
2023-03-07 18:55:44,683 INFO hwave.solver.rpa:     E_cutoff        = 1.000000e+02
2023-03-07 18:55:44,683 INFO qlms: Start UHF calculation
2023-03-07 18:55:44,683 INFO hwave.solver.rpa: Start RPA calculations
2023-03-07 18:55:47,726 INFO hwave.solver.rpa: End RPA calculations
2023-03-07 18:55:47,726 INFO qlms: Save calculation results.
2023-03-07 18:55:47,726 INFO hwave.solver.rpa: Save RPA results
2023-03-07 18:55:47,925 INFO hwave.solver.rpa: save_results: save chiq in file output/chiq
2023-03-07 18:55:48,294 INFO hwave.solver.rpa: save_results: save chi0q in file output/chi0q
2023-03-07 18:55:48,294 INFO qlms: All procedures are finished.
--------------------------------------------------------------------------------
Statistics
  function                         :  total elapsed  : average elapsed : ncalls
--------------------------------------------------------------------------------
  hwave.solver.rpa.__init__        :      1.037 msec :      1.037 msec :      1
  hwave.solver.rpa.read_init       :      0.001 msec :      0.001 msec :      1
  hwave.solver.rpa._calc_epsilon_k :     22.587 msec :     22.587 msec :      1
  hwave.solver.rpa._calc_green     :    130.035 msec :    130.035 msec :      1
  hwave.solver.rpa._calc_chi0q     :   1886.201 msec :   1886.201 msec :      1
  hwave.solver.rpa._solve_rpa      :   1003.617 msec :   1003.617 msec :      1
  hwave.solver.rpa.solve           :   3042.926 msec :   3042.926 msec :      1
  hwave.solver.rpa.save_results    :    567.897 msec :    567.897 msec :      1
--------------------------------------------------------------------------------

入力ファイル読み込みに関するログが出力されたあと、乱雑位相近似計算の計算過程に関する情報が出力されます。 出力ファイルは input.toml[file.output] セクションの指定に従い、 output ディレクトリに chi0q.npz , chiq.npz ファイルが出力されます。

出力ファイルの詳細については ファイルフォーマット の章をご覧ください。

計算のポスト処理として、計算結果を可視化するためのツールが sample/RPA/view.py に用意されています。 このスクリプトファイルを現在のディレクトリにコピーし、ターミナルから以下を実行します。 このツールを実行するには matplotlib パッケージが必要です。

$ python3 view.py

output/chi0q.npzoutput/chiq.npz を読み込み、松原振動数 \({\rm i}\omega_m=0\) での電荷感受率 \(\chi_c(\vec{q})\) およびスピン感受率 \(\chi_s(\vec{q})\) の値を各 \(\vec{q}\) ごとに標準出力に書き出します。あわせて、これらの値を3Dプロットした以下の図を PNG 形式で出力します。

../../_images/chic.png

図 4.1 \(\chi_c(\vec{q})\)

../../_images/chis.png

図 4.2 \(\chi_s(\vec{q})\)