AkaiKKRでバンド構造(分散関係)

最新版(August 26, 2015)のAkaiKKR(machikaneyama)でバンド構造が簡単に描ける機能が追加されました。そのまま外部向けの文章(プレゼンテーションや論文など)に使うにはそっけないですが、計算の確認には便利です。

002_20150912192936f79.png

003_2015091219293582c.png
Fig.1-2: 面心立方構造(fcc)のNi90Fe10合金のバンド構造(upスピンとdownスピン)


今回は、この機能の使い方について書きます。


バンド構造計算の新機能


AkaiKKR(machikaneyama)では、バンド構造をプロットする代わりに、ブロッホスペクトル関数をプロットします。これまでもこの方法でバンド構造を描くことが可能でしたが、ブロッホスペクトル関数を計算するk点のパスを「全て」手動で設定しなければならなかったり、描画のためのgnuplotのスクリプトを自分で書かなければならなかったりと、不便がありました。(参考:AkaiKKRで不規則NiMn合金の分散関係AkaiKKRでSrTiO3ペロフスカイト)

August 26, 2015版のcpa2002v009cでは、これらの手間が随分と軽減される機能が新たに実装されました。この機能に関しては付属のReleaseNoteV009cに以下のように書かれています。(タイポと考えられる点は勝手に修正してあります。)

Another new feature provided by this version is the "spc" program that plots a dispersion relation (or broadened dispersion/Bloch spectrum function for alloy cases) if gnuplot is installed. If "spc" is specified instead of "go", then the program create data/file_up.spc and data/file_dn.spc, where data/file is the file specified as a data file in the input. Using the command

spc data/file_up.spc

will plot the dispersion on a gnuplot window. In the input data some additonal data specifying the symmetry points are needed in addition to the number of k-points that will be plotted.
For example, input data like

spc data/nife
fcc 6.65 , , , , , ,
0.001 1.0 nrl mjw mag 2nd
update 4 50 0.03
1
NiFe 2 1 0.0 2 26 40
28 60
1
0 0 0 NiFe
c------- below needed only for "spc" cases
c---number of k-point used for the plot
300
c--- W-point
1 0.5 0
c--- L-point
0.5 0.5 0.5
c--- Gamma-point
0 0 0
c--- X-point
1 0 0
c--- W-point
1 0.5 0
c--- K-point
0.75 0.75 0

will create data/nife_up.spc and data/nife_dn.spc.
Then

spc data/nife_up.spc
spc data/nife_dn.spc

plot the broadend dispersion curves for spin up and down states of Ni60Fe40 disorderd alloy along the W-L-Gamma-X-W-K symmetry lines using 300 k-points. To create the "spc" command, just type

make spc

This is a similar procedure to obtain "gdp" command that plot the DOS curve on a gnuplot window using "make gdp".


かなりいい加減な意訳をすると、以下のような感じでしょうか。

このバージョンのもう一つの新機能は"spc"というプログラムです。これはgnuplotがインストールされていれば、分散関係(合金の場合はにじんだ分散/ブロッホスペクトル関数)をプロットします。"go"の代わりに"spc"を指定することにより、specxプログラムはdata/file_up.spcとdata/file_dn.spcを作成します。ここでdata/fileは入力ファイルで指定されたデータファイルです。以下のコマンドを利用してgnuplotのウインドウ上に分散関係をプロットすることができます。

spc data/file_up.spc

入力ファイルには、通常の計算に加えていくつかのデータが必要になります。プロットする対称性の高いk点とその分割数です。
例えば、入力ファイルは以下のようになります。

spc data/nife
fcc 6.65 , , , , , ,
0.001 1.0 nrl mjw mag 2nd
update 4 50 0.03
1
NiFe 2 1 0.0 2 26 40
28 60
1
0 0 0 NiFe
c------- below needed only for "spc" cases
c---number of k-point used for the plot
300
c--- W-point
1 0.5 0
c--- L-point
0.5 0.5 0.5
c--- Gamma-point
0 0 0
c--- X-point
1 0 0
c--- W-point
1 0.5 0
c--- K-point
0.75 0.75 0

これはdata/nife_up.spcとdata/nife_dn.spcを作成します。

次に以下のコマンドを実行します。
spc data/nife_up.spc
spc data/nife_dn.spc

するとNi60Fe40合金のアップスピンとダウンスピンのにじんだ分散関係をW-L-Γ-X-W-Kの経路を300個のk点でプロットします。

表示のための"spc"実行ファイルを作成するには、以下のように端末に入力します。

make spc

これは状態密度曲線をgnuplotで表示する実行ファイル"gpd"を作成するために実行するmake gpdの手続きと同様です。


もはや上記の通りなのですがNi90Fe10合金のバンド構造を計算しています。

表示用プログラムspcのコンパイル


第一原理計算を実行する前に、結果をプロットするための実行ファイルをコンパイルします。コンパイラはifortでもgfortranでもコンパイル可能です。specxを作成したときと同様にAkaiKKRのインストールディレクトリに移動してmakeを利用します。

make spc

これで実行ファイルspcが作成されるはずです。

ポテンシャルファイルの作成


状態密度の計算と同様に、あらかじめgo計算を収束せてポテンシャルファイルを作成しておく必要があります。

./specx < in/nife


この際の入力ファイルは、AkaiKKRのインストールディレクトリにあるin/nifeを利用しました。

c--------------------NiFe------------------------------------
go data/nife
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
fcc 6.65 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 nrl mjw mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 50 0.03
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
NiFe 2 1 0.0 2
28 90
26 10
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 NiFe
c------------------------------------------------------------


maxitr=50だとerr=-6まで達するのに2回ぐらい実行する必要があると思います。(参考:AkaiKKRでテスト計算)

バンド構造の計算


次にバンド構造を計算するための入力ファイルを作成します。
以下の内容のファイルをin/nife-spcとして保存しました。

c--------------------NiFe------------------------------------
spc data/nife
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
fcc 6.65 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 nrl mjw mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 50 0.03
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
NiFe 2 1 0.0 2
28 90
26 10
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 NiFe
c------------------------------------------------------------
c------- below needed only for "spc" cases
c---number of k-point used for the plot
300
c--- W-point
1 0.5 0
c--- L-point
0.5 0.5 0.5
c--- Gamma-point
0 0 0
c--- X-point
1 0 0
c--- W-point
1 0.5 0
c--- K-point
0.75 0.75 0


go計算用の入力ファイルからの変更点はgoをspcにしたことと、ファイルの末尾にk点の分割数と計算するパスの対称性の高い点の座標を追加したことです。

これをspecxへ渡して.spcファイルを作成します。

./specx < in/nife-spc

するとdata/nife_up.spcとdata/nife_dn.spcが作成されます。
これらをそれぞれ実行ファイルspcへ渡せば、バンド構造が表示されます。

./spc data/nife_up.spc


補足


AkaiKKR(machikaneyama)のバージョンは、現在cpa2002v009cですが、この同じ名前のバージョンの中で頻繁に更新がされています。そんなわけで、バージョン名の代わりに公開された日付で、バージョンの違いを表しています。今回の記事ではAugust 26, 2015のバージョンを使って計算しています。

ブロッホスペクトル関数の計算における、入力ファイルと出力結果のフォーマットは、バージョンごとによく変更されるようです。今回の更新の前もAkaiKKRで不規則NiMn合金の分散関係のエントリを書いていた時期とAkaiKKRでSrTiO3ペロフスカイトのエントリを書いていた時期では出力のフォーマットが異なります。

今後、ねがてぃぶろぐでどのバージョンを使うかは、悩ましい問題ではありますが、おそらく今回(August 26, 2015)のバージョンよりも前の古いフォーマットのものを使い続けることになると思います。その理由は、AkaiKKRで銅と銅亜鉛合金のフェルミ面のような計算をする際に、任意のk点でブロッホスペクトル関数を指定できると便利だからです。

関連エントリ




参考URL




参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: AkaiKKR machikaneyama KKR CPA 分散関係 バンド構造 不規則合金 

ecaljのインストール(Ubuntu + gfortran)

ecaljは鳥取大学の小谷先生が開発しているGW近似を用いた第一原理計算コードです。
ecaljのインストール方法は、ecaljのgithubのページにまとめられています。
今回は、その中でubuntuでgfortranを使ってコンパイルする方法に絞って紹介します。
大まかにいうと、以下の4つのステップです。

  1. 各種ツールのインストール
  2. ecaljのダウンロード
  3. InstallAll.gfortranの編集
  4. InstallAll.gfortranの実行



各種ツールのインストール


ecaljをインストール、実行するために必要なプログラムをインストールします。Ubuntuを使う限り、すべてsudo apt-get install なんちゃらでインストールできてしまいます。
sudo apt-get install git
sudo apt-get install gitk
sudo apt-get install gfortran
sudo apt-get install openmpi-bin libopenmpi-dev
sudo apt-get install libfftw3-3
sudo apt-get install libblas3gf
sudo apt-get install liblapack3gf
sudo apt-get install csh bash tcsh gawk

既にインストールされているものもあるかもしれませんが、気にせずにすべて実行してしまいます。

ecaljのダウンロード


上記のツールのインストールの段階でgitをインストールしてあれば、以下のコマンドを実行することによりecaljのフォルダがホームディレクトリいかに作成されます。

git clone https://github.com/tkotani/ecalj.git


InstallAll.gfortranの編集


ecaljディレクトリに移動すると、それぞれのコンパイラに対応したインストール用のシェルスクリプトが見つかります。
今回はgfortranを利用するので InstallAll.gfortran を使います。基本的にはそのまま使えば良いはずなのですが、私の環境では以下のエラーメッセージが出てインストールに失敗するようです。

gfortran: エラー: /usr/lib/x86_64-linux-gnu/libfftw3.so.3: そのようなファイルやディレクトリはありません


そこでlibfftw3.so.3がどこにあるのか探します。

whereis libfftw3.so.3


私の環境では、以下の結果が返ってきました。
libfftw3.so: /usr/lib/libfftw3.so.3 /usr/lib/libfftw3.so

そこで InstallAll.gfortran を以下のように編集します。
MATH='/usr/lib/libfftw3.so.3 /usr/lib/liblapack.so.3gf /usr/lib/libblas.so.3gf'


InstallAll.gfortranの実行


最後にInstallAll.gfortranを実行します。端末に以下のように入力します。

./InstallAll.gfortran


ずらずらと結果が表示され、インストールが完了すると、次々とテスト計算を行います。
テスト計算は、それなりに長い時間(数時間程度)がかかるかもしれません。

関連エントリ




参考URL




参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: ecalj gfortran ubuntu 

AkaiKKRの原子半径比

AkaiKKRのマフィンティン半径のメモでは、マフィンティン半径の設定としてrmt=0を指定すると原子半径比が設定されると書きました。しかしながら「原子半径比」という言葉の定義は曖昧でした。そこで、総当り的にマフィンティン半径を計算してみた結果、source/qvolum.fに記述された体積の1/3乗の比と考えると納得のいく値になると分かりました。

001_201508231333461de.png

Fig.1: AkaiKKRで設定されるMT半径比(紫の丸)とsource/qvolum.fに記述された体積の1/3乗(緑の実線)。どちらも水素の値で規格化してある。AkaiKKRの「原子半径比」とは単体で結晶化させたときの原子ひとつあたりの体積の1/3乗の比を意味するらしい。



マフィンティン半径にゼロを設定


AkaiKKRのマフィンティン半径のメモでは、入力ファイルの全ての原子に対してrmt=0と指定しておくと、マフィンティン球が重ならない範囲で、それぞれのマフィンティン半径(MT半径)の比が原子半径比になるように設定されると書きました。

しかしながら「原子半径比」というのは、少し曖昧な言葉で、文脈によって色々な解釈がありえます。(参考:元素、原子半径と周期表)
そしてこの言葉の定義に関して、AkaiKKR(machikaneyama)のマニュアルには特に言及がないように見えます。

そこで今回は、多少力業ですが、色々な元素からなるAB二元合金の入力ファイルを総当り的に作成し、それぞれ実際に割り当てられたMT半径のひを調べることにします。

総当り計算の入力ファイル


以下に示すのがMT半径の設定を調べるための入力ファイルのテンプレートです。テンプレート中のA原子とB原子の原子番号をあらわすNAとNBをシェルスクリプトで順次置き換えることにより、実際の入力ファイルを作成します。

c------------------------------------------------------------
go data/AB
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
sc 5.0 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 sra pbe nmag init
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 1 1 0.023
c------------------------------------------------------------
c ntyp
2
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
A 1 0 0.0 2
NA 100
B 1 0 0.0 2
NB 100
c------------------------------------------------------------
c natm
2
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 A
0.1 0 0 B
c------------------------------------------------------------


計算を収束させる必要はないのでbzqltyやmaxitrは1としています。異なる原子同士が確実に先に接するように原子位置を選ぶ必要があることに注意してください。

結果と解釈


AtomicRadii.shを実行して終了を確認した後にAtomicRadiiResult.shを実行するとRMTA.txtRMTB.txtがanalysisフォルダに作成されます(analysisフォルダやを置くtemplateフォルダはあらかじめ作成しておく必要があります。)。これらがMT半径の生データです。

データの数が多いので、水素との化合物を作ったときのMT半径の比だけを考えます。冒頭のFig.1に紫の丸で示してあるのが、水素化合物の計算をしたときの相手方の元素のMT半径で、水素のMT半径が1になるように規格化してあります。(すなわち水素とのMT半径比です。)

MT半径の設定は、セルフコンシステント計算のイテレーションが始まる前に行われます。したがって、AkaiKKRのソースコードのどこかに原子半径比(を計算するため)のパラメータが書かれているはずだと考えます。するとsource/qvolum.fの中に、単体で結晶化させた際の原子一個あたりの結晶の体積が数値データとして書かれているのが見つかります。

そこには2組のデータがあります。1組目は実験データからえら得られたもの、2組目は1組目のものに対してMoruzzi, Janak and Williamsによる第一原理計算によって求められた平衡格子体積から得られた値を一部置き換えたものです。

この後者のmjwの値を含むデータに対して、ある元素xの原子体積を$V_x$と置くと、Fig.1の緑の線は$V_x^{\frac{1}{3}}/V_H^{\frac{1}{3}}$として計算しました。Fig.1を見てのとおり、これらの値は完全に一致しているので、AkaiKKRの原子半径比というのはsource/qvolum.fに記述された、単体元素の原子体積の$\frac{1}{3}$乗の値の比であると考えることができそうです。

関連エントリ




参考URL




付録


このエントリで使用したAkaiKKRのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: AkaiKKR machikaneyama マフィンティン半径 

MathJaxを試してみる

ねがてぃぶろぐは数式を多用しますが、その数式はxyzzyでリージョンのTeX数式をPNG形式で出力の方法で画像を作成して、一つ一つアップロードしていました。しかしながら、それは非常にめんどくさいので、今回はMathJaxを導入してみます。

導入の仕方はくろきげんさんのMathJaxの使い方で説明されているとおり、ブログのテンプレートのheadの部分を少し編集するだけで簡単でした。

シュレディンガー方程式の例
\begin{equation}
i \hbar \frac{\partial}{\partial t}\psi(x,t) = \left(-\frac{\hbar^2}{2m}+V(x) \right)\psi(x,t)
\end{equation}


数式のテスト


ナビエ-ストークス方程式
\begin{equation}
\frac{\partial \mathbf{v}}{\partial t} + (\mathbf{v} \cdot \nabla) \mathbf{v} = - \frac{1}{\rho} \nabla p + \nu \nabla^2 \mathbf{v} + \mathbf{F}
\end{equation}

テント写像
\begin{equation}
x_{n+1} =
\left\{ \begin{array}{ll}
\mu x_n & (x_n < \frac{1}{2}) \\
\mu (1-x_n) & (x_n \geq \frac{1}{2})
\end{array} \right.
\end{equation}

三次元のベクトル$\vec{r_0}=(x_0, y_0, z_0)$をx軸の周りに$\theta$回転
\begin{equation}
\begin{pmatrix}
x \\
y \\
z
\end{pmatrix}
=
\begin{pmatrix}
1 & 0 & 0 \\
0 & \cos\theta & -\sin\theta \\
0 & \sin\theta & \cos\theta
\end{pmatrix}
\begin{pmatrix}
x_0 \\
y_0 \\
z_0
\end{pmatrix}
\end{equation}

[0, 1]の範囲の一様分布な乱数列$\{X_k\}_{k=1,2,\cdots,n}$を用いて関数$f(x)$の積分が$f(X_k)$から計算することができる。

\begin{equation}
\int_0^1 f(x) {\rm d}x = \lim_{n \to \infty} \frac{1}{n} \sum_{k=1}^{n} f(X_k)
\end{equation}

今後の運用について


非常に便利で、エントリを書くのがずいぶん楽になるのですが、ただ悩ましい点もあります。

まず、これまでねがてぃぶろぐのエントリはfc2ブログのサーバーのみで完結するようにしてきました。MathJaxを使うとなるとMathJaxがインストールされているサーバーを参照しなければならなくなるので、例えばMathJaxサーバーが一時的にダウンしているときは当然ながら数式が読めなくなってしまいますし、万が一MathJaxサーバーがサービスを終了したらMathJaxを使って書いた記事が全滅するのではないかという危惧もあります。

また、ブラウザの機能を使ってローカルにhtmlを保存した場合も数式が表示できないようなのでこれも悩ましいです。

ただ、ブログを書く手間自体はずいぶん軽減されるので、しばらく使ってみようと思います。

関連エントリ




参考URL




参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: TeX 

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRmachikaneyamaScilabKKRPSoCOPアンプCPA強磁性PICモンテカルロ解析常微分方程式odeトランジスタecalj状態密度DOSインターフェース定電流スイッチング回路PDS5022半導体シェルスクリプト乱数レベルシフトHP6632A温度解析分散関係I2Cトランジスタ技術R6452A可変抵抗ブレッドボードセミナーバンドギャップ数値積分確率論反強磁性偏微分方程式バンド構造絶縁熱設計非線形方程式ソルバフォトカプラシュミットトリガLEDLM358カオスISO-I2C三端子レギュレータGW近似A/Dコンバータカレントミラーアナログスイッチ数値微分マフィンティン半径TL431発振回路サーボPC817CUSB直流動作点解析74HC4053補間FFTBSch開発環境パラメトリック解析2ちゃんねるチョッパアンプ量子力学bzqlty電子負荷イジング模型LDA標準ロジックアセンブラ基本並進ベクトルブラべ格子単振り子熱伝導位相図TLP621キュリー温度繰り返し状態方程式MaximaVESTAスイッチト・キャパシタ相対論FETランダムウォークスピン軌道相互作用SMP六方最密充填構造抵抗不規則合金ewidthスレーターポーリング曲線GGAラプラス方程式cygwingfortranQSGW失敗談コバルト条件分岐TLP521テスタLM555Writer509TLP552格子比熱マントルデータロガー自動計測詰め回路ガイガー管ダイヤモンドQNAPMCUFXA-7020ZR過渡解析三角波UPSNE555固有値問題熱力学ブラウン運動フェルミ面awk起電力第一原理計算OpenMPfsolveubuntu最大値xcrysden最小値最適化仮想結晶近似VCA差し込みグラフスーパーセル井戸型ポテンシャル平均場近似シュレディンガー方程式FSMフラクタルOPA2277固定スピンモーメント2SC1815全エネルギー合金multiplotgnuplotc/aTeX結晶磁気異方性interp1ウィグナーザイツ胞初期値マンデルブロ集合疎行列面心立方構造fcc不純物問題非線型方程式ソルバフィルタL10構造PGA半金属二相共存SICZnOウルツ鉱構造BaO重積分クーロン散乱磁気モーメント電荷密度三次元CIF岩塩構造CapSenseノコギリ波デバイ模型ハーフメタル正規分布フォノンquantumESPRESSOルチル構造スワップ領域リジッドバンド模型edelt縮退キーボード軸ラベルグラフの分割凡例トラックボールPC不規則局所モーメント片対数グラフトランス両対数グラフCK1026MAS830L直流解析Excel円周率パラメータ・モデルヒストグラム日本語最小二乗法等価回路モデルGimp線種シンボルTS-110TS-112PIC16F785LMC662化学反応文字列specx.f入出力ifortマテリアルデザインヒストグラム確率論Realforce等高線ジバニャン方程式P-10Ubuntuナイキスト線図Crank-Nicolson法陰解法熱拡散方程式HiLAPWAACircuit連立一次方程式負帰還安定性境界条件EAGLEMBE関数フィッティング

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ