ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/freemol/trunk/smi23d/src/mengine/readprm.c
Revision: 3
Committed: Mon Jun 9 21:38:26 2008 UTC (11 years, 4 months ago) by tjod
File size: 117734 byte(s)
Log Message:
test

Line File contents
1 #define EXTERN extern
2
3 #include "pcwin.h"
4 #include "pcmod.h"
5 #include "pot.h"
6 #include "field.h"
7 #include "atom_k.h"
8 #include "pdb.h"
9
10 #define MAXOPLS 600
11
12 FILE * fopen_path ( char * , char * , char * ) ;
13 void zero_data(void);
14 void read_datafiles(char *);
15 void readpid(char *);
16 void readmmxdata(char *);
17 void torphase(int, float *, int *);
18 void read_parameterfile(char *);
19 void numeral(int, char *, int);
20 void message_alert(char *, char *);
21 int FetchRecord(FILE *, char *);
22 void read_added_const(void);
23 int check_dipoleconst(int,int,float);
24 int check_torsionconst(int,int,int,int,float,float,float,int,int,int);
25 int check_torsion4const(int,int,int,int,float,float,float,int,int,int);
26 int check_torsion5const(int,int,int,int,float,float,float,int,int,int);
27 int check_angleconst(int,int,int,float,float,float,float);
28 int check_angle5const(int,int,int,float,float,float,float);
29 int check_angle4const(int,int,int,float,float,float,float);
30 int check_angle3const(int,int,int,float,float,float,float);
31 int check_bondconst(int,int,float,float);
32 int check_bond5const(int,int,float,float);
33 int check_bond4const(int,int,float,float);
34 int check_bond3const(int,int,float,float);
35 int check_opbend(int,int,int,int,float);
36 int check_strbnd(int,int,int,float,float,float);
37 int check_vdwpr(int,int,float,float);
38
39 EXTERN struct t_minim_control {
40 int type, method, field, added_const;
41 char added_path[256],added_name[256];
42 } minim_control;
43 EXTERN struct t_minim_values {
44 int iprint, ndc, nconst;
45 float dielc;
46 } minim_values;
47
48 struct t_units {
49 double bndunit, cbnd, qbnd;
50 double angunit, cang, qang, pang, sang, aaunit;
51 double stbnunit, ureyunit, torsunit, storunit, v14scale;
52 double aterm, bterm, cterm, dielec, chgscale;
53 } units;
54
55 struct t_bondk1 {
56 int use_ring3, use_ring4, use_ring5;
57 int nbnd, nbnd3, nbnd4, nbnd5, ndeloc;
58 char kb[MAXBONDCONST][7], kb3[MAXBOND3CONST][7],kb4[MAXBOND4CONST][7],kb5[MAXBOND5CONST][7];
59 char kbdel[MAXBONDDELOC][7];
60 float s[MAXBONDCONST], t[MAXBONDCONST];
61 float s3[MAXBOND3CONST], t3[MAXBOND3CONST];
62 float s4[MAXBOND4CONST], t4[MAXBOND4CONST];
63 float s5[MAXBOND5CONST], t5[MAXBOND5CONST];
64 float sdel[MAXBONDDELOC], tdel[MAXBONDDELOC];
65 } bondk1;
66
67 struct t_electroneg {
68 int nelecti, nelectj;
69 int itype[200],ibond[200],iattach[200];
70 int jtype[200],jbond[200],jattach[200];
71 float icorr[200],jcorr[200];
72 } electroneg;
73
74 struct t_piatomk {
75 int npiatom;
76 int kat[MAXPIATOM], qp[MAXPIATOM];
77 float q[MAXPIATOM], ion[MAXPIATOM], emz[MAXPIATOM], zor[MAXPIATOM], zz[MAXPIATOM];
78 float w1[MAXPIATOM], w2[MAXPIATOM], w3[MAXPIATOM];
79 } piatomk;
80
81 struct t_bondpk {
82 int npibond,npibond44i,npibond45i,npibond46i,npibond55i,npibond56i,npibond66i;
83 int npibond44o,npibond45o,npibond46o,npibond55o,npibond56o,npibond66o;
84 int npibond40,npibond50,npibond60;
85 int use_pibond,use_pibond44i,use_pibond45i,use_pibond46i,use_pibond55i,use_pibond56i,use_pibond66i;
86 int use_pibond44o,use_pibond45o,use_pibond46o,use_pibond55o,use_pibond56o,use_pibond66o;
87 int use_pibond40,use_pibond50,use_pibond60;
88 char kb[MAXPIBONDCONST][7],kb44i[20][7],kb45i[20][7],kb46i[20][7],kb55i[20][7],kb56i[20][7],kb66i[20][7];
89 char kb44o[20][7],kb45o[20][7],kb46o[20][7],kb55o[20][7],kb56o[20][7],kb66o[20][7];
90 char kb40[20][7],kb50[20][7],kb60[20][7];
91 float bk[MAXPIBONDCONST], bl[MAXPIBONDCONST], bmom[MAXPIBONDCONST],sslop[MAXPIBONDCONST], tslop[MAXPIBONDCONST], tslop2[MAXPIBONDCONST];
92 float bk44i[20], bl44i[20], bmom44i[20],sslop44i[20], tslop44i[20], tslop244i[20];
93 float bk45i[20], bl45i[20], bmom45i[20],sslop45i[20], tslop45i[20], tslop245i[20];
94 float bk46i[20], bl46i[20], bmom46i[20],sslop46i[20], tslop46i[20], tslop246i[20];
95 float bk55i[20], bl55i[20], bmom55i[20],sslop55i[20], tslop55i[20], tslop255i[20];
96 float bk56i[20], bl56i[20], bmom56i[20],sslop56i[20], tslop56i[20], tslop256i[20];
97 float bk66i[20], bl66i[20], bmom66i[20],sslop66i[20], tslop66i[20], tslop266i[20];
98 float bk44o[20], bl44o[20], bmom44o[20],sslop44o[20], tslop44o[20], tslop244o[20];
99 float bk45o[20], bl45o[20], bmom45o[20],sslop45o[20], tslop45o[20], tslop245o[20];
100 float bk46o[20], bl46o[20], bmom46o[20],sslop46o[20], tslop46o[20], tslop246o[20];
101 float bk55o[20], bl55o[20], bmom55o[20],sslop55o[20], tslop55o[20], tslop255o[20];
102 float bk56o[20], bl56o[20], bmom56o[20],sslop56o[20], tslop56o[20], tslop256o[20];
103 float bk66o[20], bl66o[20], bmom66o[20],sslop66o[20], tslop66o[20], tslop266o[20];
104 float bk40[20], bl40[20], bmom40[20],sslop40[20], tslop40[20], tslop240[20];
105 float bk50[20], bl50[20], bmom50[20],sslop50[20], tslop50[20], tslop250[20];
106 float bk60[20], bl60[20], bmom60[20],sslop60[20], tslop60[20], tslop260[20];
107 } bondpk;
108
109 struct t_picorrect {
110 float fudge1, fudge2, fudge3, fudge4, beta_fudgef,beta_fudgeh;
111 } picorrect;
112
113 struct t_angk1 {
114 int use_ang3, use_ang4, use_ang5;
115 int nang, nang3, nang4, nang5;
116 int ndel, ndel3, ndel4;
117 char ktype[MAXANGCONST][10],ktype3[MAXANG3CONST][10],ktype4[MAXANG4CONST][10],ktype5[MAXANG5CONST][10];
118 char kdel[MAXANGDEL][10],kdel3[MAXANG3DEL][10],kdel4[MAXANG4DEL][10];
119 float con[MAXANGCONST], ang[MAXANGCONST][3];
120 float con3[MAXANG3CONST], ang3[MAXANG3CONST][3];
121 float con4[MAXANG4CONST], ang4[MAXANG4CONST][3];
122 float con5[MAXANG5CONST], ang5[MAXANG5CONST][3];
123 float condel[MAXANGDEL], angdel[MAXANGDEL][3];
124 float condel3[MAXANG3DEL], angdel3[MAXANG3DEL][3];
125 float condel4[MAXANG4DEL], angdel4[MAXANG4DEL][3];
126 } angk1;
127
128 struct t_angkp1 {
129 int npiang;
130 char kpa[MAXPIANGCONST][10];
131 float pacon[MAXPIANGCONST], panat[MAXPIANGCONST][3], piobp[MAXPIANGCONST];
132 } angkp1;
133
134 struct t_angf {
135 int use_angf, nfang;
136 char kftype[MAXANGCONST][10];
137 float fcon[MAXANGCONST],fc0[MAXANGCONST],fc1[MAXANGCONST],fc2[MAXANGCONST];
138 float fc3[MAXANGCONST],fc4[MAXANGCONST],fc5[MAXANGCONST],fc6[MAXANGCONST];
139 } angf;
140
141 struct t_ureybrad_k {
142 int nurey_brad;
143 char kubang[MAXUREY][10];
144 float ubconst[MAXUREY],ubdist[MAXUREY];
145 } ureybrad_k;
146
147 struct t_crossterm_k {
148 int nangang, nstrbnd, nstrtor;
149 int ang_ang[MAXAA], stbnindex[MAXSTBN] ;
150 char str_tor[MAXSTRTOR][7], stbn[MAXSTBN][10];
151 float aacon[MAXAA][3], stbncon[MAXSTBN][3], str_torcon[MAXSTRTOR];
152 } crossterm_k;
153
154 struct t_ooplane_k {
155 int nopbend;
156 char iopb[MAXOOP][13];
157 float copb[MAXOOP];
158 } ooplane_k;
159
160 struct t_improptor_k {
161 int nimptor, nimprop;
162 char kv[MAXIMP][13];
163 float cimptor[MAXIMP], tdi[MAXIMP];
164 float v1[MAXIMP], v2[MAXIMP], v3[MAXIMP];
165 int ph1[MAXIMP], ph2[MAXIMP], ph3[MAXIMP];
166 } improptor_k;
167
168 struct t_torkn1 {
169 int use_tor4, use_tor5;
170 int ntor, ntor4, ntor5, ntordel, torindex[MAXTORDEL];
171 char kv[MAXTORCONST][13], kv4[MAXTOR4CONST][13], kv5[MAXTOR5CONST][13];
172 char kvdel[MAXTORDEL][13];
173 float tv1[MAXTORCONST], tv2[MAXTORCONST], tv3[MAXTORCONST];
174 float tv4[MAXTORCONST], tv5[MAXTORCONST], tv6[MAXTORCONST];
175 int phase1[MAXTORCONST], phase2[MAXTORCONST], phase3[MAXTORCONST];
176 int phase4[MAXTORCONST], phase5[MAXTORCONST], phase6[MAXTORCONST];
177 float tv41[MAXTOR4CONST], tv42[MAXTOR4CONST], tv43[MAXTOR4CONST];
178 int phase41[MAXTOR4CONST], phase42[MAXTOR4CONST], phase43[MAXTOR4CONST];
179 float tv51[MAXTOR5CONST], tv52[MAXTOR5CONST], tv53[MAXTOR5CONST];
180 int phase51[MAXTOR5CONST], phase52[MAXTOR5CONST], phase53[MAXTOR5CONST];
181 float tvdel1[MAXTORDEL], tvdel2[MAXTORDEL], tvdel3[MAXTORDEL];
182 int phasedel1[MAXTORDEL], phasedel2[MAXTORDEL], phasedel3[MAXTORDEL];
183 } torkn1;
184
185 struct t_torknp {
186 int npitor;
187 char kv[MAXPITORCONST][13];
188 int ph1[MAXPITORCONST], ph2[MAXPITORCONST], ph3[MAXPITORCONST];
189 float tv1[MAXPITORCONST], tv2[MAXPITORCONST], tv3[MAXPITORCONST];
190 } torknp;
191
192 struct t_vdw1 {
193 int nvdw;
194 float rad[MAXVDWCONST], eps[MAXVDWCONST];
195 int lpd[MAXVDWCONST], ihtyp[MAXVDWCONST], ihdon[MAXVDWCONST];
196 float alpha[MAXVDWCONST],n[MAXVDWCONST],a[MAXVDWCONST],g[MAXVDWCONST];
197 char da[MAXVDWCONST][2];
198 } vdw1;
199
200 struct t_vdwpr_k {
201 int nvdwpr;
202 int ia1[MAXBONDCONST],ia2[MAXBONDCONST];
203 char kv[MAXBONDCONST][7];
204 float radius[MAXBONDCONST], eps[MAXBONDCONST];
205 } vdwpr_k;
206
207 struct t_charge_k {
208 int ncharge, nbndchrg, nbndchrgdel;
209 int type[MAXATOMTYPE], btype[MAXBONDCONST], btypedel[MAXBONDCONST];
210 float charge[MAXATOMTYPE], bcharge[MAXBONDCONST], formchrg[MAXATOMTYPE], bchargedel[MAXBONDCONST];
211 float typechrg[MAXATOMTYPE];
212 } charge_k;
213
214 struct t_amberchrg_k {
215 int ncharge, type[MAXATOMTYPE], res_type[MAXATOMTYPE];
216 char symbol[MAXATOMTYPE][4];
217 float chrg[MAXATOMTYPE];
218 } amberchrg_k;
219
220 struct t_oplschrg_k {
221 int ncharge, type[MAXOPLS];
222 char chrgstring[MAXOPLS][25];
223 float chrg[MAXOPLS];
224 } oplschrg_k;
225
226 struct t_dipole_k {
227 int ndipole,ndipole3,ndipole4,ndipole5;
228 char kb[MAXBONDCONST][7], kb3[MAXBOND3CONST][7], kb4[MAXBOND4CONST][7], kb5[MAXBOND5CONST][7];
229 float bmom[MAXBONDCONST],bmom3[MAXBOND3CONST],bmom4[MAXBOND4CONST],bmom5[MAXBOND5CONST];
230 } dipole_k;
231
232 struct t_ehpara {
233 int neheat, nevhf;
234 int nn[220];
235 float ee[220], estr[220], et[220]; // bond data
236 char cc[220][21], mm[155][21];
237 int cent[155];
238 char kheat[155][13];
239 float ss[155], ssless[155]; // structural data
240 } ehpara;
241
242 struct t_epiheat {
243 int npihf;
244 int nnp[125];
245 float eep[125], aa[125], bb[125], ccc[125];
246 char ccp[125][21];} epiheat;
247
248 struct t_metaldata {
249 int nmetal, type[200];
250 char name[200][3];
251 float radius[200], eps[200];
252 } metaldata;
253
254 EXTERN struct t_user {
255 int dielec;
256 } user;
257
258 void zero_data()
259 {
260 int ii,j;
261
262 bondk1.use_ring3 = FALSE;
263 bondk1.use_ring4 = FALSE;
264 bondk1.use_ring5 = FALSE;
265 bondpk.use_pibond = FALSE;
266 bondpk.use_pibond44i = FALSE;
267 bondpk.use_pibond45i = FALSE;
268 bondpk.use_pibond46i = FALSE;
269 bondpk.use_pibond55i = FALSE;
270 bondpk.use_pibond56i = FALSE;
271 bondpk.use_pibond66i = FALSE;
272 bondpk.use_pibond44o = FALSE;
273 bondpk.use_pibond45o = FALSE;
274 bondpk.use_pibond46o = FALSE;
275 bondpk.use_pibond55o = FALSE;
276 bondpk.use_pibond56o = FALSE;
277 bondpk.use_pibond66o = FALSE;
278 bondpk.use_pibond40 = FALSE;
279 bondpk.use_pibond50 = FALSE;
280 bondpk.use_pibond60 = FALSE;
281
282 angk1.use_ang3 = FALSE;
283 angk1.use_ang4 = FALSE;
284 angk1.use_ang5 = FALSE;
285 angf.use_angf = FALSE;
286
287 torkn1.use_tor4 = FALSE;
288 torkn1.use_tor5 = FALSE;
289
290 units.bndunit = 1.0;
291 units.cbnd = 0.0;
292 units.qbnd = 0.0;
293 units.angunit = 1.0 / (radian*radian);
294 units.cang = 0.0;
295 units.qang = 0.0;
296 units.pang = 0.0;
297 units.sang = 0.0;
298 units.aaunit = 1.0 / (radian*radian);
299 units.stbnunit = 1.0;
300 units.ureyunit = 1.0;
301 units.torsunit = 1.0;
302 units.storunit = 1.0;
303 units.v14scale = 1.0;
304 units.aterm = 0.0;
305 units.bterm = 0.0;
306 units.cterm = 0.0;
307 // units.dielec = 1.0;
308 units.chgscale = 1.0;
309 // atom type constants
310 atom_k.natomtype = 0;
311 charge_k.ncharge = 0;
312 charge_k.nbndchrg = 0;
313 charge_k.nbndchrgdel = 0;
314 amberchrg_k.ncharge = 0;
315 oplschrg_k.ncharge = 0;
316 for (ii = 0; ii < MAXATOMTYPE; ii ++)
317 {
318 atom_k.type[ii]= 0;
319 atom_k.valency[ii]= 0;
320 atom_k.tclass[ii] = 0;
321 atom_k.tclass1[ii] = 0;
322 atom_k.tclass2[ii] = 0;
323 atom_k.number[ii] = 0;
324 atom_k.ligands[ii] = 0;
325 atom_k.weight[ii] = 0.00F;
326 strcpy(atom_k.symbol[ii]," ");
327 strcpy(atom_k.description[ii]," ");
328 charge_k.type[ii] = 0;
329 charge_k.charge[ii] = 0.00F;
330 charge_k.formchrg[ii] = 0.00F;
331 charge_k.typechrg[ii] = 0.00F;
332 amberchrg_k.type[ii] = 0;
333 amberchrg_k.res_type[ii] = 0;
334 amberchrg_k.chrg[ii] = 0.0;
335 strcpy(amberchrg_k.symbol[ii]," ");
336 }
337 for (ii = 0; ii < MAXOPLS; ii++)
338 {
339 oplschrg_k.type[ii] = 0;
340 oplschrg_k.chrg[ii] = 0.0;
341 strcpy(oplschrg_k.chrgstring[ii]," ");
342 }
343 // metals
344 metaldata.nmetal = 0;
345 for (ii = 0; ii < 200; ii++)
346 {
347 metaldata.type[ii] = 0;
348 metaldata.radius[ii] = 0.0;
349 metaldata.eps[ii] = 0.0;
350 strcpy(metaldata.name[ii]," ");
351 }
352 // bond constant data
353 bondk1.nbnd = 0;
354 vdwpr_k.nvdwpr = 0;
355 dipole_k.ndipole = 0;
356 electroneg.nelecti = 0;
357 electroneg.nelectj = 0;
358
359 for( ii = 0; ii < MAXBONDCONST; ii++ )
360 {
361 strcpy(bondk1.kb[ii]," ");
362 bondk1.s[ii] = 0.;
363 bondk1.t[ii] = 0.;
364 strcpy(vdwpr_k.kv[ii]," ");
365 vdwpr_k.ia1[ii] = 0;
366 vdwpr_k.ia2[ii] = 0;
367 vdwpr_k.radius[ii] = 0.0;
368 vdwpr_k.eps[ii] = 0.0;
369 strcpy(dipole_k.kb[ii]," ");
370 dipole_k.bmom[ii] = 0.;
371 charge_k.btype[ii] = 0;
372 charge_k.bcharge[ii] = 0.0;
373 charge_k.btypedel[ii] = 0;
374 charge_k.bchargedel[ii] = 0.0;
375 }
376 // bond 3 constant
377 bondk1.nbnd3 = 0;
378 dipole_k.ndipole3 = 0;
379 for( ii = 0; ii < MAXBOND3CONST; ii++ )
380 {
381 strcpy(bondk1.kb3[ii]," ");
382 bondk1.s3[ii] = 0.;
383 bondk1.t3[ii] = 0.;
384 strcpy(dipole_k.kb3[ii]," ");
385 dipole_k.bmom3[ii] = 0.;
386 }
387 // bond 4 constant
388 bondk1.nbnd4 = 0;
389 dipole_k.ndipole4 = 0;
390 for( ii = 0; ii < MAXBOND4CONST; ii++ )
391 {
392 strcpy(bondk1.kb4[ii]," ");
393 bondk1.s4[ii] = 0.;
394 bondk1.t4[ii] = 0.;
395 strcpy(dipole_k.kb4[ii]," ");
396 dipole_k.bmom4[ii] = 0.;
397 }
398 // bond 5 constant
399 bondk1.nbnd5 = 0;
400 dipole_k.ndipole5 = 0;
401 for( ii = 0; ii < MAXBOND5CONST; ii++ )
402 {
403 strcpy(bondk1.kb5[ii]," ");
404 bondk1.s5[ii] = 0.;
405 bondk1.t5[ii] = 0.;
406 strcpy(dipole_k.kb5[ii]," ");
407 dipole_k.bmom5[ii] = 0.;
408 }
409 // deloc bond constant
410 bondk1.ndeloc = 0;
411 for( ii = 0; ii < MAXBONDDELOC; ii++ )
412 {
413 strcpy(bondk1.kbdel[ii]," ");
414 bondk1.sdel[ii] = 0.;
415 bondk1.tdel[ii] = 0.;
416 }
417 // VDW constants
418 vdw1.nvdw = 0;
419 for( ii = 0; ii < MAXVDWCONST; ii++ )
420 {
421 vdw1.rad[ii] = 0.;
422 vdw1.eps[ii] = 0.;
423 vdw1.lpd[ii] = 0;
424 vdw1.ihtyp[ii] = 0;
425 vdw1.ihdon[ii] = 0;
426 vdw1.alpha[ii] = 0.0;
427 vdw1.n[ii] = 0.0;
428 vdw1.a[ii] = 0.0;
429 vdw1.g[ii] = 0.0;
430 strcpy(vdw1.da[ii]," ");
431 }
432 // torsion
433 torkn1.ntor = 0;
434 for( ii = 0; ii < MAXTORCONST; ii++ )
435 {
436 strcpy(torkn1.kv[ii]," ");
437 torkn1.tv1[ii] = 0.;
438 torkn1.tv2[ii] = 0.;
439 torkn1.tv3[ii] = 0.;
440 torkn1.tv4[ii] = 0.;
441 torkn1.tv5[ii] = 0.;
442 torkn1.tv6[ii] = 0.;
443 torkn1.phase1[ii] = torkn1.phase2[ii] = torkn1.phase3[ii] = 0;
444 torkn1.phase4[ii] = torkn1.phase5[ii] = torkn1.phase6[ii] = 0;
445 }
446 // torsion 4
447 torkn1.ntor4 = 0;
448 for( ii = 0; ii < MAXTOR4CONST; ii++ )
449 {
450 strcpy(torkn1.kv4[ii]," ");
451 torkn1.tv41[ii] = 0.;
452 torkn1.tv42[ii] = 0.;
453 torkn1.tv43[ii] = 0.;
454 torkn1.phase41[ii] = torkn1.phase42[ii] = torkn1.phase43[ii] = 0;
455 }
456 // torsion 5
457 torkn1.ntor5 = 0;
458 for( ii = 0; ii < MAXTOR5CONST; ii++ )
459 {
460 strcpy(torkn1.kv5[ii]," ");
461 torkn1.tv51[ii] = 0.;
462 torkn1.tv52[ii] = 0.;
463 torkn1.tv53[ii] = 0.;
464 torkn1.phase51[ii] = torkn1.phase52[ii] = torkn1.phase53[ii] = 0;
465 }
466 // torsion delocalized
467 torkn1.ntordel = 0;
468 for( ii = 0; ii < MAXTORDEL; ii++ )
469 {
470 strcpy(torkn1.kvdel[ii]," ");
471 torkn1.torindex[ii] = 0;
472 torkn1.tvdel1[ii] = 0.;
473 torkn1.tvdel2[ii] = 0.;
474 torkn1.tvdel3[ii] = 0.;
475 torkn1.phasedel1[ii] = torkn1.phasedel2[ii] = torkn1.phasedel3[ii] = 0;
476 }
477 // fourier angles
478 angf.nfang = 0;
479 for (ii=0; ii < MAXANGCONST; ii++ )
480 {
481 strcpy(angf.kftype[ii]," ");
482 angf.fcon[ii] = 0.0;
483 angf.fc0[ii] = 0.0;
484 angf.fc1[ii] = 0.0;
485 angf.fc2[ii] = 0.0;
486 angf.fc3[ii] = 0.0;
487 angf.fc4[ii] = 0.0;
488 angf.fc5[ii] = 0.0;
489 angf.fc6[ii] = 0.0;
490 }
491 // angle
492 angk1.nang = 0;
493 for( ii = 0; ii < MAXANGCONST; ii++ )
494 {
495 strcpy(angk1.ktype[ii]," ");
496 angk1.con[ii] = 0.;
497 for( j = 0; j < 3; j++ )
498 angk1.ang[ii][j] = 0.;
499 }
500 // angle 3
501 angk1.nang3 = 0;
502 for( ii = 0; ii < MAXANG3CONST; ii++ )
503 {
504 strcpy(angk1.ktype3[ii]," ");
505 angk1.con3[ii] = 0.;
506 for( j = 0; j < 3; j++ )
507 angk1.ang3[ii][j] = 0.;
508 }
509 // angle 4
510 angk1.nang4 = 0;
511 for( ii = 0; ii < MAXANG4CONST; ii++ )
512 {
513 strcpy(angk1.ktype4[ii]," ");
514 angk1.con4[ii] = 0.;
515 for( j = 0; j < 3; j++ )
516 angk1.ang4[ii][j] = 0.;
517 }
518 // angle 5
519 angk1.nang5 = 0;
520 for( ii = 0; ii < MAXANG5CONST; ii++ )
521 {
522 strcpy(angk1.ktype5[ii]," ");
523 angk1.con5[ii] = 0.;
524 for( j = 0; j < 3; j++ )
525 angk1.ang5[ii][j] = 0.;
526 }
527 // angle delocalized
528 angk1.ndel = 0;
529 for( ii = 0; ii < MAXANGDEL; ii++ )
530 {
531 strcpy(angk1.kdel[ii]," ");
532 angk1.condel[ii] = 0.;
533 for( j = 0; j < 3; j++ )
534 angk1.angdel[ii][j] = 0.;
535 }
536 // angle3 delocalized
537 angk1.ndel3 = 0;
538 for( ii = 0; ii < MAXANG3DEL; ii++ )
539 {
540 strcpy(angk1.kdel3[ii]," ");
541 angk1.condel3[ii] = 0.;
542 for( j = 0; j < 3; j++ )
543 angk1.angdel3[ii][j] = 0.;
544 }
545 // angle4 delocalized
546 angk1.ndel4 = 0;
547 for( ii = 0; ii < MAXANG4DEL; ii++ )
548 {
549 strcpy(angk1.kdel4[ii]," ");
550 angk1.condel4[ii] = 0.;
551 for( j = 0; j < 3; j++ )
552 angk1.angdel4[ii][j] = 0.;
553 }
554 // urey bradley
555 ureybrad_k.nurey_brad = 0;
556 for (ii = 0; ii < MAXUREY; ii++)
557 {
558 strcpy(ureybrad_k.kubang[ii]," ");
559 ureybrad_k.ubconst[ii] = 0.0;
560 ureybrad_k.ubdist[ii] = 0.0;
561 }
562 // out of plane
563 ooplane_k.nopbend = 0;
564 for( ii = 0; ii < MAXOOP; ii++ )
565 {
566 strcpy(ooplane_k.iopb[ii]," ");
567 ooplane_k.copb[ii] = 0.;
568 }
569 // improper torsions
570 improptor_k.nimptor = 0;
571 improptor_k.nimprop = 0;
572 for( ii = 0; ii < MAXIMP; ii++ )
573 {
574 strcpy(improptor_k.kv[ii]," ");
575 improptor_k.cimptor[ii] = 0.;
576 improptor_k.tdi[ii] = 0.;
577 improptor_k.v1[ii] = 0.0;
578 improptor_k.v2[ii] = 0.0;
579 improptor_k.v3[ii] = 0.0;
580 improptor_k.ph1[ii] = 0;
581 improptor_k.ph2[ii] = 0;
582 improptor_k.ph3[ii] = 0;
583 }
584 // cross terms
585 crossterm_k.nangang = 0;
586 crossterm_k.nstrbnd = 0;
587 crossterm_k.nstrtor = 0;
588 for (ii = 0; ii < MAXAA; ii++)
589 {
590 crossterm_k.ang_ang[ii] = 0;
591 crossterm_k.aacon[ii][0] = 0.0;
592 crossterm_k.aacon[ii][1] = 0.0;
593 crossterm_k.aacon[ii][2] = 0.0;
594 }
595 for (ii = 0; ii < MAXSTBN; ii++)
596 {
597 strcpy(crossterm_k.stbn[ii]," ");
598 crossterm_k.stbnindex[ii] = 0;
599 crossterm_k.stbncon[ii][0] = 0.0;
600 crossterm_k.stbncon[ii][1] = 0.0;
601 crossterm_k.stbncon[ii][2] = 0.0;
602 }
603 for (ii = 0; ii < MAXSTRTOR; ii++)
604 {
605 strcpy(crossterm_k.str_tor[ii]," ");
606 crossterm_k.str_torcon[ii] = 0.0;
607 }
608
609
610 // heat parameters
611 ehpara.neheat = 0;
612 ehpara.nevhf = 0;
613 for( ii = 0; ii < 220; ii++ )
614 {
615 ehpara.nn[ii] = 0;
616 ehpara.ee[ii] = 0.;
617 ehpara.estr[ii] = 0.;
618 ehpara.et[ii] = 0.;
619 strcpy( ehpara.cc[ii], " " );
620 }
621 for( ii = 0; ii < 155; ii++ )
622 {
623 strcpy( ehpara.mm[ii], " " );
624 strcpy( ehpara.kheat[ii], " " );
625 ehpara.ss[ii] = 0.;
626 ehpara.ssless[ii] = 0.;
627 ehpara.cent[ii] = 0;
628 }
629 // pi heat parameters
630 epiheat.npihf = 0;
631 for( ii = 0; ii < 125; ii++ )
632 {
633 epiheat.nnp[ii] = 0;
634 epiheat.eep[ii] = 0.;
635 epiheat.aa[ii] = 0.;
636 epiheat.bb[ii] = 0.;
637 epiheat.ccc[ii] = 0.;
638 strcpy( epiheat.ccp[ii], " " );
639 }
640 // pi atom data
641 piatomk.npiatom = 0;
642 for (ii=0; ii < MAXPIATOM; ii++)
643 {
644 piatomk.kat[ii] = 0;
645 piatomk.qp[ii] = 0;
646 piatomk.q[ii] = 0.0;
647 piatomk.ion[ii] = 0.0;
648 piatomk.emz[ii] = 0.0;
649 piatomk.zor[ii] = 0.0;
650 piatomk.zz[ii] = 0.0;
651 piatomk.w1[ii] = 0.0;
652 piatomk.w2[ii] = 0.0;
653 piatomk.w3[ii] = 0.0;
654 }
655 // pi bond constants
656 bondpk.npibond = 0;
657 bondpk.npibond44i = 0;
658 bondpk.npibond45i = 0;
659 bondpk.npibond46i = 0;
660 bondpk.npibond55i = 0;
661 bondpk.npibond56i = 0;
662 bondpk.npibond66i = 0;
663 bondpk.npibond44o = 0;
664 bondpk.npibond45o = 0;
665 bondpk.npibond46o = 0;
666 bondpk.npibond55o = 0;
667 bondpk.npibond56o = 0;
668 bondpk.npibond66o = 0;
669 bondpk.npibond40 = 0;
670 bondpk.npibond50 = 0;
671 bondpk.npibond60 = 0;
672 for (ii = 0; ii < 20; ii++)
673 {
674 strcpy(bondpk.kb44i[ii]," ");
675 strcpy(bondpk.kb45i[ii]," ");
676 strcpy(bondpk.kb46i[ii]," ");
677 strcpy(bondpk.kb55i[ii]," ");
678 strcpy(bondpk.kb56i[ii]," ");
679 strcpy(bondpk.kb66i[ii]," ");
680 strcpy(bondpk.kb44o[ii]," ");
681 strcpy(bondpk.kb45o[ii]," ");
682 strcpy(bondpk.kb46o[ii]," ");
683 strcpy(bondpk.kb55o[ii]," ");
684 strcpy(bondpk.kb56o[ii]," ");
685 strcpy(bondpk.kb66o[ii]," ");
686 strcpy(bondpk.kb40[ii]," ");
687 strcpy(bondpk.kb50[ii]," ");
688 strcpy(bondpk.kb60[ii]," ");
689
690 bondpk.bk44i[ii] = 0.0;
691 bondpk.bl44i[ii] = 0.0;
692 bondpk.bmom44i[ii] = 0.0;
693 bondpk.sslop44i[ii] = 0.0;
694 bondpk.tslop44i[ii] = 0.0;
695 bondpk.tslop244i[ii] = 0.0;
696 bondpk.bk45i[ii] = 0.0;
697 bondpk.bl45i[ii] = 0.0;
698 bondpk.bmom45i[ii] = 0.0;
699 bondpk.sslop45i[ii] = 0.0;
700 bondpk.tslop45i[ii] = 0.0;
701 bondpk.tslop245i[ii] = 0.0;
702 bondpk.bk46i[ii] = 0.0;
703 bondpk.bl46i[ii] = 0.0;
704 bondpk.bmom46i[ii] = 0.0;
705 bondpk.sslop46i[ii] = 0.0;
706 bondpk.tslop46i[ii] = 0.0;
707 bondpk.tslop246i[ii] = 0.0;
708 bondpk.bk55i[ii] = 0.0;
709 bondpk.bl55i[ii] = 0.0;
710 bondpk.bmom55i[ii] = 0.0;
711 bondpk.sslop55i[ii] = 0.0;
712 bondpk.tslop55i[ii] = 0.0;
713 bondpk.tslop255i[ii] = 0.0;
714 bondpk.bk56i[ii] = 0.0;
715 bondpk.bl56i[ii] = 0.0;
716 bondpk.bmom56i[ii] = 0.0;
717 bondpk.sslop56i[ii] = 0.0;
718 bondpk.tslop56i[ii] = 0.0;
719 bondpk.tslop256i[ii] = 0.0;
720 bondpk.bk66i[ii] = 0.0;
721 bondpk.bl66i[ii] = 0.0;
722 bondpk.bmom66i[ii] = 0.0;
723 bondpk.sslop66i[ii] = 0.0;
724 bondpk.tslop66i[ii] = 0.0;
725 bondpk.tslop266i[ii] = 0.0;
726 bondpk.bk44o[ii] = 0.0;
727 bondpk.bl44o[ii] = 0.0;
728 bondpk.bmom44o[ii] = 0.0;
729 bondpk.sslop44o[ii] = 0.0;
730 bondpk.tslop44o[ii] = 0.0;
731 bondpk.tslop244o[ii] = 0.0;
732 bondpk.bk45o[ii] = 0.0;
733 bondpk.bl45o[ii] = 0.0;
734 bondpk.bmom45o[ii] = 0.0;
735 bondpk.sslop45o[ii] = 0.0;
736 bondpk.tslop45o[ii] = 0.0;
737 bondpk.tslop245o[ii] = 0.0;
738 bondpk.bk46o[ii] = 0.0;
739 bondpk.bl46o[ii] = 0.0;
740 bondpk.bmom46o[ii] = 0.0;
741 bondpk.sslop46o[ii] = 0.0;
742 bondpk.tslop46o[ii] = 0.0;
743 bondpk.tslop246o[ii] = 0.0;
744 bondpk.bk55o[ii] = 0.0;
745 bondpk.bl55o[ii] = 0.0;
746 bondpk.bmom55o[ii] = 0.0;
747 bondpk.sslop55o[ii] = 0.0;
748 bondpk.tslop55o[ii] = 0.0;
749 bondpk.tslop255o[ii] = 0.0;
750 bondpk.bk56o[ii] = 0.0;
751 bondpk.bl56o[ii] = 0.0;
752 bondpk.bmom56o[ii] = 0.0;
753 bondpk.sslop56o[ii] = 0.0;
754 bondpk.tslop56o[ii] = 0.0;
755 bondpk.tslop256o[ii] = 0.0;
756 bondpk.bk66o[ii] = 0.0;
757 bondpk.bl66o[ii] = 0.0;
758 bondpk.bmom66o[ii] = 0.0;
759 bondpk.sslop66o[ii] = 0.0;
760 bondpk.tslop66o[ii] = 0.0;
761 bondpk.tslop266o[ii] = 0.0;
762 bondpk.bk40[ii] = 0.0;
763 bondpk.bl40[ii] = 0.0;
764 bondpk.bmom40[ii] = 0.0;
765 bondpk.sslop40[ii] = 0.0;
766 bondpk.tslop40[ii] = 0.0;
767 bondpk.tslop240[ii] = 0.0;
768 bondpk.bk50[ii] = 0.0;
769 bondpk.bl50[ii] = 0.0;
770 bondpk.bmom50[ii] = 0.0;
771 bondpk.sslop50[ii] = 0.0;
772 bondpk.tslop50[ii] = 0.0;
773 bondpk.tslop250[ii] = 0.0;
774 bondpk.bk60[ii] = 0.0;
775 bondpk.bl60[ii] = 0.0;
776 bondpk.bmom60[ii] = 0.0;
777 bondpk.sslop60[ii] = 0.0;
778 bondpk.tslop60[ii] = 0.0;
779 bondpk.tslop260[ii] = 0.0;
780 }
781 for (ii = 0; ii < MAXPIBONDCONST; ii++)
782 {
783 strcpy(bondpk.kb[ii]," ");
784 bondpk.bk[ii] = 0.0;
785 bondpk.bl[ii] = 0.0;
786 bondpk.bmom[ii] = 0.0;
787 bondpk.sslop[ii] = 0.0;
788 bondpk.tslop[ii] = 0.0;
789 bondpk.tslop2[ii] = 0.0;
790 }
791 picorrect.fudge1 = 0.0;
792 picorrect.fudge2 = 0.0;
793 picorrect.fudge3 = 0.0;
794 picorrect.fudge4 = 0.0;
795 picorrect.beta_fudgef = 0.0;
796 picorrect.beta_fudgeh = 0.0;
797
798 // pi torsions
799 torknp.npitor = 0;
800 for (ii = 0; ii < MAXPITORCONST; ii++)
801 {
802 strcpy(torknp.kv[ii]," ");
803 torknp.ph1[ii] = 0;
804 torknp.ph2[ii] = 0;
805 torknp.ph3[ii] = 0;
806 torknp.tv1[ii] = 0.0;
807 torknp.tv2[ii] = 0.0;
808 torknp.tv3[ii] = 0.0;
809 }
810 // pi angles
811 angkp1.npiang = 0;
812 for (ii = 0; ii < MAXPIANGCONST; ii++)
813 {
814 strcpy(angkp1.kpa[ii]," ");
815 angkp1.pacon[ii] = 0.0;
816 angkp1.panat[ii][0] = 0.0;
817 angkp1.panat[ii][1] = 0.0;
818 angkp1.panat[ii][2] = 0.0;
819 angkp1.piobp[ii] = 0.0;
820 }
821
822 }
823 /* =========================================== */
824 void get_added_const()
825 {
826 int ia,ib,ic,id, ip1,ip2,ip3,iz,if3,if4,if5;
827 float f1,f2,f3,f4;
828 float v1[6];
829 int se1[6];
830 char pa[3],pb[3],pc[3],pd[3],pt[13];
831 char line[151], iptemp[21], dummy[10];
832 FILE *wfile;
833
834 wfile = fopen_path(minim_control.added_path,minim_control.added_name,"r");
835 if (wfile == NULL)
836 {
837 message_alert("Error opening added constants file","Error");
838 fprintf(pcmoutfile,"Error reading added constants file: %s\n",minim_control.added_name);
839 return;
840 }
841
842 fprintf(pcmoutfile,"\nThe Following Added Parameters were read:\n\n");
843 while ( FetchRecord(wfile,line) )
844 {
845 sscanf(line,"%s",iptemp);
846
847 if (strcmp(iptemp,"bond") == 0)
848 {
849 sscanf(line,"%s %d %d %f %f",dummy,&ia,&ib,&f1,&f2);
850 fprintf(pcmoutfile,"Bond: AtomTypes %d %d Blen %f Bk %f \n",ia,ib,f1,f2);
851 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE)
852 {
853 iz = check_bondconst(ia,ib,f1,f2);
854 if (iz == FALSE)
855 {
856 bondk1.s[bondk1.nbnd] = f1;
857 bondk1.t[bondk1.nbnd] = f2;
858 numeral(ia,pa,3);
859 numeral(ib,pb,3);
860 strcpy(pt,pa);
861 strcat(pt,pb);
862 strcpy(bondk1.kb[bondk1.nbnd],pt);
863 bondk1.nbnd++;
864 }
865 } else
866 {
867 message_alert("Error reading bond atom types in added constants file","Error");
868 }
869 } else if (strcmp(iptemp,"bond5") == 0)
870 {
871 iz = sscanf(line,"%s %d %d %f %f",dummy,&ia,&ib,&f1,&f2);
872 fprintf(pcmoutfile,"Bond5: AtomTypes %d %d Blen %f Bk %f \n",ia,ib,f1,f2);
873 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && iz > 3)
874 {
875 iz = check_bond5const(ia,ib,f1,f2);
876 if (iz == FALSE)
877 {
878 bondk1.s5[bondk1.nbnd5] = f1;
879 bondk1.t5[bondk1.nbnd5] = f2;
880 numeral(ia,pa,3);
881 numeral(ib,pb,3);
882 strcpy(pt,pa);
883 strcat(pt,pb);
884 strcpy(bondk1.kb5[bondk1.nbnd5],pt);
885 bondk1.nbnd5++;
886 }
887 } else
888 {
889 message_alert("Error reading bond atom types in added constants file","Error");
890 }
891 } else if (strcmp(iptemp,"bond4") == 0)
892 {
893 iz = sscanf(line,"%s %d %d %f %f",dummy,&ia,&ib,&f1,&f2);
894 fprintf(pcmoutfile,"Bond4: AtomTypes %d %d Blen %f Bk %f \n",ia,ib,f1,f2);
895 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && iz > 3)
896 {
897 iz = check_bond4const(ia,ib,f1,f2);
898 if (iz == FALSE)
899 {
900 bondk1.s4[bondk1.nbnd4] = f1;
901 bondk1.t4[bondk1.nbnd4] = f2;
902 numeral(ia,pa,3);
903 numeral(ib,pb,3);
904 strcpy(pt,pa);
905 strcat(pt,pb);
906 strcpy(bondk1.kb4[bondk1.nbnd4],pt);
907 bondk1.nbnd4++;
908 }
909 } else
910 {
911 message_alert("Error reading bond atom types in added constants file","Error");
912 }
913 } else if (strcmp(iptemp,"bond3") == 0)
914 {
915 sscanf(line,"%s %d %d %f %f",dummy,&ia,&ib,&f1,&f2);
916 fprintf(pcmoutfile,"Bond3: AtomTypes %d %d Blen %f Bk %f \n",ia,ib,f1,f2);
917 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE)
918 {
919 iz = check_bond3const(ia,ib,f1,f2);
920 if (iz == FALSE)
921 {
922 bondk1.s3[bondk1.nbnd3] = f1;
923 bondk1.t3[bondk1.nbnd3] = f2;
924 numeral(ia,pa,3);
925 numeral(ib,pb,3);
926 strcpy(pt,pa);
927 strcat(pt,pb);
928 strcpy(bondk1.kb3[bondk1.nbnd3],pt);
929 bondk1.nbnd3++;
930 }
931 } else
932 {
933 message_alert("Error reading bond atom types in added constants file","Error");
934 }
935 } else if (strcmp(iptemp,"angle") == 0)
936 {
937 f1 =f2=f3=f4=0.0;
938 sscanf(line,"%s %d %d %d %f %f %f %f",dummy,&ia,&ib,&ic,&f1,&f2,&f3,&f4);
939 fprintf(pcmoutfile,"Angle: AtomTypes %d %d %d Anat %f Acon %f \n",ia,ib,ic,f2,f1);
940 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE)
941 {
942 iz = check_angleconst(ia,ib,ic,f1,f2,f3,f4);
943 if (iz == FALSE)
944 {
945 angk1.con[angk1.nang] = f1;
946 angk1.ang[angk1.nang][0] = f2;
947 angk1.ang[angk1.nang][1] = f3;
948 angk1.ang[angk1.nang][2] = f4;
949 numeral(ia,pa,3);
950 numeral(ib,pb,3);
951 numeral(ic,pc,3);
952 strcpy(pt,pa); strcat(pt,pb); strcat(pt,pc);
953 strcpy(angk1.ktype[angk1.nang],pt);
954 angk1.nang++;
955 }
956 } else
957 {
958 message_alert("Error reading Angle atom types in added constants file","Error");
959 }
960 } else if (strcmp(iptemp,"angle5") == 0)
961 {
962 f1 =f2=f3=f4=0.0;
963 sscanf(line,"%s %d %d %d %f %f %f %f",dummy,&ia,&ib,&ic,&f1,&f2,&f3,&f4);
964 fprintf(pcmoutfile,"Angle5: AtomTypes %d %d %d Anat %f Acon %f \n",ia,ib,ic,f2,f1);
965 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE)
966 {
967 iz = check_angle5const(ia,ib,ic,f1,f2,f3,f4);
968 if (iz == FALSE)
969 {
970 angk1.con5[angk1.nang5] = f1;
971 angk1.ang5[angk1.nang5][0] = f2;
972 angk1.ang5[angk1.nang5][1] = f3;
973 angk1.ang5[angk1.nang5][2] = f4;
974 numeral(ia,pa,3);
975 numeral(ib,pb,3);
976 numeral(ic,pc,3);
977 strcpy(pt,pa); strcat(pt,pb); strcat(pt,pc);
978 strcpy(angk1.ktype5[angk1.nang5],pt);
979 angk1.nang5++;
980 }
981 } else
982 {
983 message_alert("Error reading Angle atom types in added constants file","Error");
984 }
985 } else if (strcmp(iptemp,"angle4") == 0)
986 {
987 f1 =f2=f3=f4=0.0;
988 sscanf(line,"%s %d %d %d %f %f %f %f",dummy,&ia,&ib,&ic,&f1,&f2,&f3,&f4);
989 fprintf(pcmoutfile,"Angle4: AtomTypes %d %d %d Anat %f Acon %f \n",ia,ib,ic,f2,f1);
990 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE)
991 {
992 iz = check_angle4const(ia,ib,ic,f1,f2,f3,f4);
993 if (iz == FALSE)
994 {
995 angk1.con4[angk1.nang4] = f1;
996 angk1.ang4[angk1.nang4][0] = f2;
997 angk1.ang4[angk1.nang4][1] = f3;
998 angk1.ang4[angk1.nang4][2] = f4;
999 numeral(ia,pa,3);
1000 numeral(ib,pb,3);
1001 numeral(ic,pc,3);
1002 strcpy(pt,pa); strcat(pt,pb); strcat(pt,pc);
1003 strcpy(angk1.ktype4[angk1.nang4],pt);
1004 angk1.nang4++;
1005 }
1006 } else
1007 {
1008 message_alert("Error reading Angle atom types in added constants file","Error");
1009 }
1010 } else if (strcmp(iptemp,"angle3") == 0)
1011 {
1012 f1 =f2=f3=f4=0.0;
1013 sscanf(line,"%s %d %d %d %f %f %f %f",dummy,&ia,&ib,&ic,&f1,&f2,&f3,&f4);
1014 fprintf(pcmoutfile,"Angle3: AtomTypes %d %d %d Anat %f Acon %f \n",ia,ib,ic,f2,f1);
1015 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE)
1016 {
1017 iz = check_angle3const(ia,ib,ic,f1,f2,f3,f4);
1018 if (iz == FALSE)
1019 {
1020 angk1.con3[angk1.nang3] = f1;
1021 angk1.ang3[angk1.nang3][0] = f2;
1022 angk1.ang3[angk1.nang3][1] = f3;
1023 angk1.ang3[angk1.nang3][2] = f4;
1024 numeral(ia,pa,3);
1025 numeral(ib,pb,3);
1026 numeral(ic,pc,3);
1027 strcpy(pt,pa); strcat(pt,pb); strcat(pt,pc);
1028 strcpy(angk1.ktype3[angk1.nang3],pt);
1029 angk1.nang3++;
1030 }
1031 } else
1032 {
1033 message_alert("Error reading Angle atom types in added constants file","Error");
1034 }
1035 } else if (strcmp(iptemp,"torsion") == 0)
1036 {
1037 sscanf(line,"%s %d %d %d %d %f %d %f %d %f %d",dummy,&ia,&ib,&ic,&id,&f1,&ip1,&f2,
1038 &ip2,&f3,&ip3);
1039 fprintf(pcmoutfile,"Torsion: AtomTypes %d %d %d %d V1 %f V2 %f V3 %f\n",ia,ib,ic,id,f1,f2,f3);
1040 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE && id < MAXATOMTYPE)
1041 {
1042 iz = check_torsionconst(ia,ib,ic,id,f1,f2,f3,ip1,ip2,ip3);
1043 if (iz == FALSE)
1044 {
1045 v1[0] = f1; v1[1] = f2; v1[2] = f3;
1046 v1[3] = v1[4] = v1[5] = 0.0;
1047 se1[0] = ip1; se1[1] = ip2; se1[2] = ip3;
1048 se1[3] = se1[4] = se1[5] = 0;
1049 torphase(6, v1, se1);
1050 torkn1.tv1[torkn1.ntor] = v1[0];
1051 torkn1.phase1[torkn1.ntor] = se1[0];
1052 torkn1.tv2[torkn1.ntor] = v1[1];
1053 torkn1.phase2[torkn1.ntor] = se1[1];
1054 torkn1.tv3[torkn1.ntor] = v1[2];
1055 torkn1.phase3[torkn1.ntor] = se1[2];
1056 torkn1.tv4[torkn1.ntor] = v1[3];
1057 torkn1.phase4[torkn1.ntor] = se1[3];
1058 torkn1.tv5[torkn1.ntor] = v1[4];
1059 torkn1.phase5[torkn1.ntor] = se1[4];
1060 torkn1.tv6[torkn1.ntor] = v1[5];
1061 torkn1.phase6[torkn1.ntor] = se1[5];
1062 numeral(ia,pa,3);
1063 numeral(ib,pb,3);
1064 numeral(ic,pc,3);
1065 numeral(id,pd,3);
1066 strcpy(pt,pa);
1067 strcat(pt,pb); strcat(pt,pc); strcat(pt,pd);
1068 strcpy(torkn1.kv[torkn1.ntor],pt);
1069 torkn1.ntor++;
1070 }
1071 } else
1072 {
1073 message_alert("Error reading Torsion atom types in added constants file","Error");
1074 }
1075 } else if (strcmp(iptemp,"torsion4") == 0)
1076 {
1077 sscanf(line,"%s %d %d %d %d %f %d %f %d %f %d",dummy,&ia,&ib,&ic,&id,&f1,&ip1,&f2,
1078 &ip2,&f3,&ip3);
1079 fprintf(pcmoutfile,"Torsion4: AtomTypes %d %d %d %d V1 %f V2 %f V3 %f\n",ia,ib,ic,id,f1,f2,f3);
1080 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE && id < MAXATOMTYPE)
1081 {
1082 iz = check_torsion4const(ia,ib,ic,id,f1,f2,f3,ip1,ip2,ip3);
1083 if (iz == FALSE)
1084 {
1085 v1[0] = f1; v1[1] = f2; v1[2] = f3;
1086 v1[3] = v1[4] = v1[5] = 0.0;
1087 se1[0] = ip1; se1[1] = ip2; se1[2] = ip3;
1088 se1[3] = se1[4] = se1[5] = 0;
1089 torphase(6, v1, se1);
1090 torkn1.tv41[torkn1.ntor4] = v1[0];
1091 torkn1.phase41[torkn1.ntor4] = se1[0];
1092 torkn1.tv42[torkn1.ntor4] = v1[1];
1093 torkn1.phase42[torkn1.ntor4] = se1[1];
1094 torkn1.tv43[torkn1.ntor4] = v1[2];
1095 torkn1.phase43[torkn1.ntor4] = se1[2];
1096 numeral(ia,pa,3);
1097 numeral(ib,pb,3);
1098 numeral(ic,pc,3);
1099 numeral(id,pd,3);
1100 strcpy(pt,pa);
1101 strcat(pt,pb); strcat(pt,pc); strcat(pt,pd);
1102 strcpy(torkn1.kv4[torkn1.ntor4],pt);
1103 torkn1.ntor4++;
1104 }
1105 } else
1106 {
1107 message_alert("Error reading Torsion atom types in added constants file","Error");
1108 }
1109 } else if (strcmp(iptemp,"torsion5") == 0)
1110 {
1111 sscanf(line,"%s %d %d %d %d %f %d %f %d %f %d",dummy,&ia,&ib,&ic,&id,&f1,&ip1,&f2,
1112 &ip2,&f3,&ip3);
1113 fprintf(pcmoutfile,"Torsion5: AtomTypes %d %d %d %d V1 %f V2 %f V3 %f\n",ia,ib,ic,id,f1,f2,f3);
1114 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE && id < MAXATOMTYPE)
1115 {
1116 iz = check_torsion5const(ia,ib,ic,id,f1,f2,f3,ip1,ip2,ip3);
1117 if (iz == FALSE)
1118 {
1119 v1[0] = f1; v1[1] = f2; v1[2] = f3;
1120 v1[3] = v1[4] = v1[5] = 0.0;
1121 se1[0] = ip1; se1[1] = ip2; se1[2] = ip3;
1122 se1[3] = se1[4] = se1[5] = 0;
1123 torphase(6, v1, se1);
1124 torkn1.tv51[torkn1.ntor5] = v1[0];
1125 torkn1.phase51[torkn1.ntor5] = se1[0];
1126 torkn1.tv52[torkn1.ntor5] = v1[1];
1127 torkn1.phase52[torkn1.ntor5] = se1[1];
1128 torkn1.tv53[torkn1.ntor5] = v1[2];
1129 torkn1.phase53[torkn1.ntor5] = se1[2];
1130 numeral(ia,pa,3);
1131 numeral(ib,pb,3);
1132 numeral(ic,pc,3);
1133 numeral(id,pd,3);
1134 strcpy(pt,pa);
1135 strcat(pt,pb); strcat(pt,pc); strcat(pt,pd);
1136 strcpy(torkn1.kv5[torkn1.ntor5],pt);
1137 torkn1.ntor5++;
1138 }
1139 } else
1140 {
1141 message_alert("Error reading Torsion atom types in added constants file","Error");
1142 }
1143 } else if (strcmp(iptemp,"vdw") == 0)
1144 {
1145 sscanf(line,"%s %d %f %f %d %d %d",dummy,&ia,&f1,&f2,&if3,&if4,&if5);
1146 fprintf(pcmoutfile,"VDW: AtomTypes %d Rad %f Eps %f \n",ia,f1,f2);
1147 vdw1.rad[ia] = f1;
1148 vdw1.eps[ia] = f2;
1149 vdw1.lpd[ia] = if3;
1150 vdw1.ihdon[ia] = if4;
1151 vdw1.ihtyp[ia] = if5;
1152 } else if (strcmp(iptemp,"metal") == 0)
1153 {
1154 sscanf(line,"%s %d %f %f",dummy,&ia,&f1,&f2);
1155 fprintf(pcmoutfile,"Metal: AtomTypes %d Rad %f Eps %f \n",ia,f1,f2);
1156 metaldata.radius[ia] = f1;
1157 metaldata.eps[ia] = f2;
1158 } else if (strcmp(iptemp,"vdwpr") == 0)
1159 {
1160 sscanf(line,"%s %d %d %f %f",dummy, &ia, &ib, &f1,&f2);
1161 fprintf(pcmoutfile,"VDWPR: AtomTypes %d %d Rad %f Eps %f \n",ia,ib,f1,f2);
1162 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE)
1163 {
1164 iz = check_vdwpr(ia,ib,f1,f2);
1165 if (iz == FALSE)
1166 {
1167 numeral(ia,pa,3);
1168 numeral(ib,pb,3);
1169 strcpy(pt,pa); strcat(pt,pb);
1170 strcpy(vdwpr_k.kv[vdwpr_k .nvdwpr],pt);
1171 vdwpr_k.ia1[vdwpr_k .nvdwpr] = ia;
1172 vdwpr_k.ia2[vdwpr_k .nvdwpr] = ib;
1173 vdwpr_k.radius[vdwpr_k .nvdwpr] = f1;
1174 vdwpr_k.eps[vdwpr_k .nvdwpr] = f2;
1175 vdwpr_k .nvdwpr++;
1176 }
1177 } else
1178 {
1179 message_alert("Error reading VDWPR atom types in added constants file","Error");
1180 }
1181 } else if (strcmp(iptemp,"opbend") == 0)
1182 {
1183 sscanf( line, "%s %d %d %d %d %f", dummy, &ia, &ib, &ic,&id,&f1 );
1184 fprintf(pcmoutfile,"OPBEND: AtomTypes %d %d %d %d Const %f \n",ia,ib,ic,id,f1);
1185 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE)
1186 {
1187 iz = check_opbend(ia,ib,ic,id,f1);
1188 if (iz == FALSE)
1189 {
1190 numeral(ia,pa,3);
1191 numeral(ib,pb,3);
1192 numeral(ic,pc,3);
1193 numeral(id,pd,3);
1194 strcpy(pt,pa); strcat(pt,pb); strcat(pt,pc); strcat(pt,pd);
1195 strcpy(ooplane_k.iopb[ooplane_k.nopbend],pt);
1196 ooplane_k.nopbend++;
1197 }
1198 } else
1199 {
1200 message_alert("Error reading Opbend atom types in added constants file","Error");
1201 }
1202 } else if (strcmp(iptemp,"strbnd") == 0)
1203 {
1204 id = 0;
1205 sscanf(line,"%s %d %d %d %f %f %f",dummy, &ia, &ib, &ic,
1206 &f1,&f2,&f3);
1207 fprintf(pcmoutfile,"STRBEND: AtomTypes %d %d Const %f %f %f\n",ia,ib,f1,f2,f3);
1208 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE && ic < MAXATOMTYPE)
1209 {
1210 iz = check_strbnd(ia,ib,ic,f1,f2,f3);
1211 if (iz == FALSE)
1212 {
1213 numeral(ia,pa,3);
1214 numeral(ib,pb,3);
1215 numeral(ic,pc,3);
1216 strcpy(pt,pa); strcat(pt,pb); strcat(pt,pc);
1217 strcpy(crossterm_k.stbn[crossterm_k.nstrbnd],pt);
1218 crossterm_k.stbncon[crossterm_k.nstrbnd][0] = f1;
1219 crossterm_k.stbncon[crossterm_k.nstrbnd][1] = f2;
1220 crossterm_k.stbncon[crossterm_k.nstrbnd][2] = f3;
1221 crossterm_k.stbnindex[crossterm_k.nstrbnd] = 0;
1222 crossterm_k.nstrbnd++;
1223 }
1224 } else
1225 {
1226 message_alert("Error reading Strbend atom types in added constants file","Error");
1227 }
1228 } else if (strcmp(iptemp,"dipole") == 0)
1229 {
1230 sscanf(line,"%s %d %d %f",dummy,&ia,&ib,&f1);
1231 fprintf(pcmoutfile,"DIPOLE: AtomTypes %d %d Bond Moment %f \n",ia,ib,f1);
1232 if (ia < MAXATOMTYPE && ib < MAXATOMTYPE)
1233 {
1234 iz = check_dipoleconst(ia,ib,f1);
1235 if (iz == FALSE)
1236 {
1237 dipole_k.bmom[dipole_k.ndipole] = f1;
1238 numeral(ia,pa,3);
1239 numeral(ib,pb,3);
1240 strcpy(pt,pa); strcat(pt,pb);
1241 strcpy(dipole_k.kb[dipole_k.ndipole],pt);
1242 dipole_k.ndipole++;
1243 }
1244 } else
1245 {
1246 message_alert("Error reading Dipole atom types in added constants file","Error");
1247 }
1248 }
1249 }
1250 fclose(wfile);
1251 }
1252 /* ========================================== */
1253 int check_vdwpr(int ia, int ib,float f1, float f2)
1254 {
1255 int i;
1256 char pa[3],pb[3],pt[13];
1257
1258 numeral(ia,pa,3);
1259 numeral(ib,pb,3);
1260 strcpy(pt,pa);
1261 strcat(pt,pb);
1262 for (i=0; i < vdwpr_k .nvdwpr; i++)
1263 {
1264 if (strcmp(pt,vdwpr_k.kv[i]) == 0)
1265 {
1266 vdwpr_k.radius[i] = f1;
1267 vdwpr_k.eps[i] = f2;
1268 return TRUE;
1269 }
1270 }
1271 return FALSE;
1272 }
1273 /* ========================================== */
1274 int check_strbnd(int ia, int ib, int ic,float f1, float f2, float f3)
1275 {
1276 int i;
1277 char pa[3],pb[3],pc[3],pt[13];
1278
1279 numeral(ia,pa,3);
1280 numeral(ib,pb,3);
1281 numeral(ic,pc,3);
1282 strcpy(pt,pa);
1283 strcat(pt,pb);
1284 strcat(pt,pc);
1285 for (i=0; i < crossterm_k.nstrbnd; i++)
1286 {
1287 if (strcmp(pt,crossterm_k.stbn[i]) == 0)
1288 {
1289 crossterm_k.stbncon[i][0] = f1;
1290 crossterm_k.stbncon[i][1] = f2;
1291 crossterm_k.stbncon[i][2] = f3;
1292 return TRUE;
1293 }
1294 }
1295 return FALSE;
1296 }
1297 /* ========================================== */
1298 int check_opbend(int ia,int ib,int ic,int id, float ftemp)
1299 {
1300 int i;
1301 char pa[3],pb[3],pc[3],pd[3],pt[13];
1302 numeral(ia,pa,3);
1303 numeral(ib,pb,3);
1304 numeral(ic,pc,3);
1305 numeral(id,pd,3);
1306 strcpy(pt,pa);
1307 strcat(pt,pb);
1308 strcat(pt,pc);
1309 strcat(pt,pd);
1310 for (i=0; i < ooplane_k.nopbend; i++)
1311 {
1312 if (strcmp(pt,ooplane_k.iopb[i]) == 0)
1313 {
1314 ooplane_k.copb[i] = ftemp;
1315 return TRUE;
1316 }
1317 }
1318 return FALSE;
1319 }
1320 /* ========================================== */
1321 int check_dipoleconst(int ia,int ib,float bmom)
1322 {
1323 int i;
1324 char pa[3],pb[3],pt[13];
1325
1326 numeral(ia,pa,3);
1327 numeral(ib,pb,3);
1328 strcpy(pt,pa); strcat(pt,pb);
1329 for (i=0; i < dipole_k.ndipole; i++)
1330 {
1331 if (strcmp(pt,dipole_k.kb[i]) == 0)
1332 {
1333 dipole_k.bmom[i] = bmom;
1334 return TRUE;
1335 }
1336 }
1337 return FALSE;
1338 }
1339 /* ========================================== */
1340 int check_torsionconst(int ia,int ib,int ic,int id,float v1,float v2, float v3,
1341 int ip1, int ip2, int ip3)
1342 {
1343 int i;
1344 char pa[3],pb[3],pc[3],pd[3],pt[13];
1345
1346 numeral(ia,pa,3);
1347 numeral(ib,pb,3);
1348 numeral(ic,pc,3);
1349 numeral(id,pd,3);
1350 strcpy(pt,pa);
1351 strcat(pt,pb);
1352 strcat(pt,pc);
1353 strcat(pt,pd);
1354 for (i= 0; i < torkn1.ntor; i++)
1355 {
1356 if (strcmp(pt,torkn1.kv[i]) == 0)
1357 {
1358 torkn1.tv1[i] = v1;
1359 torkn1.tv2[i] = v2;
1360 torkn1.tv3[i] = v3;
1361 return TRUE;
1362 }
1363 }
1364 return FALSE;
1365 }
1366 /* ========================================== */
1367 int check_torsion4const(int ia,int ib,int ic,int id,float v1,float v2, float v3,
1368 int ip1, int ip2, int ip3)
1369 {
1370 int i;
1371 char pa[3],pb[3],pc[3],pd[3],pt[13];
1372
1373 numeral(ia,pa,3);
1374 numeral(ib,pb,3);
1375 numeral(ic,pc,3);
1376 numeral(id,pd,3);
1377 strcpy(pt,pa);
1378 strcat(pt,pb);
1379 strcat(pt,pc);
1380 strcat(pt,pd);
1381 for (i= 0; i < torkn1.ntor4; i++)
1382 {
1383 if (strcmp(pt,torkn1.kv4[i]) == 0)
1384 {
1385 torkn1.tv41[i] = v1;
1386 torkn1.tv42[i] = v2;
1387 torkn1.tv43[i] = v3;
1388 return TRUE;
1389 }
1390 }
1391 return FALSE;
1392 }
1393 /* ========================================== */
1394 int check_torsion5const(int ia,int ib,int ic,int id,float v1,float v2, float v3,
1395 int ip1, int ip2, int ip3)
1396 {
1397 int i;
1398 char pa[3],pb[3],pc[3],pd[3],pt[13];
1399
1400 numeral(ia,pa,3);
1401 numeral(ib,pb,3);
1402 numeral(ic,pc,3);
1403 numeral(id,pd,3);
1404 strcpy(pt,pa);
1405 strcat(pt,pb);
1406 strcat(pt,pc);
1407 strcat(pt,pd);
1408 for (i= 0; i < torkn1.ntor5; i++)
1409 {
1410 if (strcmp(pt,torkn1.kv5[i]) == 0)
1411 {
1412 torkn1.tv51[i] = v1;
1413 torkn1.tv52[i] = v2;
1414 torkn1.tv53[i] = v3;
1415 return TRUE;
1416 }
1417 }
1418 return FALSE;
1419 }
1420 /* ========================================== */
1421 int check_angleconst(int ia,int ib,int ic,float f1, float f2,float f3,float f4)
1422 {
1423 int i;
1424 char pa[3],pb[3],pc[3],pt[13];
1425
1426 numeral(ia,pa,3);
1427 numeral(ib,pb,3);
1428 numeral(ic,pc,3);
1429 strcpy(pt,pa);
1430 strcat(pt,pb);
1431 strcat(pt,pc);
1432 for (i=0; i < angk1.nang; i++)
1433 {
1434 if (strcmp(pt,angk1.ktype[i]) == 0)
1435 {
1436 angk1.con[i] = f1;
1437 angk1.ang[i][0] = f2;
1438 angk1.ang[i][1] = f3;
1439 angk1.ang[i][2] = f4;
1440 return TRUE;
1441 }
1442 }
1443 return FALSE;
1444 }
1445 /* ========================================== */
1446 int check_angle5const(int ia,int ib,int ic,float f1, float f2,float f3,float f4)
1447 {
1448 int i;
1449 char pa[3],pb[3],pc[3],pt[13];
1450
1451 numeral(ia,pa,3);
1452 numeral(ib,pb,3);
1453 numeral(ic,pc,3);
1454 strcpy(pt,pa);
1455 strcat(pt,pb);
1456 strcat(pt,pc);
1457 for (i=0; i < angk1.nang5; i++)
1458 {
1459 if (strcmp(pt,angk1.ktype5[i]) == 0)
1460 {
1461 angk1.con5[i] = f1;
1462 angk1.ang5[i][0] = f2;
1463 angk1.ang5[i][1] = f3;
1464 angk1.ang5[i][2] = f4;
1465 return TRUE;
1466 }
1467 }
1468 return FALSE;
1469 }
1470 /* ========================================== */
1471 int check_angle4const(int ia,int ib,int ic,float f1, float f2,float f3,float f4)
1472 {
1473 int i;
1474 char pa[3],pb[3],pc[3],pt[13];
1475
1476 numeral(ia,pa,3);
1477 numeral(ib,pb,3);
1478 numeral(ic,pc,3);
1479 strcpy(pt,pa);
1480 strcat(pt,pb);
1481 strcat(pt,pc);
1482 for (i=0; i < angk1.nang4; i++)
1483 {
1484 if (strcmp(pt,angk1.ktype4[i]) == 0)
1485 {
1486 angk1.con4[i] = f1;
1487 angk1.ang4[i][0] = f2;
1488 angk1.ang4[i][1] = f3;
1489 angk1.ang4[i][2] = f4;
1490 return TRUE;
1491 }
1492 }
1493 return FALSE;
1494 }
1495 /* ========================================== */
1496 int check_angle3const(int ia,int ib,int ic,float f1, float f2,float f3,float f4)
1497 {
1498 int i;
1499 char pa[3],pb[3],pc[3],pt[13];
1500
1501 numeral(ia,pa,3);
1502 numeral(ib,pb,3);
1503 numeral(ic,pc,3);
1504 strcpy(pt,pa);
1505 strcat(pt,pb);
1506 strcat(pt,pc);
1507 for (i=0; i < angk1.nang3; i++)
1508 {
1509 if (strcmp(pt,angk1.ktype3[i]) == 0)
1510 {
1511 angk1.con3[i] = f1;
1512 angk1.ang3[i][0] = f2;
1513 angk1.ang3[i][1] = f3;
1514 angk1.ang3[i][2] = f4;
1515 return TRUE;
1516 }
1517 }
1518 return FALSE;
1519 }
1520 /* ========================================== */
1521 int check_bondconst(int ia,int ib,float f1, float f2)
1522 {
1523 int i;
1524 char pa[3],pb[3],pt[13];
1525
1526 numeral(ia,pa,3);
1527 numeral(ib,pb,3);
1528 strcpy(pt,pa);
1529 strcat(pt,pb);
1530 for (i=0; i < bondk1.nbnd; i++)
1531 {
1532 if (strcmp(pt,bondk1.kb[i]) == 0)
1533 {
1534 bondk1.s[i] = f1;
1535 bondk1.t[i] = f2;
1536 return TRUE;
1537 }
1538 }
1539 return FALSE;
1540 }
1541 /* ========================================== */
1542 int check_bond5const(int ia,int ib,float f1, float f2)
1543 {
1544 int i;
1545 char pa[3],pb[3],pt[13];
1546
1547 numeral(ia,pa,3);
1548 numeral(ib,pb,3);
1549 strcpy(pt,pa);
1550 strcat(pt,pb);
1551 for (i=0; i < bondk1.nbnd5; i++)
1552 {
1553 if (strcmp(pt,bondk1.kb5[i]) == 0)
1554 {
1555 bondk1.s5[i] = f1;
1556 bondk1.t5[i] = f2;
1557 return TRUE;
1558 }
1559 }
1560 return FALSE;
1561 }
1562 /* ========================================== */
1563 int check_bond4const(int ia,int ib,float f1, float f2)
1564 {
1565 int i;
1566 char pa[3],pb[3],pt[13];
1567
1568 numeral(ia,pa,3);
1569 numeral(ib,pb,3);
1570 strcpy(pt,pa);
1571 strcat(pt,pb);
1572 for (i=0; i < bondk1.nbnd4; i++)
1573 {
1574 if (strcmp(pt,bondk1.kb4[i]) == 0)
1575 {
1576 bondk1.s4[i] = f1;
1577 bondk1.t4[i] = f2;
1578 return TRUE;
1579 }
1580 }
1581 return FALSE;
1582 }
1583 /* ========================================== */
1584 int check_bond3const(int ia,int ib,float f1, float f2)
1585 {
1586 int i;
1587 char pa[3],pb[3],pt[13];
1588
1589 numeral(ia,pa,3);
1590 numeral(ib,pb,3);
1591 strcpy(pt,pa);
1592 strcat(pt,pb);
1593 for (i=0; i < bondk1.nbnd3; i++)
1594 {
1595 if (strcmp(pt,bondk1.kb3[i]) == 0)
1596 {
1597 bondk1.s3[i] = f1;
1598 bondk1.t3[i] = f2;
1599 return TRUE;
1600 }
1601 }
1602 return FALSE;
1603 }
1604 /* ============================================= */
1605 void read_datafiles(char *datafile)
1606 {
1607 char filename[256];
1608
1609 char *ev = NULL;
1610
1611 if ( (ev=getenv("ENGINE_DIR")) != NULL)
1612 {
1613 strcpy(filename,ev);
1614 strcat(filename,"/");
1615 strcat(filename,datafile);
1616 } else
1617 strcpy(filename,datafile);
1618 read_parameterfile(filename);
1619 return;
1620 }
1621 // =================================================
1622 void read_parameterfile(char *string)
1623 {
1624 char line[151], dumm[21], iptemp[21];
1625 char pa[4],pb[4],pt[7];
1626 char pc[4],pd[4],pang[10],ptor[13];
1627 int iz;
1628 int ihtype,lpde,ihdonor;
1629 float radius,epsilon,alpha,ntmp,atmp,gtmp;
1630 float v1[6];
1631 int se1[6];
1632 int iser, inumber, iligand, iclass, iclass1, iclass2, ivalence;
1633 char symbol[3], descript[25];
1634 float wtt;
1635 float charge, fchrg,tchrg;
1636 int i, iatm1, iatm2, ii, ja,
1637 jb, kk, kp1, kp2, kp3, kp4, kt1, kt2, kt3;
1638 FILE *datafile;
1639
1640
1641 datafile = fopen(string, "rt");
1642
1643 if (datafile == NULL)
1644 {
1645 char message[80];
1646 sprintf(message,"Unable to open the data file %s.\nPlease check that this file was installed\n and is in the same directory as PCWIN",string);
1647 message_alert(message,"Read Parameter");
1648 printf("Unable to open the data file %s.\nPlease check that this file was installed\n and is in the same directory as PCWIN\n",string);
1649 fclose(datafile);
1650 return;
1651 }
1652
1653 while ( FetchRecord(datafile,line))
1654 {
1655 sscanf(line,"%s",iptemp);
1656 /* force field descriptors */
1657 if (strcmp(iptemp,"forcefield") == 0)
1658 {
1659 sscanf(line,"%s %s",dumm, field.name);
1660 if (strcmp(field.name,"AMBER95") == 0)
1661 field.type = AMBER;
1662 else if (strcmp(field.name,"MMX") == 0)
1663 field.type = MMX;
1664 else if (strcmp(field.name,"MM2-1991") == 0)
1665 field.type = MM2;
1666 else if (strcmp(field.name,"MM2-PLUS") == 0)
1667 field.type = MM2;
1668 else if (strcmp(field.name,"MM3-1992") == 0 || strcmp(field.name,"MM3-1996") == 0 )
1669 field.type = MM3;
1670 else if (strcmp(field.name,"CHARMM22-PROTEIN") == 0)
1671 field.type = CHARMM;
1672 else if (strcmp(field.name,"MMFF94") == 0)
1673 field.type = MMFF94;
1674 else if (strcmp(field.name,"OPLSAA") == 0)
1675 field.type = OPLSAA;
1676 else
1677 field.type = UNKNOWN;
1678 } else if (strcmp(iptemp,"bondunit") == 0)
1679 {
1680 sscanf(line,"%s %f",dumm, &field.bondunit);
1681 units.bndunit = field.bondunit;
1682 } else if (strcmp(iptemp,"bond-cubic") == 0)
1683 {
1684 sscanf(line,"%s %f",dumm, &field.bond_cubic);
1685 units.cbnd = field.bond_cubic;
1686 } else if (strcmp(iptemp,"bond-quartic") == 0)
1687 {
1688 sscanf(line,"%s %f",dumm, &field.bond_quartic);
1689 units.qbnd = field.bond_quartic;
1690 } else if (strcmp(iptemp,"angleunit") == 0)
1691 {
1692 sscanf(line,"%s %f",dumm, &field.angleunit);
1693 units.angunit = field.angleunit;
1694 } else if (strcmp(iptemp,"angle-cubic") == 0)
1695 {
1696 sscanf(line,"%s %f",dumm, &field.angle_cubic);
1697 units.cang = field.angle_cubic;
1698 } else if (strcmp(iptemp,"angle-quartic") == 0)
1699 {
1700 sscanf(line,"%s %f",dumm, &field.angle_quartic);
1701 units.qang = field.angle_quartic;
1702 } else if (strcmp(iptemp,"angle-pentic") == 0)
1703 {
1704 sscanf(line,"%s %f",dumm, &field.angle_pentic);
1705 units.pang = field.angle_pentic;
1706 } else if (strcmp(iptemp,"angle-sextic") == 0)
1707 {
1708 sscanf(line,"%s %f",dumm, &field.angle_sextic);
1709 units.sang = field.angle_sextic;
1710 } else if (strcmp(iptemp,"str-bndunit") == 0)
1711 {
1712 sscanf(line,"%s %f",dumm, &field.str_bndunit);
1713 units.stbnunit = field.str_bndunit;
1714 } else if (strcmp(iptemp,"ang-angunit") == 0)
1715 {
1716 sscanf(line,"%s %f",dumm, &field.ang_angunit);
1717 units.aaunit = field.ang_angunit;
1718 } else if (strcmp(iptemp,"torsionunit") == 0)
1719 {
1720 sscanf(line,"%s %f",dumm, &field.torsionunit);
1721 units.torsunit = field.torsionunit;
1722 } else if (strcmp(iptemp,"str-torunit") == 0)
1723 {
1724 sscanf(line,"%s %f",dumm, &field.str_torunit);
1725 units.storunit = field.str_torunit;
1726 } else if (strcmp(iptemp,"vdwtype") == 0)
1727 {
1728 sscanf(line,"%s %s",dumm, field.vdwtype);
1729 if (strcmp(field.vdwtype ,"LENNARD-JONES") == 0)
1730 pot.use_lj = TRUE;
1731 else if (strcmp(field.vdwtype ,"BUCKINGHAM") == 0)
1732 pot.use_buck = TRUE;
1733 else if (strcmp(field.vdwtype ,"BUFFERED-14-7") == 0)
1734 pot.use_hal = TRUE;
1735 else if (strcmp(field.vdwtype ,"BGAUSSIAN") == 0)
1736 pot.use_gauss = TRUE;
1737 } else if (strcmp(iptemp,"radiustype") == 0)
1738 {
1739 sscanf(line,"%s %s",dumm, field.radiustype);
1740 } else if (strcmp(iptemp,"radiussize") == 0)
1741 {
1742 sscanf(line,"%s %s",dumm, field.radiussize);
1743 } else if (strcmp(iptemp,"radiusrule") == 0)
1744 {
1745 sscanf(line,"%s %s",dumm, field.radiusrule);
1746 } else if (strcmp(iptemp,"epsilonrule") == 0)
1747 {
1748 sscanf(line,"%s %s",dumm, field.epsrule);
1749 } else if (strcmp(iptemp,"a-expterm") == 0)
1750 {
1751 sscanf(line,"%s %f",dumm, &field.a_expterm);
1752 units.aterm = field.a_expterm;
1753 } else if (strcmp(iptemp,"b-expterm") == 0)
1754 {
1755 sscanf(line,"%s %f",dumm, &field.b_expterm);
1756 units.bterm = field.b_expterm;
1757 } else if (strcmp(iptemp,"c-expterm") == 0)
1758 {
1759 sscanf(line,"%s %f",dumm, &field.c_expterm);
1760 units.cterm = field.c_expterm;
1761 } else if (strcmp(iptemp,"vdw-14-scale") == 0)
1762 {
1763 sscanf(line,"%s %f",dumm, &field.vdw_14scale);
1764 units.v14scale = field.vdw_14scale;
1765 } else if (strcmp(iptemp,"dielectric") == 0)
1766 {
1767 sscanf(line,"%s %f",dumm, &field.dielectric);
1768 if (user.dielec == FALSE)
1769 units.dielec = field.dielectric;
1770 } else if (strcmp(iptemp,"chg-14-scale") == 0)
1771 {
1772 sscanf(line,"%s %f",dumm, &field.chg_14scale);
1773 units.chgscale = field.chg_14scale;
1774 } else if (strcmp(iptemp,"atom") == 0) /* atom type descriptors */
1775 {
1776 if (atom_k.natomtype >= MAXATOMTYPE )
1777 {
1778 message_alert("Error - Too many atom types","Read Parameter");
1779 printf("Maximum number of atom types exceeded. Others will be ignored\n");
1780 fclose(datafile);
1781 return;
1782 }
1783
1784 sscanf(line, "%s %d %s %22c %d %f %d %d %d %d %d",dumm,&iser, symbol, descript, &inumber, &wtt,
1785 &iligand, &ivalence, &iclass, &iclass1, &iclass2);
1786
1787 atom_k.type[iser] = iser;
1788 strcpy(atom_k.symbol[iser], symbol);
1789 strcpy(atom_k.description[iser], descript);
1790 atom_k.description[iser][20] = '\0';
1791 atom_k.number[iser] = inumber;
1792 atom_k.weight[iser] = wtt;
1793 atom_k.ligands[iser] = iligand;
1794 atom_k.tclass[iser] = iclass;
1795 atom_k.valency[iser] = ivalence;
1796 atom_k.tclass1[iser] = iclass1;
1797 atom_k.tclass2[iser] = iclass2;
1798 atom_k.natomtype++;
1799 } else if ( strcmp(iptemp,"metal") == 0) /* metal data */
1800 {
1801 if (metaldata.nmetal > 200)
1802 {
1803 message_alert("Error-Too many metals in Parameter file","Read Parameter");
1804 fclose(datafile);
1805 return;
1806 }
1807 sscanf(line,"%s %d %s %f %f",dumm,&metaldata.type[metaldata.nmetal], metaldata.name[metaldata.nmetal],&metaldata.radius[metaldata.nmetal],
1808 &metaldata.eps[metaldata.nmetal]);
1809 metaldata.nmetal++;
1810 } else if( strcmp(iptemp,"bond") == 0 ) /* bond constants */
1811 {
1812 if (bondk1.nbnd >= MAXBONDCONST)
1813 {
1814 message_alert("Error - Too many bond constants","Read Parameter");
1815 printf("Maximum number of bond constants exceeded. Others will be ignored\n");
1816 fclose(datafile);
1817 return;
1818 }
1819
1820 sscanf( line, "%s %d %d %f %f", dumm, &ii, &kk,
1821 &bondk1.s[bondk1.nbnd], &bondk1.t[bondk1.nbnd]);
1822 numeral(ii,pa,3);
1823 numeral(kk,pb,3);
1824 strcpy(pt,pa);
1825 strcat(pt,pb);
1826 strcpy(bondk1.kb[bondk1.nbnd],pt);
1827 bondk1.nbnd++;
1828 } else if( strcmp(iptemp,"bond3") == 0 ) /* bond constants */
1829 {
1830 if (bondk1.nbnd3 >= MAXBOND3CONST)
1831 {
1832 message_alert("Error - Too many bond3 constants","Read Parameter");
1833 printf("Maximum number of bond3 constants exceeded. Others will be ignored\n");
1834 fclose(datafile);
1835 return;
1836 }
1837
1838 sscanf( line, "%s %d %d %f %f", dumm, &ii, &kk,
1839 &bondk1.s3[bondk1.nbnd3], &bondk1.t3[bondk1.nbnd3]);
1840 numeral(ii,pa,3);
1841 numeral(kk,pb,3);
1842 strcpy(pt,pa);
1843 strcat(pt,pb);
1844 strcpy(bondk1.kb3[bondk1.nbnd3],pt);
1845 // bondk1.kb3[bondk1.nbnd3] = ii*100 + kk;
1846 bondk1.nbnd3++;
1847 } else if( strcmp(iptemp,"bond4") == 0 ) /* bond constants */
1848 {
1849 if (bondk1.nbnd4 >= MAXBOND4CONST)
1850 {
1851 message_alert("Error - Too many bond4 constants","Read Parameter");
1852 printf("Maximum number of bond4 constants exceeded. Others will be ignored\n");
1853 fclose(datafile);
1854 return;
1855 }
1856
1857 sscanf( line, "%s %d %d %f %f", dumm, &ii, &kk,
1858 &bondk1.s4[bondk1.nbnd4], &bondk1.t4[bondk1.nbnd4]);
1859 numeral(ii,pa,3);
1860 numeral(kk,pb,3);
1861 strcpy(pt,pa);
1862 strcat(pt,pb);
1863 strcpy(bondk1.kb4[bondk1.nbnd4],pt);
1864 // bondk1.kb4[bondk1.nbnd4] = ii*100 + kk;
1865 bondk1.nbnd4++;
1866 } else if( strcmp(iptemp,"bond5") == 0 ) /* bond constants */
1867 {
1868 if (bondk1.nbnd5>= MAXBOND5CONST)
1869 {
1870 message_alert("Error - Too many bond5 constants","Read Parameter");
1871 printf("Maximum number of bond5 constants exceeded. Others will be ignored\n");
1872 fclose(datafile);
1873 return;
1874 }
1875
1876 sscanf( line, "%s %d %d %f %f", dumm, &ii, &kk,
1877 &bondk1.s5[bondk1.nbnd5], &bondk1.t5[bondk1.nbnd5]);
1878 numeral(ii,pa,3);
1879 numeral(kk,pb,3);
1880 strcpy(pt,pa);
1881 strcat(pt,pb);
1882 strcpy(bondk1.kb5[bondk1.nbnd5],pt);
1883 bondk1.nbnd5++;
1884 } else if( strcmp(iptemp,"bonddel") == 0 ) /* bond constants */
1885 {
1886 if (bondk1.ndeloc>= MAXBONDDELOC)
1887 {
1888 message_alert("Error - Too many delocalized bond constants","Read Parameter");
1889 printf("Maximum number of delocalized bond constants exceeded. Others will be ignored\n");
1890 fclose(datafile);
1891 return;
1892 }
1893
1894 sscanf( line, "%s %d %d %f %f", dumm, &ii, &kk,
1895 &bondk1.sdel[bondk1.ndeloc], &bondk1.tdel[bondk1.ndeloc]);
1896 numeral(ii,pa,3);
1897 numeral(kk,pb,3);
1898 strcpy(pt,pa);
1899 strcat(pt,pb);
1900 strcpy(bondk1.kbdel[bondk1.ndeloc],pt);
1901 bondk1.ndeloc++;
1902 } else if (strcmp(iptemp, "electroi") == 0)
1903 {
1904 sscanf(line,"%s %d %d %d %f",dumm,&electroneg.itype[electroneg.nelecti],
1905 &electroneg.ibond[electroneg.nelecti],
1906 &electroneg.iattach[electroneg.nelecti],
1907 &electroneg.icorr[electroneg.nelecti]);
1908 electroneg.nelecti++;
1909 } else if (strcmp(iptemp, "electroj") == 0)
1910 {
1911 sscanf(line,"%s %d %d %d %f",dumm,&electroneg.jtype[electroneg.nelectj],
1912 &electroneg.jbond[electroneg.nelectj],
1913 &electroneg.jattach[electroneg.nelectj],
1914 &electroneg.jcorr[electroneg.nelectj]);
1915 electroneg.nelectj++;
1916 } else if (strcmp(iptemp, "piatom") == 0)
1917 {
1918 if (piatomk.npiatom > MAXPIATOM)
1919 {
1920 message_alert("Error - Too many piatom constants","Read Parameter");
1921 printf("Maximum number of piatom constants exceeded. Others will be ignored\n");
1922 fclose(datafile);
1923 return;
1924 }
1925 sscanf(line,"%s %d %f %f %f %f %f %f %f %f %d", dumm, &piatomk.kat[piatomk.npiatom],
1926 &piatomk.q[piatomk.npiatom], &piatomk.ion[piatomk.npiatom], &piatomk.emz[piatomk.npiatom],
1927 &piatomk.zor[piatomk.npiatom],&piatomk.zz[piatomk.npiatom], &piatomk.w1[piatomk.npiatom],
1928 &piatomk.w2[piatomk.npiatom], &piatomk.w3[piatomk.npiatom],&piatomk.qp[piatomk.npiatom]);
1929 piatomk.npiatom++;
1930 } else if (strcmp(iptemp, "pibond40") == 0)
1931 {
1932 if (bondpk.npibond40 > 20 )
1933 {
1934 }
1935 bondpk.use_pibond40 = TRUE;
1936 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
1937 &bondpk.bk40[bondpk.npibond40], &bondpk.bl40[bondpk.npibond40], &bondpk.bmom40[bondpk.npibond40],
1938 &bondpk.sslop40[bondpk.npibond40], &bondpk.tslop40[bondpk.npibond40], &bondpk.tslop240[bondpk.npibond40]);
1939 numeral(ii,pa,3);
1940 numeral(kk,pb,3);
1941 strcpy(pt,pa);
1942 strcat(pt,pb);
1943 strcpy(bondpk.kb40[bondpk.npibond40],pt);
1944 bondpk.npibond40++;
1945 } else if (strcmp(iptemp, "pibond50") == 0)
1946 {
1947 if (bondpk.npibond50 > 20 )
1948 {
1949 }
1950 bondpk.use_pibond50 = TRUE;
1951 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
1952 &bondpk.bk50[bondpk.npibond50], &bondpk.bl50[bondpk.npibond50], &bondpk.bmom50[bondpk.npibond50],
1953 &bondpk.sslop50[bondpk.npibond50], &bondpk.tslop50[bondpk.npibond50], &bondpk.tslop250[bondpk.npibond50]);
1954 numeral(ii,pa,3);
1955 numeral(kk,pb,3);
1956 strcpy(pt,pa);
1957 strcat(pt,pb);
1958 strcpy(bondpk.kb50[bondpk.npibond50],pt);
1959 bondpk.npibond50++;
1960 } else if (strcmp(iptemp, "pibond60") == 0)
1961 {
1962 if (bondpk.npibond60 > 20 )
1963 {
1964 }
1965 bondpk.use_pibond60 = TRUE;
1966 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
1967 &bondpk.bk60[bondpk.npibond60], &bondpk.bl60[bondpk.npibond60], &bondpk.bmom60[bondpk.npibond60],
1968 &bondpk.sslop60[bondpk.npibond60], &bondpk.tslop60[bondpk.npibond60], &bondpk.tslop260[bondpk.npibond60]);
1969 numeral(ii,pa,3);
1970 numeral(kk,pb,3);
1971 strcpy(pt,pa);
1972 strcat(pt,pb);
1973 strcpy(bondpk.kb60[bondpk.npibond60],pt);
1974 bondpk.npibond60++;
1975 } else if (strcmp(iptemp, "pibond44i") == 0)
1976 {
1977 if (bondpk.npibond44i > 20 )
1978 {
1979 }
1980 bondpk.use_pibond44i = TRUE;
1981 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
1982 &bondpk.bk44i[bondpk.npibond44i], &bondpk.bl44i[bondpk.npibond44i], &bondpk.bmom44i[bondpk.npibond44i],
1983 &bondpk.sslop44i[bondpk.npibond44i], &bondpk.tslop44i[bondpk.npibond44i], &bondpk.tslop244i[bondpk.npibond44i]);
1984 numeral(ii,pa,3);
1985 numeral(kk,pb,3);
1986 strcpy(pt,pa);
1987 strcat(pt,pb);
1988 strcpy(bondpk.kb44i[bondpk.npibond44i],pt);
1989 bondpk.npibond44i++;
1990 } else if (strcmp(iptemp, "pibond45i") == 0)
1991 {
1992 if (bondpk.npibond45i > 20 )
1993 {
1994 }
1995 bondpk.use_pibond45i = TRUE;
1996 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
1997 &bondpk.bk45i[bondpk.npibond45i], &bondpk.bl45i[bondpk.npibond45i], &bondpk.bmom45i[bondpk.npibond45i],
1998 &bondpk.sslop45i[bondpk.npibond45i], &bondpk.tslop45i[bondpk.npibond45i], &bondpk.tslop245i[bondpk.npibond45i]);
1999 numeral(ii,pa,3);
2000 numeral(kk,pb,3);
2001 strcpy(pt,pa);
2002 strcat(pt,pb);
2003 strcpy(bondpk.kb45i[bondpk.npibond45i],pt);
2004 bondpk.npibond45i++;
2005 } else if (strcmp(iptemp, "pibond46i") == 0)
2006 {
2007 if (bondpk.npibond46i > 20 )
2008 {
2009 }
2010 bondpk.use_pibond46i = TRUE;
2011 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2012 &bondpk.bk46i[bondpk.npibond46i], &bondpk.bl46i[bondpk.npibond46i], &bondpk.bmom46i[bondpk.npibond46i],
2013 &bondpk.sslop46i[bondpk.npibond46i], &bondpk.tslop46i[bondpk.npibond46i], &bondpk.tslop246i[bondpk.npibond46i]);
2014 numeral(ii,pa,3);
2015 numeral(kk,pb,3);
2016 strcpy(pt,pa);
2017 strcat(pt,pb);
2018 strcpy(bondpk.kb46i[bondpk.npibond46i],pt);
2019 bondpk.npibond46i++;
2020 } else if (strcmp(iptemp, "pibond55i") == 0)
2021 {
2022 if (bondpk.npibond55i > 20 )
2023 {
2024 }
2025 bondpk.use_pibond55i = TRUE;
2026 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2027 &bondpk.bk55i[bondpk.npibond55i], &bondpk.bl55i[bondpk.npibond55i], &bondpk.bmom55i[bondpk.npibond55i],
2028 &bondpk.sslop55i[bondpk.npibond55i], &bondpk.tslop55i[bondpk.npibond55i], &bondpk.tslop255i[bondpk.npibond55i]);
2029 numeral(ii,pa,3);
2030 numeral(kk,pb,3);
2031 strcpy(pt,pa);
2032 strcat(pt,pb);
2033 strcpy(bondpk.kb55i[bondpk.npibond55i],pt);
2034 bondpk.npibond55i++;
2035 } else if (strcmp(iptemp, "pibond56i") == 0)
2036 {
2037 if (bondpk.npibond56i > 20 )
2038 {
2039 }
2040 bondpk.use_pibond56i = TRUE;
2041 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2042 &bondpk.bk56i[bondpk.npibond56i], &bondpk.bl56i[bondpk.npibond56i], &bondpk.bmom56i[bondpk.npibond56i],
2043 &bondpk.sslop56i[bondpk.npibond56i], &bondpk.tslop56i[bondpk.npibond56i], &bondpk.tslop256i[bondpk.npibond56i]);
2044 numeral(ii,pa,3);
2045 numeral(kk,pb,3);
2046 strcpy(pt,pa);
2047 strcat(pt,pb);
2048 strcpy(bondpk.kb56i[bondpk.npibond56i],pt);
2049 bondpk.npibond56i++;
2050 } else if (strcmp(iptemp, "pibond66i") == 0)
2051 {
2052 if (bondpk.npibond66i > 20 )
2053 {
2054 }
2055 bondpk.use_pibond66i = TRUE;
2056 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2057 &bondpk.bk66i[bondpk.npibond66i], &bondpk.bl66i[bondpk.npibond66i], &bondpk.bmom66i[bondpk.npibond66i],
2058 &bondpk.sslop66i[bondpk.npibond66i], &bondpk.tslop66i[bondpk.npibond66i], &bondpk.tslop266i[bondpk.npibond66i]);
2059 numeral(ii,pa,3);
2060 numeral(kk,pb,3);
2061 strcpy(pt,pa);
2062 strcat(pt,pb);
2063 strcpy(bondpk.kb66i[bondpk.npibond66i],pt);
2064 bondpk.npibond66i++;
2065 } else if (strcmp(iptemp, "pibond44o") == 0)
2066 {
2067 if (bondpk.npibond44o > 20 )
2068 {
2069 }
2070 bondpk.use_pibond44o = TRUE;
2071 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2072 &bondpk.bk44o[bondpk.npibond44o], &bondpk.bl44o[bondpk.npibond44o], &bondpk.bmom44o[bondpk.npibond44o],
2073 &bondpk.sslop44o[bondpk.npibond44o], &bondpk.tslop44o[bondpk.npibond44o], &bondpk.tslop244o[bondpk.npibond44o]);
2074 numeral(ii,pa,3);
2075 numeral(kk,pb,3);
2076 strcpy(pt,pa);
2077 strcat(pt,pb);
2078 strcpy(bondpk.kb44o[bondpk.npibond44o],pt);
2079 bondpk.npibond44o++;
2080 } else if (strcmp(iptemp, "pibond45o") == 0)
2081 {
2082 if (bondpk.npibond45o > 20 )
2083 {
2084 }
2085 bondpk.use_pibond45o = TRUE;
2086 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2087 &bondpk.bk45o[bondpk.npibond45o], &bondpk.bl45o[bondpk.npibond45o], &bondpk.bmom45o[bondpk.npibond45o],
2088 &bondpk.sslop45o[bondpk.npibond45o], &bondpk.tslop45o[bondpk.npibond45o], &bondpk.tslop245o[bondpk.npibond45o]);
2089 numeral(ii,pa,3);
2090 numeral(kk,pb,3);
2091 strcpy(pt,pa);
2092 strcat(pt,pb);
2093 strcpy(bondpk.kb45o[bondpk.npibond45o],pt);
2094 bondpk.npibond45o++;
2095 } else if (strcmp(iptemp, "pibond46o") == 0)
2096 {
2097 if (bondpk.npibond46o > 20 )
2098 {
2099 }
2100 bondpk.use_pibond46o = TRUE;
2101 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2102 &bondpk.bk46o[bondpk.npibond46o], &bondpk.bl46o[bondpk.npibond46o], &bondpk.bmom46o[bondpk.npibond46o],
2103 &bondpk.sslop46o[bondpk.npibond46o], &bondpk.tslop46o[bondpk.npibond46o], &bondpk.tslop246o[bondpk.npibond46o]);
2104 numeral(ii,pa,3);
2105 numeral(kk,pb,3);
2106 strcpy(pt,pa);
2107 strcat(pt,pb);
2108 strcpy(bondpk.kb46o[bondpk.npibond46o],pt);
2109 bondpk.npibond46o++;
2110 } else if (strcmp(iptemp, "pibond55o") == 0)
2111 {
2112 if (bondpk.npibond55o > 20 )
2113 {
2114 }
2115 bondpk.use_pibond55o = TRUE;
2116 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2117 &bondpk.bk55o[bondpk.npibond55o], &bondpk.bl55o[bondpk.npibond55o], &bondpk.bmom55o[bondpk.npibond55o],
2118 &bondpk.sslop55o[bondpk.npibond55o], &bondpk.tslop55o[bondpk.npibond55o], &bondpk.tslop255o[bondpk.npibond55o]);
2119 numeral(ii,pa,3);
2120 numeral(kk,pb,3);
2121 strcpy(pt,pa);
2122 strcat(pt,pb);
2123 strcpy(bondpk.kb55o[bondpk.npibond55o],pt);
2124 bondpk.npibond55o++;
2125 } else if (strcmp(iptemp, "pibond56o") == 0)
2126 {
2127 if (bondpk.npibond56o > 20 )
2128 {
2129 }
2130 bondpk.use_pibond56o = TRUE;
2131 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2132 &bondpk.bk56o[bondpk.npibond56o], &bondpk.bl56o[bondpk.npibond56o], &bondpk.bmom56o[bondpk.npibond56o],
2133 &bondpk.sslop56o[bondpk.npibond56o], &bondpk.tslop56o[bondpk.npibond56o], &bondpk.tslop256o[bondpk.npibond56o]);
2134 numeral(ii,pa,3);
2135 numeral(kk,pb,3);
2136 strcpy(pt,pa);
2137 strcat(pt,pb);
2138 strcpy(bondpk.kb56o[bondpk.npibond56o],pt);
2139 bondpk.npibond56o++;
2140 } else if (strcmp(iptemp, "pibond66o") == 0)
2141 {
2142 if (bondpk.npibond66o > 20 )
2143 {
2144 }
2145 bondpk.use_pibond66o = TRUE;
2146 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2147 &bondpk.bk66o[bondpk.npibond66o], &bondpk.bl66o[bondpk.npibond66o], &bondpk.bmom66o[bondpk.npibond66o],
2148 &bondpk.sslop66o[bondpk.npibond66o], &bondpk.tslop66o[bondpk.npibond66o], &bondpk.tslop266o[bondpk.npibond66o]);
2149 numeral(ii,pa,3);
2150 numeral(kk,pb,3);
2151 strcpy(pt,pa);
2152 strcat(pt,pb);
2153 strcpy(bondpk.kb66o[bondpk.npibond66o],pt);
2154 bondpk.npibond66o++;
2155 } else if (strcmp(iptemp, "pibond") == 0)
2156 {
2157 if (bondpk.npibond > MAXPIBONDCONST )
2158 {
2159 }
2160 bondpk.use_pibond = TRUE;
2161 sscanf(line,"%s %d %d %f %f %f %f %f %f",dumm, &ii, &kk,
2162 &bondpk.bk[bondpk.npibond], &bondpk.bl[bondpk.npibond], &bondpk.bmom[bondpk.npibond],
2163 &bondpk.sslop[bondpk.npibond], &bondpk.tslop[bondpk.npibond], &bondpk.tslop2[bondpk.npibond]);
2164 numeral(ii,pa,3);
2165 numeral(kk,pb,3);
2166 strcpy(pt,pa);
2167 strcat(pt,pb);
2168 strcpy(bondpk.kb[bondpk.npibond],pt);
2169 bondpk.npibond++;
2170 } else if (strcmp(iptemp, "picorrect") == 0)
2171 {
2172 sscanf(line,"%s %f %f %f %f",dumm,&picorrect.fudge1,&picorrect.fudge2,&picorrect.fudge3,
2173 &picorrect.fudge4);
2174 } else if (strcmp(iptemp,"piangle") == 0)
2175 {
2176 if (angkp1.npiang > MAXPIANGCONST)
2177 {
2178 }
2179 sscanf(line,"%s %d %d %d %f %f %f %f",dumm,&kt1,&kt2,&kt3,&angkp1.pacon[angkp1.npiang],
2180 &angkp1.panat[angkp1.npiang][0],&angkp1.panat[angkp1.npiang][1],&angkp1.panat[angkp1.npiang][1]);
2181 numeral(kt1,pa,3);
2182 numeral(kt2,pb,3);
2183 numeral(kt3,pc,3);
2184 strcpy(pt,pa);
2185 strcat(pt,pb); strcat(pt,pc);
2186 strcpy(angkp1.kpa[angkp1.npiang],pt);
2187 angkp1.npiang++;
2188 } else if (strcmp(iptemp,"dipole") == 0)
2189 {
2190 if (dipole_k.ndipole > MAXBONDCONST)
2191 {
2192 message_alert("Error - Too many bond dipoles","Read Parameter");
2193 printf("Maximum number of bond dipole constants exceeded. Others will be ignored\n");
2194 fclose(datafile);
2195 return;
2196 }
2197 sscanf( line,"%s %d %d %f",dumm, &ii, &kk, &radius);
2198 numeral(ii,pa,3);
2199 numeral(kk,pb,3);
2200 strcpy(pt,pa); strcat(pt,pb);
2201 strcpy(dipole_k.kb[dipole_k.ndipole],pt);
2202 dipole_k.bmom[dipole_k.ndipole] = radius;
2203 dipole_k.ndipole++;
2204 } else if (strcmp(iptemp, "charge") == 0)
2205 {
2206 if (charge_k.ncharge > MAXATOMTYPE)
2207 {
2208 message_alert("Error - Too many atom charges","Read Parameter");
2209 printf("Maximum number of atom charge constants exceeded. Others will be ignored\n");
2210 fclose(datafile);
2211 return;
2212 }
2213 sscanf( line,"%s %d %f", dumm, &charge_k.type[charge_k.ncharge], &charge_k.charge[charge_k.ncharge]);
2214 charge_k.ncharge++;
2215 } else if (strcmp(iptemp, "oplschrg") == 0)
2216 {
2217 if (oplschrg_k.ncharge > MAXOPLS)
2218 {
2219 message_alert("Error - Too many opls charges","Read Parameter");
2220 printf("Maximum number of opls charge constants exceeded. Others will be ignored\n");
2221 fclose(datafile);
2222 return;
2223 }
2224 sscanf(line,"%s %d %f %s\n",dumm,&oplschrg_k.type[oplschrg_k.ncharge],&oplschrg_k.chrg[oplschrg_k.ncharge],
2225 oplschrg_k.chrgstring[oplschrg_k.ncharge]);
2226 oplschrg_k.ncharge++;
2227 } else if (strcmp(iptemp, "amberchrg") == 0)
2228 {
2229 if (amberchrg_k.ncharge > MAXATOMTYPE)
2230 {
2231 message_alert("Error - Too many amber charges","Read Parameter");
2232 printf("Maximum number of amber charge constants exceeded. Others will be ignored\n");
2233 fclose(datafile);
2234 return;
2235 }
2236 for (iz=0;iz < 25; iz++) descript[iz] = ' ';
2237
2238 sscanf(line,"%s %d %f %s %25c",dumm,&amberchrg_k.type[amberchrg_k.ncharge],
2239 &amberchrg_k.chrg[amberchrg_k.ncharge],amberchrg_k.symbol[amberchrg_k.ncharge], descript);
2240 for (iz=24; iz > 0; iz--)
2241 {
2242 if ( isalpha(descript[iz]) != 0)
2243 {
2244 descript[iz+1] = '\0';
2245 break;
2246 }
2247 }
2248 if (strcmp(descript,"Glycine") == 0)
2249 amberchrg_k.res_type[amberchrg_k.ncharge] = GLY;
2250 else if (strcmp(descript,"Alanine") == 0)
2251 amberchrg_k.res_type[amberchrg_k.ncharge] = ALA;
2252 else if (strcmp(descript,"Valine") == 0)
2253 amberchrg_k.res_type[amberchrg_k.ncharge] = VAL;
2254 else if (strcmp(descript,"Leucine") == 0)
2255 amberchrg_k.res_type[amberchrg_k.ncharge] = LEU;
2256 else if (strcmp(descript,"Isoleucine") == 0)
2257 amberchrg_k.res_type[amberchrg_k.ncharge] = ILE;
2258 else if (strcmp(descript,"Serine") == 0)
2259 amberchrg_k.res_type[amberchrg_k.ncharge] = SER;
2260 else if (strcmp(descript,"Threonine") == 0)
2261 amberchrg_k.res_type[amberchrg_k.ncharge] = THR;
2262 else if (strcmp(descript,"Cysteine (-SH") == 0)
2263 amberchrg_k.res_type[amberchrg_k.ncharge] = CYSH;
2264 else if (strcmp(descript,"Cystine (-SS") == 0)
2265 amberchrg_k.res_type[amberchrg_k.ncharge] = CYS;
2266 else if (strcmp(descript,"Proline") == 0)
2267 amberchrg_k.res_type[amberchrg_k.ncharge] = PRO;
2268 else if (strcmp(descript,"Phenylalanine") == 0)
2269 amberchrg_k.res_type[amberchrg_k.ncharge] = PHE;
2270 else if (strcmp(descript,"Tyrosine") == 0)
2271 amberchrg_k.res_type[amberchrg_k.ncharge] = TYR;
2272 else if (strcmp(descript,"Tryptophan") == 0)
2273 amberchrg_k.res_type[amberchrg_k.ncharge] = TRP;
2274 else if (strcmp(descript,"Histidine") == 0)
2275 amberchrg_k.res_type[amberchrg_k.ncharge] = HISP;
2276 else if (strcmp(descript,"Histidine (HD") == 0)
2277 amberchrg_k.res_type[amberchrg_k.ncharge] = HIS;
2278 else if (strcmp(descript,"Histidine (HE") == 0)
2279 amberchrg_k.res_type[amberchrg_k.ncharge] = HISE;
2280 else if (strcmp(descript,"Aspartic Acid") == 0)
2281 amberchrg_k.res_type[amberchrg_k.ncharge] = ASP;
2282 else if (strcmp(descript,"Asparagine") == 0)
2283 amberchrg_k.res_type[amberchrg_k.ncharge] = ASN;
2284 else if (strcmp(descript,"Glutamic Acid") == 0)
2285 amberchrg_k.res_type[amberchrg_k.ncharge] = GLU;
2286 else if (strcmp(descript,"Glutamine") == 0)
2287 amberchrg_k.res_type[amberchrg_k.ncharge] = GLN;
2288 else if (strcmp(descript,"Methionine") == 0)
2289 amberchrg_k.res_type[amberchrg_k.ncharge] = MET;
2290 else if (strcmp(descript,"Lysine") == 0)
2291 amberchrg_k.res_type[amberchrg_k.ncharge] = LYS;
2292 else if (strcmp(descript,"Arginine") == 0)
2293 amberchrg_k.res_type[amberchrg_k.ncharge] = ARG;
2294 else
2295 amberchrg_k.res_type[amberchrg_k.ncharge] = UNK;
2296 amberchrg_k.ncharge++;
2297 } else if (strcmp(iptemp, "mmffchrg") == 0)
2298 {
2299 if (charge_k.ncharge > MAXATOMTYPE)
2300 {
2301 message_alert("Error - Too many atom charges","Read Parameter");
2302 printf("Maximum number of atom charge constants exceeded. Others will be ignored\n");
2303 fclose(datafile);
2304 return;
2305 }
2306 sscanf( line,"%s %d %f %f %f", dumm, &i, &charge, &fchrg, &tchrg);
2307 charge_k.type[i] = i;
2308 charge_k.charge[i] = charge;
2309 charge_k.formchrg[i] = fchrg;
2310 charge_k.typechrg[i] = tchrg;
2311 } else if (strcmp(iptemp,"bndchrgdel") == 0)
2312 {
2313 if (charge_k.nbndchrgdel > MAXBONDCONST)
2314 {
2315 message_alert("Error - Too many bond charges","Read Parameter");
2316 printf("Maximum number of bond charge constants exceeded. Others will be ignored\n");
2317 fclose(datafile);
2318 return;
2319 }
2320 sscanf(line,"%s %d %d %f",dumm,&kp1,&kp2,&charge_k.bchargedel[charge_k.nbndchrgdel]);
2321 charge_k.btypedel[charge_k.nbndchrgdel] = kp1*100+kp2;
2322 charge_k.nbndchrgdel++;
2323 } else if (strcmp(iptemp,"bndchrg") == 0)
2324 {
2325 if (charge_k.nbndchrg > MAXBONDCONST)
2326 {
2327 message_alert("Error - Too many bond charges","Read Parameter");
2328 printf("Maximum number of bond charge constants exceeded. Others will be ignored\n");
2329 fclose(datafile);
2330 return;
2331 }
2332 sscanf(line,"%s %d %d %f",dumm,&kp1,&kp2,&charge_k.bcharge[charge_k.nbndchrg]);
2333 charge_k.btype[charge_k.nbndchrg] = kp1*100+kp2;
2334 charge_k.nbndchrg++;
2335 } else if (strcmp(iptemp,"vdwmmff") == 0)
2336 {
2337 if (vdw1.nvdw > MAXVDWCONST)
2338 {
2339 message_alert("Error - Too many vdw constants","Read Parameter");
2340 printf("Maximum number of vdw constants exceeded. Others will be ignored\n");
2341 fclose(datafile);
2342 return;
2343 }
2344 sscanf( line, "%s %d %f %f %f %f %s", dumm, &i, &alpha, &ntmp, &atmp, &gtmp, symbol);
2345 vdw1.alpha[i] = alpha;
2346 vdw1.n[i] = ntmp;
2347 vdw1.a[i] = atmp;
2348 vdw1.g[i] = gtmp;
2349 strcpy(vdw1.da[i],symbol);
2350 vdw1.nvdw++;
2351 } else if( strcmp(iptemp,"vdw") == 0 )
2352 {
2353 if (vdw1.nvdw > MAXVDWCONST)
2354 {
2355 message_alert("Error - Too many vdw constants","Read Parameter");
2356 printf("Maximum number of vdw constants exceeded. Others will be ignored\n");
2357 fclose(datafile);
2358 return;
2359 }
2360 sscanf( line, "%s %d %f %f %d %d %d", dumm, &i, &radius, &epsilon, &lpde, &ihtype, &ihdonor);
2361
2362 vdw1.rad[i] = radius;
2363 vdw1.eps[i] = epsilon;
2364 vdw1.lpd[i] = lpde;
2365 vdw1.ihdon[i] = ihdonor;
2366 vdw1.ihtyp[i] = ihtype;
2367 vdw1.nvdw++;
2368 }
2369 /* torsion read */
2370 else if( strcmp(iptemp,"torsion4") == 0 )
2371 {
2372 if (torkn1.ntor4 >= MAXTOR4CONST)
2373 {
2374 message_alert("Error - Too many torsion 4 constants","Read Parameter");
2375 printf("Maximum number of torsion 4 constants exceeded. Others will be ignored\n");
2376 fclose(datafile);
2377 return;
2378 }
2379 for(i=0; i < 6; i++)
2380 v1[i] = se1[i] = 0.0;
2381 iz = sscanf(line, "%s %d %d %d %d %f %d %f %d %f %d %f %d %f %d %f %d", dumm, &kp1,
2382 &kp2, &kp3, &kp4 ,
2383 &v1[0], &se1[0],&v1[1], &se1[1],&v1[2], &se1[2],
2384 &v1[3], &se1[3],&v1[4], &se1[4],&v1[5], &se1[5]);
2385 torphase(6, v1, se1);
2386 torkn1.tv41[torkn1.ntor4] = v1[0];
2387 torkn1.tv42[torkn1.ntor4] = v1[1];
2388 torkn1.tv43[torkn1.ntor4] = v1[2];
2389 torkn1.phase41[torkn1.ntor4] = se1[0];
2390 torkn1.phase42[torkn1.ntor4] = se1[1];
2391 torkn1.phase43[torkn1.ntor4] = se1[2];
2392
2393 numeral(kp1,pa,3);
2394 numeral(kp2,pb,3);
2395 numeral(kp3,pc,3);
2396 numeral(kp4,pd,3);
2397 strcpy(ptor,pa);
2398 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2399 strcpy(torkn1.kv4[torkn1.ntor4],ptor);
2400 torkn1.ntor4++;
2401 }else if( strcmp(iptemp,"torsion5") == 0 )
2402 {
2403 if (torkn1.ntor5 >= MAXTOR5CONST)
2404 {
2405 message_alert("Error - Too many torsion 5 constants","Read Parameter");
2406 printf("Maximum number of torsion 5 constants exceeded. Others will be ignored\n");
2407 fclose(datafile);
2408 return;
2409 }
2410 for(i=0; i < 6; i++)
2411 v1[i] = se1[i] = 0.0;
2412 iz = sscanf(line, "%s %d %d %d %d %f %d %f %d %f %d %f %d %f %d %f %d", dumm, &kp1,
2413 &kp2, &kp3, &kp4 ,
2414 &v1[0], &se1[0],&v1[1], &se1[1],&v1[2], &se1[2],
2415 &v1[3], &se1[3],&v1[4], &se1[4],&v1[5], &se1[5]);
2416 torphase(6, v1, se1);
2417 torkn1.tv51[torkn1.ntor5] = v1[0];
2418 torkn1.tv52[torkn1.ntor5] = v1[1];
2419 torkn1.tv53[torkn1.ntor5] = v1[2];
2420 torkn1.phase51[torkn1.ntor5] = se1[0];
2421 torkn1.phase52[torkn1.ntor5] = se1[1];
2422 torkn1.phase53[torkn1.ntor5] = se1[2];
2423 numeral(kp1,pa,3);
2424 numeral(kp2,pb,3);
2425 numeral(kp3,pc,3);
2426 numeral(kp4,pd,3);
2427 strcpy(ptor,pa);
2428 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2429 strcpy(torkn1.kv5[torkn1.ntor5],ptor);
2430 torkn1.ntor5++;
2431 }else if( strcmp(iptemp,"torsiondel") == 0 )
2432 {
2433 if (torkn1.ntordel >= MAXTORDEL)
2434 {
2435 message_alert("Error - Too many delocalized torsion constants","Read Parameter");
2436 printf("Maximum number of delocalized torsion constants exceeded. Others will be ignored\n");
2437 fclose(datafile);
2438 return;
2439 }
2440 for(i=0; i < 6; i++)
2441 v1[i] = se1[i] = 0.0;
2442 iz = sscanf(line, "%s %d %d %d %d %d %f %d %f %d %f %d %f %d %f %d %f %d", dumm, &torkn1.torindex[torkn1.ntordel],
2443 &kp1, &kp2, &kp3, &kp4 ,
2444 &v1[0], &se1[0],&v1[1], &se1[1],&v1[2], &se1[2],
2445 &v1[3], &se1[3],&v1[4], &se1[4],&v1[5], &se1[5]);
2446 torphase(6, v1, se1);
2447 torkn1.tvdel1[torkn1.ntordel] = v1[0];
2448 torkn1.tvdel2[torkn1.ntordel] = v1[1];
2449 torkn1.tvdel3[torkn1.ntordel] = v1[2];
2450 torkn1.phasedel1[torkn1.ntordel] = se1[0];
2451 torkn1.phasedel2[torkn1.ntordel] = se1[1];
2452 torkn1.phasedel3[torkn1.ntordel] = se1[2];
2453 numeral(kp1,pa,3);
2454 numeral(kp2,pb,3);
2455 numeral(kp3,pc,3);
2456 numeral(kp4,pd,3);
2457 strcpy(ptor,pa);
2458 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2459 strcpy(torkn1.kvdel[torkn1.ntordel],ptor);
2460 torkn1.ntordel++;
2461 }else if( strcmp(iptemp, "torsion") == 0 )
2462 {
2463 if (torkn1.ntor >= MAXTORCONST)
2464 {
2465 message_alert("Error - Too many torsion constants","Read Parameter");
2466 printf("Maximum number of torsion constants exceeded. Others will be ignored\n");
2467 fclose(datafile);
2468 return;
2469 }
2470 for(i=0; i < 6; i++)
2471 v1[i] = se1[i] = 0.0;
2472
2473 sscanf( line, "%s %d %d %d %d %f %d %f %d %f %d %f %d %f %d %f %d", dumm,
2474 &kp1, &kp2, &kp3, &kp4,
2475 &v1[0], &se1[0],&v1[1], &se1[1],&v1[2], &se1[2],
2476 &v1[3], &se1[3],&v1[4], &se1[4],&v1[5], &se1[5]);
2477 torphase(6, v1, se1);
2478 torkn1.tv1[torkn1.ntor] = v1[0];
2479 torkn1.phase1[torkn1.ntor] = se1[0];
2480 torkn1.tv2[torkn1.ntor] = v1[1];
2481 torkn1.phase2[torkn1.ntor] = se1[1];
2482 torkn1.tv3[torkn1.ntor] = v1[2];
2483 torkn1.phase3[torkn1.ntor] = se1[2];
2484 torkn1.tv4[torkn1.ntor] = v1[3];
2485 torkn1.phase4[torkn1.ntor] = se1[3];
2486 torkn1.tv5[torkn1.ntor] = v1[4];
2487 torkn1.phase5[torkn1.ntor] = se1[4];
2488 torkn1.tv6[torkn1.ntor] = v1[5];
2489 torkn1.phase6[torkn1.ntor] = se1[5];
2490 numeral(kp1,pa,3);
2491 numeral(kp2,pb,3);
2492 numeral(kp3,pc,3);
2493 numeral(kp4,pd,3);
2494 strcpy(ptor,pa);
2495 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2496 strcpy(torkn1.kv[torkn1.ntor],ptor);
2497
2498 // torkn1.kv[torkn1.ntor] = ((kp1*100 + kp2)*100 + kp3)*100 + kp4;
2499 torkn1.ntor++;
2500 }else if (strcmp(iptemp, "pitorsion") == 0)
2501 {
2502 if (torknp.npitor > MAXPITORCONST)
2503 {
2504 }
2505 sscanf( line,"%s %d %d %d %d %f %d %f %d %f %d", dumm, &kp1, &kp2, &kp3, &kp4,
2506 &v1[0], &se1[0], &v1[1], &se1[1], &v1[2], &se1[2]);
2507
2508 torphase(3, v1,se1);
2509 torknp.tv1[torknp.npitor] = v1[0];
2510 torknp.ph1[torknp.npitor] = se1[0];
2511 torknp.tv2[torknp.npitor] = v1[1];
2512 torknp.ph2[torknp.npitor] = se1[1];
2513 torknp.tv3[torknp.npitor] = v1[2];
2514 torknp.ph3[torknp.npitor] = se1[2];
2515 numeral(kp1,pa,3);
2516 numeral(kp2,pb,3);
2517 numeral(kp3,pc,3);
2518 numeral(kp4,pd,3);
2519 strcpy(ptor,pa);
2520 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2521 strcpy(torknp.kv[torknp.npitor],ptor);
2522 // torknp.kv[torknp.npitor] = ((kp1*100 + kp2)*100 + kp3)*100 + kp4;
2523 torknp.npitor++;
2524 } else if( strcmp(iptemp, "imptors") == 0)
2525 {
2526 if (improptor_k.nimptor >= MAXIMP)
2527 {
2528 message_alert("Error - Too many improper torsion constants","Read Parameter");
2529 printf("Maximum number of improper torsion constants exceeded. Others will be ignored\n");
2530 fclose(datafile);
2531 return;
2532 }
2533 sscanf( line, "%s %d %d %d %d %f %d %f %d %f %d", dumm,
2534 &kp1, &kp2, &kp3, &kp4,
2535 &v1[0], &se1[0], &v1[1], &se1[1], &v1[2], &se1[2]);
2536 torphase(3,v1,se1);
2537 improptor_k.v1[improptor_k.nimptor] = v1[0];
2538 improptor_k.v2[improptor_k.nimptor] = v1[1];
2539 improptor_k.v3[improptor_k.nimptor] = v1[2];
2540 improptor_k.ph1[improptor_k.nimptor] = se1[0];
2541 improptor_k.ph2[improptor_k.nimptor] = se1[1];
2542 improptor_k.ph3[improptor_k.nimptor] = se1[2];
2543 numeral(kp1,pa,3);
2544 numeral(kp2,pb,3);
2545 numeral(kp3,pc,3);
2546 numeral(kp4,pd,3);
2547 strcpy(ptor,pa);
2548 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2549 strcpy(improptor_k.kv[improptor_k.nimptor],ptor);
2550 // improptor_k.kv[improptor_k.nimptor] = ((kp1*100 + kp2)*100 + kp3)*100 + kp4;
2551 improptor_k.nimptor++;
2552
2553 } else if( strcmp(iptemp, "improper") == 0)
2554 {
2555 if (improptor_k.nimptor >= MAXIMP)
2556 {
2557 message_alert("Error - Too many improper torsion constants","Read Parameter");
2558 printf("Maximum number of improper torsion constants exceeded. Others will be ignored\n");
2559 fclose(datafile);
2560 return;
2561 }
2562 sscanf( line, "%s %d %d %d %d %f %f", dumm,
2563 &kp1, &kp2, &kp3, &kp4,
2564 &improptor_k.cimptor[improptor_k.nimptor], &improptor_k.tdi[improptor_k.nimptor]);
2565 numeral(kp1,pa,3);
2566 numeral(kp2,pb,3);
2567 numeral(kp3,pc,3);
2568 numeral(kp4,pd,3);
2569 strcpy(ptor,pa);
2570 strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2571 strcpy(improptor_k.kv[improptor_k.nimptor],ptor);
2572 improptor_k.nimptor++;
2573 } else if( strcmp(iptemp, "ureybrad") == 0)
2574 {
2575 if (ureybrad_k.nurey_brad > MAXUREY)
2576 {
2577 message_alert("Error - Too many UreyBrad constants","Read Parameter");
2578 printf("Maximum number of ureybradley constants exceeded. Others will be ignored\n");
2579 fclose(datafile);
2580 return;
2581 }
2582 sscanf(line, "%s %d %d %d %f %f",dumm,
2583 &kp1, &kp2, &kp3, &ureybrad_k.ubconst[ureybrad_k.nurey_brad],
2584 &ureybrad_k.ubdist[ureybrad_k.nurey_brad]);
2585 numeral(kp1,pa,3);
2586 numeral(kp2,pb,3);
2587 numeral(kp3,pc,3);
2588 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2589 strcpy(ureybrad_k.kubang[ureybrad_k.nurey_brad],pang);
2590 ureybrad_k.nurey_brad++;
2591 } else if (strcmp(iptemp, "anglef") == 0)
2592 {
2593 sscanf(line,"%s %d %d %d %f %f %f %f %f %f %f %f",dumm, &kt1,&kt2,&kt3, &angf.fcon[angf.nfang],
2594 &angf.fc0[angf.nfang],&angf.fc1[angf.nfang],&angf.fc2[angf.nfang],&angf.fc3[angf.nfang],
2595 &angf.fc4[angf.nfang],&angf.fc5[angf.nfang],&angf.fc6[angf.nfang]);
2596 numeral(kt1,pa,3);
2597 numeral(kt2,pb,3);
2598 numeral(kt3,pc,3);
2599 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2600 strcpy(angf.kftype[angf.nfang],pang);
2601 angf.nfang++;
2602 } else if( strcmp(iptemp, "angle5") == 0 )
2603 {
2604 if (angk1.nang5 >= MAXANG5CONST)
2605 {
2606 message_alert("Error - Too many angle 5 constants","Read Parameter");
2607 printf("Maximum number of angle 5 constants exceeded. Others will be ignored\n");
2608 fclose(datafile);
2609 return;
2610 }
2611 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2612 &kt1, &kt2, &kt3, &angk1.con5[angk1.nang5], &angk1.ang5[angk1.nang5][0],
2613 &angk1.ang5[angk1.nang5][1], &angk1.ang5[angk1.nang5][2] );
2614 numeral(kt1,pa,3);
2615 numeral(kt2,pb,3);
2616 numeral(kt3,pc,3);
2617 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2618 strcpy(angk1.ktype5[angk1.nang5],pang);
2619 angk1.nang5++;
2620 } else if( strcmp(iptemp, "angle4") == 0 )
2621 {
2622 if (angk1.nang4 >= MAXANG4CONST)
2623 {
2624 message_alert("Error - Too many angle 4 constants","Read Parameter");
2625 printf("Maximum number of angle 4 constants exceeded. Others will be ignored\n");
2626 fclose(datafile);
2627 return;
2628 }
2629 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2630 &kt1, &kt2, &kt3, &angk1.con4[angk1.nang4], &angk1.ang4[angk1.nang4][0],
2631 &angk1.ang4[angk1.nang4][1], &angk1.ang4[angk1.nang4][2] );
2632 numeral(kt1,pa,3);
2633 numeral(kt2,pb,3);
2634 numeral(kt3,pc,3);
2635 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2636 strcpy(angk1.ktype4[angk1.nang4],pang);
2637 angk1.nang4++;
2638 } else if( strcmp(iptemp, "angle3") == 0 )
2639 {
2640 if (angk1.nang3 >= MAXANG3CONST )
2641 {
2642 message_alert("Error - Too many angle 3 constants","Read Parameter");
2643 printf("Maximum number of angle 3 constants exceeded. Others will be ignored\n");
2644 fclose(datafile);
2645 return;
2646 }
2647 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2648 &kt1, &kt2, &kt3, &angk1.con3[angk1.nang3], &angk1.ang3[angk1.nang3][0],
2649 &angk1.ang3[angk1.nang3][1], &angk1.ang3[angk1.nang3][2] );
2650 numeral(kt1,pa,3);
2651 numeral(kt2,pb,3);
2652 numeral(kt3,pc,3);
2653 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2654 strcpy(angk1.ktype3[angk1.nang3],pang);
2655 angk1.nang3++;
2656 } else if( strcmp(iptemp, "angle") == 0 )
2657 {
2658 if (angk1.nang >= MAXANGCONST)
2659 {
2660 message_alert("Error - Too many angle constants","Read Parameter");
2661 printf("Maximum number of angle constants exceeded. Others will be ignored\n");
2662 fclose(datafile);
2663 return;
2664 }
2665 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2666 &kt1, &kt2, &kt3, &angk1.con[angk1.nang], &angk1.ang[angk1.nang][0],
2667 &angk1.ang[angk1.nang][1], &angk1.ang[angk1.nang][2] );
2668 numeral(kt1,pa,3);
2669 numeral(kt2,pb,3);
2670 numeral(kt3,pc,3);
2671 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2672 strcpy(angk1.ktype[angk1.nang],pang);
2673 angk1.nang++;
2674 } else if( strcmp(iptemp, "angdel") == 0 )
2675 {
2676 if (angk1.ndel >= MAXANGDEL)
2677 {
2678 message_alert("Error - Too many delocalized angle constants","Read Parameter");
2679 printf("Maximum number of delocalized angle constants exceeded. Others will be ignored\n");
2680 fclose(datafile);
2681 return;
2682 }
2683 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2684 &kt1, &kt2, &kt3, &angk1.condel[angk1.ndel], &angk1.angdel[angk1.ndel][0],
2685 &angk1.angdel[angk1.ndel][1], &angk1.angdel[angk1.ndel][2] );
2686 numeral(kt1,pa,3);
2687 numeral(kt2,pb,3);
2688 numeral(kt3,pc,3);
2689 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2690 strcpy(angk1.kdel[angk1.ndel],pang);
2691 angk1.ndel++;
2692 } else if( strcmp(iptemp, "ang3del") == 0 )
2693 {
2694 if (angk1.ndel3 >= MAXANG3DEL)
2695 {
2696 message_alert("Error - Too many delocalized angle constants","Read Parameter");
2697 printf("Maximum number of delocalized angle constants exceeded. Others will be ignored\n");
2698 fclose(datafile);
2699 return;
2700 }
2701 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2702 &kt1, &kt2, &kt3, &angk1.condel3[angk1.ndel3], &angk1.angdel3[angk1.ndel3][0],
2703 &angk1.angdel3[angk1.ndel3][1], &angk1.angdel3[angk1.ndel3][2] );
2704 numeral(kt1,pa,3);
2705 numeral(kt2,pb,3);
2706 numeral(kt3,pc,3);
2707 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2708 strcpy(angk1.kdel3[angk1.ndel3],pang);
2709 angk1.ndel3++;
2710 } else if( strcmp(iptemp, "ang4del") == 0 )
2711 {
2712 if (angk1.ndel4 >= MAXANG4DEL)
2713 {
2714 message_alert("Error - Too many delocalized angle constants","Read Parameter");
2715 printf("Maximum number of delocalized angle constants exceeded. Others will be ignored\n");
2716 fclose(datafile);
2717 return;
2718 }
2719 sscanf( line, "%s %d %d %d %f %f %f %f", dumm,
2720 &kt1, &kt2, &kt3, &angk1.condel4[angk1.ndel4], &angk1.angdel4[angk1.ndel4][0],
2721 &angk1.angdel4[angk1.ndel4][1], &angk1.angdel4[angk1.ndel4][2] );
2722 numeral(kt1,pa,3);
2723 numeral(kt2,pb,3);
2724 numeral(kt3,pc,3);
2725 strcpy(pang,pa); strcat(pang,pb); strcat(pang,pc);
2726 strcpy(angk1.kdel4[angk1.ndel4],pang);
2727 angk1.ndel4++;
2728 } else if( strcmp(iptemp, "opbend") == 0 )
2729 {
2730 if (ooplane_k.nopbend >= MAXOOP)
2731 {
2732 message_alert("Error - Too many out of plane bending constants","Read Parameter");
2733 printf("Maximum number of out of plane bend constants exceeded. Others will be ignored\n");
2734 fclose(datafile);
2735 return;
2736 }
2737 sscanf( line, "%s %d %d %d %d %f", dumm, &kp1, &kp2, &kp3,&kp4,
2738 &ooplane_k.copb[ooplane_k.nopbend] );
2739 numeral(kp1,pa,3);
2740 numeral(kp2,pb,3);
2741 numeral(kp3,pc,3);
2742 numeral(kp4,pd,3);
2743 strcpy(ptor,pa); strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2744 strcpy(ooplane_k.iopb[ooplane_k.nopbend],ptor);
2745 ooplane_k.nopbend++;
2746 } else if (strcmp(iptemp, "strbnd") == 0)
2747 {
2748 if (crossterm_k.nstrbnd > MAXSTBN)
2749 {
2750 message_alert("Error - Too many str bend constants","Read Parameter");
2751 printf("Maximum number of str bend constants exceeded. Others will be ignored\n");
2752 fclose(datafile);
2753 return;
2754 }
2755 kp4 = 0;
2756 sscanf(line,"%s %d %d %d %f %f %f %d",dumm, &kp1, &kp2, &kp3,
2757 &crossterm_k.stbncon[crossterm_k.nstrbnd][0],
2758 &crossterm_k.stbncon[crossterm_k.nstrbnd][1],
2759 &crossterm_k.stbncon[crossterm_k.nstrbnd][2], &kp4);
2760 numeral(kp1,pa,3);
2761 numeral(kp2,pb,3);
2762 numeral(kp3,pc,3);
2763 strcpy(ptor,pa); strcat(ptor,pb); strcat(ptor,pc);
2764 strcpy(crossterm_k.stbn[crossterm_k.nstrbnd],ptor);
2765 crossterm_k.stbnindex[crossterm_k.nstrbnd] = kp4;
2766 crossterm_k.nstrbnd++;
2767 } else if (strcmp(iptemp, "angang") == 0)
2768 {
2769 if (crossterm_k.nangang > MAXAA)
2770 {
2771 message_alert("Error - Too many ang ang constants","Read Parameter");
2772 printf("Maximum number of ang ang constants exceeded. Others will be ignored\n");
2773 fclose(datafile);
2774 return;
2775 }
2776 sscanf(line,"%s %d %f %f %f",dumm, &crossterm_k.ang_ang[crossterm_k.nangang],
2777 &crossterm_k.aacon[crossterm_k.nangang][0],
2778 &crossterm_k.aacon[crossterm_k.nangang][1],
2779 &crossterm_k.aacon[crossterm_k.nangang][2]);
2780 crossterm_k.nangang++;
2781 } else if (strcmp(iptemp, "strtors") == 0)
2782 {
2783 if (crossterm_k.nstrtor > MAXSTRTOR)
2784 {
2785 message_alert("Error - Too many str tor constants","Read Parameter");
2786 printf("Maximum number of str tor constants exceeded. Others will be ignored\n");
2787 fclose(datafile);
2788 return;
2789 }
2790 sscanf(line,"%s %d %d %f",dumm, &kt1, &kt2, &crossterm_k.str_torcon[crossterm_k.nstrtor]);
2791 numeral(kt1,pa,3);
2792 numeral(kt2,pb,3);
2793 strcpy(pt,pa); strcat(pt,pb);
2794 strcpy(crossterm_k.str_tor[crossterm_k.nstrtor],pt);
2795 crossterm_k.nstrtor++;
2796 } else if (strcmp(iptemp, "vdwpr") == 0)
2797 {
2798 if (vdwpr_k .nvdwpr > MAXBONDCONST)
2799 {
2800 message_alert("Error - Too many vdwpr constants","Read Parameter");
2801 printf("Maximum number of vdwpr constants exceeded. Others will be ignored\n");
2802 fclose(datafile);
2803 return;
2804 }
2805 sscanf(line,"%s %d %d %f %f",dumm, &ii, &kk, &vdwpr_k.radius[vdwpr_k .nvdwpr],
2806 &vdwpr_k.eps[vdwpr_k .nvdwpr]);
2807 vdwpr_k.ia1[vdwpr_k .nvdwpr] = ii;
2808 vdwpr_k.ia2[vdwpr_k .nvdwpr] = kk;
2809 numeral(ii,pa,3);
2810 numeral(kk,pb,3);
2811 strcpy(pt,pa); strcat(pt,pb);
2812 strcpy(vdwpr_k.kv[vdwpr_k .nvdwpr],pt);
2813 vdwpr_k .nvdwpr++;
2814 } else if( strcmp(iptemp, "BDHF") == 0 )
2815 {
2816 if (ehpara.neheat >= 220)
2817 {
2818 printf("Maximum number of BDHF constants exceeded. Others will be ignored\n");
2819 fclose(datafile);
2820 return;
2821 }
2822 sscanf( line, "%s %d %d %20c %f %f %f", dumm, &ja, &jb,
2823 ehpara.cc[ehpara.neheat], &ehpara.ee[ehpara.neheat], &ehpara.estr[ehpara.neheat],
2824 &ehpara.et[ehpara.neheat] );
2825 ehpara.nn[ehpara.neheat] = ja*100 + jb;
2826 ehpara.neheat++;
2827 } else if( strcmp(iptemp, "EVHF") == 0 )
2828 {
2829 if (ehpara.nevhf >= 155)
2830 {
2831 printf("Maximum number of EVHF constants exceeded. Others will be ignored\n");
2832 fclose(datafile);
2833 return;
2834 }
2835 sscanf( line, "%s %d %d %d %d %d %20c %f %f", dumm, &ehpara.cent[ehpara.nevhf],
2836 &kp1,&kp2,&kp3,&kp4, ehpara.mm[ehpara.nevhf],
2837 &ehpara.ss[ehpara.nevhf], &ehpara.ssless[ehpara.nevhf]);
2838 numeral(kp1,pa,3);
2839 numeral(kp2,pb,3);
2840 numeral(kp3,pc,3);
2841 numeral(kp4,pd,3);
2842 strcpy(ptor,pa); strcat(ptor,pb); strcat(ptor,pc); strcat(ptor,pd);
2843 strcpy(ehpara.kheat[ehpara.nevhf],ptor);
2844 ehpara.nevhf++;
2845 } else if( strcmp(iptemp, "PIHF") == 0 )
2846 {
2847 if (epiheat.npihf >= 125)
2848 {
2849 printf("Maximum number of PIHF constants exceeded. Others will be ignored\n");
2850 fclose(datafile);
2851 return;
2852 }
2853 sscanf( line, "%s %d %d %20c %f %f %f %f ", dumm,
2854 &iatm1, &iatm2, epiheat.ccp[epiheat.npihf], &epiheat.eep[epiheat.npihf],
2855 &epiheat.aa[epiheat.npihf], &epiheat.bb[epiheat.npihf], &epiheat.ccc[epiheat.npihf] );
2856 epiheat.nnp[epiheat.npihf] = iatm1*100 + iatm2;
2857 epiheat.npihf++;
2858 }
2859 }
2860
2861 fclose(datafile);
2862
2863 printf(" field : %s\n",field.name);
2864 printf(" Atom Types: %d\n",atom_k.natomtype);
2865 printf(" Bonds: %d Bond3: %d Bond4: %d Bond5: %d\n",
2866 bondk1.nbnd,bondk1.nbnd3, bondk1.nbnd4, bondk1.nbnd5);
2867 printf(" Angle: %d Angle3: %d Angle4: %d Angle5: %d\n",
2868 angk1.nang,angk1.nang3, angk1.nang4, angk1.nang5);
2869 printf(" Torsion: %d Torsion4: %d Torsion5: %d\n",
2870 torkn1.ntor, torkn1.ntor4, torkn1.ntor5);
2871 printf(" Vdw: %d OOP: %d Dipole: %d Charge: %d Improper: %d\n",
2872 vdw1.nvdw,ooplane_k.nopbend, dipole_k.ndipole, charge_k.ncharge, improptor_k.nimptor);
2873 printf(" STBN: %d ANGANG: %d STRTOR: %d VDWPR: %d\n",
2874 crossterm_k.nstrbnd, crossterm_k.nangang, crossterm_k.nstrtor, vdwpr_k.nvdwpr);
2875
2876 return;
2877 }
2878
2879
2880 void torphase(int icount, float v1[6], int se[6])
2881 {
2882 int i;
2883 float amp[6], phase[6];
2884 int fold[6];
2885
2886 for (i=0; i < 6; i++)
2887 {
2888 fold[i] = 0;
2889 amp[i] = phase[i] = 0.0;
2890 }
2891
2892 for (i=0; i < icount; i++)
2893 {
2894 amp[i] = v1[i];
2895 fold[i] = abs( (int)(2.0*se[i]) - (int) se[i]);
2896 if (se[i] > 0.0)
2897 phase[i] = 1.0;
2898 else
2899 phase[i] = -1.0;
2900 v1[i] = 0.0;
2901 se[i] = 0;
2902 }
2903
2904 for (i=0; i < icount; i++)
2905 {
2906 if (fold[i] != 0 && fold[i] <= icount)
2907 {
2908 v1[fold[i]-1] = amp[i];
2909 se[fold[i]-1] = phase[i];
2910 }
2911 }
2912 }
2913
2914