Difference between revisions of "ALPS 2 Tutorials:ED-05 ED Phase Transition/ja"

From ALPS
Jump to: navigation, search
(第2近接結合を持つハイゼンベルグ鎖: CFT assignments)
(第2近接相互作用を持つハイゼンベルグ鎖の臨界点)
Line 5: Line 5:
 
= 第2近接相互作用を持つハイゼンベルグ鎖の臨界点 =
 
= 第2近接相互作用を持つハイゼンベルグ鎖の臨界点 =
  
<!--In this tutorial, we will follow up on the the last part of the ED-04 tutorial, where the Heisenberg chain was considered. We will add a next-nearest neighbour coupling term <math>J_1 \sum_{\langle \langle i,j \rangle \rangle} S_i \cdot S_j</math> to the Hamiltonian.-->
 
 
このチュートリアルでは、ハイゼンベルグ鎖について前回のED-04の補足をおこないます。ハミルトニアンに第2近接結合項<math>J_1 \sum_{\langle \langle i,j \rangle \rangle} S_i \cdot S_j</math>を加えてみましょう。
 
このチュートリアルでは、ハイゼンベルグ鎖について前回のED-04の補足をおこないます。ハミルトニアンに第2近接結合項<math>J_1 \sum_{\langle \langle i,j \rangle \rangle} S_i \cdot S_j</math>を加えてみましょう。
  
<!--In the limit of <math>J_2 = 0</math>, this model reduces to the critical Heisenberg chain, which is solvable by Bethe ansatz. At <math>J_2/J_1=0.5</math>, the model is also solvable [http://link.aip.org/link/JMAPAQ/v10/i8/p1388/s1], [http://link.aip.org/link/JMAPAQ/v10/i8/p1399/s1]. The ground state turns out to be<br>
+
<math>J_2 = 0</math>の極限では、このモデルはBethe仮説によって、ハイゼンベルグ鎖の臨界点まで減少します。 <math>J_2/J_1=0.5</math>でも, [http://link.aip.org/link/JMAPAQ/v10/i8/p1388/s1][http://link.aip.org/link/JMAPAQ/v10/i8/p1399/s1]によって解くことが可能です。基底状態は、<br>
<math>|\Psi\rangle = \left(|\uparrow\rangle_1 |\downarrow\rangle_2 - |\downarrow\rangle_1 |\uparrow\rangle_2\right) (|\uparrow\rangle_3 |\downarrow\rangle_4 - |\downarrow\rangle_3 |\uparrow\rangle_4) (|\uparrow\rangle_5 |\downarrow\rangle_6 - |\downarrow\rangle_5 |\uparrow\rangle_6)</math>-->
+
<math>|\Psi\rangle = \left(|\uparrow\rangle_1 |\downarrow\rangle_2 - |\downarrow\rangle_1 |\uparrow\rangle_2\right) (|\uparrow\rangle_3 |\downarrow\rangle_4 - |\downarrow\rangle_3 |\uparrow\rangle_4) (|\uparrow\rangle_5 |\downarrow\rangle_6 - |\downarrow\rangle_5 |\uparrow\rangle_6)</math>になります。
  
<math>J_2 = 0</math>の極限では、Bethe仮説によって,このモデルはハイゼンベルグ鎖の臨界点まで減少します。 <math>J_2/J_1=0.5</math>でも,このモデルは [http://link.aip.org/link/JMAPAQ/v10/i8/p1388/s1]や[http://link.aip.org/link/JMAPAQ/v10/i8/p1399/s1]によって解くことが可能です。基底状態は、<br>
 
<math>|\Psi\rangle = \left(|\uparrow\rangle_1 |\downarrow\rangle_2 - |\downarrow\rangle_1 |\uparrow\rangle_2\right) (|\uparrow\rangle_3 |\downarrow\rangle_4 - |\downarrow\rangle_3 |\uparrow\rangle_4) (|\uparrow\rangle_5 |\downarrow\rangle_6 - |\downarrow\rangle_5 |\uparrow\rangle_6)</math>
 
になります。
 
 
<!--This is of course indication of a phase transition at some intermediate <math>J_1/J_2 \in (0,1/2)</math>. (insert references from http://pre.aps.org/pdf/PRE/v76/i6/e061108 once APS website works again)-->
 
 
これらのことは、<math>J_1/J_2 \in (0,1/2)</math>での相転移の過程を示しています。(http://pre.aps.org/pdf/PRE/v76/i6/e061108を参照してください。)
 
これらのことは、<math>J_1/J_2 \in (0,1/2)</math>での相転移の過程を示しています。(http://pre.aps.org/pdf/PRE/v76/i6/e061108を参照してください。)
 
<!--In the first part of this tutorial, we will locate the position of the critical point by looking at how the spectrum, in particular the gap in different symmetry sectors, changes as we tune the couplings. In the second part, we will revisit the CFT content of the critical chain. Analytically, it can be shown that the model at criticality is described by the same CFT as the Heisenberg chain, but the of the marginal operator which lead to the logarithmically vanishing finite-size corrections is zero and therefore the scaling dimensions can be found much more accurately.-->
 
  
 
最初のチュートリアルでは、スペクトル(特に異なる対称セクタでのギャップ)が結合を調整することによってどのように変化するか観察し臨界点を特定します。二番目は、臨界鎖のCFTを取り上げます。解析的に、臨界点モデルはハイゼンベルグ鎖として同じCFTによって記述されます。しかし、数値的に有限サイズの補正の損失となる周辺演算子のweightは0になります。したがって、スケーリングの次元はより正確になります。
 
最初のチュートリアルでは、スペクトル(特に異なる対称セクタでのギャップ)が結合を調整することによってどのように変化するか観察し臨界点を特定します。二番目は、臨界鎖のCFTを取り上げます。解析的に、臨界点モデルはハイゼンベルグ鎖として同じCFTによって記述されます。しかし、数値的に有限サイズの補正の損失となる周辺演算子のweightは0になります。したがって、スケーリングの次元はより正確になります。
  
<!--So first, let us plot the energy of the ground state and the first excited state as well as the gap in the singlet (<math>S_z = 0</math>) and triplet (<math>S_z=1</math>) sector.-->
 
 
そこで、基底状態のエネルギーと一重項励起(<math>S_z = 0</math>)、3重項 (<math>S_z=1</math>)セクタを図示してみましょう。
 
そこで、基底状態のエネルギーと一重項励起(<math>S_z = 0</math>)、3重項 (<math>S_z=1</math>)セクタを図示してみましょう。
  

Revision as of 03:23, 16 March 2012


第2近接相互作用を持つハイゼンベルグ鎖の臨界点

このチュートリアルでは、ハイゼンベルグ鎖について前回のED-04の補足をおこないます。ハミルトニアンに第2近接結合項J_1 \sum_{\langle \langle i,j \rangle \rangle} S_i \cdot S_jを加えてみましょう。

J_2 = 0の極限では、このモデルはBethe仮説によって、ハイゼンベルグ鎖の臨界点まで減少します。 J_2/J_1=0.5でも, [1][2]によって解くことが可能です。基底状態は、
|\Psi\rangle = \left(|\uparrow\rangle_1 |\downarrow\rangle_2 - |\downarrow\rangle_1 |\uparrow\rangle_2\right) (|\uparrow\rangle_3 |\downarrow\rangle_4 - |\downarrow\rangle_3 |\uparrow\rangle_4) (|\uparrow\rangle_5 |\downarrow\rangle_6 - |\downarrow\rangle_5 |\uparrow\rangle_6)になります。

これらのことは、J_1/J_2 \in (0,1/2)での相転移の過程を示しています。(http://pre.aps.org/pdf/PRE/v76/i6/e061108を参照してください。)

最初のチュートリアルでは、スペクトル(特に異なる対称セクタでのギャップ)が結合を調整することによってどのように変化するか観察し臨界点を特定します。二番目は、臨界鎖のCFTを取り上げます。解析的に、臨界点モデルはハイゼンベルグ鎖として同じCFTによって記述されます。しかし、数値的に有限サイズの補正の損失となる周辺演算子のweightは0になります。したがって、スケーリングの次元はより正確になります。

そこで、基底状態のエネルギーと一重項励起(S_z = 0)、3重項 (S_z=1)セクタを図示してみましょう。

Pythonでの実行

次の手順に計算を開始します。

import pyalps
import pyalps.pyplot
from pyalps.dict_intersect import dict_intersect
import numpy as np
import matplotlib.pyplot as plt
import copy
import math

量子数QUNATUMNUMBERを S_zとし、セクタS_z=0,1でシミュレーションをおこないます。小さいサイズでも影響が観察できるので、系のサイズはL=6,8で十分です。

prefix = 'alps-nnn-heisenberg'
parms = []
for L in [6,8]:
    for Szt in [0,1]:
      for J1 in np.linspace(0,0.5,6):
          parms.append({
              'LATTICE'              : "nnn chain lattice",
              'MODEL'                : "spin",
              'local_S'              : 0.5,
              'J'                    : 1,
              'NUMBER_EIGENVALUES'   : 2,
              'CONSERVED_QUANTUMNUMBER' : 'Sz',
              'Sz_total'             : Szt,
              'J1'                   : J1,
              'L'                    : L
          })

input_file = pyalps.writeInputFiles(prefix,parms)
res = pyalps.runApplication('sparsediag', input_file)
# res = pyalps.runApplication('sparsediag', input_file, MPI=4)
data = pyalps.loadEigenstateMeasurements(pyalps.getResultFiles(prefix=prefix))

データ解析は以前のチュートリアルのものより少し複雑です。特に、階層的なデータセットに依存しています。物理現象を理解するために、基底状態と第一励起状態のみ見れば十分でしょう。もしあなたがギャップの計算に混乱しているのならば、あまり考えすぎないでください。

最初に、J1、L、Sz_totalのセットに対してエネルギーを結合します。パラメータJ1,L,Sz_totalをグループ化します。groupedループの各要素は、異なる運動量でのデータセットリストを持つことになります。dict_intersectは単にdictionariesのリストを得て、それに当てはまるパートを返します。また、yをソートするインデックスリストを得るためにnumpyのargsort関数を使用しています。


grouped = pyalps.groupSets(pyalps.flatten(data), ['J1', 'L', 'Sz_total'])
nd = []
for group in grouped:
    ally = []
    allx = []
    for q in group:
        ally += list(q.y)
        allx += list(q.x)
    r = pyalps.DataSet()
    sel = np.argsort(ally)
    r.y = np.array(ally)[sel]
    r.x = np.array(allx)[sel]
    r.props = dict_intersect([q.props for q in group])
    nd.append( r )
data = nd


次に、S_z=0セクタからS_z=1で起こる状態を取り出す必要があります。各グループが異なる2つのSz_totalセクターのスペクトルを含むようなJ1、Lによってグループ化します。 subtract_spectrum関数を使用し、データセットから要素を削除します。削除する要素は引数で指定します。

grouped = pyalps.groupSets(pyalps.flatten(data), ['J1', 'L'])
nd = []
for group in grouped:
    if group[0].props['Sz_total'] == 0:
        s0 = group[0]
        s1 = group[1]
    else:
        s0 = group[1]
        s1 = group[0]
    s0 = pyalps.subtract_spectrum(s0, s1)
    nd.append(s0)
    nd.append(s1)
data = nd

そして、基底状態('gs')、第一励起('fe')のエネルギーを含むデータセットのリストを生成します。これを元にcollectXY関数を用いて、gs,feエネルギーと各Lの結合の図を生成することができます。

sector_E = []
grouped = pyalps.groupSets(pyalps.flatten(data), ['Sz_total', 'J1', 'L'])
for group in grouped:
    allE = []
    for q in group:
        allE += list(q.y)
    allE = np.sort(allE)
    
    d = pyalps.DataSet()
    d.props = dict_intersect([q.props for q in group])
    d.x = np.array([0])
    d.y = np.array([allE[0]])
    d.props['which'] = 'gs'
    sector_E.append(d)
    
    d2 = copy.deepcopy(d)
    d2.y = np.array([allE[1]])
    d2.props['which'] = 'fe'
    sector_E.append(d2)

sector_energies = pyalps.collectXY(sector_E, 'J1', 'Energy', ['Sz_total', 'which', 'L'])
plt.figure()
pyalps.pyplot.plot(sector_energies)
plt.xlabel('$J_1/J$')
plt.ylabel('$E_0$')
plt.legend(prop={'size':8})

最後に、一重項、三重項ギャップの計算をおこないます。最もエネルギーの低い状態と(a)一重項状態の第一励起(S_z=0)、(b)三重項(S_z=1)の最も低い状態とのエネルギー差で定義されます。

grouped = pyalps.groupSets( pyalps.groupSets(pyalps.flatten(data), ['J1', 'L']), ['Sz_total'])

gaps = []
for J1g in grouped:
    totalmin = 1000
    for q in flatten(J1g):
        totalmin = min(totalmin, np.min(q.y))
    
    for Szg in J1g:
        allE = []
        for q in Szg:
            allE += list(q.y)
        allE = np.sort(allE)
        d = pyalps.DataSet()
        d.props = pyalps.dict_intersect([q.props for q in Szg])
        d.props['observable'] = 'gap'
        print totalmin,d.props['Sz_total']
        if d.props['Sz_total'] == 0:
            d.y = np.array([allE[1]-totalmin])
        else:
            d.y = np.array([allE[0]-totalmin])
        d.x = np.array([0])
        d.props['line'] = '.-'
        gaps.append(d)

gaps = pyalps.collectXY(gaps, 'J1', 'gap', ['Sz_total', 'L'])

plt.figure()
pyalps.pyplot.plot(gaps)
plt.xlabel('$J_1/J$')
plt.ylabel('$\Delta$')
plt.legend(prop={'size':8})

plt.show()

VisTrails、コマンドラインでの実行

hereはVisTrails用のファイルです。コマンドライン実行用のパラメータファイルはhereです。

第2近接結合を持つハイゼンベルグ鎖: CFT assignments

有限サイズの補正はJ1-J2の臨界点を調整することによって小さくすることが可能です。異なる結合にもかかわらず、このモデルは同じ臨界場での連続体理論を持ち、この極限値にてスケーリング次元を得ることができます。これらのことの詳細な議論は、I Affleck et al 1989 J. Phys. A: Math. Gen. 22 511を参照してください。

上記の計算で得られた結果を比較してみてください。期待されるスケーリング次元は簡単に理解でき、系を大きくするとより収束が早くなることが分かるでしょう。

Pythonでの実行

次の手順に計算を開始します。

parms_ = {
    'LATTICE'              : "nnn chain lattice",
    'MODEL'                : "spin",
    'local_S'              : 0.5,
    'J'                    : 1,
    'J1'                   : 0.25,
    'NUMBER_EIGENVALUES'   : 5,
    'CONSERVED_QUANTUMNUMBER' : 'Sz',
    'Sz_total' : 0
}
prefix = 'nnn-heisenberg'
parms = []
for L in [10,12]:
    parms_.update({'L':L})
    parms.append(copy.deepcopy(parms_))


実行スクリプトはED-04のものとよく似ています。こちら[3]を参照してください。

VisTrails,コマンドラインでの実行

hereはVisTrails用のファイルです。コマンドライン実行用のパラメータファイルはhereです。