Difference between revisions of "ALPS 2 Tutorials:MC-02 Susceptibilities/ja"
(→1次元量子ハイゼンベルグ梯子) |
(→コマンドラインでの計算の実行) |
||
Line 43: | Line 43: | ||
<!--To extract the results we recommend the Python evaluation tools discussed below--> | <!--To extract the results we recommend the Python evaluation tools discussed below--> | ||
計算結果の解析は、後述するPython解析ツールの利用を推奨します。 | 計算結果の解析は、後述するPython解析ツールの利用を推奨します。 | ||
+ | |||
+ | <!--追記分 | ||
+ | 次に、"spinmc_evaluate"モジュールを用いて熱力学的観測値などに関する様々な物理量を求めます。シミュレーションで得られた結果を解析し、出力結果をXMLファイルとして生成します。 | ||
+ | |||
+ | $ spinmc_evaluate --write-xml param1a.taskp[1-6].out.xml | ||
+ | |||
+ | 出力結果を格納したファイルは、上書きされますので注意してください。spinmc_evaluateによって得られる物理量は次の通りです。 | ||
+ | |||
+ | *Binder Cumulant | ||
+ | *Binder Cumulant U2 | ||
+ | *Binder Cumulant slope | ||
+ | *Connected Susceptibility | ||
+ | *Magnetization^2 slope | ||
+ | *Magnetization^4 slope | ||
+ | *Specific Heat | ||
+ | |||
+ | 物理量に関するプロットをおこないたい場合は、後述するPython解析ツールを利用してください。 | ||
+ | |||
+ | --> | ||
=== Pythonを使った計算の実行 === | === Pythonを使った計算の実行 === |
Revision as of 04:15, 28 March 2012
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
このチュートリアルでは古典的、量子ハイゼンベルグモデルの磁化率や梯子鎖の計算手法を述べます。このチュートリアルで紹介するパラメータファイル、Pythonスクリプト、Vistrailsファイルはmc-02-susceptibilitiesディレクトリにあります。
1次元古典ハイゼンベルグモデルの磁化率
1次元古典ハイゼンベルグ鎖
コマンドラインでの計算の実行
parm2a は、クラスターアップデートを用いた温度(T=0.05,0.1,...1.5)、60サイトの一次元鎖の古典ハイゼンベルグモンテカルロシミュレーションのパラメータファイルです。コマンドラインでの計算の実行にあたり、最初にパラメータファイルを生成します。
LATTICE="chain lattice" L=60 J=-1 THERMALIZATION=15000 SWEEPS=500000 UPDATE="cluster" MODEL="Heisenberg" {T=0.05;} {T=0.1;} {T=0.2;} {T=0.3;} {T=0.4;} {T=0.5;} {T=0.6;} {T=0.7;} {T=0.8;} {T=0.9;} {T=1.0;} {T=1.25;} {T=1.5;}
そして、次のコマンドで計算を実行させます。
parameter2xml parm2a spinmc --Tmin 10 --write-xml parm2a.in.xml
計算結果の解析は、後述するPython解析ツールの利用を推奨します。
Pythonを使った計算の実行
Pythonを使った計算の実行方法を記述したスクリプトtutorial2a.pyを使用します。スクリプトの最初の部分で計算モデルや、入力ファイルのインポートをおこないます。
import pyalps import matplotlib.pyplot as plt import pyalps.plot
parms = [] for t in [0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.25, 1.5, 1.75, 2.0]: parms.append( { 'LATTICE' : "chain lattice", 'T' : t, 'J' : -1 , 'THERMALIZATION' : 10000, 'SWEEPS' : 500000, 'UPDATE' : "cluster", 'MODEL' : "Heisenberg", 'L' : 60 } )
計算の実行には、Python起動ツールalpspythonやvispythonを使用します。
次に、ジョブファイルをXML形式に変換します。
input_file = pyalps.writeInputFiles('parm2a',parms) pyalps.runApplication('spinmc',input_file,Tmin=5,writexml=True)
コマンドラインでの実行方法で計算した結果と同じアウトプットファイルが得られます。
シミュレーションの評価とPythonを使ったプロット
計算結果を解析し、温度の関数としての磁化率のプロットをおこないます。出力ファイルからparm2aを用いて、該当の計算結果データを採取します。このスクリプトはtutorial2a.pyを参照してください。
data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm2a'),'Susceptibility') susceptibility = pyalps.collectXY(data,x='T',y='Susceptibility')
プロットをおこなうために、pyalps.plot.plotを使用し、タイトルやラベルなどの設定をおこないます。
plt.figure() pyalps.plot.plot(susceptibility) plt.xlabel('Temperature $T/J$') plt.ylabel('Susceptibility $\chi J$') plt.ylim(0,0.22) plt.title('Classical Heisenberg chain') plt.show()
Vistrailsを使った計算の実行
Vistrailsを用いた計算の実行のチュートリアルmc-02-susceptibilities.vtを開き、"Classical Heisenberg chain"のワークフローを見てください。入力ファイルの生成、計算の実行、計算の出力を設定する"Execute"をクリックしてください。
1次元古典ハイゼンベルグ梯子 =
Heisenberg梯子も同じような手順で求めることができます。主な差異(parm2b*参照)はLATTICEの変化とJ0,J1の2つのカップリングです。
コマンドラインでの計算実行で、最初にパラメータファイルparm2b を生成します。
LATTICE="ladder" L=60 J0=-1 J1=-1 THERMALIZATION=15000 SWEEPS=150000 UPDATE="cluster" MODEL="Heisenberg" ...
入力ファイルは上記のようになり、シミュレーション自体はこれまで紹介してきた方法と同じです。 上記の一連のハイゼンベルグ梯子計算のPythonスクリプト tutorial2b.pyの修正点は、次の3点です。
- ファイル名param2a:parm2b
- パラメータLATTICE:ladder
- J0、J1カップリングの設定
Vistrailsを用いた計算の実行のチュートリアルmc-02-susceptibilities.vtを開き、"Classical Heisenberg ladder"のワークフローを参照、実行してください。
質疑
- 磁化率は格子にどのような関係があるかわかりますか?
- 大規模格子や異なる格子(立方格子、三角格子等、lattices.xmlを見てください)でどうなるか計算してみてください。
1次元量子ハイゼンベルグモデルの磁化率
1次元量子ハイゼンベルグ鎖
量子モデルによる計算では、計算モデルにALPSライブラリを使用します。計算プログラムはALPS looper QMCコードを用います。量子モデルでは負符号問題に注意してください。
コマンドラインでの計算の実行
コマンドラインでの計算実行用のパラメータファイルparm2c を作成します。
LATTICE="chain lattice" MODEL="spin" local_S=1/2 L=60 J=1 THERMALIZATION=15000 SWEEPS=150000 ALGORITHM="loop" {T=0.05;} {T=0.1;} {T=0.2;} {T=0.3;} {T=0.4;} {T=0.5;} {T=0.6;} {T=0.7;} {T=0.75;} {T=0.8;} {T=0.9;} {T=1.0;} {T=1.25;} {T=1.5;} {T=1.75;} {T=2.0;}
looperコードはアルゴリズムを選択するALGORITHMパラメータの設定が必要です。 実行は次のようにおこないます。
parameter2xml parm3a loop parm3a.in.xml
Pythonを使った実行方法
次にPythonスクリプトtutorial2c.pyを用いた計算の実行方法を述べます。サンプル計算ではコマンドラインでの計算実行で用いたparm2cを使用します。
input_file = pyalps.writeInputFiles('parm2c',parms) pyalps.runApplication('loop',input_file)
シミュレーションの評価とPython、Vistrailsを使ったプロット方法
図のプロット方法はタイトルとファイル名以外は前に紹介したものと同じです。こちらのコードtutorial2c.pyを参考にしてください。
Vistrailsを使用した計算の実行チュートリアルファイルmc-02-susceptibilities.vtを開き、"chain magnetization"のワークフローを見てください。入力ファイルの生成、計算の実行、計算の出力を設定する"Execute"をクリックしてください。
1次元量子ハイゼンベルグ梯子
インプットファイルと実行スクリプトを精査してください。 コマンドラインでの実行方法、パラメータファイルparm2d 、Pythonスクリプトtutorial2d.py、Vistrailsチュートリアルファイルmc-02-susceptibilities.vtになります。
シミュレーションの統合
最後に、4つのシミュレーションを統合し実行する方法を紹介します。
Python
4種類のシミュレーション実行後、スクリプトtutorial2full.pyを使用してみてください。
全計算結果をロードし、データ構造をフラットにします。
import pyalps import matplotlib.pyplot as plt import pyalps.plot
data = pyalps.loadMeasurements(pyalps.getResultFiles(),'Susceptibility') data = pyalps.flatten(data)
温度の関数としての磁化率を収集し、格子、モデルパラメータの値に応じてデータを設定します。
susceptibility = pyalps.collectXY(data,x='T',y='Susceptibility',foreach=['MODEL','LATTICE'])
次に、Pythonコードで実用的な入出力ラベル(名称)の設定をおこないます。
for s in susceptibility: if s.props['LATTICE']=='chain lattice': s.props['label'] = "chain" elif s.props['LATTICE']=='ladder': s.props['label'] = "ladder" if s.props['MODEL']=='spin': s.props['label'] = "quantum " + s.props['label'] elif s.props['MODEL']=='Heisenberg': s.props['label'] = "classical " + s.props['label']
最後に、
plt.figure() pyalps.plot.plot(susceptibility) plt.xlabel('Temperature $T/J$') plt.ylabel('Susceptibility $\chi J$') plt.ylim(0,0.25) plt.legend() plt.show()
Vistrails
上記と同じプロットはVistraisでも容易に作成できます。ファイルmc-02-susceptibilities.vtのラベル"all combined"です。
質疑
- 古典計算と量子計算の間に違いはありますか?
- 格子によって磁化率はどうかわりますか?
- なぜ磁化率が変わるのかわかりますか?
参考までに、次図は、4つの計算結果をまとめてプロットしたものです。
© 2003-2010 by Simon Trebst, Fabien Alet, Matthias Troyer, Synge Todo, and Emanuel Gull