ALPS 2 Tutorials:MC-01 Autocorrelations/ja
Languages: |
English • 日本語 (ja) • 繁體中文 (zh-tw) • 简体中文 (zh) |
まず最初に、モンテカルロシミューレーションの重要なトピックスである自己相関時間について説明します。
チュートリアルで紹介する入力ファイルはmc-01-autocorrelations で入手可能です。
Contents
局所更新(Local Updates)
Isingモデルでの局所更新の計算を例にします。有限平面格子(L=2,4,...48)、臨界温度TC=2.269186の条件でイジングモデルのシミュレーションをおこないます。 このチュートリアルは、コマンドライン、Python、Vistrailsを使用することができます。小規模でPCでの計算であれば、Python、Vistrailsを、クラスタ等を使用した大規模計算であればコマンドラインでの利用をお勧めします。
コマンドラインでのシミュレーションの起動と実行
コマンドラインでの計算の実行にあたり、まず最初にパラメータファイルを作成しますparm1a。
LATTICE="square lattice" T=2.269186 J=1 THERMALIZATION=10000 SWEEPS=50000 UPDATE="local" MODEL="Ising" {L=2;} {L=4;} {L=8;} {L=16;} {L=32;} {L=48;}
シミュレーション実行にはこれらのパラメータ群をXML形式によるジョブファイルへ変換する必要があります。次のようにタイプします。
parameter2xml parm1a
それぞれのL用に、6種類のタスクファイルと各タスクについて制御するparm1a.in.xmlが生成されます。中身の記述をブラウザーを用いて確認してみてください。 シミュレーションは、シングルプロセッサーでの実行は、次のように記述します。
spinmc --Tmin 10 --write-xml parm1a.in.xml
MPIを用いた並列実行では、次の用に指定します。(例では8並列)
mpirun -np 8 spinmc --mpi --Tmin 10 --write-xml parm1a.in.xml
(以下のサンプル例ではシングルプロセッサーによる実行に対応します。)上記コマンド例の引数にある"Tmin 10"はシミュレーションが終了したかどうか10秒毎に確認する設定です。(時間はスケジューラーによって運用されます。)
また、計算が途中で中断した場合(Ctrl-CやCPUリミット時間による計算の強制終了など)、次の用にXMLoutputファイルを使用して、計算の再開が可能です。
spinmc --Tmin 10 --write-xml parm1a.out.xml
"--write-xml"は計算結果をXMLファイルに格納するオプションです。上記の計算の場合、parm1a.task[1-5].out.xmlにそれぞれ出力されます。次の用にfirefoxなどのブラウザを用いて計算結果を確認することができます。また、convert2textコマンドでXML形式からテキストへ変換ができます。
firefox ./parm1a.out.xml convert2text parm1a.out.xml
計算結果は例としてparm1a.task1.out.xmlに出力され、様々な方法で中身を確認することができます。
- Linux: firefox ./parm1a.task1.out.xml
- MacOS: open -a safari parm1a.task1.out.xml
- Windows:"C:\Program Files\Internet Explorer\iexplore.exe" parm1a.task1.out.xml
- テキスト (Linux or MacOS): convert2text parm1a.task1.out.xml
多くの計算や大規模な計算をおこなう場合は、XMLファイルへの書き込みに膨大な時間を要することがあります。ALPSでは計算結果をバイナリ(HDF5形式)で出力させることも可能です。
例えば収束エラー等の詳細情報を取得するには、次のように入力し、実行タスクファイル(parm1a.task[1-6].out.run1)をXMLファイルに変換することができます。
convert2xml parm1a.task*.out.run1
XML出力ファイル(parm1a.task[1-6].out.run1.xml)が得られます。ブラウザやテキストに変換(convert2text利用)して確認してください。
6つのタスクファイル(parm1a.task[1-6].out.run1.xml)で大格子での結果をみると、収束しないことがわかります。結果を図示するには、以下の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を用いたシミュレーションの実行は、スクリプトtutorial1a.pyを使用します。スクリプトの最初の部分は計算モデルや、入力ファイルのインポートをおこないます。
import pyalps import matplotlib.pyplot as plt import pyalps.pyplot
parms = [] for l in [2,4,8,16,32,48]: parms.append( { 'LATTICE' : "square lattice", 'T' : 2.269186, 'J' : 1 , 'THERMALIZATION' : 10000, 'SWEEPS' : 50000, 'UPDATE' : "local", 'MODEL' : "Ising", 'L' : l } )
計算の実行には、Python起動ツールvispython、alpspythonを使用します。
次に、ジョブファイルをXML形式に変換します。
input_file = pyalps.writeInputFiles('parm1a',parms)
計算を実行します。
pyalps.runApplication('spinmc',input_file,Tmin=5,writexml=True)
writexml=Trueは、計算結果をXMLファイルに出力させるオプションです。'spinmcは計算アプリケーションの名称、input_fileはインプットファイルのパス、Tmin=5はチェックポイントを採取する時間間隔(秒)になります。
出力ファイルから得られる磁化値のビニング解析は次のように指定します。
binning = pyalps.loadBinningAnalysis(pyalps.getResultFiles(prefix='parm1a'),'|Magnetization|') binning = pyalps.flatten(binning)
プロットのために、各データにラベリングをおこないます。
for dataset in binning: dataset.props['label'] = 'L='+str(dataset.props['L'])
最終的に、ビニング解析の結果が図示されます。
plt.figure() plt.xlabel('binning level') plt.ylabel('Error of |Magnetization|') pyalps.pyplot.plot(binning) plt.legend() plt.show()
各システムサイズ毎にプロットするために、全データについて繰り返し処理をおこないます。
for dataset in binning: plt.figure() plt.title('Binning analysis for L='+str(dataset.props['L'])) plt.xlabel('binning level') plt.ylabel('Error of |Magnetization|') pyalps.pyplot.plot(dataset)
plt.show()
最終的に、大きいサイズで収束しないことが明確に図示されます。
Vistrailsでのシミュレーションの起動と実行
Vistrailsを用いた計算の実行のチュートリアルmc-01-autocorrelations.vtを開き、"local updates"のワークフローを見てください。入力ファイルの生成、計算の実行、計算の出力を設定する"Execute"をクリックしてください。
次のような図が得られます。大規模サイズの系では収束できていないことが分かります。
クラスターアップデート
We next repeat the simulations, but using cluster updates. We want to change three parameters: ローカルアップデートに引き続き、クラスタアップデートに関するシミュレーションの説明です。計算パラメータの3点を次のように修正します。
THERMALIZATION | 1000 |
SWEEPS | 100000 |
UPDATE | "cluster" |
計算を実行するには、次のいずれかの方法で、上記の同様の手順に従ってください。
- コマンドラインでの入力ファイルparm1b
- Pythonスクリプトtutorial1b.py
- Vistrailsのワークフローを用いた方法mc-01-autocorrelations.vt
質疑
- エラーは収束されていますか?(上記に述べたように実行ファイルを確認してみてください。)
- なぜ自己相関時間が長いとエラーの収束が遅くなるか説明できますか?
- 自己相関時間はどのようなシステムパラメータに依存しますか?入力ファイルのパラメータを確認してみてください。
- なぜクラスタアップデートの方がローカルアップデートよりも効率できか説明できますか?
© 2003-2010 by Simon Trebst, Fabien Alet, Matthias Troyer, Synge Todo, and Emanuel Gull