量子力学はLennard-Jonesポテンシャルを再現できるか

原理的にはできないと困るわけだけど、化学的精度と言われる1kcal/mol程度の計算は現在でも多くの場合容易ではない。でも、系が簡単ならできるのではという期待も微妙にある。単純に、二分子系で構造最適化して、ポテンシャルの深さと平衡分子間距離からLJパラメータを決めても、無極性分子同士の分子間相互作用は弱いので、構造最適化の精度がでない可能性は高い。その場合は、分子間距離を変えて一点計算を繰り返すほうがよいかもしれない。まぁ、既に何人もの人がやってるだろうけど。計算には、Gamessを使用


LJポテンシャルは
\phi(r)=4\epsilon [(\frac{\sigma}{r})^{12} - (\frac{\sigma}{r})^6]
で、ポテンシャルが極小になるrを$r_m$とすると、極小値は-εで
\sigma = \frac{1}{2^{1/6}} r_m
という関係がある。


まず、一番簡単なヘリウム。インプットは以下のように適当に作った(とりあえず、HFで、6-31G(d)基底)

! rungms He2.inp 11-64 1 0 > He2.log
 $contrl runtyp=optimize scftyp=rhf coord=unique $end
 $basis gbasis=n31 ngauss=6 ndfunc=1 $end
 $guess guess=Huckel $end
 $statpt OPTTOL=1.0e-9 HSSEND=.T. $end
 $data
helium dimer
C1
 He  2 0.0 0.0 0.0
 He  2 0.0 0.0 2.2
 $end

構造最適化の結果、分子間距離は3.2345263Åで、エネルギーは-5.7103221681(hartree)となる。σ=2.88Å程度。ヘリウム一原子のエネルギーは同条件の計算で、-2.8551604262(hartree)らしいので、ε=1.3157000005037389e-6(hartree)=0.00083(kcal/mol)。ヘリウムのLJパラメータは、見る文献によって、意外とバラツキがあって、どれがよいのか分からないけど、σが2.6Å前後で、εが0.02kcal/mol程度なのは確かっぽいので、距離はともかく、エネルギーが合ってない


同じく、HeでCI計算をやってみる

 $contrl runtyp=optimize scftyp=rhf CITYP=GUGA $end
 $CIDRT NFZC=0  NDOC=2 NVAL=8 IEXCIT=2 $END
 $GUGDIA PRTTOL=0.00001 $END
 $basis gbasis=n31 ngauss=6 ndfunc=1 npfunc=1 $end
 $statpt OPTTOL=1.0e-9 $end
 $data
helium dimer
C1
 He 2 0.0 0.0 0.0
 He 2 0.0 0.0 3.3
 $end

r_m=3.0420800Åが平衡距離で、σ=2.71Åとなって、距離は大分近づいた。この時-5.7742572988(hartree)で、一原子のエネルギー-2.8873650277(hartree)なので、だめっぽい。仕方ないので、100Å離して一点計算すると-5.7742486047(hartree)らしい。なので、ε=0.0055(kcal/mol)


HeでCCSD(T)

 $contrl runtyp=optimize scftyp=rhf CCTYP=CCSD(T) NUMGRD=.T. $end
 $basis gbasis=n31 ngauss=6 ndfunc=1 npfunc=1 $end
 $statpt OPTTOL=1.0e-9 $end
 $data
helium dimer
C1
 He 2 0.0 0.0 0.0
 He 2 0.0 0.0 3.3
 $end

r_m=3.0416303Åが平衡距離で、σ=2.71Å。エネルギーは-5.7747387998(hartree)で、一原子のエネルギー-2.8873650277(hartree)なので、ε=8.7443999996494881e-06(hartree)=0.0055(kcal/mol)。CI計算とほぼ同一の結果


cc-pVDZ基底を持ってきて、CCSD(T)計算

! cc-pVDZ basis
! from https://bse.pnl.gov/bse/portal
 $contrl runtyp=optimize scftyp=rhf CCTYP=CCSD(T) NUMGRD=.T. $end
 $statpt OPTTOL=1.0e-9 $end
 $data
helium dimer
C1
 He 2 0.0 0.0 0.0
S   3
  1     38.3600000              0.0238090        
  2      5.7700000              0.1548910        
  3      1.2400000              0.4699870        
S   1
  1      0.2976000              1.0000000        
P   1
  1      1.2750000              1.0000000        

 He 2 0.0 0.0 3.3
S   3
  1     38.3600000              0.0238090        
  2      5.7700000              0.1548910        
  3      1.2400000              0.4699870        
S   1
  1      0.2976000              1.0000000        
P   1
  1      1.2750000              1.0000000        

 $end

r_m=3.0907625Åで、σ=2.75Å。エネルギーは-5.7751959267(hartree)で、50Å離した時の一点計算の結果-5.7751896622(hartree)を基準とすると、ε=0.004(kcal/mol)となる。まぁ、流石に厳しいのか




Arでもやってみる。ただのHF

! rungms Ar2.inp 11-64 1 0 > Ar2.log
 $contrl runtyp=optimize scftyp=rhf coord=unique $end
 $basis gbasis=n31 ngauss=6 ndfunc=1 $end
 $guess guess=Huckel $end
 $statpt OPTTOL=1.0e-9 HSSEND=.T. $end
 $data
argon dimer
C1
 Ar  18 0.0 0.0 0.0
 Ar  18 0.0 0.0 3.2
 $end

分子間距離は4.5129590Åで、σ=4.02Å。エネルギーは-1053.5475039624(hartree)。一原子のエネルギーは-526.7737449209(hartree)で、ε=1.412e-5(hartree)=0.00836(kcal/mol)。実測値は、σ=3.4Å,ε=0.2kcal/molなので、微妙

MP2計算にすると(基底関数は同じ)、分子間距離は4.1782062Åで、σ=3.722Å。エネルギーは-1053.8222010388(hartree)。一原子のエネルギーは、-526.9110529280(hartree)より、ε=0.06(kcal/mol)で、改善される



折角なので、二原子分子N2でもやってみる。まず、一分子の構造最適化をする

 $contrl runtyp=optimize scftyp=rhf mplevl=2 $end
 $basis gbasis=n311 ngauss=6 ndfunc=1 $end
 $guess guess=Huckel $end
 $statpt OPTTOL=1.0e-9 HSSEND=.T. $end
 $data
nitrogen molecule
C1
 N           7.0   0.0000000000   0.0000000000   0
 N           7.0   0.0000000000   0.0000000000   1.2
 $end

トータルエネルギーは-109.3027176037(hartree)。二原子分子の場合、相対的な配置も問題になるけど、とりあえず平行に置いてみる。でまぁ、適当にインプットを作る。この程度の計算なら、いきなり重めの基底関数から始めても余裕

 $contrl runtyp=optimize scftyp=rhf mplevl=2 $end
 $basis gbasis=n311 ngauss=6 ndfunc=1 $end
 $guess guess=Huckel $end
 $statpt OPTTOL=1.0e-9 HSSEND=.T. $end
 $data
N2 dimer
C1
 N           7.0   0.0000000000   0.0000000000   0.0398482444
 N           7.0   0.0000000000   0.0000000000   1.1601517556
 N           7.0   3.0000000000   0.0000000000   0.0398482444
 N           7.0   3.0000000000   0.0000000000   1.1601517556
 $end

これで最適化して、基準振動を見ると、虚のモードが出てしまう。というわけで、別の配置からやり直し

 $contrl runtyp=optimize scftyp=rhf mplevl=2 $end
 $basis gbasis=n311 ngauss=6 ndfunc=1 $end
 $guess guess=Huckel $end
 $statpt OPTTOL=1.0e-9 HSSEND=.T. $end
 $data
N2 dimer
C1
 N           7.0   0.0000000000   0.0397494066   0.0000000000
 N           7.0   0.0000000000   1.1602505275   0.0000000000
 N           7.0   3.0000000000   0.0000000000   0.0397494724
 N           7.0   3.0000000000   0.0000000000   1.1602505935
 $end

これだと、虚のモードは出ない。最適化後の配置は

 N           7.0  -0.1514279733   0.1907019398   0.0836249847
 N           7.0  -0.5073563096   1.1933370214  -0.2673972831
 N           7.0   3.1529363171   0.0835077242   0.1898945065
 N           7.0   3.5058479658  -0.2675467513   1.1938778579

分子の重心間距離で見ればr_m=3.82Åで、σ=3.40Å。エネルギーは-218.6060802776(hartree)なので、ε=0.40(kcal/mol)程度。


http://www.nucleng.kyoto-u.ac.jp/people/ikuji/edu/ebeam/lennard.html
によると、σ=3.68Å,ε=0.18kcal/molで、まぁぼちぼち


計算方法が行き当たりばったりで統一性がないけど、まぁ、ちゃんとやればそれなりの結果が出そう?


課題:
・相互作用エネルギーが小さすぎて、BSSEなどの数値誤差の影響がでかい
・実験値は、そもそも二体ポテンシャル近似とか過程を置いた上でLJパラメータを出しているので、純粋な二分子系の計算結果とどれくらい一致するのか不明
・多原子分子の場合、LJポテンシャルは、距離のみの関数なので、ポテンシャルエネルギーは、最適化した配置ではなく、(分子の重心を固定した上で)分子同士の相対配置全部に渡って平均化したエネルギーを考えるのが正しい気もするし、そもそもエネルギー極小となる配置が"本質的に複数"(つまり、一様な回転や並進操作によって互いに移らない)存在する可能性もある