Difference between revisions of "ALPS 2 Tutorials:ED-06 FullDiagonalization/ja"

From ALPS
Jump to: navigation, search
Line 98: Line 98:
 
==  spin-1/2ハイゼンベルグ梯子  ==  
 
==  spin-1/2ハイゼンベルグ梯子  ==  
  
<!--We now change the model to a ladder of length L=6, setting the parameter LATTICE to "ladder" and the couplings J0 and J1 to 1. The parameters are in [http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/parm6b parm6b], the Python script in [http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/tutorial6b.py tutorial6b.py] and the Vistrails workflow is in  [http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/ed-06-fulldiag.vt  ed-06-fulldiag.vt].-->
+
モデルをL=6の梯子モデルにし、spin-1/2ハイゼンベルグ梯子モデルの計算をおこないます。LATTICEパラメータを"ladder"に、J0,J1を1に変更します。パラメターファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/parm6b parm6b]です。Pythonスクリプトは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/tutorial6b.py tutorial6b.py]、Vistrailsのワークフローは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/ed-06-fulldiag.vt  ed-06-fulldiag.vt]をそれぞれ参照してください。
モデルをL=6の梯子モデルにし、spin-1/2ハイゼンベルグ梯子モデルの計算をおこないます。。LATTICEパラメータを"ladder"に、J0,J1を1に変更します。パラメターファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/parm6b parm6b]です。Pythonスクリプトは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/tutorial6b.py tutorial6b.py]、Vistrailsのワークフローは[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/ed-06-fulldiag.vt  ed-06-fulldiag.vt]をそれぞれ参照してください。
 
  
 
====  演習  ====  
 
====  演習  ====  
<!--* Discuss the position of the maximum of the specific heat (hint: the infinite ladder has a gap of approximately J/2)&nbsp;!
+
 
* Repeat this computation for 7 rungs (or 5 rungs, if you are impatient).
 
* What can you infer from the comparison about the temperature range where the finite-size results are a good approximation to the infinite system&nbsp;?-->
 
 
* 比熱の最大の位置を議論してください(無限梯子はおおよそJ/2のギャップがあります。)
 
* 比熱の最大の位置を議論してください(無限梯子はおおよそJ/2のギャップがあります。)
 
* 7rungs(5rungsでも可)の計算をおこなってみてください。
 
* 7rungs(5rungsでも可)の計算をおこなってみてください。
Line 110: Line 107:
  
 
'''注意''':
 
'''注意''':
<!--If you are familiar with Quantum Monte Carlo (QMC) simulations, you will know that larger systems can be treated and hence better approximations to the thermodynamic limit obtained. (Try it&nbsp;! You may find that it is in fact not so easy to do better with QMC than with full diagonalization for the above examples.)-->
 
 
QMCシミュレーションに精通している方なら、大きな系での計算は熱力学極限に対して良い近似が得られることがわかるでしょう。
 
QMCシミュレーションに精通している方なら、大きな系での計算は熱力学極限に対して良い近似が得られることがわかるでしょう。
  
 
+
厳密対角化は特定の計算条件下でしか解くことができません。第一に、系が本質的に有限で(可能な限り小さい)あれば、完全対角化が可能で厳密解を得られるでしょう。また、厳密解は符号問題といった煩わしい問題を考えなくてすみます。どちらの条件も同時に満たすのが次章で述べる磁性分子モデルです。
<!--Exact diagonalization definitely remains the method of choice under certain conditions. Firstly, if the system is intrinsically finite (and possibly small), full diagonalization yields the exact result at once. Secondly, exact diagonalization does not suffer from the sign problem such that it can also be used for fermionic or frustrated models without any additional constraint. Both conditions are simultaneously satisfied in the models for magnetic molecules which will be discussed in the second part.-->
 
厳密対角化は特定の計算条件下でしか解くことができません。第一に、系が本質的有限で(可能な限り小さい)あれば、完全対角化が可能で厳密解を得られるでしょう。また、厳密解は符号問題といった煩わしい問題を考えなくてすみます。どちらの条件も同時に満たすのが次章で述べる磁性分子モデルです。
 
  
 
=  磁性分子の熱力学計算  =
 
=  磁性分子の熱力学計算  =
  
<!--We will now use fulldiag to simulate the exact thermodynamics of small spin clusters, by calculating their complete spectrum.-->
 
 
次に、fulldiagを用いて小さなスピンクラスターの厳密な熱力学シミュレーションをおこないます。完全なスペクトルを計算します。
 
次に、fulldiagを用いて小さなスピンクラスターの厳密な熱力学シミュレーションをおこないます。完全なスペクトルを計算します。
  
Line 126: Line 119:
 
=== lattice/graph,モデルのカスタム設定 ===
 
=== lattice/graph,モデルのカスタム設定 ===
  
<!--Consider the following system of two coupled dimers:-->
 
 
ここでは2つのカップリングした二量体を考えます。
 
ここでは2つのカップリングした二量体を考えます。
  
Line 144: Line 136:
 
  </GRAPH>
 
  </GRAPH>
  
<!--Then we also want to assign different Heisenberg exchanges J0 and J1 to the edges of type 0 and 1, respectively. This is achieved by the following entry in the file [http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/model-dspin.xml model-dspin.xml]:-->
 
 
また、J0とJ1の異なるハイゼンベルグ交換を指定する必要があります。次のファイル[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/model-dspin.xml model-dspin.xml]を参照してください。
 
また、J0とJ1の異なるハイゼンベルグ交換を指定する必要があります。次のファイル[http://alps.comp-phys.org/static/tutorials2.0.0/ed-06-fulldiag/model-dspin.xml model-dspin.xml]を参照してください。
 
  <HAMILTONIAN name="dimerized spin">
 
  <HAMILTONIAN name="dimerized spin">

Revision as of 04:00, 16 March 2012

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

このチュートリアルでは、量子鎖や熱力学量のフルスペクトルを計算する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>

デフォルトのmodels.xmlファイルのハミルトニアン"スピン"が既に適切な​​定義が含まれていますので、この定義を必要としないことに注意してください。 しかし、それにもかかわらず、上記の例では、自動的に交換定数を割り当てる方法を示しています。J nnは結合のタイプを表し、ハッシュ記号(#)を使用します。

また、バーテックス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.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