Difference between revisions of "ALPS 2 Tutorials:MC-01 Autocorrelations/ja"

From ALPS
Jump to: navigation, search
(コマンドラインでのシミュレーションの起動と実行)
(コマンドラインでのシミュレーションの起動と実行)
Line 93: Line 93:
 
*Specific Heat
 
*Specific Heat
  
計算結果の解析は、後述するPython解析ツールの利用を推奨します。
+
物理量に関するプロットをおこないたい場合は、後述するPython解析ツールを利用してください。
  
 
-->
 
-->

Revision as of 03:10, 28 March 2012


まず最初に、モンテカルロシミューレーションの重要なトピックスである自己相関時間について説明します。 チュートリアルで紹介する入力ファイルはmc-01-autocorrelations で入手可能です。


局所更新(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のツールを利用することをお勧めします。


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起動ツールvispythonalpspythonを使用します。

次に、ジョブファイルを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"をクリックしてください。

次のような図が得られます。大規模サイズの系では収束できていないことが分かります。


vt_id:2 version:225


クラスターアップデート

We next repeat the simulations, but using cluster updates. We want to change three parameters: ローカルアップデートに引き続き、クラスタアップデートに関するシミュレーションの説明です。計算パラメータの3点を次のように修正します。

THERMALIZATION 1000
SWEEPS 100000
UPDATE "cluster"


計算を実行するには、次のいずれかの方法で、上記の同様の手順に従ってください。


質疑

  • エラーは収束されていますか?(上記に述べたように実行ファイルを確認してみてください。)
  • なぜ自己相関時間が長いとエラーの収束が遅くなるか説明できますか?
  • 自己相関時間はどのようなシステムパラメータに依存しますか?入力ファイルのパラメータを確認してみてください。
  • なぜクラスタアップデートの方がローカルアップデートよりも効率できか説明できますか?


© 2003-2010 by Simon Trebst, Fabien Alet, Matthias Troyer, Synge Todo, and Emanuel Gull