Difference between revisions of "ALPS 2 Tutorials:MC-02 Susceptibilities/ja"

From ALPS
Jump to: navigation, search
(コマンドラインでの計算の実行)
(コマンドラインでの計算の実行)
Line 47: Line 47:
 
次に、"spinmc_evaluate"モジュールを用いて熱力学的観測値などに関する様々な物理量を求めます。シミュレーションで得られた結果を解析し、出力結果をXMLファイルとして生成します。
 
次に、"spinmc_evaluate"モジュールを用いて熱力学的観測値などに関する様々な物理量を求めます。シミュレーションで得られた結果を解析し、出力結果をXMLファイルとして生成します。
  
  $ spinmc_evaluate --write-xml param1a.taskp[1-6].out.xml
+
  $ spinmc_evaluate --write-xml parm2a.taskp[1-15].out.xml
  
出力結果を格納したファイルは、上書きされますので注意してください。spinmc_evaluateによって得られる物理量は次の通りです。
+
出力結果を格納したファイルは、parm2a.task[1-15].out.xmlに上書きされますので注意してください。spinmc_evaluateによって得られる物理量は次の通りです。
  
 
*Binder Cumulant
 
*Binder Cumulant
Line 59: Line 59:
 
*Specific Heat
 
*Specific Heat
  
物理量に関するプロットをおこないたい場合は、後述するPython解析ツールを利用してください。
+
シミュレーション出力ファイルには、全計算がおこなわれた後の計算結果がだけが格納されています。ここのモンテカルロステップでの計算の詳細は、各チェックポイント情報を格納しているチェックポイントファイルをXML形式に変換することによって知ることが可能です。convert2xmlツールを次のように使用します。
 +
 
 +
 convert2xml parm2a.task[1-15].out.run
 +
 
 +
この操作によってモンテカルロ計算から摘出された情報を含む、XML形式のタスクファイルparm2a.task[1-15].out.run.xmlが生成されます。
  
 
-->
 
-->
 +
 +
計算結果の解析は、後述するPython解析ツールの利用を推奨します。
  
 
=== Pythonを使った計算の実行 ===
 
=== Pythonを使った計算の実行 ===

Revision as of 03:40, 28 March 2012


このチュートリアルでは古典的、量子ハイゼンベルグモデルの磁化率や梯子鎖の計算手法を述べます。このチュートリアルで紹介するパラメータファイル、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を使った計算の実行

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

次に、ジョブファイルを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つの計算結果をまとめてプロットしたものです。

vt_id:3 version:37


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