Difference between revisions of "Tutorials:Code-02 C++/ja"

From ALPS
Jump to: navigation, search
m
Line 4: Line 4:
  
 
簡単な例として、二次元古典イジングモデルの局所更新モンテカルロ法のコードを作成します。詳しくは[http://alps.comp-phys.org/static/tutorials2.1.0/code-02-c++/ising-skeleton.cpp ising-skeleton.cpp]を参照してください。これはモンテカルロ・シミュレーションでの典型的かつ必要な手順を記述したスケルトンコードで、以下のものが含まれています。
 
簡単な例として、二次元古典イジングモデルの局所更新モンテカルロ法のコードを作成します。詳しくは[http://alps.comp-phys.org/static/tutorials2.1.0/code-02-c++/ising-skeleton.cpp ising-skeleton.cpp]を参照してください。これはモンテカルロ・シミュレーションでの典型的かつ必要な手順を記述したスケルトンコードで、以下のものが含まれています。
まず、必要なヘッダがインクルードされています。<tt>Simulation</tt> クラスのコンストラクタで乱数の初期化、3つの測定する物理量(<tt>alps::RealObservable</tt>)の初期化、イメトロポリス法の更新に使用することができる確率テーブルの作成、イジングスピンのランダムな初期化が行われます。インターフェースは[http://alps.comp-phys.org/mediawiki/index.php/Tutorials:Code-01_Python tutorial]でおこなったpythonスクリプトと同様のものです。
+
まず、必要なヘッダがインクルードされています。<tt>Simulation</tt> クラスのコンストラクタで乱数の初期化、3つの測定する物理量(<tt>alps::RealObservable</tt>)の初期化、メトロポリス法の更新に使用することができる確率テーブルの作成、イジングスピンのランダムな初期化が行われます。インターフェースは[http://alps.comp-phys.org/mediawiki/index.php/Tutorials:Code-01_Python tutorial]でおこなったpythonスクリプトと同様のものです。
  
 
今回も、やるべきことは<tt>step()</tt>と<tt>measure()</tt>を完成させることです。<tt>step()</tt>では、格子からランダムにスピンを選択し、メトロポリス法の遷移確率<math>p_{accept} = min(1,e^{-\beta \Delta E})</math>で反転します。 <math>\Delta E</math>はスピンフリップに関するエネルギー変化です。<tt>measure()</tt>は、エネルギーと磁化を計算し、測定量として加えます。
 
今回も、やるべきことは<tt>step()</tt>と<tt>measure()</tt>を完成させることです。<tt>step()</tt>では、格子からランダムにスピンを選択し、メトロポリス法の遷移確率<math>p_{accept} = min(1,e^{-\beta \Delta E})</math>で反転します。 <math>\Delta E</math>はスピンフリップに関するエネルギー変化です。<tt>measure()</tt>は、エネルギーと磁化を計算し、測定量として加えます。

Revision as of 08:50, 23 August 2012

このチュートリアルでは、C++言語でモンテカルロシミュレーションを書く時に、測定値の解析にALPS aleaライブラリを使う方法について学びます。次のステップとして、HDF5規格で物理量を出力する方法を学びます。これを用いることで、計算データを解析したりプロットする時にALPS suiteのツールを使用することができます。

簡単な例として、二次元古典イジングモデルの局所更新モンテカルロ法のコードを作成します。詳しくはising-skeleton.cppを参照してください。これはモンテカルロ・シミュレーションでの典型的かつ必要な手順を記述したスケルトンコードで、以下のものが含まれています。 まず、必要なヘッダがインクルードされています。Simulation クラスのコンストラクタで乱数の初期化、3つの測定する物理量(alps::RealObservable)の初期化、メトロポリス法の更新に使用することができる確率テーブルの作成、イジングスピンのランダムな初期化が行われます。インターフェースはtutorialでおこなったpythonスクリプトと同様のものです。

今回も、やるべきことはstep()measure()を完成させることです。step()では、格子からランダムにスピンを選択し、メトロポリス法の遷移確率p_{accept} = min(1,e^{-\beta \Delta E})で反転します。 \Delta Eはスピンフリップに関するエネルギー変化です。measure()は、エネルギーと磁化を計算し、測定量として加えます。

コードの省略部分を書き加えたら、Makefileを使ってコンパイルができます。.cppファイルと同じディレクトリにMakefileを保存し、二行目のALPSのインストール場所を書き換えてください(ALPS_ROOTの環境変数を設定しない場合)。そして、makeとタイプしてください。実行モジュールisingが生成されます。実行し、\beta = 1/k_B Tの異なる値をスキャンしてみてください。

前回のチュートリアルでおこなったBinder キュムラント解析のPythonスクリプトを再利用できます。

data = pyalps.loadMeasurements(pyalps.getResultFiles(pattern='ising.L*'),['m^2', 'm^4'])
m2=pyalps.collectXY(data,x='BETA',y='m^2',foreach=['L'])
m4=pyalps.collectXY(data,x='BETA',y='m^4',foreach=['L'])

u=[]
for i in range(len(m2)):
    d = pyalps.DataSet()
    d.propsylabel='U4'
    d.props = m2[i].props
    d.x= m2[i].x
    d.y = m4[i].y/m2[i].y/m2[i].y
    u.append(d)

次のコマンドでBinderキュムラントをプロットします。

plt.figure()
pyalps.pyplot.plot(u)
plt.xlabel('Inverse Temperature $\beta$')
plt.ylabel('Binder Cumulant U4 $g$')
plt.title('2D Ising model')
plt.show()