ALPS using the command line/ja

From ALPS
Revision as of 06:53, 27 March 2012 by Kota (talk | contribs) (観測量の解析)

Jump to: navigation, search


入力ファイルの準備

XMLフォーマットで書かれたジョブ、タスクファイルは可読性に乏しく日常の作業には向いていません。parameter2xmlはテキストで書かれたシミュレーション用のパラメータを容易にXMLフォーマットに変換できるツールです。

parameter2xmlツールはテキストベースで書かれたパラメータをXML形式に変換し、シミュレーションに必要なファイルを生成します。パラメータの記述は、次に示す形式に従います。


 MODEL="Ising";
 SWEEPS=1000;
 THERMALIZATION=100; 
 WORK_FACTOR=L*SWEEPS;
 { L=10; T=0.1; }
 { L=20; T=0.05; }


中括弧{...}内で割り付けられる数値群は、単一のシミュレーションのパラメータセットになります。中括弧以外で与えられる値は、全シミュレーションに対して有効なグローバルなパラメータになります。文字列を指定するときは"Ising"のように二重引用符を用います。

SEEDとWORK_FACTORは特別な意味を持ったパラメータです。

Parameter Default Meaning
SEED 0 モンテカルロ計算に使用する乱数種に関する数値です。モンテカルロ計算がおこなわれると、この値は1ずつ増分されます。
WORK_FACTOR 1 シミュレーションのロードバランシングをおこなう負荷分散係数です。


parameter2xmlを実行する構文は次の通りです。

 parameter2xml [-f] parameterfile [xmlfileprefix]

parameterfileからXMLファイルを生成する際、引数[xmlfileprefix]を与えると、xmlfileprefix名でXMLファイルが生成されます。省略時は、parameterfile名でXMLファイルが生成されます。

parameter2xmlは既に存在しているXMLファイルのチェックをおこないます。上書き生成をおこなう場合は、オプション"-f"を付加してください。

プログラムの起動

シミュレーションの実行(シリアル)

シミュレーションは、まずジョブファイルを生成し、XMLファイルに変換することから始めます。次の例では、ジョブファイル"para"、XMLファイル名"job"として、あるプログラムmy_programを実行させています。

 parameter2xml parm job 
 my_program  job.in.xml


結果として、3種類のシミュレーション結果"job.task1.out.xml"、"job.task2.out.xml"、"job.task3.out.xml"が格納されている"job.out.xml"が生成されます。

コマンドラインのオプション

プログラムは、スケジューラを制御するためのオプションを持ちます。これらのオプションはモンテカルロシミュレーションの利便性を高めます。

Option Default Description
--time-limit timelimit infinity プログラムが終了、もしくは最終チェックポイントを生成するまでの時間(秒)
--checkpoint-time checkpointtime 1800 プログラムがチェックポイントを生成する時間(秒)
--Tmin checkingtime 60 スケジューラがシミュレーションが終了したかどうか確認するまでの最小待ち時間(秒)
--Tmax checkingtime 900 スケジューラがシミュレーションが終了したかどうか確認するまでの最大待ち時間(秒)
--write-xml このオプションが指定されると計算結果は、.out.xmlファイルに書き込まれます。通常はhdf5ファイルに書き込まれます。

シミュレーションの実行(並列)

MPIによる並列実行方法もシリアル版と同様に非常にシンプルです。MPI環境(例:lamboot LAM MPI)をスタートし、"mpirun"を用いた並列計算をおこないます。4並列で実行する場合の実行構文例を次に示します。

 parameter2xml parm job 
 mpirun -np 4 my_program --mpi job.in.xml

コマンドラインのオプション

上記に示した逐次プログラムのオプションに加えて、並列計算用に2つのオプションがあります。

Option Default Description
--mpi MPIモードで実行することを指定します。
--Nmin numprocs 1 シミュレーションに割り当てる最小のプロセッサー数を与えます。
--Nmax numprocs infinity シミュレーションに割り当てる最大のプロセッサー数を与えます。

シミュレーション数より多くのプロセッサー数が指定された場合は、各シミュレーションで、複数のモンテカルロ計算が開始されます。

シミュレーション結果の解析

シミュレーションがおこなわれると、指定した物理量、並びにシミュレーションコードに実装されている物理量が測定され、それぞれのタスクファイルに格納されます。シミュレーションから得られるタスクファイルのアーカイブ化、それぞれのタスクファイル、アーカイブからデータを摘出する方法は次の記述に従います。

convert2xml

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

 convert2xml run-file

この操作によってモンテカルロ計算から摘出された情報を含む、XML形式のタスクファイルが生成されます。


観測量の解析

コマンドライン用の解析プログラムとして、dirloop_sse_evalute、spin_mc_evaluate、worm_evaluate、fulldiag_evaluate、qwl_evaluateがあります。(dirloop_sse_evaluate、spinmc_evaluate、worm_evaluateの3つは同じ構文です。)使用方法は、次の通りです。

spinmc_evalute [--write-xml] job.task1.out.xml [job.task2.out.xml ... ]

格納されているモンテカルロのデータからシミュレーション中では計算されない比熱、圧縮率等の追加物理量を計算します。オプション"--write-xml"を使用すると、すべての情報が.out.xmlファイルに書き込まれます。この指定が無い場合、計算結果はhdf5ファイルにのみ出力されます。

fulldiag_evaluateとqwl_evaluateの解析プログラムに関しては、 QWL EDを参照してください。


解析プログラムの構文はそれぞれ非常にシンプルで、直感的に生成、修正が可能です。次に示す例は、bosonic Hubbardモデルのシミュレーションで得られた粒子数n,n2の期待値を読み込み、圧縮率の期待値を計算し、チェックポイントに戻す処理をおこなっています。

#include <alps/scheduler.h>
#include <alps/alea.h>
 
void evaluate(const boost::filesystem::path& p, std::ostream& out) {
  alps::ProcessList nowhere;
  alps::scheduler::MCSimulation sim(nowhere,p);
 
  // read in parameters
  alps::Parameters parms=sim.get_parameters();
  double beta=parms.defined("beta") ? static_cast<double>(parms["beta"]) : (1./static_cast<double>(parms["T"]));             
 
  // determine compressibility
  alps::RealObsevaluator n  = sim.get_measurements()["Particle number"];
  alps::RealObsevaluator n2 = sim.get_measurements()["Particle number^2"];
  alps::RealObsevaluator kappa= beta*(n2 - n*n);  
  kappa.rename("Compressibility");
 
  // write compressibility back to checkpoint  
  sim << kappa;
  sim.checkpoint(p);
}
 
int main(int argc, char** argv)
{
  alps::scheduler::BasicFactory<alps::scheduler::MCSimulation,alps::scheduler::DummyMCRun> factory;
  alps::scheduler::init(factory);
  boost::filesystem::path p(argv[1],boost::filesystem::native);
  evaluate(p,std::cout);
}

ALPS2は、Pythonを使用することで、データの解析が大変容易になりました。上記のC++によるサンプルはC++による解析が必要な場合にのみ使用されます。