AkaiKKRで不純物の磁気モーメント

第31回のCMDワークショップAkaiKKR(machikaneyama)実習で鉄の中に不純物元素を入れたときの不純物元素の磁気モーメントの計算を行いました。CMDワークショップの時には手動で不純物元素の種類を置き換えて計算していたので、今回はシェルスクリプトを作成して自動化を行いました。

bccFeX.png

Fig.1: 強磁性鉄の中の不純物の磁気モーメント。正の値は鉄と同じ向きのモーメントを持つことを意味し、負の値は逆方向のモーメントを持つことを意味する。



入力ファイルのテンプレートとして以下を用意しました。NIMPの部分を不純物元素の原子番号に置き換えて計算します。

c----------------------Fe------------------------------------
go data/bccFeX_ATOM
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
bcc 5.27 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 sra mjw mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 200 0.035
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Fe 2 1 0.0 2
26 100
NIMP 0
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx(in the unit of a) atmtyp
0 0 0 Fe
c------------------------------------------------------------


元素の置き換えの部分などもろもろの処理は、以下のようなシェルスクリプトを作って行いました。
実行するには通常のAkaiKKRのディレクトリ構成に加えて前述のテンプレートファイルを置いておくためのtemplate/ディレクトリや計算結果のサマリが出力されるanalysis/ディレクトリを作っておく必要があります。

#!/bin/csh -f
setenv GFORTRAN_UNBUFFERED_ALL y

## *** プロジェクト名 ***
set PROJECT="bccFeX"

## *** 実行ファイル ***
#set EXEC="~/kkr/20170222/cpa2002v009c/specx"
set EXEC="~/kkr/cpa2002v009c/specx"

## *** 不純物 ***
set ATOM_LIST=( K Ca Sc Ti V Cr Mn Fe Co Ni Cu Zn Ga Ge As Se Br Kr )
set NIMP_LIST=( 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 )

#set ATOM_LIST=( K )
#set NIMP_LIST=( 19 )

## *** 計算結果の出力先 ***
if ( -e analysis/${PROJECT}.txt ) then
cat analysis/${PROJECT}.txt >> analysis/${PROJECT}.txt.back
endif
echo "ATOM NUM MOMFE MONIMP" > analysis/${PROJECT}.txt

## *** 繰り返し計算 ***
set iIMP=1
while ( ${iIMP} <= ${#NIMP_LIST} )
## 変数のセット
set ATOM=${ATOM_LIST[${iIMP}]}
set NIMP=${NIMP_LIST[${iIMP}]}

## ファイル名
set INFILE="in/${PROJECT}_${ATOM}.in"
set OUTFILE="out/${PROJECT}_${ATOM}.out"
set POTFILE="data/${PROJECT}_${ATOM}"
## テンプレートから入力ファイルを作成
sed 's/'ATOM'/'${ATOM}'/g' template/${PROJECT}_Template.in | sed 's/'NIMP'/'${NIMP}'/g' > ${INFILE}

## *** 第一原理計算 ***
## 計算回数の初期化
set num=0
## 最大計算回数
set nummax=20
## 第一原理計算
${EXEC} < ${INFILE} > ${OUTFILE}
while ( ( ! { grep -q "err= -6." ${OUTFILE} } ) && ( $num < $nummax ) )
${EXEC} < ${INFILE} > ${OUTFILE}
@ num++
end

## 磁気モーメントの読み出し
set MMOMFE=`grep "spin moment" ${OUTFILE} | sed -n 1p | awk '{print $3}'`
set MMOMIMP=`grep "spin moment" ${OUTFILE} | sed -n 2p | awk '{print $3}'`

## 結果の出力
echo ${ATOM} ${NIMP} ${MMOMFE} ${MMOMIMP} >> analysis/${PROJECT}.txt

## カウントの増加
@ iIMP++
end


計算結果が書き込まれたbccFeX.txtからgnuplotを使ってグラフを描画します。下記のgnuplotスクリプトを利用しました。

set xzeroaxis
set xlabel "Atomic Number"
set ylabel "Magnetic Moment"

plot "bccFeX.txt" u 2:($4*$3/abs($3)):xticlabels(1) w lp pt 7 not

set terminal pngcairo size 520,390
set output "bccFeX.png"
rep


関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR 強磁性 磁気モーメント 不純物問題 

ecaljでシリコンの電荷密度

ecaljではポスト処理として電荷密度の計算が可能です。プロットにはecaljで銅のフェルミ面で用いたxcrysdenの他にVESTAも利用できます。

2017y09m25d_222734424.png

Fig.1: シリコンの電荷密度



ecaljでシリコンのバンド構造(LDA計算)で作成したシリコンの入力ファイルを利用して、セルフコンシステント計算を行ってから、ポスト処理として以下のコマンドを実行します。

mpirun -np 2 lmf-MPIK si --density


上記のコマンドを実行すると smrho.xsf というファイルが作成されます。ecaljで銅のフェルミ面と同様にxcrysdenがインストールされていれば、以下のコマンドでxcrysdenが起動します。

xcrysden --xsf smrho.xsf


[Tool] → [Data Grid] → [OK] として Isovalue にとりあえず 0.08 を入力して [Submit] すると、シリコン原子間に異方性の強い共有結合が見えるようになります。

ecaljで銅のフェルミ面で書いたとおりxcrysdenはwindowsと相性が良くなさそうです。幸いにしてxsf形式の電荷密度はVESTAでも読み込むことが出来ます。VESTAで読み込んだ場合は、最初から等電荷密度面が表示されています。[Object] → [Properties] → [Isosurfaces...] から設定を変更することが出来ます。

関連エントリ




参考URL




フィードバック



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

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


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


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

tag: ecalj 電荷密度 xcrysden VESTA 

ecaljで銅のフェルミ面

ecaljでは、ポスト処理としてフェルミ面の描画が可能です。より具体的に言うと、xcrysdenのbxsf形式でフェルミ面のデータファイルの出力が可能です。どちらかというとecaljでフェルミ面のデータを出力するよりもxcrysdenを使うほうが面倒なのですが、今回はそのあたりについて書きます。

Screenshot from 2017-09-22 193A253A51
Fig.1: 銅のフェルミ面



Ubuntuへのxcrysdenのインストール


Ubuntuへxcrysdenをインストールするのは簡単です。apt-getからインストールできます。

sudo apt-get install xcrysden


銅のフェルミ面の計算


ecaljでフェルミ面の計算をするのは極めて簡単で、通常のLDA計算を行った後、ポスト処理として job_fermisurfaceを実行します。今回はテスト計算ということで面心立方構造の銅のフェルミ面を描いて見ます。コントロールファイル ctrl.cu~/ecalj/MATERIAL/CuMLWF からコピーしてきました。LDA計算を含めて全部書くと以下のようになります。

cp ~/ecalj/MATERIAL/CuMLWF/ctrl.cu .
lmfa cu
mpirun -np 2 lmf-MPIK cu
job_fermisurface cu -np 2 10 10 10


最後の行がフェルミ面のデータを出力するポスト処理です。最後の 10 10 10 は計算するk点メッシュの分割数です。今回はテスト計算なので小さめの値にしていますが、実際にはもっと大きな数にしたほうがよいでしょう。
fermiup.bxsf というファイルが出来ているはずです。これがフェルミ面のデータが保存されたファイルです。

xcrysdenを用いたフェルミ面の描画


bxsf形式のファイルをxcrysdenで表示する前に注意点があります。それはUbuntuサーバー上で実行したxcrysdenをsshのX転送を使ってWindows上で表示しようとするとxcrysdenが落ちる点です。とりあえず私はクライアントマシンとしてWindows上のVirtualBoxにインストールしたUbuntuの上でxcrysdenを使うことにしました。

以下のコマンドでxcrysdenにフェルミ面のデータを読み込ませることが出来ます。

xcrysden --bxsf fermiup.bxsf


コマンドを打ち込むとxcrysdenのロゴとともに"Specify the Fermi Energy:"というダイアログが表示されます。値はあとから変更できるので、そのままOKをクリックします。

Screenshot from 2017-09-22 193A243A06

Screenshot from 2017-09-22 193A243A46
Fig.2-3: xcrysdenのロゴとフェルミエネルギー指定ダイアログ。値は気にせずOKをクリックする。


次にBARGraphとSelect bandsのウインドウが表示されます。BARGraphウインドウでは、1番から7番のバンドがどのエネルギー幅を持っているのかを示しています。水平な赤の破線で示されているのがフェルミエネルギー(E=0)です。フェルミエネルギーを横切っているバンドは6番だけです。従ってSelect bandsのBand number:6にだけチェックを入れてSelectedをクリックします。(フェルミエネルギーを横切るバンドが複数ある場合は、複数チェックを入れます。)

Screenshot from 2017-09-22 193A253A21

Screenshot from 2017-09-22 193A253A07
Fig.4-5: 1~7番の各バンドのエネルギー範囲と表示するバンドを選択するダイアログ。今回はフェルミエネルギーを横切っているのが6番だけなので6番だけを選択する。


するとフェルミ面が描画されます。Degree of Interpolationの値を大きくしてsubmitをクリックするとフェルミ面の表面が多少滑らかになります。

右下の薄ピンクの背景の部分に-0.026と書かれています。これが現在プロットされているフェルミエネルギーの値です。本来ゼロですが、若干ずれています。この値を変更することによって、フェルミエネルギー以外のエネルギーに対する波数空間での等エネルギー面をプロットすることが出来ます。

関連エントリ




参考URL




フィードバック



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

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


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


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

tag: ecalj フェルミ面 xcrysden 

CIFからecalj入力の作成

ecaljの入力ファイル作成は手動でやってもかなり簡単ですが、更に簡単な方法としてCIFファイルから半自動的に生成する方法もあります。具体的にはCIFから cif2cell を使ってvasp形式のファイルを作成し、そのvasp形式のファイルからecaljの入力ファイルを作成するという方法です。

stSrTiO3.png

Fig.1: SrTiO3の結晶構造。簡単すぎることも複雑すぎることもなく、例題として扱うのに丁度いい結晶。


今回は正方晶(tetragonal)のSrTiO3を例に入力ファイルを作成します。cif2cellがインストールしてあれば、以下の手順で作成できます。

cif2cell srtio3.cif -p vasp --vasp-cartesian --vasp-format=5
vasp2ctrl POSCAR
mv ctrls.POSCAR.vasp2ctrl ctrls.srtio3



ecaljの入力ファイル


ecaljには、結晶構造ファイル ctrls.* からコントロールファイル ctrl.* を半自動的に生成するスクリプト ctrlgenM1.py が付属しています。従って、コントロールファイル ctrl.* がecaljの実質的な入力ファイルでありながら、ユーザーは結晶構造ファイル ctrls.* さえ作ればよいので簡単です。(参考: ecaljの実行手順(LDA計算))

結晶構造ファイルの中身はシンプルなので、人間が手動で作成してもたいした手間ではありませんが、ケアレスミスの可能性もあるので、自動化できるに越したことはありません。そこで今回は、結晶構造を記述するファイル形式として有名なCIFから結晶構造ファイル ctrls.* を半自動的に生成する方法について書きます。
対象にした結晶は、正方晶(tetragonal)の SrTiO3 です。この結晶構造ファイルは Crystallography Open Databaseからダウンロードすることが出来ます。このCIFをVESTAで描画したのがFig.1です。

cif2cellのインストール


SourceForgeからcif2cellをダウンロードし、ホームディレクトリに置きます。私がダウンロードした時点での最新版は cif2cell-1.2.10.tar.gz でした。これを展開します。

tar xzvf cif2cell-1.2.10.tar.gz


展開されたディレクトリへ移動し、インストールを行います。

cd cif2cell-1.2.10/
sudo python setup.py install


更に .bashrc に以下を追記してパスを設定しておきます。

export PATH=$PATH:$HOME/cif2cell-1.2.10


追記したら .bashrc を再読み込みさせます。

source .bashrc


cifから結晶構造ファイル ctrls.* の作成


まずcif形式のファイルを用意します。今回はCrystallography Open Databaseからダウンロードします。

wget http://www.crystallography.net/cod/cif/9/00/28/9002806.cif


次に cif2cell を用いてcif形式からvasp形式のファイルを作成します。

cif2cell 9002806.cif -p vasp --vasp-cartesian --vasp-format=5


このとき私の環境では、以下のような警告が出ますが、無視して進めます。

***Warning : Site occupancies not found, assuming all occupancies = 1.


すると POSCAR というファイルが出来ています。このファイルからecaljの結晶構造ファイルを作ります。

vasp2ctrl POSCAR


結晶構造ファイル ctrls.POSCAR.vasp2ctrl が出来ているはずです。 vasp2ctrl という名前ですが、作成されるのはコントロールファイル ctrl.* では無く、結晶構造ファイル ctrls.* です。

ecaljで強磁性鉄のスピン分極計算ecaljで反強磁性NiOなどの場合は ctrls.POSCAR.vasp2ctrl を基にして自生の設定のための編集が必要になりますが、今回は単純に名前だけ変更します。

mv ctrls.POSCAR.vasp2ctrl ctrls.srtio3


あとは通常通りにLDA計算を行うだけです。

ctrlgenM1.py srtio3
cp ctrlgenM1.ctrl.srtio3 ctrl.srtio3
lmfa srtio3
mpirun -np 2 lmf-MPIK srtio3


関連エントリ




参考URL




フィードバック



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

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


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


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

tag: ecalj CIF 

AkaiKKRで最急降下法

擬ポテンシャル法を用いた第一原理計算パッケージは、多くの場合、結晶構造の最適化機能を持っています。しかしAkaiKKRにはそのような機能はありません。そこで、最急降下法を用いて全エネルギーが最小となる結晶構造を探してみました。
対象として選んだのは六方最密充填構造(hcp)のコバルトです。

steepest.png
Fig.1: 全エネルギーのカラーマップと最急降下法探索による全エネルギー最小化



結晶構造の最適化


多くの第一原理計算パッケージには、結晶構造の最適化機能があります。これは多くの場合、原子にかかる力を計算して、その方向に原子を動かすことによって実現されています。しかしながらAkaiKKR(machikaneyama)では原子にかかる力の計算が出来ません。AkaiKKRでも、全エネルギーが最小になるようにすることで結晶構造の最適化が出来るはずですが、手動ですべてのパラメータの探索を行うのは大変です。そこで最急降下法を使って全エネルギーが最小になる構造を探して見ます。
Scilabで最急降下法 その1Scilabで最急降下法 その2では、簡単な関数f(x,y)に対して、最小値を探すことで最急降下法のアルゴリズムを確認しました。今回は f(x,y)の代わりに第一原理計算を行います。今回はテスト計算として六方最密充填構造(hcp)のコバルトの計算をします。具体的には以下の3つのステップを行います。
  1. マフィンティン半径の決定
  2. エネルギーマップの作成
  3. 最急降下法計算


マフィンティン半径の決定


AkaiKKRで全エネルギーを比較するときは、色々な計算条件が変化しないようにする必要があります。特にマフィンティン半径の設定には注意が必要です。AkaiKKRの入力ファイルでは、マフィンティン半径は格子定数 a で規格化されます。私の理解では「AkaiKKRでマフィンティン半径を固定する」というのは「原子の位置や計算セルのサイズを変更したときに、計算セルの体積に対する各マフィンティン球の体積の比が変化しないようにする」ということです。(これは他の計算手法、例えばAPW法などとは違うことに注意が必要です。)この条件を満たす範囲でマフィンティン半径を最大になるようにするのが最良であると理解しています。(AkaiKKRでBain機構 その1その2も参照。)

そこでまず、全エネルギー最小を探索する格子定数の範囲を決めます。次に、その範囲でrmt=1としたときの実際のマフィンティン球の体積比が一番小さくなってしまう条件を探します。この条件でのマフィンティン半径を全ての計算に用いれば、マフィンティン球が重なることなく、かつ、マフィンティン半径を固定することが出来ます。
決められたマフィンティン半径は、格子体積の1/3乗で規格化しておくのが後々の事を考えると便利なはずです。具体的には下記のようなシェルスクリプトを作成し、計算しました。1.60 ≦ c/a ≦ 1.70 の範囲では rMT/V1/3 = 0.439518 ぐらいのようです。
このスクリプトを走らせる際には、第一原理計算を収束させる必要はないので bzqlty=0maxitr=0としておきます。

#!/bin/csh -f
#setenv GFORTRAN_UNBUFFERED_ALL y

## *** パラメーター範囲 ***
set COA_LIST=( 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.70 )
set OMEGA_LIST=( 160 158 156 154 152 150 148 146 144 142 140 )

# set COA_LIST=( 1.63 )
# set OMEGA_LIST=( 150 )

## *** マフィンティン半径の計算 ***
set OMEGA=${OMEGA_LIST[1]}
set COA0=`echo $COA_LIST[1]`
set A0=`echo "e((1/3)*l(2*${OMEGA}/(sqrt(3)*${COA0})))" | bc -l`
if (`echo "${COA0} > 2*sqrt(2)/sqrt(3)" | bc -l` == 1) then
set RMTB0=`echo "${A0}/2" | bc -l`
else
set RMTB0=`echo "${A0}*sqrt(1/3+(${COA0}^2)/4)/2" | bc -l`
endif
set COA1=`echo $COA_LIST[$#COA_LIST]`
set A1=`echo "e((1/3)*l(2*${OMEGA}/(sqrt(3)*${COA1})))" | bc -l`
if (`echo "${COA1} > 2*sqrt(2)/sqrt(3)" | bc -l` == 1) then
set RMTB1=`echo "${A1}/2" | bc -l`
else
set RMTB1=`echo "${A1}*sqrt(1/3+(${COA1}^2)/4)/2" | bc -l`
endif
if (`echo "${RMTB0} < ${RMTB1}" | bc -l` == 1) then
set RMTB=`echo $RMTB0`
else
set RMTB=`echo $RMTB1`
endif
set RMTOMEGA=`echo "${RMTB}/e((1/3)*l(${OMEGA}))" | bc -l | sed -e 's/^\./0./g'`
echo ${RMTOMEGA}


なおhcp構造の場合はAkaiKKRでコバルトのc/a その2の方法でマフィンティン半径を決めることが出来るのですが、今回は将来的により複雑な構造をやることも考えてこのようにしました。

エネルギーマップの作成


必要ないはずの手順ですが、今回は最急降下法のテストでもあるので、考える体積・軸比の範囲の全ての全エネルギーを計算しておきます。この結果がFig.1のカラーコンターです。

Cシェルスクリプトには関数を実装することが出来ませんが、下請けのシェルスクリプトに変数を渡すことによって、それっぽい事は出来ます。
今回は という下請けのスクリプトを作成しました。これは、体積・軸比・マフィンティン半径の3つを引数として受け取り、第一原理計算を行って全エネルギーを返り値にします。

#!/bin/csh -f
##setenv GFORTRAN_UNBUFFERED_ALL y

## *** プロジェクト名 ***
set PROJECT="hcpCo"

## *** 実行ファイル ***
set EXEC="~/kkr/cpa2002v009c/specx"

## *** 標準入力から値を読み取る ***
## 格子体積
set OMEGA=$1
## c/a
set COA=$2
## RMT
set RMTOMEGA=$3

## ファイル名
set INFILE="in/${PROJECT}_go_${OMEGA}_${COA}.in"
set OUTFILE="out/${PROJECT}_go_${OMEGA}_${COA}.out"
set POTFILE="data/${PROJECT}_${OMEGA}_${COA}"
set POTBACK="data/${PROJECT}_${OMEGA}"

## 格子定数 a の計算
set ABOHR=`echo "scale=7; e((1/3)*l(2*${OMEGA}/(sqrt(3)*${COA})))" | bc -l | sed -e 's/^\./0./g'`
## マフィンティン半径の計算
set RMTA=`echo "scale=7; ${RMTOMEGA}*e((1/3)*l(${OMEGA}))/${ABOHR}" | bc -l | sed -e 's/^\./0./g'`

## テンプレートから入力ファイルを作成
sed 's/'OMEGA'/'${OMEGA}'/g' template/${PROJECT}_go_Template.in | sed 's/'ABOHR'/'${ABOHR}'/g' | sed 's/'COA'/'${COA}'/g' | sed 's/'RMTA'/'${RMTA}'/g' > ${INFILE}

## ポテンシャルファイルのコピー
if ( ! -e ${POTFILE} ) then
if ( -e ${POTBACK} ) then
cp ${POTBACK} ${POTFILE}
endif
endif

## 計算回数の初期化
set num=0
## 最大計算回数
set nummax=20
## 第一原理計算
${EXEC} < ${INFILE} > ${OUTFILE}
while ( ( ! { grep -q "err= -6." ${OUTFILE} } ) && ( $num < $nummax ) )
${EXEC} < ${INFILE} > ${OUTFILE}
@ num++
end

## ポテンシャルのバックアップ
cp ${POTFILE} ${POTBACK}

set ENE=`grep "total energy" ${OUTFILE} | sed -e s/total//g -e s/energy=//g`
echo ${ENE}


enemap.sh は下請けスクリプト dogo.sh を利用して 1.60 ≦ c/a ≦ 1.70, 140 ≦ V ≦ 160 の範囲で全エネルギーのマップを作ります。dogo.sh は最急降下法のシェルスクリプトでも利用します。

最急降下法


エネルギーのマップから最安定な格子定数が V = 150 Bohr3, c/a = 163 付近にあることが予想できます。とりあえず初期値を V = 156 Bohr3, c/a = 1.68 として計算してみます。その結果がFig.1上に白で示された経路です。最急降下法では、その関数の値の微分の方向に向かって次の入力パラメータを探します。今回の計算では、4回程度で格子定数の最適化が出来ている事が確認できます。

最急降下法のCシェルスクリプト steepest.sh は以下の通りです。

#!/bin/csh -f
#setenv GFORTRAN_UNBUFFERED_ALL y

## *** マフィンティン半径 ***
set RMTOMEGA=0.43951815598150528923

## *** 係数 ***
set KEISUU_OMEGA="10000.0"
set KEISUU_COA="0.5"

## *** 初期値 ***
set OMEGA=$1
set COA=$2

## *** 微分のステップ ***
set dOMEGA="1.0"
set dCOA="0.01"
set OMEGA_PLUS=`echo "${OMEGA}+${dOMEGA}" | bc -l`
set OMEGA_MINUS=`echo "${OMEGA}-${dOMEGA}" | bc -l`
set COA_PLUS=`echo "${COA}+${dCOA}" | bc -l`
set COA_MINUS=`echo "${COA}-${dCOA}" | bc -l`

## *** 第一原理計算 ***
set ENE=`./dogo.sh ${OMEGA} ${COA} ${RMTOMEGA}`
echo "Center energy:" ${ENE} "(Ry)"
set ENE_OMEGA_PLUS=`./dogo.sh ${OMEGA_PLUS} ${COA} ${RMTOMEGA}`
echo "Omega plus: " ${ENE_OMEGA_PLUS} "(Ry)"
set ENE_OMEGA_MINUS=`./dogo.sh ${OMEGA_MINUS} ${COA} ${RMTOMEGA}`
echo "Omega minus: " ${ENE_OMEGA_MINUS} "(Ry)"
set ENE_COA_PLUS=`./dogo.sh ${OMEGA} ${COA_PLUS} ${RMTOMEGA}`
echo "c/a plus: " ${ENE_COA_PLUS} "(Ry)"
set ENE_COA_MINUS=`./dogo.sh ${OMEGA} ${COA_MINUS} ${RMTOMEGA}`
echo "c/a minus: " ${ENE_COA_MINUS} "(Ry)"

## *** 数値微分(中心差分) ***
set dENEdOMEGA=`echo "(${ENE_OMEGA_PLUS}+(-1*${ENE_OMEGA_MINUS}))/(2*${dOMEGA})" | bc -l`
echo ${dENEdOMEGA}
set dENEdCOA=`echo "(${ENE_COA_PLUS}+(-1*${ENE_COA_MINUS}))/(2*${dCOA})" | bc -l`
echo ${dENEdCOA}

echo ${OMEGA} ${COA} ${ENE} >> analysis/steepest.txt

set OMEGA=`echo "scale=7; (${OMEGA}-${KEISUU_OMEGA}*${dENEdOMEGA})/1.0" | bc -l`
set COA=`echo "scale=7; (${COA}-${KEISUU_COA}*${dENEdCOA})/1.0" | bc -l`
echo "Next:"
echo "./steepest.sh" ${OMEGA} ${COA}


関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama Scilab KKR 強磁性 シェルスクリプト 

AkaiKKRで鉄のeg, t2g状態密度

第一原理計算入門 AkaiKKRのページで紹介されている方法に従ってAkaiKKR(machikaneyama)を用いて鉄のd状態密度をegとt2gに分解してプロットしました。

FePDOS.png

Fig.1: 強磁性体心立方構造鉄のd電子の部分状態密度



AkaiKKRの部分状態密度


AkaiKKR(machikaneyama)ではgoモードでセルフコンシステント計算を行った後、出力されたポテンシャルファイルからdosモードでspecxを実行することによって状態密度を計算することが出来ます。
状態密度は全状態密度とコンポーネントごとに分かれた部分状態密度の両方が出力されます。デフォルトでは部分状態密度は s, p, d, f, ...軌道に分かれて出力されます。第一原理計算入門 AkaiKKRのページではt2gやegに分解した部分状態密度を計算する方法が書かれています。
今回はこれにしたがって source/spmain.f を編集して鉄の部分状態密度を計算しました。

部分状態密度計算用の実行ファイル


第一原理計算入門 AkaiKKRのページに書かれている通りですが、手順を書きます。具体的には source/spmain.f を編集して再び make するだけです。

まず source/spmain.f と実行ファイルの specx のバックアップを取ります。
cp source/spmain.f source/spmain.f.back
mv specx specx.back


次に source/spmain.f の該当部分を第一原理計算入門 AkaiKKRのページに書かれている通りに編集します。(以下のコマンドでは emacs で編集していますが vi でも gedit でもお好きなエディタでどうぞ)
emacs -nw source/spmain.f


まず下記に該当する部分を探します。
c     --- print partial and the total DOS if required.
if(ids .eq. 1 .or. ids .eq. 2 .or. ids .eq. 3) then
estep=dble(e(2,is))-dble(e(1,is))
do 69 i=1,ncmpx
write(*,'(//1x,a,i2,a,i2)')'DOS of component',i
do 69 k=1,kk
xmd(i,k,1,is)=-dimag(wkc(2,i,k))/pi
cc & (-dimag(wkc(4,i,k))/pi)+(-dimag(wkc(2,i,k))/pi)
xmd(i,k,2,is)=-dimag(wkc(4,i,k))/pi
cc & (-dimag(wkc(4,i,k))/pi)-(-dimag(wkc(2,i,k))/pi)
c 69 write(*,'(1x,f7.4,3x,9f8.4)') dble(e(k,is))-ef(is)
c & ,( -dimag(wkc(l,i,k))/pi,l=1,mxl**2)
do 160 l=1,mxlcmp(i)
c do 160 l=1,2
do 160 m=1,2*(l-1)
160 wkc(l**2,i,k)=wkc(l**2,i,k)+wkc(l**2-m,i,k)
c wkc(5,i,k)=wkc(5,i,k)+wkc(6,i,k)+wkc(8,i,k)
c wkc(7,i,k)=wkc(7,i,k)+wkc(9,i,k)
69 write(*,'(1x,f7.4,3x,4f10.4)') dble(e(k,is))-ef(is)
& ,(-dimag(wkc(l**2,i,k))/pi,l=1,mxlcmp(i))
write(*,'(//1x,a/(1x,f12.7,f13.5))')
& 'total DOS',(dble(e(k,is))-estep/2d0-ef(is)
& ,dimag((detl(k,is)-detl(k-1,is))/(e(k,is)-e(k-1,is)))
& ,k=2,kk)
write(*,'(//1x,a/(1x,f12.7,f13.5))')
& 'integrated DOS',(dble(e(k,is))-ef(is)
& ,dimag(detl(k,is)),k=1,kk)


上記の部分をごっそりと削除して、下記の記述に置き換えます。

c     --- print partial and the total DOS if required.
if(ids .eq. 1 .or. ids .eq. 2 .or. ids .eq. 3) then
estep=dble(e(2,is))-dble(e(1,is))
write(*,'(///a)')
& '(PDOS DATA: Ry, s, px, pz, py, dxy, dyz, dz^2, dxz, dx^2-y^2)'
do 69 i=1,ncmpx
write(*,'(//1x,a,i2,a,i2)')'DOS of component',i
do 69 k=1,kk
xmd(i,k,1,is)=-dimag(wkc(2,i,k))/pi
cc & (-dimag(wkc(4,i,k))/pi)+(-dimag(wkc(2,i,k))/pi)
xmd(i,k,2,is)=-dimag(wkc(4,i,k))/pi
cc & (-dimag(wkc(4,i,k))/pi)-(-dimag(wkc(2,i,k))/pi)
69 write(*,'(1x,f7.4,3x,9f8.4)') dble(e(k,is))-ef(is)
& ,( -dimag(wkc(l,i,k))/pi,l=1,mxl**2)
c do 160 l=1,mxlcmp(i)
c do 160 l=1,2
c do 160 m=1,2*(l-1)
c 160 wkc(l**2,i,k)=wkc(l**2,i,k)+wkc(l**2-m,i,k)
c wkc(5,i,k)=wkc(5,i,k)+wkc(6,i,k)+wkc(8,i,k)
c wkc(7,i,k)=wkc(7,i,k)+wkc(9,i,k)
c 69 write(*,'(1x,f7.4,3x,4f10.4)') dble(e(k,is))-ef(is)
c & ,(-dimag(wkc(l**2,i,k))/pi,l=1,mxlcmp(i))
if(is .eq. 1) then
write(*,'(//1x,a/(1x,f12.7,f13.5))')
& 'total_up TDOS_up',(dble(e(k,is))-estep/2d0-ef(is)
& ,dimag((detl(k,is)-detl(k-1,is))/(e(k,is)-e(k-1,is)))
& ,k=2,kk)
write(*,'(//1x,a/(1x,f12.7,f13.5))')
& 'integrated_up IDOS_up',(dble(e(k,is))-ef(is)
& ,dimag(detl(k,is)),k=1,kk)
end if
if(is .eq. 2) then
write(*,'(//1x,a/(1x,f12.7,f13.5))')
& 'total_dn TDOS_dn',(dble(e(k,is))-estep/2d0-ef(is)
& ,dimag((detl(k,is)-detl(k-1,is))/(e(k,is)-e(k-1,is)))
& ,k=2,kk)
write(*,'(//1x,a/(1x,f12.7,f13.5))')
& 'integrated_dn IDOS_dn',(dble(e(k,is))-ef(is)
& ,dimag(detl(k,is)),k=1,kk)
end if


編集したら make を実行します。
make


出来たファイルはpdos用に別名保存するようにしました。ついでにバックアップしておいた通常の specx を復帰させておきます。
mv specx specx.pdos
mv specx.back specx


また source/spmain.f も元に戻しておいたほうがいいでしょう。代わりに編集したバージョンのバックアップを取っておきます。
mv source/spmain.f source/spmain.f.pdos
mv source/spmain.f.back source/spmain.f


鉄の計算


入力ファイルは通常の鉄の計算用のものと基本的には変わりませんが、今回の specx.pdos はd電子までしか計算できないので l=2 とします。また部分状態密度は全状態密度よりもギザギザになりやすいので bzqlty はかなり高めにしました。

c----------------------Fe------------------------------------
dos data/fe
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
bcc 5.27 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 nrl mjw mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 18 100 0.035
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Fe 1 1 0.0 2
26 100
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx(in the unit of a) atmtyp
0 0 0 Fe
c------------------------------------------------------------


結果として得られる部分状態密度は s, p, py, pz,
dxy, dyz, dz2, dxz, dx2-z2の順に出力されます。
今回は eg=dz2+dx2-y2 と t2g = dxy+dyz+dxz についてプロットしました。


関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR 状態密度 DOS 

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関数フィッティング

最新コメント
リンク

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