見出し画像

[Gaussian/Shell]TS計算→IRC計算→反応物/生成物の最適化の自動化

計算が全てNormalで落ちることが前提ですが、
上手くいけば帰宅時にTS構造の計算かけて
出勤時には安定構造を回収できるという。

もちろん結果の確認は大事だけど
上手くいきやすい計算のときはほっとくだけで
終わっているので便利。

忘れないように以下に書いておく。

準備するスクリプトは4つ。実行権限付与しておく。

必ず最初のTS計算の時に、*.chkをきちんと設定しておく。
後のIRC計算などではこの時の*.chkを利用して行うので
名前が汎用的であったり、スクラッチファイルとして処理していたら
上手く計算が走らなくなってしまう。




▼calc_ts.sh

#

g16 TS1_v01.com
g16 TS2_v01.com
g16 TS3_v01.com


S1_v01.comとかのところに自分の計算した*.comを入力する。


▼make_ircChk.sh

set dir = "~/phase1/"  //←作業ディレクトリ
set addext1 = "_IRCF"
set addext2 = "_IRCR"

foreach file(`ls *.chk`)
cp $file `basename $file .chk`{$addext1}.chk
cp $file `basename $file .chk`{$addext2}.chk
end


//IRC計算の*.com作成
foreach file (`ls _{$addext1}.chk`)
echo "%mem=[memory]GB" > $dir`basename $file .chk`.com
echo "%nprocshared=[proc数]" >> $dir`basename $file .chk`.com
echo "%chk="{$file} >> $dir`basename $file .chk`.com
echo "#p B3LYP/6-31g(d) 6d irc=(forward,calcfc) geom=check guess=read" >> $dir`basename $file .chk`.com  //←計算コマンド
echo "" >> $dir`basename $file .chk`.com
echo "IRC Coordinate" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo "0 1" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo ""  >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
end

//IRC計算の*.com作成
foreach file (`ls _{$addext2}.chk`)
echo "%mem=[memory]GB" > $dir`basename $file .chk`.com
echo "%nprocshared=[proc数]" >> $dir`basename $file .chk`.com
echo "%chk="{$file} >> $dir`basename $file .chk`.com
echo "#p B3LYP/6-31g(d) 6d irc=(reverse,calcfc) geom=check guess=read" >> $dir`basename $file .chk`.com  //←計算コマンド
echo "" >> $dir`basename $file .chk`.com
echo "IRC Coordinate" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo "0 1" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo ""  >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
echo "" >> $dir`basename $file .chk`.com
end

//IRC計算用のShell作成
echo "#" > {$dir}calc_irc.sh
echo "" >> {$dir}calc_irc.sh
foreach file (`ls *_IRC*.com`)
  echo "g16 "$file >> {$dir}calc_irc.sh
end


chmod +x {$dir}calc_irc.sh


IRC計算はForward/Reverseを分けて行う。
もしもどちらかがコケても、片方はちゃんと走ってくれる可能性がある。

両方合わせて計算したとき、*.chkから
両末端の構造取り出すにはどうすればいいのかわからなくなりそうですし。

個人的には分けて行う方がリスク低くて好き。


▼make_opt.sh

#

set dir = "~/phase1/" //←作業ディレクトリ
set new_file = ""

foreach file (`ls _IRC*.chk`)
set new_file = $dir`basename $file .chk`-opt.com
echo "%mem=[memory]GB" > $new_file
echo "%nprocshared=[proc数]" >> $new_file
echo "%chk="{$file} >> $new_file
echo "#p B3LYP/6-31g(d) 6d opt freq geom=check guess=read" >> $new_file  //←計算コマンド
echo "" >> $new_file
echo "IRC Opt" >> $new_file
echo "" >> $new_file
echo "0 1" >> $new_file
echo "" >> $new_file
echo ""  >> $new_file
echo "" >> $new_file
echo "" >> $new_file
echo "" >> $new_file
end

set new_file = {$dir}optlist.sh
echo "#" > $new_file
foreach file (`ls _IRC-opt.com`)
echo "g16 "$file >> $new_file
end

chmod +x $new_file

IRCのForward/Reverseどっちが反応物/生成物にあたるか
わからないため、無難に拡張子前は"-opt"にしておいた。

分子構造と座標を確認しないとどっちかわからないと思うから
自動でやるにはこれしか浮かばなかった。


▼cntrl_calc.sh

#

./calc_ts.sh
./make_ircChk.sh
./calc_irc.sh
./make_opt.sh
./ptlist.sh

全部の作業用*.shスクリプトを実行するスクリプト。

ファイルの準備ができたら、コマンドラインで

./cntrl_calc.sh

で実行して、あとは結果を待つだけ。

いいなと思ったら応援しよう!