User Tools

Site Tools


Sidebar

wien2k:scf計算

この節では炭化チタンTiCを例に電子状態計算を行います。

第一原理計算の基本的な流れは

  1. 結晶構造データの用意
  2. 計算方法の設定
  3. 実際の電子状態計算(self-consistent field計算、SCF計算)
  4. 各種物理量の計算

となります。 ここでは3番目までの方法を解説します。

SCF計算

結晶構造データの作成

WIEN2kでは結晶構造はcase.structというファイルに保存されます。 caseはプロジェクト名であり自由に名付けることができますが、今回はTiC.structというファイルを作りましょう。

作業ディレクトリTiCを作成し、その中で作業します。 作業ディレクトリ名は必ずプロジェクト名と同じにします。 ターミナルを立ち上げて、次のように入力します。

$ mkdir TiC
$ cd TiC

structファイルの作り方は、プログラムmakestruct_lapwを使って自分で結晶構造を入力する方法と、結晶構造の統一フォーマットであるCIFファイルを変換する方法の2通りがあります。 既知の物質を調べる場合、結晶構造は論文か物質科学系のデータベースサイトを参照すると良いでしょう。

今回は以下のサイトに記載されているTiCの情報を使います。

makestruct_lapwを使う方法

基本的には質問に答えていくだけで完了します。 SPHERE RadIIやRMTの設定はとりあえずデフォルトのままにします。

$ makestruct_lapw

************************************************
*                                              *
**********   Terminal struct maker    **********
********** (C) 2012 by Morteza Jamal  **********
*                                              *
************************************************
TITLE :TiC

 This Program accepts a SPACE GROUP  (symbol or number)   or a
                        LATTICE TYPE (P, F, B, H, R, CXY, CXZ, CYZ ).
 But, with LATTICE TYPE YOU HAVE TO put in all the atomic positions by hand.

Would you like to enter  Spacegroup or Lattice (S/L)(def=S)? S
SPACE GROUP: (type ENTER or give first LETTER for a list) 
give SPACE GROUP as SYMBOL or NUMBER: 225
 Info:  space group is : 225 F Fm-3m -F4;2;3

Units of lattice parameters (Bohr/Angstrom) (b/A) (def=ANG):A
Lattice PARAMETERS as a b c (3 numbers):4.29 4.29 4.29
ANGLES BETWEEN lattice vectors, as alpha beta gamma (def=90.0 90.0 90.0):90.0 90.0 90.0
NUMBER INEQUEVALENT ATOMS :2
ATOM  1 (ELEMENT): Ti
POSITION OF ATOM Ti as X,Y,Z (def=0 0 0) :0 0 0
ATOM  2 (ELEMENT): C
POSITION OF ATOM C as X,Y,Z (def=0 0 0) :0.5 0.5 0.5

 Now, 'datastruct' file is ready.
We Run 'Tmaker' for making WIEN2k struct file.

 Fm-3m                         
   8.10692830565198        8.10692830565198        8.10692830565198     
   90.0000000000000        90.0000000000000        90.0000000000000     
 ATOM NAME:Ti        
 Ti/1        0.00000000  0.00000000  0.00000000
 ATOM NAME:C         
 C/1         0.50000000  0.50000000  0.50000000
 
 'init.struct' file is ready
 
SETTING UP SPHERE RadII:
SPECIFY possible REDUCTION of SPHERE RADII in % (def=0)
0
 specify nn-bondlength factor: (usually=2) [and optionally dlimit, dstmax (about
  1.d-5, 20)]
 DSTMAX:   20.0000000000000     
 iix,iiy,iiz           5           5           5   40.5346400000000     
   40.5346400000000        40.5346400000000     

    ATOM  1  Ti         ATOM  2  C         
 RMT(  1)=2.00000 AND RMT(  2)=2.00000
 SUMS TO 4.00000  LT.  NN-DIST= 4.05346

    ATOM  2  C          ATOM  1  Ti        
 RMT(  2)=2.00000 AND RMT(  1)=2.00000
 SUMS TO 4.00000  LT.  NN-DIST= 4.05346
NN ENDS
0.0u 0.0s 0:00.02 0.0% 0+0k 2240+32io 9pf+0w
atom  Z   RMT-max   RMT 
 1  22.0  2.22   2.22  
 2   6.0  1.81   1.81  
file    init.struct_setrmt   generated  
rerun setrmt ?(y,N) (def=N): 
N
The file   init.struct   has been created
 
  for modifications of your input you can also edit file datastruct and run
  Tmaker / setrmt init -r X    individually
$

init.structというファイルを (プロジェクト名).struct に変更しておきます。

$ mv init.struct TiC.struct

CIFファイルからstructファイルを生成する方法

実際にWIEN2kを使った第一原理計算を行うときは、対話形式でstructファイルを作成するよりも、結晶構造データの統一フォーマットであるCIFファイルから生成することが多くなると思います。 上記のCODのサイトからCIFファイルをダウンロードし、ファイル名をTiC.cifに変更して作業ディレクトリに保存します。

用意ができたら、プログラムcif2structを使ってstructファイルに変換します。

$ cif2struct TiC.cif

これで入力ファイルTiC.structができます。 ただし、このままだとマフィンチン半径$R_{\rm MT}$が正しく設定されていないので計算します。 拡張子の.structは不要です。

$ setrmt_lapw TiC

マフィンチン半径が正しく設定された入力ファイルTiC.struct_setrmtというファイルができるので、さきほどの入力ファイルに上書きします。

$ mv -f TiC.struct_setrmt TiC.struct

計算の設定の初期化

SCF計算に入る前に、計算の設定の初期化をおこないます。 ここではk点数とRKmaxを設定しましょう。 k点数やRKmaxを増やせば計算の精度はあがりますが、計算時間もかかるようになります。 最終的にほしい物理量がこれらのユーザー側が設定した量に対して収束しているか確認する必要があります。

なお、RKmaxは波動関数のカットオフを決めます。原子の種類によって必要な大きさが異なるので、選び方は http://susi.theochem.tuwien.ac.at/reg_user/faq/rkmax.html を参照してください。

ここではk点数を1000に、RKmaxを7.5にしてみましょう。

$ init_lapw -b -numk 1000 -rkmax 7.5
  • ここでフラグ -b はバッチモードで、これをつけることで指定のもの以外はすべてまとめてデフォルトの値に設定されます。
  • 最後に init_lapw finished ok と出たらうまく行っています。このメッセージが出てこなかった場合、どこかで問題が起こっているので修正します。

オプションの意味は次のとおりです

オプション初期値説明
-rkmax7.0RKmax
-numk1000k点数

他の設定はフラグ-hにより参照できます。

$ init_lapw -h

SCF計算の実行

これで準備が整いましたので計算を実行します。 run_lapw を使用します。

$ run_lapw -cc 0.0001 -ec 0.00001 -i 100
オプション初期値説明
-ccなし電荷の収束。単位はe。指定しなければ電荷の収束はチェックされないが、見ておいたほうが無難
-ec0.0001エネルギーの収束。単位はRy。デフォルトだと少し荒い
-i40SCF計算を行うときの、繰り返し回数の最大値。40回だと足りないこともあるので少し多めに。

他のオプションはフラグ-hで確認できます。

$ run_lapw -h

実行後、いろいろなファイルができますが、計算の経過や重要な情報は TiC.scf で確認できます。

$ grep ":ENE" TiC.scf     # 全エネルギー
(略)
:ENE  : ********** TOTAL ENERGY IN Ry =        -1783.96056300
$ grep ":FER" TiC.scf     # フェルミ準位。単位は Ry です。
(略)
:FER  : F E R M I - ENERGY(TETRAH.M.)=   0.7492912035
$ grep ":GAP" TiC.scf     # バンドギャップの大きさ。金属の場合は0になります。
(略)
:GAP (global)   :    0.0    Ry =     0.0   eV (metal)

これで電子状態が得られましたので、これをもとに状態密度やバンド分散などを計算することになります。

SCF計算の再実行

SCF計算を再度実行したい場合は、ブロイデン法の履歴を削除してから再実行します。 (電子密度の分布は前回の計算のものが引き継がれます)

$ rm *.broyd*
$ run_lapw -cc 0.0001 -ec 0.00001 -i 100

フラグ-NIをつけて再実行することも可能ですが、計算条件を変更する場合は使えません(エラーが出ます)。

$ run_lapw -cc 0.0001 -ec 0.00001 -i 100 -NI

k点数の変更

k点数が十分であったかを見るために、k点数を変更したいとします。 再び init_lapw を走らせると全ての設定や計算結果が初期化されますので、k点数だけ変更するために x_lapw kgen を使います。

$ x_lapw kgen
  NUMBER OF K-POINTS IN WHOLE CELL: (0 allows to specify 3 divisions of G)
2000
 length of reciprocal lattice vectors:   1.342   1.342   1.342  12.599  12.599  12.599
          72  k-points generated, ndiv=          12          12          12
KGEN ENDS
0.0u 0.0s 0:05.99 0.6% 0+0k 0+304io 0pf+0w

計算の再実行は上で述べたようブロイデン法の履歴を削除してから行います。 最初は少ないk点数(10くらい)から初めて、徐々に増やしていきましょう。 k点数に対して全エネルギーやフェルミ準位(半導体の場合はエネルギーギャップの大きさ)をプロットしてみて、収束しているかどうか必ず確認しましょう。

計算結果の保存

計算の入出力ファイルを残しておきたい場合は save_lapw を使用します。 例えばk点を増やして計算する際に、k点数を1000で計算したときの入力ファイルや結果を k1000 という名前のディレクトリに保存しておきたい場合は次のようにします。

$ save_lapw -d k1000

また、この保存したファイルを復活させる場合は次のようにします。-fは同じ名前のファイルがあった時に、強制的に上書きするオプションです。

$ restore_lapw -d k1000 -f

ジョブの一時停止

ジョブを一旦止めたい時には、作業ディレクトリに.stopという名前の空のファイルを置けばよいようになっています。

$ touch .stop

この空のファイルは、ジョブが止まった後に自動的に削除されます。

プログラム名について

プログラム名の最後に _lapw をつけていましたが、これを省略しても良いようになっています。 例えば x_lapw は単に x だけで実行可能です。

エラーや警告への対処

atom 1 has a large sphere , consider setting HDLOs and/or larger LVNS

init_lapw を実行したとき、lstartの段階でこのようなメッセージが出たときは、オプション -LVNS X (Xは4から10までの整数)をつけて、エラーが消えるまでXを増やしてください。

$ init_lapw -b -numk 1000 -rkmax 7.5 -lvns 5
wien2k/scf計算.txt · Last modified: 2023/04/23 19:47 by koudai