AkaiKKRとecaljでCuGaTe2 その1

第一原理計算パッケージには、それぞれ特徴があり、計算したい物質によって適切に使い分ける必要に迫られることがあります。AkaiKKR(machikaneyama)は不規則系に適しており、ecaljは半導体のバンドギャップを求めるのに適しています。

例えば、不規則を含む半導体の計算をAkaiKKRで行いたいと考えたとき、不規則を含まない端成分の計算をecaljの結果と比較しておくことは有用です。今回はCuGaTe2を対象として、AkaiKKRで状態密度の計算をおこないました。

CuGaTe2DOS.png
Fig.1: CuGaTe2の状態密度



AkaiKKRとecaljの長所


AkaiKKR(machikaneyama)は、コヒーレントポテンシャル近似(CPA)を導入することによって、合金などの不規則性を扱うことが可能であるという特徴があります。
またecaljはGW近似を用いて、半導体のバンドギャップの見積もりを局所密度近似(LDA)から改善できる長所があります。

他にもさまざまな第一原理計算パッケージが、それぞれ特有の長所を持っています。このため、しばしば複数のコードでの計算結果を比較するということが起こります。

今回と次回では、AkaiKKRの掲示板に投稿された CuGaTe2 のバンドギャップをこれら二つのコードで計算し、バンドギャップと状態密度の比較を行います。今回はAkaiKKRでの計算です。

計算手法


入力ファイルはCannot reproduce the bandgap of CuGaTe2に投稿されているものとほとんど同じですが、少しだけ変更してあります。一つ目の変更点は、スピン軌道相互作用を(計算が重いので)はずした事。二つ目はewidthを小さくしたことです。

c--------------------CuGaTe2---------------------------------
go data/cugate2
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
bct 11.5388 1.992 1 90 90 90
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 0.7 sra pbe nmag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 500 0.015
c------------------------------------------------------------
c ntyp
5
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Cu 1 0 0.0 2 29 100
Ga 1 0 0.0 2 31 100
Te 1 0 0.0 2 52 100
Es1 1 0 0.0 0 0 100
Es2 1 0 0.0 0 0 100
c------------------------------------------------------------
c natm
16
c------------------------------------------------------------
c atmicx atmtyp
0.23703x 1/4y 1/8z Te
0.76297x 3/4y 1/8z Te
3/4x 0.23703y 3/8z Te
1/4x 0.76297y 3/8z Te
1/2x 1/2y 0.0z Ga
1/2x 0.0y 1/4z Ga
0.0x 0.0y 0.0z Cu
0.0x 1/2y 1/4z Cu
c
0.75x 1/4y 1/8z Es1
0.25x 3/4y 1/8z Es1
3/4x 0.75y 3/8z Es1
1/4x 0.25y 3/8z Es1
c
0.0x 0.0y 0.25z Es2
1/2x 1/2y 0.25z Es2
0.0x 1/2y 0.0z Es2
1/2x 0.0y 0.0z Es2
c------------------------------------------------------------


結果


Fig.1に状態密度を示します。
AkaiKKRでの状態密度やバンド構造(ブロッホスペクトル関数)のエネルギー分解能は source/specx.f の msex で指定することが可能で、デフォルトでは msex=201 となっています。したがって、状態密度を計算するために ewidth = 0.8 Ry とした場合の分解能は 4 mRy 程度になります。その結果、状態密度の図だけを見ると、バンドギャップが存在するか否かが微妙です。

AkaiKKRでバンドギャップの測り方では、バンドギャップを決める場合、状態密度から値を読むよりも、バンド構造から見るほうが良さそうであると書きました。CuGaTe2は、伝導帯の上端(CBM)と価電子帯の下端(VBM)が共にΓ点に存在する直接遷移型の半導体であるとの事なので、その付近のバンド構造をプロットしたのがFig.2です。

CuGaTe2band.png
Fig.2: Γ点周辺のCuGaTe2のバンド構造


GaAsの場合と異なり、CBMにフェルミ準位(というか計算上のエネルギー基準点)が張り付いてしまっていますが、電子の数を足し上げるときの数値計算上の誤差と思うので、いまは気にしないことにします。

ローレンツ関数へのフィッティングは、あまりきれいにいかなかったので、目視で読むと、バンドギャップの大きさはおよそ 30 mRy 程度でしょうか。換算すると 0.4 eV 程度となるので、Cannot reproduce the bandgap of CuGaTe2に書かれている通り 1 eV 程度存在するはずのバンドギャップから見ると過小評価です。

AkaiKKRに限らず密度汎関数理論(DFT)に局所密度近似(LDA)や一般化勾配近似(GGA)を組み合わせた第一原理計算パッケージは、バンドギャップを過小評価してしまう問題が広く知られています。
ecaljで利用できるGW近似は、この問題に対する回答のひとつです。AkaiKKRとecaljでCuGaTe2 その2では、ecaljを用いてCuGaTe2の状態密度とバンドギャップを計算します。

関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR CPA ecalj 半導体 バンドギャップ バンド構造 分散関係 GW近似 

AkaiKKRで黄銅の規則・不規則転移

AkaiKKR(machikaneyama)はコヒーレントポテンシャル近似(CPA)を用いて不規則合金の電子状態の計算を行うことができます。今回は、秩序パラメータの異なる立方晶の黄銅(B2型構造とbcc構造の間)の計算を行いました。
更に、その全エネルギーと配置のエントロピーからギブスエネルギーを計算し、相の安定性を議論しました。
その結果、規則・不規則転移温度は430℃となり、この値は実験によって得られている460℃に極めて近い値となっています。

CuZnCIF.png

Fig.1: CsCl型(B2)規則構造のβ-黄銅(CuZn)。Crystallography Open DatabaseのCuZnのcifデータをVESTAで描画した。



β黄銅の規則(B2)相・不規則(bcc)相転移


物質の科学・反応と物性8.2.相転移の種類では二次の相転移の一例として、黄銅(CuZn)の規則不規則転移が紹介されています。

黄銅は、低温ではFig.1に示すようなCsCl型(B2)の規則構造をとります。これを充分高温にすると、体心立方構造(bcc)の不規則構造になります。Fig.1のB2構造は、立方晶の頂点位置に銅原子があり、体心位置に亜鉛原子があります。規則・不規則転移では、温度が上がるに従って、これらの原子がランダムに入れ替わっていき、転移温度(黄銅の場合は460℃)以上では、各サイトのそれぞれの原子の占有率が50%となる、完全に不規則なbcc構造になります。

このように連続的に状態が変わっていくような相転移を二次の相転移と呼びます(ちゃんとした定義はギブスエネルギーのn次微分が不連続になる相転移をn次相転移ということです)。状態の変化を表すパラメータとして秩序パラメータ(規則度)が使われます。いま、体心位置のサイトを亜鉛が占有する割合を r とすると、秩序パラメータは、以下のように表すことができます。
\begin{equation}
\eta = 2r - 1
\end{equation}
秩序パラメータは、完全な規則状態で η=1 完全な不規則状態で η=0 となります。
秩序パラメータは温度に対して連続的に変化しますが(実験的には)比熱の不連続から転移温度を決定することができます。



全エネルギー計算


AkaiKKR(machikaneyama)を用いれば、任意の秩序パラメータを持った黄銅の全エネルギーを計算することができます。

入力ファイルは、単純立方格子の頂点位置に銅を、体心位置に亜鉛を置く構造を基本にして、コヒーレントポテンシャル近似(CPA)を使って占有率を変化させます。格子定数は、すべての組成で a=5.565 Bohr (= 2.945 Å)としました。

c------------------------------------------------------------
go data/CuZn_XIA_ABOHR
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
sc ABOHR , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 sra pbe nmag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 4 200 0.01
c------------------------------------------------------------
c ntyp
2
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Cu 2 1 0.0 2
29 XIA
30 XIB
Zn 2 1 0.0 2
30 XIA
29 XIB
c------------------------------------------------------------
c natm
2
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 Cu
1/2 1/2 1/2 Zn
c------------------------------------------------------------


上記が、入力ファイルのテンプレートです。
このテンプレートを元にCシェルスクリプトを利用して、入力ファイルを作成、全エネルギーを計算します。

全エネルギー計算の結果


全エネルギーはB2型規則相で最も低くなりました。この事は、低温では規則構造が現れることと調和的です。

CuZn.png

Fig.3: サイトの占有率と全エネルギー。占有率100%で完全規則状態(B2構造)、50%で完全不規則状態(bcc構造)。


配置のエントロピー


次は、配置のエントロピーを考慮した有限温度での構造について議論します。
相の安定性は、ギブスエネルギーの大小関係から判断することができます(参考:全エネルギーって何だよ?)。
\begin{equation}
G = E + pV - TS
\end{equation}
ここでEは全エネルギー、pは圧力、Vは体積、Tは絶対温度、Sはエントロピーです。大気圧(p≒0)を考えるとpVの項が消えるので、残るのはエントロピーSです。

エントロピーは、振動のエントロピー(参考: AkaiKKRで金属の熱物性)と配置(混合)のエントロピーの2つの項が主要です。今回は、振動のエントロピーは、秩序パラメータにかかわらず一定と仮定して、配置のエントロピーだけを考えることにします。

配置のエントロピーは、スターリングの近似式を用いて、以下のように表すことができます。
\begin{equation}
S=-k_B N \left( \frac{1+\eta}{2}\ln (1+\eta) + \frac{1-\eta}{2}\ln(1-\eta) -\ln 2 \right)
\end{equation}

単位には注意が必要です。
まず、ギブスエネルギーの各項の次元がエネルギーの次元になっていることを確認してください。
次にエネルギーの単位として、何を選ぶかを決めます。ジュール(J)でも、リュードベリ原子単位系(Ry)でも、エレクトロンボルト(eV)でも構いませんが、今回はリュードベリ原子単位系(Ry)とします。するとボルツマン定数も kB = 6.33367 * 10-6 (Ry/K) となります。
さらに原子の数Nもそろえる必要があります。1 molでも 1 原子でも構いませんが、今回は 1 化学式、すなわち N=2 とします。

001_20151021013246770.png

Fig.4: 温度と秩序パラメータの関係


以下のScilabスクリプトを用いて計算した温度と秩序パラメータの関係がFig.4です。
得られた転移温度は430℃となり実験値の460℃と近い値です。また、広い温度範囲にわたって秩序パラメータが変化する二次の相転移の特徴も確認できます。

clear;

// *** 入力パラメータと定数 ***
// ボルツマン定数 6.33367E-6 (Ry/K)
kB = 1.380658E-23/2.17987E-18;
// 原子数
N = 2;

// *** 全エネルギーの読み込み ***
M = fscanfMat("CuZn.txt");
X = M(:,1);
E = M(:,2);
// 全エネルギーの内挿
Xp = linspace(50,99.999,1000);
Ep = interp1(X, E, Xp, 'spline');
// 秩序パラメータ
ETA = 2 .* (Xp ./ 100) - 1;

// *** エントロピー計算 ***
// 配置のエントロピー
Sm = -1 * kB * N * (((1+ETA)./2).*log(1+ETA)+((1-ETA)./2).*log(1-ETA)-log(2));
// 温度ごとにギブスエネルギーを計算
Temp = [0:0.1:600];
Xmin = [];
ETAmin = [];
for i=1:length(Temp) do
T = Temp(i) + 273.15;
Gp = Ep - T .* Sm; // ギブスエネルギーの計算
[gmin, k] = min(Gp); // ギブスエネルギーの最小を探す
// ギブスエネルギーが最小となる占有率と秩序パラメータを保存
Xmin = [Xmin, Xp(k)];
ETAmin = [ETAmin, ETA(k)];
end

// *** グラフのプロット ***
plot(Temp,ETAmin);
xlabel("Temperature (deg C)")
ylabel("Order parameter");


関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR Scilab machikaneyama KKR CPA 

二元合金/鉄合金状態図集

AkaiKKR(machikaneyama)は不規則合金のDFT計算を得意としています。ところで世の中には、どのような合金が存在しているのでしょうか?
このような情報が一目で分かるのが、金属の状態図です。興味のある物質の状態図はGoogle画像検索などで見つかることもありますが、やはりちゃんとした文献で見ておきたいと思います。



そこで心強いのが、状態図が一覧になっている状態図集です。アグネ技術センターから二元合金状態図集鉄合金状態図集―二元系から七元系までが出版されています。

二元合金状態図集は5,600円+税で鉄合金状態図集―二元系から七元系までに至っては7,000円+税という結構なお値段ですが、とうとう購入してしまいました。

特に二元合金状態図集はAkaiKKRを使うなら持っていると便利だと思います。規則相、不規則相と共に結晶構造も書いてあり、磁性体の場合は、磁気変態温度(キュリー温度など)も載っています。

なお、二元合金状態図集の後ろのほうには、簡単な状態図の読み方の解説も載っていますが、私としては見方・考え方 合金状態図が読みやすかったので、あわせて宣伝しておきます。

関連エントリ




参考URL




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR CPA 強磁性 合金 

AkaiKKRでfccNiMnの磁性と格子定数

AkaiKKR(machikaneyama)を用いて面心立方構造(fcc)の不規則NixMn100-x合金の計算を強磁性状態、反強磁性状態、非磁性状態について行いました。その結果、最安定な磁気状態や格子定数の組成依存性が実験結果を(少なくとも定性的には)再現できました。

fccNiMn.gif

Fig.1: fcc NixMn100-x不規則合金の全エネルギーと自発磁化



強磁性・反強磁性転移


志賀正幸著磁性入門―スピンから磁石まで (材料学シリーズ)工学と理学のはざまで - インバー研究の流れ -などに、不規則fccNiMn合金の格子定数と磁性の関係が議論されています。

以下に示すFig.2は工学と理学のはざまで - インバー研究の流れ -から引用したNi-Mn系の実験から得られている格子定数と磁気モーメントです。右端の純ニッケルでは 0.6 μB の磁気モーメントを持つ強磁性体ですが、マンガン濃度が増していく(ニッケル濃度が減っていく)とNi70Mn30よりマンガン側で自発磁化がなくなります。
これは、合金が非磁性になるのではなく、局所モーメントを持ったまま反強磁性体になるからであると書かれています。つまり、この系では(L12型規則相のNi3Mnを除けば)結晶構造が面心立方構造(fcc)から変化せず、格子定数と磁性だけが変化することになります。

NiMn.png

Fig.2: fcc NiMn合金の格子定数とバルクの磁気モーメント 工学と理学のはざまで - インバー研究の流れ -より


AkaiKKRでγ-Mnの反強磁性ではL10型に似た単純な反強磁性の第一原理計算をAkaiKKR(machikaneyama)を用いて行いました。今回は、この単純な反強磁性を仮定してfcc NixMn100-xの計算を行いました。

計算方法


基本的にはAkaiKKRでγ-Mnの反強磁性のときの入力ファイルをコヒーレントポテンシャル近似(CPA)を用いた合金の計算に拡張するだけです。強磁性初期ポテンシャルから、反強磁性初期ポテンシャルをつくるのには、他のパターンもあるのかもしれませんが、1種類だけを考えました。

今回もこれまで同様、強磁性、反強磁性、非磁性の入力ファイルのテンプレートを作成しておいて、格子定数と原子の濃度をパラメータとして変化させながら計算させるシェルスクリプトを作成しました。反強磁性状態の初期ポテンシャルは、強磁性状態のポテンシャルから作成しました(参考:AkaiKKRで反強磁性クロム)。以下に示すのは反強磁性状態の入力ファイルのテンプレートです。

c-----------------------L10fccMn-----------------------------
go data/L10fccNiMn_XINI_AFM_ABOHR
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
bso ABOHR , 1 , 1 , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.2 sra gga91 mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 8 500 0.023
c------------------------------------------------------------
c ntyp
2
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
NiMn1 2 1 0.0 2 28 XINI
25 XIMN
NiMn2 2 1 0.0 2 28 XINI
25 XIMN
c------------------------------------------------------------
c natm
2
c------------------------------------------------------------
c atmicx atmtyp
0 0 0 NiMn1
1/2 0 1/2 NiMn2
c------------------------------------------------------------


計算結果と議論


冒頭のgif動画は、結果の全磁気モーメント(自発磁化)と全エネルギーを格子定数ごとにプロットしたものです。
赤が反強磁性の初期ポテンシャルから計算した結果です。反強磁性状態が保たれているか、あるいは非磁性状態になっている場合は、全磁気モーメントはゼロになります。こうニッケル濃度側では、有限の自発磁化を持ってしまい、初期ポテンシャルを反強磁性にしても強磁性の解が得られています。

同様に、緑の線で示したのが強磁性初期ポテンシャルから計算したものです。格子定数が小さくなると磁気モーメントがなくなり、非磁性になっているのが分かります。

青はスピン分極を含まない、非磁性の計算で磁気モーメントは常にゼロです。

グラフの下のパネルは、全エネルギーの比較です。
縦軸に数値は振っていませんが、同じ化学組成で相対的な比較ができるようにスケーリングしてあります。

fccNi0Mn100.png

Fig.3: fcc Mnの全エネルギーと磁気モーメント


例えば純マンガンの場合は、反強磁性状態が最安定で、格子定数は a=6.9 Bohr 付近であることが分かります。
強磁性状態と非磁性状態の比較を行うと a=7.1 Bohr 以下では強磁性が消えて、2つの計算は同じ結果を示すことがわかります。高体積側では強磁性状態に極小値がありそうです。

fccNi60Mn40.png

Fig.4: fcc Ni60Mn40の全エネルギーと磁気モーメント


ニッケル濃度を上げて行くと、強磁性状態の全エネルギーが相対的に下がっていきます。Ni60Mn40まで行くと、非磁性状態よりも強磁性状態のほうが安定になりますが、まだ反強磁性が最安定です。

fccNi75Mn25.png

Fig.5: fcc Ni75Mn25の全エネルギーと磁気モーメント


Ni75Mn25から反強磁性初期ポテンシャルの計算でも、正味の磁化が出てくるようです。強磁性計算との全エネルギー差はほとんどないのですが、磁気モーメントには違いがあるので、これらは別の解であるといえます。

fccNi85Mn15.png

Fig.6: fcc Ni85Mn15の全エネルギーと磁気モーメント


Ni85Mn15では、強磁性初期ポテンシャルの計算結果が最低エネルギー状態となります。
全エネルギーの差が小さいので、本当はどちらの磁気構造が安定なのかは微妙な議論になりますが。

次に平衡格子定数についてみてみます。
ニッケル濃度が薄い側からNi50Mn50程度までは、格子定数にほとんど変化が見られないように思います。
それよりも高濃度では、強磁性状態が安定になる前であっても低体積側へ最低エネルギーが移動しているように見えます。

これらの結果を好意的に捉えるなら、Fig.2に示した実験結果をかなりよく再現しているように思えます。

例えば、実験結果では、純ニッケルからマンガン濃度を増していったときには、自発磁化が大きくなっていき、Ni90Mn10付近で最大値をとり、その後、減少していきNi90Mn10付近で自発磁化が消滅します。
このことを踏まえて、計算結果を見てみます。強磁性初期ポテンシャルの計算だけを見ると、純ニッケルからマンガン濃度を増していくにつれて、自発磁化は単純に大きくなっていきます。しかしながら、反強磁性初期ポテンシャルの計算を見ると、単純な強磁性状態とは異なる自発磁化を持った解が得られる組成領域が存在していることが分かります。そしてその解は、本当に微妙な議論ですが、単純な強磁性初期ポテンシャルの結果よりもエネルギー的に安定な領域があってもよさそうです。
このあたりは微妙な議論なので、どの程度本当の物理を再現できているのかは難しいと思います。

関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR CPA 強磁性 反強磁性 

AkaiKKRとOpenMP並列化

AkaiKKR(machikaneyama)ではOpenMPを用いた並列計算を行うに際して、August 26, 2015に公開されたバージョンから OMP_NUM_THREADS などの環境変数を設定する必要が無くなったようです。その反面、並列化する際のスレッド数の制御もできなくなりました。

今回は、それよりも古いバージョンであるMay 22, 2015を使って、計算に使うスレッドの数と計算時間の関係を調べました。

001_20150915141750561.png

Fig.1: スレッド数と計算時間の関係。計算時間は単一スレッドで計算した時間で規格化してある。スレッド数を増やすごとに計算時間が短縮されていく。短縮の度合いは、計算する物質の種類にはほとんど依存しない事がわかる。


その結果、少なくとも私が思っていたよりは、効率的に計算速度が上がっており、何も考えずに全スレッドを使った計算をしてしまってもよさそうな感触を得ました。


OpenMPによる並列化


August 26, 2015よりも以前のバージョンのAkaiKKR(machikaneyama)でもOpenMPを用いた並列化が可能でしたが、August 26, 2015のバージョンでは並列化に対する考え方が変わったようです。

以前はOpenMPを使うためには OMP_NUM_THREADS などの環境変数を設定しなければなりませんでした。この点は、初めてAkaiKKRをインストールする初心者にとって躓きやすいポイントでした(参考:AkaiKKR掲示板の6548 コンパイルスレッド)。August 26, 2015では、環境変数を設定する必要が無くなりコンパイラを指定してmakeするだけでOpenMP並列版のバイナリを作成、実行することができるようです。

その反面、以前は OMP_NUM_THREADS に実際のCPUのスレッド数よりも小さい値を指定することによって、使用するスレッドの数を制限することができていました。August 26, 2015では(少なくとも同じ方法では)スレッドの数を制限できなくなってしまいました。

並列化による速度の上昇


AkaiKKRはコヒーレントポテンシャル近似(CPA)を用いた合金の計算が得意です。従って、使われる用途は必然的に広い組成の範囲を持った合金の計算になりがちです。例えばAkaiKKRでFeCoの磁気モーメントと格子定数では、鉄とコバルトの二元合金に対して、コバルト濃度を0%から100%まで10%刻みで計算しています。

このような計算をするときに、CPUを並列化して組成を一種類ずつ順番に計算していく場合と、それぞれの計算にはCPUを1スレッドずつしか使わずに、複数の組成を平行して計算する場合の、どちらの方が高速に計算を終えることができるのか気になります。
そこで今回は、スレッド数と計算時間の関係をAugust 26, 2015よりも以前のバージョンであるMay 22, 2015で調べました。

計算条件


2015年9月の第27回CMDワークショップに参加させていただき、9月末まで大阪大学のコンピューターを使わせていただけるという事なのでcmd2の私のアカウントにMay 22, 2015のバージョンをインストールして計算を行いました。

計算セルの大きさやCPAの有無によってどの程度の影響があるのかを知るため、もっとも単純なbccFe, CPAを用いたfccNi50Fe50, 計算セルに5個の原子を持ち三成分のCPAを行う立方晶Sr(Ti0.97Ta0.02Ni0.01)O3ペロフスカイト, かなりオープンな構造であるため多量の空港を入れてあるグラファイトの4種類の計算を行いました。

#!/bin/csh -f

## *** プロジェクト名 ***
set PROJECT="Fe"
#set PROJECT="NiFe"
#set PROJECT="SrTiO3"
#set PROJECT="graphite"

setenv OMP_STACKSIZE 100M
limit stacksize unlimited

# ## スレッド数 6
setenv OMP_NUM_THREADS 6
echo "OMP_NUM_THREADS=6"
time ~/old/cpa2002v009c/specx < in/${PROJECT}.in > out/${PROJECT}_6.out

## スレッド数 5
setenv OMP_NUM_THREADS 5
echo "OMP_NUM_THREADS=5"
time ~/old/cpa2002v009c/specx < in/${PROJECT}.in > out/${PROJECT}_5.out

## スレッド数 4
setenv OMP_NUM_THREADS 4
echo "OMP_NUM_THREADS=4"
time ~/old/cpa2002v009c/specx < in/${PROJECT}.in > out/${PROJECT}_4.out

## スレッド数 3
setenv OMP_NUM_THREADS 3
echo "OMP_NUM_THREADS=3"
time ~/old/cpa2002v009c/specx < in/${PROJECT}.in > out/${PROJECT}_3.out

## スレッド数 2
setenv OMP_NUM_THREADS 2
echo "OMP_NUM_THREADS=2"
time ~/old/cpa2002v009c/specx < in/${PROJECT}.in > out/${PROJECT}_2.out

## スレッド数 1
setenv OMP_NUM_THREADS 1
echo "OMP_NUM_THREADS=1"
time ~/old/cpa2002v009c/specx < in/${PROJECT}.in > out/${PROJECT}_1.out


結果


Fig.1はスレッドの数と計算時間の関係をプロットしたものです。
CPUの処理時間は、それぞれの物質を単一スレッドで計算したときの値を1として規格化してあります。
したがって、理想的に言えば2スレッドを使った時には時間が1/2になり、3スレッドを使った時には1/3となる、といったように減少していってほしいところです。実際には多少のオーバーヘッドがありもう少し長い時間がかかっています。

スレッド数を増していくほど並列化の効果は減っていきますが、6スレッド程度までなら並列化の効果が頭打ちになってしまうという事はないようです。また、結晶構造の複雑さに応じて、並列化の効果が変わるのではないかと予想していましたが、結果を見る限りほとんど影響はないようです。

計算してみる前は、状況に応じて並列化の有無をコントロールすることで、効率よく計算ができるのではないかと考えていましたが、結果を見る限り全てOpenMP並列化でやってしまってもよさそうな気がします。
August 26, 2015にバージョンアップすることにより、OMP_NUM_THREADSで並列化数のコントロールができなくなりますが、それでもOpenMP関連に関しては、デメリットよりもメリットの方が大きそうです。

関連エントリ




参考URL




付録


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


参考文献/使用機器




フィードバック



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

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


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


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

tag: AkaiKKR machikaneyama KKR CPA OpenMP 

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

LTspiceAkaiKKRmachikaneyamaScilabKKRPSoC強磁性CPAPICOPアンプecalj状態密度常微分方程式モンテカルロ解析トランジスタodeDOSインターフェーススイッチング回路定電流PDS5022分散関係半導体シェルスクリプト乱数レベルシフトHP6632A温度解析ブレッドボード可変抵抗I2Cトランジスタ技術R6452A確率論バンド構造セミナーバンドギャップ反強磁性数値積分熱設計絶縁非線形方程式ソルバ偏微分方程式PWscfA/Dコンバータマフィンティン半径フォトカプラカオスISO-I2CGW近似LM358LEDシュミットトリガ三端子レギュレータ74HC4053アナログスイッチUSBサーボ数値微分直流動作点解析補間カレントミラーTL431PC817C発振回路FFT電子負荷VESTA開発環境量子力学単振り子bzqlty基本並進ベクトル2ちゃんねるチョッパアンプ標準ロジックパラメトリック解析アセンブラブラべ格子BSchQuantumESPRESSOイジング模型LDA状態方程式GGA仮想結晶近似VCA熱伝導SMPスイッチト・キャパシタキュリー温度Quantum_ESPRESSOスーパーリーグTLP621トレーナーバトルewidth最適化Maxima抵抗失敗談相対論コバルト繰り返し位相図六方最密充填構造ポケモンGOスピン軌道相互作用gfortranランダムウォークFETスレーターポーリング曲線cygwinQSGW不規則合金ラプラス方程式MCU条件分岐データロガーマントルUPS固有値問題格子比熱シュレディンガー方程式熱力学詰め回路ガイガー管QNAP井戸型ポテンシャルダイヤモンドOpenMPTLP521ハーフメタルLM555ubuntu平均場近似ブラウン運動フェルミ面NE555ZnOゼーベック係数TLP552xcrysdenCIF最小値最大値awkfsolveテスタ第一原理計算Ubuntu差し込みグラフFXA-7020ZR三角波過渡解析Writer509自動計測スーパーセル起電力トランスCK1026MAS830LフィルタPGAP-10MBEOPA2277ナイキスト線図ノコギリ波AACircuitEAGLE2SC1815PIC16F785LMC662CapSense負帰還安定性入出力固定スピンモーメントFSMTeX結晶磁気異方性全エネルギーc/a合金multiplotgnuplot非線型方程式ソルバL10構造正規分布等高線ジバニャン方程式初期値interp1fcc面心立方構造ウィグナーザイツ胞半金属デバイ模型磁気モーメント電荷密度重積分SIC不純物問題擬ポテンシャル状態図cif2cellPWgui二相共存ウルツ鉱構造edeltquantumESPRESSOフォノンリジッドバンド模型スワップ領域BaO岩塩構造ルチル構造ヒストグラム確率論マテリアルデザインフラクタルマンデルブロ集合キーボードRealforceクーロン散乱三次元疎行列縮退化学反応関数フィッティング最小二乗法Excel直流解析PCTS-110TS-112日本語パラメータ・モデル等価回路モデル文字列不規則局所モーメント陰解法熱拡散方程式HiLAPWCrank-Nicolson法連立一次方程式specx.fifort境界条件両対数グラフ片対数グラフGimp円周率ヒストグラムシンボル線種グラフの分割軸ラベル凡例トラックボール

最新コメント
リンク

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