Difference between revisions of "ALPS 2 Tutorials:ED-06 FullDiagonalization/ja"
(→lattice/graph,モデルのカスタム設定) |
(→コマンドラインを用いた実行) |
||
Line 160: | Line 160: | ||
=== コマンドラインを用いた実行 === | === コマンドラインを用いた実行 === | ||
− | |||
計算パラメータは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/parm6c parm6c]を参照してください。 | 計算パラメータは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/parm6c parm6c]を参照してください。 | ||
Line 175: | Line 174: | ||
{T = 0.02} | {T = 0.02} | ||
− | |||
新しいパラメーターLATTICE_LIBRARY、MODEL_LIBRARYでlattice、modelの設定をおこないます。 | 新しいパラメーターLATTICE_LIBRARY、MODEL_LIBRARYでlattice、modelの設定をおこないます。 | ||
Revision as of 05:08, 16 March 2012
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
量子ハミルトニアンの完全対角化
このチュートリアルでは、量子鎖や熱力学量のフルスペクトルを計算するfulldiagアプリケーションについて説明します。
Contents
1次元スピンモデルの熱力学
spin-1 ハイゼンベルグ鎖
最初に、spin-1ハイゼンベルグ反量子反磁性鎖の計算をおこないます。
コマンドラインでの実行
parm6aは、8サイトでのspin-1ハイゼンベルグ反量子反磁性鎖の完全対角化の入力設定ファイルです。
LATTICE="chain lattice" MODEL="spin" local_S = 1 J = 1 CONSERVED_QUANTUMNUMBERS="Sz" {L = 8}
The CONSERVED_QUANTUMNUMBERSパラメータで、Hilbert空間を不変部分空間への分割数を指定します。指定された数で対角化をおこないます。
以下の標準的な計算手順に従い、fulldiagを用いた量子ハミルトニアンの計算をおこないます。
parameter2xml parm1 fulldiag --write-xml parm1.in.xml
出力ファイルには全固有値が記述されています。また、fulldiagの解析機能を用いて熱力学的、磁性観測値をXML形式の図を作成することができます。
fulldiag_evaluate --T_MIN 0.1 --T_MAX 10 --DELTA_T 0.1 parm6a.task1.out.xml
次のXML形式のファイルが生成されます。
parm6a.task1.plot.energy.xml parm6a.task1.plot.free_energy.xml parm6a.task1.plot.entropy.xml parm6a.task1.plot.specific_heat.xml parm6a.task1.plot.uniform_susceptibility.xml parm6a.task1.plot.magnetization.xml
fulldiag_evaluateによって生成されたXMLファイルから該当の計算結果を抽出するために、plot2textツールを使用します。得られたデータは様々なプロットツールに対応しています。例えば、エネルギー密度と温度の2次元プロットは、次の用に記述します。
plot2text parm1.task1.plot.energy.xml
他のデータを使用したい場合も上記と同様に指定してください。
プロットにGraceを使用する場合は、plot2xmgrツールを使用してGrace用のファイルを生成します。エネルギーと温度のプロットでは、次のように入力してください。
plot2xmgr parm1.task1.plot.energy.xml > energy.agr
同じように、gnuplotではplot2gp、テキスト形式ではplot2textを使用してください。推奨はPythonを使用する方法です。
Pythonを用いた実行
Pythonで計算の実行を設定します。Pythonスクリプトtutorial6a.pyを参照してください。
import pyalps import matplotlib.pyplot as plt import pyalps.pyplot import numpy as np
parms = [{ 'LATTICE' : "chain lattice", 'MODEL' : "spin", 'CONSERVED_QUANTUMNUMBERS' : 'Sz', 'local_S' : 1, 'J' : 1, 'L' : 8 }]
input_file = pyalps.writeInputFiles('parm6a',parms) res = pyalps.runApplication('fulldiag',input_file)
次に、全出力ファイルに対して解析プログラムを実行します。
data = pyalps.evaluateFulldiagVersusT(pyalps.getResultFiles(prefix='parm6a'),DELTA_T=0.1, T_MIN=0.1, T_MAX=10.0)
最後に、図を生成します。
for s in pyalps.flatten(data): plt.figure() plt.title("Antiferromagnetic Heisenberg chain") pyalps.pyplot.plot(s) plt.show()
Vistrailsを用いた実行
Vistrailsを用いた計算の実行のチュートリアルed-06-fulldiag.vtを開き、"antiferromagnetic chain"のワークフローを見てください。入力ファイルの生成、計算の実行、計算の出力を設定する"Execute"をクリックしてください。
演習
- 磁化率の計算をおこなってください。L=9(計算には数分かかりますのでL=7でも構いません)としてL=8のときの結果と比較してください。
- 無限鎖の結果に影響を与える有限サイズの温度範囲を見積もってみてください。
spin-1/2ハイゼンベルグ梯子
モデルをL=6の梯子モデルにし、spin-1/2ハイゼンベルグ梯子モデルの計算をおこないます。LATTICEパラメータを"ladder"に、J0,J1を1に変更します。パラメターファイルはparm6bです。Pythonスクリプトはtutorial6b.py、Vistrailsのワークフローはed-06-fulldiag.vtをそれぞれ参照してください。
演習
- 比熱の最大の位置を議論してください(無限梯子はおおよそJ/2のギャップがあります。)
- 7rungs(5rungsでも可)の計算をおこなってみてください。
- 有限サイズでの計算結果が無限系への近似として良い結果を与えるとき、計算に用いた温度の範囲はどのような場合ですか?
注意: QMCシミュレーションに精通している方なら、大きな系での計算は熱力学極限に対して良い近似が得られることがわかるでしょう。
厳密対角化は特定の計算条件下でしか解くことができません。第一に、系が本質的に有限で(可能な限り小さい)あれば、完全対角化が可能で厳密解を得られるでしょう。また、厳密解は符号問題といった煩わしい問題を考えなくてすみます。どちらの条件も同時に満たすのが次章で述べる磁性分子モデルです。
磁性分子の熱力学計算
次に、fulldiagを用いて小さなスピンクラスターの厳密な熱力学シミュレーションをおこないます。完全なスペクトルを計算します。
二個のカップリングした二量体
lattice/graph,モデルのカスタム設定
ここでは2つのカップリングした二量体を考えます。
最初に、この問題を表現するグラフが必要です。次のファイルdd-graph.xmlを参照してください
<GRAPH name="double dimer" vertices="4"> <VERTEX id="1" type="0"></VERTEX> <VERTEX id="2" type="0"></VERTEX> <VERTEX id="3" type="1"></VERTEX> <VERTEX id="4" type="1"></VERTEX> <EDGE type="0" source="1" target="2"/> <EDGE type="0" source="3" target="4"/> <EDGE type="1" source="1" target="3"/> <EDGE type="1" source="1" target="4"/> <EDGE type="1" source="2" target="3"/> <EDGE type="1" source="2" target="4"/> </GRAPH>
また、J0とJ1の異なるハイゼンベルグ交換を指定する必要があります。次のファイルmodel-dspin.xmlを参照してください。
<HAMILTONIAN name="dimerized spin"> <PARAMETER name="J" default="1"/> <PARAMETER name="h" default="0"/> <BASIS ref="spin"/> <SITETERM site="i"> <PARAMETER name="h#" default="h"/> -h#*Sz(i) </SITETERM> <BONDTERM source="i" target="j"> <PARAMETER name="J#" default="J"/> J#*Sz(i)*Sz(j)+J#/2*(Splus(i)*Sminus(j)+Sminus(i)*Splus(j)) </BONDTERM> </HAMILTONIAN>
デフォルトのmodels.xmlファイルの"スピン"ハミルトニアンが既に適切な定義が含まれていますので、この定義は必要としないことに注意してください。 しかし、それにもかかわらず、上記の例では、自動的に交換定数を割り当てる方法を示しています。J nのnは結合のタイプを表し、ハッシュ記号(#)を使用します。
また、バーテックスlの1,2と3,4に異なるタイプが割り当てられます。すなわち、それぞれlocal_S0とlocal_S1を介して対応する値を指定することにより、上側と下側の二量体に異なるローカルスピンを割り当てることができます。
磁化曲線を求める計算をおこないます。計算条件は、ローカルスピンS0=1 (upper dimer)、S1=1/2 (lower dimer)、J0=1, J1=0.4、温度はT=0.02です。
コマンドラインを用いた実行
計算パラメータはparm6cを参照してください。
LATTICE="double dimer" MODEL="dimerized spin" LATTICE_LIBRARY="dd-graph.xml" MODEL_LIBRARY="model-dspin.xml" local_S0=1 local_S1=1/2 J0 = 1 J1 = 0.4 h = 0 CONSERVED_QUANTUMNUMBERS="Sz" {T = 0.02}
新しいパラメーターLATTICE_LIBRARY、MODEL_LIBRARYでlattice、modelの設定をおこないます。
次の手順にしたがって計算をおこないます。
parameter2xml parm3 fulldiag parm3.in.xml fulldiag_evaluate --H_MIN 0 --H_MAX 4 --DELTA_H 0.025 --versus h parm3.task1.out.xml
ここでは磁場の範囲を指定に、コマンドライン引数でfulldiag_evaluateを使用していることに注意してください。特に、コマンドライン引数 --versus h は、前の例のように、x軸に温度ではなく磁場を設定します。
Python,Vistrailsを用いた実行
Python、Vistrailsでの実行でも、同様のlattice,modelが必要です。tutorialcb.pyとed-06-fulldiag.vtを参照してください。
Vistrailsでは2つの手法があります。一つは、Vistrailsでlattice,modelファイルを生成する方法、もう一つは、webからファイルをダウンロードする方法です。
質疑
- 結果をプロットし説明してください!
二つのS0=1 とS1=1/2ダイマーのスペクトルは解析的にわかります。エネルギーは次の様になります。
- -11J0/4, -3J0/4-2J1 for total spin Stotal=0;
- -7J0/4, -3J0/4-J1, 5J0/4-3J1 for Stotal=1;
- -3J0/4+J1, J0/4, 5J0/4-J1 for Stotal=2;
- 5J0/4+2J1 for Stotal=3.
分子錯体 V15
最後の例は、V15分子錯体です。15個の1/2スピンで構成されています。
グラフは v15-graph.xmlで定義されます。
シミュレーションでは、Heisenberg exchange Jはedgesに沿って等しいと仮定します。パラメータファイルはparm6d,Pythonスクリプトはtutorial6d.py、Vistrailsのワークフローはed-06-fulldiag.vtを参照してください。
質疑
- 磁化率の低音度での振る舞いが説明できますか?
この計算は少しが難易度が高めで、計算にかかる時間も大きくなります。
追加演習
立方格子でのHubbard模型
- 立方格子でのHubbard模型計算のためのパラメータファイルの設定
- あなたが使いたい格子情報を得てください。立方格子、鎖どちらでも使用可能です。境界条件に注意してください。
- modelライブラリでHubbard模型を得てください。
- 対称性を切り替えてください。保存されるのは運動量(x、y方向)、粒子数です。
- t=0やU=0といったパラメータを用いて試行計算してみてください。
- How would you introduce a t'?
© 2004-2010 by Andreas Honecker, Emanuel Gull, and Matthias Troyer