Difference between revisions of "ALPS 2 Tutorials:ED-02 Gaps/ja"

From ALPS
Jump to: navigation, search
(コマンドラインでの実行)
Line 28: Line 28:
 
  {L=10}
 
  {L=10}
  
Sz_totalパラメータは、Szの保存量子数の制限に用いられます。保存量子数やモデルの構築の詳細情報は[[Tutorials:ModelHOWTO |  model library documentation]]を参照してください。
+
Sz_totalパラメータは、Szの保存量子数の制限に用いられます。保存量子数やモデルの構築の詳細情報は[[Tutorials:ModelHOWTO/ja |  model library documentation]]を参照してください。
  
 
以下の標準的な計算手順に従い、入力パラメータファイルをXML形式に変換し、sparsediagを実行します。
 
以下の標準的な計算手順に従い、入力パラメータファイルをXML形式に変換し、sparsediagを実行します。

Revision as of 06:03, 19 March 2012


1次元量子スピン系でのスピンギャップ

このチュートリアルでは、1次元量子スピン系でのスピンギャップの計算方法について学びます。

spin-1鎖のスピンギャップ

コマンドラインでの実行

パラメータファイルparm2aは、一重項、三重項での4-6サイト、S=1鎖の厳密対角化計算を設定します。

MODEL="spin"
LATTICE="chain lattice"
CONSERVED_QUANTUMNUMBERS="Sz"
local_S=1
J=1
Sz_total=0
{L=4}
{L=6}
{L=8}
{L=10}
Sz_total=1
{L=4}
{L=6}
{L=8}
{L=10}

Sz_totalパラメータは、Szの保存量子数の制限に用いられます。保存量子数やモデルの構築の詳細情報は model library documentationを参照してください。

以下の標準的な計算手順に従い、入力パラメータファイルをXML形式に変換し、sparsediagを実行します。

 parameter2xml parm2a
 sparsediag --write-xml parm2a.in.xml

計算されたギャップの評価は、出力ファイルから手動でおこなうことができます。また、PythonやVistrailsを用いて自動的におこなうことも可能です。

Pythonでの実行

Pythonで計算の実行を設定します。Pythonスクリプトtutorial2a.pyを参照してください。次の記述のように、必要なモジュールのインポート、パラメータの定義、入力ファイルの設定、計算の実行をおこないます。

import pyalps
import numpy as np
import matplotlib.pyplot as plt
import pyalps.pyplot
parms = []
for l in [4, 6, 8, 10]:
  for sz in [0, 1]:
     parms.append(
       { 
         'LATTICE'                   : "chain lattice", 
         'MODEL'                     : "spin",
         'local_S'                   : 1,
         'J'                         : 1,
         'L'                         : l,
         'CONSERVED_QUANTUMNUMBERS'  : 'Sz',
         'Sz_total'                  : sz
       }
     )
input_file = pyalps.writeInputFiles('parm2a',parms)
res = pyalps.runApplication('sparsediag',input_file)

計算の実行には、起動スクリプトのalpspythonやvispythonを使用します。前節でおこなったコマンドラインでの実行結果と同じ出力結果が得られます。

次に、各システムサイズ、スピンセクターのスペクトルの計測結果をロードします。

data = pyalps.loadSpectra(pyalps.getResultFiles(prefix='parm2a'))

ギャップを抽出するためにPythonスクリプトに下記の1、2行目を追加する必要があります。リストの長さと、各(L、Sz)セクターの最小エネルギーです。

lengths = []
min_energies = {}
for sim in data:
  l = int(sim[0].props['L'])
  if l not in lengths: lengths.append(l)
  sz = int(sim[0].props['Sz_total'])
  all_energies = []
  for sec in sim:
    all_energies += list(sec.y)
  min_energies[(l,sz)]= np.min(all_energies)
 

最後に、1/Lの関数としてのギャップのプロットをおこないます。

gapplot = pyalps.DataSet()
gapplot.x = 1./np.sort(lengths)
gapplot.y = [min_energies[(l,1)] -min_energies[(l,0)] for l in np.sort(lengths)]  
gapplot.props['xlabel']='$1/L$'
gapplot.props['ylabel']='Triplet gap $\Delta/J$'
gapplot.props['label']='S=1'
plt.figure()
pyalps.pyplot.plot(gapplot)
plt.legend()
plt.xlim(0,0.25)
plt.ylim(0,1.0)
plt.show()

Vistrailsでの実行

Vistrailsでの計算実行は、ed-02-gaps.vtを参照してください。ワークフロー"S=1 chain"を選択してください。

spin-1/2鎖でのスピンギャップ

spin-1鎖とspin-1/2鎖の外挿ギャップを比較します。パラメータlocal_S=1をlocal_S=0.5に変更して計算をおこないます。(パラメータの名前はparm2bとします) パラメータファイルはparm2b、Pythonスクリプトはtutorial2b.py、Vistrailsワークフローファイルはed-02-gaps.vtで"S=1/2 chain"を参照してください。

両系でのプロット

前途の2つの系の計算を1つにしたPythonスクリプトはtutorial2c.py、Vistrailsでの実行はed-02-gaps.vt、ワークフロー"combined"を参照してください。

質疑

  • 無限系のギャップの外挿値は何ですか?
  • なぜS=1とS=1/2鎖は異なる挙動を示すのですか?