Difference between revisions of "ALPS 2 Tutorials:ED-04 Criticality/ja"

From ALPS
Jump to: navigation, search
(イジング鎖)
(brush up the translation)
 
(2 intermediate revisions by one other user not shown)
Line 3: Line 3:
  
 
<!--In this tutorial, we will look at critical spin chains and make a connection to their description in terms of 共形場の理論-->
 
<!--In this tutorial, we will look at critical spin chains and make a connection to their description in terms of 共形場の理論-->
このチュートリアルでは、臨界スピン鎖と共形場の理論について学びます。
+
このチュートリアルでは、臨界スピン鎖と共形場理論(CFT)について学びます。
  
 
= イジング鎖 =
 
= イジング鎖 =
  
 
<!--The first model we will consider is the critical Ising chain, given by the Hamiltonian-->
 
<!--The first model we will consider is the critical Ising chain, given by the Hamiltonian-->
まず最初に、次のハミルトニアンで与えられる臨界イジング鎖を例とします。
+
まず最初に、次のハミルトニアンで与えられる横磁場イジング鎖を例とします。
  
 
<math>H=J_{z} \sum_{\langle i,j \rangle} S^i_z S^j_z + \Gamma \sum_i S^i_x</math>
 
<math>H=J_{z} \sum_{\langle i,j \rangle} S^i_z S^j_z + \Gamma \sum_i S^i_x</math>
  
第一項は近接ペアの和です。<math>\Gamma</math>は横磁場を表しています。系は<math>\Gamma/J=\frac{1}{2}</math>で臨界となります。基底状態は<math>J>0</math>で反強磁性物質、<math>J < 0</math>で強磁性体となります。系は正確に解くことができます。([http://dx.doi.org/10.1016/0003-4916(70)90270-8 P. Pfeuty, Annals of Physics: 57, 79-90 (1970)]).
+
第一項の和は全ての最近接格子対にわたって取ります。<math>\Gamma</math>は横磁場の強さです。系は<math>\Gamma/J=\frac{1}{2}</math>で臨界となります。横磁場のない系の基底状態は<math>J>0</math>で反強磁性相、<math>J < 0</math>で強磁性相に属します。この系は厳密に解くことができます。([http://dx.doi.org/10.1016/0003-4916(70)90270-8 P. Pfeuty, Annals of Physics: 57, 79-90 (1970)]).
  
臨界点では、この系は共形場の理論によって説明されます(参照してください。[http://www-thphys.physics.ox.ac.uk/people/JohnCardy/lh2008.pdf this review by John Cardy])
+
臨界点では、この系は共形場理論によって記述されます([http://www-thphys.physics.ox.ac.uk/people/JohnCardy/lh2008.pdf review by John Cardy])
この場合、低位励起状態はCFT場として認識されます。このエネルギーはその演算子のスケーリングdimensionと呼ばれるものと関係があります。スケーリングdimensionの物理的意義は共形場理論の一定の相関関数の振る舞いを記述することです。たとえば、ある磁場(凖一磁場)の二点の相関は次のように表されます。
+
CFT では、低励起状態は場の演算子とみなされ、このエネルギーはその演算子のスケーリング次元と関係があります。物理的には、スケーリング次元は相関関数の振る舞いを記述します。たとえば、ある演算子(準プライマリ場)の二点相関は次のように表されます。
 
<br>
 
<br>
 
<math>\langle \phi(r_1) \phi(r_2) \rangle \sim |r_1 - r_2|^{-2\Delta}.</math>
 
<math>\langle \phi(r_1) \phi(r_2) \rangle \sim |r_1 - r_2|^{-2\Delta}.</math>
 
<br>
 
<br>
上記の式では、Δはその場のスケーリングの次元を表します。一次場と呼ばれる最も低いグループで発生します。また、次元のスケーリング<math>\Delta + n, n \in \lbrace 1, 2, 3, ... \rbrace</math>で表現されます。イジングモデル(上記論文では式(3.7))の厳密解では、長期rangle相関関係は、次のように減衰することが判明されています。 さらに、我々は、アイデンティティ演算子のスケーリング次元は0であることを期待しています。
+
上記の式では、<math>\Delta</math>はその場のスケーリング次元を表します。
 +
このスケーリング場はその次元によっていくつかのグループをなします。
 +
つまり、スケーリング次元<math>\Delta</math> を持つプライマリ場に、
 +
スケーリング次元
 +
<math>\Delta + n, n \in \lbrace 1, 2, 3, ... \rbrace</math>
 +
を持つ無数のセカンダリ場が付随したものです。
  
イジングモデルの厳密解(上記論文のEq. (3.7))では、長距離相関は次のように減衰します。<br>
+
横磁場イジングモデルの厳密解(上記論文のEq. (3.7))では、スピンの長距離相関は次のように減衰します。<br>
 
<math>\langle S^i_z S^{i+n}_z \rangle \sim n^{-2*1/8}</math><br>
 
<math>\langle S^i_z S^{i+n}_z \rangle \sim n^{-2*1/8}</math><br>
 
<math>\langle S^i_y S^{i+n}_y \rangle \sim n^{-2*(1+1/8)}</math><br>
 
<math>\langle S^i_y S^{i+n}_y \rangle \sim n^{-2*(1+1/8)}</math><br>
 
<math>\langle S^i_x S^{i+n}_x \rangle \sim n^{-2*1}</math><br>
 
<math>\langle S^i_x S^{i+n}_x \rangle \sim n^{-2*1}</math><br>
 
<!--Additionally, we expect the scaling dimension of the identity operator to be 0.-->
 
<!--Additionally, we expect the scaling dimension of the identity operator to be 0.-->
さらに、我々は、恒等演算子のスケーリング次元は0であることを予想します。
+
さらに、恒等演算子のスケーリング次元は0であるとします。
  
また、<math>0, 1/8, 1, 1+1/8</math>のスケーリングの次元がイジングモデルのCFTで現れることを予想しています。これらを確認するためにすべてのエネルギーを<math>E \rightarrow \frac{E-E_0}{(E_1-E_0)*1/8}</math>のように再スケーリングします。
+
この結果から、<math>0, 1/8, 1, 1+1/8</math>というスケーリング次元を持つ場がイジングモデルのCFTで現れることが期待されます。
 +
このことを見るために、すべてのエネルギーを<math>E \rightarrow \frac{E-E_0}{8(E_1-E_0)}</math>のようにリスケーリングします。
 +
そうすると、2つの低励起状態が、スケーリング次元として期待していた場所に現れます。
  
<!--これは、スケーリングの次元を予想してどこに2つの最低状態が発生するように強制され、我々は、スペクトルの残りの部分はこれと一致しているかどうか確認することができます。-->
 
<!--We therefore expect scaling dimensions of <math>0, 1/8, 1, 1+1/8</math> to appear in the CFT of the Ising model. To see this, we will rescale all energies of the spectrum according to <math>E \rightarrow \frac{E-E_0}{(E_1-E_0)*1/8}</math>. This will force the two lowest states to occur where we expect the scaling dimensions; we can then check whether the rest of the spectrum is consistent with this.-->
 
 
== Pythonでの実行 ==
 
== Pythonでの実行 ==
Pythonを使った計算の実行方法を記述したスクリプト[https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/ising.py]を使用します。スクリプトの最初の部分は計算モデルや、入力ファイルのインポートをおこないます。
+
Pythonを使った計算の実行方法を記述したスクリプト[https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/ising.py]を使用します。スクリプトの最初の部分は計算モデルや、入力ファイルのインポートをおこないます。
<!--Let us first go through the Python version of this tutorial. It can be found in [https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/ising.py]. We will first import some modules:-->
+
<!--Let us first go through the Python version of this tutorial. It can be found in [https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/ising.py]. We will first import some modules:-->
  
 
  import pyalps
 
  import pyalps
Line 68: Line 73:
  
 
<!--By uncommenting the second-last line and adapting the number of jobs and the name of your mpirun executable (which will default to <tt>mpirun</tt>), you could have ALPS use several CPUs simultaneously.-->
 
<!--By uncommenting the second-last line and adapting the number of jobs and the name of your mpirun executable (which will default to <tt>mpirun</tt>), you could have ALPS use several CPUs simultaneously.-->
最後から二番目のコメントアウトしてある行のコメントを外して、ジョブ数、MPIの設定(デフォルト<tt>mpirun</tt>)をおこなうと、複数のCPUを利用してALPSが実行されます。
+
ここで、コメントアウトしてある行のように、ジョブ数とMPI 実行ファイルの設定(デフォルトでは<tt>mpirun</tt> です)をおこなうと、複数のCPUを利用してALPSが実行されます。
  
 
<!--First, we will extract the lowest and first excited for each value of L and collect this into a dictionary:-->
 
<!--First, we will extract the lowest and first excited for each value of L and collect this into a dictionary:-->
 
+
計算が終わったら、まず、のちのリスケールのために各々のL に対して基底状態と第一励起状態のエネルギーを集めます。
 
  E0 = {}
 
  E0 = {}
 
  E1 = {}
 
  E1 = {}
Line 83: Line 88:
 
     E1[L] = allE[1]
 
     E1[L] = allE[1]
  
<!--The above code works since we know that ALPS will load the energies in lists grouped by the simulation - <tt>data</tt> is therefore a list of lists where we have different simulations at the top level and different momenta below.
+
<!--The above code works since we know that ALPS will load the energies in lists grouped by the simulation  
Now we rescale the energies according to the equation given above and collect the data as a function of momenta:-->
+
- <tt>data</tt> is therefore a list of lists where we have different simulations at the top level and different momenta below.-->
ALPSはシミュレーションによってグループ化されたリストのエネルギーをロードするので、上記のコードは正常に動作します。<tt>data</tt>はトップレベルと異なる運動量でのシミュレーション結果のリストです。上記の式に従ってエネルギーの再スケールと運動量の関数としてデータを収集します。
+
ALPSはシミュレーション(タスク)ごとにグループ化された結果をロードします:
 +
つまり、ここで<tt>data</tt>は「各システムサイズにおける、運動量とエネルギーの組のリスト」のリストです。
  
 +
次に、エネルギーを上述の式でリスケールして、運動量の関数となるように<tt>spectrum</tt> に集めます。
 
  for q in pyalps.flatten(data):
 
  for q in pyalps.flatten(data):
 
     L = q.props['L']
 
     L = q.props['L']
Line 93: Line 100:
  
 
<!--For comparison, let us also show the primary fields and their first few descendants:-->
 
<!--For comparison, let us also show the primary fields and their first few descendants:-->
比較から、最初の場とそのいくつかの派生をプロットします。
+
比較のために、プライマリ場<math>\Delta = 1/8, 1</math>とその最初のセカンダリ場もプロットします。
  
 
  for SD in [0.125, 1, 1+0.125, 2]:
 
  for SD in [0.125, 1, 1+0.125, 2]:
Line 111: Line 118:
  
 
== Vistrailsでの実行 ==
 
== Vistrailsでの実行 ==
<!--The Vistrails version of this tutorial is part of the file [https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/ed-04-criticality.vt].-->
+
<!--The Vistrails version of this tutorial is part of the file [https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/ed-04-criticality.vt].-->
Vistrailsを用いた計算の実行のチュートリアル[https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/ed-04-criticality.vt]を参照してください。
+
Vistrailsを用いた計算の実行のチュートリアル[https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/ed-04-criticality.vt]を参照してください。
  
 
== コマンドラインでの実行 ==
 
== コマンドラインでの実行 ==
コマンドラインでの実行に使用するパラメータファイルは、[https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/parm_ising here]を参照してください。
+
コマンドラインでの実行に使用するパラメータファイルは、[https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/parm_ising here]を参照してください。
  
 
= ハイゼンベルグ鎖 =
 
= ハイゼンベルグ鎖 =
 
<!--Now let us consider a more complicated example: the antiferromagnetic Heisenberg chain for spin-1/2 degrees of freedom, described by-->
 
<!--Now let us consider a more complicated example: the antiferromagnetic Heisenberg chain for spin-1/2 degrees of freedom, described by-->
より難しいサンプル計算を紹介します。スピン-1/2の自由度の反強磁性ハイゼンベルグ鎖についてです。次の式で表されます。
+
次に、もう少し複雑な模型を考えます。スピン1/2の反強磁性ハイゼンベルグ鎖です。ハミルトニアンは
  
 
<math>H = \sum_{\langle i,j \rangle} \mathbf{S}^i \cdot \mathbf{S}^j</math>
 
<math>H = \sum_{\langle i,j \rangle} \mathbf{S}^i \cdot \mathbf{S}^j</math>
 +
です。
 +
 +
<!--The critical theory for this model has a central charge c=1 with primary fields 0, 0.5 and 1. As opposed to the Ising model, finite-size corrections vanish only logarithmically and are therefore quite pronounced at the system sizes we reach. The [https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/heisenberg.py Python file] is analogous to the above description and will therefore not be described here in detail.
 +
The primary difference is that we can make use of the <math>U(1)</math> symmetry of the system; we also run the simulations only for the <math>S_z = 0</math> sector, since this contains all the relevant states.-->
 +
この模型の臨界現象は中心電荷 c=1 を持つCFT を用いて、スケーリング次元 0, 0.5, 1 を持つプライマリ場で表されます。
 +
イジング模型の場合と違って、有限サイズ効果は対数補正を与えます。
  
<!--The critical theory for this model has a central charge c=1 with primary fields 0, 0.5 and 1. As opposed to the Ising model, finite-size corrections vanish only logarithmically and are therefore quite pronounced at the system sizes we reach. The [https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/heisenberg.py Python file] is analogous to the above description and will therefore not be described here in detail. The primary difference is that we can make use of the <math>U(1)</math> symmetry of the system; we also run the simulations only for the <math>S_z = 0</math> sector, since this contains all the relevant states.-->
+
このモデルの臨界理論はprimary fields 0,0.5及び1においてcentral charge c=1を持ちます。イジングモデルとは反対に、有限サイズ補正は対数的に消えます。すなわち、このサイズでは明らかな結果となります。
このモデルの臨界理論はprimary fields 0,0.5及び1においてcentral charge c=1を持ちます。イジングモデルとは反対に、有限サイズ補正は対数的に消えます。すなわち、このサイズでは明らかな結果となります。[https://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/heisenberg.py Pythonファイル]は上記の記述とよく似ているので、ここでは詳細は省略します。異なる点は、この系の計算では<math>U(1)</math>対称性を利用することができ、これは関係する状態をすべて含んでいるため、<math>S_z = 0</math>セクターのみの計算実行で大丈夫です。
+
[https://alps.comp-phys.org/static/tutorials2.1.0/ed-04-criticality/heisenberg.py Pythonファイル]はイジング模型のものとほとんど同じなので、ここでは詳細の説明は省略します。
 +
主な違いは、この系の計算では<math>U(1)</math>対称性を利用することができ、その結果低エネルギー状態の解析には<math>S_z = 0</math>セクターの計算だけで十分なことです。
  
 
<!--Looking at the spectrum, try to identify the different scaling fields and how they approach the correct values as the system size is increased. You will notice that this is quite difficult. For a detailed discussion of the system, refer to [http://dx.doi.org/10.1088/0305-4470/22/5/015 I Affleck et al 1989 J. Phys. A: Math. Gen. 22 511] and the next tutorial.-->
 
<!--Looking at the spectrum, try to identify the different scaling fields and how they approach the correct values as the system size is increased. You will notice that this is quite difficult. For a detailed discussion of the system, refer to [http://dx.doi.org/10.1088/0305-4470/22/5/015 I Affleck et al 1989 J. Phys. A: Math. Gen. 22 511] and the next tutorial.-->
スペクトルを見て、異なるスケーリング場の分類と、システムサイズが大きくなると、どのよに正しい値に近づくか考えてみてください。大変難しいことが分かると思います。このシステムでの詳細なディスカッションは[http://dx.doi.org/10.1088/0305-4470/22/5/015 I Affleck et al 1989 J. Phys. A: Math. Gen. 22 511]や、次のチュートリアルも参照してください。
+
スペクトルを見て、共形タワーの分類をして、またエネルギースペクトルがシステムサイズの増大にしたがってどのように真の値に近づいていくのかを見てください。
 +
これはとてもむずかしいということがわかるかと思います。
 +
この系に関する詳細な議論は、[http://dx.doi.org/10.1088/0305-4470/22/5/015 I Affleck et al 1989 J. Phys. A: Math. Gen. 22 511]や、次のチュートリアルも参照してください。
  
 
== コマンドラインでの実行 ==
 
== コマンドラインでの実行 ==
パラメータファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-04-criticality/parm_heisenberg こちら]を参照してください。
+
パラメータファイルは[http://alps.comp-phys.org/static/tutorials2.2.0/ed-04-criticality/parm_heisenberg こちら]を参照してください。

Latest revision as of 08:31, 14 February 2014


このチュートリアルでは、臨界スピン鎖と共形場理論(CFT)について学びます。

イジング鎖

まず最初に、次のハミルトニアンで与えられる横磁場イジング鎖を例とします。

H=J_{z} \sum_{\langle i,j \rangle} S^i_z S^j_z + \Gamma \sum_i S^i_x

第一項の和は全ての最近接格子対にわたって取ります。\Gammaは横磁場の強さです。系は\Gamma/J=\frac{1}{2}で臨界となります。横磁場のない系の基底状態はJ>0で反強磁性相、J < 0で強磁性相に属します。この系は厳密に解くことができます。(P. Pfeuty, Annals of Physics: 57, 79-90 (1970)).

臨界点では、この系は共形場理論によって記述されます(review by John Cardy) CFT では、低励起状態は場の演算子とみなされ、このエネルギーはその演算子のスケーリング次元と関係があります。物理的には、スケーリング次元は相関関数の振る舞いを記述します。たとえば、ある演算子(準プライマリ場)の二点相関は次のように表されます。
\langle \phi(r_1) \phi(r_2) \rangle \sim |r_1 - r_2|^{-2\Delta}.
上記の式では、\Deltaはその場のスケーリング次元を表します。 このスケーリング場はその次元によっていくつかのグループをなします。 つまり、スケーリング次元\Delta を持つプライマリ場に、 スケーリング次元 \Delta + n, n \in \lbrace 1, 2, 3, ... \rbrace を持つ無数のセカンダリ場が付随したものです。

横磁場イジングモデルの厳密解(上記論文のEq. (3.7))では、スピンの長距離相関は次のように減衰します。
\langle S^i_z S^{i+n}_z \rangle \sim n^{-2*1/8}
\langle S^i_y S^{i+n}_y \rangle \sim n^{-2*(1+1/8)}
\langle S^i_x S^{i+n}_x \rangle \sim n^{-2*1}
さらに、恒等演算子のスケーリング次元は0であるとします。

この結果から、0, 1/8, 1, 1+1/8というスケーリング次元を持つ場がイジングモデルのCFTで現れることが期待されます。 このことを見るために、すべてのエネルギーをE \rightarrow \frac{E-E_0}{8(E_1-E_0)}のようにリスケーリングします。 そうすると、2つの低励起状態が、スケーリング次元として期待していた場所に現れます。

Pythonでの実行

Pythonを使った計算の実行方法を記述したスクリプト[1]を使用します。スクリプトの最初の部分は計算モデルや、入力ファイルのインポートをおこないます。

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

2つのシステムサイズパラメータを設定します。縦磁場hではなく、横磁場Gammaを使用すること注意してください。

data = []
for L in [10,12]:
    parms.append({
        'LATTICE'    : "chain lattice",
        'MODEL'      : "spin",
        'local_S'    : 0.5,
        'Jxy'        : 0,
        'Jz'         : -1,
        'Gamma'      : 0.5,
        'NUMBER_EIGENVALUES' : 5,
        'L'          : L
    })

2つの系を計算し、入力データを設定し計算をおこないます。

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

ここで、コメントアウトしてある行のように、ジョブ数とMPI 実行ファイルの設定(デフォルトではmpirun です)をおこなうと、複数のCPUを利用してALPSが実行されます。

計算が終わったら、まず、のちのリスケールのために各々のL に対して基底状態と第一励起状態のエネルギーを集めます。

E0 = {}
E1 = {}
for Lsets in data:
    L = pyalps.flatten(Lsets)[0].props['L']
    allE = []
    for q in pyalps.flatten(Lsets):
        allE += list(q.y)
    allE = np.sort(allE)
    E0[L] = allE[0]
    E1[L] = allE[1]

ALPSはシミュレーション(タスク)ごとにグループ化された結果をロードします: つまり、ここでdataは「各システムサイズにおける、運動量とエネルギーの組のリスト」のリストです。

次に、エネルギーを上述の式でリスケールして、運動量の関数となるようにspectrum に集めます。

for q in pyalps.flatten(data):
    L = q.props['L']
    q.y = (q.y-E0[L])/(E1[L]-E0[L]) * (1./8.)
spectrum = pyalps.collectXY(data, 'TOTAL_MOMENTUM', 'Energy', foreach=['L'])

比較のために、プライマリ場\Delta = 1/8, 1とその最初のセカンダリ場もプロットします。

for SD in [0.125, 1, 1+0.125, 2]:
    d = pyalps.DataSet()
    d.x = np.array([0,4])
    d.y = SD+0*d.x
    spectrum += [d]

最後に、図を作成します。

pyalps.pyplot.plot(spectrum)
plt.legend(prop={'size':8})
plt.xlabel("$k$")
plt.ylabel("E_0")
plt.xlim(-0.02, math.pi+0.02)
plt.show()

Vistrailsでの実行

Vistrailsを用いた計算の実行のチュートリアル[2]を参照してください。

コマンドラインでの実行

コマンドラインでの実行に使用するパラメータファイルは、hereを参照してください。

ハイゼンベルグ鎖

次に、もう少し複雑な模型を考えます。スピン1/2の反強磁性ハイゼンベルグ鎖です。ハミルトニアンは

H = \sum_{\langle i,j \rangle} \mathbf{S}^i \cdot \mathbf{S}^j です。

この模型の臨界現象は中心電荷 c=1 を持つCFT を用いて、スケーリング次元 0, 0.5, 1 を持つプライマリ場で表されます。 イジング模型の場合と違って、有限サイズ効果は対数補正を与えます。

このモデルの臨界理論はprimary fields 0,0.5及び1においてcentral charge c=1を持ちます。イジングモデルとは反対に、有限サイズ補正は対数的に消えます。すなわち、このサイズでは明らかな結果となります。 Pythonファイルはイジング模型のものとほとんど同じなので、ここでは詳細の説明は省略します。 主な違いは、この系の計算ではU(1)対称性を利用することができ、その結果低エネルギー状態の解析にはS_z = 0セクターの計算だけで十分なことです。

スペクトルを見て、共形タワーの分類をして、またエネルギースペクトルがシステムサイズの増大にしたがってどのように真の値に近づいていくのかを見てください。 これはとてもむずかしいということがわかるかと思います。 この系に関する詳細な議論は、I Affleck et al 1989 J. Phys. A: Math. Gen. 22 511や、次のチュートリアルも参照してください。

コマンドラインでの実行

パラメータファイルはこちらを参照してください。