ALPS 2 Tutorials:MC-05 Bosons/ja

From ALPS
Revision as of 09:38, 5 March 2012 by Kota (talk | contribs) (コマンドラインでのシミュレーションの準備と実行)

Jump to: navigation, search


Bose-Hubbardモデルでの量子相転移

このチュートリアルでは、ワームQMCコードを用いたBose-Hubbardモデルでの量子相転移計算方法を紹介します。

Bose-Hubbardモデルでの超流動密度

コマンドラインでのシミュレーションの準備と実行

パラメータファイルparm5a は、Bose-Hubbardモデルの量子モンテカルロシミュレーションの設定をしています。4×4の正方格子、パラメータ(t=0.01,0.02, ...0.1)でのワームアルゴリズムの使用を設定しています。


 LATTICE="square lattice";
 L=4;
 MODEL="boson Hubbard";
 NONLOCAL=0;
 U    = 1.0;
 mu   = 0.5;
 Nmax = 2;
 T = 0.1;
 SWEEPS=500000;
 THERMALIZATION=10000;
 { t=0.01; }
 { t=0.02; }
 { t=0.03; }
 { t=0.04; }
 { t=0.05; }
 { t=0.06; }
 { t=0.07; }
 { t=0.08; }
 { t=0.09; }
 { t=0.1; }


以下の標準的な計算手順に従い、量子ワームコードを用いて計算することができます。

parameter2xml parm5a
worm --Tmin 10 --write-xml parm5a.in.xml

Pythonを使用したシミュレーションの準備と実行

Pythonで計算の実行を設定します。Pythonスクリプトtutorial5a.pyを参照してください。

import pyalps
import matplotlib.pyplot as plt
import pyalps.pyplot
parms = []
for t in [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1]:
   parms.append(
       { 
         'LATTICE'        : "square lattice", 
         'MODEL'          : "boson Hubbard",
         'T'              : 0.1,
         'L'              : 4 ,
         't'              : t ,
         'mu'             : 0.5,
         'U'              : 1.0 ,
         'NONLOCAL'       : 0 ,
         'Nmax'           : 2 ,
         'THERMALIZATION' : 10000,
         'SWEEPS'         : 500000
       }
   )


alpspythonやvispythonを用いてPythonスクリプトを実行します。

次に、ジョブファイルをXML形式に変換し、ワームシミュレーションを実行します。

input_file = pyalps.writeInputFiles('parm5a',parms)
res = pyalps.runApplication(worm',input_file,Tmin=5)

コマンドラインでおこなった計算結果と同じ出力ファイルが得られます。

Pythonを使用したシミュレーションの準備と実行

Pythonで計算の実行を設定します。Pythonスクリプトtutorial5a.pyを参照してください。

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm5a'),'Stiffness')
magnetization = pyalps.collectXY(data,x='h',y='Stiffness')


プロットにはpyalps.pyplot.plotを使用します。適宜実用的なラベル、タイトル、Y軸の範囲を設定してください。

plt.figure()
pyalps.pyplot.plot(rhos)
plt.xlabel('Hopping $t/U$')
plt.ylabel('Superfluid density $\\rho _s$')
plt.show()

Vistrailsを使用したシミュレーションの準備と実行

Vistrailsを用いた計算の実行のチュートリアルmc-05-bosons.vtを開き、"L=4"のワークフローを見てください。入力ファイルの生成、計算の実行、計算の出力を設定する"Execute"をクリックしてください。

質疑

  • 相転移のサインは何でしょうか?

モット絶縁体から超流動体への相転移

次に、相転移の箇所をより正確に求めるための計算方法を紹介します。様々なサイズの二次元正方行列を用います。\rho_s*Lを注視してください。

コマンドラインでのシミュレーションの準備と実行

チュートリアルのパラメータファイルparm5bです。このサンプルでは、L=4,6,8のシステムサイズで相転移点を求めます。

LATTICE="square lattice";
MODEL="boson Hubbard";
NONLOCAL=0;
U    = 1.0;
mu   = 0.5;
Nmax = 2;
T = 0.05;
SWEEPS=600000;
THERMALIZATION=150000;
{ L=4; t=0.045; }
{ L=4; t=0.05; }
{ L=4; t=0.0525; }
{ L=4; t=0.055; }
{ L=4; t=0.0575; }
{ L=4; t=0.06; }
{ L=4; t=0.065; }
{ L=6; t=0.045; }
{ L=6; t=0.05; }
{ L=6; t=0.0525; }
{ L=6; t=0.055; }
{ L=6; t=0.0575; }
{ L=6; t=0.06; }
{ L=6; t=0.065; }
{ L=8; t=0.045; }
{ L=8; t=0.05; }
{ L=8; t=0.0525; }
{ L=8; t=0.055; }
{ L=8; t=0.0575; }
{ L=8; t=0.06; }
{ L=8; t=0.065; }

計算を実行させ、Pythonを用いて結果解析します。

Pythonを使用したシミュレーションの準備と実行と結果解析

Pythonで計算の実行を設定します。Pythonスクリプトtutorial5b.pyを参照してください。最初に、超流動密度(Stiffness)を異なる3つのデータセットにロードします。各サイズはLです。

data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm5b'),'Stiffness')
rhos = pyalps.collectXY(data,x='t',y='Stiffness',foreach=['L'])

次に、サイズLを各データにかけます。

for s in rhos:
  s.y = s.y * float(s.props['L'])

最後に、次の手順でプロットします。

plt.figure()
pyalps.pyplot.plot(rhos)
plt.xlabel('Hopping $t/U$')
plt.ylabel('$\\rho _sL$')
plt.legend()
plt.title('Scaling plot for Bose-Hubbard model')
plt.show()


Vistrailsを使用したシミュレーションの準備と実行

Vistrailsを用いた計算の実行のチュートリアルmc-05-bosons.vtを開き、"scaling plot"のワークフローを見てください。入力ファイルの生成、計算の実行、計算の出力を設定する"Execute"をクリックしてください。。プロットの結果を次に示します。

vt_id:5 version:53

質疑

  • 熱力学的極限において量子相転移点どのように決定しましたか?
  • ヒント)superfluid stiffnessの計算結果にシステムサイズLを乗算してみてください。
  • (t/U)c=0.05974の厳密解と比較してみてください。
  • なぜモンテカルロ計算では臨界点を過大評価するのでしょうか?

© 2003-2010 by Simon Trebst, Synge Todo and Matthias Troyer