DMRG-05 Local Observables
特定のサイトに関連するオブザーバブルを局所オブザーバブルと呼びます。スピン鎖の場合、意味のある局所オブザーバブルは局所磁化 です。
スピン-1 鎖における励起
長さ 、 の鎖を取り、局所磁化 を計算します。磁化セクター 0、1、2 の基底状態についてサイト の関数としてプロットします。
得られるのは、セクター 0 では本質的に平坦な曲線、セクター 1 では磁化が本質的に鎖端に集中、セクター 2 では磁化が鎖端とバルクの両方に存在するというものです。これは、開放鎖の第一励起が境界励起であり、閉じた系では存在しないことを意味します。そして開放鎖の第二励起は、境界励起プラスバルク励起であり、これが私たちの関心対象です。今のところ理由は不明ですが、したがって第一バルク励起エネルギーはセクター 1 と 2 を比較することで抽出しなければなりません。
この話の教訓は、この局所オブザーバブルを見ることで、スピン-1 鎖における境界励起とバルク励起を区別できるということです。
パラメータファイルを使う場合
次のパラメータファイル spin_one は三つの個別の実行を設定します。各スピンセクターに一つずつです(前と同様に、説明のため小さいシステムと状態数を使用します):
LATTICE_LIBRARY="my_lattices.xml"
LATTICE="open chain lattice with special edges 32"
MODEL="spin"
local_S0=0.5
local_S1=1
CONSERVED_QUANTUMNUMBERS="N,Sz"
J=1
NUMBER_EIGENVALUES=1
SWEEPS=4
MEASURE_LOCAL[Local magnetization]=Sz
MAXSTATES=40
{ Sz_total=0 }
{ Sz_total=1 }
{ Sz_total=2 }
通常のコマンド列を使って変換と実行を行います:
parameter2xml spin_one
dmrg --write-xml spin_one.in.xml
Python を使う場合
スクリプト spin_one.py は三つのスピンセクターそれぞれで一つのシミュレーションを実行します:
import pyalps
import numpy as np
import matplotlib.pyplot as plt
import pyalps.plot
parms = []
for sz in [0,1,2]:
parms.append( {
'LATTICE_LIBRARY' : 'my_lattices.xml',
'LATTICE' : 'open chain lattice with special edges 32',
'MODEL' : "spin",
'local_S0' : '0.5',
'local_S1' : '1',
'CONSERVED_QUANTUMNUMBERS' : 'N,Sz',
'Sz_total' : sz,
'J' : 1,
'SWEEPS' : 4,
'NUMBER_EIGENVALUES' : 1,
'MAXSTATES' : 40,
'MEASURE_LOCAL[Local magnetization]' : 'Sz'
} )
input_file = pyalps.writeInputFiles('parm_spin_one',parms)
res = pyalps.runApplication('dmrg',input_file,writexml=True)
データファイルを読み込んだ後、局所磁化の結果を抽出できます:
data = pyalps.loadEigenstateMeasurements(pyalps.getResultFiles(prefix='parm_spin_one'))
curves = []
for run in data:
for s in run:
if s.props['observable'] == 'Local magnetization':
sz = s.props['Sz_total']
s.props['label'] = '$S_z = ' + str(sz) + '$'
s.y = s.y.flatten()
curves.append(s)
そしてプロットします:
plt.figure()
pyalps.plot.plot(curves)
plt.legend()
plt.title('Magnetization of antiferromagnetic Heisenberg chain (S=1)')
plt.ylabel('local magnetization')
plt.xlabel('site')
plt.show()
スピン-1/2 鎖における磁化
最低の磁化セクターでのスピン-1/2 鎖について同様の計算を繰り返します。
パラメータファイルを使う場合
次のパラメータファイルでこのタスクを達成できます。こちらからダウンロードできます:
LATTICE="open chain lattice"
MODEL="spin"
CONSERVED_QUANTUMNUMBERS="N,Sz"
SWEEPS=4
J=1
NUMBER_EIGENVALUES=1
MEASURE_LOCAL[Local magnetization]=Sz
L=32
MAXSTATES=40
{ Sz_total=0 }
{ Sz_total=1 }
{ Sz_total=2 }
parameter2xml spin_one_half
dmrg --write-xml spin_one_half.in.xml
Python を使う場合
パラメータの変更を除いて、スクリプト spin_one_half.py は上で説明した spin_one スクリプトと同じです。
まとめ
局所磁化プロファイルは、開放スピン-1 鎖における境界励起とバルク励起をきれいに分離します。だからこそ DMRG-04 で研究した物理的に関連する(バルク)ギャップは、0 と 1 ではなく磁化セクター 1 と 2 の間から読み取らなければなりません。
問題
- 最低の磁化セクターにおけるスピン-1/2 鎖の局所磁化計算を繰り返すと、上のスピン-1 の場合と比較して何が観察されますか?