1#!/bin/bash 2RUNGAMESS=/home/allouche/Softwares/gamess/rungms 3 4filename=$1 ; [ 0 = $# ] || shift 5outname=$1 ; [ 0 = $# ] || shift 6 7if [ -z "$filename" ] 8then 9 clear 10 echo " " 11 echo "===========================================" 12 echo " runGamessPM3 " 13 echo "-------------------------------------------" 14 echo "Example:" 15 echo " runGamessPM3 h2.inp h2.out " 16 echo "===========================================" 17 echo " " 18 exit 1 19fi 20fileinp=$filename 21filename=${fileinp%.inp} 22filename=${filename%.com} 23 24DEFAULTDIR=`pwd` 25if test ! -s "$fileinp" 26then 27 echo " " 28 echo "============================================" 29 echo " I cannot find $fileinp file" 30 echo "============================================" 31 echo " " 32 exit 2 33fi 34 35cd $DEFAULTDIR 36#cat $fileinp 37fn=`echo "$filename" | sed "s/.*\///" | sed "s/\..*//"` 38ffn=${fn}_$$ 39fn=${ffn}.inp 40echo $fn 41awk 'BEGIN{ 42natoms=0; 43} 44{ 45i++; 46#printf("i=%d s=%s\n",i,$1); 47if(i==1) 48{ 49 option=$1 50 if(option==2) printf(" $CONTRL RUNTYP=Optimize $END\n") 51 else if(option==1) printf(" $CONTRL RUNTYP=GRADIENT $END\n") 52 else printf(" $CONTRL RUNTYP=ENERGY $END\n") 53} 54if(i==3) 55{ 56 natoms=$1 57 charge=$2 58 mult=$3 59 printf(" $CONTRL ICHARG=%d MULT=%d $END\n",charge,mult) 60 if($mult != 1) printf(" $CONTRL SCFTYP = UHF $END\n"); 61 printf(" $STATPT OPTTOL=1.0E-3 $END\n") 62 printf(" $BASIS GBASIS=PM3 $END\n") 63 printf(" $DATA\n") 64 printf("Molecule\n") 65 printf("C1\n") 66} 67if(i>3 && i<=natoms+3) 68{ 69if($1=="H") z=1; 70if($1=="He") z=2; 71if($1=="Li") z=3; 72if($1=="Be") z=4; 73if($1=="B") z=5; 74if($1=="C") z=6; 75if($1=="N") z=7; 76if($1=="O") z=8; 77if($1=="F") z=9; 78if($1=="Ne") z=10; 79if($1=="Na") z=11; 80if($1=="Mg") z=12; 81if($1=="Al") z=13; 82if($1=="Si") z=14; 83if($1=="P") z=15; 84if($1=="S") z=16; 85if($1=="Cl") z=17; 86if($1=="Ar") z=18; 87if($1=="K") z=19; 88if($1=="Ca") z=20; 89if($1=="Sc") z=21; 90if($1=="Ti") z=22; 91if($1=="V") z=23; 92if($1=="Cr") z=24; 93if($1=="Mn") z=25; 94if($1=="Fe") z=26; 95if($1=="Co") z=27; 96if($1=="Ni") z=28; 97if($1=="Cu") z=29; 98if($1=="Zn") z=30; 99if($1=="Ga") z=31; 100if($1=="Ge") z=32; 101if($1=="As") z=33; 102if($1=="Se") z=34; 103if($1=="Br") z=35; 104if($1=="Kr") z=36; 105if($1=="Rb") z=37; 106if($1=="Sr") z=38; 107if($1=="Y") z=39; 108if($1=="Zr") z=40; 109if($1=="Nb") z=41; 110if($1=="Mo") z=42; 111if($1=="Tc") z=43; 112if($1=="Ru") z=44; 113if($1=="Rh") z=45; 114if($1=="Pd") z=46; 115if($1=="Ag") z=47; 116if($1=="Cd") z=48; 117if($1=="In") z=49; 118if($1=="Sn") z=50; 119if($1=="Sb") z=51; 120if($1=="Te") z=52; 121if($1=="I") z=53; 122if($1=="Xe") z=54; 123if($1=="Cs") z=55; 124if($1=="Ba") z=56; 125if($1=="La") z=57; 126if($1=="Ce") z=58; 127if($1=="Pr") z=59; 128if($1=="Nd") z=60; 129if($1=="Pm") z=61; 130if($1=="Sm") z=62; 131if($1=="Eu") z=63; 132if($1=="Gd") z=64; 133if($1=="Tb") z=65; 134if($1=="Dy") z=66; 135if($1=="Ho") z=67; 136if($1=="Er") z=68; 137if($1=="Tm") z=69; 138if($1=="Yb") z=70; 139if($1=="Lu") z=71; 140if($1=="Hf") z=72; 141if($1=="Ta") z=73; 142if($1=="W") z=74; 143if($1=="Re") z=75; 144if($1=="Os") z=76; 145if($1=="Ir") z=77; 146if($1=="Pt") z=78; 147if($1=="Au") z=79; 148if($1=="Hg") z=80; 149if($1=="Tl") z=81; 150if($1=="Pb") z=82; 151if($1=="Bi") z=83; 152if($1=="Po") z=84; 153if($1=="At") z=85; 154if($1=="Rn") z=86; 155if($1=="Fr") z=87; 156if($1=="Ra") z=88; 157if($1=="Ac") z=89; 158if($1=="Th") z=90; 159if($1=="Pa") z=91; 160if($1=="U") z=92; 161if($1=="Np") z=93; 162if($1=="Pu") z=94; 163if($1=="Am") z=95; 164if($1=="Cm") z=96; 165if($1=="Bk") z=97; 166if($1=="Cf") z=98; 167if($1=="Es") z=99; 168if($1=="Fm") z=100; 169if($1=="Md") z=101; 170if($1=="No") z=102; 171if($1=="Lr") z=103; 172if($1=="Rf") z=104; 173if($1=="Db") z=105; 174if($1=="Sg") z=106; 175if($1=="Bh") z=107; 176if($1=="Hs") z=108; 177if($1=="Mt") z=109; 178if($1=="Xx") z=0; 179if($1=="X") z=0; 180if($1=="Tv") z=112; 181printf("%s %0.1f %s %s %s\n",$1,z,$9,$10,$11); 182if(i==natoms+3) printf(" $END\n") 183} 184 185} 186END{ 187}' $fileinp > $fn 188echo $fn 189cat $fn 190nproc=1 191rm $HOME/scr/$fn* 192$RUNGAMESS $fn 00 $nproc >& $filename.log 193tmpfile=${ffn}.tmp 194grep 'FINAL ' $filename.log | tail -1 | grep 'ENERGY IS' > ${ffn}.tmp 195grep 'HEAT OF FORMATION IS' $filename.log | tail -1 > ${ffn}.tmp 196echo tmp=$tmpfile 197cat $tmpfile 198energy=$(awk '{printf("%f",$5/627.50944796);}' $tmpfile) 199echo ENERGY=$energy 200awk 'BEGIN{ 201id=0 202AUTODEB=2.54158059 203} 204{ 205 if(id==1) { id++; printf("%f\n%f\n%f\n",$1/AUTODEB,$2/AUTODEB,$3/AUTODEB); } 206 if($0 ~ /(DEBYE)/) { id=1;} 207}' $filename.log > $tmpfile 208 209cat $tmpfile | tail -3 > ${tmpfile}_1 210mv ${tmpfile}_1 $tmpfile 211read mux muy muz <<< $(cat $tmpfile | awk '{ print $1; }') 212echo Mu = $mux $muy $muz 213echo $outname 214echo $energy > $outname 215echo $mux $muy $muz >> $outname 216echo 217awk 'BEGIN{ 218id=0 219} 220{ 221 if(id==1) 222 { 223 if(NF != 5) id++; 224 else printf("%f %f %f\n",$3,$4,$5); 225 } 226 if($0 ~ /UNITS ARE HARTREE/) if($0 ~ /BOHR/) { id=1;} 227}' $filename.log >> $outname 228 229grep 'CHARGE OF MOLECULE' $filename.log | tail -1 > ${tmpfile} 230#cat $tmpfile 231read charge <<< $(cat $tmpfile | awk '{ print $5; }') 232grep 'SPIN MULTIPLICITY ' $filename.log | tail -1 > ${tmpfile} 233#cat $tmpfile 234read spin <<< $(cat $tmpfile | awk '{ print $4; }') 235grep 'TOTAL NUMBER OF ATOMS ' $filename.log | tail -1 > ${tmpfile} 236#cat $tmpfile 237read natoms <<< $(cat $tmpfile | awk '{ print $6; }') 238 239awk 'BEGIN{ 240id=0 241idd=0 242} 243{ 244 if(idd==1) if(NF<5) { idd=0; id=0;} 245 if(idd==1) { printf(" %s %s %s %s 0 0.0 2 1 %s %s %s 0\n",$1,$1,$1,$1,$3,$4,$5); } 246 if($0 ~ /EQUILIBRIUM GEOMETRY LOCATED/) { id=1;} 247 if($0 ~ /THE GEOMETRY SEARCH IS NOT CONVERGED/) { id=1;} 248 if(id==1) if($0 ~ /-----------------------------------/) { idd=1;} 249}' $filename.log > $tmpfile 250 251grep 'THE GEOMETRY SEARCH IS NOT CONVERGED' $filename.log 252 253nl=`wc -l < $tmpfile` 254if [ $nl != "0" ] 255then 256echo Geometry >> $outname 257echo $natoms $charge $spin >> $outname 258cat $tmpfile >> $outname 259fi 260 261 262 263echo file=$outname 264cat $outname 265 266rm $tmpfile 267rm $fn 268rm $filename.log 269 270