ALPS チュートリアル{ ALPS の概要 
ALPS チュートリアル{ ALPS の概要 
CMSI ハンズオン 
ALPS Collaboration 
http://alps.comp-phys.org/ 
2014-10-16 
1 / 43
ALPS チュートリアル{ ALPS の概要 
Outline 
1 チュートリアルの概要 
2 量子格子模型とは? 
3 ALPS プロジェクト 
4 ALPS の開発 
5 ALPS の構成 
6 ALPS ライブラリ 
7 ALPS アプリケーション 
2 / 43
ALPS チュートリアル{ ALPS の概要 
チュートリアルの概要 
ALPS チュートリアル資料 
ALPS チュートリアル資料(日) 
PDF: http://sf.net/projects/alps-tutorial/files/ 
TEX ソース: https://github.com/cmsi/alps-tutorial/ 
ALPS オフィシャルページ(英日): http://alps.comp-phys.org/ 
ALPS Developer Wiki (英): http://alps.comp-phys.org/trac/ 
CMSI MateriApps: http://ma.cms-initiative.jp/ 
ALPS web 講習会: http://ma.cms-initiative.jp/jp/... 
藤堂眞治「実験技術" としての量子多体系シミュレーション 
ソフトウェアALPS」日本物理学会誌(掲載予定) 
3 / 43
ALPS チュートリアル{ ALPS の概要 
チュートリアルの概要 
困った時は… 
ALPS サポートチーム(日): alps@exa.phys.s.u-tokyo.ac.jp 
MateriApps ALPS フォーラム(日): 
http://ma.cms-initiative.jp/ja/community/materiapps-... 
ALPS User's Mailing List (英): 
https://alps.comp-phys.org/mediawiki/index.php/Forum... 
4 / 43
ALPS チュートリアル{ ALPS の概要 
チュートリアルの概要 
ALPS チュートリアルスタッフ 
チュートリアル資料作成・講師 
藤堂眞治(東大院理/物性研) 
松尾春彦(RIST) 
五十嵐亮(東大物性研) 
本山裕一(東大物性研) 
諏訪秀麿(東大院理) 
主催 
CMSI: 計算物質科学イニシアティブ 
http://cms-initiative.jp/ 
共催 
RIST: 一般財団法人高度情報科学技術研究機構 
http://www.rist.or.jp/ 
5 / 43
ALPS チュートリアル{ ALPS の概要 
チュートリアルの概要 
チュートリアルの流れ 
ALPS の概要01_overview ○ ◎ ◎ 
ALPS のインストール02_installation ◎ ◎ ◎ 
アプリケーション実習(1) 03_tutorial ◎ ◎ ◎ 
Python 入門04_python ○ ○ ◎ 
ALPS Python 入門05_pyalps ○ ○ ◎ 
Matplotlib 入門06_matplotlib ○ ○ ◎ 
アプリケーション実習(2) ◎ ◎ 
アプリケーションのALPS 化07_alpsize ◎ ◎ 
○: ユーザコース, ○: 開発者コース○: 集中コース 
6 / 43
ALPS チュートリアル{ ALPS の概要 
チュートリアルの概要 
ALPS チュートリアルの目標 
ALPS の概要を知る[○○○] 
ALPS アプリケーションの実行方法を学ぶ[○ー○] 
ALPS Python ツールを使った結果の解析方法を学ぶ[○ー○] 
ALPS ライブラリの仕組みを学ぶ[ー○○] 
ユーザアプリケーションの作成方法を学ぶ[ー○○] 
(ALPS チュートリアルの問題点を洗い出し改良する) [◎◎◎] 
7 / 43
ALPS チュートリアル{ ALPS の概要 
量子格子模型とは? 
●● 
量子格子模型: Quantum Lattice Models 
量子スピン模型(XXZ 模型) 
H = 
Jxy 
2 
Σ 
⟨i ;j⟩ 
(S+ 
 
j + S 
i S 
 
i S+ 
j ) + Jz 
Σ 
⟨i ;j⟩ 
Sz 
i Sz 
j 
Hubbard 模型 
H = t 
Σ 
⟨i ;j⟩ 
(c 
y 
icj + h.c.) + U 
Σ 
i 
nini# 
t-J 模型 
H = t 
Σ 
⟨i ;j⟩ 
(c 
y 
icj+h.c.)+J 
Σ 
i ;j 
(Si Sjninj=4) 
8 / 43
ALPS チュートリアル{ ALPS の概要 
量子格子模型とは? 
●● 
なぜQLM を考えるのか? 
量子多体系における強相関効果 
さまざまな秩序状態 
量子的に強くゆらいだ相: 量子液体, スピン 
ギャップ相 
量子相転移, 量子臨界現象 
量子統計物理におけるユニバーサリティー 
量子臨界現象は系の次元, 秩序変数の対称性など 
にしか依存しない 
量子臨界現象特有のユニバーサリティークラス 
の探索 
新しい計算物理学的手法の発展 
量子モンテカルロ法, DMRG, DMFT, テンソル 
ネットワーク, など 
9 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS プロジェクト 
●● 
ALPS プロジェクトの目標 
量子統計物理分野の現状 
研究グループ毎に異なるコードを開発 
シミュレーションを行う模型毎に異なる実装 
アルゴリズムはますます複雑になりソフトウェア開発が長期化 
可搬性・互換性のない入出力形式 
ALPS プロジェクトの目標 
最新のアルゴリズムを用いたcommunity code の開発 
大規模並列計算などのためのC++ライブラリ・フレームワー 
ク開発 
統一入出力形式の提案とそれにもとづくデータ解析ツールの 
作成 
計算物理の専門家だけでなく, 理論家・実験家にも使えるシ 
ミュレーションソフトウェア 
10 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS プロジェクト 
●● 
ALPS とは? 
ALPS = Algorithms and Libraries for Physics Simulations 
量子スピン系, 電子系など強相関量子格子模型のシミュレー 
ションためのオープンソースソフトウェアの開発を目指す国際 
共同プロジェクト 
ALPS ライブラリ= C++による格子模型のための汎用ライブ 
ラリ群 
ALPS アプリケーション= 最新のアルゴリズムに基づくアプ 
リケーション群: QMC, DMRG, ED, DMFT 等 
ALPS フレームワーク= 汎用入出力形式, 解析ツール, スケ 
ジューラなど, 大規模並列シミュレーションのための環境 
11 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS プロジェクト 
●● 
ターゲット・オーディエンス 
実験家 
物質のモデリングにソフトウェアパッケージを利用 
実験結果とシミュレーション結果のフィッティングにより, 相 
互作用定数などを決定 
理論家 
理論的なアイデアのチェックに使いやすい整備されたコードを 
利用 
自前のコードのデバッグに 
新しいコード開発の基盤としての利用 
計算機科学者, 学生,    
12 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
基盤となる技術 
C++によるジェネリック・プログラミング 
C++標準テンプレートライブラリ 
Boost C++ ライブラリhttp://www.boost.org/ 
ALPS 独自のクラス, ジェネリック・アルゴリズムを実装 
柔軟性, 再利用性, 高信頼性, 高性能を同時に達成 
XML, HDF5 http://www.hdfgroup.org/HDF5/ による入 
出力 
可搬性, 自己記述性, 変換が容易 
量子格子模型に対する最新のシミュレーション手法 
13 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
なぜC++を使うのか? 
14 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
ALPS の歴史 
1990 年代中頃ALPS の前身となるPALM C++, DMRG, 
looper などが開発される 
2002 年ALPS プロジェクト始動 
2004 年バージョン1.0, 第1 回Users Workshop 
2010 年バージョン2.0 
2014 年10 月現在 
ソースコード: C++ 396,000 行, Python 39,000 行, Fortran 
10,000 行 
開発者: 約30 名(7 ヶ国) 
15 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
ALPS の開発者 
Austria 
H. G. Evertz 
France 
O. Parcollet 
Germany 
S. Fuchs 
G. Guertler 
D. Koop 
U. Schollwock 
S. Trebst 
S. Wessel 
Poland 
G. Pawlowski 
Switerland 
B. Bauer 
L. Gamper 
J. Gukelberger 
A. Hehn 
S. V. Isakov 
P. N. Ma 
P. Mates 
J. D. Picon 
L. Pollet 
B. Surer 
M. Troyer 
P. Werner 
Japan 
五十嵐亮 
松尾春彦 
藤堂眞治 
USA 
L. D. Carr 
A. Feiguin 
J. Freire 
E. Gull 
E. Santos 
V. W. Scarlola 
C. Silva 
M. L. Wall 
16 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
ALPS の展開 
上方展開(大規模化・高性能化・並列化) 
量子モンテカルロ法(ALPS/looper) の超並列化 
高並列スケジューラ(ALPS/parapack) のハイブリッド多重並 
列化 
Fortran, C プログラムのためのAPI 作成 
下方展開(裾野を広げる) 
実験家・理論家による幅広い利用の促進 
Windows/Macintosh 用バイナリインストーラの開発 
ワークフロー・履歴管理システムとの統合 
GUI (グラフィカルユーザインターフェース) の開発 
17 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
開発のためのインフラストラクチャ 
ソースコードの規模, 開発体制が大きくなると今までの方法で 
は破綻する 
開発・サポートのためのツールを一から作りあげるのは非現 
実的 
フリーソフトウェアの利用 
ビルドシステム: CMake 
ソースコードの管理: Subversion 
プロジェクト管理・バグ追跡: Trac 
ドキュメント作成: MediaWiki 
メーリングリスト: Mailman 
Linux ワークステーションが1 台あれば, これらの環境を整え 
るのは現在では比較的容易 
18 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
ビルドシステム: CMake 
Make
le を生成するためのユーティリティー(con
gure スクリ 
プトに対応) 
Windows のVisual C++ 用ソリューションファイル, Mac OS 
X のXcode 用プロジェクトファイルの生成も可能 
設定はCMakeLists.txt に記述する 
テスト(CTest) やバイナリ配布(CPack) の機能もある 
ファイルの依存関係の自動検出 
19 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
VCS (Version Control System) によるソース管理: 
Subversion 
開発者が複数になると, ディレクトリ名やログファイルによる 
バージョン管理はすぐに破綻する 
ソースコードをサーバー上で一括管理 
ネットワーク経由でソースをcheck out/check in 
更新毎に一意なバージョン番号を付与 
全ての修正履歴を保存 
複数人が同時に更新した場合に衝突を回避するしくみ 
ブランチ・マージ・タグ付けなどが可能 
開発者が一人, 公開の予定がない場合でも積極的に使うべき 
20 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
BTS (Bug Tracking System) の利用: Trac 
プロジェクト管理とバグ追跡のためのツール 
Web ブラウザからアクセス・操作 
開発者の情報共有のためのwiki 
Subversion との連携(ソース, 修正履歴のweb 上での閲覧) 
プロジェクト管理(ロードマップ, マイルストーンの管理) 
チケットシステム: バグやタスクの登録, 担当者の決定, 修正状 
況の追跡 
21 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
Wiki によるマニュアル作成: MediaWiki 
もともとはウィキペディアのために開発された 
Wiki とは? 
Web ブラウザを利用してWeb 文書を書き換えるシステム 
ネットワーク上のどこからでも書き換えができる 
共同作業が容易 
Web ブラウザがあれば編集作業が行える 
HTML よりも簡潔な書式 
文書間のリンクの作成が容易 
ALPS Wiki のコンテンツ 
ニュース, インストール方法, ALPS に関連する論文, 発表資料, 
ライブラリリファレンスマニュアル, チュートリアル 
22 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
ー● 
メーリングリストの活用: Mailman 
開発者メーリングリスト 
開発方針に関する意見交換, リリーススケジュール調整, 担当者 
調整等 
Trac チケットの変更ログも自動的にここに流れる 
ユーザメーリングリスト 
Web からの自動登録 
開発者+ ユーザコミュニティーによるサポートの場 
FAQ ⇒ Wiki ドキュメントへ反映 
バグレポート, 要望など⇒ Trac チケットへ 
23 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
ワークショップ 
ALPS developers workshop 
今後の開発方針についてブレインストーミング・ディスカッ 
ション 
年1 回程度 
ALPS users workshop / tutorial 
アルゴリズムについてのレビュートーク 
Wiki のチュートリアルを用いてALPS の実習 
CMSI ハンズオン: 年4 回程度, 神戸や柏にてALPS チュートリ 
アルを開催中 
24 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
ALPScite-me ライセンス 
GNU General Public License 2 (GPL2) を基本としたライセ 
ンス 
Non-commercial academic use の場合自由に利用可能 
自由に再配布可 
ユーザが変更を施したコードも同じライセンスの下で再配布可 
ALPS を用いた研究成果を公表する場合には, 
acknowledgement と論文の引用をお願いします 
In any scienti
c publication based wholly or in part on the 
Library, the use of the Library must be acknowledged and 
the publications listed in the accompanying CITATIONS.txt 
document must be cited. 
25 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の開発 
●● 
参考文献 
ALPS papers 
B. Bauer et al. The ALPS project release 2.0: Open source 
software for strongly correlated systems, J. Stat. Mech., 
P05001 (2011). 
A. F. Albuquerque et al. The ALPS project release 1.3: open 
source software for strongly correlated systems, J. Mag. Mag. 
Mat. 310, 1187 (2007). 
F. Alet et al. The ALPS Project: Open Source Software for 
Strongly Correlated Systems, J. Phys. Soc. Jpn. Suppl. 74, 30 
(2005). 
26 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の構成 
●● 
ALPS の階層構造 
tools 
applications 
domain-specific 
libraries 
numerics 
generic C++ 
XML manipulation Python binding GUI 
MC QMC ED DMRG DMFT 
lattice model observables scheduler 
random ublas iterative eigenvalue solver 
Boost library 
graph serialization XML/XSLT 
C / Fortran BLAS LAPACK MPI HDF5 
27 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS の構成 
●● 
サードパーティーのライブラリ 
BLAS, LAPACK: 線形演算(行列対角化, 特異値分解など) (オ 
プション) 
MPI (Message Passing Interface): 並列計算のためのメッセー 
ジ通信(オプション) 
HDF5 (Hierarchical Data Format): プラットフォーム非依存の 
バイナリファイル格納形式 
Boost C++ Library: 乱数, グラフ, シリアル化, など多くの有 
用なライブラリ群 
28 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
ALPS/parameter ライブラリ 
パラメータの入出力のための 
ライブラリ 
改行, セミコロン, コンマで 
変数を区別 
四則演算, 初等関数(sin, cos, 
exp など) が使える 
 (PI), 虚数単位(I) 
C 風, C++風のコメント 
f g で囲まない変数は共通パ 
ラメータ 
f g で囲んだ変数は異なるパ 
ラメータセット 
LATTICE = chain lattice; 
L = 16, 
SEED = 2873 
// C++ style comment 
SWEEPS = 4096; 
THERMALIZATION = SWEEPS/8; 
/* C style comment */ 
{ T = 2; Sq = 2*PI/3; } 
{ T = 1.8; } 
29 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
ー● 
ALPS/parameter を使ったコード例 
#include boost/foreach.hpp 
#include alps/parameter.h 
int main() { 
std::ifstream fin; 
fin.open(parameters.txt); 
alps::ParameterList plist(fin); 
BOOST_FOREACH(alps::Parameters p, plist) { 
double a = p[a]; 
double b = p.value_or_default(b, 0.5); 
... 
} 
... 
} 
30 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
ALPS/alea ライブラリ 
マルコフ連鎖における平均値, 分散, 自己相関を計算するライ 
ブラリ 
alps::RealObservable mag2(Magnetization^2); 
... 
mag2  m * m; // at each MC step 
ビンニング解析を用いた平均値, エラー, 自己相関時間の評価 
std::cout  mag2  std::endl; 
出力 
Magnetization^2: 3.142 +/- 0.001; tau = 10.3 
31 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
ー● 
ALPS/alea ライブラリ 
ジャックナイフ法を用いた非線形量のエラー評価 
alps::RealObsevaluator mag2eval(mag2); 
alps::RealObsevaluator mag4eval(mag4); 
alps::RealObsevaluator binder = mag2eval * mag2eval / 
mag4eval; 
std::cout  binder; 
出力 
(Magnetization^2) * (Magnetization^2) / (Magnetization^4): 
0.453 +/- 0.005 
32 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
ALPS/lattice ライブラリ 
「格子構造」は数学的には「グラフ」で表現できる 
site , vertex 
bond , edge 
Boost Graph Library に対する「ラッパー」を提供 
XML による「格子構造」の入出力 
「ユニットセル」による繰り返し構造の指定 
座標, パリティ, 逆格子ベクトルなどの属性 
あらかじめ用意されている格子: chain lattice, square 
lattice, triangular lattice, honeycomb lattice, simple 
cubic lattice, など 
33 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
有限格子+ ユニットセルの埋め込み 
格子の指定 
LATTICE name=2D dimension=2 
BASIS 
VECTOR 1 0 /VECTOR 
VECTOR 0.5 1 /VECTOR 
/BASIS 
/LATTICE 
34 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
有限格子+ ユニットセルの埋め込み 
ユニットセル 
UNITCELL name=simple1d dimension=1 vertices=1 
EDGE 
SOURCE vertex=1 offset=0/TARGET vertex=1 offset 
=1/ 
/EDGE 
/UNITCELL 
35 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
有限格子+ ユニットセルの埋め込み 
サイズ, 境界条件の指定 
LATTICEGRAPH name = chain lattice 
FINITELATTICE 
LATTICE ref=chain lattice/ 
PARAMETER name=L/ 
EXTENT size =L/ 
BOUNDARY type=periodic/ 
/FINITELATTICE 
UNITCELL ref=simple1d/ 
/LATTICEGRAPH 
より複雑な格子の作り方 
ALPS Lattice HOWTO: http://alps.comp-phys.org/mediawiki/ 
index.php/Tutorials:LatticeHOWTO/ja 
36 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS ライブラリ 
●● 
ALPS/model ライブラリ 
XML を使ってハミルトニアンを定義する 
量子数や演算子の定義 
シンボリックな表現を使って, ハミルトニアンのサイト項やボ 
ンド項を定義 
Jz*Sz(i)*Sz(j)+Jxy/2*(Splus(i)*Sminus(j)+Sminus(i)*Splus(j)) 
作成した局所ハミルトニアンは行列の形で取り出せる 
プラケット項などの多サイトにわたる相互作用には未対応 
ALPS Model HOWTO: http://alps.comp-phys.org/mediawiki/ 
index.php/Tutorials:ModelHOWTO/ja 
あらかじめ用意されている模型: spin, boson Hubbard, 
hardcore boson, fermion Hubbard, alternative fermion 
Hubbard, spinless fermions, Kondo lattice, t-J 
37 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS アプリケーション 
●● 
ALPS アプリケーション 
fulldiag 厳密対角化(全対角化法) 
sparsediag 厳密対角化(Lanczos 法) 
spinmc 古典モンテカルロ法 
loop 量子モンテカルロ法(ループアルゴリズム) 
dirloop sse 量子モンテカルロ(向き付きループアルゴリズム) 
worm 量子モンテカルロ(ワームアルゴリズム) 
dmrg,tebd 密度行列繰り込み群 
hirshfye,interaction,hybridization 動的平均場近似のQMC ソルバ 
38 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS アプリケーション 
●● 
厳密対角化 
fulldiag 厳密対角化(全対角化法) 
ハウスホルダー法を用いて量子格子模型の全ての 
エネルギー固有値と固有状態を計算 
任意の温度における物理量を数値誤差の範囲で厳 
密に計算 
sparsediag 厳密対角化(Lanczos 法) 
ランチョス法を用いて, 基底状態と少数の低励起 
状態を求める 
全磁化などの保存量や系の並進対称性などを利用して, ヒルベ 
ルト空間の次元を削減 
任意の局所的な演算子の期待値, 対角および非対角演算子の相 
関関数, 構造因子などの測定が可能 
並列固有値ソルバライブラリRokko と, それに基づく並列厳密 
対角化パッケージALPS/Barista を開発中 
39 / 43
ALPS チュートリアル{ ALPS の概要 
ALPS アプリケーション 
●● 
古典モンテカルロ法 
spinmc 古典モンテカルロ法 
メトロポリス法あるいはクラスターアルゴリズム 
古典スピン模型のモンテカルロシミュレーション 
磁場中のイジング模型, XY 模型, ハイゼンベルグ 
模型, ポッツ模型 
40 / 43

ALPSチュートリアル(1) ALPSの概要

  • 1.
    ALPS チュートリアル{ ALPSの概要 ALPS チュートリアル{ ALPS の概要 CMSI ハンズオン ALPS Collaboration http://alps.comp-phys.org/ 2014-10-16 1 / 43
  • 2.
    ALPS チュートリアル{ ALPSの概要 Outline 1 チュートリアルの概要 2 量子格子模型とは? 3 ALPS プロジェクト 4 ALPS の開発 5 ALPS の構成 6 ALPS ライブラリ 7 ALPS アプリケーション 2 / 43
  • 3.
    ALPS チュートリアル{ ALPSの概要 チュートリアルの概要 ALPS チュートリアル資料 ALPS チュートリアル資料(日) PDF: http://sf.net/projects/alps-tutorial/files/ TEX ソース: https://github.com/cmsi/alps-tutorial/ ALPS オフィシャルページ(英日): http://alps.comp-phys.org/ ALPS Developer Wiki (英): http://alps.comp-phys.org/trac/ CMSI MateriApps: http://ma.cms-initiative.jp/ ALPS web 講習会: http://ma.cms-initiative.jp/jp/... 藤堂眞治「実験技術" としての量子多体系シミュレーション ソフトウェアALPS」日本物理学会誌(掲載予定) 3 / 43
  • 4.
    ALPS チュートリアル{ ALPSの概要 チュートリアルの概要 困った時は… ALPS サポートチーム(日): alps@exa.phys.s.u-tokyo.ac.jp MateriApps ALPS フォーラム(日): http://ma.cms-initiative.jp/ja/community/materiapps-... ALPS User's Mailing List (英): https://alps.comp-phys.org/mediawiki/index.php/Forum... 4 / 43
  • 5.
    ALPS チュートリアル{ ALPSの概要 チュートリアルの概要 ALPS チュートリアルスタッフ チュートリアル資料作成・講師 藤堂眞治(東大院理/物性研) 松尾春彦(RIST) 五十嵐亮(東大物性研) 本山裕一(東大物性研) 諏訪秀麿(東大院理) 主催 CMSI: 計算物質科学イニシアティブ http://cms-initiative.jp/ 共催 RIST: 一般財団法人高度情報科学技術研究機構 http://www.rist.or.jp/ 5 / 43
  • 6.
    ALPS チュートリアル{ ALPSの概要 チュートリアルの概要 チュートリアルの流れ ALPS の概要01_overview ○ ◎ ◎ ALPS のインストール02_installation ◎ ◎ ◎ アプリケーション実習(1) 03_tutorial ◎ ◎ ◎ Python 入門04_python ○ ○ ◎ ALPS Python 入門05_pyalps ○ ○ ◎ Matplotlib 入門06_matplotlib ○ ○ ◎ アプリケーション実習(2) ◎ ◎ アプリケーションのALPS 化07_alpsize ◎ ◎ ○: ユーザコース, ○: 開発者コース○: 集中コース 6 / 43
  • 7.
    ALPS チュートリアル{ ALPSの概要 チュートリアルの概要 ALPS チュートリアルの目標 ALPS の概要を知る[○○○] ALPS アプリケーションの実行方法を学ぶ[○ー○] ALPS Python ツールを使った結果の解析方法を学ぶ[○ー○] ALPS ライブラリの仕組みを学ぶ[ー○○] ユーザアプリケーションの作成方法を学ぶ[ー○○] (ALPS チュートリアルの問題点を洗い出し改良する) [◎◎◎] 7 / 43
  • 8.
    ALPS チュートリアル{ ALPSの概要 量子格子模型とは? ●● 量子格子模型: Quantum Lattice Models 量子スピン模型(XXZ 模型) H = Jxy 2 Σ ⟨i ;j⟩ (S+ j + S i S i S+ j ) + Jz Σ ⟨i ;j⟩ Sz i Sz j Hubbard 模型 H = t Σ ⟨i ;j⟩ (c y icj + h.c.) + U Σ i nini# t-J 模型 H = t Σ ⟨i ;j⟩ (c y icj+h.c.)+J Σ i ;j (Si Sjninj=4) 8 / 43
  • 9.
    ALPS チュートリアル{ ALPSの概要 量子格子模型とは? ●● なぜQLM を考えるのか? 量子多体系における強相関効果 さまざまな秩序状態 量子的に強くゆらいだ相: 量子液体, スピン ギャップ相 量子相転移, 量子臨界現象 量子統計物理におけるユニバーサリティー 量子臨界現象は系の次元, 秩序変数の対称性など にしか依存しない 量子臨界現象特有のユニバーサリティークラス の探索 新しい計算物理学的手法の発展 量子モンテカルロ法, DMRG, DMFT, テンソル ネットワーク, など 9 / 43
  • 10.
    ALPS チュートリアル{ ALPSの概要 ALPS プロジェクト ●● ALPS プロジェクトの目標 量子統計物理分野の現状 研究グループ毎に異なるコードを開発 シミュレーションを行う模型毎に異なる実装 アルゴリズムはますます複雑になりソフトウェア開発が長期化 可搬性・互換性のない入出力形式 ALPS プロジェクトの目標 最新のアルゴリズムを用いたcommunity code の開発 大規模並列計算などのためのC++ライブラリ・フレームワー ク開発 統一入出力形式の提案とそれにもとづくデータ解析ツールの 作成 計算物理の専門家だけでなく, 理論家・実験家にも使えるシ ミュレーションソフトウェア 10 / 43
  • 11.
    ALPS チュートリアル{ ALPSの概要 ALPS プロジェクト ●● ALPS とは? ALPS = Algorithms and Libraries for Physics Simulations 量子スピン系, 電子系など強相関量子格子模型のシミュレー ションためのオープンソースソフトウェアの開発を目指す国際 共同プロジェクト ALPS ライブラリ= C++による格子模型のための汎用ライブ ラリ群 ALPS アプリケーション= 最新のアルゴリズムに基づくアプ リケーション群: QMC, DMRG, ED, DMFT 等 ALPS フレームワーク= 汎用入出力形式, 解析ツール, スケ ジューラなど, 大規模並列シミュレーションのための環境 11 / 43
  • 12.
    ALPS チュートリアル{ ALPSの概要 ALPS プロジェクト ●● ターゲット・オーディエンス 実験家 物質のモデリングにソフトウェアパッケージを利用 実験結果とシミュレーション結果のフィッティングにより, 相 互作用定数などを決定 理論家 理論的なアイデアのチェックに使いやすい整備されたコードを 利用 自前のコードのデバッグに 新しいコード開発の基盤としての利用 計算機科学者, 学生, 12 / 43
  • 13.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● 基盤となる技術 C++によるジェネリック・プログラミング C++標準テンプレートライブラリ Boost C++ ライブラリhttp://www.boost.org/ ALPS 独自のクラス, ジェネリック・アルゴリズムを実装 柔軟性, 再利用性, 高信頼性, 高性能を同時に達成 XML, HDF5 http://www.hdfgroup.org/HDF5/ による入 出力 可搬性, 自己記述性, 変換が容易 量子格子模型に対する最新のシミュレーション手法 13 / 43
  • 14.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● なぜC++を使うのか? 14 / 43
  • 15.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● ALPS の歴史 1990 年代中頃ALPS の前身となるPALM C++, DMRG, looper などが開発される 2002 年ALPS プロジェクト始動 2004 年バージョン1.0, 第1 回Users Workshop 2010 年バージョン2.0 2014 年10 月現在 ソースコード: C++ 396,000 行, Python 39,000 行, Fortran 10,000 行 開発者: 約30 名(7 ヶ国) 15 / 43
  • 16.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● ALPS の開発者 Austria H. G. Evertz France O. Parcollet Germany S. Fuchs G. Guertler D. Koop U. Schollwock S. Trebst S. Wessel Poland G. Pawlowski Switerland B. Bauer L. Gamper J. Gukelberger A. Hehn S. V. Isakov P. N. Ma P. Mates J. D. Picon L. Pollet B. Surer M. Troyer P. Werner Japan 五十嵐亮 松尾春彦 藤堂眞治 USA L. D. Carr A. Feiguin J. Freire E. Gull E. Santos V. W. Scarlola C. Silva M. L. Wall 16 / 43
  • 17.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● ALPS の展開 上方展開(大規模化・高性能化・並列化) 量子モンテカルロ法(ALPS/looper) の超並列化 高並列スケジューラ(ALPS/parapack) のハイブリッド多重並 列化 Fortran, C プログラムのためのAPI 作成 下方展開(裾野を広げる) 実験家・理論家による幅広い利用の促進 Windows/Macintosh 用バイナリインストーラの開発 ワークフロー・履歴管理システムとの統合 GUI (グラフィカルユーザインターフェース) の開発 17 / 43
  • 18.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● 開発のためのインフラストラクチャ ソースコードの規模, 開発体制が大きくなると今までの方法で は破綻する 開発・サポートのためのツールを一から作りあげるのは非現 実的 フリーソフトウェアの利用 ビルドシステム: CMake ソースコードの管理: Subversion プロジェクト管理・バグ追跡: Trac ドキュメント作成: MediaWiki メーリングリスト: Mailman Linux ワークステーションが1 台あれば, これらの環境を整え るのは現在では比較的容易 18 / 43
  • 19.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● ビルドシステム: CMake Make
  • 20.
  • 21.
    gure スクリ プトに対応) Windows のVisual C++ 用ソリューションファイル, Mac OS X のXcode 用プロジェクトファイルの生成も可能 設定はCMakeLists.txt に記述する テスト(CTest) やバイナリ配布(CPack) の機能もある ファイルの依存関係の自動検出 19 / 43
  • 22.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● VCS (Version Control System) によるソース管理: Subversion 開発者が複数になると, ディレクトリ名やログファイルによる バージョン管理はすぐに破綻する ソースコードをサーバー上で一括管理 ネットワーク経由でソースをcheck out/check in 更新毎に一意なバージョン番号を付与 全ての修正履歴を保存 複数人が同時に更新した場合に衝突を回避するしくみ ブランチ・マージ・タグ付けなどが可能 開発者が一人, 公開の予定がない場合でも積極的に使うべき 20 / 43
  • 23.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● BTS (Bug Tracking System) の利用: Trac プロジェクト管理とバグ追跡のためのツール Web ブラウザからアクセス・操作 開発者の情報共有のためのwiki Subversion との連携(ソース, 修正履歴のweb 上での閲覧) プロジェクト管理(ロードマップ, マイルストーンの管理) チケットシステム: バグやタスクの登録, 担当者の決定, 修正状 況の追跡 21 / 43
  • 24.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● Wiki によるマニュアル作成: MediaWiki もともとはウィキペディアのために開発された Wiki とは? Web ブラウザを利用してWeb 文書を書き換えるシステム ネットワーク上のどこからでも書き換えができる 共同作業が容易 Web ブラウザがあれば編集作業が行える HTML よりも簡潔な書式 文書間のリンクの作成が容易 ALPS Wiki のコンテンツ ニュース, インストール方法, ALPS に関連する論文, 発表資料, ライブラリリファレンスマニュアル, チュートリアル 22 / 43
  • 25.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ー● メーリングリストの活用: Mailman 開発者メーリングリスト 開発方針に関する意見交換, リリーススケジュール調整, 担当者 調整等 Trac チケットの変更ログも自動的にここに流れる ユーザメーリングリスト Web からの自動登録 開発者+ ユーザコミュニティーによるサポートの場 FAQ ⇒ Wiki ドキュメントへ反映 バグレポート, 要望など⇒ Trac チケットへ 23 / 43
  • 26.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● ワークショップ ALPS developers workshop 今後の開発方針についてブレインストーミング・ディスカッ ション 年1 回程度 ALPS users workshop / tutorial アルゴリズムについてのレビュートーク Wiki のチュートリアルを用いてALPS の実習 CMSI ハンズオン: 年4 回程度, 神戸や柏にてALPS チュートリ アルを開催中 24 / 43
  • 27.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● ALPScite-me ライセンス GNU General Public License 2 (GPL2) を基本としたライセ ンス Non-commercial academic use の場合自由に利用可能 自由に再配布可 ユーザが変更を施したコードも同じライセンスの下で再配布可 ALPS を用いた研究成果を公表する場合には, acknowledgement と論文の引用をお願いします In any scienti
  • 28.
    c publication basedwholly or in part on the Library, the use of the Library must be acknowledged and the publications listed in the accompanying CITATIONS.txt document must be cited. 25 / 43
  • 29.
    ALPS チュートリアル{ ALPSの概要 ALPS の開発 ●● 参考文献 ALPS papers B. Bauer et al. The ALPS project release 2.0: Open source software for strongly correlated systems, J. Stat. Mech., P05001 (2011). A. F. Albuquerque et al. The ALPS project release 1.3: open source software for strongly correlated systems, J. Mag. Mag. Mat. 310, 1187 (2007). F. Alet et al. The ALPS Project: Open Source Software for Strongly Correlated Systems, J. Phys. Soc. Jpn. Suppl. 74, 30 (2005). 26 / 43
  • 30.
    ALPS チュートリアル{ ALPSの概要 ALPS の構成 ●● ALPS の階層構造 tools applications domain-specific libraries numerics generic C++ XML manipulation Python binding GUI MC QMC ED DMRG DMFT lattice model observables scheduler random ublas iterative eigenvalue solver Boost library graph serialization XML/XSLT C / Fortran BLAS LAPACK MPI HDF5 27 / 43
  • 31.
    ALPS チュートリアル{ ALPSの概要 ALPS の構成 ●● サードパーティーのライブラリ BLAS, LAPACK: 線形演算(行列対角化, 特異値分解など) (オ プション) MPI (Message Passing Interface): 並列計算のためのメッセー ジ通信(オプション) HDF5 (Hierarchical Data Format): プラットフォーム非依存の バイナリファイル格納形式 Boost C++ Library: 乱数, グラフ, シリアル化, など多くの有 用なライブラリ群 28 / 43
  • 32.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● ALPS/parameter ライブラリ パラメータの入出力のための ライブラリ 改行, セミコロン, コンマで 変数を区別 四則演算, 初等関数(sin, cos, exp など) が使える (PI), 虚数単位(I) C 風, C++風のコメント f g で囲まない変数は共通パ ラメータ f g で囲んだ変数は異なるパ ラメータセット LATTICE = chain lattice; L = 16, SEED = 2873 // C++ style comment SWEEPS = 4096; THERMALIZATION = SWEEPS/8; /* C style comment */ { T = 2; Sq = 2*PI/3; } { T = 1.8; } 29 / 43
  • 33.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ー● ALPS/parameter を使ったコード例 #include boost/foreach.hpp #include alps/parameter.h int main() { std::ifstream fin; fin.open(parameters.txt); alps::ParameterList plist(fin); BOOST_FOREACH(alps::Parameters p, plist) { double a = p[a]; double b = p.value_or_default(b, 0.5); ... } ... } 30 / 43
  • 34.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● ALPS/alea ライブラリ マルコフ連鎖における平均値, 分散, 自己相関を計算するライ ブラリ alps::RealObservable mag2(Magnetization^2); ... mag2 m * m; // at each MC step ビンニング解析を用いた平均値, エラー, 自己相関時間の評価 std::cout mag2 std::endl; 出力 Magnetization^2: 3.142 +/- 0.001; tau = 10.3 31 / 43
  • 35.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ー● ALPS/alea ライブラリ ジャックナイフ法を用いた非線形量のエラー評価 alps::RealObsevaluator mag2eval(mag2); alps::RealObsevaluator mag4eval(mag4); alps::RealObsevaluator binder = mag2eval * mag2eval / mag4eval; std::cout binder; 出力 (Magnetization^2) * (Magnetization^2) / (Magnetization^4): 0.453 +/- 0.005 32 / 43
  • 36.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● ALPS/lattice ライブラリ 「格子構造」は数学的には「グラフ」で表現できる site , vertex bond , edge Boost Graph Library に対する「ラッパー」を提供 XML による「格子構造」の入出力 「ユニットセル」による繰り返し構造の指定 座標, パリティ, 逆格子ベクトルなどの属性 あらかじめ用意されている格子: chain lattice, square lattice, triangular lattice, honeycomb lattice, simple cubic lattice, など 33 / 43
  • 37.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● 有限格子+ ユニットセルの埋め込み 格子の指定 LATTICE name=2D dimension=2 BASIS VECTOR 1 0 /VECTOR VECTOR 0.5 1 /VECTOR /BASIS /LATTICE 34 / 43
  • 38.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● 有限格子+ ユニットセルの埋め込み ユニットセル UNITCELL name=simple1d dimension=1 vertices=1 EDGE SOURCE vertex=1 offset=0/TARGET vertex=1 offset =1/ /EDGE /UNITCELL 35 / 43
  • 39.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● 有限格子+ ユニットセルの埋め込み サイズ, 境界条件の指定 LATTICEGRAPH name = chain lattice FINITELATTICE LATTICE ref=chain lattice/ PARAMETER name=L/ EXTENT size =L/ BOUNDARY type=periodic/ /FINITELATTICE UNITCELL ref=simple1d/ /LATTICEGRAPH より複雑な格子の作り方 ALPS Lattice HOWTO: http://alps.comp-phys.org/mediawiki/ index.php/Tutorials:LatticeHOWTO/ja 36 / 43
  • 40.
    ALPS チュートリアル{ ALPSの概要 ALPS ライブラリ ●● ALPS/model ライブラリ XML を使ってハミルトニアンを定義する 量子数や演算子の定義 シンボリックな表現を使って, ハミルトニアンのサイト項やボ ンド項を定義 Jz*Sz(i)*Sz(j)+Jxy/2*(Splus(i)*Sminus(j)+Sminus(i)*Splus(j)) 作成した局所ハミルトニアンは行列の形で取り出せる プラケット項などの多サイトにわたる相互作用には未対応 ALPS Model HOWTO: http://alps.comp-phys.org/mediawiki/ index.php/Tutorials:ModelHOWTO/ja あらかじめ用意されている模型: spin, boson Hubbard, hardcore boson, fermion Hubbard, alternative fermion Hubbard, spinless fermions, Kondo lattice, t-J 37 / 43
  • 41.
    ALPS チュートリアル{ ALPSの概要 ALPS アプリケーション ●● ALPS アプリケーション fulldiag 厳密対角化(全対角化法) sparsediag 厳密対角化(Lanczos 法) spinmc 古典モンテカルロ法 loop 量子モンテカルロ法(ループアルゴリズム) dirloop sse 量子モンテカルロ(向き付きループアルゴリズム) worm 量子モンテカルロ(ワームアルゴリズム) dmrg,tebd 密度行列繰り込み群 hirshfye,interaction,hybridization 動的平均場近似のQMC ソルバ 38 / 43
  • 42.
    ALPS チュートリアル{ ALPSの概要 ALPS アプリケーション ●● 厳密対角化 fulldiag 厳密対角化(全対角化法) ハウスホルダー法を用いて量子格子模型の全ての エネルギー固有値と固有状態を計算 任意の温度における物理量を数値誤差の範囲で厳 密に計算 sparsediag 厳密対角化(Lanczos 法) ランチョス法を用いて, 基底状態と少数の低励起 状態を求める 全磁化などの保存量や系の並進対称性などを利用して, ヒルベ ルト空間の次元を削減 任意の局所的な演算子の期待値, 対角および非対角演算子の相 関関数, 構造因子などの測定が可能 並列固有値ソルバライブラリRokko と, それに基づく並列厳密 対角化パッケージALPS/Barista を開発中 39 / 43
  • 43.
    ALPS チュートリアル{ ALPSの概要 ALPS アプリケーション ●● 古典モンテカルロ法 spinmc 古典モンテカルロ法 メトロポリス法あるいはクラスターアルゴリズム 古典スピン模型のモンテカルロシミュレーション 磁場中のイジング模型, XY 模型, ハイゼンベルグ 模型, ポッツ模型 40 / 43