Tutorials:ModelHOWTO/ja

From ALPS
Revision as of 06:18, 2 March 2012 by Kota (talk | contribs) (ハミルトニアンの取扱い)

Jump to: navigation, search

ALPSの機能として、量子格子モデルがあります。格子中の各サイト、ボンドの基底とハミルトニアンを関連付けて説明します。


デフォルトのモデルライブラリファイル 

モデルライブラリファイルは問題のHilbert空間やハミルトニアンを定義します。ALPSが用意するデフォルトライブラリは"$ALPSPATH/lib/xml/models.xml"にあります。このライブラリには"t_J"、"Bose Hubbard"、"スピン1/2"など一般的に使われる多くのモデルに対応しています。


List of models defined in the default model libary file:
model name list of available parameters
spin J Jz Jxy J0 Jz0 Jxy0 J1 Jz1 Jxy1 h Gamma D K K0 K1
boson Hubbard mu t V U t0 t1 V0 V1
hardcore boson same as above
fermion Hubbard same as above
spinless fermions mu t V t0 t1 V0 V1
Kondo lattice mu t J
t-J mu t J V J t0 t1 t2 V0 V1 V2 J0 J1 J2

モデルライブラリファイルの構造

モデルライブラリの内部構造は次のように記述されます。

<MODEL>
<SITEBASIS Name=...> ... </SITEBASIS>
<BASIS Name=...> ... </BASIS>
<HAMILTONIAN Name=...> ... </HAMILTONIAN>
</MODEL>

<SITEBASIS>では単一サイトのHilbert空間の定義をおこない、<BASIS>では全格子のHilbert空間、<HAMILTONIAN>ではハミルトニアンの定義をおこないます。

単一サイトの基底

単一サイトの基底状態は次のように1以上のQUANTUMNMBER要素で表現されます。

 <SITEBASIS name="hardcore boson">
   <QUANTUMNUMBER name="N" min="0" max="1"/> 
 </SITEBASIS>
 <SITEBASIS name="spin-1/2">
   <QUANTUMNUMBER name="S" min="1/2" max="1/2"/>
   <QUANTUMNUMBER name="Sz" min="-1/2" max="1/2"/>
 </SITEBASIS>
 <SITEBASIS name="fermion">
   <QUANTUMNUMBER name="Nup" min="0" max="1" type="fermionic"/>
   <QUANTUMNUMBER name="Ndown" min="0" max="1" type="fermionic"/>
 </SITEBASIS>


スピンを定義する上で、スピン演算子の行列要素の定義に必要になるので、トータルスピンS量子数の設定をおこなってください。

<SITEBASIS>は参照で使用される名前属性を設定します。

<QUANTUMNUMBER>要素では名前と、min,max属性で最大値、最小値を設定します。量子数はmin,min+1,min+2...maxまでの値を取ることができます。オプションとして、type属性で、bosonic(デフォルト)とfermionicが選択できます。量子数がフェルミオン数の演算子の時は"fermionic"を指定しなければいけません。これらの情報は異なるサイト間の演算子間での相互作用を考慮するために必要になります。

量子数の範囲は入力パラメータから求められます。次のようにdefaultで指定することも可能です。

 <SITEBASIS name="boson">
   <PARAMETER name="Nmax" default="infinity"/>
   <QUANTUMNUMBER name="N" min="0" max="Nmax"/>
 </SITEBASIS>
 <SITEBASIS name="spin">
   <PARAMETER name="local_spin" default="1/2"/>
   <QUANTUMNUMBER name="S" min="local_spin" max="local_spin"/>
   <QUANTUMNUMBER name="Sz" min="-S" max="S"/>
 </SITEBASIS>

t-Jモデルのような、より複雑なモデルでは、いくつかのオプション指定が可能です。上下スピン数や、粒子数の状態に対してラベル付けができます。

 <SITEBASIS name="t-J">
   <QUANTUMNUMBER name="N" min="0" max="1" type="fermionic"/>
   <QUANTUMNUMBER name="S" min="N/2" max="N/2"/>
   <QUANTUMNUMBER name="Sz" min="-S" max="S"/>
 </SITEBASIS>
 <SITEBASIS name="alternative t-J">
   <QUANTUMNUMBER name="Nup" min="0" max="1" type="fermionic"/>
   <QUANTUMNUMBER name="Ndown" min="0" max="1-Nup" type="fermionic"/>
 </SITEBASIS>

完全格子モデルの基底

格子モデルの基底関数は格子中のサイト(バーテックス)の各タイプに与えられます。サイトのタイプが1種類ならば、次の記述のように基底を与えます。

 <BASIS name="spin">
   <SITEBASIS ref="spin"/>
 </BASIS>
 <BASIS name="spin">
   <SITEBASIS name="spin-1">
     <QUANTUMNUMBER name="S" min="1" max="1"/>
     <QUANTUMNUMBER name="Sz" min="-1" max="1"/>
   </SITEBASIS>
 </BASIS>

<SITEBASIS>要素で基底名は与えられます。この名前は全サイトでデフォルト名として扱われます。<SITEBASIS>では、すでに定義済みの情報を参照するか、上記のように全サイトの基底を指定する必要があります。


単位セルに複数のサイトを持つ格子 

格子に単位セルあたり複数のサイトがある場合、<BASIS>は単位セルの各サイトに<SITEBASIS>を指定する必要があります。各エントリは格子ライブラリファイル(参照)で与えられる定義に関連する異なる Typeを持たなければなりません。

二分格子中のHilbert空間の例を次に示します。

 <BASIS name="Kondo lattice">
   <SITEBASIS type="0" ref="fermion"/>
   <SITEBASIS type="1" ref="spin-1/2"/>
 </BASIS>

スピンモデルにおいて、スピンの大きさは変わるかもしれまんせんが、同じローカルサイト基底で取り扱われるでしょう。例えば、local_S0local_S1のパラメータによってtype 0,1を指定します。また、適切なデフォルト値を設定することができます。

 <BASIS name="spin">
   <SITEBASIS type="0" ref="spin">
     <PARAMETER name="local_spin" value="local_S0"/>
     <PARAMETER name="local_S0" value="local_S"/>
     <PARAMETER name="local_S" value="1/2"/>
   </SITEBASIS>
   <SITEBASIS type="1" ref="spin">
     <PARAMETER name="local_spin" value="local_S1"/>
     <PARAMETER name="local_S1" value="local_S"/>
     <PARAMETER name="local_S" value="1/2"/>
   </SITEBASIS>
 </BASIS>

さらに、サイトタイプを付け加えたい場合は記述が煩雑になってしまいます。それを解消する方法として、ALPSはショートカットでの記述ができます。

 <BASIS name="spin">
   <SITEBASIS ref="spin">
     <PARAMETER name="local_spin" value="local_S#"/>
     <PARAMETER name="local_S#" value="local_S"/>
     <PARAMETER name="local_S" value="1/2"/>
   </SITEBASIS>
 </BASIS>

制限事項

最後に、基底は特定の量子数の合計に制限を決めることによって、制限することができます。例えば、スピンSz_totalの値を用いたスピンモデルを定義するために、<CONSTRAINT>要素を加えます。

 <BASIS name="spin">
   <SITEBASIS ref="spin"/>
   <CONSTRAINT quantumnumber="Sz" value="Sz_total"/>
 </BASIS>

量子演算子

単一サイト演算子

ハミルトンの演算子が構築され、そこから基本的な量子演算子は、名前、行列要素と演算子は量子数で発生し、任意の変更によって指定されています。これらの演算子は、サイト単位で定義されています。例は次のとおりです。

 <SITEBASIS name="spin">
   <PARAMETER name="local_spin" default="1/2"/>
   <QUANTUMNUMBER name="S" min="local_spin" max="local_spin"/>
   <QUANTUMNUMBER name="Sz" min="-S" max="S"/>
 
   <OPERATOR name="Splus" matrixelement="sqrt(S*(S+1)-Sz*(Sz+1))">
     <CHANGE quantumnumber="Sz" change="1"/>
   </OPERATOR>
 
   <OPERATOR name="Sminus" matrixelement="sqrt(S*(S+1)-Sz*(Sz-1))">
     <CHANGE quantumnumber="Sz" change="-1"/>
   </OPERATOR>
 
   <OPERATOR name="Sz" matrixelement="Sz"/>  
 </SITEBASIS>
 <SITEBASIS name="boson">
   <PARAMETER name="Nmax" default="infinity"/>
   <QUANTUMNUMBER name="N" min="0" max="Nmax"/>
 
   <OPERATOR name="bdag" matrixelement="sqrt(N+1)">
     <CHANGE quantumnumber="N" change="1"/>
   </OPERATOR>
   
   <OPERATOR name="b" matrixelement="sqrt(N)">
     <CHANGE quantumnumber="N" change="-1"/>
   </OPERATOR>
   
 <OPERATOR name="n" matrixelement="N"/>
 </SITEBASIS>


Complex site operators

ユニークな手法で量子数を変化するシンプルなサイト演算子に加え、Sxスピン演算子のようなより複雑なサイト演算子も構築が可能です。

 <SITEOPERATOR name="Sx" site="i">
   1/2*(Splus(i)+Sminus(i))
 </SITEOPERATOR>

次の例はbosonic模型の二重占有演算子です。

 <SITEOPERATOR name="double_occupancy" site="x">
   n(x)*(n(x)-1)/2
 </SITEOPERATOR>

これらの演算子の定義はどんなサイトにも適用が可能です。括弧で演算子に与えられる議論はサイトの記号的な名前です。そして、それはSITEOPERATOR要素でサイト属性によって指定されます。

Complex bond operators

"bond"演算子の定義についても、先ほどと同様に設定が可能です。以下の例を参照してください。

 <BONDOPERATOR name="exchange" source="x" target="y">
   Sz(x)*Sz(y)+1/2*(Splus(x)*Sminus(y)+Sminus(x)*Splus(y))
 </BONDOPERATOR>
 <BONDOPERATOR name="fermion_hop" source="x" target="y">
   cdag_up(x)*c_up(y)+cdag_up(y)*c_up(x)+cdag_down(x)*c_down(y)+cdag_down(y)*c_down(x)
 </BONDOPERATOR>

2つのサイトがあり、sourcetargetでラベリングされています。これらの演算子はハミルトニアンや物理量計算で使われます。

ハミルトニアンの取扱い

以下の記述にあるようにモデルのハミルトニアンを表現します。簡単なハードコア・ボゾンモデルの例を示します。

 <HAMILTONIAN name="hardcore boson">
   <PARAMETER name="mu" default="0"/>
   <PARAMETER name="t" default="1"/>
   <PARAMETER name="t'" default="1"/>
   <BASIS ref="hardcore boson"/>
   <SITETERM type="0">
     -mu*n
   </SITETERM> 
   <BONDTERM type="0" source="i" target="j">
     -t*(bdag(i)*b(j)+bdag(j)*b(i)))
   </BONDTERM>
   <BONDTERM type="1" source="i" target="j">
     -t'*(bdag(i)*b(j)+bdag(j)*b(i)))
   </BONDTERM>
 </HAMILTONIAN>

最初に、カップリング定数のような値のデフォルト値は<PARAMETER>要素を使って定義されます。

次に、モデルに使われる基底<BASIS>を定義します。ref属性を用いて参照することも可能です。

ハミルトニアンの項はサイトの格子、結合といった情報によって定義されます。各<SITETERM><BONDTERM>要素はそれぞれのtype属性を持ちます。このtype属性はいくつかの項目をもつサイト(ボンド)のタイプを指定します。格子の設定でも同じtypeによって定義されます。type属性を省略すると、すべてのサイト、ボンドは特に何も設定されません。

<SITETERM>要素は単一サイトに関連したハミルトニアンの項目を含んでいます。上記の例のように、項目muはパラメータmuを、項目nは演算子を参照しています。

<BONDTERM>要素は、演算子が異なる2つのサイトを参照するのに必要な定義です。これは、サイトiで動作するように例えば、(I)Nのように、演算子の後の括弧内にサイトのインデックスを追加することによって行われます。ソースとターゲットの属性は、サイト(この例ではiとj)を指定するために使用する変数を指定します。

<!_-To simplify writing of the Hamltonians, the pre-defined site and bond operators above can be used. E.g. for a transverse field spin model we can use the Sx and exchange operators defined above:--> ハミルトニアンをシンプルに表現するために、上記の用にあらかじめ定義したサイト、ボンド演算子を使用することができます。例えば、横磁場スピンモデルではSxexchange演算子をつぎのように定義します。

 <HAMILTONIAN name="spin">
   <PARAMETER name="J" default="1"/>
   <PARAMETER name="h" default="0"/>
   <PARAMETER name="Gamma" default="0"/>
   <BASIS ref="spin"/>
   <SITETERM site="i">
     -h*Sz(i)-Gamma*Sx(i))
   </SITETERM> 
   <BONDTERM source="i" target="j">
     J*exchange(i,j)
   </BONDTERM>
 </HAMILTONIAN>

サイトタイプに依存する結合条件のいずれかを与える、最初の例のように指定することができるタイプの型に置き換えられます。結合定数の名前に#ワイルドカード文字を使用して再度サイトやボンドの項目の適用可能性を再構造化、または属性をのようにサイトの:

 <HAMILTONIAN name="spin">
   <PARAMETER name="J" default="1"/>
   <PARAMETER name="h" default="0"/>
   <PARAMETER name="Gamma" default="0"/>
   <BASIS ref="spin"/>
   <SITETERM site="i">
     <PARAMETER name="h#" default="h"/>
     <PARAMETER name="Gamma#" default="Gamma"/>
     -h#*Sz(i)-Gamma#*Sx(i))
   </SITETERM> 
   <BONDTERM source="i" target="j">
     <PARAMETER name="J#" default="J"/>
     J#*exchange(i,j)
   </BONDTERM>
 </HAMILTONIAN>

タイプ0のボンド上で、結合をJ0, h0Gamma0、タイプ1のボンド上でGamma1、、、と定義しました。

さらに複雑な項への拡張として、3、4サイトでの設定は現在準備中です。このような項目についてはALPSライブラリでサポート予定です。