ALPS 2.1 Tutorials:DMRG-04 Correlations/ja
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
Contents
相関関数
多体物理における最も重要な相関関数は、のような
と
の2つの相関についてです。近距離の相関はエネルギーを決め、長距離のものは相関長を決めます。
Another Go At The Energy Per Bond
すでに説明したように、スピン-1/2とスピン-1鎖の結合あたりの定常状態エネルギーは次式で与えられます。
各結合で個別にエネルギーが与えられます。いくつかの並進不変性の物理的破壊にもかかわらず、全結合は一様で、同じエネルギーを持たなくてはならない、という点で熱力学的極限について興味深い現象です。
あきらかに、熱力学的極限の振る舞いに最も近い結合が鎖中心にあるものです。したがって、直接的アプローチとして、を計算し、
を固定し
を外挿します。
この計算をおこなう前に、あまり小さすぎない、
にて
に対して
のいくつかの値をプロットしてみてください。(プログラムのチェックとして、3つの値がどのような関係にあるか考えてみてください。)
スピン-1、スピン-1/2ではそれぞれどうでしたか?
スピン-1/2では、結合エネルギーは奇数と偶数の間で強く振動します。理由は、開放端自体が非常に強く臨界に起因する影響を受け、スピン-1/2鎖が2量化するからです。例えば、定常状態での並進対称の自発的な破壊によって2つめの周期に落ちるということです。すなわち、平均的なエネルギーを外挿することは有益であり、すぐに正確な計算値を得ることができるでしょう。様々な局所的な計算結果を詳細にみて考察してみてください。
スピン-スピン相関: スピン-1/2
比較的長い鎖() で、様々な
に対して
を計算してみてください。距離
での
をプロットしてみます。目的は、鎖中心の相関子について、可能な限り境界の効果を小さくするためです。他にも、同じサイト距離での、いくつかの相関子の平均をとる方法があります。べき法則となるので、log-logでプロットします。絶対値をとるか、または反強磁性係数
を掛けてください。
理解すべきことは、近距離でのべき乗則がありますが、長距離で指数関数的に減衰していることです。このことは2つの理由があります。(i)有限サイズの系ではべき則相関をカットオフしますが、ここでは大規模サイズを取り扱っていますので、あまり影響はありません。(ii)DMRGのアルゴリズム構造は、指数関数的に減衰するに至までの重ね合わせである相関を効果的に生成します。すなわち、長距離で、このような重ね合わせを用いてべき乗則を表現することが可能です。
パラメータファイルの使用
spin_one_halfはサンプル計算のパラメータファイルです。サイズはで、 複数の異なる状態
を並列実行させます。掃引回数は6回で、相関は対称であることを確認してください。
LATTICE="open chain lattice" MODEL="spin" CONSERVED_QUANTUMNUMBERS="N,Sz" Sz_total=0 SWEEPS=6 J=1 NUMBER_EIGENVALUES=1 MEASURE_AVERAGE[Magnetization]=Sz MEASURE_AVERAGE[Exchange]=exchange MEASURE_LOCAL[Local magnetization]=Sz MEASURE_CORRELATIONS[Diagonal spin correlations]=Sz MEASURE_CORRELATIONS[Offdiagonal spin correlations]="Splus:Sminus" L=32 { MAXSTATES=20 } { MAXSTATES=40 } { MAXSTATES=60 }
Pythonの使用
spin_one_half.pyスクリプトは異なる3タイプのを計算し、結果のロードをおこないます。
import pyalps import numpy as np import matplotlib.pyplot as plt import pyalps.plot
parms = [] for D in [20,40,60]: parms.append( { 'LATTICE' : 'open chain lattice', 'MODEL' : 'spin', 'CONSERVED_QUANTUMNUMBERS' : 'N,Sz', 'Sz_total' : 0, 'J' : 1, 'SWEEPS' : 6, 'NUMBER_EIGENVALUES' : 1, 'L' : 32, 'MAXSTATES' : D, 'MEASURE_AVERAGE[Magnetization]' : 'Sz', 'MEASURE_AVERAGE[Exchange]' : 'exchange', 'MEASURE_LOCAL[Local magnetization]' : 'Sz', 'MEASURE_CORRELATIONS[Diagonal spin correlations]' : 'Sz', 'MEASURE_CORRELATIONS[Offdiagonal spin correlations]' : 'Splus:Sminus' } )
input_file = pyalps.writeInputFiles('parm_spin_one_half',parms) res = pyalps.runApplication('dmrg',input_file,writexml=True)
data = pyalps.loadEigenstateMeasurements(pyalps.getResultFiles(prefix='parm_spin_one_half'))
Sz:Sz相関を抽出します。
curves = [] for run in data: for s in run: if s.props['observable'] == 'Diagonal spin correlations': d = pyalps.DataSet() d.props['observable'] = 'Sz correlations' d.props['label'] = 'D = '+str(s.props['MAXSTATES']) L = int(s.props['L']) d.x = np.arange(L) # sites with increasing distance l symmetric to the chain center site1 = np.array([int(-(l+1)/2.0) for l in range(0,L)]) + L/2 site2 = np.array([int( l /2.0) for l in range(0,L)]) + L/2 indices = L*site1 + site2 d.y = abs(s.y[0][indices]) curves.append(d)
対サイト距離でプロットします。
plt.figure() pyalps.plot.plot(curves) plt.xscale('log') plt.yscale('log') plt.legend() plt.title('Spin correlations in antiferromagnetic Heisenberg chain (S=1/2)') plt.ylabel('correlations $| \\langle S^z_{L/2-l/2} S^z_{L/2+l/2} \\rangle |$') plt.xlabel('distance $l$') plt.show()
Vistrailsの使用
dmrg-04-correlations.vtを使用します。ワークフローの"spin 1/2"ラベルを選択してください。
スピン-スピン相関: スピン-1
スピン-1鎖では、指数関数的に減衰することが予想されます。 DMRGの相関子の指数関数的特性がよく適合しなくてはなりません。再び、長鎖()を選択し、いくつかの
での
を計算してみましょう。
スピン-1/2の時と同様に、をプロットします。log-linプロットを用いて、負符号を排除します。指数関数的プロットになることが予想されます。
log-linプロットから、相関長を抽出します。(単調に増加し)に依存するでしょう。
になったとき収束しましたか?同じ状態数、局所的、純局所的な状態での磁化やエネルギーといった観測値などで、収束の比較をおこなってみてください。
実際、相関長の計算は、局所的な量よりも収束が困難です。それはDMRGは、局所的な量を最適に表現するためにアルゴリズムがより深耕された解析をおこなっているからです。
パラメータファイルの使用
コマンドでの実行用のパラメータファイルは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" Sz_total=0 SWEEPS=6 J=1 NUMBER_EIGENVALUES=1 MEASURE_AVERAGE[Magnetization]=Sz MEASURE_AVERAGE[Exchange]=exchange MEASURE_LOCAL[Local magnetization]=Sz MEASURE_CORRELATIONS[Diagonal spin correlations]=Sz MEASURE_CORRELATIONS[Offdiagonal spin correlations]="Splus:Sminus" { MAXSTATES=20 } { MAXSTATES=40 } { MAXSTATES=60 }
Pythonの使用
同様に、格子モデルに変更があります。Pythonスクリプトspin_one.pyです。
parms = [] L = 32 for D in [20,40,60]: parms.append( { 'LATTICE_LIBRARY' : 'my_lattices.xml', 'LATTICE' : 'open chain lattice with special edges '+str(L), 'MODEL' : 'spin', 'local_S0' : 0.5, 'local_S1' : 1, 'CONSERVED_QUANTUMNUMBERS' : 'N,Sz', 'Sz_total' : 0, 'J' : 1, 'SWEEPS' : 4, 'NUMBER_EIGENVALUES' : 1, 'MAXSTATES' : D, 'MEASURE_AVERAGE[Magnetization]' : 'Sz', 'MEASURE_AVERAGE[Exchange]' : 'exchange', 'MEASURE_LOCAL[Local magnetization]' : 'Sz', 'MEASURE_CORRELATIONS[Diagonal spin correlations]' : 'Sz', 'MEASURE_CORRELATIONS[Offdiagonal spin correlations]' : 'Splus:Sminus' } )
計算終了後、相関は以前と同じ手法にてプロット、抽出することができます。
Vistrailsの使用
Vistrailsのファイルdmrg-04-correlations.vtです。ワークフロー"spin 1"を開いてください。
Sometimes There Is A Way Out
スピン-1の特殊なケースで、相関長の計算で抜け穴があります。それは第一励起がバルク励起ではないという怪しい計算結果に関連しています。スピン-1鎖の良いモデルでは次のように与えられます。各スピン-1サイトに、2つのスピン-1/2を入れ、各サイトで2つのスピン-1/2の三重項状態からspin-1状態を構築します。それから、定常状態は、一重項状態によってneighbouringサイトで2つのスピン-1/2をリンクする状態によって近似します。
この構造は、開境界条件で、最初と最後のサイトはパートナーを持たず、2つの孤立なスピン-1/2を持つことになります。この2つのスピン-1/2は、小さなモデルに縮退している、4つの状態を形勢することができます。定常状態は4重縮退です。実際のスピン-1鎖では、この四重縮退(1つのトータルスピン0と3つのトータルスピン1)は2つのスピンがお互い完全に離れた状態にある熱力学的極限でのみ見られます。磁化のセクタ0と1にギャップが無かった理由はここにあります。第一バルク励起は磁化2を必要とします。
これに対処するために、どうすればいいか?最初のサイトの前、最後のサイトの後に、同じハミルトニアン結合をとり、1つのスピン-1/2を追加することです。2つの孤立スピンにリンクさせるということです。磁化のセクタ0、1のギャップを確認してみてください。
相関長を計算するために、次のようなテクニックを紹介します。1つだけスピン-1/2を添付する方法です。これは、定常状態は磁化セクタ+1/2や-1/2で二重に縮退することを意味します。そして、スピン-1/2が存在しない境界サイトで特徴付けられます。
鎖長と
で、定常状態の磁化を計算してみてください。(符号の振動を除去し)サイトに対して、log-linプロットし、相関長を抽出してみてください。どのようになりますか?