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

From ALPS
Jump to: navigation, search
(コマンドラインでのシミュレーションの起動と実行)
(コマンドラインでのシミュレーションの起動と実行)
Line 42: Line 42:
 
  mpirun -np 8 spinmc --mpi  --Tmin 10 --write-xml parm1a.in.xml  
 
  mpirun -np 8 spinmc --mpi  --Tmin 10 --write-xml parm1a.in.xml  
  
<!--(In the following examples we will refer to the single processor commands only.)
 
By setting the argument --Tmin 10 the scheduler initially checks every 10 seconds if the simulation is finished (the time is then dynamically adapted by the scheduler).-->
 
 
(以下のサンプル例ではシングルプロセッサーによる実行に対応します。)上記コマンド例の引数にある"Tmin 10"はシミュレーションが終了したかどうか10秒毎に確認する設定です。(時間はスケジューラーによって運用されます。)
 
(以下のサンプル例ではシングルプロセッサーによる実行に対応します。)上記コマンド例の引数にある"Tmin 10"はシミュレーションが終了したかどうか10秒毎に確認する設定です。(時間はスケジューラーによって運用されます。)
  
Line 50: Line 48:
 
  spinmc --Tmin 10 --write-xml parm1a.out.xml
 
  spinmc --Tmin 10 --write-xml parm1a.out.xml
  
<!--The option "--write-xml" tells the simulation to store the results of each simulation also in an XML output file (parm1a.task[1-5].out.xml) which you can open from the job description file parm1a.out.xml using your XML browser or alternatively by converting the output to a text file using one of the following commands:-->
 
 
"--write-xml"は計算結果をXMLファイルに格納するオプションです。上記の計算の場合、parm1a.task[1-5].out.xmlにそれぞれ出力されます。次の用にfirefoxなどのブラウザを用いて計算結果を確認することができます。また、convert2textコマンドでXML形式からテキストへ変換ができます。
 
"--write-xml"は計算結果をXMLファイルに格納するオプションです。上記の計算の場合、parm1a.task[1-5].out.xmlにそれぞれ出力されます。次の用にfirefoxなどのブラウザを用いて計算結果を確認することができます。また、convert2textコマンドでXML形式からテキストへ変換ができます。
  
Line 56: Line 53:
 
  convert2text parm1a.out.xml
 
  convert2text parm1a.out.xml
  
<!--The results of a single task stored for example in parm1a.task1.out.xml can be displayed by using either of the following commands:-->
 
 
計算結果は例としてparm1a.task1.out.xmlに出力され、様々な方法で中身を確認することができます。
 
計算結果は例としてparm1a.task1.out.xmlに出力され、様々な方法で中身を確認することができます。
  
Line 64: Line 60:
 
* テキスト (Linux or MacOS): <tt>convert2text parm1a.task1.out.xml</tt>
 
* テキスト (Linux or MacOS): <tt>convert2text parm1a.task1.out.xml</tt>
  
<!--Note though that writing XML files can be very slow if you perform many measurements and it is then better to work just with the binary results in the HDF5 files.-->
 
 
多くの計算や大規模な計算をおこなう場合は、XMLファイルへの書き込みに膨大な時間を要することがあります。ALPSでは計算結果をバイナリ(HDF5形式)で出力させることも可能です。
 
多くの計算や大規模な計算をおこなう場合は、XMLファイルへの書き込みに膨大な時間を要することがあります。ALPSでは計算結果をバイナリ(HDF5形式)で出力させることも可能です。
  
<!--To obtain more detailed information on the simulation runs (e.g. to check the convergence of errors) you can convert the run files of the tasks (parm1a.task[1-6].out.run1) into XML files by typing-->
 
 
例えば収束エラー等の詳細情報を取得するには、次のように入力し、実行タスクファイル(parm1a.task[1-6].out.run1)をXMLファイルに変換することができます。
 
例えば収束エラー等の詳細情報を取得するには、次のように入力し、実行タスクファイル(parm1a.task[1-6].out.run1)をXMLファイルに変換することができます。
  
 
  convert2xml parm1a.task*.out.run1
 
  convert2xml parm1a.task*.out.run1
  
<!--which will generate the XML output files parm1a.task[1-6].out.run1.xml which you can open using your XML browser or alternatively convert to text using either of the commands you used to view the other XML files before.-->
 
 
XML出力ファイル(parm1a.task[1-6].out.run1.xml)が得られます。ブラウザやテキストに変換(convert2text利用)して確認してください。
 
XML出力ファイル(parm1a.task[1-6].out.run1.xml)が得られます。ブラウザやテキストに変換(convert2text利用)して確認してください。
  
<!--Look at all six tasks and observe that for large lattices the errors no longer converge by studying the binning analysis in the files parm1a.task[1-6].out.run1.xml . To create plots we recommend to use the Python tools described below.-->
 
 
6つのタスクファイル(parm1a.task[1-6].out.run1.xml)で大格子での結果をみると、収束しないことがわかります。結果を図示するには、以下のPythonのツールを利用することをお勧めします。
 
6つのタスクファイル(parm1a.task[1-6].out.run1.xml)で大格子での結果をみると、収束しないことがわかります。結果を図示するには、以下のPythonのツールを利用することをお勧めします。
  
Line 81: Line 73:
 
次に、"spinmc_evaluate"モジュールを用いて熱力学的観測値などに関する様々な物理量を求めます。シミュレーションで得られた結果を解析し、出力結果をXMLファイルとして生成します。
 
次に、"spinmc_evaluate"モジュールを用いて熱力学的観測値などに関する様々な物理量を求めます。シミュレーションで得られた結果を解析し、出力結果をXMLファイルとして生成します。
  
  $ spinmc_evaluate --write-xml param1a.taskp[1-6].out.xml
+
  $ spinmc_evaluate --write-xml parm1a.task[1-6].out.xml
  
 
出力結果を格納したファイルは、上書きされますので注意してください。spinmc_evaluateによって得られる物理量は次の通りです。
 
出力結果を格納したファイルは、上書きされますので注意してください。spinmc_evaluateによって得られる物理量は次の通りです。
Line 92: Line 84:
 
*Magnetization^4 slope
 
*Magnetization^4 slope
 
*Specific Heat
 
*Specific Heat
 +
 +
シミュレーション出力ファイルには、全計算がおこなわれた後の計算結果がだけが格納されています。ここのモンテカルロステップでの計算の詳細は、各チェックポイント情報を格納しているチェックポイントファイルをXML形式に変換することによって知ることが可能です。convert2xmlツールを次のように使用します。
 +
 +
 convert2xml parm1a.task[1-6].out.run
 +
 +
この操作によってモンテカルロ計算から摘出された情報を含む、XML形式のタスクファイルparm1a.task[1-6].out.run.xmlが生成されます。
  
 
物理量に関するプロットをおこないたい場合は、後述するPython解析ツールを利用してください。
 
物理量に関するプロットをおこないたい場合は、後述するPython解析ツールを利用してください。

Revision as of 03:49, 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のツールを利用することをお勧めします。

次に、"spinmc_evaluate"モジュールを用いて熱力学的観測値などに関する様々な物理量を求めます。シミュレーションで得られた結果を解析し、出力結果をXMLファイルとして生成します。

$ spinmc_evaluate --write-xml parm1a.task[1-6].out.xml

出力結果を格納したファイルは、上書きされますので注意してください。spinmc_evaluateによって得られる物理量は次の通りです。

  • Binder Cumulant
  • Binder Cumulant U2
  • Binder Cumulant slope
  • Connected Susceptibility
  • Magnetization^2 slope
  • Magnetization^4 slope
  • Specific Heat

シミュレーション出力ファイルには、全計算がおこなわれた後の計算結果がだけが格納されています。ここのモンテカルロステップでの計算の詳細は、各チェックポイント情報を格納しているチェックポイントファイルをXML形式に変換することによって知ることが可能です。convert2xmlツールを次のように使用します。

 convert2xml parm1a.task[1-6].out.run

この操作によってモンテカルロ計算から摘出された情報を含む、XML形式のタスクファイルparm1a.task[1-6].out.run.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