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