EcalJ

From Ecal

Revision as of 17:58, 25 August 2014 by Kino (Talk | contribs)
(diff) ← Older revision | Current revision (diff) | Newer revision → (diff)
Jump to: navigation, search

What's new?

  • マークグループのzgemmを使う方式を取りこみGW計算が大幅に高速化しました。
  • wannier,screened RPAの計算を正式にサポートしました。

( Aug. 2014)

ecalj program

(このページは最近メンテナンスできてません。https://github.com/tkotani/ecalj/ に内容を移していきます)


Ecalj 電子状態計算コードパッケージ日本語オフィシャルページです
http://pmt.sakura.ne.jp/wiki がメインページです.トークの資料などもあり)。

「Ecaljパッケージ」には、fullpotential code (fp-lmtoを発展させたPMT法(APW[Augmented Plane Wave]法とMTO[Muffin Tin Orbital]法を混合した基底関数をつかう方法)にしたもの) とそれと組み合わせて利用できるself-consistent GW (あるいはone-shot GW)コードが含まれています。 さらには、結晶モデリングツールなども一括して便利に管理できるようにしていきたいと思っています。 また計算データの共有・蓄積も行ってゆく予定です。

lm7Kは、Mark van Schilfgaarde氏によってとりまとめられたlm-7.0betaのパッケージのうち、full-potential計算の部分と GWドライバー(GW計算との接続部分)を抜き出し、利便性の高いようにすこし手を加えたものです。 その改良部分に関しては、鳥取大学小谷岳生、物材機構木野日織が現時点でのおもなcontributorです。 かなりのバグフィクスと改良が加えてあります。とくに構造体変数の単純化などをおこない、インストール、インストールテストなどの簡便化、 数値精度の向上などをはかっています。また、最近、おもに木野氏によって完全なf90化がされたことは、内部的ではありますが将来へ向けての大きな進展です。

このバージョンにはPMT(Plane wave and Muffin-tin orbital)法が組み込まれています。PMT法は上に述べたように、MTO基底とAPW基底を同時に使う線形化法です。これにより、「非常に簡単な入力で計算できる(従来のようにMTOのセットアップをする必要がない;結晶構造を入力するだけでもかなりの計算ができ;またそれをリファインしていく形で精度のよい解もえられる)」、さらに安定性、高速性も他の方法(PAW,LAPWなど)に比べて基本的に勝っている(はず)です。 ほかのコードではできないような計算や機能をつけくわえ、使いがってもよくしていかないといけない。皆様のご協力をお願いします。(インストールやテストは現状でも相当にかんたんにできるよう工夫しています。)

いまや、電子状態計算は、工学的な目標をとりいれて研究を展開していくことが求められている段階にもなってきています。しかしながら、現状の標準的手法ではまだまだその能力は限定的であり、方法論的にもこれから発展させていくべきところが山積です。



Contents

基本となるLDA,GGAの電子状態計算の理論に関して

解説

LAPW,LMTO,PAWなどのall electronの方法は線形化法と呼ばれます。 これらの手法はすこしづつ進化してきて、現代の方法では非常に似通ったものに なってきています。擬ポテンシャルやASAの方法もそうですが、一つの枠組みのなかで理解できます.

追加文献として

をみてください。

ある程度はlm7Kのコードと関連づけて書いています。 LDAの方程式などの理解があれば、基本理論についてこの文献をもとに大体は理解してもらえるかとおもいます。 基本のアイデアはVASPなどとも共通なので他の方法を理解するのにも参考になるとおもいます。 質問等があればお寄せください。それを基に書き直していくつもりです。


ソースにも含まれているnfp-doc.ps.gzM. Methfessel, Mark van Schilfgaarde, and R. A. Casaliの これの(14),(15)式で表示されてるハミルトニアンや重なり積分をいかに評価するか? ということです。19式の\tilde{F}_i(\mathbf{r})は、envelope関数F_i(\mathbf{r}) (LMTOのときはsmooth Hankel関数)を各原子サイトでくりぬいてaugmentしたものです。ですが、 この\tilde{F}_i(\mathbf{r})が、 APW(平面波を各MTOサイトでくりぬいてaugmentしたもの)であっても、 以下21ページあたりまで書いてある理論はほとんど変更なくなりたちます。 それがAPW+MTO=PMT法です。

22ページのforce theoremのところは記述が悪くて理解できないです。 ですが、原則的には問題ないです。

基底関数にそれらの二種のaugmented wave をつかいますが、それから電荷をつくるような部分は G.Kresse and D.Joubert,Phys. Rev. B 59, 1758 - 1775 (1999) などに書かれてる方法と一緒です。force theoremの部分も基本的におなじです。 その元ネタはSoler and Williamsによる 電荷の表現方法のアイデアだとおもいます。この方法では、 「電荷密度=smooth part + (onsite part - onsiteのsmooth part)」 とします。ここでsmooth partはenvelope関数の積です。 また「\tilde{F}_i(\mathbf{r}) = F_i(\mathbf{r}) + augumentしたonsite部分 -\tilde{F}_i(\mathbf{r})のonsite部分」 としますが電荷をつくるときにはクロスタームは無視します。これが重要なポイントです。 これは”Augmentation and Representation of the charge density”としてマークさんのドキュメントには書かれてます).

PAW,LMTO,LAPWなどのfull-potential電子状態計算手法の違いについて

  1. ポテンシャルや電荷の表現をどうとるか?効率の良い方法はMT内にもinterstitial波動関数を含む「Soler and Williams型」とされてます。
  2. 波動関数の基底はどうとるか? PAW,LAPWなら平面波。fpLMTOなら球面波(smooth Hankel関数).
  3. Augmentの仕方? LAPW,LMTOならMTの端で微分まで連続になるように接合。 PAWならちょっと違うやり方。(ですけど本質的にそうメリットがあるのかどうかは知りません。)

その他、波動関数、密度関数の表現に関して これは上のlm7K解説(Feb2010,mtopw9j.pdf)pmtの方法 をみてください。また[osakauJuly2010|阪大特別講義]での資料も参考になるかもしれないです。

DownloadとInstallation

ダウンロード情報

以前はecal packageと読んでましたが、ecaljとしました。

http://github.com/tkotani/ecalj
  • バグfixを容易にするため可能ならgit repositoryを取ってください。→#コマンド
  • 絶対に開発しない方はdownloadボタンからtar.gzか.zipのパッケージでとることもできます。以下の「その他:gitに関して」を参照。

メインはtkotaniのmasterブランチです。現在は小谷がecaljのメンテナーであるという認識です。gitでとると開発履歴も含めてとれます。 バグ発見や計算の異常に関しては、

  1. githubに自分のリポジトリをつくって、小谷にpullするよう要請する。
  2. 軽微なバグフィックスや計算がうまく行かない場合などはメールで知らせてもらう。(OS,fortranのversion,gitのIDなどなるべく多くの情報をご連絡ください。)

としていただけると修正が容易にできます。gz,zipで取得した場合はdirectory名にgit IDが入っています。

コマンド

git clone http://github.com/tkotani/ecalj.git

あるいは

git clone git://github.com/tkotani/ecalj.git

でとれます。メインはtkotaniのmasterブランチです。


branch情報

最近のactiveなbranchは以下の通りです。

main: stable branchです。マークグループのzgemmを使う高速化を取り入れました。
 +-mpi_spin: さらにspinのMPI並列とopenmp directiveを加えてあります。将来はmain branchに統合されるはずです。
 +-CheckModule: ?

developper向け情報

CheckModule: これは、dependecncyをチェックするTOOLS/checkmodule で依存性ファイルを書き出し、それをincludeして makeするようにしたものです。 checkmoduleはlm7Kでmoduledepends.inc をつくります(あらかじめ作ってgitに含めておく)。 これからmoduledepends.gfortran.inc などがmake PLATFORM=gfortranのときにできます。 (小谷さんのemailより。)

インストールとトラブル情報

ROOTDIRをecaljをinstallしたdirectoryとしてます。

directory構成は以下になっています。

drwxr-xr-x  7 kino kino  4096  8月 21 21:33 CMDsample
drwxr-xr-x  4 kino kino  4096  8月 21 21:33 Document
drwxr-xr-x  8 kino kino  4096  8月 21 21:33 MATERIALS
-rw-r--r--  1 kino kino 19969  8月 21 21:33 README
drwxr-xr-x  3 kino kino  4096  8月 21 21:33 StructureTool
drwxr-xr-x  9 kino kino  4096  8月 21 21:33 TOOLS
drwxr-xr-x 32 kino kino  4096  8月 22 14:38 TestInstall
drwxr-xr-x 13 kino kino  4096  8月 22 16:48 fpgw
drwxr-xr-x 14 kino kino  4096  8月 21 22:33 lm7K
-rwxr-xr-x  1 kino kino   189  8月 21 21:33 mbackup
-rwxr-xr-x  1 kino kino    70  8月 21 21:33 mrestore


lm7Kのmake

ROOTDIR/lm7K/ directoryでmakeをします。serial版とMPIK版(MPIでのk点並列)が別になっておりどちらも必要です。

コンパイルにはMakefile内にある

PLATFORM=

を適切なものに変えてください。

例えばserial版の

PLATFORM=ifort

はMAKEINC/Make.inc.ifortの設定を読み込みます。

MPIK版では

PLATFORM=ifort_mpik

はMAKEINC/Makeinc.ifort_mpikを読み込みます。 serial版とMPIK版の違いは-DMPIKを指定しているかどうかの違いです。MPIK版はlmf-MPIK,lmfgw-MPIKを作ります。

GWのmake

ROOTDIR/fpgw/exec directoryでmakeします。こちらはMPI版 programを作ります。環境毎のファイルmake.inc.*を使います。 makefileがmake.inc.*を読み込みます。make.inc.*サンプルのどれかを使えます。また、自分で新規に作っても構いません。

programのテスト

lm7Kのシリアル版、MPIK版、GWをコンパイルした後に ROOTDIR/TestInstallにてprogramのテストができます。

ここでmakeとすると使い方が説明されます。

$ make
NAME
	Makefile - makefile script to test and check ecalj programs.
...
DESCRIPTION
	To show all available test targets,
		make show-target

	To perform a test, for example, copt under lm7k,
		make copt

	To perform two tests successively, for example,
        copt under lm7k and si_gwsc under fpgw,
		make copt si_gwsc

	To perform all tests under lm7k,
		make lmall

	To perform all tests under fpgw,
		make gwall

	To perform all tests under lm7k and fpgw,
		make all

...
  • make lmallで実行されるLMのテストは各directoryのMakefileでprogram実行の仕方が記述してあります。環境に合わせて適宜変更してください。
  • make gwallで実行されるGWテストはshell scriptでいくつかのprogramを動かします。

ROOTDIR/fpgw/exex/以下の

epsPP_lmfh epsPP_lmfh_chipm eps_lmfh eps_lmfh_chipm gw_lmfh gwsc gwsc1shot_diag

はshell scriptになっており,LM、GWの実行を制御します。 mpi実行の仕方もscript毎に記述してあります。標準では

mpirun -np $MPI_SIZE program

ですが環境に合わせて適宜変更してください。cray+LSFの環境は面倒な変更が必要ですが京都大学で動かすための修正例もコメントアウトされてgwscの中にあります。


DFTのテストは

make lmall

GWのテストは

make gwall

です。

テスト結果

make gwallでは

PASSED: gas_eps_lmfh EPS0001.nlfc.dat
PASSED: gas_eps_lmfh EPS0002.nlfc.dat
PASSED: gas_eps_lmfh EPS0003.nlfc.dat
PASSED: gas_eps_lmfh EPS0004.nlfc.dat
PASSED: gas_eps_lmfh EPS0001.dat
PASSED: gas_eps_lmfh EPS0002.dat
PASSED: gas_eps_lmfh EPS0003.dat
PASSED: gas_eps_lmfh EPS0004.dat

PASSED: gas_epsPP_lmfh EPS0001.nlfc.dat
PASSED: gas_epsPP_lmfh EPS0002.nlfc.dat
PASSED: gas_epsPP_lmfh EPS0003.nlfc.dat
PASSED: gas_epsPP_lmfh EPS0004.nlfc.dat

PASSED: fe_epsPP_lmfh_chipm ChiPM0001.nlfc.mat
PASSED: fe_epsPP_lmfh_chipm ChiPM0002.nlfc.mat
PASSED: fe_epsPP_lmfh_chipm ChiPM0003.nlfc.mat
PASSED: fe_epsPP_lmfh_chipm ChiPM0004.nlfc.mat
PASSED: fe_epsPP_lmfh_chipm ChiPM0005.nlfc.mat

...

と言う表示がでるはずです。

nio_gwscは精度が悪く、FAILEDという表示が出ることがありますが、詳細を確認していただき

FAILED: nio_gwsc QPU compared by ./bin/dqpu
PASSED: nio_gwsc diffnum

とdiffnumのテストにPASSEDしていましたら問題はありません。


標準的には

make si_gwsc gas_gwsc nio_gwsc

のテストを実行します。この場合はROOTDIR/fpgw/exec/gwscのみを環境に合わせ修正すれば十分です。


「インストールとトラブル情報」で以下はobsoleteです。

lm7K

インストールとトラブル情報へ。

GW

fpgw/execにおいてmake.inc.*をmake.incに置き換えて

make 

でプログラムが作成できます。

TESTinstallGWにおいて

./testgw.py

を実行すると、scriptによるテスト例が表示されます。

たとえば、全てのテストを実行する場合は

.testgw.py --all

とします。

Ecalj コード

lm7K(DFT)

概要

Markさんのコードから派生しているため Markさんによるオリジナルドキュメント(このリンクはT.paxtonさんの管理されてるページです)

  1. Overview of the full-potential method
  2. Capabilities of the package

に多くの記述があります。 なお、記述がほとんどありませんが、力の計算や構造緩和も問題なくできます。

Markさんによるオリジナルドキュメントの記述とlm7Kの機能との違い

  1. lm7KのpackageにはFloating Orbitals(PMT=APW+MTO法のときは不要)とASA packageは含まれていません。
  2. input file中のパラメタを自動的に決定してくれるscriptが用意されています。
  3. GGAはこちらのほうが、きちんとimplementされています(まだforceなどテストは不完全です).--TakaoKotani 01:31, 14 September 2010 (JST)

Markさんによるオリジナルドキュメントの3章以降以降は辞書的に参照すれば十分です。むしろ以下のチュートリアルを見た方が理解の助けになります。

チュートリアル

O2分子の計算のしかた.

ステップbyステップで、構造を与えるところから出発する--TakaoKotani 00:46, 14 September 2010 (JST)

O原子の計算のしかた.

O+O<-->O_2のエネルギーを得るには同じ構造で計算--TakaoKotani 00:46, 14 September 2010 (JST)

例と初めての人のためのtutorial

SrTiO3の例

H2分子x2の例

GW

ecalj/fpgwのツリーに入っています。 fplmととの組み合わせの場合はself-consistentに計算ができますが、 PMTとの組み合わせの場合はone-shot GWしかできません。 GWのマニュアルは詳細に書かれておらず、現在ではobsoleteな内容も含まれています。

論文Quasiparticle self-consistent GW method: A basis for the independent-particle approximation が基本文献です。

計算データ

lm7K

酸素分子のスーパーセルでのLDA(VWN)テスト計算。基底状態(mmom=2).TestnewCtrlgen commit 382442による計算。 http://github.com/tkotani/O2Basistest/blob/master/README

GaAs,SiO2(これらはGGAとVWN)と H2,O2分子(VWN)の計算。テスト計算。

  • Aug30/2010のバージョン(masterブランチ)ではGGAで、H,Oの原子や二原子分子ができるようになった。

構造データ

計算用構造データ

gaussian結果

gaussian結果

dimer 収束依存性

PMTdimer結果

homo dimer距離依存性

PMTdimer距離依存性結果

hetero dimer距離依存性

PMTheterodimer距離依存性結果

bulk 収束依存性

PMTbulk結果

bulk 格子長依存性

PMTbulk 格子長 結果


for paper

for paper

GW

Wannier function関係

Wannier function作成

Wannier function visualization

Q & A

  • Q & A(解決済みのもの。)
  • 質問箱(新しい質問を書き込む。開発課題も。解決したらQ&Aに移す。部分的に解決してるものもこっち)。このなかでやれるところ、重要なところから解決していく。ToDoのうち、メンテ系の課題。


その他

Ecaljコードのdot tree

コードの構成を知るために、各サブプログラム間の依存関係を図示したものです。 pdfですが、printoutは薦めません。

bndfpのtreeはextensionでかかせたもの。

gnuplot版bndplot

ctrl.coの場合

$lmf --band~col=1:2,3:4~col2~12:14,15~fn=syml co 

うまくいくと各spin 2つのweightがbnds.coに出力される。(col2の方はcol2からの通し番号になっているのでplanewaveが入っているとやりにくい。<-要変更) またcol,col2のコマンドラインがうまくとれないことがある。原因不明。

plbndを呼ぶ際には-fplot -gnuplotと付ける。 -fplotも必要。lmfをfat band modeにした場合は自動的にfat band modeになる。 (plbndをminimalで書き換えてているため元のplbndと同じく切り替えスイッチはない。)

  • paramagneticの場合
$ plbnd -fplot -gnuplot co

と呼ぶ。

  • ferromagneticの場合
$ plbnd -fplot -gnuplot -spin1 co

or

$ plbnd -fplot -gnuplot -spin2 co

と呼ぶ。

kpathごとにbnds?.datというデータファイルとbnds.gnuというscriptができている。gnuplotでかかせるには

$ gnuplot bnds.gnu

通常のモードでは赤で、fatbandモードのデータではgradation plotされる。


fat bandの場合のbnds.coのフォーマット

はspin polalizedの場合k点ごとに

eigenvalues for spin1
weight1 for spin1
weight2 for spin1
eigenvlaues for spin2
weight1 for spin2
weight2 for spin2

である。col,col2が無いとその分のweightは出力されない。* fat bandの出力に関する元programの上の*に関する設計が破綻しているため、 「nq1はevenでなければいけない」というエラーがでるかもしれない。(対処法はソースを書き直すしかない。)

MPI

MPIの構造pm7K-mpi

discussion tab

discussionの上の方(若いものが上にくるように)書いてください。

version log

バージョンに関する情報など。将来fixすべきbug, 気になる点なども。

個人メモ

tk

数式などの書き込みテスト

latexを使っています。数式の書き込みのテストはこちらでどうぞ。

Personal tools