WHAT is lm-7.0betaK?

From Ecal

Jump to: navigation, search

lm-7.0betaKはMark van Schilfgaarde教授により作られたlm-7.0betaを再構成したものです。ただし、full-potential partとGW partだけです。いくつかのbug fix、変更を加えていますが、本質的にはlm-7.0betaの結果を再現します。もともとのlm-7.0betaを得るにはMark van Schilfgaarde教授に頼んでください。 lm-7.0betaのもともとのdocumentはMarksOrginalDoc/にあります。

MTO = Muffitin-Orbital
APW = Augmented Plane wave
これらの違いはenvelope functionのbasis setの違いだけです。

Contents

lm-7.0betaKとは

lm-7.0betaK は linearized APW+MTO (PMT) methodによりfull-potential LDA 計算を実行します。 PRBにも投稿したpreprint serverの論文を見てください。 PMT methodによりAPWとMTOの混合を同時に扱えるようになります。これは効率的であり、robustで正確な方法で使いやすい方法です。

lmv7betaに対する利点

構造と計算条件を書くctrl fileのsetupはとても簡単になりました。 MTOのパラメタを手で書く必要はありません。 つまり、以下で示す原子計算で決められたMTOのパラメタを使え、PAWの数を増やすことで収束を調べられます。

このプログラムパッケージが計算できること

LDA+U, 力, cell(uniformな)変形, 原子位置の緩和, MD など が行えます。

GW driverを通して将来計算できること

誘電関数, スピン感受率, GW, and QSGWを行えるようにするために、 GW driverを通してGW programと結合させる必要があります。 しかし、driverはMTOを用いた計算でしかまだ動きません。 現在PMTで動くように書き換えています (現在、one-shot GWならできますがQSGWはできません--Tkotani 06:15, 29 May 2009 (UTC))。 パッケージにGWコードもいれました。ecal/fpgw/の下にあります. ecal/fpgw/docの下にあるdocumentは少々古いです. ecal/fpgw/TESTinstall/testgw.py --all でインストールテストできます。 (インストールするにはfpgw/exec/make.incをかきかえてからmakeする)。

古いversionのuserへ

lm-7.0 (Ver.7) は本質的にlm-6.17(Ver.6)と同じです。 しかし、ver.7は新しい入力形式を用いています。 それのPreliminaryなdocumentはMarksOriginalDoc/input.pdfで与えられます。 古いinput systemはMarksOriginalDoc/input-file-style.txtにあります。


lm-7 (とlm-6.17)の新しい特徴は

  • enuのbug fix

です。以前のversionではenu ( そこでratidal Schroedinger eq. を解く)は占有状態の重心を示していませんでした。どういうわけかちゃんと動いてはいたのですが。このbug fixで収束性がよくなりました。

NOTE: この新しいbug fixを用いるには、OPTION_PFLOAT=1を使ってください。make checkのためにdefaultは=1でありませんが、このoptionを使うべきです。
  • APW+MTO (the PMT method)

"Minimum MTO basis" と"APW(cutoff by ~3 to 5Ry)" は古いlmfにくらべて reasonableで良い結果を与えます。 (どういう意味だろうか?)

  • ### Caution. ###

古いversionのctrl fileは少し書き変えないといけません。それをするにはlm67を使用でき、書き換えに何が必要か見ることができます。"lmf --input"が何のinputが今使われているのか示します。

Known bugs (we will fix)

  • intel fortran version 11 でintel mkl をcore i7で使う場合、zheev (slatsm/zhev.Fから呼ばれる) がおかしい値を返します。 これはintel mklのバグのはずです。
  • 大きなcellで hydrogen atom を計算する場合、 METAL=0 はNSPIM=2 で動きません。系はinsulatorのはずなのですが。(METAL=3 では動きます。) 理由はまだ分かっていません。
  • 大きなGMAX (or FTMESH) を用いると計算がおかしくなります。これはMT境界でのpotentialの評価に関係しています。bessel関数の展開がpoorなようです。
  • XCFUN=1(Vosko-Ceperley-Alder)だけがcell中の一つのhydrogen atomで動きます。 (when one spin channel is empty)
  • Radial schoredinger eq は占有状態の重心で解かれます。しかし、占有数があまりに少ないと(大きなcellにある原子など)は数値エラーが起きるかもしれません。いずれ確かめます。


日本語のノート

  • core i7で、

ATLAS とAMDのACMLを試してます。(mklは行列サイズが大きくなるとzheevが変な値を出す)。 ifortでmake checkが-O3だと通るけど、-O0だと(微妙に)こける。 原因をしらべないと。。。

  • 計算の規模が大きくなったとき、

slatsm/zhev.Fのoverlap matrixの対角化を省くことは可能。 ただし、OVLEPS,OVNCUTは聞かなくなるし、overcompletenessに関する注意が必要。

  • METAL=3では、対角化を二度くりかえします。最初にまず固有値だけもとめて

 tetrahedronウエイトを決めて、そのあとStart second band pass以下で、  波動関数の二乗(電子密度)の積算をやっていきます。

  • メモリが動的にallocateできてなくて、F90とF77の混合状態になってる

 ので、もしALLOC: workspace overflow, needのメッセージが出たら、 lmv7.f:L62 #if MPI | MPIK parameter(wksize= 120 000 000) #else parameter(wksize= 80 000 000) #endif のどちらかのwksizeを大きくするひつようがあります。これに4を掛けるとバイト数。

  • 水素原子を大きいセルにいれたとき、METAL=0で収束しないのが気持ち悪い。最初にNSPIN=2,MMOM=1 0 0 0になおしてからlmfa,lmfを実行すること)。なおさないといけない。
  • ストレス計算とGGA計算ができないと使えないとかときどき言われます。

 たぶん、ストレス計算、効率化、が必須なんでしょう。まずはドキュメント化か。。。

 関係者に送ったメールの抜粋

現状でもかなり安定はしていますが、「これで誰でも使える」というように 確信できれば、メーリングリストに流すなど、もっと大っぴらに宣伝していきたいと思っています。むかしのlmtoコードとちがって、結晶構造の入力だけでもかなりのレベルの計算ができます。収束チェックはドキュメントにあるようにovercompletenessの制御の 点はありますがその確認も容易だし(聞いたところだとLAPWにしても結局これは同様の問題のようです)、平面波数などのすこしのパラメーターをうごかして確認するだけで収束チェックができます(PAWやAPWなどの他の平面波の方法と違い、augmentしたMTOも同時に用いるので  Cuでも5Ryの平面波カットオフで1mRy程度の精度で全エネルギーが収束する。3Ryカットオフでもそんなにわるくない)。 浅いコアにはlocal orbital(というよりちゃんと外部にも広がったMTO基底)を使います。 empty sphereは不要です。で、表面などの真空領域が大きい系でもsupercellで普通に扱えるでしょう。これは昨年度に開発したPAW+MTOのおかげです ( プレプリサーバーにありますがよくわからないということで不評。   マークさんが書き直したというか全然違うものもありますーーーこれをPRBにおくったところです)。ただ至らないところもまだまだいろいろあります。

*LDAレベルでの計算の強みは、とにかく、MTO+(augmentされた少ない数の平面波基底) で計算できることです(以下PMT法とよびます)。でたとえば、ぼくが思ってるのは、 遷移金属をSi中にいれたり有機物質のなかにいれたり、 MgOの表面に置いてみたりの状況で、PAWやLAPWと比べてかなり高速な計算ができるだろうと思っています。 また計算精度が十分高いので磁性の計算もできると思います(ただ磁性の計算するには それなりに勉強しとかないと計算自体をまちがったり、解釈をまちがったりします。 LDAとか計算精度とか一体問題の限界を把握しておかないといけないです)。

PMT法はまだGWと結合できてないです(LMTOの場合のみ)。 でも早急にそのあたりを進めていこうと思っています。 wikiをつくってしっかりサポートしていきたいとおもっています。

以前のバージョンと違って、インストールはMake.incのサンプルをコピーして 書き換えればいいようになっています。それをいくつかのMakefileから共有します。 BLAS,LAPACK,fftwが必要です。fftwのインストールは簡単です。 make checkでただしくインストールされてるかどうかのチェックも一発でできます。 gfortranでもうごきますし、SR11000でもうごきます(MAKEINCにサンプルのMake.incがあるのでそれを書き換える。CPPCHECK.shで必要なcppスイッチも自動でみつけれる)。

(たぶん)そんなによくできたmpi化ではないですがk-pararell,原子パラレルのMPIもはいってます。 あとTESTsamples/でスクリプトjob_lmf,job_bandを続けて実行すると、バンドのpsができたりするように 整備してあります(pdosのサンプルもある)。ただbandプロットのデータ構造が独自仕様 でgnuplotなどでよめないので、その辺も将来的に改善したいです。

とにかく電子状態計算の方法論分野ではやるべきことが山積なのに、 マンパワー不足でなかなか前に進んでいきません。そのための基軸になる ものを用意していきたいです。多体論的なことであれば、フォノンや磁性による 自己エネルギーや、それらの絡みが問題になってくるでしょうが きちんとしたプラットフォームを用意しとかないとそういう問題に アタックできない。そのためにコードの中身や手法もとにかくどんどん 明瞭にしていきたい。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

1。何ができるか? FPでのLMTO,LAPW,あるいはMTO+PAWができます。 LDA+Uできます。XCはGGAは入ってません。 VWN(XCFUN=1)で計算してください。

力の計算、原子位置の緩和などができます。 LaGaO3のサンプルだけいれました。 ストレスの計算は直接にはできません。 現状では、参照になる格子定数をあたえたあと、 どれだけ格子を歪ませるか(格子定数をのばしたり) のオプションを指定して全エネルギーを計算するしかないです。

誘電関数、磁気応答、GW計算、QSGW計算、(みやけくんの)ワニエ関数生成やUの計算 は別途、fpgwのパッケージが必要です。 で、これらの計算はまだAPW+MTOの方法(PMT法)とは結合できてないのです。 このあたり、早急になんとかやっていきたいところです。

また、方法論の詳細やコードの詳細を早急に書き下したいとおもっています。 コード自体(わけのわからない構造体とかがはいってるので)、 すっきりさせていきたいところです。 以前のものに比べだいぶとすっきりしてきてますが。


2。展開するとecal/lm-7.0betaKディレクトリができます。 そこにいろんなものがはいってます。 (いずれはecalパッケージとして、gwのパッケージやXtalEditのパッケージ と統合したものにしようとおもっています)。 まずはそこのGetStarted.htmlを読んでください。 とくにいままで使っていたひとには違いの部分を知っておいてもらいたいです。

で、とにかくSrTiO3だと、 STRUC ALAT=6.7(かな?) DALAT=0 PLAT=1 0 0 0 1 0 0 0 1 SITE ATOM=Sr POS=1/2 1/2 1/2 ATOM=Ti POS= 0 0 0 ATOM=O POS=1/2 0 0 ATOM=O POS= 0 1/2 0 ATOM=O POS= 0 0 1/2 というctrls.srtio3(ctrlsです)ファイルをかけば ctrlgen.py srtio3でctrlのテンプレートが できるのでそれをすこしeditするだけで計算できます。 MTOは局在性の高い軌道だけにもちいて、あとは平面波でカバーするように 設定してあります。ctrlgen.pyなどをみてもらえばわかります。 ctrlgen.pyは原子計算のコードなどを利用して、MT半径を 決めたり、MTOを指定したりするのですが, いろいろ試した範囲では、現在の設定で良好にうごきます。 まだまだテストの余地はありますが。

3。マニュアルはむしろ日本語化していこうとおもってもいます(まず局所的にはやらせるのが重要です)。 皆の分からないところをぼくとか(ほかのひとにも協力してほしいですが) が調べて書き足していってよりよいマニュアルにしていくという方向性です。

4。ライセンスなど。  発表時:もともとマークさんのlmf-7.0betaをすこし改変してlm-7.0betaKとしたので、  MarkOriginalDoc/にあるように結果発表においては、マークさんのlmfの文献を引用してください。  また、ぼくと木野さんによって手がくわえられたバージョン「lm-7.0betaK001」をつかったことも引用してく ださい。  PMT法に関しては現状では、preprint serverの論文も引用してください。とにかくそのあたりだけきちんと  まもってもらえれば、問題ないです。場合によっては謝辞もいれてください。それでないとプログラム開発者 が生き残れないです。  まあ、場合により柔軟にやってください(トークでいつもいつも必ずそれを説明しろとかいうことではないの で)。

 ライセンスは実際のところよくわかりません。いぜんはサーバーにおいてメールをくれたひとに  取っていってくださいとか言って配布してたこともありました。実際、MAEDAとかいう会社が過去のバージョ ン  を、とりいれたパッケージを売ってたりしたこともあります(いぜんのlmtoではあまりに使えないのですぐや めたみたいですが)。  マークさん自身、いろんなところからコードをとってきてそれを組み入れてつかってはります。  (PMTの部分やGWのドライバー部分などぼくがかいたものを取り入れてる部分もあります)、  マークさんは「正しくつかってもらえるひとには配布していい」というようなスタンスです。  この論理からすれば、このあたらしい自動化の設定法がきちんと機能してだれでもつかえるようにできれば、  だれにでも配布できるようになります。

将来的には(いまもだいたいはそうなんですが)、なんらかのかたちのオープンなもの にしていきたいと思っています。各個人が改造して他者に再配布する自由は保持したいということです。

Personal tools