1 |
#define EXTERN extern |
2 |
#include "pcwin.h" |
3 |
#include "pcmod.h" |
4 |
|
5 |
#include "angles.h" |
6 |
#include "rings.h" |
7 |
#include "field.h" |
8 |
#include "bonds_ff.h" |
9 |
#include "atom_k.h" |
10 |
|
11 |
int is_ring43(int, int, int); |
12 |
int is_ring53(int, int, int); |
13 |
int is_ring63(int, int, int); |
14 |
int is_delocalbond(int, int); |
15 |
int is_TS(int, int, int); |
16 |
int isbond(int,int); |
17 |
int find_bond(int,int); |
18 |
void ts_four(int *, float *, float *,char *, char *,char *,char *); |
19 |
long ipack(int ,int ,int ,int); |
20 |
long kang(int,int,int); |
21 |
void numeral(int,char *,int); |
22 |
float get_general_angle(int); |
23 |
|
24 |
|
25 |
EXTERN struct t_angk1 { |
26 |
int use_ang3, use_ang4, use_ang5; |
27 |
int nang, nang3, nang4, nang5; |
28 |
int ndel, ndel3, ndel4; |
29 |
char ktype[MAXANGCONST][10],ktype3[MAXANG3CONST][10],ktype4[MAXANG4CONST][10],ktype5[MAXANG5CONST][10]; |
30 |
char kdel[MAXANGDEL][10],kdel3[MAXANG3DEL][10],kdel4[MAXANG4DEL][10]; |
31 |
float con[MAXANGCONST], ang[MAXANGCONST][3]; |
32 |
float con3[MAXANG3CONST], ang3[MAXANG3CONST][3]; |
33 |
float con4[MAXANG4CONST], ang4[MAXANG4CONST][3]; |
34 |
float con5[MAXANG5CONST], ang5[MAXANG5CONST][3]; |
35 |
float condel[MAXANGDEL], angdel[MAXANGDEL][3]; |
36 |
float condel3[MAXANG3DEL], angdel3[MAXANG3DEL][3]; |
37 |
float condel4[MAXANG4DEL], angdel4[MAXANG4DEL][3]; |
38 |
} angk1; |
39 |
|
40 |
EXTERN struct t_angkp1 { |
41 |
int npiang; |
42 |
char kpa[MAXPIANGCONST][10]; |
43 |
float pacon[MAXPIANGCONST], panat[MAXPIANGCONST][3], piobp[MAXPIANGCONST]; |
44 |
} angkp1; |
45 |
|
46 |
EXTERN struct t_angf { |
47 |
int use_angf, nfang; |
48 |
char kftype[MAXANGCONST][10]; |
49 |
float fcon[MAXANGCONST],fc0[MAXANGCONST],fc1[MAXANGCONST],fc2[MAXANGCONST]; |
50 |
float fc3[MAXANGCONST],fc4[MAXANGCONST],fc5[MAXANGCONST],fc6[MAXANGCONST]; |
51 |
} angf; |
52 |
|
53 |
EXTERN int Missing_constants; |
54 |
|
55 |
void kangle() |
56 |
{ |
57 |
long int pi_mask, aromatic_mask; |
58 |
int i, j, k, izero, ierr, nh, nRc, nligand, jji; |
59 |
int ia, ib, ic, ie; |
60 |
int iaa, ibb, icc; |
61 |
int cl_a, cl_b, cl_c; |
62 |
int nbo1, nb1, nb2; |
63 |
char pa[4],pb[4],pc[4],pt[10], pt1[10], pt2[10],pt3[10], pt4[10], pt5[10], pt6[10], pt7[10]; |
64 |
char zero[4]; |
65 |
float bkan, at; |
66 |
|
67 |
pi_mask = (1L << PI_MASK); |
68 |
aromatic_mask = (1 << AROMATIC_MASK); |
69 |
|
70 |
if( angles.nang != 0 ) |
71 |
{ |
72 |
for( i = 0; i < angles.nang; i++ ) |
73 |
{ |
74 |
ia = angles.i13[i][0]; |
75 |
ib = angles.i13[i][1]; |
76 |
ic = angles.i13[i][2]; |
77 |
iaa = atom[ia].type; |
78 |
ibb = atom[ib].type; |
79 |
icc = atom[ic].type; |
80 |
cl_a = atom[ia].tclass; |
81 |
cl_b = atom[ib].tclass; |
82 |
cl_c = atom[ic].tclass; |
83 |
|
84 |
/* get bond index each bond for MMFF94 */ |
85 |
nb1 = find_bond(ia,ib); |
86 |
nb2 = find_bond(ib,ic); |
87 |
|
88 |
/* special metal cases */ |
89 |
if( iaa >= 300) |
90 |
cl_a = 300; |
91 |
|
92 |
if( ibb >= 300) |
93 |
cl_b = 300; |
94 |
|
95 |
if( icc >= 300) |
96 |
cl_c = 300; |
97 |
|
98 |
/* special MMX cases */ |
99 |
if ( field.type == MMX) |
100 |
{ |
101 |
if( iaa == 40 ) |
102 |
iaa = 2; |
103 |
|
104 |
if( ibb == 40 ) |
105 |
ibb = 2; |
106 |
|
107 |
if( icc == 40 ) |
108 |
icc = 2; |
109 |
|
110 |
} |
111 |
numeral(iaa,pa,3); |
112 |
numeral(ibb,pb,3); |
113 |
numeral(icc,pc,3); |
114 |
if( iaa <= icc ) |
115 |
{ |
116 |
strcpy(pt,pa); |
117 |
strcat(pt,pb); |
118 |
strcat(pt,pc); |
119 |
} |
120 |
if( iaa > icc ) |
121 |
{ |
122 |
strcpy(pt,pc); |
123 |
strcat(pt,pb); |
124 |
strcat(pt,pa); |
125 |
} |
126 |
izero = 0; |
127 |
strcpy(zero," 0"); |
128 |
strcpy(pt1,pa); strcat(pt1,pb); strcat(pt1,zero); |
129 |
strcpy(pt2,pc); strcat(pt2,pb); strcat(pt2,zero); |
130 |
strcpy(pt3,zero); strcat(pt3,pb); strcat(pt3,pc); |
131 |
strcpy(pt4,zero); strcat(pt4,pb); strcat(pt4,pa); |
132 |
strcpy(pt5,zero); strcat(pt5,pb); strcat(pt5,zero); |
133 |
|
134 |
numeral(cl_a,pa,3); |
135 |
numeral(cl_b,pb,3); |
136 |
numeral(cl_c,pc,3); |
137 |
if (cl_a < cl_c) |
138 |
{ |
139 |
strcpy(pt6,pa); strcat(pt6,pb); strcat(pt6,pc); |
140 |
}else |
141 |
{ |
142 |
strcpy(pt6,pc); strcat(pt6,pb); strcat(pt6,pa); |
143 |
} |
144 |
|
145 |
if (field.type == MMFF94) |
146 |
{ |
147 |
cl_a = atom_k.tclass1[atom[ia].type]; |
148 |
cl_b = atom_k.tclass1[atom[ib].type]; |
149 |
cl_c = atom_k.tclass1[atom[ic].type]; |
150 |
numeral(cl_a,pa,3); |
151 |
numeral(cl_b,pb,3); |
152 |
numeral(cl_c,pc,3); |
153 |
if (cl_a < cl_c) |
154 |
{ |
155 |
strcpy(pt7,pa); strcat(pt7,pb); strcat(pt7,pc); |
156 |
}else |
157 |
{ |
158 |
strcpy(pt7,pc); strcat(pt7,pb); strcat(pt7,pa); |
159 |
} |
160 |
} |
161 |
angles.acon[i] = 0.0; |
162 |
angles.anat[i] = 0.0; |
163 |
angles.angtype[i] = HARMONIC; |
164 |
|
165 |
ierr = FALSE; |
166 |
/* check TS constants */ |
167 |
/* check delocalized angles in MMFF94 cyclopropanes */ |
168 |
if (field.type == MMFF94 && angk1.ndel3 > 0) |
169 |
{ |
170 |
if (isbond(ia,ic) ) |
171 |
{ |
172 |
nbo1 = bonds_ff.index[nb1] + bonds_ff.index[nb2]; |
173 |
if (nbo1 == 1 || nbo1 == 2) |
174 |
{ |
175 |
for(j=0; j < angk1.ndel3; j++) |
176 |
{ |
177 |
if (strcmp(angk1.kdel3[j],pt) == 0) |
178 |
{ |
179 |
angles.acon[i] = angk1.condel3[j]; |
180 |
angles.anat[i] = angk1.angdel3[j][0]; |
181 |
if (nbo1 == 1) |
182 |
angles.index[i] = 5; |
183 |
else if (nbo1 == 2) |
184 |
angles.index[i] = 6; |
185 |
ierr = TRUE; |
186 |
break; |
187 |
} |
188 |
} |
189 |
} |
190 |
|
191 |
if (ierr == TRUE) |
192 |
goto L_10; |
193 |
} |
194 |
} |
195 |
/* check three membered rings */ |
196 |
if ( (rings.nring3 > 0) && (angk1.nang3 > 0) ) |
197 |
{ |
198 |
if (isbond(ia,ic)) |
199 |
{ |
200 |
/* search three membered ring parameters */ |
201 |
for (j = 0; j < angk1.nang3; j++) |
202 |
{ |
203 |
if ( (strcmp(angk1.ktype3[j],pt) == 0) || (strcmp(angk1.ktype3[j],pt1) == 0) || |
204 |
(strcmp(angk1.ktype3[j],pt2) == 0) || (strcmp(angk1.ktype3[j],pt3) == 0) || |
205 |
(strcmp(angk1.ktype3[j],pt4) == 0) || (strcmp(angk1.ktype3[j],pt5) == 0)) |
206 |
{ |
207 |
if ( angk1.ang3[j][1] == 0.0 && angk1.ang3[j][2] == 0) |
208 |
{ |
209 |
angles.acon[i] = angk1.con3[j]; |
210 |
angles.anat[i] = angk1.ang3[j][0]; |
211 |
angles.index[i] = 3; |
212 |
ierr = TRUE; |
213 |
break; |
214 |
} else |
215 |
{ |
216 |
nh = 0; |
217 |
for (k=0; k < MAXIAT; k++) |
218 |
{ |
219 |
ie = atom[ib].iat[k]; |
220 |
if ( (atom[ie].type == 5 || atom[ie].type == 36) && (ie != ia) && (ie != ic)) |
221 |
nh++; |
222 |
} |
223 |
angles.acon[i] = angk1.con3[j]; |
224 |
angles.anat[i] = angk1.ang3[j][nh]; |
225 |
angles.index[i] = 3; |
226 |
ierr = TRUE; |
227 |
break; |
228 |
} |
229 |
} |
230 |
} |
231 |
if (ierr == TRUE) |
232 |
goto L_10; |
233 |
else |
234 |
{ |
235 |
Missing_constants = TRUE; |
236 |
} |
237 |
} |
238 |
} |
239 |
/* check delocalized angles in MMFF94 cyclobutanes */ |
240 |
if (field.type == MMFF94 && angk1.ndel4 > 0) |
241 |
{ |
242 |
nRc = is_ring43(ia, ib, ic); |
243 |
if (nRc == TRUE) |
244 |
{ |
245 |
nbo1 = bonds_ff.index[nb1] + bonds_ff.index[nb2]; |
246 |
if (nbo1 == 1 || nbo1 == 2) |
247 |
{ |
248 |
for(j=0; j < angk1.ndel4; j++) |
249 |
{ |
250 |
if (strcmp(angk1.kdel4[j],pt) == 0) |
251 |
{ |
252 |
angles.acon[i] = angk1.condel4[j]; |
253 |
angles.anat[i] = angk1.angdel4[j][0]; |
254 |
if (nbo1 == 1) |
255 |
angles.index[i] = 7; |
256 |
else if (nbo1 == 2) |
257 |
angles.index[i] = 8; |
258 |
ierr = TRUE; |
259 |
break; |
260 |
} |
261 |
} |
262 |
} |
263 |
if (ierr == TRUE) |
264 |
goto L_10; |
265 |
} |
266 |
} |
267 |
/* check four memebered rings */ |
268 |
if ( (rings.nring4 > 0) && (angk1.nang4 > 0) ) |
269 |
{ |
270 |
nRc = is_ring43(ia, ib, ic); |
271 |
if (nRc == TRUE) |
272 |
{ |
273 |
/* search four membered ring parameters */ |
274 |
for (j = 0; j < angk1.nang4; j++) |
275 |
{ |
276 |
if ( (strcmp(angk1.ktype4[j],pt) == 0) || (strcmp(angk1.ktype4[j],pt1) == 0) || |
277 |
(strcmp(angk1.ktype4[j],pt2) == 0) || (strcmp(angk1.ktype4[j],pt3) == 0) || |
278 |
(strcmp(angk1.ktype4[j],pt4) == 0) || (strcmp(angk1.ktype4[j],pt5) == 0)) |
279 |
{ |
280 |
if ( angk1.ang4[j][1] == 0.0 && angk1.ang4[j][2] == 0) |
281 |
{ |
282 |
angles.acon[i] = angk1.con4[j]; |
283 |
angles.anat[i] = angk1.ang4[j][0]; |
284 |
angles.index[i] = 4; |
285 |
ierr = TRUE; |
286 |
break; |
287 |
} else |
288 |
{ |
289 |
nh = 0; |
290 |
for (k=0; k < MAXIAT; k++) |
291 |
{ |
292 |
ie = atom[ib].iat[k]; |
293 |
if ( (atom[ie].type == 5 || atom[ie].type == 36) && (ie != ia) && (ie != ic)) |
294 |
nh++; |
295 |
} |
296 |
angles.acon[i] = angk1.con4[j]; |
297 |
angles.anat[i] = angk1.ang4[j][nh]; |
298 |
angles.index[i] = 4; |
299 |
ierr = TRUE; |
300 |
break; |
301 |
} |
302 |
} |
303 |
} |
304 |
if (ierr == TRUE) |
305 |
goto L_10; |
306 |
else |
307 |
{ |
308 |
Missing_constants = TRUE; |
309 |
} |
310 |
} |
311 |
} |
312 |
/* check five membered rings */ |
313 |
if ( (rings.nring5 > 0) && (angk1.nang5 > 0) ) |
314 |
{ |
315 |
nRc = is_ring53(ia,ib, ic); |
316 |
if (nRc == TRUE) |
317 |
{ |
318 |
/* search five memebered ring parameters */ |
319 |
for (j = 0; j < angk1.nang5; j++) |
320 |
{ |
321 |
if ( (strcmp(angk1.ktype5[j],pt) == 0) || (strcmp(angk1.ktype5[j],pt1) == 0) || |
322 |
(strcmp(angk1.ktype5[j],pt2) == 0) || (strcmp(angk1.ktype5[j],pt3) == 0) || |
323 |
(strcmp(angk1.ktype5[j],pt4) == 0) || (strcmp(angk1.ktype5[j],pt5) == 0) ) |
324 |
{ |
325 |
if ( angk1.ang5[j][1] == 0.0 && angk1.ang5[j][2] == 0) |
326 |
{ |
327 |
angles.acon[i] = angk1.con5[j]; |
328 |
angles.anat[i] = angk1.ang5[j][0]; |
329 |
angles.index[i] = 0; |
330 |
ierr = TRUE; |
331 |
break; |
332 |
} else |
333 |
{ |
334 |
nh = 0; |
335 |
for (k=0; k < MAXIAT; k++) |
336 |
{ |
337 |
ie = atom[ib].iat[k]; |
338 |
if ( (atom[ie].type == 5 || atom[ie].type == 36) && (ie != ia) && (ie != ic)) |
339 |
nh++; |
340 |
} |
341 |
angles.acon[i] = angk1.con5[j]; |
342 |
angles.anat[i] = angk1.ang5[j][nh]; |
343 |
angles.index[i] = 0; |
344 |
ierr = TRUE; |
345 |
break; |
346 |
} |
347 |
} |
348 |
} |
349 |
if (ierr == TRUE) |
350 |
goto L_10; |
351 |
// don't fail on missing 5 ring parameters |
352 |
} |
353 |
} |
354 |
/* check delocalized angles in MMFF94 */ |
355 |
if (field.type == MMFF94 && angk1.ndel > 0) |
356 |
{ |
357 |
if ( bonds_ff.index[nb1] == 1 || bonds_ff.index[nb2] == 1 ) |
358 |
{ |
359 |
nbo1 = bonds_ff.index[nb1] + bonds_ff.index[nb2]; |
360 |
for(j=0; j < angk1.ndel; j++) |
361 |
{ |
362 |
if (strcmp(angk1.kdel[j],pt) == 0) |
363 |
{ |
364 |
angles.acon[i] = angk1.condel[j]; |
365 |
angles.anat[i] = angk1.angdel[j][0]; |
366 |
if (nbo1 == 1) |
367 |
angles.index[i] = 1; |
368 |
else if (nbo1 == 2) |
369 |
angles.index[i] = 2; |
370 |
ierr = TRUE; |
371 |
break; |
372 |
} |
373 |
} |
374 |
if (ierr == TRUE) |
375 |
goto L_10; |
376 |
} |
377 |
} |
378 |
// look for fourier angles |
379 |
if (angf.nfang > 0) |
380 |
{ |
381 |
for (j=0; j < angf.nfang; j++) |
382 |
{ |
383 |
if (strcmp(angf.kftype[j],pt) == 0) |
384 |
{ |
385 |
angles.fcon[i] = angf.fcon[j]; |
386 |
angles.c0[i] = angf.fc0[j]; |
387 |
angles.c1[i] = angf.fc1[j]; |
388 |
angles.c2[i] = angf.fc2[j]; |
389 |
angles.c3[i] = angf.fc3[j]; |
390 |
angles.c4[i] = angf.fc4[j]; |
391 |
angles.c5[i] = angf.fc5[j]; |
392 |
angles.c6[i] = angf.fc6[j]; |
393 |
angles.angtype[i] = FOURIER; |
394 |
ierr = TRUE; |
395 |
break; |
396 |
} |
397 |
} |
398 |
if (ierr == TRUE) |
399 |
goto L_10; |
400 |
} |
401 |
|
402 |
/* check regular parameters for specific angles*/ |
403 |
for (j = 0; j < angk1.nang; j++) |
404 |
{ |
405 |
if ( (strcmp(angk1.ktype[j],pt) == 0) ) |
406 |
{ |
407 |
if ( angk1.ang[j][1] == 0.0 && angk1.ang[j][2] == 0) |
408 |
{ |
409 |
angles.acon[i] = angk1.con[j]; |
410 |
angles.anat[i] = angk1.ang[j][0]; |
411 |
angles.index[i] = 0; |
412 |
ierr = TRUE; |
413 |
break; |
414 |
} else |
415 |
{ |
416 |
nh = 0; |
417 |
for (k=0; k < MAXIAT; k++) |
418 |
{ |
419 |
ie = atom[ib].iat[k]; |
420 |
if ( (atom[ie].atomnum == 1) && (ie != ia) && (ie != ic)) |
421 |
nh++; |
422 |
} |
423 |
angles.acon[i] = angk1.con[j]; |
424 |
angles.anat[i] = angk1.ang[j][nh]; |
425 |
angles.index[i] = 0; |
426 |
ierr = TRUE; |
427 |
break; |
428 |
} |
429 |
} |
430 |
} |
431 |
if (ierr == TRUE) |
432 |
goto L_10; |
433 |
// did not find any specific look for generalized |
434 |
for (j = 0; j < angk1.nang; j++) |
435 |
{ |
436 |
if ( (strcmp(angk1.ktype[j],pt) == 0) || (strcmp(angk1.ktype[j],pt1) == 0) || |
437 |
(strcmp(angk1.ktype[j],pt2) == 0) || (strcmp(angk1.ktype[j],pt3) == 0) || |
438 |
(strcmp(angk1.ktype[j],pt4) == 0) || (strcmp(angk1.ktype[j],pt5) == 0) || |
439 |
(strcmp(angk1.ktype[j],pt6) == 0)) |
440 |
{ |
441 |
if ( angk1.ang[j][1] == 0.0 && angk1.ang[j][2] == 0) |
442 |
{ |
443 |
angles.acon[i] = angk1.con[j]; |
444 |
angles.anat[i] = angk1.ang[j][0]; |
445 |
angles.index[i] = 0; |
446 |
ierr = TRUE; |
447 |
break; |
448 |
} else |
449 |
{ |
450 |
nh = 0; |
451 |
for (k=0; k < MAXIAT; k++) |
452 |
{ |
453 |
ie = atom[ib].iat[k]; |
454 |
if ( (atom[ie].atomnum == 1) && (ie != ia) && (ie != ic)) |
455 |
nh++; |
456 |
} |
457 |
angles.acon[i] = angk1.con[j]; |
458 |
angles.anat[i] = angk1.ang[j][nh]; |
459 |
angles.index[i] = 0; |
460 |
ierr = TRUE; |
461 |
break; |
462 |
} |
463 |
} |
464 |
} |
465 |
if (ierr == TRUE) |
466 |
goto L_10; |
467 |
/* check MMFF for class1 parameters */ |
468 |
if (field.type == MMFF94) |
469 |
{ |
470 |
for (j = 0; j < angk1.nang; j++) |
471 |
{ |
472 |
if ( (strcmp(angk1.ktype[j],pt7) == 0) ) |
473 |
{ |
474 |
if ( angk1.ang[j][1] == 0.0 && angk1.ang[j][2] == 0) |
475 |
{ |
476 |
angles.acon[i] = angk1.con[j]; |
477 |
angles.anat[i] = angk1.ang[j][0]; |
478 |
angles.index[i] = 0; |
479 |
ierr = TRUE; |
480 |
break; |
481 |
} else |
482 |
{ |
483 |
nh = 0; |
484 |
for (k=0; k < MAXIAT; k++) |
485 |
{ |
486 |
ie = atom[ib].iat[k]; |
487 |
if ( (atom[ie].atomnum == 1) && (ie != ia) && (ie != ic)) |
488 |
nh++; |
489 |
} |
490 |
angles.acon[i] = angk1.con[j]; |
491 |
angles.anat[i] = angk1.ang[j][nh]; |
492 |
angles.index[i] = 0; |
493 |
ierr = TRUE; |
494 |
break; |
495 |
} |
496 |
} |
497 |
} |
498 |
if (ierr == TRUE) |
499 |
goto L_10; |
500 |
} |
501 |
if (ierr != TRUE) |
502 |
{ |
503 |
bkan = get_general_angle(ibb); |
504 |
angles.acon[i] = 0.80; |
505 |
angles.anat[i] = bkan; |
506 |
angles.index[i] = 0; |
507 |
// ==== done with angle lookup ============= |
508 |
L_10: |
509 |
if (field.type == MMX && ierr != TRUE) |
510 |
{ |
511 |
if (ibb >= 300) |
512 |
{ |
513 |
nligand = 0; |
514 |
jji = 0; |
515 |
for ( k=0; k < MAXIAT; k++) |
516 |
{ |
517 |
if (atom[ib].iat[k] != 0 && atom[ib].bo[k] != 9) |
518 |
jji++; |
519 |
if (atom[ib].bo[k] == 9) |
520 |
nligand++; |
521 |
} |
522 |
if (jji == 2 && nligand == 0) |
523 |
{ |
524 |
angles.acon[i] = .1; |
525 |
angles.anat[i] = 180.; |
526 |
} |
527 |
if ((jji == 3 && nligand == 0) || (jji == 2 && nligand == 1) ) |
528 |
{ |
529 |
angles.acon[i] = .1; |
530 |
angles.anat[i] = 120.; |
531 |
} |
532 |
if ((jji == 4 && nligand == 0) || (jji == 3 && nligand == 1) || (jji == 2 && nligand == 2)) |
533 |
{ |
534 |
if (jji == 4 && (atom[ib].type >= 300 && (atom[ib].flags & (1L << SATMET_MASK) && |
535 |
atom[ib].flags & (1L << GT18e_MASK) && atom[ib].flags & (1L << SQPLAN_MASK) && |
536 |
!(atom[ib].flags & (1L << LOWSPIN_MASK)))) ) |
537 |
{ |
538 |
angles.acon[i] = .0001; |
539 |
angles.anat[i] = 90.; |
540 |
} else |
541 |
{ |
542 |
angles.acon[i] = .1; |
543 |
angles.anat[i] = 109.5; |
544 |
} |
545 |
} |
546 |
|
547 |
} |
548 |
} |
549 |
} |
550 |
} |
551 |
} |
552 |
} |
553 |
// =================================== |
554 |
// generalized angles for MMFF with no hydrogen minimization |
555 |
float get_general_angle(int ia) |
556 |
{ |
557 |
float angs[80] = { |
558 |
109.0, 120.0, 120.0, 180.0, 0.000, 109.0, 0.000, 109.0, 120.0, 118.0, |
559 |
0.000, 0.000, 0.000, 0.000, 109.0, 109.0, 120.0, 109.0, 109.0, 90.00, |
560 |
0.000, 60.00, 0.000, 0.000, 109.0, 109.0, 0.000, 0.000, 0.000, 90.00, |
561 |
0.000, 0.000, 0.000, 109.0, 0.000, 0.000, 120.0, 120.0, 120.0, 120.0, |
562 |
120.0, 180.0, 120.0, 120.0, 120.0, 120.0, 0.000, 0.000, 109.0, 0.000, |
563 |
109.0, 0.000, 180.0, 120.0, 120.0, 120.0, 120.0, 120.0, 120.0, 180.0, |
564 |
180.0, 120.0, 120.0, 120.0, 120.0, 120.0, 120.0, 109.0, 120.0, 109.0, |
565 |
0.000, 109.0, 109.0, 120.0, 120.0, 109.0, 0.000, 109.0, 109.0, 109.0 }; |
566 |
|
567 |
if (ia < 80) |
568 |
return (angs[ia-1]); |
569 |
else |
570 |
return 109.0; |
571 |
} |
572 |
/* --------------------------------- */ |
573 |
long kang(int i,int j,int k) |
574 |
{ |
575 |
long int kang_v; |
576 |
static long i10000 = 10000; |
577 |
static long i100 = 100; |
578 |
|
579 |
kang_v = i10000*i + i100*j + k; |
580 |
return( kang_v ); |
581 |
} |
582 |
|
583 |
/* -------------------- */ |
584 |
long ipack(int i,int j,int k,int l) |
585 |
{ |
586 |
long int ipack_v; |
587 |
static long itbig = 200000000; |
588 |
static long itmid = 2000000; |
589 |
static long ithou = 1000; |
590 |
|
591 |
ipack_v = itbig*i + itmid*j + ithou*k + l; |
592 |
return( ipack_v ); |
593 |
} |