DC法は広範な系に適用でき、数値的にも安定な方法です。しかし金属系に対して精確な結果を得るには、図16に示したように切り取られたクラスターの サイズを大きくする必要があり、その場合には計算量が増大します。 計算量を削減する一つの方法は、切り取られたクラスターによって定義されるベクトル空間を次元数がより小さなKrylov部分空間[30]に マッピングすることです。 次のキーワードによりO()Krylov部分空間法を利用できます。
scf.EigenvalueSolver Krylov基本的に計算精度と計算効率は次の2つのキーワードで制御されます。
orderN.HoppingRanges 6.0 orderN.KrylovH.order 400キーワード「orderN.HoppingRanges」は、DC法の場合と同様に、各原子を中心とする球の半径を定義します。 ハミルトニアンに対するKrylov部分空間の次元は、キーワード「orderN.Krylov.order」で指定します。 さらに次のキーワードでO()Krylov部分空間法による計算の詳細が設定可能です。
キーワード「orderN.Exact.Inverse.S」を「on」に設定すると、切り取られた各クラスタの重なり行列の逆行列は厳密に評価されます。 offに設定する場合はキーワード「orderN.KrylovS.order」の項を参照してください。 デフォルトでは「on」に設定されています。
「orderN.Exact.Inverse.S=off」の場合、Krylov部分空間法によって逆行列を近似します。 この時、切り取られた各クラスタに対する重なり行列のクリロフ部分空間法の次元を「orderN.KrylovS.order」キーワードで指定します。 デフォルト値は、「orderN.KrylovH.order」で設定した値の4倍です。
キーワード「orderN.Recalc.Buffer」を「on」に設定すると、バッファ行列は各SCF反復毎に再計算されます。 「off」の場合にはバッファ行列は初回のSCFステップで計算され、その後のSCF反復では固定されます。 デフォルトでは「on」に設定されています。
キーワード「orderN.Expand.Core」を「on」に設定すると、コア領域は半径 の球の中にある 原子から構成されます。ここでは、中心原子と最隣接原子間の距離です。 このコア領域はクリロフ部分空間を生成するときの第1ステップで使用されるベクトル群を定義します。 「orderN.Expand.Core」が「off」の場合、中心の原子がコア領域と見なされます。デフォルトでは「on」に設定されています。
一般にキーワード「orderN.Exact.Inverse.S」と「orderN.Expand.Core」は 共有結合性物質に対しては「on」とした方が収束性が向上しますが、単純金属では「off」とした方が収束性が向上する場合もあります。 図17に、種々の物質に対し、Krylov法とDC法で計算した全エネルギーの絶対誤差を示します。 特に金属系ではDC法と比較してKrylov部分空間法の方が効率的であり、共有結合性とイオン性の増大とともに計算時間は同じ程度に なることが分かります。
大規模な計算を実現するために、O() Krylov部分空間法は並列化に配慮して実装されています。 MPIによる並列化の場合には原子数と同じMPIプロセス数までは計算を加速させることが出来ます。 またOpenMP/MPIハイブリッド並列によってOpenMPスレッドを使用すればさらに計算速度の向上が可能です。 超並列計算機を用いて10万個以上の原子から構成される系の並列計算を実施した例を図18に示します [31,32]。 この例では、ベンチマーク系として131072個の炭素原子から構成されるダイヤモンドの計算を行い、131072 MPIプロセス を使用し、その並列化効率は68%に達しています。