MateriApps
物質科学シミュレーションのポータルサイト

現在アプリ掲載数328件

お問合せ / アプリ掲載依頼
    • JP
    • EN
  • MateriApps について
  • レビュー募集
もっと詳しく探す
  • NEWS / 講習会・イベント
  • アプリ一覧
  • アプリ詳細検索
  • キーワード解説
  • レビュー
  • 事例
  • アプリコンシェルジュ
  • インストールしないでアプリを
    試せる「MateriApps LIVE!」

    詳細はこちら
  • MateriApps について
  • レビュー募集
  • プライバシーポリシー
  • お問合せ / アプリ掲載依頼
  • アプリ一覧
  • H-wave

H-wave

  • 公開度:3 ★★★
  • ドキュメント充実度:2 ★★☆

遍歴電子系を対象に非制限Hartree-Fock(UHF)近似および乱雑位相近似(RPA)を行うためのプログラム。UHF近似は、実空間だけでなく、並進対称性を利用した波数空間での解析にも対応している。一体・二体の相互作用を定義する入力ファイルはWannier90形式に基づいているため、Wannier90やRESPACKにより導出されたWannier90形式に従った第一原理有効ハミルトニアンを扱うこともできる。

H-waveによるHaldane模型のバンド計算
Last Update:2023/09/25
あなたはすでに投票済みです!

物性研高度化プロジェクト 学生メンバー

・はじめに

H-waveは遍歴電子系を非制限Hartree-Fock法によって近似する計算ライブラリです。実空間/波数空間の両方に対応しており、量子モンテカルロ法などと比べた時、(1)負符号問題が発生しない(2)計算コストが軽く大きいシステムサイズを取り扱うことができる、などの利点があります。ここでは、波数空間での一例としてHoneycomb Haldane模型のバンド計算を例にH-waveを紹介していきます。

・インストール

H-waveがお使いの環境にインストールするには以下のコマンドでできます。

git clone https://github.com/issp-center-dev/H-wave.git
cd ./H-wave
pip install .

・Honeycomb Haldane模型の計算

ここで扱うHoneycomb Haldane模型は以下の通りです。
\[ H = -\sum_{\langle i,j \rangle} c_{i}^{\dagger}c_{j} -\sum_{\langle\langle i,j \rangle\rangle}t_{2} e^{i\phi_{ij}}c_{i}^{\dagger}c_{j} \]
ここで\( \langle i,j \rangle \)は最隣接サイト、\( \langle\langle i,j \rangle\rangle\)は次近接のサイトまで添字で和を取っています。(以下の図を参照)

H-waveで上記なようなHaldane模型のハミルトニアンを入力するためには、お使いのエディタで例えば以下のようなファイルを用意します。

#########################################
(stan.in)
model = "Hubbard"
lattice = "honeycomb"
W = 18
L = 18
t = 1
t' = 0.0 ,-0.3333333333333333
U = 0.0

calcmode = "uhfk"
exportall = 0
EPS = 10
#########################################

ここで\( t,t’\)は\( t_{1}=1,t_{2}=1/3 ,\phi=pi/2 \)の最近接・次近接、サイトのTransferにそれぞれ対応しています。上記の入力ファイルを元にuhf_dry.out を以下のコマンドで実行します。

cd path_to_Hwave/docs/tutorial/Hubbard/UHFk
ln -s path_to_Stdface/build/src/uhf_dry.out .
./uhf_dry.out stan.in

しかしながら、HPhi/mVMCなどで使われている次近接サイトの定義に従うとサイトA to AとサイトB to BのTransferが逆方向になってしまい時間反転対称性を破る入力になりません。そこで相互作用定義ファイルtransfer.datを以下のように編集します。

(transfer.dat)
##########################################
Transfer in wannier90-like format for uhfk
2
9
1 1 1 1 1 1 1 1 1
-1 0 0 1 1 0.000000000000 0.333333333333
-1 0 0 1 2 -1.000000000000 0.000000000000
-1 0 0 2 2 0.000000000000 -0.333333333333
-1 1 0 1 1 0.000000000000 0.333333333333
-1 1 0 2 2 0.000000000000 -0.333333333333
0 -1 0 1 1 0.000000000000 0.333333333333
0 -1 0 1 2 -1.000000000000 0.000000000000
0 -1 0 2 2 0.000000000000 -0.333333333333
0 0 0 1 2 -1.000000000000 0.000000000000
0 0 0 2 1 -1.000000000000 0.000000000000
0 1 0 1 1 -0.000000000000 -0.333333333333
0 1 0 2 1 -1.000000000000 0.000000000000
0 1 0 2 2 -0.000000000000 0.333333333333
1 -1 0 1 1 -0.000000000000 -0.333333333333
1 -1 0 2 2 -0.000000000000 0.333333333333
1 0 0 1 1 -0.000000000000 -0.333333333333
1 0 0 2 1 -1.000000000000 0.000000000000
1 0 0 2 2 -0.000000000000 0.333333333333

####################################

続いて、ハニカム格子用の入力ファイル(input.toml)を用意します。

(input.toml)
######################
[log]
print_level = 1
print_step = 1

[mode]
mode = "UHFk"
#flag_fock = "true"

[mode.param]
Ncond = 81
IterationMax = 500
EPS = 10
Mix = 0.5
RndSeed = 123456789
T = 0.0
# ene_cutoff = 1.0e+2
# N.B. chain extends along y-axis by convention
CellShape = [ 18, 18, 1 ]
SubShape = [ 1, 1, 1 ]

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

[file.input.interaction]
  path_to_input = "./"
  Geometry = "geom.dat"
  Transfer = "transfer.dat"

[file.output]
  path_to_output = "output"
  energy = "energy.dat"
  eigen = "eigen.dat"
  green = "green.dat"

############################

以上でHaldane模型の入力は終了です。バンド計算に関しては、例えば、https://isspns-gitlab.issp.u-tokyo.ac.jp/hwave-dev/hwave-gallery/-/blob/main/samples/UHFk/band_plot/output_band.pyにサンプルファイルで実行することができます。

(output_band.py)
############################

import numpy as np
import tomli
import hwave.qlms
import matplotlib.pyplot as plt

#read toml file
with open("input.toml", "rb") as fp:
  toml_dict = tomli.load(fp)

#UHFk runs
hwave.qlms.run(input_dict=toml_dict)

#get eigenvalues
data = np.load("output/eigen.dat.npz")
eigenvalue = data["eigenvalue"]
wavevec_index   = data["wavevector_index"]
wavevec_unit    = data["wavevector_unit"]

#the total number of the eigen states
neigen = int(eigenvalue.shape[1])

#calc wavevectors from index & reciprocal lattice vectors
wavevec = np.dot(wavevec_index, wavevec_unit.T)/np.pi

#concatenate wavevector & eigenvalue
Ene_k = np.concatenate([wavevec, eigenvalue], axis=1)

#output wavenumber & eigenvalues to dat file
header_ = "# kx/pi  ky/pi  kz/pi  ene_spin0  ene_spin1"
np.savetxt("band.dat", Ene_k, header = header_)

# plot dispersion by matplotlib
size_list = np.linspace(100,10,neigen)
kmin = -1
kmax =  1
krange = np.linspace(kmin,kmax,100)

fig = plt.figure()


ax = fig.add_subplot(1, 1, 1, projection='3d')

[ax.scatter(wavevec[:, 0],wavevec[:, 1], eigenvalue[:,i]) for i in range(neigen)]

#[plt.scatter(wavevec[:, 1], eigenvalue[:,i], marker="o", s=size_list[i], label="H-wave: spin{}".format(i)) for i in range(neigen) ]

#plt.legend()

plt.xlabel("kx/pi")
plt.ylabel("ky/pi")
#
#plt.ylabel("E")
plt.savefig("band.png")
plt.show()
############################

上記のPythonファイルを実行してみると

python output_band.py

以下のようにバンドが開いており、例えば文献[1]を見るとquantum Hall effect phases 量子ホール効果相であると確認することができます。同様にトポロジカル絶縁体の代表的なBHZ模型のエッジモードなども面白いかもしれません。

[1] F. D. M. Haldane, “Model or a Quantum Hall Effect without Landau Levels: Condensed-Matter Realization of the “Parity Anomaly” Phys. Rev. Lett. 61, 2015, 1998

04 / 06

  • 01基本情報
  • 02事例・論文
  • 03講習会
  • 04レビュー
  • 05開発者の声
  • 06このアプリ情報に
    ついてのお問い合わせ
TOP

MateriApps
物質科学シミュレーションのポータルサイト

  • NEWS / 講習会・イベント
  • アプリ一覧
  • アプリ詳細検索
  • キーワード解説
  • 事例
  • アプリコンシェルジュ
  • プライバシーポリシー
お問合せ / アプリ掲載依頼
  • 東京大学 物性研究所 The Institute for Solid State Physics
  • 東京大学 The University of Tokyo
  • CDMSI
  • CCMS

© MateriApps, 2013-2025. All rights reserved.