スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

AkaiKKRのMT球の充填率 その2

AkaiKKRのMT球の充填率 その1では、面心立方構造と体心立方構造の金属のマフィンティン半径を変えながら全エネルギーを計算しました。その結果、マフィンティン球をできるだけ大きくするとき、全エネルギーが低くなることが確認できました。
これに対して、プリミティブセルに2種類以上の原子を含む場合、それぞれの原子のMT半径の比をどのように取るのがよいのかという問題が発生します。今回は、MgOのマグネシウムと酸素のマフィンティン球半径の比を、マフィンティン球が接する条件を保ちながら変化させたときに全エネルギーがどのように変わるかを確認しました。


計算手法


AkaiKKRのMT球の充填率 その1と同様に入力ファイルのテンプレートとシェルスクリプトを用いて、酸素とマグネシウムの比を変化させながら全エネルギーを計算します。

c------------------------------------------------------------
go data/MgO_RMT
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
fcc 7.9582 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 2.0 sra pbe nmag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 200 0.035
c------------------------------------------------------------
c ntyp
2
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Mg 1 2 0.0 2
12 100
O 1 RMT 0.0 2
8 100
c------------------------------------------------------------
c natm
2
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 Mg
1/2 1/2 1/2 O
c------------------------------------------------------------


#!/bin/csh -f

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

## *** プロジェクト名 ***
set PREFIX="MgO"

## *** 酸素のMT半径設定値 ***
set RATIO_LIST=( 0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 )

## *** ポテンシャルの再利用フラグ ***
## (0: 利用しない, 1: 利用する)
set POTCOPY=0

## *** 計算結果の出力先 ***
set ANALYSIS="./analysis/${PREFIX}.txt"
if ( -e ${ANALYSIS} ) then
cat ${ANALYSIS} >> ${ANALYSIS}.back
endif
echo "MT_ratio Filling(%) Total_energy(Ry)" > ${ANALYSIS}

## *** 繰り返し計算 ***
foreach RATIO ( ${RATIO_LIST} )
set RMT=`echo "${RATIO}*2" | bc -l | sed -e 's/^\./0./g'`
## *** ファイル名 ***
set TEMPLATE="./template/${PREFIX}_Template.in"
set KKRINP="./in/${PREFIX}_${RMT}.in"
set KKROUT="./out/${PREFIX}_${RMT}.out"
set POTFILE="./data/${PREFIX}_${RMT}"
set POTBACK="./data/${PREFIX}"

## 前回のポテンシャルが存在すれば利用
if (( -e ${POTBACK} ) && ( ${POTCOPY} == 1 )) then
cp ${POTBACK} ${POTFILE}
endif

## *** 入力ファイルの作成 ***
sed 's/'RMT'/'${RMT}'/g' ${TEMPLATE} > ${KKRINP}

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

## 前回のポテンシャルが存在すればバックアップ
if ( ${POTCOPY} == 1 ) then
cp ${POTFILE} ${POTBACK}
endif

## *** 結果の出力 ***
set ENE=`grep "total energy" ${KKROUT} | sed -e s/total//g -e s/energy=//g`
set FIL=`grep "volume filling=" ${KKROUT} | sed -e s/volume//g -e s/filling=//g -e s/%//g`
echo ${RATIO} ${FIL} ${ENE} >> ${ANALYSIS}
end


計算結果


計算結果を以下に示します。

MgO.png

Fig.1


酸素とマグネシウムのマフィンティン半径の比rO/rMgが1.2~1.3ぐらいで全エネルギーが最小になっています。
ちなみにマフィンティン球による充填率は、rO/rMg=1のとき最も低くなります。

関連エントリ




参考URL




参考文献/使用機器




フィードバック



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

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


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


 ↓ この記事が面白かった方は「拍手」をお願いします。
スポンサーサイト

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

AkaiKKRのMT球の充填率 その1

AkaiKKR(machikaneyama)は、マフィンティン球近似(MT近似)を利用しています。このマフィンティン球の半径をどのような値に採るのがよいのかは、よく議論になります。今回は、面心立方構造(fcc)の銅とニッケル、体心立方構造(bcc)の鉄についてマフィンティン半径を変化させながら全エネルギーを計算してみました。


タッチング半径


プリミティブセルに1個だけしか原子を持たないfccやbccの場合、マフィンティン半径を出来るだけ大きく取る方がよい結果になるといわれています。格子定数 a に対して、面心立方構造の最近接原子間距離は $\sqrt{2}a/2$ となります。よってMT球のタッチング半径は、最近接原子間距離の半分で以下のようになります。

\begin{equation*}
r_{MT,fcc} = \frac{\sqrt{2}}{4} a \simeq 0.3535534 a
\end{equation*}

同様に、体心立方構造の場合の最近接原子間距離が $\sqrt{3}a/2$ なので、タッチング半径は以下のようになります。

\begin{equation*}
r_{MT,bcc} = \frac{\sqrt{3}}{4} a \simeq 0.4330127 a
\end{equation*}

タッチング半径を 1 としたときに、実際のMT半径を小さくしていったときに全エネルギーがどのように変化するかを計算します。

計算手法


template/を作成して、以下のような入力ファイルのテンプレートを置きます。

c------------------------------------------------------------
go data/Cu_RMT
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
fcc 6.83 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.2 sra pbe nmag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 200 0.01
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Cu 1 RMT 0.0 2
29 100
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 Cu
c------------------------------------------------------------


このテンプレートでは、マフィンティン半径の部分が RMT という文字列にされているので、この文字列を置き換えながら第一原理計算を行うようなシェルスクリプトを用意します。

#!/bin/csh -f

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

## *** プロジェクト名 ***
set PREFIX="Cu"

## *** タッチング半径に対するMT半径の比 ***
set RATIO_LIST=( 1.00 0.99 0.98 0.97 0.96 0.95 0.94 0.93 0.92 0.91 0.90 0.89 0.88 0.87 0.86 0.85 0.84 0.83 0.82 0.81 0.80 )

## *** ポテンシャルの再利用フラグ ***
## (0: 利用しない, 1: 利用する)
set POTCOPY=0

## *** 計算結果の出力先 ***
set ANALYSIS="./analysis/${PREFIX}.txt"
if ( -e ${ANALYSIS} ) then
cat ${ANALYSIS} >> ${ANALYSIS}.back
endif
echo "MT_ratio Filling(%) Total_energy(Ry)" > ${ANALYSIS}

## *** 繰り返し計算 ***
foreach RATIO ( ${RATIO_LIST} )
## fcc
set RMT=`echo "${RATIO}*sqrt(2)/4" | bc -l | sed -e 's/^\./0./g'`
## bcc
#set RMT=`echo "${RATIO}*sqrt(3)/4" | bc -l | sed -e 's/^\./0./g'`

## *** ファイル名 ***
set TEMPLATE="./template/${PREFIX}_Template.in"
set KKRINP="./in/${PREFIX}_${RATIO}.in"
set KKROUT="./out/${PREFIX}_${RATIO}.out"
set POTFILE="./data/${PREFIX}_${RATIO}"
set POTBACK="./data/${PREFIX}"

## 前回のポテンシャルが存在すれば利用
if (( -e ${POTBACK} ) && ( ${POTCOPY} == 1 )) then
cp ${POTBACK} ${POTFILE}
endif

## *** 入力ファイルの作成 ***
sed 's/'RMT'/'${RMT}'/g' ${TEMPLATE} > ${KKRINP}

## *** 第一原理計算の実行 ***
## 最大計算回数
set nummax=5
## 計算回数の初期化
set num=0
## 最初の第一原理計算
${EXEC} < ${KKRINP} > ${KKROUT}
## *** 繰り返し計算 ***
while ( ( ! { grep -q "err= -6." ${KKROUT} } ) && ( $num < $nummax ) )
${EXEC} < ${KKRINP} > ${KKROUT}
@ num++
end

## 前回のポテンシャルが存在すればバックアップ
if ( ${POTCOPY} == 1 ) then
cp ${POTFILE} ${POTBACK}
endif

## *** 結果の出力 ***
set ENE=`grep "total energy" ${KKROUT} | sed -e s/total//g -e s/energy=//g`
set FIL=`grep "volume filling=" ${KKROUT} | sed -e s/volume//g -e s/filling=//g -e s/%//g`
echo ${RATIO} ${FIL} ${ENE} >> ${ANALYSIS}
end


計算結果


Cu_2017122303463390d.png
Fig.1: 銅の計算結果


Ni.png

Fig.2: ニッケルの計算結果


Fe.png
Fig.3: 鉄の計算結果


とりあえず、いずれの場合もMT球の半径が大きくなるほど全エネルギーが低くなることが分かります。

関連エントリ




参考URL




参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR 

ecaljのgetsyml.py

ecaljには、バンド分散を描画するときの対称性のよいパスを自動的に生成してくれる getsyml.py というpythonスクリプトが ~/ecalj/GetSyml/ にあります。そのディレクトリの README に、以下のようなインストール方法が書いてあるのですが、どういう訳か私の環境では上手く行きませんでした。どうやら私のubuntuのpython環境に何かかの問題があるようでした。

===========================
Requirement and Install:

1.seekpath
>git clone https://github.com/giovannipizzi/seekpath/
>python setup.py install

2.matplotlib for 3D plot
> python -m pip install --update pip #pip update
> pip install matplotlib

3.spglib for crystal structure symmetry
>git clone https://github.com/atztogo/spglib.git
>python setup.py install --user
--user install it locally.


そこでAnaconda で Python 環境をインストールするを参考にして、わたしのubuntuにPython 2.7をインストールしたところ getsyml.py が使えるようになりました。


Anaconda の Python 2.7 のセットアップ


まずAnaconda の Python 2.7 をインストールします(3.xではありません)。Anacondaのダウンロードページから、インストールスクリプトをダウンロードし、実行します。

cd ~
wget https://repo.continuum.io/archive/Anaconda2-5.0.1-Linux-x86_64.sh
bash Anaconda2-5.0.1-Linux-x86_64.sh


すると端末上に、対話型のインストーラーが表示されるので、言われるがままに進めます。最後にAnacondaのpythonをPATHに加えるか聞かれるので yes と答えます。
この段階だと、単純に .bashrc に追記しただけなので source コマンドで .bashrc を再読み込みさせた後 python のバージョンを確認します。

source ~/.bashrc
python --version


以下のように Ananaconda でインストールされたものが表示されていれば成功です。

Python 2.7.14 :: Anaconda, Inc.


seekpath のセットアップ


Python 2.7 のセットアップが完了したら、次に seekpath のセットアップをします。
以下のコマンドを順番に端末に入力します。

cd ~
git clone https://github.com/giovannipizzi/seekpath/
cd seekpath/
python setup.py install


matplotlib のセットアップ


私の環境では特に何もしなくても大丈夫でした。Anacondaではデフォルトでmatplotlibが入ってる?

spglib のセットアップ


以下のコマンドを順番に端末に入力します。

cd ~
git clone https://github.com/atztogo/spglib.git
cd spglib/python/
python setup.py install --user


getsyml.pyの場所をパスに追加


私は ~/ecalj/GetSyml/ をパスに追加しました。
~/.bashrc に以下を追記します。

export PATH="$HOME/ecalj/GetSyml:$PATH"


テスト計算


CIFからecalj入力の作成CIFからecalj入力の作成 その2のセットアップが完了しているという前提で、シリコンのCIFファイルからバンド計算まで一気にやってみます。適当なディレクトリ、例えば ~/ecalj/project/Si-GetSyml/ で以下の順に実行します。

cp ~/cif2cell-1.2.10/cifs/Si.cif si.cif
cif2ctrl.sh si
getsyml.py si
lmfa si
mpirun -np 2 lmf-MPIK si
job_band si -np 2


getsyml.py si を実行すると以下のようなグラフィカルなウインドウが立ち上がります。

Screenshot from 2017-11-15 003A553A41

Fig.1: getsyml.py で得られるブリルアンゾーンの図


最後に job_band si -np 2を実行するとバンド分散の図が得られます。

Screenshot from 2017-11-15 003A583A51

Fig.2: シリコンのバンド構造


ecaljでシリコンのバンド構造(LDA計算)で得られたものと同じバンド分散結果が得られていることが分かります。

関連エントリ




参考URL




フィードバック



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

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


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


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

tag: ecalj 分散関係 

ecaljのアップデート

ecaljは、現在も活発に開発が進められている第一原理計算パッケージです。ecaljのインストール(Ubuntu + gfortran)では ecalj を Ubuntu に gfortran を使ってインストールする方法を書きましたが、ちょくちょくアップデートをするほうがよいです。

アップデートするには、端末に以下のように入力します。

cd ~/ecalj/
git pull origin master:master
./CleanAll.gfortran
./InstallAll.gfortran



また、最新版へのアップデートとは逆に古いバージョンに戻すには以下のようにします。

cd ~/ecalj/
git checkout b4db4044
./CleanAll.gfortran
./InstallAll.gfortran


ここで b4db4044 がバージョン番号です。戻したい番号を指定します。

ちなみに、アップデートは上記のような方法ではなく、乱暴にバックアップをとってからの再インストールでも良いみたいです。

cd ~
cp ~/ecalj/ ~/ecalj-BK/
git clone https://github.com/tkotani/ecalj.git
cd ~/ecalj/
./InstallAll.gfortran


関連エントリ




参考URL




フィードバック



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

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


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


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

tag: ecalj 

CIFからecalj入力の作成 その2

CIFからecalj入力の作成では、結晶構造を表す標準的なファイル形式であるCIFから半自動的にecaljの結晶構造ファイル ctrls を作成する方法を書きました。しかしながら cif2cellのオプションが長すぎて明らかに暗記できないので、CIFからctrlsファイルを作成するシェルスクリプト(cif2ctrls_sh.txt)を書きました。

#!/bin/csh -f

set PREFIX=$1
cif2cell ${PREFIX}.cif -p vasp --vasp-cartesian --vasp-format=5
vasp2ctrl POSCAR
cp ctrls.POSCAR.vasp2ctrl ctrls.${PREFIX}


更に制御ファイル ctrl まで一気に作ってしまうなら、以下のようなシェルスクリプト(cif2ctrl_sh.txt)を使います。ただし ctrlgenM1.py にオプションを渡すことは出来ないので強磁性体の計算をしたい場合などは、上のスクリプトを利用してください。

#!/bin/csh -f

set PREFIX=$1
cif2cell ${PREFIX}.cif -p vasp --vasp-cartesian --vasp-format=5
vasp2ctrl POSCAR
cp ctrls.POSCAR.vasp2ctrl ctrls.${PREFIX}

ctrlgenM1.py ${PREFIX}
cp ctrlgenM1.ctrl.${PREFIX} ctrl.${PREFIX}



使い方


前提条件としてCIFからecalj入力の作成に従って cif2cell のインストールが成功していて、パスも通っている必要があります。

cif2ctrls_sh.txtcif2ctrl_sh.txtをパスの通った場所(例えば ~/bin/ など)に置いて実行権限を与えておきます。

wget -O ~/bin/cif2ctrls.sh https://blog-imgs-116.fc2.com/g/o/m/gomisai/cif2ctrls_sh.txt
wget -O ~/bin/cif2ctrl.sh https://blog-imgs-116.fc2.com/g/o/m/gomisai/cif2ctrl_sh.txt
chmod +x ~/bin/cif2ctrl.sh ~/bin/cif2ctrls.sh


シリコンのCIFファイルから制御ファイルを作って見ます。cif2cell の cifs/ ディレクトリにはいくつかのCIFが保存されています。
まず、計算を実行するフォルダに移動します。どこでも構いませんが、以下の例では ~/ecalj/project/Si-cif2ctrls/ とします。
つぎにcif2cellのディレクトリから CIF をコピーします。このときにファイル名を ecalj で使う拡張子と同じになるようにしておきます(参考: ecaljのファイル命名規則)。

cd ~/ecalj/project/Si-cif2ctrls/
cp ~/cif2cell-1.2.10/cifs/Si.cif si.cif


結晶構造ファイル ctrls を作成するには以下のようにします。
cif2ctrls.sh si


制御ファイル ctrl まで一気に作ってしまう場合は、以下のようにします。
cif2ctrl.sh si


作成された結晶構造ファイルや制御ファイルを用いて、通常通りにLDA計算やQSGW計算を行うことが出来ます。(参考: ecaljの実行手順(LDA計算), ecaljの実行手順(GW近似))

関連エントリ




参考URL




付録


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


フィードバック



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

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


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


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

tag: ecalj CIF 

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ブラウン運動起電力スーパーセル差し込みグラフ第一原理計算フェルミ面fsolveCIFxcrysden最大値最小値ubuntu最適化平均場近似OpenMPシュレディンガー方程式固有値問題井戸型ポテンシャル2SC1815TeX結晶磁気異方性OPA2277非線型方程式ソルバフラクタルFSM固定スピンモーメントc/agnuplotPGA全エネルギーfccマンデルブロ集合縮退正規分布キーボード初期値interp1multiplotフィルタ面心立方構造ウィグナーザイツ胞L10構造半金属二相共存ZnOウルツ鉱構造BaOSIC重積分磁気モーメント電荷密度化学反応クーロン散乱岩塩構造CapSenseノコギリ波デバイ模型ハーフメタルRealforceフォノンquantumESPRESSOルチル構造スワップ領域リジッドバンド模型edelt合金等高線凡例軸ラベル線種シンボルトラックボールグラフの分割MAS830LPIC16F785トランス入出力CK1026PC直流解析パラメータ・モデル等価回路モデル不規則局所モーメント関数フィッティング日本語ヒストグラムTS-112ExcelGimp円周率TS-110LMC662片対数グラフ三次元specx.fifortUbuntu文字列疎行列不純物問題ジバニャン方程式ヒストグラム確率論マテリアルデザインP-10境界条件連立一次方程式AACircuit熱拡散方程式HiLAPW両対数グラフ陰解法MBEナイキスト線図負帰還安定性Crank-Nicolson法EAGLE最小二乗法

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。