flexible DM-NRGを用いた不純物アンダーソン模型のスペクトル関数の計算
Last Update:2021/12/09
はじめに
flexible DM-NRGは不純物模型を数値くりこみ群(Numerical Renormalization Group, NRG)によって解く数少ない公開プログラムである。入手方法は、ライセンスに関するWebページのフォームに記入して送信すると、しばらくしてソースコードのURLが送られてくる。ライセンスはGNU GPLである。私が入手したコードのファイル名は、flexible-dmnrg-1.0.0.tgzである。以下、このソースコードが、MateriApps LIVE!環境のホームディレクトリにあるとして、プログラムのコンパイルおよび不純物アンダーソン模型のスペクトル関数を計算してみよう。使用したMateriApps LIVE!のバージョンは2.4である。
インストール方法
まずソースコードを解凍し、新しくつくられるディレクトリに移動する:
$ tar zxvf flexible-dmnrg-1.0.0.tgz $ cd flexible-dmnrg-1.0.0
次にコンパイルや実行を行うスクリプトファイルをダウンロードして、解凍する:
$ wget https://github.com/cmsi/malive-tutorial/releases/download/tutorial-20200202/flexible_dmnrg.tgz $ tar zxvf flexible_dmnrg.tgz
コンパイルは下記のコマンドによって行う:
$ sh compile.sh
問題なくコンパイルできると、同じディレクトリにfnrg, sfbなどの実行ファイルができるはずである。
実行方法
インストールが完了したら、早速実行してみよう。基本的にはinput.datというファイルを用意し、プログラムfnrgを実行する。スペクトル関数を計算するには、その後にプログラムsfbを実行する。input.datのフォーマットは一般に複雑である。これはいろいろな模型に対応させるためである。しかし、簡単な模型については、ディレクトリinput_filesにテンプレートが用意されているので、これをコピーしてきてinput.datに名前を変更すればよい。input.datのなかに、物理的なパラメータのほかに、くりこみの途中で残す状態の数や、エネルギー繰り込み係数Λなどの指定が可能である。
ここでは事前に用意したスクリプトを用いて、不純物アンダーソン模型の数値くりこみ群の計算を実行してみよう。まず下記のコマンドを入力する:
$ sh run.sh
これにより複数の相互作用パラメータUについて、数値くりこみ群の計算が実行され、スペクトル関数が計算されて、同じディレクトリにspectral_func_U_****.datというファイルが生成される(***は数値である)。これらを表示させるには、下記のコマンドを用いる。
$ gnuplot -persistent plot.gp
うまく実行されると、下図のようなグラフがえられるはずである。
なおアンダーソン模型では、相互作用の大きさUのほかに、U=0のときのスペクトル関数の幅Γが重要なパラメータになっている。実際にU=0のときのスペクトル関数はA(ω)=(Γ/π)/(ω2+Γ2) とかかれる。本計算では不純物と伝導電子の鎖の間のホッピングをt=0.25としており(input.datファイル中にt = 0.25という行がある)、このホッピングから線幅はΓ=πt^2/2 で計算できる(ここではΓ=0.098)。ここから計算したU=0のスペクトル関数と、数値くりこみ群のU=0の結果は微妙にずれているが、これはくりこみの係数Λ(ここでは2としている)が大きすぎている、もしくは、残す状態の数(ここでは100)が小さすぎるためである。これらのパラメータを調整することで一致が改善する(計算は重くなる)。
おわりに
flexible DM-NRGのマニュアルはあくまで参照用という感じになっており、最初の計算例を確かめるまでパラメータのありかなどを探すのにそれなりに時間がかかってしまう。本チュートリアルが役立てば幸いである。一度、計算ができてしまえば、マニュアルをよく参照しながら、より多くのパラメータ・模型の計算を行うのは、思った以上に簡単である。ぜひ挑戦してほしい。