1 #include "bbltyp.h"
2
ums_to_mini_ums(mini_ums * mini,ums_type * mol)3 void ums_to_mini_ums(mini_ums *mini, ums_type *mol)
4 {
5 int i;
6
7 mAtoms = Atoms;
8 mini->energy = Energy;
9
10 if (!mini->atoms)
11 initialize_mini(mini);
12
13 for (i = 1; i <= Atoms; i++)
14 {
15 mX(i) = X(i);
16 mY(i) = Y(i);
17 mZ(i) = Z(i);
18 }
19 }
20
copy_coordinates(mini_ums * mini,ums_type * mol)21 void copy_coordinates(mini_ums *mini, ums_type *mol)
22 {
23 int i;
24
25 Energy = mini->energy;
26
27 for (i = 1; i <= Atoms; i++)
28 {
29 X(i) = mX(i);
30 Y(i) = mY(i);
31 Z(i) = mZ(i);
32 }
33 }
34
35
copy_mini(mini_ums * mini1,mini_ums * mini2)36 void copy_mini(mini_ums *mini1,mini_ums *mini2)
37 {
38 int i;
39
40 mini1->num_atoms = mini2->num_atoms;
41 mini1->energy = mini2->energy;
42
43 if (!mini1->atoms)
44 initialize_mini(mini1);
45
46 for (i = 1;i <= mini1->num_atoms;i++)
47 {
48 mini1->atoms[i].x = mini2->atoms[i].x;
49 mini1->atoms[i].y = mini2->atoms[i].y;
50 mini1->atoms[i].z = mini2->atoms[i].z;
51 }
52 }
53
initialize_mini(mini_ums * mini)54 void initialize_mini(mini_ums *mini)
55 {
56 int i;
57
58 mini->atoms = (coord_type *)malloc((mAtoms + 1) * sizeof(coord_type));
59
60 for (i = 1; i <= mAtoms; i++)
61 {
62 mX(i) = 0.0;
63 mY(i) = 0.0;
64 mZ(i) = 0.0;
65 }
66 }
67
make_mini_enantiomer(mini_ums * ena,mini_ums * mini)68 void make_mini_enantiomer(mini_ums *ena, mini_ums *mini)
69 {
70 int i;
71
72 ena->num_atoms = mAtoms;
73 ena->energy = mEnergy;
74
75 if (!ena->atoms)
76 initialize_mini(ena);
77
78 copy_mini(ena,mini);
79
80 for (i = 1; i <= mAtoms; i++)
81 ena->atoms[i].x *= -1;
82 }
83
print_mini(mini_ums * mini)84 void print_mini(mini_ums *mini)
85 {
86 int i;
87
88 for (i = 1; i <= mAtoms; i++)
89 {
90 printf("%4d %10.5f%10.5f%10.5f\n",i,mX(i),mY(i),mZ(i));
91 }
92 }
93
94
add_mini(mini_ums * mini1,mini_ums * mini2,mini_ums * new_mini)95 void add_mini(mini_ums *mini1, mini_ums *mini2, mini_ums *new_mini)
96 {
97 int i,k;
98
99 new_mini->num_atoms = mini1->num_atoms + mini2->num_atoms;
100 new_mini->atoms = (coord_type *)malloc((new_mini->num_atoms + 1) * sizeof(coord_type));
101
102 for (i = 1; i <= mini1->num_atoms; i++)
103 {
104 new_mini->atoms[i].x = mini1->atoms[i].x;
105 new_mini->atoms[i].y = mini1->atoms[i].y;
106 new_mini->atoms[i].z = mini1->atoms[i].z;
107 }
108
109 k = mini1->num_atoms;
110
111 for (i = 1; i <= mini2->num_atoms; i++)
112 {
113 new_mini->atoms[i+k].x = mini2->atoms[i].x;
114 new_mini->atoms[i+k].y = mini2->atoms[i].y;
115 new_mini->atoms[i+k].z = mini2->atoms[i].z;
116 }
117 }
118
mini_to_set(mini_ums * mini,set_type * the_set)119 void mini_to_set(mini_ums *mini, set_type *the_set)
120 {
121 int i;
122
123 setclear(the_set);
124 for (i = 1; i <= mAtoms; i++)
125 {
126 if (non_zero(&mini->atoms[i]))
127 biton(the_set,i);
128 }
129 }
130
non_zero(coord_type * pt)131 int non_zero(coord_type *pt)
132 {
133 if ((pt->x == 0.0) && (pt->y == 0.0) && (pt->z == 0.0))
134 return(FALSE);
135 else
136 return(TRUE);
137 }
138
139
adjust_mini_vector(mini_ums * mini,int core_atom,int vect_atom,double new_dist)140 void adjust_mini_vector(mini_ums *mini, int core_atom, int vect_atom, double new_dist)
141 {
142 vect_type the_vector;
143
144 the_vector.x = mX(vect_atom) - mX(core_atom);
145 the_vector.y = mY(vect_atom) - mY(core_atom);
146 the_vector.z = mZ(vect_atom) - mZ(core_atom);
147
148 normalize_vect(&the_vector);
149 scal_x_vect(&the_vector,new_dist);
150 mPoint(vect_atom) = point_plus_vector(&mPoint(core_atom),&the_vector);
151 }
152
release_mini(mini_ums * mini)153 void release_mini(mini_ums *mini)
154 {
155 if (mini->atoms)
156 free(mini->atoms);
157 }
158
zero_mini(mini_ums * mini)159 void zero_mini(mini_ums *mini)
160 {
161 int i;
162
163 for (i = 1;i <= mAtoms;i++)
164 {
165 mX(i) = 0.0;
166 mY(i) = 0.0;
167 mZ(i) = 0.0;
168 }
169
170 }
171
read_mini(FILE * file,mini_ums * mini)172 void read_mini(FILE *file,mini_ums *mini)
173 {
174 int i;
175 char buffer[100];
176
177 fgets(buffer,sizeof(buffer),file);
178 sscanf(buffer,"%d",&mAtoms);
179 fgets(buffer,sizeof(buffer),file);
180 sscanf(buffer,"%lf",&mEnergy);
181
182 if (!mini->atoms)
183 initialize_mini(mini);
184
185 for (i = 1;i <= mAtoms;i++)
186 {
187 fgets(buffer,sizeof(buffer),file);
188 sscanf(buffer,"%lf %lf %lf",&mX(i),&mY(i),&mZ(i));
189 }
190 }
191
write_mini(FILE * file,mini_ums * mini)192 long int write_mini(FILE *file,mini_ums *mini)
193 {
194 int i;
195
196 fprintf(file,"%d\n%f\n",mAtoms,mEnergy);
197
198 for (i = 1;i <= mAtoms;i++)
199 fprintf(file,"%10.5f %10.5f %10.5f\n",mX(i),mY(i),mZ(i));
200
201 return(ftell(file));
202 }
203