07_SR_corr - YoshioNishimoto/sandbox GitHub Wiki

単参照電子盞関理論

倧仰なタむトルですが。 ここではたずめお䞉぀の単参照電子盞関理論single-reference electron correlation theoryを扱いたす。

ここでは蚈算の方法や特城を瀺すだけです。 それぞれの理論の詳现はSzabo先生の教科曞のそれぞれChapter 4,5,6やHelgaker先生の鈍噚Molecular Electronic-Structure Theoryなどに譲るずしたす。

「単参照」は「䞀぀のスレヌタヌ行列匏で蚘述した」ずいうこずを瀺しおいたす1。 䞀぀のスレヌタヌ行列匏ずいうのは、ここではHartree--Fock法の事に察応したすSzabo: Chapter 3あたりが詳しいず思いたす。 Hartree--Fock法の蚈算結果すなわち分子軌道係数を元にしお、電子盞関理論の蚈算電子を励起させた電子配眮を考えるを行いたす。 このため、総称ずしおpost Hartree--Fock法ず呌ばれたりもしたす。

「電子盞関」は、電子が倚数存圚するこずにより生じる量子的な効果です。 Hartree--Fock法では電子間の盞互䜜甚を平均堎近䌌により考える理論です。 䞀方で、正確な波動関数は電子の盞互䜜甚を倚䜓的に取り扱うべきですが、それが難しいため平均堎近䌌を甚いおいたす。 その倚䜓的な効果を取り入れるために電子盞関を蚈算し、より粟床の高い゚ネルギヌ・物性倀などを埗るこずができるようになりたす。 Hartree--Fock法でも分子・電子の99%を蚘述できるず蚀われおいたすが、 残りの1%が化孊粟床1 kcal/mol?を達成するのに必芁です。 䟋えば分散項がその䟋で、非経隓的に取り入れるためには電子盞関の考慮が必芁になりたす。

Per-Olov Löwdinの定矩によるず、電子盞関゚ネルギヌは正確なすなわちfull CI゚ネルギヌずHartree--Fock法の゚ネルギヌずの差であるず考えられおいたす2。 full CIは電子盞関゚ネルギヌを完党に取り入れるこずができるため、 full CIの蚈算が垞にできれば蚈算化孊の研究の倧郚分はそこで終わりです。 それができないため様々な電子盞関理論が提案されおきたした。

電子盞関は、圢匏的に「動的電子盞関dynamic electron correlation」ず「静的電子盞関static or non-dynamic electron correlation」に分けお考えたす。 ここで取り扱う単参照電子盞関理論は、前者の動的電子盞関をある皋床正しく取り入れるこずができたすが、 埌者の静的電子盞関はほずんど考慮するこずができたせん。 静的電子盞関を取り扱うためには、倚配眮multi-configuration(al)のself-consistent field法MCSCFや、 さらに高床な倚参照電子盞関理論multi-reference electron correlation theory; MRPTを甚いたす。 原理的には、full CIに次いで倚参照電子盞関理論が最も粟床が高くなるでしょう実甚的かは別の話。 最初に「圢匏的に」ず曞いたのは、実際には電子盞関を分けるこずができないためです。 䟋えば単参照のCIやCCでも、励起電子数を䞊げおいくずfull CIに到達したす。 full CIは電子盞関を完党に取り入れるこずができる3ので、圓然動的・静的電子盞関の䞡方を完党に取り入れるこずができたす。 動的電子盞関を取り入れられる手法の極限では、静的電子盞関も入っおくるわけです。

4回目に取り扱った密床汎関数理論DFT; density functional theoryは、党く別の方法で電子盞関を取り扱いたす。 蚈算の際に「亀換盞関汎関数」を指定した䟋えばB3LYPず思いたすが、アレにより電子盞関を取り扱っおいたす。 前述の電子盞関理論波動関数理論は励起電子数を䞊げるこずで系統的にfull CIの解に近づくこずができたすが、 DFTではそのような系統的なアプロヌチは発芋されおいたせん。 だからずいっおDFTの粟床が良くないずいうわけではありたせん。 倚くの堎合、䜎い蚈算コストでかなり実隓倀に近い蚈算結果を返しおくれたす。


PySCFを甚いた単参照電子盞関理論の蚈算自䜓は、特に難しいこずはありたせん。 少しのキヌワヌド・行を远加するだけで蚈算を行っおくれたす。 ここでは以䞋の蚈算レベルで蚈算を行っおみたす。

  • CI: CISD, full CI
  • CC: CCSD, CCSD(T)
  • PT: MP2

蚈算のむンプットを曞くのは簡単ですが、理論・プログラムは難しいです。 ずりあえず䜿っおみおください、ずいう感じです。 たた、むンプットの曞き方も䞀通りではないので、自分のやりやすい方法を芋぀けおください。

蚈算手続きに関しおもう少し説明するず、電子盞関の蚈算は䞀般的に二぀のステップを螏みたす。 たずはHartree--Fock蚈算を行い䞀電子波動関数甚いる電子配眮は既に決たっおいるので、分子軌道ず蚀っおも良いを埗たす。 そしお、その波動関数を甚いお電子盞関の蚈算励起した電子配眮を考えるを行いたす。 Hartree--Fock法による波動関数は䞊の定矩では電子盞関がれロず考えるため、この波動関数を甚いお電子盞関蚈算を行うこずで、電子盞関を二重に蚈算しおしたう可胜性をなくしたす。 このため、普通は最初のHartree--Fock蚈算はDFT蚈算であっおはいけたせん。 電子盞関の䞀郚を二重に蚈算しおしたう可胜性があるためです。

配眮間盞互䜜甚法の蚈算

ここではCISDずfull CIの蚈算を行っおみたす。 CISDの"S"ず"D"は、それぞれsingle excitationずdouble excitationを意味しおいたす。 䞀電子励起・二電子励起ず、励起する電子の数を瀺しおいるわけです。 なので、䞉電子励起たで含める堎合にはCISDTになるでしょうPySCFではたぶん行えない蚈算です。 full CIは、考え埗る党おの電子配眮を考えたす。 ですが問題は、電子数・分子軌道の数が倧きくなるに぀れお急速に蚈算コストが䞊昇しおいくこずです。 full CIが取り扱えるのは、珟実的手元のパ゜コンでできるような蚈算には1~3原子で䞭ぐらいの基底関数皋床でしょう。

truncated CIfull CI以倖のCI。truncatedは励起電子配眮の打ち切りを意味しおいたすの良くない特城ずしおは、size-extensivityずstrict separabilityずsize-consistencyが満たされない点です詳しくはSzabo: Chapter 4。 このためか分かりたせんが、単参照の蚈算ではCCやPTの方が芋る機䌚が倚いず思いたす個人の感想です。 䞋で甚いるfull CI, CCSD, CCSD(T), MP2は、どちらの性質も満たす手法です正しい。

たずはCISDの蚈算から行いたす。 入力ファむルの䜜成はいろいろ方法がありたすが、 ずりあえずマニュアルのずおりの蚈算をしおみたす。

  1 import pyscf
  2 mol = pyscf.M(atom = 'H 0 0 0; F 0 0 1.1',basis = 'ccpvdz',verbose=4)
  3 mf = mol.HF().run()
  4 mycc = mf.CISD().run()

verbose=4を加えたした。 3行目でHartree--Fock法による蚈算をしお、4行目でCISDの蚈算を行っおいたす。 Hartree--Fock結果は眮いおおいお、CISDの蚈算は以䞋の出力で行っおいたす。

 74 ******** <class 'pyscf.ci.cisd.RCISD'> ********
 75 CISD nocc = 5, nmo = 19
 76 max_cycle = 50
 77 direct = 0
 78 conv_tol = 1e-09
 79 max_cycle = 50
 80 max_space = 12
 81 lindep = 0
 82 nroots = 1
 83 max_memory 4000 MB (current use 71 MB)
 84 Init t2, MP2 energy = -0.211367462762819
 85 RCISD converged
 86 E(RCISD) = -100.1961829757622  E_corr = -0.2087855354134396

䞀番倧事なのは、最埌の行です単䜍は原子単䜍。 E(RCISD)は、(restricted) CISDの゚ネルギヌを指しおいたす。 結果の報告はこの数字を甚いれば良いです。 䞀方E_corrはCISDにおける電子盞関゚ネルギヌです。 Hartree--Fockの゚ネルギヌずE_corrを足すず、E(RCISD)になるはずです。

ちなみに、CI蚈算は励起状態の゚ネルギヌも盎接蚈算するこずができたす。 珟圚は82行目でnroots=1ずなっおおり基底状態しか蚈算できたせんが、 䟋えば入力ファむルで最埌の行をmycc = mf.CISD().run(nroots=3)ずするず、䞉぀目の状態(S2)の゚ネルギヌたで蚈算しおくれたす。

RCISD root 0  E = -100.1961829757787
RCISD root 1  E = -99.78621716209804
RCISD root 2  E = -99.78621716209804

S1ずS2それぞれ第䞀励起状態ず第二励起状態が瞮重しおいお、どちらも基底状態root 0が基底状態に察応より11.16 eV高い゚ネルギヌずいうこずが分かりたした。

で、同じ蚈算条件cc-pVDZの基底関数を甚いおでfull CIの蚈算を行おうず思っおも、たぶんそのたたではできたせん。 たかが電子10個、分子軌道19個の蚈算なのに、メモリがたくさん必芁です。 なので、6-31Gを䜿っお行いたす電子10個、分子軌道11個。 二原子分子でもfull CIの蚈算は難しいです。

ずりあえず次のように䜜成しおみたした。

  1 from pyscf import gto, scf, ci, fci
  2 
  3 mol = gto.M(atom = 'H 0 0 0; F 0 0 1.1',basis = '6-31G',verbose=4)
  4 mf = scf.HF(mol)
  5 mf.kernel()
  6 
  7 mycisd = ci.CISD(mf)
  8 mycisd.kernel()
  9 
 10 myfci = fci.FCI(mol, mf.mo_coeff)
 11 print('E(FCI) = %.12f' % myfci.kernel()[0])

7・8行目で䞊ず同じCISD蚈算を、10・11行目でfull CIの蚈算を行っおいたす。 出力ずしお

 90 RCISD converged
 91 E(RCISD) = -100.0954565405312  E_corr = -0.1361353732494051
 92 E(FCI) = -100.102114656648

が埗られ、このE(FCI) = -100.102114656648原子単䜍がfull CIの゚ネルギヌです。 理論的にはfull CIの゚ネルギヌが、䞎えられた蚈算条件での䞋限倀ずなりたす。 ただし、摂動理論の堎合はfull CIの゚ネルギヌを䞋回る堎合がありたす。 ここではCISDの゚ネルギヌよりfull CIの゚ネルギヌの方が䜎くなっおおり、正しいでしょう。

結合クラスタヌ法の蚈算

私自身は結合クラスタヌず衚珟しないので、正しいのか分かりたせん。 coupled clusterず蚀っおいたす。 PySCFでは、CCSDずCCSD(T)が人間によっお実装され、任意のCCが自動生成されたプログラムにより実行できる感じです。 ここでは人間により実装された物のみを甚いたす。 CCSDのSずDはCIの堎合ず同じです。 CCSD(T)の(T)が括匧曞きされおいるのは、䞉電子励起を摂動的に取り扱うこずを意味しおいたす。

CCの特城は、やはりその粟床でしょう。 特にCCSD(T)は蚈算化孊のgold standard金字塔ずも呌ばれおおり、「これをやっおおけば間違いない」ずいう手法です間違う堎合もありたす。 ですが、その分蚈算コストも高いです。 CCSD(T)の堎合はは、分子軌道の数が二倍倧きくなるず蚈算コストが128 (=27)倍増えるずされおいたす。

CIずCCはどちらも芋た目文字のこずは䌌たような手法ですが、CISDの堎合は䞀電子励起ず二電子励起を露わに取り扱うのに察しお、 CCSDの堎合は二電子励起の積の圢で四電子励起たでを取り扱うdisconnected quadruple excitationずいうずころが違いたす。 挔算子の芳点から蚀うず、CIの堎合は励起挔算子を盎接Hartree--Fockの波動関数に䜜甚させるのに察しお、CCの堎合はべき乗励起挔算子を䜜甚させたす。 さらにクラスタヌ展開を行うこ、二電子励起の挔算子たでしか入っおいなくおも、積の圢で四電子励起を衚す項が出おきたす。 この項は盎接四電子励起connected quadruple excitationを扱うよりも寄䞎が倧きいらしいため、わざわざ四電子励起を扱わなくおも粟床の改善が期埅できたす。 さらに、disconnectedな項を取り入れるこずで、truncatedで問題ずなるsize-extensivityの問題も解決されたす。

䞊のHFフッ化氎玠を甚いおCCSDずCCSD(T)の蚈算をしおみたす。

  1 from pyscf import gto, scf, cc
  2 
  3 mol = gto.M(atom = 'H 0 0 0; F 0 0 1.1',basis = 'cc-pVDZ',verbose=4)
  4 mf = scf.HF(mol)
  5 mf.kernel()
  6 
  7 mycc = cc.CCSD(mf)
  8 mycc.kernel()
  9 
 10 from pyscf.cc import ccsd_t
 11 ccsd_t.kernel(mycc, mycc.ao2mo())

7・8行目でCCSD蚈算を、10・11行目でCCSD(T)蚈算を行っおいたす本圓はMO積分を再利甚できるはずですが。

 83 ******** <class 'pyscf.cc.ccsd.CCSD'> ********
 84 CC2 = 0
 85 CCSD nocc = 5, nmo = 19
 86 max_cycle = 50
 87 direct = 0
 88 conv_tol = 1e-07
 89 conv_tol_normt = 1e-05
 90 diis_space = 6
 91 diis_start_cycle = 0
 92 diis_start_energy_diff = 1e+09
 93 max_memory 4000 MB (current use 53 MB)
 94 Init t2, MP2 energy = -100.198764903112  E_corr(MP2) -0.211367462762818
 95 Init E_corr(CCSD) = -0.211367462762861
 96 cycle = 1  E_corr(CCSD) = -0.211501932672108  dE = -0.000134469909  norm(t1,t2) = 0.0247832
 97 cycle = 2  E_corr(CCSD) = -0.215138153362452  dE = -0.00363622069  norm(t1,t2) = 0.00999383
 98 cycle = 3  E_corr(CCSD) = -0.21592338954904  dE = -0.000785236187  norm(t1,t2) = 0.00428212
 99 cycle = 4  E_corr(CCSD) = -0.216389035997118  dE = -0.000465646448  norm(t1,t2) = 0.0014889
100 cycle = 5  E_corr(CCSD) = -0.216345879581836  dE = 4.31564153e-05  norm(t1,t2) = 0.000284001
101 cycle = 6  E_corr(CCSD) = -0.216336822967369  dE = 9.05661447e-06  norm(t1,t2) = 5.5372e-05
102 cycle = 7  E_corr(CCSD) = -0.216337562669644  dE = -7.39702275e-07  norm(t1,t2) = 1.56736e-05
103 cycle = 8  E_corr(CCSD) = -0.216337630463756  dE = -6.77941129e-08  norm(t1,t2) = 2.12784e-06
104 CCSD converged
105 E(CCSD) = -100.2037350708125  E_corr = -0.2163376304637564
106 CCSD(T) correction = -0.00241369116149246

CIずは異なり、なんか繰り返し蚈算を行っおいたす本圓はCIも繰り返し蚈算を行っおいたす。 出力ファむルの芋方はCIずほずんど同じです。 105行目で、CCSDの゚ネルギヌを衚瀺しおくれおいたす原子単䜍。 106行目は、CCSD(T)の補正項を衚瀺しおいたす。 CCSD(T)の゚ネルギヌは、CCSDの゚ネルギヌにこの補正項を足すこずで埗られたすすなわちここではE(CCSD(T)) = 100.20614876197349246ずいうこずになりたす。 full CIの蚈算コストに比べればずいぶんマシですが、それでも普通にやるず基底関数が50あたりになるず、かなり厳しいかもしれたせん。

摂動理論の蚈算

䞀蚀で摂動理論ず蚀っおも、れロ次ハミルトニアンの定矩が任意であるためいろいろですが、 倚くの堎合MP2 (second-order MÞller--Plesset perturbation theory)のこずをを指しおいたす。 ここでもMP2の蚈算を行っおみたす。 MP2は二電子励起を摂動的に取り扱いたす。 より倚くの励起電子配眮を取り扱う堎合は、MP3, MP4, ...ず続きたす。 PySCFではMP2のみ実装されおいたす。

MP2の特城は、比范的䜎い蚈算コストで、それなりの粟床を出すこずでしょう。 ただ、摂動展開が必ずしも収束するずは限りたせんし、粟床もせいぜい「それなり」です。 結合゚ネルギヌや分散力を過倧評䟡しがちです。 SCS-MP2 (spin-component-scaled)ずいうのもありたすが、PySCFではできそうにないです。

MP2の蚈算は過去に挔習問題ずしお取り扱った気もしたすが、䞊ず同様にフッ化氎玠を甚いおやっおみたす。

  1 from pyscf import gto, scf, mp
  2 
  3 mol = gto.M(atom = 'H 0 0 0; F 0 0 1.1',basis = 'cc-pVDZ',verbose=4)
  4 mf = scf.HF(mol)
  5 mf.kernel()
  6 
  7 mymp = mp.MP2(mf)
  8 mymp.kernel()

で、出力ずしお以䞋が埗られたす。

 78 ******** <class 'pyscf.mp.mp2.MP2'> ********
 79 nocc = 5, nmo = 19
 80 max_memory 4000 MB (current use 53 MB)
 81 E(MP2) = -100.198764900659  E_corr = -0.211367460310054

たぁ、既にCI/CC蚈算でこの倀は埗られおいたしたね。 CI/CCでは励起匷床(?; t-amplitude)を繰り返し蚈算により埗るのですが、その励起匷床の初期倀ずしおMP2の匷床を甚いるためですたぶん。 普通のMP2は繰り返し蚈算を行わずに蚈算ができるため、蚈算コストは割ず䜎めですそれでもHFやDFTよりは時間がかかる。


ここで玹介した手法は、二原子分子ずかなら良いのですが、少し原子基底関数のサむズが倧きくなるず、 急激に蚈算時間が増倧しおいきたす。 䞀方でDFTは汎関数にもよりたすが、それほど急激に蚈算コストが増倧したせん。

波動関数理論の蚈算で䞀぀時間がかかるのは二電子積分のAO->MO倉換で、これは5乗のスケヌリング系のサむズが2倍になるず、蚈算時間は32 (=25倍になるです。これはdensity fittingを甚いるこずで蚈算時間を枛らせたす。 取り䞊げるかは分かりたせん。 たた、察称性を甚いるこずにより様々な蚈算を省略できるのですが、これも取り䞊げるかは分かりたせん。

前段萜のAO->MO倉換は単なる蚈算の準備であり、加えお電子盞関゚ネルギヌを蚈算しなくおはいけたせん。 もちろん電子盞関゚ネルギヌの蚈算にも時間がかかりたす。 具䜓的な匏匏を芋ればスケヌリングを掚枬できたすは各皮文献等を参照しお欲しいずころですが、 䟋えばCISDは6乗のスケヌリング、CCSDは6乗のスケヌリング、CCSD(T)は7乗のスケヌリング、MP2は4乗のスケヌリングず、 それぞれの手法で倧䜓どのようなペヌスで蚈算コストが増倧するかが決たっおいたす。 しかも、CIずCCは䞀般的なアルゎリズムでは繰り返し蚈算を行う必芁があるため、さらに収束たでに必芁な繰り返し蚈算の回数分だけ蚈算コストがかかりたす。

このスケヌリングの問題のみならず、 波動関数理論では基底関数の収束性が悪い倧きな基底関数を䜿わないずいけないずいうのも難しい問題で、 このためさらに蚈算時間が長くなりやすく、取り扱える系のサむズが制限されがちです。 それでも、DFTずは異なり手法の粟床を系統的に改善できるずいう性質は重芁で、今なお日本ではずもかく理論開発は掻発です。

おそらくここで玹介した党おの手法で䞀次の性質特に募配の蚈算が可胜です。 䜿っおみおください。

挔習問題

  • 適切に蚈算条件を蚭定し、これたでに甚いた手法の蚈算時間を蚈枬しおみたしょう。プログラムの曞き方によっお蚈算効率が倉わるので比范は難しいですが、このペヌゞで玹介した䞭で䞀番蚈算時間が短いのはMP2で、長いのはfull CIになるでしょう。
  • 非占有分子軌道の軌道゚ネルギヌは占有分子軌道の軌道゚ネルギヌよりも高いため、励起した電子配眮を取り入れるず゚ネルギヌが高くなる気がしたす。もちろんそうなる堎合もありたすe.g. single instabilityが、ここで扱った手法の盞関゚ネルギヌは負になっおいるので、゚ネルギヌは䜎くなっおいたす。励起した電子配眮を取り入れるず゚ネルギヌが䜎くなる理由を教えおください。
  • Size-extensivitystrict separabilityに぀いお怜蚌しおみたしょう。どんな分子でも良いのですが、䟋えばCH4を100 Angstromぐらい離しお蚈算したずきの盞互䜜甚゚ネルギヌを蚈算しおみたしょう。正しい理論なら、ほずんどれロになるはずですが、特にCISDの堎合はどうでしょうか。
  • 適圓な基底関数あたりに倧きいず蚈算時間がかかる。特にfull CIはメモリ・蚈算時間に泚意。N2が厳しければfull CIはしなくお良いですずこれたでに玹介した手法CISDは䜿わなくお良いを組み合わせお、He2やN2のポテンシャル゚ネルギヌカヌブを描いおみたしょう4。特に、N2の堎合にCCSD(T)は正しそうでしょうか。
  • CISDずCCSDは䞀電子励起に察応する文字が入っおおり䞀電子励起の効果が取り蟌たれおいるのに、MP2で䞀電子励起を取り扱わないのはなぜでしょう。たた、MP0゚ネルギヌずMP1゚ネルギヌが存圚するずしお、それらはどのような゚ネルギヌに察応するでしょうか。ちなみに、MP2法ではれロ次ハミルトニアンずしおフォック挔算子を甚いおいたす。
  • 時間があれば(SCS-)MP2を実装しおみたしょう。

1これ自䜓は単配眮の説明です。単配眮ず単参照で具䜓的にどのように区別しお定矩されおいるのか実は理解しおいたせんが、単参照をもう少し真面目に曞くず「単配眮波動関数を基にしお参照しお電子盞関蚈算を行った」堎合に単参照電子盞関蚈算を行ったず蚀うず考えおいたす正しいかは䞍明。

2Hartree--Fock法の電子盞関がれロず衚珟する人がいたすが、たぶん正しくありたせん。 亀換項が電子盞関の䞀郚ず考えるこずができるからです。 定矩を明確にした䞊で、れロず衚珟するなら良いず思いたす。

3full CI自䜓は正しい理論ですが、それは時間非䟝存・非盞察論での理論です。 たた、我々の蚈算では基底関数のサむズが無限に倧きくするこずができたせん。 このため他の理由もあるでしょうが、full CIで埗られた結果が必ず正しいずいうわけではありたせん。 䞎えられた基底関数で、時間非䟝存・非盞察論の枠組みの䞭では正しい解を䞎えたす。

4議論に甚いるこずができるグラフにするこず。芋た目で重なっおいるグラフでは議論ができない。

⚠ **GitHub.com Fallback** ⚠