firefly


ホーム:「量子化学計算で探るミクロの世界」

ホームに戻る

FireflyはGAMESS(US)の流れを汲む非経験的分子軌道計算プログラムで、PC GAMESSを改称してFireflyと名づけられた。Fireflyの公式ホームページは こちらです。
このソフトは無償で提供されておりホームページからダウンロードできます。ただし発行元にメールでパスワードを依頼することが必要で、手続きの詳細は下記のサイトに詳しく解説されています。
http://katakago.sakura.ne.jp/cc/wm/index.html

◎Fireflyの使用にあたって気付いたことの覚え書き ◎

index
同位体置換え  線形分子(180度の結合角) 
原子を固定する 外部の基底系を使用する 
単位について  有効内殻ポテンシャル(ECP)について 
基底関数重ね合わせ誤差(BSSE) 遷移金属を含む系の計算
溶媒効果  MEP計算 
基底関数の種類 対称性の利用 
SCF計算が収束しない時 MP2計算




・同位体置換え・
同位体置換えは、$MASSグループでAMASSキーワードで指定することができます。
AMASSは、$DATAで要素の原子質量を指定する配列です。
デフォルトは、最も大量の同位元素の質量を使うことです。
たとえば分子の中の第3の原子を重水素に置き換える場合なら
   $MASS AMASS(3)=2.0140 $END< /FONT>< /EM>
< /EM>

質量は、周波数と振動の通常のモードだけに影響を及ぼします。

・線形分子(180度の結合角)・
180度の結合角を持つ線形分子は計算できない。ダミー原子「X」を使ってマトリックスを再構成する。

・原子を固定する・
1)デカルト座標で固定する  $STATPTグループでIFREEZ(1)=1,2,3・・・$ENDで固定するデカルト座標を指定する。
 
対称性を使用する場合、COORD=CARTを指定すると対称操作が機能しないのでCOORD=UNIQUEを指定する。また
IFREEZ(1)=・・・で指定する座標は対称操作によって生成される内部座標を指定する。したがって、インプットは2原子でも対称操作によって4原子の座標が生成され、そのうち3番目と4番目の原子を固定したい場合はIFREEZ(1)=7,8,9,10,11,12と指定する。どのような内部座標が生成するかは$CONTRLに、EXETYP=CHECKを指定して計算を流すことで確認できる。  
 構造はデカルト座標で入力するが、原子間距離、結合角度、二面体角など構造の一部を固定し他の構造を最適化したい場合は、$CONTRLグループでNZVARで内部座標の数を指定。$ZMATグループでIFZMAT(1)、FVALUE(1)で固定する内部座標と値を指定する。
内部座標の指定は、例えば1,1,2は原子1と2の間の結合距離を、2,2,3,4は原子2,3,4で構成される結合角を、3,1,2,3,4は原子1,2,3,4で構成される二面体角を表す。先頭の1,2,3はそれぞれ結合距離、結合角、二面体角を表し、次の数字は原子の番号を表す。(この方法は「すぐできる量子科学計算」の128,129ページ参照)
インプットの例
$CONTRL ICHARG=-1 MULT=1 SCFTYP=RHF RUNTYP=OPTIMIZE                            
MAXIT=200 NZVAR=39 DFTTYP=B3LYP $END                                          
$SYSTEM TIMLIM=600000 MWORDS=10 $END                                           
$STATPT NSTEP=100 OPTTOL=0.0001 $END                                           
$SCF DIRSCF=.T. DAMP=.T. NPUNCH=0 $END                                         
$BASIS GBASIS=N31 NGAUSS=6 NDFUNC=1 DIFFSP=.T. $END                            
$GUESS GUESS=HUCKEL $END                                                       
$ZMAT DLC=.T. AUTO=.T.                                                         
IFZMAT(1)=3,5,6,7,9 FVALUE(1)=10 $END                                         
 $PCM SOLVNT=H2O $END                                                          
$DATA                                                                          
 Winmostar                                                                       
 C1                                                                              
 O    8.0   -2.359744   -1.284661   -0.627286                                    
 O    8.0    2.922621   -0.893244   -0.425420
・・・・
上の例では原子5,6,7,9の二面対角が10度に固定され他の構造は最適化されます。

2) Zマトリックスで固定する  $CONTRLグループで $COORD= ZMTMPC  NZVAR= (内部座標の数)を指定。 $STATPTグループでIFREEZ(1)=1,2,3・・・$ENDで固定するZマトリックスを指定する。
インプットの例
$CONTRL ICHARG=-1 MULT=1 SCFTYP=RHF RUNTYP=OPTIMIZE                           
COORD=ZMTMPC MAXIT=200 NZVAR=39 DFTTYP=B3LYP $END                             
$SYSTEM TIMLIM=600000 MWORDS=10 $END                                           
$STATPT NSTEP=100 OPTTOL=0.0001 IFREEZ(1)=21 $END                              
$SCF DIRSCF=.T. DAMP=.T. NPUNCH=0 $END                                         
$BASIS GBASIS=N31 NGAUSS=6 NDFUNC=1 DIFFSP=.T. $END                            
$GUESS GUESS=HUCKEL $END                                                       
$PCM SOLVNT=H2O $END                                                           
$DATA                                                                          
 Winmostar                                                                       
 C1                                                                             
O  0                  0 0                  0 0                 0      0      0      0            
O  4.552125     1 0                  0 0                 0      1      0      0           
O  2.253671     1 98.83861     1 0                 0      1      2      0            
O  1.506343     1 101.25025   1 3.82766      1      2      1      3           
N  2.58399       1 97.03605     1 8.91471      1      3      1      2            
C  1.49697       1 66.07976     1 -7.17025     1      5      3      1            
C  1.531562     1 108.2754     1 131.11899   1      6      5      3            
C  1.253044     1 72.38646     1 2.5658         1      1      2      3           
C  1.48973       1 108.421       1 132              1      7      6      5
・・・・
上の例では21番目の内部座標である9番目の炭素の二面対角132°が固定されます。

・外部の基底系を使用する・
EMSL Basis Set Exchangeのホームページで入手する。URLは https://bse.pnl.gov/bse/portal
Fireflyと完全な互換性のあるのは“GAMESS-US”フォーマットのもの
入手した基底系をメモ帳などに貼り付け.LIBの拡張子を持つ名前でインプットファイルと同じディレクトリに保存する。デフォルトではBASIS.LIB。
貼り付けたデータの一部を変更する。例えば元のデータが・・・
$DATA
HYDROGEN
S   2
  1      5.4471780              0.1562850       
  2      0.8245470              0.9046910       
S   1
  1      0.1831920              1.0000000       
OXYGEN
L   3
  1      8.5190000             -0.1455100              0.1100700       
  2      2.0730000              0.0828600              0.3496900       
  3      0.6471000              0.7432500              0.4809300       
L   1
  1      0.2000000              0.2847200              0.3072700    
  
であるなら、最初を空行にして、元素名を短縮したものに変え、スペースの後に基底系を識別するためにname(8文字以下)を追加する。
(空行)
H  SBKJC(←これがname) 
S   2
  1      5.4471780              0.1562850       
  2      0.8245470              0.9046910       
S   1
  1      0.1831920              1.0000000  
(一行空ける)
O  SBKJC(←各元素ごとにnameを記入する)
L   3
  1      8.5190000             -0.1455100              0.1100700       
  2      2.0730000              0.0828600              0.3496900       
  3      0.6471000              0.7432500              0.4809300       
L   1
  1      0.2000000              0.2847200              0.3072700      
     
インプット情報で $BASIS EXTFIL= .T. GBASIS=SBKJC $END のように .T. で外部ファイルの使用を指定し、GBASIS= の次に自分がつけたnameを記入する。それぞれの基底系のために個別のファイルを作ることもできるし、同じファイルの中に幾つかの基底系を含ませることもできる(nameで識別される)。

・単位について・
Fireflyで出力されるエネルギーの値はハートリーの単位で、これを他の単位に換算する。
1ハートリー= 27.2114 eV
      =2625.4919 kj/mol (1eV = 96.485kj/mol)
      =627.5112 kcal/mol  (1eV = 23.0606kcal/mol)

・有効内殻ポテンシャル(ECP)について・
電子数の多い原子の場合、すべての原子軌道を記述するには多くの基底関数が必要だがECPは内殻の電子については価電子に対する有効ポテンシャルに置換えることにより基底関数の数を激減させることができる。また重原子になると重要になる相対論効果を取り入れたものが提供されている。
FireflyにはSBKJC(Li〜Rn)やHW(Na〜Xe)がセットされていて、例えばSBKJCを使いたい時は $CONTRL ECP=SBKJC $END と指定するだけでいい。合わせて $BASIS  GBASIS=SBKJC と指定する。ただしこの指定はすべての原子に適用される。
 特定の原子にのみECPを適用したい時は$CONTRL ECP=READとして$ECPグループを追加する。
$ECPグループにはすべての原子を含める必要がある。$DATAファイルに存在する原子の順番通りにそれぞれの原子のECPパラメーターを入力する。同じ種類の原子については最初にものにパラメーターを入力し、後のものについては(元素記号)-ECPと記入すれば最初のパラメーターが適用される。ECPを適用しない原子に対しては(元素記号)-ECP NONEと記入する。
 例えばCH2O2の炭素原子と酸素原子にECPを使いたい時は下記の通りになる。

$ECP
C-ECP GEN 2 1
1 ----- CARBON U(P) -----
-0.89371 1 8.56468
2 ----- CARBON U(S)-U(P) -----
1.92926 0 2.81497
14.88199 2 8.11296
H-ECP NONE
O-ECP GEN 2 1
1 ----- OXYGEN U(P) -----
-0.92550 1 16.11718
2 ----- OXYGEN U(S)-U(P) -----
1.96069 0 5.05348
29.13442 2 15.95333
O-ECP
H-ECP
$END

・基底関数重ね合わせ誤差(BSSE)・
「基底関数重ね合わせ誤差は,A‐B相互作用系の量子化学計算において不十分な基底関数を適用したときに,A,Bが互いに相手の基底関数を使って過度に安定化してしまうことにより生じる誤差です。・・・結合エネルギーの見積もりには基底関数車ね合わせ誤差は必須となります。」(「すぐできる量子科学計算」より)
FireflyのマニュアルにはBSSEを補正する方法が三つ説明されています。その中でゴーストアトム(電荷は無く、基底関数だけを持つ)を使って結合エネルギーを求める方法を使ってみました。水二量体(A+B)の場合で説明します。
@ まず水分子一つを最適化します。そのエネルギーをE(H2O)とする
A 次に水分子をもう一つ適当な位置に追加して最適化します。(補正前の二量体エネルギー)
B Aで最適化した構造のままAをゴーストアトムに指定してENERGY計算します。-E(B)ab-    Bをゴーストアトムにして同じく計算します。-E(A)ab-
C 次にAで最適化した構造のままA、B単独でそれぞれのエネルギー計算をします。-E(A)a- -E(B)b-
D BとCで得た四つのエネルギー値から下記の計算で誤差の大きさが分かります。
 誤差=E(A)ab - E(A)a + E(B)ab - E(B)b
E 補正前の結合エネルギーはAでえた 補正前の二量体エネルギーから@で得たE(H2O)
の二倍を引くことで得られます。
F 補正後の結合エネルギーは補正前の結合エネルギーから誤差分を差し引くことで求めることができます。

ゴーストアトムの指定はインプットファイルで$DATAにある原子の電荷の前に負符号を付ければできます。下記は最初の水分子の三原子をゴーストアトムにしています。
O   -8.0    0.000000    0.000000    0.000000
H   -1.0    0.943392    0.000000    0.000000
H   -1.0   -0.284431    0.900058    0.000000
O    8.0   -2.369099   -1.844959    0.000000
H    1.0   -1.561301   -1.349841    0.000000
H    1.0   -2.134704   -2.757777    0.000000

遷移金属を含む系の計算
@ Fireflyでは初期軌道としてHUCKEL(Rnまで)とHCORE(すべての元素)を選択できる。$GUESSグループのGUESSというオプションで指定する。通常はHUCKELがベターだが、遷移金属を含む系ではHCOREがより良い結果を与える。これはHUCKELは常に遷移金属のECPを適切に処理するとは限らない為。
A 遷移金属に限らず大きい基底関数を使用する場合、ある関数が別の関数の線形結合で書くことができる場合がある。これはdiffuse関数が使用される時によく起こる。この状況は数値不安定をもたらしSCFの収束が低下する。このような線形依存性が検出されると「A PARTIAL LINEAR DEPENDENCE IN YOUR ATOMIC BASIS」というエラーメッセージが出力される。
 この場合Fireflyのマニュアルによると良い出発点としてより正確な積分を行うことが推奨されている。$CONTRLグループにINTTYP=HONDO, ICUT=11, ITOL=30 と入力する。
 また線形依存性が1.0D-7以下の固有値をもたらす場合収束に達しない場合があるので、そのような関数を手動で削除することによって線形依存性を減らすことができる。出力される関数のリストの中で最小の固有値を持つ関数を確認し、その関数を削除した基底系で計算を行うことで問題が解決することがある。時には問題となる関数をすべて削除するまで同じ手順を繰り返す必要がある。例えば関数のリストの最後が「0.8695E-07 - C 1 S, SHELL 4, AO 10」であれば、最小の固有値は一番目の炭素原子のSHELL 4に由来することが分かる。PUNCHファイルの$ DATAブロックからこの関数を削除して、残りの$ DATAブロック全体をインプットファイルに貼り付けて計算を行う。このためには
・外部の基底系を使用する・ で説明した外部ファイルを使用する必要がある。
 しかしこの方法は基底関数を削除することでエネルギー、勾配、その他の特性を変えることになるので注意が必要。

・溶媒効果・
溶媒を連続誘電体として近似する方法として下記の二つがある。
@SCRF(自己無撞着反応場)
溶質を溶媒中の空孔の中に置き、溶質の電荷とそれにより発生する溶媒の静電ポテンシャルの相互作用により安定化される状態を求める。$SCRFグループでDIELEC=**(溶媒の誘電率) RADIUS=**(空孔の球の半径 単位はÅ)空孔球の大きさは分子の端の原子のファンデルワールス半径の1.2倍の範囲が収まるように設定する。

APCM
溶質分子の各原子を中心とする球(半径はその原子のファンデルワールス半径の1.2倍)の結合によって作られる範囲を空孔とする。$PCMグループでSOLVNT=**(溶媒の種類)と指定する。溶媒の種類としては下記が格納されている。
WATER (or H2O)
CH3OH
C2H5OH
CLFORM (or CHCl3)
METHYCL (or CH2Cl2)
12DCLET (or C2H4Cl2)
CTCL (or CCl4)
BENZENE (or C6H6)
TOLUENE (or C6H5CH3)
CLBENZ (or C6H5Cl)
NITMET (or CH3NO2)
NEPTANE (or C7H16)
CYCHEX (or C6H12)
ANILINE (or C6H5NH2)
ACETONE (or CH3COCH3)
THF
DMSO (or DMETSOX)   
 ・・・INPUT PDFより・・・

SOLVNT=INPUTと入力して溶媒の詳細をを指定する高度なキーワードも備えている。

・MEP計算・
特定の二原子の位置関係(距離)を段階的に変化させながら、各々の段階でそれ以外の原子団を構造最適化してエネルギー最小値を求める。(下記の方法は角度の変化には無効です)
$CONTRL  RUNTYP=RSURFACE  NZVAR=**(Zマトリックスの座標数)
$STATPT  IFREEZ(1)=**(Zマトリックスの何番目を固定するかを指定)
$SURF NDISP1=**(何回計算するかを指定)DISP1=**(座標値の変化量を指定)
    VECT1(このカッコ内にIFREEZで指定した値を入力)=1 ORIG1=**(座標
    の初期値) 

・基底関数の種類・
出力結果には下図のように基底関数の種類が示される。(太枠内)
基底関数の種類
Sはs軌道、X、Y、Zはp軌道、XX、YY、ZZ、XY、YZ、ZXはd軌道、XXX、YYY、ZZZ、XXY、XYY、YYZ、YZZ、ZZX、ZXX、XYZはf軌道         

・対称操作の利用・

対称グループは$ DATAグループで指定できる。例えば水分子をC2Vと指定する時は以下の通り入力する。
$DATA
H2O
CNV  2 (対称グループの名前にNが含まれる場合、回転の数)
(一行空ける)
H  1.0  ・・・
O  8.0  ・・・
&END

対称グループがC1の時は空行はいらない。指定できる対称グループは以下の通り
C1, CS, CI, CN, S2N, CNH, CNV, DN, DNH, DND, T, TH, TD, O, OH

標準では主回転軸はZ軸、主回転軸に垂直な軸はX軸、σv平面はXZ面、σh平面はXY面。
分子については、「CNV 4」または「DNH 4」のいずれかを入力し、分子軸はZ軸とする。
$ CONTRLグループのNOSYMキーワードを使用して対称の使用を無効/有効にすることができる
デフォルトでは、対称が有効になっている(NOSYM = 0)。 NOSYM = 1が指定されている場合、対称は分子を構築するためにのみ使用され、計算には使用されない。

・SCF計算が収束しない時・
 大きい基底関数を用いたSCF計算がなかなか収束しない時、まず小さい基底関数を用いてSCF計算を収束させ、その結果を使ってリスタートすると成功することがある。そのためにまず$GUESSグループでGUESS=MOREAD、NORB=☆☆で軌道の数を指定する。NORBの値はOutputファイルの「TOTAL NUMBER OF SHELL」に明記されている。
 次にPUNCHファイルの$VECグループから$VEC〜$ENDまでをコピーする。それを新しいInputファイルに貼り付ける。
 次に基底関数の数が増えることを明示するために$GUESSグループにEXTRA=.T.と入力する。さらに$EXTRAF グループを作り、NEXTRA(1)=☆,☆,☆ で各原子で増加する関数の数を指定する。例えば酸素原子を6-31G*基底で計算した結果を使って6-311G*で再計算するのであれば、6-31G*の酸素原子の関数の数は15、6-311G*の関数の数は19なので増加する関数の数は4になる。これは対称性を利用する場合も生成するすべての原子に対して行う必要がある。
 ただしECPを用いて再計算しようとする場合この方法は利用できない。

 SCFが明らかに収束に向かっているなら計算の繰り返し回数を増やすことで収束できる。$CONTRLグループのMAXIT=で回数を指定する。

SCFの収束を改善するキーワード
DAMP=.TRUE.  DFTではデフォルト
SOSCF=.TRUE.  DFTでは.FALSE.がデフォルト


・MP2計算・
 MP2の計算は、$ CONTROL内のMPLEVL = 2をSCFTYP = RHF、UHF、またはROHFと組み合わせて指定することによって要求できる。RHFとUHFの MP2計算は比較的容易に実行できるがROHFについてはマニュアルを参照。
 MP2計算を行う前にHartree-Fockレベルで系を収束させておくと良い。
 $MP2にMETHOD=1を指定すると高速でメモリ使用量も少ない新しい計算が実行される。デフォルトはMETHOD=2で、基底関数の数が少ない系に対しては有効である。
 CPHF計算が途中で止まる場合、$ MP2にMXCPIT=**で計算の繰り返し回数を増やせる。(デフォルトは100)
 またCPHF計算の閾値はCPTOL=Nで指定できる。(デフォルトは1.0D-10)