CygwinでAkaiKKR(Machikaneyama)

このエントリの内容は、やや古くなったため新しいエントリを書き直しました。→ AkaiKKRのインストール

AkaiKKR(Machikaneyama)は、大阪大学の赤井久純先生が公開されている第一原理計算パッケージで、KKR-CPA法を採用することで不規則合金のバンド計算が可能です。


NiDOS.png

Fig.1: Niの状態密度


本エントリでは、Cygwinのg77コンパイラを利用してWindows上でAkaiKKRを使う方法について書きます。

Cygwin上のAkaiKKRの利用に関しては、AkaiKKRのBBSの0038
How can I calculate cohesive energy? (in Japanese)
にmakefileの編集だけでコンパイルできるとの報告がありますが、最新版(009c)ではエラーが出てしまいます。そこでmakefileの編集に加えてspecx.fの編集が必要になります。(AkaiKKRのヴァージョンを下げると解決するという報告もあるようですが、おそらくspecx.fの編集の方が正攻法のはずです。)

Cygwin上でのAkaiKKR利用に必要な手順は下記の通りです。
  1. Cygwinのインストール
  2. AkaiKKRのダウンロードと展開
  3. makefileの編集
  4. specx.fの編集とコンパイル
  5. テスト計算(Niの状態密度)



1. Cgywinのインストール


AkaiKKRをコンパイルするためには、FORTRAN77コンパイラが必要です。Windows上で利用できるFORTRAN77コンパイラはいろいろな種類があると思うのですが、今回は無料で利用できるCygwin上のg77コンパイラを利用します。
Cygwinのインストールの方法自体は、ウエブ上にたくさん解説記事があると思うので書きませんが、必ずg77をインストールしてください。デフォルトではインストールされません。


002_20130114153227.png

Fig.2: Cygwinのインストールでかならずg77がインストールされるようにする。全パッケージのインストールを選ぶとg77もインストールされる。


私は面倒くさいので全てインストール(All Install)としました(Fig.2)。これを選ぶとインストールにかなりの時間がかかります。
夜寝る前にインストール作業を開始して、朝起きたらインストールが終わっているか確認するぐらいがいいと思います。

Cygwinのインストールが完了したら、Cygwinのターミナル上で
g77 --version

とタイプしてみます。コンパイラのバージョン情報が表示されればインストール完了です。

2. AkaiKKRのダウンロードと展開


AkaiKKRのダウンロードには『計算コード利用許諾契約』への同意と利用登録が必要です。
利用登録に必要な情報は
  • 名前
  • メールアドレス
  • 所属
の3つだけです。

利用登録が完了すると入力したメールアドレスにパスワードが送信されてきます。
このパスワードを利用して、このエントリを書いている段階での最新版であるcpa2002v009c.tar.gzをダウンロードします。

AkaiKKRのページでは、プログラム本体のほかにマニュアルも配布しています。KKR-Green関数法によるバンド計算Machikaneyama2000の使用に関するメモは印刷して手元においておくとよいと思います。

また市販の書籍として計算機マテリアルデザイン入門 (大阪大学新世紀レクチャー)密度汎関数法の発展 -マテリアルデザインへの応用にAkaiKKRに関する言及があります。特に前者は、第一原理計算を"良くわからないけど、とにかくやってみる"という立場の人(私とか)にはよい本だと思います。



KKR-Green関数法によるバンド計算の『プログラムの入手、コンパイルと実行』にならった方法でインストールを進めます。

まず、Cygwinのホームディレクトリにkkrというディレクトリを作成します。Cygwinのホームディレクトリは、普通にインストールを行っていれば『C:\cygwin\home\ユーザー名』となっているはずです。
次に、kkrディレクトリに、ダウンロードしたcpa2002v009c.tar.gzを解凍します。(解凍はマニュアルにあるとおりコマンドを打ち込んでも、解凍レンジなどWindowsの解凍ツールでも、お好きなほうで。)
すると~/kkr/cpa2002v009cというディレクトリができます。

3. makefileの編集


さて、~/kkr/cpa2002v009cのなかをみるとmakefileというファイルがあります。
このファイルをメモ帳などのテキストエディタで開きます。すると5行目に
fort = ifort

と書いてあるのが分かります。これはIntel Fortran Compilerを使ってコンパイルする設定です。今回はg77を使うのでこの行を
fort = g77

と、書き換えます。makefileの編集はこれだけでコンパイルできました。

4. specx.fの編集とコンパイル


KKR-Green関数法によるバンド計算、あるいは計算機マテリアルデザイン入門 (大阪大学新世紀レクチャー)のチュートリアルの通りに進めるのならば、ここでソースコードのコンパイルを行います。

コンパイルの方法は簡単でCygwinのターミナル上で~/kkr/cpa2002v009cへ移動し
make

とタイプするだけです。

しかしながら、このままだと下記のようなエラーメッセージが表示されてコンパイルできません。

g77 -O3 -o source/specx.o -c source/specx.f
In file included from source/specx.f:0:
source/specx.f:42: error: size of variable '_BLNK__' is too large
makefile:206: recipe for target `source/specx.o' failed
make: *** [source/specx.o] Error 1


このエラーメッセージの意味するところは、計算に使うメモリの量が多すぎるということです。そこでspecx.fの編集を行います。
~/kkr/cpa2002v009c/source/にあるspecx.fをテキストエディタで開きます。
すると19-20行目に以下の記述があります。

     & (natmmx=22, ncmpmx=12, msizmx=198, mxlmx=3, nk1x=550, nk3x=21,
& msex=201, ngmx=15, nrpmx=650, ngpmx=650, npmx=350, msr=400)


これらのパラメータは『配列の大きさを指定するパラメータ』です。詳しくはKKR-Green関数法によるバンド計算のP29の表5を見てください。

この中でnatmmxncmpmxの2つのパラメータに注目します。これらはそれぞれ計算するブラベー格子の中の『原子の個数』と『原子の種類』の最大値をあらわします。
例えば体心立方構造(bcc)や面心立方構造(fcc)の『原子の個数』は1個、六方最密充填構造(hcp)の場合は2個です。また『原子の種類』の方は、純金属で1種類、二元合金で2種類、三元合金で3種類です。

もともとのspecx.fをみるとブラベー格子に12種類22個の原子を含む結晶の計算ができるような条件となっていますが、本ブログの扱おうとしている対象からは明らかに過剰です。そこで19-20行目を下記の通り書き直します。

     & (natmmx=2, ncmpmx=3, msizmx=198, mxlmx=3, nk1x=550, nk3x=21,
& msex=201, ngmx=15, nrpmx=650, ngpmx=650, npmx=350, msr=400)

これはbcc, fcc, hcp構造の三元合金まで計算できる設定です。

前述の通りCygwinのターミナル上で~/kkr/cpa2002v009cへ移動し
make

とタイプすると、実行ファイルであるspecx.exeが生成されます。

今回は、単位構造の中に3種類2個までの原子を含む設定でコンパイルしましたが、これは逆に言うと、計算したい物質の構造や組成によってspecx.fを編集しなおしてその都度コンパイルを行わなければならないことを意味しています。たとえば、入力ファイルのサンプルとして付いているgamn6mn0as0asは、今回の設定では計算できません。natmmxncmpmxの値をもっと大きくとる必要があるでしょう。

5. テスト計算(Niの状態密度)


それでは、早速計算を行ってみましょう。
最早ここまで来ればKKR-Green関数法によるバンド計算の通りサンプルファイルの計算を行ってもよいのですが、サンプルファイルは自己無撞着計算だけしかやってくれません。そこで標準のニッケル入力ファイルから、状態密度(DOS)計算まで一気にやってしまう入力ファイルを用意しました。

c ***********************************************
c AkaiKKR(Machikaneyama) input file
c for fcc Nickel
c ***********************************************

c *** Self-consistent calculation ***
go data/ni
fcc 6.67 , , , , , ,
0.001 1.2 nrl mjw mag init
update 4 100 0.02
c update 13 100 0.02
1
Ni 1 0 0 2 28 100
1
0 0 0 Ni

c *** Density of States (DOS) calculation ***
dos data/ni
fcc 6.67 , , , , , ,
0.001 1.2 nrl mjw mag 2nd
update 8 100 0.02
c update 13 100 0.02
1
Ni 1 0 0 2 28 100
1
0 0 0 Ni


上記のNi.txtをダウンロードして~/kkr/cpa2002v009c/inへ置きます。Cygwinのターミナル上で~/kkr/cpa2002v009cへ移動して
specx.exe <in/Ni.txt >out/Niout.txt

とタイプすると計算を開始します。計算が完了するまでにはしばらく時間がかかります。

計算が完了すると~/kkr/cpa2002v009c/outNiout.txtが出来るはずです。

計算結果(Niout.txt)にはいろいろな情報が出力されています。
出力された情報の詳細は計算機マテリアルデザイン入門 (大阪大学新世紀レクチャー)KKR-Green関数法によるバンド計算を参照していただくとして、今回は計の全状態密度(total DOS)をプロットしました(Fig.1)。磁性を考慮した(mag)計算をしているので、状態密度は上向きと下向きの二つのスピンのものが出力されています。Fig.1の赤のラインと緑のラインがそれぞれに対応します。

その他


たくさんの入力ファイルを順番に計算させるときにはバッチファイルを作ると楽です。Pathを通しておくとよいでしょう。

計算に使うPCの性能は、そこそこのもので充分です。私が使っているのは、いわゆる鼻毛鯖にメモリを8GBまで増設したものです。
自分が寝ている間に計算させるなら、うるさくない所におくことも重要です。というか、PCの性能自体よりも、メインのマシンと別個の物を用意できることのほうが大事だと思います。

OSなしの廉価PCを使う場合ubuntu+ifortでも計算できました(と、いうか私もどちらかというとこっちを使ってる)。この場合もspecx.fの編集は必須です。

テキストエディタはある程度以上高機能なものを使うほうがよいです。ある程度以上の高機能とは、ファイル内の検索が強力なもの(grep, 正規表現)で、大きなサイズのファイルが問題なく開ける必要があります。AkaiKKRの計算結果を出力したテキストファイルは、それなりの容量になり、自分にとって必要な部分を検索機能で探すことになるからです。

私はxyzzyを使っていますが、秀丸サクラエディタとかでもいいと思います。いずれにせよ標準のメモ帳では力不足だと思います。

データの解析には、差し当たりMicrosoft OfficeLibreOfficeのようなOfficeスイートの表計算ソフトがあるとよいでしょう。なおNiの状態密度(Fig.1)はgnuplotで描画しました。



お詫びと注意事項


このエントリは、少し以前に書き溜めておいたものをブログの予約投稿機能をつかって週一更新となるように公開しています。

【2013年7月29日追記】下記の件、AkaiKKRのウエブページが復活していました!

自由電子近似を使った(つまり第一原理計算パッケージを使わなくても計算できる)話を書いてから公開しようと思ってグズグズしていたところ本家であるAkaiKKR(Machikaneyama)のページが公開を停止されたようです。日本バンド(計算)屋さんマップによると(5/17 以降、2013、アクセス不能を確認)との事です。

そのため本エントリにたくさんのリンク切れが出来てしまい申し訳ありません。

AkaiKKR(Machikaneyama)の入手に関してはCMDワークショップへ参加することが最良の手段だと思われますが、計算機ナノマテリアルデザイン手法の開発にて以前のバージョン(cpa2002v007)が公開されているようです。私はcpa2002v007のコンパイルも実行も試していませんので、このバージョンでエントリの内容を再現できるかも確認していません。

なお、この「お詫びと注意事項」を書いている時点とエントリが公開状態になるまでにもタイムラグがあるので、上記の内容が公開時点では的外れになっているかもしれませんが、もしそうなっていたらごめんなさい。

また私は、AkaiKKRの開発者である赤井先生、及び、大阪大学の固体電子論グループとは何の関係も無い一個人であり、自分の固体物理の勉強のためにAkaiKKRを利用させていただこうとしている身です。更に言うなら、バンド計算屋さんではなくただの電子工作趣味人です。従って、このブログの内容の正しさに関しては一切保障できませんので、真似をされる方は自己責任でお願いします。おそらくブログ内の記述には、間違っている点もたくさんあると思います。間違いを見つけられた方は、このブログのコメント欄にてお知らせください。

関連エントリ(予定)




参考URL




付録


このエントリで使用したAkaiKKR(Machikaneyama)の入力ファイルと出力結果を収めたファイルを添付します。


参考文献/使用機器




フィードバック



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

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


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


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


tag: AkaiKKR machikaneyama KKR CPA cygwin 

comment

Secret

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

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

最新コメント
リンク

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