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カウンター
カテゴリ
ユーザータグ

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

最新コメント
リンク

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