AkaiKKRでSrTiO3ペロフスカイト

AkaiKKR(Machikaneyama)を用いてSrTiO3ペロフスカイトのバンド構造を計算しました。ついでにバンド構造を計算するための補助に使うScilabスクリプトも載せます。かなり未完成ですが、とりあえずアップロードしてしまいます。動作は無保証です。


SrTiO3.png
Fig.1: SrTiO3のバンド構造



ペロフスカイト構造


VESTAでLaMnO3ペロフスカイトでは、ペロフスカイト構造を持つLaMnO3の結晶をVESTAで描画しました。ペロフスカイト構造をもつ物質は様々な物性を持つため、物質科学ではよく研究対象になります。

第一原理計算入門 AkaiKKRのページで立方晶SrTiO3ペロフスカイトと、Tiを1%のNi及び2%のTaと置換したものの入力ファイルが公開されているのでこれを計算します。(後者に関してはTiは97%ではないのかとも思いましたが、計算の後で気づいたのでそのまま利用させていただきます。)
既に公開されている入力ファイルを使用するので、go計算とdos計算は簡単です。


stoDOS.png

nitastoDOS.png
Fig. 2-3: SrTiO3とそれにNi, Ta不純物を加えた物質の全状態密度。


バンド構造計算補助のScilabスクリプト


AkaiKKRではspcモードを利用して、ブロッホスペクトル関数の計算ができます。これを計算したいk点のパスに沿って指定すればいわゆるバンド構造(電子のエネルギー分散)の図を描くことができます。
ただし、充分きれいな図を描こうと考えるならば、結構な数のk点を指定しなくてはいけないので、手入力で指定するのは手間がかかります。そこで特徴的なk点を指定すれば、その間をn分割したk点をアウトプットするScilabスクリプトを書きました。

まだ書き散らかした状態のスクリプトでb/aなども指定できるようになっていますが本当に動作するかはわかりません。別にこのエントリに限った話ではありませんが、動作は未保証です。

スクリプトの本体は、下記に示すkvector.sceです。
前述したとおり、指定されたk点をn分割して出力します。出力した結果は2つのテキストファイルに書き込まれます。
akaikkr.txtは、入力ファイルの末尾に挿入するk点のリストです。gnuplot.txtはgnuplotのpm3d mapやplot with imageなどで描きだしたバンド構造に特徴的なk点の名前を入れるべきx座標のリストです。

clear;
// *** 設定ファイルの読み込み ***
// bcc Fe
//exec('bccFe.sce');
// fcc Ni
//exec('fccNi.sce');
// hcp Co
//exec('hcpCo.sce');
// Simple cubic SrTiO3 (perovskite)
exec('scSrTiO3.sce');

// *** 各k点間の分割数 ***
n = 101;

// *** k点のグリッドを作成 ***
kpath = [linspace(k(1,1),k(2,1),n)', linspace(k(1,2),k(2,2),n)', linspace(k(1,3),k(2,3),n)'];

for i = 2:(size(k,'r') - 1) do
kx = linspace(k(i,1),k(i + 1,1),n)';
ky = linspace(k(i,2),k(i + 1,2),n)';
kz = linspace(k(i,3),k(i + 1,3),n)';
kpath = [kpath;
[kx(2:$), ky(2:$), kz(2:$)]];
end

// *** k点をつなぐパスの表示 ***
param3d(kpath(:,1),kpath(:,2),kpath(:,3));

// *** k点をつなぐパスの道のり ***
klength = [0];

for i = 2:size(k,'r') do
dkx = (k(i,1) - k(i - 1,1)) * %pi / a;
dky = (k(i,2) - k(i - 1,2)) * %pi / (boa * a);
dkz = (k(i,3) - k(i - 1,3)) * %pi / (coa * a);
klength = [klength, (klength($) + sqrt(dkx ^ 2 + dky ^ 2 + dkz ^ 2))];
end

// *** ファイルの書き出し ***
fprintfMat("akaikkr.txt",kpath);
fprintfMat("gnuplot.txt",klength);


このスクリプトファイルに対して、個別の結晶構造に関するパラメータの部分だけを別ファイルにしたものを読み込ませます。
例えば今回の立方晶SrTiO3ペロフスカイトの場合は、下記のscSrTiO3.sceを作成します。

// 格子定数 bohr
a = 7.38; // 格子定数 a (bohr)
boa = 1; // b/a
coa = 1; // c/a

// *** 計算するk点のパス ***
// sc
// kx ky kz
k = [(1 / 2), (1 / 2), 0 ; // M
(1 / 2), (1 / 2), (1 / 2); // R
0 , 0 , 0 ; // Gamma
(1 / 2), 0 , 0 ; // X
(1 / 2), (1 / 2), 0 ; // M
0 , 0 , 0 ] // Gamma


また、ほかのサンプルとしてニッケル・鉄・コバルトの入力ファイルに対応するデータも載せておきます。(参照: AkaiKKRでニッケル・鉄・コバルト)


結局、AkaiKKRの入力ファイルはSrTiO3_in.txtSrTiNiTaO3_in.txtになります。

バンド構造


出力されたspcファイルからGNUPLOTを用いてプロットしたバンド構造を示します。


SrTiNiTaO3_up.png

SrTiNiTaO3_dn.png
Fig.4-5: Sr(Ti,Ni,Ta)O3のバンド構造。上がupスピン、下がdownスピンです。


比較用としてはABINITによる第一原理電子構造計算例:ABO3(PDF)にSrTiO3ペロフスカイトのバンド構造の計算例が載っています。

関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR CPA Scilab 

Scilabでジバニャン方程式

@Akiyahさんがジバニャン方程式を発見したとのことなのでScilabで計算してみました。





001_20141115151927b2d.png

Fig.1: ジバニャン関数の描画


とはいってもR言語(?)のコードが公開されているので、ほとんどコピペなのですが。以下がjibanyan_sce.txtです。

clear;

// *** ジバニャン方程式の定義 ***
function z = jibanyan_equation(x,y)
z = min(max(min(1 - (x ./ 108) .^ 2 - (y ./ 94) .^ 2,y),min(1 - ((abs(x) - 119) ./ 103) .^ 2 - ((y - 56) ./ 86) .^ 2,1 - ((abs(x) - 15) ./ 77) .^ 2 - ((y - 119) ./ 100) .^ 2),1 - ((abs(x) - 42) ./ 66) .^ 2 - (y ./ 55) .^ 2,min(55 + y,51 - abs(x), - y)),3 .* abs(y - 100) - 2 .* (x - 75)) .* ..
min(min(max(min(1 - (x ./ 106) .^ 2 - (y ./ 92) .^ 2,y),min(1 - ((abs(x) - 119) ./ 101) .^ 2 - ((y - 56) ./ 84) .^ 2,((abs(x) - 99) ./ 40) .^ 2 + ((y - 54) ./ 86) .^ 2 - 1,92 - abs(x)),1 - ((abs(x) - 42) ./ 64) .^ 2 - (y ./ 53) .^ 2),min(((abs(x) - 52) ./ 26) .^ 2 + ((y + 28) ./ 26) .^ 2 - 1,((abs(x) - 51) ./ 13) .^ 2 + (y ./ 13) .^ 2 - 1,max(abs(x) - 51,y))),abs(x ./ 51 + 10 ./ 51 .* sin(abs(y ./ 61.2) .^ (1.2) .* %pi .* (7 ./ 2))) .^ (2 ./ 3) + abs(y ./ 61.2) .^ (2 ./ 3) - 1) .* ..
min(1 - (x ./ 32) .^ 2 - ((y + 30) ./ 32) .^ 2,1 - ((abs(x) + 5) ./ 22) .^ 2 - ((y - 18) ./ 22) .^ 2) .* ..
min(1 - ((abs(x) - 18) ./ 20) .^ 2 - ((y + 10) ./ 20) .^ 2,((abs(x) - 20) ./ 22) .^ 2 + ((y + 7) ./ 20) .^ 2 - 1) .* ..
(1 - ((abs(x) - 51) ./ 11) .^ 2 - (y ./ 11) .^ 2)
endfunction

// *** ジバニャン方程式の計算 ***
// 描画領域の作成
x = linspace(-150,150,400);
y = linspace(-150,150,400);
[X,Y] = ndgrid(x,y);
Z = jibanyan_equation(X,Y);

// *** ジバニャンの描画 ***
xset("fpf"," "); // 等高線に値を表示しない
contour2d(x,y,Z,[0,0]); // Z=0の等高線をプロット


こういうのってどうやって発見するのでしょうか?

フィードバック



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

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


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


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

tag: Scilab ジバニャン方程式 等高線 

ワールドトリガー 8

ワールドトリガー8巻読了。表紙はいやらしい出水先輩、さすがいやらしい表紙。



電子書籍の方が、紙媒体の単行本に比べてお値段がお安いのですね。
ただ、電子書籍版は紙媒体の単行本よりも発売が遅いのは辛いです。同時にできないのは、技術的な問題・・・とは思えないし。もっとも、ジャンプでの連載よりも遅いことに関しては同じですし、アニメよりは早いけれども・・・。まあ、ネタバレを極度に恐れるような性格でもないので。別にいいのですが。

AkaiKKR関連スライド

AkaiKKR(machikaneyama)に関連するセミナーは、かなり活発に行われています。(参考: AkaiKKRのビギナー向けセミナー)
そしてAkaiKKRの使い方などに関連する発表するスライドもウエブ上に公開されているようです。

赤井久純先生最終講義
http://echo.ecs.cmc.osaka-u.ac.jp:8080/ess/echo/presentation/06fe9cbc-196e-455a-9f4d-3c83006c98ab

第5回CCMSハンズオン(ソフトウェア講習会): AkaiKKRチュートリアル 1. KKR法
http://www.slideshare.net/cms_initiative/cmsi-38020198

第5回CCMSハンズオン(ソフトウェア講習会): AkaiKKRチュートリアル 2. AkaiKKRの実習
http://www.slideshare.net/cms_initiative/akai-kkr-handson2

more...

tag: AkaiKKR machikaneyama KKR CPA 

AkaiKKRでコバルトのc/a その2

AkaiKKRでコバルトのc/a その1では、hcp構造の格子定数最適化のために格子体積を固定した状態でc/aを変化させるシェルスクリプトを作成しました。
今回はこれをさらに拡張しc/aを変化させる際にMT半径が変化しないようにするシェルスクリプトを作成しました。


マフィンティン半径(MT半径)の固定


AkaiKKRでコバルトの格子定数ではbzqltyが低いという問題(参考: AkaiKKRの計算精度と計算時間 その2AkaiKKRでFeCoの磁気モーメントと格子定数)の他にc/aを決めるに際してマフィンティン半径(MT半径)を固定していないという問題がありました。

AkaiKKRでコバルトのc/a その1では、この問題を解決するための前半として格子体積Ωを固定しながらc/a≡ηを変化させる(必然的に格子定数aが決まる)シェルスクリプトを書きました。
今回は、それをさらに発展させて格子体積ΩとMT半径(マフィンティン球の体積)を固定した状態でc/aを変化させるシェルスクリプトを書きます。

MT半径の取り得る値


MT半径は。互いに接触するような大きさよりも大きく取ることはできません。したがってすべてのMTをそろえるためには、変化させる範囲のc/aの中で、MT半径が最小になるときを探さなければいけません。

今hcp構造の単位格子の中の(0,0,0)と(a/3, 2a/3, c/2)の位置にコバルト原子があるとします。MT半径をゼロから次第に大きくしていったとき、a軸方向(およびb軸方向)の原子同士が先にぶつかる場合と、単位格子内の2つの原子が先にぶつかる場合の2種類の可能性が考えられます。
どちらが先にぶつかるかはc/aにより変わります。

ab面内でぶつかるときのMT半径は

r_{\mathrm{MT}}=\frac{a}{2}

単位格子内でぶつかるときのMT半径はc/a≡ηとおくと

r_{\mathrm{MT}}=\frac{a}{2}\sqrt{\frac{1}{3}+\frac{\eta^2}{4}}

Scilabによるプロット


それでは、上記のMT半径をc/aの関数としてプロットしてみましょう。
格子体積Ω=150 Bohr3に固定してc/aを1.6から1.7まで変化させたときのMT半径の大きさをScilabでプロットしました。

001_20140914011020cc3.png

Fig.1: 格子体積Ω=150(Bohr3)のした場合のタッチング時のMT半径のc/a依存性。


この図からc/aが理想値2√2/√3≒1.633のときにMT半径が最大になり、MT半径が最小となるのはc/aが最大・最小のいずれかの時であることがわかります。
そこでシェルスクリプトのアルゴリズムは、おおよそ以下のようになります。

  1. η=[η1, η2, ..., ηn]の中から最大値と最小値を探す
  2. ηmaxとηminのときのMT半径を計算してみて小さい方を実際のMT半径として採用する
  3. AkaiKKRの入力ファイルのMT半径は格子定数aで規格化しなければならないので、そのようにする

1.に関しては(やり方はあるはずだと思いますが)どうやればよいのか分からなかったのでηのリストは常に昇順または降順に並べておくという仕様にしました。

MT半径は1未満の小数になりますが、bcの仕様では先頭のゼロが省略されます。AkaiKKRはそれでも気にせず計算してくれるようですが、Unix command > bcによる少数の演算の方法を利用して頭にゼロを補うようにしました。

'0'の部分は消されてしまうことに注意してください。 個人的には、'0.5'と表示してほしいのですが、今のところ、シンプルな解決策を見つけられてません。 応急処置としては、先頭がカンマだった場合に、'0.'に置換する方法があります。 sedを使った例は以下のとおりです。

bc$ echo "1 - 0.5" | bc | sed -e 's/^\./0./g'
0.5

結局、シェルスクリプトCo.shは以下のようになります。
なおこの際入力ファイルを作るためのテンプレートファイルCoTemplate.inはtemplateという名前のディレクトリにおいておく仕様に変更しました。

#!/bin/csh -f

set OMEGA_LIST=( 140 142 144 146 148 150 152 154 156 158 160 )
set ETA_LIST=( 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.70 )

foreach OMEGA ( ${OMEGA_LIST} )
set ETA0=`echo $ETA_LIST[1]`
set A0=`echo "e((1/3)*l(2*${OMEGA}/(sqrt(3)*${ETA0})))" | bc -l`
if (`echo "${ETA0} > 2*sqrt(2)/sqrt(3)" | bc -l` == 1) then
set RMTB0=`echo "${A0}/2" | bc -l`
else
set RMTB0=`echo "${A0}*sqrt(1/3+(${ETA0}^2)/4)/2" | bc -l`
endif

set ETA1=`echo $ETA_LIST[$#ETA_LIST]`
set A1=`echo "e((1/3)*l(2*${OMEGA}/(sqrt(3)*${ETA1})))" | bc -l`
if (`echo "${ETA1} > 2*sqrt(2)/sqrt(3)" | bc -l` == 1) then
set RMTB1=`echo "${A1}/2" | bc -l`
else
set RMTB1=`echo "${A1}*sqrt(1/3+(${ETA1}^2)/4)/2" | bc -l`
endif

if (`echo "${RMTB0} < ${RMTB1}" | bc -l` == 1) then
set RMTB=`echo $RMTB0`
else
set RMTB=`echo $RMTB1`
endif

foreach ETA ( ${ETA_LIST} )
if ( ! -e stop ) then
echo " OMEGA,ETA= "${OMEGA}" "${ETA}

set A=`echo "e((1/3)*l(2*${OMEGA}/(sqrt(3)*${ETA})))" | bc -l | sed -e 's/^\./0./g'`
set RMTA=`echo "${RMTB} / e((1/3)*l(2*${OMEGA}/(sqrt(3)*${ETA})))" | bc -l | sed -e 's/^\./0./g'`

sed 's/'ABOHR'/'${A}'/g' template/CoTemplate.in | sed 's/'ETA'/'${ETA}'/g' | sed 's/'RMTA'/'${RMTA}'/g' | sed 's/'OMEGA'/'${OMEGA}'/g' > in/Co_${OMEGA}_${ETA}.in
specx < in/Co_${OMEGA}_${ETA}.in > out/Co_${OMEGA}_${ETA}.out

tail -n 1 data/co_${OMEGA}_${ETA}.info
endif
end
end


関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

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

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

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

最新コメント
リンク

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