重なり積分を詳細に計算します

重なり積分

重なり積分は量子化学計算を行う上では「基本のき」です。このページでは量子化学計算を行うにあたり、必要な基底関数(原子軌道とイメージしてください)の重なり積分をp軌道まで含めて計算する詳細について解説します。

量子化学計算の基底関数にはGauss関数が用いられますが、重なり積分の計算ではGauss関数同士の積もまたGauss関数であることを利用していることに注目です。

(s|s)について

早速ですが、まずはs軌道同士の重なり積分を計算します。位置Aにある原子Aのs軌道G(a,A)と位置Bにある原子Bのs軌道G(b,B)の重なり積分(s|s)を考えます。

Gauss関数同士の積もまたGauss関数

量子化学プログラミングにおいて、もっともよく利用するのは「Gauss関数同士の積はGauss関数」という性質です。

計算するとすぐにわかりますが、位置Aを中心とするガウス関数G(a,A=exp(arA2)と位置B=exp(brB2)を中心とするガウス関数G(b,B)の積は、(係数KAB=exp(aba+bAB2)が新たに付け加わりますが、)係数a+bで位置aA+bBa+bを中心とするガウス関数になります。

重なり01

この性質を利用するとs軌道同士の積分はかなり簡単にもとまります。

重なり積分02

最後にガウス積分の公式exp(ax2)dx=π/aを使っています。

(s|s)は以下のコードで表現できます。「SSS」がexp(aba+bAB2)(πa+b)32を表しています。EX、CXはガウス関数の指数と係数を表していいます(基底関数がCXexp(EXr2)の形です)。

           ZETA = EX(I_BAS,I)+EX(J_BAS,J)
           GZAI = EX(I_BAS,I)*EX(J_BAS,J)/ZETA
           SSS  = EXP(-GZAI*d2)*(PI/ZETA)**(1.50d0)
           CXIJ= CX(I_BAS,I)*CX(J_BAS,J)

           IF((NBAS_TYPE(I_BAS).EQ.0).AND.(NBAS_TYPE(J_BAS).EQ.0)) THEN
C         < s1 | s1 >
           s_t = s_t + CXIJ*SSS

           ENDIF

(p|s)について

s軌道同士の重なり積分の次はp軌道とs軌道の重なり積分を考えましょう。

計算の前に、そもそも位置Aを中心とするp軌道の原子軌道がどのように表されるかご存じでしょうか?

じつは、量子化学計算のpx軌道はrA=rAを利用して、(xAx)exp(arA2)で表すことができます。つまりs軌道G(a,A=exp(arA2)(xAx)をかけるだけでpx軌道を表すことができるのです。

そして、このp軌道(px軌道)は原子位置Ax座標でs軌道を偏微分することで得られることもわかります。rA2=(xAx)2+(yAy)2+(zAz)2であることから確認は難しくありません。

重なり積分03

このp軌道(px軌道)は原子位置Ax座標でs軌道を偏微分することで得られることを利用すると、(px|s)(s|s)(PxAx)をかけたものに等しいことがわかります。

重なり積分04

(px|s)は下のようなコードで記述できます。SSSが(s|s)を表しています。

C          < px | s1 >
           DO NDimI = 1,3
           IF((NBAS_TYPE(I_BAS).EQ.NDimI)
     1                               .AND.(NBAS_TYPE(J_BAS).EQ.0)) THEN
          
            s_t = s_t + CXIJ *(PP(NDimI)-PA(NDimI))*SSS
           ENDIF
           ENDDO

(p|p)について

(p|p)(p|s)と同じように(xAx)exp(arA2)=12aAxexp(arA2)を利用することで計算が簡単にできます。

重なり積分05

(p|p)の積分をサブルーチンは次のように書けます。

      SUBROUTINE CALC_PP(NDimI,NDimJ,PA,PB,PP,ZETA,GZAI,d2,SSS,VAL)

      IMPLICIT NONE
      INTEGER  NDimI,NDimJ
      DOUBLE PRECISION  ZETA,GZAI,d2,SSS,VAL
      DOUBLE PRECISION  PA(3),PB(3),PC(3),PD(3)
      DOUBLE PRECISION  PP(3),PQ(3),PR(3) 

      VAL = (PP(NDimI)-PA(NDimI))*(PP(NDimJ)-PB(NDimJ))*SSS

      IF(NDimI.EQ.NDimJ) THEN
      VAL = VAL + 0.50d0/ZETA*SSS
      ENDIF

      ENDSUBROUTINE

まとめ

このページでは量子化学計算の基本となる重なり積分の計算を行いました。

(s|s)の重なり積分は一般的なGauss積分をそのまま利用できます。さらにp軌道が混じった重なり積分であっても少し工夫をすると(s|s)の積分と同じように求めることをこのページでは詳細に計算を行いました。

量子化学計算を行うためには重なり積分のほか、運動エネルギー積分と核引力積分、二電子積分を行う必要がありますが、これらに関しても本サイトで紹介していきます(運動エネルギー積分と核引力積分は近日公開予定)。