コンテンツにスキップ

MC-04 測定

エネルギーや磁化のような熱力学的平均値だけでなく、QMC シミュレーションでは空間相関関数とそのフーリエ変換も測定できます。 このチュートリアルでは、小さな正方格子上の S=1/2S = 1/2 ハイゼンベルク模型に対して、有向ループ SSE コードを用いてこれらの測定を実演します。

スピン–スピン相関関数 C(r)=⟨S0zSrz⟩C(\mathbf{r}) = \langle S^z_0 S^z_\mathbf{r} \rangle は、r\mathbf{r} だけ離れた 2 つのサイトにおけるスピンの向きがどれだけ相関しているかを表します。 低温の反強磁性ハイゼンベルク模型では、相関は距離とともに符号を交互に変え、ネール秩序へ向かう傾向を反映します。 構造因子 S(q)=∑reiq⋅rC(r)S(\mathbf{q}) = \sum_\mathbf{r} e^{i\mathbf{q}\cdot\mathbf{r}} C(\mathbf{r}) は相関関数のフーリエ変換であり、反強磁性波数 q=(π,π)\mathbf{q} = (\pi, \pi) でピークを持ちます。

2 次元ハイゼンベルク正方格子

4×44 \times 4 の正方格子上の S=1/2S = 1/2 ハイゼンベルク模型を、温度 T=0.3T = 0.3、スピン回転対称性をわずかに破るための小さな磁場 h=0.1h = 0.1 のもとでシミュレートします。 システムサイズが小さいためシミュレーションは高速ですが、このスケールでは有限サイズ効果が顕著です。

コマンドライン

パラメータファイル parm4 は、標準的なパラメータに加えて 3 つの測定フラグを有効にします。

MODEL="spin"
LATTICE="square lattice"
local_S=1/2
MEASURE[Correlations]=true
MEASURE[Structure Factor]=true
MEASURE[Green Function]=true
THERMALIZATION=10000
SWEEPS=500000
J=1
L=4
W=4
T=0.3
{h=0.1;}

MEASURE[Correlations] はすべてのサイト対について ⟨SizSjz⟩\langle S^z_i S^z_j \rangle を記録します。 MEASURE[Structure Factor] は格子と整合するすべての波数における S(q)S(\mathbf{q}) を記録します。 MEASURE[Green Function] は虚時間(単一サイト)グリーン関数 G(τ)=⟨Siz(τ) Siz(0)⟩G(\tau) = \langle S^z_i(\tau)\,S^z_i(0)\rangle を記録します。これは長い τ\tau で G(τ)∼e−ΔτG(\tau)\sim e^{-\Delta\tau} のように減衰し、解析接続によってスペクトル情報を得ることができます。

変換して実行します。

parameter2xml parm4
dirloop_sse --Tmin 10 --write-xml parm4.in.xml

--Tmin 10 はチェックポイント間隔を 10 秒に設定します。--write-xml は XML 出力ファイルを書き出し、pyalps は HDF5 の結果と併せてこれを読み込めます。

Python

スクリプト tutorial4.py:

import pyalps

parms = [{
    'LATTICE'                   : "square lattice",
    'MODEL'                     : "spin",
    'MEASURE[Correlations]'     : True,
    'MEASURE[Structure Factor]' : True,
    'MEASURE[Green Function]'   : True,
    'local_S'                   : 0.5,
    'T'                         : 0.3,
    'J'                         : 1,
    'THERMALIZATION'            : 10000,
    'SWEEPS'                    : 500000,
    'L'                         : 4,
    'W'                         : 4,
    'h'                         : 0.1
}]

input_file = pyalps.writeInputFiles('parm4', parms)
pyalps.runApplication('dirloop_sse', input_file, Tmin=10)

結果の評価

出力ファイルからすべての測定結果を読み込み、表示します。

import pyalps

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm4'))

for s in pyalps.flatten(data):
    if len(s.x) == 1:
        print(s.props['observable'], ':', s.y[0])
    else:
        for (x, y) in zip(s.x, s.y):
            print(s.props['observable'], x, ':', y)

スカラー量(エネルギー、磁化、帯磁率)は 1 行で表示されます。 ベクトル量(相関関数、構造因子、グリーン関数)は 1 エントリごとに 1 行で表示され、その添字——サイト対、波数、あるいは虚時間の点——が値とともに示されます。

スピン–スピン相関のプロット

相関関数を可視化するには、Sz Correlations の測定量を読み込んでプロットします。

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm4'), 'Sz Correlations')
correlations = pyalps.collectXY(data, x='d', y='Sz Correlations')

plt.figure()
pyalps.plot.plot(correlations)
plt.xlabel('Distance $r$')
plt.ylabel('$\\langle S^z_0 S^z_r \\rangle$')
plt.title('Spin correlations, $4\\times 4$ Heisenberg model')
plt.show()

相関は距離とともに符号を交互に変え、最近接の値は負(反強磁性的)で、その大きさは rr とともに減少するはずです。

構造因子のプロット

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm4'), 'Sz Structure Factor')
structure_factor = pyalps.collectXY(data, x='q', y='Sz Structure Factor')

plt.figure()
pyalps.plot.plot(structure_factor)
plt.xlabel('Wavevector $q$')
plt.ylabel('$S^z(q)$')
plt.title('Structure factor, $4\\times 4$ Heisenberg model')
plt.show()

最大値は反強磁性波数 q=(π,π)\mathbf{q} = (\pi, \pi) に現れるはずで、これはネール秩序の交互に並んだスピン配列に対応します。

問題

  • 構造因子が最大になるのはどの波数でしょうか。これはどのようなスピン相関のパターンに対応しますか。
  • 相関 ⟨S0zSrz⟩\langle S^z_0 S^z_r \rangle は距離 rr とともにどのように減衰しますか。4×44 \times 4 格子全体にわたって有意なままでしょうか。
  • より低い温度、たとえば T=0.1T = 0.1 でシミュレーションを繰り返してください。相関と構造因子はどう変わりますか。
  • システムサイズを L=8L = 8 に増やしてください。構造因子のピークは LL に対してどのようにスケールしますか。このことは有限温度における長距離秩序の有無について何を示しますか。
  • グリーン関数 G(τ)G(\tau) の物理的な意味は何でしょうか。系の動的な情報を得るために、これをどのように使えるでしょうか。