Difference between revisions of "ALPS 2 Tutorials:MC-08 Quantum Phase Transition/ja"

From ALPS
Jump to: navigation, search
(corrected some translations.)
m
Line 211: Line 211:
 
のように変更してシミュレーションを実行し、プロットしてみてください。pythonでの実行は[http://alps.comp-phys.org/static/tutorials2.1.0/mc-08-quantum-phase-transition/tutorial8c.py tutorial8c.py]を参照してください。[http://prb.aps.org/abstract/PRB/v79/i1/e014410 Wenzel and Janke, Phys. Rev. B 79, 014410 (2009)]の結果と得られた結果を比較してみてください。
 
のように変更してシミュレーションを実行し、プロットしてみてください。pythonでの実行は[http://alps.comp-phys.org/static/tutorials2.1.0/mc-08-quantum-phase-transition/tutorial8c.py tutorial8c.py]を参照してください。[http://prb.aps.org/abstract/PRB/v79/i1/e014410 Wenzel and Janke, Phys. Rev. B 79, 014410 (2009)]の結果と得られた結果を比較してみてください。
  
= Vistrails での実行 =
+
= Vistrailsでの実行 =
  
 
Vistrailsでの実行は、[http://alps.comp-phys.org/static/tutorials2.1.0/mc-08-quantum-phase-transition/mc-08-quantum-phase-transition.vt mc-08-quantum-phase-transition.vt]を参照してください。
 
Vistrailsでの実行は、[http://alps.comp-phys.org/static/tutorials2.1.0/mc-08-quantum-phase-transition/mc-08-quantum-phase-transition.vt mc-08-quantum-phase-transition.vt]を参照してください。

Revision as of 13:29, 22 August 2012


このチュートリアルでは、量子スピンモデルでの量子臨界点を検出する方法を学習します。ここで対象とするモデルは梯子状に二量体化した正方格子量子ハイゼンベルグモデルです。つまり、足にJ_0の結合と横木にJ_1結合を持つ梯子がJ_2の強さで結合したものです。記号が少し異なりますが、Wenzel and Janke, Phys. Rev. B 79, 014410 (2009)のFig.1を参照してください。このチュートリアルでは、J_0=J_1=1とし、梯子間結合J_2を変化させる場合を考えます。二次元のハイゼンベルグモデルでは有限温度で相転移が存在しない(Mermin-Wangerの定理)にもかかわらず、T=0では異なる基底状態間の相転移が起きえます。

CoupledLadder.jpg

相の同定

まず最初に、2つのシンプルな極限、分離している梯子(J_2=0)と等方的な正方格子(J_2=1)を考えます。分離した梯子は短距離相関をもつ基底状態を持っており、有限のスピンギャップを示します。これはスピン液体相です。一方、正方格子では、有限のスタッガード磁化をもつ長距離秩序が現れます。これは反強磁性ネール相です。 このような異なった2つの相を区別するシンプルな方法は、帯磁率\chiを見ることです。この2つの異なったケースについて以下の温度を用いて8x8のシミュレーションをおこなってみましょう。梯子極限( J_2=0)と等方極限( J_2=1)との両方で帯磁率をプロットし、比較してください。分離した梯子では、スピンギャップの存在により低い温度で帯磁率が0から立ち上がる挙動を示します。しかし、正方格子では、帯磁率は低いTで有限にとどまります。有限系では、常に有限サイズ由来のスピンギャップが存在するため、\chiは小さいけれど有限のTでゼロになることに注意してください。これらのチュートリアルはファイルparm8aで実行することができます。

parameter2xml parm8a
loop parm8a.in.xml


またはPythonスクリプトを使用して、tutorial8a.py

import pyalps
import matplotlib.pyplot as plt
import pyalps.pyplot
import numpy as np
import pyalps.fit_wrapper as fw
from math import sqrt

#prepare the input parameters
parms = []
for j2 in [0.,1.]:
    for t in [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]:
        parms.append(
            { 
              'LATTICE'        : "coupled ladders", 
              'LATTICE_LIBRARY': 'lattices.xml',
              'MODEL_LIBRARY'  : 'models.xml',
              'local_S'        : 0.5,
              'ALGORITHM'      : 'loop',
              'SEED'           : 0,
              'T'              : t,
              'J0'             : 1 ,
              'J1'             : 1,
              'J2'             : j2,
              'THERMALIZATION' : 5000,
              'SWEEPS'         : 50000, 
              'MODEL'          : "spin",
              'L'              : 8,
              'W'              : 4
            }
    )

#write the input file and run the simulation
input_file = pyalps.writeInputFiles('parm8a',parms)
pyalps.runApplication('loop',input_file) 


J_2=0では、スピンギャップの値は、次の式(Phys. Rev. B 50, 13515 (1994)の中で導出されます)\chi=A/\sqrt{T}\exp(-\Delta/T)を使用して、帯磁率の有限温度の振る舞いによって、推定することができます。Aとスピンギャップ \Deltaはフィッティングパラメータです。T\leq1の範囲でフィッティングを行い、スピンギャップの値を見積もってください。(Phys. Rev. Lett. 73, 886 (1994) or Phys. Rev. Lett. 77, 1865 (1996))のような文献の値と比較してみてください。 pythonでの解析のサンプルを示します。


lines = []
for data in susc1:
    pars = [fw.Parameter(1), fw.Parameter(1)]
    data.y= data.y[data.x < 1]
    data.x= data.x[data.x < 1]
    f = lambda self, x, pars: (pars[0]()/np.sqrt(x))*np.exp(-pars[1]()/x)
    fw.fit(None, f, pars, [v.mean for v in data.y], data.x)
    prefactor = pars[0].get()
    gap = pars[1].get()
    print prefactor,gap
    
    lines += plt.plot(data.x, f(None, data.x, pars))
    lines[-1].set_label('$J_2=%.4s$: $\chi = \\frac{%.4s}{T}\exp(\\frac{-%.4s}{T})$' % (data.props['J2'], prefactor,gap))

相転移点を見つける

J_2=0J_2=1との2点が異なる相にあるとわかったならば、この2つの相を分離する転移点が少なくとも1つ存在する必要があります。結合定数 J_2 \in [0.2,0.4] 、システムサイズL=8,10,12,16、逆温度\beta=2.Lの条件でシミュレーションをおこないます。パラメータファイルはparm8bです。また、pythonスクリプトはtutorial8b.pyです。

import pyalps
import matplotlib.pyplot as plt
import pyalps.pyplot
import numpy as np

#prepare the input parameters
parms = []
for l in [8,10,12,16]:
    for j2 in [0.2,0.25,0.3,0.35,0.4]:
        parms.append(
            { 
              'LATTICE'        : "coupled ladders", 
              'LATTICE_LIBRARY': 'lattices.xml',
              'MODEL_LIBRARY'  : 'models.xml',
              'local_S'        : 0.5,
              'ALGORITHM'      : 'loop',
              'SEED'           : 0,
              'BETA'           : 2*l,
              'J0'             : 1 ,
              'J1'             : 1,
              'J2'             : j2,
              'THERMALIZATION' : 5000,
              'SWEEPS'         : 50000, 
              'MODEL'          : "spin",
              'L'              : l,
              'W'              : l/2
            }
    )

#write the input file and run the simulation
input_file = pyalps.writeInputFiles('parm8a',parms)
pyalps.runApplication('loop',input_file)


スタッガード磁化、Binder キュムラント、スピン剛性

古典モンテカルロのチュートリアルのように、反強磁性相の秩序変数であるスタッガード磁化m_sのBinder キュムラントU_4=<m_s^4> /<m_s^2>^2の分析によって転移点を特定します。このチュートリアルでのモデルではBinder キュムラントの交点は大きな有限サイズ効果を示すので、有限サイズ効果のより小さいスピン剛性(Wenzel and Janke, Phys. Rev. B 79, 014410 (2009))を考えます。この物理量はw_x,w_yを世界線の空間x,y方向に沿った巻き付き数として、\rho_s = \frac{3}{4\beta} <w_x^2 + w_y^2>で与えられます。この量は量子臨界点で\rho_s \propto L^{d-2-z}とスケールします。dは系の次元、zは動的臨界指数です。z=1の時、\rho_sLは、異なるシステムサイズに対し臨界点で交差しています。Binder キュムラントとスピン剛性が交差するという事実は、相転移が一次転移ではなく連続転移であることを示していることに注意してください。

次のスクリプトを使用して観測量の読み込み、プロットができます。

data = pyalps.loadMeasurements(pyalps.getResultFiles(pattern='parm8a.task*.out.h5'),['Binder Ratio of Staggered Magnetization','Stiffness'])
binder=pyalps.collectXY(data,x='J2',y='Binder Ratio of Staggered Magnetization', foreach=['L'])
stiffness =pyalps.collectXY(data,x='J2',y='Stiffness', foreach=['L'])

for q in stiffness:
    q.y = q.y*q.props['L']

#make plot    
plt.figure()
pyalps.pyplot.plot(stiffness)
plt.xlabel(r'$J2$')
plt.ylabel(r'Stiffness $\rho_s L$')
plt.title('coupled ladders')

plt.figure()
pyalps.pyplot.plot(binder)
plt.xlabel(r'$J_2$')
plt.ylabel(r'$g(m_s)$')
plt.title('coupled ladders')
plt.show()

量子臨界点はどこにありますか?

有限温度効果

このシミュレーションが温度ゼロでおこなわれず、逆温度\beta=T^{-1}=2Lの有限値でおこなわれたことに気づきましたか?得られた結果(特に、量子臨界点の推定値)に、有限温度効果が現れていないことを確認する必要があります。このためのブルートフォースながら単純な確認方法は、温度を下げ、同じシミュレーションをおこなうことです。結果が影響を受けていなかったら、結果は同じ値に収束するでしょう。\beta=2L\beta=4Lと修正して、剛性とバインダーキュムラントが影響を受けるかどうか確認してみましょう。また\beta=L/4 でためしてみてください。結果はどうでしたか?

重要なポイントが2つあります。まず、計算時間はおおよそ\betaに比例していることが分かると思います。このことは、経路積分表示を用いたとすると、使用されたループアルゴリズムのスケーリングが臨界点であっても最適(実際、有限温度QMCアルゴリズムは空間時間体積 \beta.L^dより早くスケールできません)であることを意味します。

つぎに、なぜLに比例する逆温度\betaを選んだのでしょうか?実際には、時間と空間のスケールとの間のこの線形関係は、この量子相転移の動的臨界指数の値z=1に由来します。\rho_s.Lが交差することを見て、これをチェックしたことになっています。一般的には、zは必ずしも1とはならないため、(基底状態のサンプリングを行うためには)システムサイズと温度の正しいスケーリングをチェックする必要があります。

臨界指数の見積り

量子臨界点J_2^cのおおまかな見積りをおこないました。古典系と同様に、臨界指数の見積りには、より多くの計算と、特にJ_2^cのより正確な測定を必要とします。

これらを求めるために、より大きな系、より細かなJ_2^cで計算をおこないます。パラメータファイルはparm8dです。この計算にはかなりの時間がかかるので、(チュートリアルとは別の)練習問題とします。スタッガード磁化のBinder キュムラントU_4や、スピン剛性にシステムサイズをかけた \rho_s.Lを異なるシステムサイズについてプロットしてください。これらの曲線の交点は、J_2^cのより正確な見積りの助けとなるでしょう。相関長の臨界指数\nuを得るためには、J_2^cの正確な値を求め、これらの量のJ_2^cに関する導関数の有限サイズスケーリングを考えることが有用です。これらの微分値\frac{dU_4}{d J_2}L \frac{d\rho_s}{d J_2}は原理的にはモンテカルロの測定量として得られますが、このチュートリアルでは、細かいJ_2で計算しているため、数値微分で事足ります。

それぞれのシステムサイズに対してこの2つの量の数値微分をおこない、J_2^cでのそれらの値をシステムサイズの関数としてプロットしてみてください。データはべき乗則でスケール\frac{dU_4}{d J_2}(J_2^c) \propto L \frac{d\rho_s}{d J_2}(J_2^c) \propto L^{1/\nu}するはずです。 \nu の値はどうなりましたか?

-Exercise :古典系のように、スケーリング関数の重なり具合を見ることで臨界点や臨界指数の推定値のよさを視覚的に判断できます。U_4 \rho_s.Lのスケーリングの方法は、古典相転移のBinder キュムラントのときと同じです。

z\nu以外では、臨界指数\etaを次のように求めることが可能です。古典的と同じく、臨界点での帯磁率は\chi_s (J_2^c) \sim L^{2-\eta}のようにスケールします。この式において、秩序変数のゆらぎに関する帯磁率を考える必要があることに注意してください。すなわち、一様帯磁率\chiではなく、スタッガード帯磁率 \chi_sの有限サイズスケーリングです。システムサイズの関数として、J_2^cでの\chi_sをプロットしてください。\etaはどうなりますか?

このチュートリアルで調べた量子相転移は、3次元古典ハイゼンベルグモデルの有限温度での相転移のユニバーサリティクラスに属します。求めた臨界指数\nuPhys. Rev. B 65, 144520 (2002)とで述べられている値とを比較してみてください。

2番目の臨界点の推定

このモデルは、量子相転移はひとつではなく、より高いJ_2の値でも見つけることができ、そこでも同じ解析をおこなうことが出来ます。パラメータファイルの中の

for j2 in [0.2,0.25,0.3,0.35,0.4]:

という行を、

for j2 in [1.8,1.85,1.9,1.95,2.,2.05,2.1]:

のように変更してシミュレーションを実行し、プロットしてみてください。pythonでの実行はtutorial8c.pyを参照してください。Wenzel and Janke, Phys. Rev. B 79, 014410 (2009)の結果と得られた結果を比較してみてください。

Vistrailsでの実行

Vistrailsでの実行は、mc-08-quantum-phase-transition.vtを参照してください。