🎲

LatticeQCD.jl から始めるLatticeQCD

6 min read

物理学アドベントカレンダー Advent Calendar 2021 12/19の記事です。

この記事では、簡単に格子QCDの計算ができる LatticeQCD.jl の使い方の説明をしたいと思います。

前の記事 のリニューアル版です。

ノートパソコンでも本物の計算が簡単にできます。
あとJulia なのでmac でもWindows でもLinux でもライブラリを気にせず使えます。
Google Colab上でも動きます。

格子QCDとは?

この世の物質は素粒子からできていると言われています。

水兵リーベ…と周期表を習ったと思います。
周期表には原子の種類がリストアップされています。
原子は原子核と電子で構成されていて、原子核が原子の質量のほとんどを占めていると言われています。

原子核は、陽子と中性子でできていて、陽子と中性子は3つのクォークとその間を結ぶグルーオンとという素粒子でできています。

グルーオンは質量0、クォークは陽子中性子の196分の1程度の質量しか持ちません。

実は陽子と中性子の質量は、グルーオンとクォークの相互作用で生み出されています。
つまり、我々の体の重さのほとんどがクォークとグルーオンの相互作用から生み出されています。

詳しくは↓をみると外観がわかると思います。

陽子はクォーク 3 つからできている?【固体量子】

もう少し詳細は
スパコンの中のクォーク-素粒子から原子核をつくる

QCD相図の完成を目指して
あたりが参考になるかもしれません。

また僕の記事もあります。

クォークとグルーオンは相対論と量子論の効果で生まれたり消えたりできるので、場の量子論という理論で計算する必要がありますが、だいたい計算が難しいです。
このクォークとグルーオンの相対論的な量子論をQCD(Quantum Chromo-dynamics)と呼びます。

計算ができないというのは、

\mathbb{E}(f(X)) \propto \int dx \mathrm{e}^{-\frac{1}{2}x^2 -\frac{g}{4}x^4 } f(x)

の計算が一般のg \in \mathbb{R}で難しいのと同じ原因です。普通はgでテイラー展開して計算するんですが、QCDの場合にはg\sim1となっておりテイラー展開での計算も難しいです。

そこで数値計算するというのが、格子QCDの数値計算です (正確には理論の正則化として機能するんですがそこは割愛します。詳しくは橋本省二さんのスライドなどが参考になります)。
僕の記事も合わせてどうぞ。

積分なんで数値積分すれば良さそうな気がしますが、実際の格子QCDでは、100万次元ぐらいの多重積分が出てくるので台形法などの数値積分はできません(数値計算の誤差を抑えて計算しようとすると計算時間が宇宙年齢を遥かに超えてしまいます)。
そこでマルコフ連鎖モンテカルロ法が使われます。

LatticeQCD.jl でも、格子QCDの計算をマルコフ連鎖モンテカルロ法を用いて行います。

LatticeQCD.jlとJulia

LatticeQCD.jl は、僕と Yuki Nagai さんが作ってるJulia 言語(後述)で書かれた、格子QCDの計算のためのオープンソースパッケージです。

以下を目的として作っています。

  1. Julia が動けばどこでも動く (Windows/mac/Linux問わず、スパコンからラップトップまで)。
  2. 簡単に始められる (10分以下で計算を始められる)、教育的。
  3. 一揃い (配位生成も測定もできる)
  4. 簡単に改造できる
  5. Fortran 90並のスピードで動く。

Julia言語 とはC言語/Fortran 並のスピードで動き、Python のように書きやすい科学技術用の言語です。
詳しくは、こちらやこちら(youtube)を御覧ください。

実際、Julia言語は以下のように非常に高速に動作します。

(この画像は1つ前のバージョンで現在は実はこのテストでは↑の設定だとFortran より速いです。)

以下では、LatticeQCD.jl の使い方を説明します。

使い方

5ステップで計算を始められます。

1.まずJulia を Julialang.orgからダウンロードして、 パスを通します。
2021/12/19時点では、1.7.0 です。

2.次に、Juliaを起動して、そこ(REPL)で "]" キーをおして、パッケージモードに入ります。
そして

add LatticeQCD.jl#master

と入力しエンターキーをおします。
#master とつけることで、最新版がインストールされます。

(必要なパッケージは自動的に入ります)

そのあとバックスペースキーでパッケージモードを抜けます。

3.LatticeQCD.jl をロードします。つまりREPL に

using LatticeQCD

と入力します。

4.シミュレーションのパラメータファイルを作るのですが、それはウィザードでできます。
ウィザードを起動するには、

run_wizard()

と入力してください。好きなセットアップを選べます。

simple mode だと、簡単設定でパラメータファイルを作れます。
とりあえず始めたい人は、Enter(return)を連打してください。

5.実際の計算は、

run_LQCD("my_parameters.jl")

と入力することで行なえます。

(バッチとしても実行可能です。詳細は、LatticeQCD.jlのページ(英語) を御覧ください。)

結果

simple modeでデフォルトのパラメータでは、
2つのクォークが入ったQCDの計算、特にπ中間子の相関関数とエネルギー密度(Plaquette)、閉じ込めの秩序変数(Plyakov loop)を計算します。分かっている人向けに言うと、SU(3)、Wilson fermion、HMCの計算です。

実行中の画面をみると

Hadron spectrum: Inversion 12/12 is done
50 136.66493479032025 1.0086753532945905 0.3008679392245064 1.2699438096134177 #pioncorrelator
-----------------
-------------------------------------
# itrj = 51
  3.150176 seconds (37.36 k allocations: 72.534 MiB, 0.70% gc time)
Snew,Sold 2198.0868834179196 2198.054504811807
Sold,Snew,Diff,accept: 2198.054504811807 2198.0868834179196 -0.03237860611261567 true
Acceptance 50/51 : 98.0 %
-----------------
51 0.5745291703906514 # plaq
-----------------
-----------------
51 0.7635645077844723 0.1246343818017141 # poly

みたいなのが見れると思います。それぞれ、#の後にあるキーワードで物理量がみれます。

  • pioncorrelator: π中間子の2点相関関数です。ここの傾きからπ中間子がわかります。
  • plaq: グルーオンのエネルギー密度(Plaquette)
  • poly: 閉じ込めの秩序変数(Polyakov loop)

このほかmeasurements ディレクトリに測定量を保存したテキストファイルが保存されています。
出てきた量を平均すると、場の量子論としての期待値を計算したことになります。

機能

ここでは、機能をリストアップしておきます。他の格子QCDのコードに引けを取らない、たくさんの機能が搭載されたいるのが分かると思います。

  • Gauge field
    • Optimized SU(2), SU(3)
    • General SU(N)
    • General gauge action = plaquette + rect + etc action
  • Fermions
    • Wilson/Wilson-clover (2 flavors)
    • Staggered fermion (1-8 tastes ~ flavors)
  • Configuration generation algorithms
    • Cold/Hot start for SU(N). One instanton configuration for SU(2)
    • Heatbath for SU(N) & overrelaxation for a general gauge action
    • Quenched HMC with SU(N) for a general gauge action
    • HMC (2 flavor Wilson/Clover) with SU(N) with a general gauge action
    • HMC (4 taste staggered fermions) with SU(N) with a general gauge action
    • RHMC (any flavor staggered) with SU(N) for a general gauge action*
    • SU(N) stout smeared dynamical fermions (experimental)
    • Fermion integrated HMC with a general gauge action
    • Self-learning Monte-Carlo with a general action (ref. this paper )
    • Self-learning HMC with plaquette action
  • Measurements
    • Plaquette
    • Polyakov loop
    • Chiral condensates (Wilson, Wilson-Clover, (stout) staggered)
    • Momentum projected pion correlator (Wilson& Wilson-Clover fermion, (stout) staggered)
    • Topological charge(plaquette and clover definition)
    • Load & measurement mode (load and measure all configurations in a directory)
  • Smearing
    • APE, stout (This will be public)
    • Gradient flow for a generic action (Not well tested)
  • I/O for configurations
    • ILDG format
    • JLD format (default binary file for Julia, one of HDF5)

詳細は、LatticeQCD.jlのページ(英語) を御覧ください。

現在は、さらなる機能拡張や高速化、並列化に向けてコードを改良しています。

よろしければ↑のページにスターをいただけると嬉しいです。

良い格子QCDライフを!

Discussion

ログインするとコメントできます