AkaiKKRの入力ファイルにおける
pmix
は、セルフコンシステント計算における収束の速さを決めるパラメータです。大きい値を使うほど速く解に近づきますが、振動して収束しない可能性が出てきます。逆に小さい値を使うほど収束しやすくなりますが、収束に時間がかかるようになります。(たぶん、小さい値を使う方が準安定な解に収束しやすくもなる?)
最近(といっても1年ぐらい前ですが)、収束させる方法としてBroyden法が実装されました。これに伴って、今まで通り
pmix
に数値だけを与えた場合のデフォルトの動作は、最初に、以前から使われていたTchebyshev法を使い、適当なところでBroyden法に切り替わる挙動になったとの事です。
以前のようにTchebyshev法だけを使いたい場合は
pmix
のところに数値だけではなく
0.035tch
の様に書きます。逆にBroyden法だけをつかいたい場合は
0.035bry
と書けば良い様です。
普通は特に何も考えずに数値だけを書いておいて、両方の方法で収束させるのが良いと思います。
tch → bry で収束させる
AkaiKKRに付属しているbcc Feの入力ファイルをそのまま実行するとTchebyshev法とBroyden法の両方が利用されます。
c----------------------Fe------------------------------------
go data/fe
c------------------------------------------------------------
c brvtyp a c/a b/a alpha beta gamma
bcc 5.27 , , , , , ,
c------------------------------------------------------------
c edelt ewidth reltyp sdftyp magtyp record
0.001 1.0 nrl mjwasa mag 2nd
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 8 100 0.035
c------------------------------------------------------------
c ntyp
1
c------------------------------------------------------------
c type ncmp rmt field mxl anclr conc
Fe 1 0 0.0 2 26 100
c------------------------------------------------------------
c natm
1
c------------------------------------------------------------
c atmicx(in the unit of a) atmtyp
0 0 0 Fe
c------------------------------------------------------------
pmix
に単純に
0.035
と入力した場合、以下のような出力が得られます。
maxitr=100 pmix= 0.03500 mixtyp=tchb-brydn
mixtyp
が
tchb-brydn
となっていることが分かります。
tch のみで収束させる
他の部分は同じなので、変更した
pmix
の部分だけを示します。今回はTchebyshev法だけを使う例です。
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 8 100 0.035tch
c------------------------------------------------------------
出力は以下のようになります。
maxitr=100 pmix= 0.03500 mixtyp=tchebyshev
確かに
mixtyp
が
tchebyshev
となっています。
bry のみで収束させる
Broyden法だけを使う場合は、以下のようになります。
c------------------------------------------------------------
c outtyp bzqlty maxitr pmix
update 8 100 0.035bry
c------------------------------------------------------------
出力は以下の通りです。
maxitr=100 pmix= 0.35000 mixtyp=broyden
mixtyp
が
broyden
となっている事の他に
pmix
の値が10倍になっています。
source/spmain.f
を見てみると
mixtyp
が
broyden
の場合は、値を10倍にするような処理が入っているようです。なので、たぶんこれは正しい挙動なのだと思います…。
比較と使い分け
今回の bcc Fe の計算では、どの方法を使っても計算は収束しました。収束に必要だったiterationの回数は tch+bry で35回、tch のみなら57回、 bry のみなら43回でした。全エネルギーも以下の通り、ほとんど同じ値になりました。
total energy= -2522.835012453 (tch+bry)
total energy= -2522.835012462 (tch)
total energy= -2522.835012456 (bry)
第37回CMDワークショップにて、これらの手法の使い分けについて赤井先生に尋ねました。AkaiKKRでは結晶の計算の前に、原子の計算を行うのですが、 bry だけでは原子の計算に失敗することがあり、この場合は tch を使う必要があり、このため tch+bry がデフォルトの動作になっているとの事。また、デフォルトの tch+bry で上手く収束させられない場合は tch だけにする(つまり以前の挙動に戻す)と収束しやすくなることがあるかもしれないとも。ただし、上手く収束させられないときは
ewidth
とか
pmix
の値そのものとかを変えてみるのが先決という感じでした。
関連エントリ
フィードバック

↑ 電子工作ブログランキング参加中です。1クリックお願いします。
コメント・トラックバックも歓迎です。 ↓
↓ この記事が面白かった方は「拍手」をお願いします。
tag: AkaiKKR machikaneyama pmix Tchebyshev Broyden