ALPS 2 Tutorials:ED-01 SparseDiagonalization/ja
From ALPS
|
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
Contents |
疎行列の対角化
このチュートリアルでは、Lanczosアルゴリズムを用いた疎行列の対角化プログラムの使用方法を学びます。
1次元ハイゼンベルグ鎖の計算
コマンドラインでの実行
パラメータファイルparm1a で、4サイト、S=1鎖の厳密対角化計算を設定します。
MODEL="spin"
LATTICE="chain lattice"
CONSERVED_QUANTUMNUMBERS="Sz"
MEASURE_STRUCTURE_FACTOR[Structure Factor Sz]=Sz
MEASURE_CORRELATIONS[Diagonal spin correlations]=Sz
MEASURE_CORRELATIONS[Offdiagonal spin correlations]="Splus:Sminus"
local_S=1
J=1
{L=4;}
他のコードと計算結果を比較するために、物理量の平均値、ローカルな値、また相関因子、構造因子といった求める計算量のパラメータの指定をおこないます。 さらにカスタムした計算、解析手順は こちらを参照してください。
以下の標準的な計算手順に従い、入力パラメータファイルをXML形式に変換し、sparsediagを実行します。
parameter2xml parm1a sparsediag --write-xml parm1a.in.xml
各セクター(Sz、P)での最小固有値や固有状態が計算されます。Pは全運動量です。出力ファイルparm1.task1.out.xmlは全計算結果が格納されており、インターネットブラウザを用いて閲覧することができます。このチュートリアルのケースでは基底状態は Sz=0, P=0のセクターです。対角スピン相関は、XML形式で次のように示されます。
Diagonal spin correlations[( 0 ) -- ( 0 )] (0.666667,0) Diagonal spin correlations[( 0 ) -- ( 1 )] (-0.5,0) Diagonal spin correlations[( 0 ) -- ( 2 )] (0.333333,0) Diagonal spin correlations[( 0 ) -- ( 3 )] (-0.5,0)
[( a ) -- ( b )]で示されるa,bの数字は[Sz(a)*Sz(b)]の番号を意味します。右側の()内の複素数の値は、相関関数を表しています。
Szの構造因子は次のような結果になります。
Structure Factor Sz[( 0 )] 5.551115123125783e-17 Structure Factor Sz[( 1.570796326794897 )] 0.333333333333333 Structure Factor Sz[( 3.141592653589793 )] 2 Structure Factor Sz[( 4.71238898038469 )] 0.3333333333333329
[(q)]の数字は、波数を表しています。
パラメータファイルに次の行を加えることで、Szセクターを制限することができます。
Sz_total=0
Pythonでの実行
Pythonで計算の実行を設定します。Pythonスクリプトtutorial1a.pyを参照してください。次の記述のように、必要なモジュールのインポート、パラメータの定義、入力ファイルの設定、計算の実行をおこないます。
import pyalps
parms = [{
'LATTICE' : "chain lattice",
'MODEL' : "spin",
'local_S' : 1,
'J' : 1,
'L' : 4,
'CONSERVED_QUANTUMNUMBERS' : 'Sz',
'MEASURE_STRUCTURE_FACTOR[Structure Factor S]' : 'Sz',
'MEASURE_CORRELATIONS[Diagonal spin correlations]=' : 'Sz',
'MEASURE_CORRELATIONS[Offdiagonal spin correlations]' : 'Splus:Sminus'
}]
input_file = pyalps.writeInputFiles('parm1a',parms)
res = pyalps.runApplication('sparsediag',input_file)
計算の実行には、起動スクリプトのalpspythonやvispythonを使用します。前節でおこなったコマンドラインでの実行結果と同じ出力結果が得られます。
次に、各固有状態の計測結果をロードします。
data = pyalps.loadEigenstateMeasurements(pyalps.getResultFiles(prefix='parm1a'))
最後に、基底状態の結果を図示します。
for sector in data[0]:
print '\nSector with Sz =', sector[0].props['Sz'],
print 'and k =', sector[0].props['TOTAL_MOMENTUM']
for s in sector:
if pyalps.size(s.y[0])==1:
print s.props['observable'], ' : ', s.y[0]
else:
for (x,y) in zip(s.x,s.y[0]):
print s.props['observable'], '(', x, ') : ', y
Vistrailでの実行
Vistrailsでの計算実行は、ed-01-sparsediag.vtを参照してください。
