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 マフィンティン半径 

comment

Secret

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

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

最新コメント
リンク

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