JOBを使って$VECと$HESSの読み込み
備忘録。
PC GAMESSのWebサイトで公開されている、GAMESS入出力加工専用マクロ『JOB』を使って、何気に面倒な$VECと$HESSのPUNCHファイルからの抽出を、.inpファイルと.punファイルのD&Dで実現するバッチファイルを作成しました。イマイチ美しくないコードですが。
-----------------
@echo off
set job_dir=D:\JOB
set f_inp=inp
set f_pun=pun
if "%~x1"==".inp" set f_inp=%1
if "%~x1"==".pun" set f_pun=%1
if "%~x2"==".inp" set f_inp=%2
if "%~x2"==".pun" set f_pun=%2
if %f_inp%==inp goto exterr
if %f_pun%==pun goto exterr
move %f_inp% %job_dir%\temp.inp
echo #copy_vec %f_pun% %job_dir%\temp.inp > %job_dir%\temp.job
%job_dir%\job.exe %job_dir%\temp.job
move %job_dir%\TEMP.INP %f_inp%
pause
exit
:exterr
echo 拡張子に誤りがあります
pause
exit
-----------------
ドロップされた2つのファイルの拡張子からどちらがinputでどちらがpunchかを判別し、JOB用のファイル(temp.job)を作成して実行。このとき、一回temp.inpに書き込んだ後元の.inpファイルにリネームしてますが、これはJOBがなぜか書き込み先の.inpファイルのファイル名を全て大文字にしてしまう(だからmove行でTEMP.INPと書いている)からです。
#copy_vecを#copy_hessに変えるだけで、$HESSの読み込みに対応します。
本当は、.outも読み込めばNORBを自動で入れてくれたりするので、その辺を実装したバージョンも書いていますが、GAMESS(US)の.outファイルには対応していないようなので(実際NORBは入らない)、それを省いたバージョンを使ってます。
この辺のは、JOBじゃなくてもperlでできたりしますが(最近GAMESS MLにポストされてましたね)、プログラム慣れしてない私にゃJOBが便利です。