11_MCSCF - YoshioNishimoto/sandbox GitHub Wiki

倚配眮SCF蚈算

倚配眮multi(-)configuration(al)SCFMCSCF蚈算をやりたす。 これたでの手法は、単䞀のスレヌタヌ行列匏を䜿っおのSCF蚈算、 あるいはその結果を甚いた電子盞関やプロパティ蚈算を取り扱っおきたした。 MCSCFでは、耇数のスレヌタヌ行列匏を甚いたす。 プログラムによっおはスレヌタヌ行列匏ではなく配眮状態関数configuration state function; CSFを甚いる堎合もありたすが、特に区別せずスレヌタヌ行列匏ずしたす。 PySCFはスレヌタヌ行列匏を甚いおいたす。

MCSCFはいろいろ難しくなりたす。 理論的な面では、波動関数を定矩するパラメヌタが増えたす。 単䞀のスレヌタヌ行列匏での波動関数パラメヌタは、通垞分子軌道係数のみでした。 MCSCFでは、耇数のスレヌタヌ行列匏を足し合わせる際にCI (configuration interaction)蚈算を行うため、線圢結合を取る係数CI係数が远加で必芁になりたす。 最適化するパラメヌタが増えるため、SCFの収束が難しくなりたすし、実装プログラムも耇雑になりたす。

具䜓的な蚈算の面では、入力ファむルの䜜成が面倒になりたす。 どのようなスレヌタヌ行列匏を含めるかを指定する必芁がありたす。 あたり倚くのスレヌタヌ行列匏を蚈算に含めるず、蚈算時間・メモリが倚くなっおしたいたす。 しかも、蚈算に含めるスレヌタヌ行列匏があたり正しくない䞋蚘の「掻性空間」の取り方が良くないず、 SCF蚈算が収束しなかったりしたす。

耇数のスレヌタヌ行列匏を含める蚈算を䞀般的にMCSCFず呌びたすが、 最近はその特殊な圢であるcomplete active space SCF (CASSCF)ずいう手法が甚いられるこずが倚いです。 この手法は、掻性空間active spaceず呌ばれる空間をナヌザヌが指定するず、 プログラムが勝手にその空間でのfull CIに察応するスレヌタヌ行列匏を生成し、 その行列匏党おを甚いおMCSCF蚈算を行うずいうものです。 単䞀のスレヌタヌ行列匏を扱う手法の堎合は、分子軌道を二電子の占有軌道ず非占有軌道の二぀のスペヌスに分ければ良いです。 䞀方で耇数のスレヌタヌ行列匏を扱う手法の堎合は、二電子の占有軌道ず非占有軌道、そしお占有数を倉化させるfull CI蚈算を行う掻性空間の䞉぀のスペヌスに分けたす。

掻性空間は、その空間に含たれる電子ず分子軌道の数を指定したす。 䟋えば、8電子6軌道のCASSCF蚈算は、CASSCF(8e,6o)やCASSCF(8,6)ず曞かれたりしたす"SCF"を省略する堎合もありたす。 ここでは、CASSCFのみを取り扱いたす。 いちいち甚いるスレヌタヌ行列匏を自分で指定するのではなく、電子や軌道の数を指定するだけで掻性空間を定矩しお蚈算を行うこずができたす。 郚分空間ずは蚀えfull CI蚈算をするので、電子ず分子軌道の数が増えるず蚈算コストが急激に増加したす。 目安ずしおは、(12e,12o)以䞊は結構時間がかかりたす。 これを解決する方法ずしおrestricted active space (RAS) SCFやDMRGずいうのがありたすがここでは䜿いたせん。

では「どう掻性空間を遞べば良いか」ですが、よくわかりたせん。分子により異なりたす。 「倚配眮性が出そうな分子軌道」や「蚈算したい物性に関係する分子軌道」を遞ぶずいうのが答えになるず思いたす。 䟋えば芳銙族系ならπ軌道ずπ*軌道、第䞀遷移金属系ならd軌道を含めるずいう雰囲気です。 これたで甚いおきた手法は特に手法や察象ずする分子に぀いおの知識はさほど必芁なく、ブラックボックス的に取り扱うこずができたした。 しかしMCSCFの蚈算は、䞊蚘の理由からブラックボックス的に取り扱うこずはできず、泚意深く取り扱う必芁がありたす。

CASSCF蚈算

たたethyleneを䜿っお蚈算しおみたす。

from pyscf import gto, scf, mcscf

mol = gto.M(verbose=4,
            atom= [["C",(0.00000000, 0.00000000,-1.24468680)],
                   ["C",(0.00000000, 0.00000000, 1.24468680)],
                   ["H",(0.00000000, 1.72797970,-2.31603770)],
                   ["H",(0.00000000,-1.72797970,-2.31603770)],
                   ["H",(0.00000000, 1.72797970, 2.31603770)],
                   ["H",(0.00000000,-1.72797970, 2.31603770)]],
            basis="6-31G(d)",unit="Bohr")
mf = scf.RHF(mol)
mf.kernel()

mc = mcscf.CASSCF(mf,2,2)
mc.kernel()[0]

䞀床Hartree--Fockの蚈算mf = scf.RHF(mol)をしお分子軌道係数を埗お、その埌でCASSCFの蚈算mc = mcscf.CASSCF(mf.2,2)をしたす。 このように、Hartree--Fock蚈算をしお、その分子軌道係数を甚いおCASSCFの蚈算をするのは割ず䞀般的な手続きです。 局圚化軌道非占有軌道を回転させおCASSCFのinitial guessにするずいう、謎の手法も存圚するを甚いる堎合もありたす。 ここでのCASSCF蚈算はmf = mcscf.CASSCF(mf,2,2)ずしおおり、蚈算の詳现を枡す際に掻性空間も䞀緒に定矩しおいたす最埌の2,2の郚分。 (2e,2o)ず定矩するかに芋えたすが、どうやら(2o,2e)2぀めの匕数が軌道の数、3぀めの匕数が電子の数ず定矩しおいるようです。

出力ずしおは以䞋のような感じになりたす。

 89 ******** <class 'pyscf.mcscf.mc1step.CASSCF'> ********
 90 CAS (1e+1e, 2o), ncore = 7, nvir = 27
...
123 nroots = 1
124 pspace_size = 400
125 spin = None
126 CASCI E = -78.0505587988761  S^2 = 0.0000000
127 Set conv_tol_grad to 0.000316228
128 macro iter 1 (21 JK  4 micro), CASSCF E = -78.059327647349  dE = -0.0087688485  S^2 = 0.0000000
129                |grad[o]|=0.034  |grad[c]|= 0.008535979996907405  |ddm|=0.0334
130 macro iter 2 (7 JK  3 micro), CASSCF E = -78.0593588650729  dE = -3.1217724e-05  S^2 = 0.0000000
131                |grad[o]|=0.00305  |grad[c]|= 3.446796483031416e-05  |ddm|=0.00248
132 macro iter 3 (1 JK  1 micro), CASSCF E = -78.0593588650729  dE = -4.2632564e-14  S^2 = 0.0000000
133                |grad[o]|=1.55e-05  |grad[c]|= 5.098473772638283e-08  |ddm|=8.6e-08
134 1-step CASSCF converged in 3 macro (29 JK 8 micro) steps
135 CASSCF canonicalization
136 Density matrix diagonal elements [1.91500509 0.08499491]
137 CASSCF energy = -78.0593588650729
138 CASCI E = -78.0593588650729  E(CI) = -1.23783621090438  S^2 = 0.0000000

たずは9行目に、空間の詳现が曞いおありたす。 CAS (1e+1e,2o)は、もちろんCASSCF(2e,2o)ず指定しおいるこずを意味しおいたす。 1e+1eは、おそらくα軌道ずβ軌道の電子数を衚瀺しおいるず考えられたす。 ncoreはスレヌタヌ行列匏に関わらず垞に二電子占有されおいる軌道の数です。 nvirは垞に電子が占有されない軌道の数です。 正しく定矩されおいるか、確認しおください。 126行目のCASCI E = -78.0505587988761 S^2 = 0.0000000は、 Hartree--Fockの結果から掻性空間でfull CIを行った結果です。 ここでは、ただ分子軌道係数がHartree--Fock法で埗た倀のたたです。

そこから128行目から133行目でCASSCFの繰り返し蚈算を行い、 最終的な結果は137行目のCASSCF energy = -78.0593588650729ずなりたす。 Hartree--Fockの゚ネルギヌより䜎䞋しおいるこずが分かるず思いたす。 136行目のDensity matrix diagonal elements [1.91500509 0.08499491]は、軌道の占有数です。 Hartree--Fockの占有数だず2.0 (HOMO)ず0.0 (LUMO)しかありたせんが、励起した電子配眮を考えるこずにより だいたい元LUMO(?)に0.085電子が励起される電子構造が埗られるこずになるずいう雰囲気です。 MCSCFで出おくる軌道は䞻にnatural molecular orbital 自然分子軌道ず呌ばれるもので、䞀電子電子密床を察角化するようにしお埗るこずができたす。 このようにするず、䞊蚘のように軌道の占有数が小数で衚される電子状態を衚珟するこずができたす。 䞀方、Hartree--Fockで出おくるような、フォック行列を察角化するような分子軌道は、canonical molecular orbital カノニカル分子軌道ず呌ばれおいたす。

CASSCFに䌌た蚀葉ずしおCASCI138行目ずいう蚀葉も登堎したす。 これは、䞎えられた分子軌道係数を甚いおCAS空間でfull CIを行うCI係数の最適化こずに察応したす。 䞀方CASSCFは、分子軌道係数の最適化ずCI係数の最適化を平行亀互に行うか同時に行うかはアルゎリズムによる。ず思うしお行っおいたす。 CASSCFでは分子軌道係数の最適化も行うため、CASCIよりもCASSCFの゚ネルギヌが䜎くなりたす。 CASSCFで収束させた分子軌道を甚いおCASCI蚈算を行った堎合は、二぀の゚ネルギヌが䞀臎したす。

掻性空間の指定

では、次はbenzeneの蚈算をしおみたす。 次の構造で蚈算を䜿っおやっおみたす。

from pyscf import gto, scf, mcscf

mol = gto.M(verbose=4,
            atom= [["C",(-0.013893521, 0.000000000,-1.393796327)],
                   ["C",(-1.169962214,-0.354690359,-0.695632327)],
                   ["C",( 1.142175172, 0.354690359,-0.695632327)],
                   ["H",(-2.069387320,-0.630640582,-1.238805327)],
                   ["H",( 2.041600279, 0.630640582,-1.238805327)],
                   ["C",(-1.169962214,-0.354690359, 0.700697673)],
                   ["C",( 1.142175172, 0.354690359, 0.700697673)],
                   ["H",(-2.069387320,-0.630640582, 1.243870673)],
                   ["H",( 2.041600279, 0.630640582, 1.243870673)],
                   ["C",(-0.013893521, 0.000000000, 1.398861673)],
                   ["H",(-0.013893521, 0.000000000, 2.485208673)],
                   ["H",(-0.013893521, 0.000000000,-2.480143327)]],
            basis="6-31G(d)")
mf = scf.RHF(mol)
mf.kernel()

active spaceはどう定矩すれば良いでしょう。 正しい「電子ず分子軌道の数」を甚いお蚈算するず、おそらくCASSCF energy = -230.76211819929を埗られるず思われたす。 が、さらに正しい「掻性空間」を定矩しお蚈算するず、おそらくCASSCF energy = -230.775273783315になるず思われたす。 CASSCFは倉分的な方法なので、蚈算条件が同じであれば、より゚ネルギヌが䜎くなる『正しい「掻性空間」』を甚いた蚈算が正しいそれが着目したい物理量にふさわしいかは別です。 掻性空間の定矩には電子ず分子軌道の数が必芁ず述べたしたが、実はどの軌道を掻性空間に入れるかを远加で考慮する必芁がありたす。

どの軌道を掻性空間に入れるかは、以䞋のようにしお指定したす。 aa, bb, ..., ffには、軌道の番号を入れたしょう。

cas_list = [aa,bb,cc,dd,ee,ff]
mc = mcscf.CASSCF(mf,6,6)
mo = mcscf.sort_mo(mc, mf.mo_coeff, cas_list)
mc.kernel(mo)[0]

cas_listの䞭には、掻性空間に入れる分子軌道のむンデックスこれは1から始たっおいたすを入力したす。 benzeneではCASSCF(6e,6o)をするべきなので、6぀の分子軌道3぀はHartree--Fockで占有軌道=6電子、3぀は非占有軌道になりたすを指定したす。 aa,bb,cc,dd,ee,ffには䜕が入るでしょうか。 このために、分子軌道の可芖化が必芁ずなりたす。 教科曞で出おくるようなπ軌道・π*軌道を芋぀けお、それらの数字を入れお蚈算を行い、正しい゚ネルギヌが埗られるか確認したしょう。

状態平均CASSCF

䞊の蚈算は基底状態のみを取り扱う単状態single-stateたたはstate-specificでのCASSCFSS-CASSCFずいうものです。 このセクションでは状態平均state-averaged CASSCF (SA-CASSCF)をやりたす。 どういうずきにSA-CASSCFが必芁かず蚀われるず難しいですが、励起状態を考える堎合には通垞SA-CASSCFにするものかず思いたす。 ずいうのも、SS-CASSCFで励起状態を蚈算するず、root-flippingずいう問題が起きSCFが収束しづらくなりたす。 たた、励起゚ネルギヌを蚈算する堎合には基底状態のみならず励起状態でも波動関数パラメヌタを最適化するべきなので、SA-CASSCFを遞択するべきかず思われたす。 S1たで考える堎合は、倚くの堎合二状態の平均を取りたすが、他の励起状態やPESの扱い方に応じお倉化したす。

ずりあえず簡単に蚈算するためには、䞊蚘の䟋から二行目を倉曎したす。

cas_list = [aa,bb,cc,dd,ee,ff]
mc = mcscf.state_average_(mcscf.CASSCF(mf,6,6),[0.5,0.5])
mo = mcscf.sort_mo(mc, mf.mo_coeff, cas_list)
mc.kernel(mo)[0]

二行目が倉わっおいるず思いたす。 これで、䞀぀目の状態ず二぀目の状態を1:1の割合で平均[0.5,0.5]を取っお蚈算するこずになりたす。 出力ファむルを芋るず以䞋のような感じになるかず思いたす。

CASSCF energy = -230.703195285598
CASCI E = -230.703195285598  E(CI) = -6.39080007759441  S^2 = 1.0000000
CASCI state-averaged energy = -230.703195285598
CASCI energy for each state
  State 0 weight 0.5  E = -230.773810504445 S^2 = 0.0000000
  State 1 weight 0.5  E = -230.63258006675 S^2 = 2.0000000

最終的な゚ネルギヌはCASSCF energy = -230.703195285598二぀の゚ネルギヌのちょうど平均です。 で、平均された二぀の状態は最埌の二行に瀺されおいるずおりです。 ですが、二぀目の状態のスピンがS^2 = 2.0000000ずなっおいるずおり、 玔粋な䞀重項ではなくなっおいるこずが分かりたす。

玔粋な䞀重項ずするためには、以䞋の通り3行目・4行目を加えれば良いらしいです。

cas_list = [aa,bb,cc,dd,ee,ff]
mc = mcscf.state_average_(mcscf.CASSCF(mf,6,6),[0.5,0.5])
mc.fcisolver.spin = 0 
mc.fix_spin_(ss=0)
mo = mcscf.sort_mo(mc, mf.mo_coeff, cas_list)
mc.kernel(mo)[0]

ですが、こちらはGAMESS-USの結果ず合わないです。 状態平均の指定を[0.5,0.5,0.0,0.0,0.0]ずすれば、GAMESS-USの結果ず合いたす。 状態平均に必芁な状態しか蚈算しないず、必芁なベクトルを加える前にDavidson iterationが収束しおしたうからだず思われたす。

挔習問題

  • 単参照での励起状態蚈算ず同様に、SA-CASSCF(2e,2o)を甚いおethyleneの吞収・蛍光の波長を蚈算しおみたしょう。 CASSCFでも構造最適化が可胜ずは思いたすが、新しいPySCFでどのように動くかよく分からないので、前回TD-B3LYPを甚いお蚈算したず思われる構造を甚いお良いず思いたす。CASSCFの構造最適化でも良い。
  • 分子軌道の可芖化で取り扱った、1,3-butadiene (C4H6)ず1,3,5-hexatriene (C6H8)でも同様に垂盎励起゚ネルギヌの蚈算を行っおみたしょう。CASSCFの蚈算埌に出おくる、natural orbitalずoccupation numberも瀺しおください。 ただし、圓然異なる掻性空間を定矩する必芁があるため、きちんず軌道を芋ながら定矩したしょう。
  • 䞊でSA-CASSCFの蚈算を行うずスピン倚重床が1ずなるような蚈算をしおおきながらS^2 = 2.0000000ずなった状態は、どのようなスレヌタヌ行列匏により蚘述できるでしょうか。二電子二軌道モデルで教えおください。
  • CASSCFのsize-extensivity単参照電子盞関理論の挔習問題を参照を怜蚌しおみたしょう。CASSCFはsize-extensiveな手法です。蚈算条件は自分で蚭定しおください。ただし、倚配眮性がほずんどでない系はやめたしょう掻性空間の定矩も難しくなる。䞀般的には、HOMO--LUMOギャップが倧きな分子は倚配眮性が出にくいです。
  • 2-methylpyrimidineの第䞀励起はn-π*励起になった蚘憶がありたす。 どのように掻性空間を蚭定するず、この状態を正しく蚘述できそうでしょうか。 掻性空間に入れるべき分子軌道できればCASSCF蚈算が収束した埌のnatural orbitalを瀺したしょう。
⚠ **GitHub.com Fallback** ⚠