|
| 1 | + |
| 2 | +--- |
| 3 | +title: DMRG-05 Local Observables |
| 4 | +math: true |
| 5 | +toc: true |
| 6 | +--- |
| 7 | + |
| 8 | +特定のサイトに関連するオブザーバブルを局所オブザーバブルと呼びます。スピン鎖の場合、意味のある局所オブザーバブルは局所磁化 $\langle S^z_i \rangle$ です。 |
| 9 | + |
| 10 | +## スピン-1 鎖における励起 |
| 11 | + |
| 12 | +長さ $L=96$、$D=200$ の鎖を取り、局所磁化 $\langle S^z_i \rangle$ を計算します。磁化セクター 0、1、2 の基底状態についてサイト $i$ の関数としてプロットします。 |
| 13 | + |
| 14 | +得られるのは、セクター 0 では本質的に平坦な曲線、セクター 1 では磁化が本質的に鎖端に集中、セクター 2 では磁化が鎖端とバルクの両方に存在するというものです。これは、開放鎖の第一励起が境界励起であり、閉じた系では存在しないことを意味します。そして開放鎖の第二励起は、境界励起プラスバルク励起であり、これが私たちの関心対象です。今のところ理由は不明ですが、したがって第一バルク励起エネルギーはセクター 1 と 2 を比較することで抽出しなければなりません。 |
| 15 | + |
| 16 | +この話の教訓は、この局所オブザーバブルを見ることで、スピン-1 鎖における境界励起とバルク励起を区別できるということです。 |
| 17 | + |
| 18 | +### パラメータファイルを使う場合 |
| 19 | + |
| 20 | +次のパラメータファイル [`spin_one`](https://github.com/ALPSim/ALPS/blob/bd842d1899feacd3d50392217f5239183d11a817/tutorials/dmrg-03-local-observables/spin_one) は三つの個別の実行を設定します。各スピンセクターに一つずつです(前と同様に、説明のため小さいシステムと状態数を使用します): |
| 21 | + |
| 22 | + LATTICE_LIBRARY="my_lattices.xml" |
| 23 | + LATTICE="open chain lattice with special edges 32" |
| 24 | + MODEL="spin" |
| 25 | + local_S0=0.5 |
| 26 | + local_S1=1 |
| 27 | + CONSERVED_QUANTUMNUMBERS="N,Sz" |
| 28 | + J=1 |
| 29 | + NUMBER_EIGENVALUES=1 |
| 30 | + SWEEPS=4 |
| 31 | + MEASURE_LOCAL[Local magnetization]=Sz |
| 32 | + MAXSTATES=40 |
| 33 | + { Sz_total=0 } |
| 34 | + { Sz_total=1 } |
| 35 | + { Sz_total=2 } |
| 36 | + |
| 37 | +通常のコマンド列を使って変換と実行を行います: |
| 38 | + |
| 39 | + parameter2xml spin_one |
| 40 | + dmrg --write-xml spin_one.in.xml |
| 41 | + |
| 42 | +### Python を使う場合 |
| 43 | + |
| 44 | +スクリプト [`spin_one.py`](https://github.com/ALPSim/ALPS/blob/bd842d1899feacd3d50392217f5239183d11a817/tutorials/dmrg-03-local-observables/spin_one.py) は三つのスピンセクターそれぞれで一つのシミュレーションを実行します: |
| 45 | + |
| 46 | + import pyalps |
| 47 | + import numpy as np |
| 48 | + import matplotlib.pyplot as plt |
| 49 | + import pyalps.plot |
| 50 | + parms = [] |
| 51 | + for sz in [0,1,2]: |
| 52 | + parms.append( { |
| 53 | + 'LATTICE_LIBRARY' : 'my_lattices.xml', |
| 54 | + 'LATTICE' : 'open chain lattice with special edges 32', |
| 55 | + 'MODEL' : "spin", |
| 56 | + 'local_S0' : '0.5', |
| 57 | + 'local_S1' : '1', |
| 58 | + 'CONSERVED_QUANTUMNUMBERS' : 'N,Sz', |
| 59 | + 'Sz_total' : sz, |
| 60 | + 'J' : 1, |
| 61 | + 'SWEEPS' : 4, |
| 62 | + 'NUMBER_EIGENVALUES' : 1, |
| 63 | + 'MAXSTATES' : 40, |
| 64 | + 'MEASURE_LOCAL[Local magnetization]' : 'Sz' |
| 65 | + } ) |
| 66 | + |
| 67 | + input_file = pyalps.writeInputFiles('parm_spin_one',parms) |
| 68 | + res = pyalps.runApplication('dmrg',input_file,writexml=True) |
| 69 | + |
| 70 | +データファイルを読み込んだ後、局所磁化の結果を抽出できます: |
| 71 | + |
| 72 | + data = pyalps.loadEigenstateMeasurements(pyalps.getResultFiles(prefix='parm_spin_one')) |
| 73 | + |
| 74 | + curves = [] |
| 75 | + for run in data: |
| 76 | + for s in run: |
| 77 | + if s.props['observable'] == 'Local magnetization': |
| 78 | + sz = s.props['Sz_total'] |
| 79 | + s.props['label'] = '$S_z = ' + str(sz) + '$' |
| 80 | + s.y = s.y.flatten() |
| 81 | + curves.append(s) |
| 82 | + |
| 83 | +そしてプロットします: |
| 84 | + |
| 85 | + plt.figure() |
| 86 | + pyalps.plot.plot(curves) |
| 87 | + plt.legend() |
| 88 | + plt.title('Magnetization of antiferromagnetic Heisenberg chain (S=1)') |
| 89 | + plt.ylabel('local magnetization') |
| 90 | + plt.xlabel('site') |
| 91 | + plt.show() |
| 92 | + |
| 93 | +## スピン-1/2 鎖における磁化 |
| 94 | + |
| 95 | +最低の磁化セクターでのスピン-1/2 鎖について同様の計算を繰り返します。 |
| 96 | + |
| 97 | +### パラメータファイルを使う場合 |
| 98 | + |
| 99 | +次のパラメータファイルでこのタスクを達成できます。[こちら](https://github.com/ALPSim/ALPS/blob/bd842d1899feacd3d50392217f5239183d11a817/tutorials/dmrg-03-local-observables/spin_one_half)からダウンロードできます: |
| 100 | + |
| 101 | + LATTICE="open chain lattice" |
| 102 | + MODEL="spin" |
| 103 | + CONSERVED_QUANTUMNUMBERS="N,Sz" |
| 104 | + SWEEPS=4 |
| 105 | + J=1 |
| 106 | + NUMBER_EIGENVALUES=1 |
| 107 | + MEASURE_LOCAL[Local magnetization]=Sz |
| 108 | + L=32 |
| 109 | + MAXSTATES=40 |
| 110 | + { Sz_total=0 } |
| 111 | + { Sz_total=1 } |
| 112 | + { Sz_total=2 } |
| 113 | + |
| 114 | + parameter2xml spin_one_half |
| 115 | + dmrg --write-xml spin_one_half.in.xml |
| 116 | + |
| 117 | +### Python を使う場合 |
| 118 | + |
| 119 | +パラメータの変更を除いて、スクリプト [`spin_one_half.py`](https://github.com/ALPSim/ALPS/blob/bd842d1899feacd3d50392217f5239183d11a817/tutorials/dmrg-03-local-observables/spin_one_half.py) は上で説明した `spin_one` スクリプトと同じです。 |
| 120 | + |
| 121 | +## まとめ |
| 122 | + |
| 123 | +局所磁化プロファイルは、開放スピン-1 鎖における境界励起とバルク励起をきれいに分離します。だからこそ [DMRG-04](../dmrg04) で研究した物理的に関連する(バルク)ギャップは、0 と 1 ではなく磁化セクター 1 と 2 の間から読み取らなければなりません。 |
| 124 | + |
| 125 | +## 問題 |
| 126 | + |
| 127 | +- 最低の磁化セクターにおけるスピン-1/2 鎖の局所磁化計算を繰り返すと、上のスピン-1 の場合と比較して何が観察されますか? |
0 commit comments