ALPS 2 Tutorials:ED-06 FullDiagonalization/ja

From ALPS
Revision as of 07:50, 12 March 2012 by Kota (talk | contribs) (lattice/graph,モデルのカスタム設定)

Jump to: navigation, search

量子ハミルトニアンの完全対角化

このチュートリアルでは、量子鎖や熱力学量のフルスペクトルを計算するfulldiagアプリケーションについて説明します。

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>

Note that we do not really need this definition since the ,,spin" Hamiltonian in the default models.xml file already contains suitable definitions. Nevertheless, the above example illustrates how to automatically assign exchange constants Jn to a bond of type n, using the hash symbol (#).

In passing we have also assigned different types to vertices 1,2 and 3,4. Therefore, we are able to assign different local spins to the upper and lower dimer by specifying the corresponding values via local_S0 and local_S1, respectively.

We will now compute the magnetization curve for local spins S0=1 (upper dimer) and S1=1/2 (lower dimer), J0=1, J1=0.4 at a temperature 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.pyed-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.png

グラフは 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