重なり積分は量子化学計算を行う上では「基本のき」です。このページでは量子化学計算を行うにあたり、必要な基底関数(原子軌道とイメージしてください)の重なり積分をp軌道まで含めて計算する詳細について解説します。
量子化学計算の基底関数にはGauss関数が用いられますが、Gauss関数同士の積もまたGauss関数であることを利用していることに注目です。
(s|s)について
早速ですが、まずはs軌道同士の重なり積分を計算します。位置$\boldsymbol{A}$にある原子Aのs軌道($G(a,\boldsymbol{A})$)と位置$\boldsymbol{B}$にある原子Bのs軌道($G(b,\boldsymbol{B})$)の重なり積分(s|s)を考えます。
Gauss関数同士の積もまたGauss関数
量子化学プログラミングにおいて、もっともよく利用するのは「Gauss関数同士の積はGauss関数」という性質です。
計算するとすぐにわかりますが、位置$\boldsymbol{A}$を中心とするガウス関数$G(a,\boldsymbol{A}=\exp(-a\boldsymbol{r}_A^2)$と位置$\boldsymbol{B}=\exp(-b\boldsymbol{r}_B^2)$を中心とするガウス関数$G(b,\boldsymbol{B})$の積は、(係数$K_{AB}=\exp(-\frac{ab}{a+b}AB^2)$が新たに付け加わりますが、)係数$a+b$で位置$\frac{a\boldsymbol{A}+b\boldsymbol{B}}{a+b}$を中心とするガウス関数になります。
この性質を利用するとs軌道同士の積分はかなり簡単にもとまります。
最後にガウス積分の公式$\int^\infty_{-\infty}\exp(-ax^2)dx=\sqrt{\pi/a}$を使っています。
$(s|s)$は以下のコードで表現できます。「SSS」が$\exp(-\frac{ab}{a+b}AB^2)(\frac{\pi}{a+b})^{\frac{3}{2}}$を表しています。EX、CXはガウス関数の指数と係数を表していいます(基底関数が$\text{CX}\exp(-\text{EX}r^2)$の形です)。
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軌道の重なり積分を考えましょう。
計算の前に、そもそも位置$\boldsymbol{A}$を中心とするp軌道の原子軌道がどのように表されるかご存じでしょうか?
じつは、量子化学計算のpx軌道は$\boldsymbol{r}_A=\boldsymbol{r}-\boldsymbol{A}$を利用して、$(x-A_x)\exp(-a\boldsymbol{r}_A^2)$で表すことができます。つまりs軌道$G(a,\boldsymbol{A}=\exp(-a\boldsymbol{r}_A^2)$に$(x-A_x)$をかけるだけでpx軌道を表すことができるのです。
そして、このp軌道(px軌道)は原子位置$\boldsymbol{A}$の$x$座標でs軌道を偏微分することで得られることもわかります。$\boldsymbol{r}_A^2=(x-A_x)^2+(y-A_y)^2+(z-A_z)^2$であることから確認は難しくありません。
このp軌道(px軌道)は原子位置$\boldsymbol{A}$の$x$座標でs軌道を偏微分することで得られることを利用すると、$(p_x|s)$は$(s|s)$に$(P_x-A_x)$をかけたものに等しいことがわかります。
$(p_x|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)$と同じように$(x-A_x)\exp(-a\boldsymbol{r}_A^2)=\frac{1}{2a}\frac{\partial}{\partial{A}_x}\exp(-a\boldsymbol{r}_A^2)$を利用することで計算が簡単にできます。
$(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)$の積分と同じように求めることがわかったかと思います。
また、プログラミングについても重なり積分の最終的な標識を素直に記述すれば求められることがわかります。