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

From ALPS
Jump to: navigation, search
(Created page with "{{Languages|ALPS_2_Tutorials:MC-02_Susceptibilities}} <!--In this tutorial we will learn to calculate susceptibilities for classical and quantum Heisenberg models and contrast …")
 
Line 3: Line 3:
  
 
<!--In this tutorial we will learn to calculate susceptibilities for classical and quantum Heisenberg models and contrast the behavior of chains and ladders as well as classical and quantum models. The parameter files, Python scripts and Vistrails files for this tutorial are available in the directory [http://alps.comp-phys.org/static/tutorials2.0.0/mc-02-susceptibilities mc-02-susceptibilities]-->
 
<!--In this tutorial we will learn to calculate susceptibilities for classical and quantum Heisenberg models and contrast the behavior of chains and ladders as well as classical and quantum models. The parameter files, Python scripts and Vistrails files for this tutorial are available in the directory [http://alps.comp-phys.org/static/tutorials2.0.0/mc-02-susceptibilities mc-02-susceptibilities]-->
このチュートリアルでは古典的、量子ハイゼンベルグモデルの磁化率や梯子鎖の計算手法を述べます。このチュートリアルでのパラメータファイル、Pythonスクリプト、Vistrailsファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/mc-02-susceptibilities mc-02-susceptibilities]ディレクトリにあります。
+
このチュートリアルでは古典的、量子ハイゼンベルグモデルの磁化率や梯子鎖の計算手法を述べます。このチュートリアルで紹介するパラメータファイル、Pythonスクリプト、Vistrailsファイルは[http://alps.comp-phys.org/static/tutorials2.0.0/mc-02-susceptibilities mc-02-susceptibilities]ディレクトリにあります。
  
  

Revision as of 07:53, 5 March 2012


このチュートリアルでは古典的、量子ハイゼンベルグモデルの磁化率や梯子鎖の計算手法を述べます。このチュートリアルで紹介するパラメータファイル、Pythonスクリプト、Vistrailsファイルはmc-02-susceptibilitiesディレクトリにあります。


1次元古典ハイゼンベルグモデルの磁化率

1次元古典ハイゼンベルグ鎖

コマンドラインでの計算の実行

クラスターアップデートを用いた温度(T=0.05,0.1,...1.5)、60サイトの一次元鎖の古典ハイゼンベルグモンテカルロシミュレーションのパラメータファイルparm2a を設定します。コマンドラインでの計算の実行にあたり、最初にパラメータファイルを生成します。

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起動ツール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次元古典ハイゼンベルグラダー

ハイゼンベルグラダーも同じような手順で求めることができます。主な差異(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次元量子ハイゼンベルグラダー

We finally look at a quantum Heisenberg ladder. By now you should be an expert ALPS user so that we only give the input files and scripts. インプットファイルと実行スクリプトを精査してください。 コマンドラインでの実行方法、パラメータファイル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