1 |
#define EXTERN extern
|
2 |
|
3 |
#include "pcwin.h"
|
4 |
#include "pcmod.h"
|
5 |
|
6 |
#include "energies.h"
|
7 |
#include "bonds_ff.h"
|
8 |
#include "derivs.h"
|
9 |
#include "hess.h"
|
10 |
#include "field.h"
|
11 |
#include "fix.h"
|
12 |
|
13 |
EXTERN struct t_minim_values {
|
14 |
int iprint, ndc, nconst;
|
15 |
float dielc;
|
16 |
} minim_values;
|
17 |
int find_bond(int,int);
|
18 |
int find_fixed_bond(int,int);
|
19 |
void egeom(void);
|
20 |
void egeom1(void);
|
21 |
void egeom2(int);
|
22 |
|
23 |
// ============================================
|
24 |
void egeom()
|
25 |
{
|
26 |
int i;
|
27 |
int ia, ib, ic, id;
|
28 |
double xr, yr, zr, rik, rik2;
|
29 |
double xia,yia,zia, xib,yib,zib, xic,yic,zic, xid,yid,zid;
|
30 |
double xab,yab,zab, xcb,ycb,zcb, rab2,rcb2, rcb;
|
31 |
double dot, cosine,angle, af1, af2;
|
32 |
double xba,yba,zba, xdc,ydc,zdc, xt,yt,zt,xu,yu,zu;
|
33 |
double xtu,ytu,ztu, rt2, ru2, rtru, sine, tf1,tf2;
|
34 |
double t1, t2, df1, df2,target;
|
35 |
double dt, dt2, e;
|
36 |
|
37 |
if (minim_values.iprint)
|
38 |
{
|
39 |
fprintf(pcmlogfile,"\nFixed Distance Terms \n");
|
40 |
fprintf(pcmlogfile," At1 At2 R BLen Bconst Eb\n");
|
41 |
}
|
42 |
// restrained atoms
|
43 |
for (i=0; i < restrain_atom.natom_restrain; i++)
|
44 |
{
|
45 |
ia = restrain_atom.katom_restrain[i];
|
46 |
if (atom[ia].use)
|
47 |
{
|
48 |
xr = yr = zr = 0.0;
|
49 |
xr = atom[ia].x - restrain_atom.restrain_position[i][0];
|
50 |
yr = atom[ia].y - restrain_atom.restrain_position[i][1];
|
51 |
zr = atom[ia].z - restrain_atom.restrain_position[i][2];
|
52 |
dt2 = (xr*xr + yr*yr + zr*zr);
|
53 |
e = units.bndunit *restrain_atom.restrain_const[i]*dt2;
|
54 |
energies.egeom += e;
|
55 |
}
|
56 |
}
|
57 |
// fixed distances
|
58 |
for (i=0; i < fx_dist.ndfix; i++)
|
59 |
{
|
60 |
ia = fx_dist.kdfix[i][0];
|
61 |
ib = fx_dist.kdfix[i][1];
|
62 |
if ( atom[ia].use || atom[ib].use )
|
63 |
{
|
64 |
xr = atom[ia].x - atom[ib].x;
|
65 |
yr = atom[ia].y - atom[ib].y;
|
66 |
zr = atom[ia].z - atom[ib].z;
|
67 |
rik2 = xr*xr + yr*yr + zr*zr;
|
68 |
rik = sqrt(rik2);
|
69 |
df1 = fx_dist.min_dist[i];
|
70 |
df2 = fx_dist.max_dist[i];
|
71 |
target = rik;
|
72 |
if (rik < df1) target = df1;
|
73 |
if (rik > df2) target = df2;
|
74 |
dt = rik - target;
|
75 |
|
76 |
dt2 = dt*dt;
|
77 |
e = units.bndunit *fx_dist.fdconst[i]*dt2;
|
78 |
|
79 |
energies.egeom += e;
|
80 |
atom[ia].energy += e;
|
81 |
atom[ib].energy += e;
|
82 |
if (minim_values.iprint)
|
83 |
fprintf(pcmlogfile,"Fixed Dist: %2s(%-3d) - %2s(%-3d) %-8.3f %-8.3f %-8.3f %-8.3f = %-8.4f\n",atom[ia].name,ia,atom[ib].name
|
84 |
,ib, rik, fx_dist.min_dist[i],fx_dist.max_dist[i], fx_dist.fdconst[i],e);
|
85 |
}
|
86 |
}
|
87 |
// fixed angle
|
88 |
for (i=0; i < fx_angle.nafix; i++)
|
89 |
{
|
90 |
ia = fx_angle.kafix[i][0];
|
91 |
ib = fx_angle.kafix[i][1];
|
92 |
ic = fx_angle.kafix[i][2];
|
93 |
if (atom[ia].use || atom[ib].use || atom[ic].use)
|
94 |
{
|
95 |
xia = atom[ia].x;
|
96 |
yia = atom[ia].y;
|
97 |
zia = atom[ia].z;
|
98 |
xib = atom[ib].x;
|
99 |
yib = atom[ib].y;
|
100 |
zib = atom[ib].z;
|
101 |
xic = atom[ic].x;
|
102 |
yic = atom[ic].y;
|
103 |
zic = atom[ic].z;
|
104 |
xab = xia - xib;
|
105 |
yab = yia - yib;
|
106 |
zab = zia - zib;
|
107 |
xcb = xic - xib;
|
108 |
ycb = yic - yib;
|
109 |
zcb = zic - zib;
|
110 |
rab2 = xab*xab + yab*yab + zab*zab;
|
111 |
rcb2 = xcb*xcb + ycb*ycb + zcb*zcb;
|
112 |
if (rab2 > 0.00001 && rcb2 > 0.00001)
|
113 |
{
|
114 |
dot = xab*xcb + yab*ycb + zab*zcb;
|
115 |
cosine = dot /sqrt(rab2*rcb2);
|
116 |
if (cosine > 1.0)
|
117 |
cosine = 1.0;
|
118 |
if (cosine < -1.0)
|
119 |
cosine = -1.0;
|
120 |
angle = radian*acos(cosine);
|
121 |
af1 = fx_angle.min_ang[i];
|
122 |
af2 = fx_angle.max_ang[i];
|
123 |
target = angle;
|
124 |
if (angle < af1) target = af1;
|
125 |
if (angle > af2) target = af2;
|
126 |
dt = angle - target;
|
127 |
dt2 = dt*dt;
|
128 |
e = units.angunit*fx_angle.faconst[i]*dt2;
|
129 |
energies.egeom += e;
|
130 |
atom[ia].energy += e;
|
131 |
atom[ib].energy += e;
|
132 |
atom[ic].energy += e;
|
133 |
if (minim_values.iprint)
|
134 |
fprintf(pcmlogfile,"Fixed Angle: %2s(%-3d) - %2s(%-3d) %-8.3f %-8.3f %-8.3f %-8.3f = %-8.4f\n",atom[ia].name,ia,atom[ib].name
|
135 |
,ib, atom[ic].name,ic, angle, fx_angle.min_ang[i],fx_angle.max_ang[i], fx_angle.faconst[i],e);
|
136 |
}
|
137 |
}
|
138 |
}
|
139 |
// fixed torsion
|
140 |
for (i=0; i < fx_torsion.ntfix; i++)
|
141 |
{
|
142 |
ia = fx_torsion.ktfix[i][0];
|
143 |
ib = fx_torsion.ktfix[i][1];
|
144 |
ic = fx_torsion.ktfix[i][2];
|
145 |
id = fx_torsion.ktfix[i][3];
|
146 |
if (atom[ia].use || atom[ib].use || atom[ic].use)
|
147 |
{
|
148 |
xia = atom[ia].x;
|
149 |
yia = atom[ia].y;
|
150 |
zia = atom[ia].z;
|
151 |
xib = atom[ib].x;
|
152 |
yib = atom[ib].y;
|
153 |
zib = atom[ib].z;
|
154 |
xic = atom[ic].x;
|
155 |
yic = atom[ic].y;
|
156 |
zic = atom[ic].z;
|
157 |
xid = atom[id].x;
|
158 |
yid = atom[id].y;
|
159 |
zid = atom[id].z;
|
160 |
xba = xib - xia;
|
161 |
yba = yib - yia;
|
162 |
zba = zib - zia;
|
163 |
xcb = xic - xib;
|
164 |
ycb = yic - yib;
|
165 |
zcb = zic - zib;
|
166 |
xdc = xid - xic;
|
167 |
ydc = yid - yic;
|
168 |
zdc = zid - zic;
|
169 |
xt = yba*zcb - ycb*zba;
|
170 |
yt = zba*xcb - zcb*xba;
|
171 |
zt = xba*ycb - xcb*yba;
|
172 |
xu = ycb*zdc - ydc*zcb;
|
173 |
yu = zcb*xdc - zdc*xcb;
|
174 |
zu = xcb*ydc - xdc*ycb;
|
175 |
xtu = yt*zu - yu*zt;
|
176 |
ytu = zt*xu - zu*xt;
|
177 |
ztu = xt*yu - xu*yt;
|
178 |
rt2 = xt*xt + yt*yt + zt*zt;
|
179 |
ru2 = xu*xu + yu*yu + zu*zu;
|
180 |
rtru = sqrt(rt2 * ru2);
|
181 |
if (rtru > 0.0001)
|
182 |
{
|
183 |
rcb = sqrt(xcb*xcb + ycb*ycb + zcb*zcb);
|
184 |
cosine = (xt*xu + yt*yu + zt*zu) / rtru;
|
185 |
sine = (xcb*xtu + ycb*ytu + zcb*ztu) / (rcb*rtru);
|
186 |
if (cosine > 1.0) cosine = 1.0;
|
187 |
if (cosine < -1.0) cosine = -1.0;
|
188 |
angle = radian*acos(cosine);
|
189 |
if (sine < 0.0) angle = -angle;
|
190 |
tf1 = fx_torsion.min_tor[i];
|
191 |
tf2 = fx_torsion.max_tor[i];
|
192 |
if (angle > tf1 && angle < tf2)
|
193 |
target = angle;
|
194 |
else if ( (angle > tf1) && (tf1 > tf2))
|
195 |
target = angle;
|
196 |
else if ( (angle < tf2) && (tf1 > tf2))
|
197 |
target = angle;
|
198 |
else
|
199 |
{
|
200 |
t1 = angle - tf1;
|
201 |
t2 = angle - tf2;
|
202 |
if (t1 > 180.0)
|
203 |
t1 -= 360.0;
|
204 |
else if (t1 < -180.0)
|
205 |
t1 += 360.0;
|
206 |
if (t2 > 180.0)
|
207 |
t2 -= 360.0;
|
208 |
else if (t2 < -180.0)
|
209 |
t2 += 360.0;
|
210 |
if (fabs(t1) < fabs(t2))
|
211 |
target = tf1;
|
212 |
else
|
213 |
target = tf2;
|
214 |
}
|
215 |
dt = angle - target;
|
216 |
if (dt > 180.0) dt -= 360.0;
|
217 |
if (dt < -180.0) dt += 360.0;
|
218 |
dt2 = dt*dt;
|
219 |
e = units.torsunit*dt2*fx_torsion.ftconst[i];
|
220 |
energies.egeom += e;
|
221 |
}
|
222 |
}
|
223 |
}
|
224 |
}
|
225 |
// =====================================================
|
226 |
void egeom1()
|
227 |
{
|
228 |
int i;
|
229 |
int ia, ib, ic, id;
|
230 |
double xr, yr, zr, rik, rik2;
|
231 |
double xia,yia,zia, xib,yib,zib, xic,yic,zic, xid,yid,zid;
|
232 |
double xab,yab,zab, xcb,ycb,zcb, rab2,rcb2, rcb;
|
233 |
double dot, cosine,angle, af1, af2;
|
234 |
double xba,yba,zba, xdc,ydc,zdc, xt,yt,zt,xu,yu,zu;
|
235 |
double xtu,ytu,ztu, rt2, ru2, rtru, sine, tf1,tf2;
|
236 |
double xp,yp,zp, rp, xca,yca,zca, xdb,ydb,zdb;
|
237 |
double t1, t2, df1, df2,target;
|
238 |
double dt, dt2, e;
|
239 |
double de, deddt, dedx, dedy,dedz, terma,termc;
|
240 |
double dedphi,dedxt,dedyt,dedzt,dedxu,dedyu,dedzu;
|
241 |
double dedxia,dedyia,dedzia;
|
242 |
double dedxib,dedyib,dedzib;
|
243 |
double dedxic,dedyic,dedzic;
|
244 |
double dedxid,dedyid,dedzid;
|
245 |
|
246 |
// restrained atoms
|
247 |
for (i=0; i < restrain_atom.natom_restrain; i++)
|
248 |
{
|
249 |
ia = restrain_atom.katom_restrain[i];
|
250 |
if (atom[ia].use)
|
251 |
{
|
252 |
xr = yr = zr = 0.0;
|
253 |
xr = atom[ia].x - restrain_atom.restrain_position[i][0];
|
254 |
yr = atom[ia].y - restrain_atom.restrain_position[i][1];
|
255 |
zr = atom[ia].z - restrain_atom.restrain_position[i][2];
|
256 |
rik2 = (xr*xr + yr*yr + zr*zr);
|
257 |
dt2 = rik2;
|
258 |
e = units.bndunit *restrain_atom.restrain_const[i]*dt2;
|
259 |
energies.egeom += e;
|
260 |
|
261 |
rik = sqrt(rik2);
|
262 |
dt = rik;
|
263 |
if (rik < 0.00001) rik = 1.0;
|
264 |
de = 2.0*units.bndunit *restrain_atom.restrain_const[i]*dt/rik;
|
265 |
dedx = de*xr;
|
266 |
dedy = de*yr;
|
267 |
dedz = de*zr;
|
268 |
deriv.degeom[ia][0] += dedx;
|
269 |
deriv.degeom[ia][1] += dedy;
|
270 |
deriv.degeom[ia][2] += dedz;
|
271 |
}
|
272 |
}
|
273 |
// fixed distances
|
274 |
for (i=0; i < fx_dist.ndfix; i++)
|
275 |
{
|
276 |
ia = fx_dist.kdfix[i][0];
|
277 |
ib = fx_dist.kdfix[i][1];
|
278 |
if ( atom[ia].use || atom[ib].use )
|
279 |
{
|
280 |
xr = atom[ia].x - atom[ib].x;
|
281 |
yr = atom[ia].y - atom[ib].y;
|
282 |
zr = atom[ia].z - atom[ib].z;
|
283 |
rik2 = xr*xr + yr*yr + zr*zr;
|
284 |
rik = sqrt(rik2);
|
285 |
df1 = fx_dist.min_dist[i];
|
286 |
df2 = fx_dist.max_dist[i];
|
287 |
target = rik;
|
288 |
if (rik < df1) target = df1;
|
289 |
if (rik > df2) target = df2;
|
290 |
dt = rik - target;
|
291 |
|
292 |
dt2 = dt*dt;
|
293 |
e = units.bndunit *fx_dist.fdconst[i]*dt2;
|
294 |
if (rik == 0.0) rik = 1.0;
|
295 |
energies.egeom += e;
|
296 |
|
297 |
de = 2.0*units.bndunit *fx_dist.fdconst[i]*dt/rik;
|
298 |
dedx = de*xr;
|
299 |
dedy = de*yr;
|
300 |
dedz = de*zr;
|
301 |
deriv.degeom[ia][0] += dedx;
|
302 |
deriv.degeom[ia][1] += dedy;
|
303 |
deriv.degeom[ia][2] += dedz;
|
304 |
deriv.degeom[ib][0] -= dedx;
|
305 |
deriv.degeom[ib][1] -= dedy;
|
306 |
deriv.degeom[ib][2] -= dedz;
|
307 |
}
|
308 |
}
|
309 |
// fixed angle
|
310 |
for (i=0; i < fx_angle.nafix; i++)
|
311 |
{
|
312 |
ia = fx_angle.kafix[i][0];
|
313 |
ib = fx_angle.kafix[i][1];
|
314 |
ic = fx_angle.kafix[i][2];
|
315 |
if (atom[ia].use || atom[ib].use || atom[ic].use)
|
316 |
{
|
317 |
xia = atom[ia].x;
|
318 |
yia = atom[ia].y;
|
319 |
zia = atom[ia].z;
|
320 |
xib = atom[ib].x;
|
321 |
yib = atom[ib].y;
|
322 |
zib = atom[ib].z;
|
323 |
xic = atom[ic].x;
|
324 |
yic = atom[ic].y;
|
325 |
zic = atom[ic].z;
|
326 |
xab = xia - xib;
|
327 |
yab = yia - yib;
|
328 |
zab = zia - zib;
|
329 |
xcb = xic - xib;
|
330 |
ycb = yic - yib;
|
331 |
zcb = zic - zib;
|
332 |
rab2 = xab*xab + yab*yab + zab*zab;
|
333 |
rcb2 = xcb*xcb + ycb*ycb + zcb*zcb;
|
334 |
if (rab2 > 0.00001 && rcb2 > 0.00001)
|
335 |
{
|
336 |
xp = ycb*zab - zcb*yab;
|
337 |
yp = zcb*xab - xcb*zab;
|
338 |
zp = xcb*yab - ycb*xab;
|
339 |
rp = sqrt(xp*xp + yp*yp + zp*zp);
|
340 |
if (rp < 0.00001) rp = 0.00001;
|
341 |
dot = xab*xcb + yab*ycb + zab*zcb;
|
342 |
cosine = dot /sqrt(rab2*rcb2);
|
343 |
if (cosine > 1.0)
|
344 |
cosine = 1.0;
|
345 |
if (cosine < -1.0)
|
346 |
cosine = -1.0;
|
347 |
angle = radian*acos(cosine);
|
348 |
af1 = fx_angle.min_ang[i];
|
349 |
af2 = fx_angle.max_ang[i];
|
350 |
target = angle;
|
351 |
if (angle < af1) target = af1;
|
352 |
if (angle > af2) target = af2;
|
353 |
dt = angle - target;
|
354 |
dt2 = dt*dt;
|
355 |
e = units.angunit*fx_angle.faconst[i]*dt2;
|
356 |
energies.egeom += e;
|
357 |
|
358 |
deddt = 2.0*units.angunit*fx_angle.faconst[i]*dt*radian;
|
359 |
terma = -deddt/(rab2*rp);
|
360 |
termc = deddt/(rcb2*rp);
|
361 |
dedxia = terma * (yab*zp-zab*yp);
|
362 |
dedyia = terma * (zab*xp-xab*zp);
|
363 |
dedzia = terma * (xab*yp-yab*xp);
|
364 |
dedxic = termc * (ycb*zp-zcb*yp);
|
365 |
dedyic = termc * (zcb*xp-xcb*zp);
|
366 |
dedzic = termc * (xcb*yp-ycb*xp);
|
367 |
dedxib = -dedxia - dedxic;
|
368 |
dedyib = -dedyia - dedyic;
|
369 |
dedzib = -dedzia - dedzic;
|
370 |
deriv.degeom[ia][0] += dedxia;
|
371 |
deriv.degeom[ia][1] += dedyia;
|
372 |
deriv.degeom[ia][2] += dedzia;
|
373 |
deriv.degeom[ib][0] += dedxib;
|
374 |
deriv.degeom[ib][1] += dedyib;
|
375 |
deriv.degeom[ib][2] += dedzib;
|
376 |
deriv.degeom[ic][0] += dedxic;
|
377 |
deriv.degeom[ic][1] += dedyic;
|
378 |
deriv.degeom[ic][2] += dedzic;
|
379 |
}
|
380 |
}
|
381 |
}
|
382 |
// fixed torsion
|
383 |
for (i=0; i < fx_torsion.ntfix; i++)
|
384 |
{
|
385 |
ia = fx_torsion.ktfix[i][0];
|
386 |
ib = fx_torsion.ktfix[i][1];
|
387 |
ic = fx_torsion.ktfix[i][2];
|
388 |
id = fx_torsion.ktfix[i][3];
|
389 |
if (atom[ia].use || atom[ib].use || atom[ic].use)
|
390 |
{
|
391 |
xia = atom[ia].x;
|
392 |
yia = atom[ia].y;
|
393 |
zia = atom[ia].z;
|
394 |
xib = atom[ib].x;
|
395 |
yib = atom[ib].y;
|
396 |
zib = atom[ib].z;
|
397 |
xic = atom[ic].x;
|
398 |
yic = atom[ic].y;
|
399 |
zic = atom[ic].z;
|
400 |
xid = atom[id].x;
|
401 |
yid = atom[id].y;
|
402 |
zid = atom[id].z;
|
403 |
xba = xib - xia;
|
404 |
yba = yib - yia;
|
405 |
zba = zib - zia;
|
406 |
xcb = xic - xib;
|
407 |
ycb = yic - yib;
|
408 |
zcb = zic - zib;
|
409 |
xdc = xid - xic;
|
410 |
ydc = yid - yic;
|
411 |
zdc = zid - zic;
|
412 |
xt = yba*zcb - ycb*zba;
|
413 |
yt = zba*xcb - zcb*xba;
|
414 |
zt = xba*ycb - xcb*yba;
|
415 |
xu = ycb*zdc - ydc*zcb;
|
416 |
yu = zcb*xdc - zdc*xcb;
|
417 |
zu = xcb*ydc - xdc*ycb;
|
418 |
xtu = yt*zu - yu*zt;
|
419 |
ytu = zt*xu - zu*xt;
|
420 |
ztu = xt*yu - xu*yt;
|
421 |
rt2 = xt*xt + yt*yt + zt*zt;
|
422 |
ru2 = xu*xu + yu*yu + zu*zu;
|
423 |
rtru = sqrt(rt2 * ru2);
|
424 |
if (rtru > 0.0001)
|
425 |
{
|
426 |
rcb = sqrt(xcb*xcb + ycb*ycb + zcb*zcb);
|
427 |
cosine = (xt*xu + yt*yu + zt*zu) / rtru;
|
428 |
sine = (xcb*xtu + ycb*ytu + zcb*ztu) / (rcb*rtru);
|
429 |
if (cosine > 1.0) cosine = 1.0;
|
430 |
if (cosine < -1.0) cosine = -1.0;
|
431 |
angle = radian*acos(cosine);
|
432 |
if (sine < 0.0) angle = -angle;
|
433 |
tf1 = fx_torsion.min_tor[i];
|
434 |
tf2 = fx_torsion.max_tor[i];
|
435 |
if (angle > tf1 && angle < tf2)
|
436 |
target = angle;
|
437 |
else if ( (angle > tf1) && (tf1 > tf2))
|
438 |
target = angle;
|
439 |
else if ( (angle < tf2) && (tf1 > tf2))
|
440 |
target = angle;
|
441 |
else
|
442 |
{
|
443 |
t1 = angle - tf1;
|
444 |
t2 = angle - tf2;
|
445 |
if (t1 > 180.0)
|
446 |
t1 -= 360.0;
|
447 |
else if (t1 < -180.0)
|
448 |
t1 += 360.0;
|
449 |
if (t2 > 180.0)
|
450 |
t2 -= 360.0;
|
451 |
else if (t2 < -180.0)
|
452 |
t2 += 360.0;
|
453 |
if (fabs(t1) < fabs(t2))
|
454 |
target = tf1;
|
455 |
else
|
456 |
target = tf2;
|
457 |
}
|
458 |
dt = angle - target;
|
459 |
if (dt > 180.0) dt -= 360.0;
|
460 |
if (dt < -180.0) dt += 360.0;
|
461 |
dt2 = dt*dt;
|
462 |
e = units.torsunit*dt2*fx_torsion.ftconst[i];
|
463 |
energies.egeom += e;
|
464 |
|
465 |
dedphi = 2.0*units.torsunit*fx_torsion.ftconst[i]*dt*radian;
|
466 |
xca = xic - xia;
|
467 |
yca = yic - yia;
|
468 |
zca = zic - zia;
|
469 |
xdb = xid - xib;
|
470 |
ydb = yid - yib;
|
471 |
zdb = zid - zib;
|
472 |
dedxt = dedphi * (yt*zcb - ycb*zt) / (rt2*rcb);
|
473 |
dedyt = dedphi * (zt*xcb - zcb*xt) / (rt2*rcb);
|
474 |
dedzt = dedphi * (xt*ycb - xcb*yt) / (rt2*rcb);
|
475 |
dedxu = -dedphi * (yu*zcb - ycb*zu) / (ru2*rcb);
|
476 |
dedyu = -dedphi * (zu*xcb - zcb*xu) / (ru2*rcb);
|
477 |
dedzu = -dedphi * (xu*ycb - xcb*yu) / (ru2*rcb);
|
478 |
|
479 |
dedxia = zcb*dedyt - ycb*dedzt;
|
480 |
dedyia = xcb*dedzt - zcb*dedxt;
|
481 |
dedzia = ycb*dedxt - xcb*dedyt;
|
482 |
dedxib = yca*dedzt - zca*dedyt + zdc*dedyu - ydc*dedzu;
|
483 |
dedyib = zca*dedxt - xca*dedzt + xdc*dedzu - zdc*dedxu;
|
484 |
dedzib = xca*dedyt - yca*dedxt + ydc*dedxu - xdc*dedyu;
|
485 |
dedxic = zba*dedyt - yba*dedzt + ydb*dedzu - zdb*dedyu;
|
486 |
dedyic = xba*dedzt - zba*dedxt + zdb*dedxu - xdb*dedzu;
|
487 |
dedzic = yba*dedxt - xba*dedyt + xdb*dedyu - ydb*dedxu;
|
488 |
dedxid = zcb*dedyu - ycb*dedzu;
|
489 |
dedyid = xcb*dedzu - zcb*dedxu;
|
490 |
dedzid = ycb*dedxu - xcb*dedyu;
|
491 |
|
492 |
deriv.degeom[ia][0] += dedxia;
|
493 |
deriv.degeom[ia][1] += dedyia;
|
494 |
deriv.degeom[ia][2] += dedzia;
|
495 |
deriv.degeom[ib][0] += dedxib;
|
496 |
deriv.degeom[ib][1] += dedyib;
|
497 |
deriv.degeom[ib][2] += dedzib;
|
498 |
deriv.degeom[ic][0] += dedxic;
|
499 |
deriv.degeom[ic][1] += dedyic;
|
500 |
deriv.degeom[ic][2] += dedzic;
|
501 |
deriv.degeom[id][0] += dedxid;
|
502 |
deriv.degeom[id][1] += dedyid;
|
503 |
deriv.degeom[id][2] += dedzid;
|
504 |
}
|
505 |
}
|
506 |
}
|
507 |
}
|
508 |
// ==========================================
|
509 |
void egeom2(int jatm)
|
510 |
{
|
511 |
int i,j, ia,ib,ic,id;
|
512 |
double xr, yr, zr, rik, rik2;
|
513 |
double xia,yia,zia, xib,yib,zib, xic,yic,zic, xid,yid,zid;
|
514 |
double xab,yab,zab, xcb,ycb,zcb, rab2,rcb2, rcb;
|
515 |
double dot, cosine,angle, af1, af2;
|
516 |
double xba,yba,zba, xdc,ydc,zdc, xt,yt,zt,xu,yu,zu;
|
517 |
double xtu,ytu,ztu, rt2, ru2, rtru, sine, tf1,tf2;
|
518 |
double xp,yp,zp, rp,rp2, xca,yca,zca, xdb,ydb,zdb;
|
519 |
double t1, t2, df1, df2,target;
|
520 |
double dt, dt2;
|
521 |
double de, deddt, terma,termc;
|
522 |
double dedphi;
|
523 |
double d2e[3][3], d2eddt2, d2edphi2;
|
524 |
double term,termx,termy,termz;
|
525 |
double xrab,yrab,zrab;
|
526 |
double xrcb,yrcb,zrcb;
|
527 |
double xabp,yabp,zabp;
|
528 |
double xcbp,ycbp,zcbp;
|
529 |
double ddtdxia,ddtdyia,ddtdzia;
|
530 |
double ddtdxib,ddtdyib,ddtdzib;
|
531 |
double ddtdxic,ddtdyic,ddtdzic;
|
532 |
double dphidxt,dphidyt,dphidzt;
|
533 |
double dphidxu,dphidyu,dphidzu;
|
534 |
double dphidxia,dphidyia,dphidzia;
|
535 |
double dphidxib,dphidyib,dphidzib;
|
536 |
double dphidxic,dphidyic,dphidzic;
|
537 |
double dphidxid,dphidyid,dphidzid;
|
538 |
double xycb2,xzcb2,yzcb2;
|
539 |
double rcbxt,rcbyt,rcbzt,rcbt2;
|
540 |
double rcbxu,rcbyu,rcbzu,rcbu2;
|
541 |
double dphidxibt,dphidyibt,dphidzibt;
|
542 |
double dphidxibu,dphidyibu,dphidzibu;
|
543 |
double dphidxict,dphidyict,dphidzict;
|
544 |
double dphidxicu,dphidyicu,dphidzicu;
|
545 |
double dxiaxia,dyiayia,dziazia;
|
546 |
double dxibxib,dyibyib,dzibzib;
|
547 |
double dxicxic,dyicyic,dziczic;
|
548 |
double dxidxid,dyidyid,dzidzid;
|
549 |
double dxiayia,dxiazia,dyiazia;
|
550 |
double dxibyib,dxibzib,dyibzib;
|
551 |
double dxicyic,dxiczic,dyiczic;
|
552 |
double dxidyid,dxidzid,dyidzid;
|
553 |
double dxiaxib,dxiayib,dxiazib;
|
554 |
double dyiaxib,dyiayib,dyiazib;
|
555 |
double dziaxib,dziayib,dziazib;
|
556 |
double dxiaxic,dxiayic,dxiazic;
|
557 |
double dyiaxic,dyiayic,dyiazic;
|
558 |
double dziaxic,dziayic,dziazic;
|
559 |
double dxiaxid,dxiayid,dxiazid;
|
560 |
double dyiaxid,dyiayid,dyiazid;
|
561 |
double dziaxid,dziayid,dziazid;
|
562 |
double dxibxia,dxibyia,dxibzia;
|
563 |
double dyibxia,dyibyia,dyibzia;
|
564 |
double dzibxia,dzibyia,dzibzia;
|
565 |
double dxibxic,dxibyic,dxibzic;
|
566 |
double dyibxic,dyibyic,dyibzic;
|
567 |
double dzibxic,dzibyic,dzibzic;
|
568 |
double dxibxid,dxibyid,dxibzid;
|
569 |
double dyibxid,dyibyid,dyibzid;
|
570 |
double dzibxid,dzibyid,dzibzid;
|
571 |
double dxicxid,dxicyid,dxiczid;
|
572 |
double dyicxid,dyicyid,dyiczid;
|
573 |
double dzicxid,dzicyid,dziczid;
|
574 |
|
575 |
// restrained atoms
|
576 |
for (i=0; i < restrain_atom.natom_restrain; i++)
|
577 |
{
|
578 |
ia = restrain_atom.katom_restrain[i];
|
579 |
if (ia == jatm && atom[ia].use)
|
580 |
{
|
581 |
xr = yr = zr = 0.0;
|
582 |
xr = atom[ia].x - restrain_atom.restrain_position[i][0];
|
583 |
yr = atom[ia].y - restrain_atom.restrain_position[i][1];
|
584 |
zr = atom[ia].z - restrain_atom.restrain_position[i][2];
|
585 |
rik2 = (xr*xr + yr*yr + zr*zr);
|
586 |
dt2 = rik2;
|
587 |
rik = sqrt(rik2);
|
588 |
dt = rik;
|
589 |
deddt = 2.0*units.bndunit *restrain_atom.restrain_const[i];
|
590 |
if (dt == 0.0) deddt = 0.0;
|
591 |
if (rik < 0.00001)
|
592 |
{
|
593 |
de = deddt;
|
594 |
term = 0.0;
|
595 |
} else
|
596 |
{
|
597 |
de = deddt *dt/rik;
|
598 |
term = (deddt-de)/rik2;
|
599 |
}
|
600 |
de = deddt*dt/rik;
|
601 |
term = (deddt-de) / rik2;
|
602 |
termx = term * xr;
|
603 |
termy = term * yr;
|
604 |
termz = term * zr;
|
605 |
|
606 |
d2e[0][0] = termx*xr + de;
|
607 |
d2e[0][1] = termx*yr;
|
608 |
d2e[0][2] = termx*zr;
|
609 |
d2e[1][0] = d2e[0][0];
|
610 |
d2e[1][1] = termy*yr + de;
|
611 |
d2e[1][2] = termy*zr;
|
612 |
d2e[2][0] = d2e[0][2];
|
613 |
d2e[2][1] = d2e[1][2];
|
614 |
d2e[2][2] = termz*zr + de;
|
615 |
|
616 |
for (j=0; j < 3; j++)
|
617 |
{
|
618 |
hess.hessx[ia][j] += d2e[j][0];
|
619 |
hess.hessy[ia][j] += d2e[j][1];
|
620 |
hess.hessz[ia][j] += d2e[j][2];
|
621 |
}
|
622 |
}
|
623 |
}
|
624 |
// fixed distance
|
625 |
for (i=0; i < fx_dist.ndfix; i++)
|
626 |
{
|
627 |
ia = fx_dist.kdfix[i][0];
|
628 |
ib = fx_dist.kdfix[i][1];
|
629 |
if ( jatm == ia || jatm == ib )
|
630 |
{
|
631 |
if (jatm == ib)
|
632 |
{
|
633 |
ib = ia;
|
634 |
ia = jatm;
|
635 |
}
|
636 |
xr = atom[ia].x - atom[ib].x;
|
637 |
yr = atom[ia].y - atom[ib].y;
|
638 |
zr = atom[ia].z - atom[ib].z;
|
639 |
rik2 = xr*xr + yr*yr + zr*zr;
|
640 |
rik = sqrt(rik2);
|
641 |
df1 = fx_dist.min_dist[i];
|
642 |
df2 = fx_dist.max_dist[i];
|
643 |
target = rik;
|
644 |
if (rik < df1) target = df1;
|
645 |
if (rik > df2) target = df2;
|
646 |
dt = rik - target;
|
647 |
dt2 = dt*dt;
|
648 |
deddt = 2.0*units.bndunit *fx_dist.fdconst[i];
|
649 |
if (dt == 0.0) deddt = 0.0;
|
650 |
if (rik < 0.00001)
|
651 |
{
|
652 |
rik = 0.0001;
|
653 |
rik2 = rik*rik;
|
654 |
}
|
655 |
de = deddt*dt/rik;
|
656 |
term = (deddt-de) / rik2;
|
657 |
termx = term * xr;
|
658 |
termy = term * yr;
|
659 |
termz = term * zr;
|
660 |
|
661 |
d2e[0][0] = termx*xr + de;
|
662 |
d2e[0][1] = termx*yr;
|
663 |
d2e[0][2] = termx*zr;
|
664 |
d2e[1][0] = d2e[0][0];
|
665 |
d2e[1][1] = termy*yr + de;
|
666 |
d2e[1][2] = termy*zr;
|
667 |
d2e[2][0] = d2e[0][2];
|
668 |
d2e[2][1] = d2e[1][2];
|
669 |
d2e[2][2] = termz*zr + de;
|
670 |
|
671 |
for (j=0; j < 3; j++)
|
672 |
{
|
673 |
hess.hessx[ia][j] += d2e[j][0];
|
674 |
hess.hessy[ia][j] += d2e[j][1];
|
675 |
hess.hessz[ia][j] += d2e[j][2];
|
676 |
hess.hessx[ib][j] -= d2e[j][0];
|
677 |
hess.hessy[ib][j] -= d2e[j][1];
|
678 |
hess.hessz[ib][j] -= d2e[j][2];
|
679 |
}
|
680 |
}
|
681 |
}
|
682 |
// fixed angle
|
683 |
for (i=0; i < fx_angle.nafix; i++)
|
684 |
{
|
685 |
ia = fx_angle.kafix[i][0];
|
686 |
ib = fx_angle.kafix[i][1];
|
687 |
ic = fx_angle.kafix[i][2];
|
688 |
if (ia == jatm || ib == jatm || ic == jatm)
|
689 |
{
|
690 |
xia = atom[ia].x;
|
691 |
yia = atom[ia].y;
|
692 |
zia = atom[ia].z;
|
693 |
xib = atom[ib].x;
|
694 |
yib = atom[ib].y;
|
695 |
zib = atom[ib].z;
|
696 |
xic = atom[ic].x;
|
697 |
yic = atom[ic].y;
|
698 |
zic = atom[ic].z;
|
699 |
xab = xia - xib;
|
700 |
yab = yia - yib;
|
701 |
zab = zia - zib;
|
702 |
xcb = xic - xib;
|
703 |
ycb = yic - yib;
|
704 |
zcb = zic - zib;
|
705 |
rab2 = xab*xab + yab*yab + zab*zab;
|
706 |
rcb2 = xcb*xcb + ycb*ycb + zcb*zcb;
|
707 |
if (rab2 > 0.00001 && rcb2 > 0.00001)
|
708 |
{
|
709 |
xp = ycb*zab - zcb*yab;
|
710 |
yp = zcb*xab - xcb*zab;
|
711 |
zp = xcb*yab - ycb*xab;
|
712 |
rp = sqrt(xp*xp + yp*yp + zp*zp);
|
713 |
if (rp < 0.00001) rp = 0.00001;
|
714 |
dot = xab*xcb + yab*ycb + zab*zcb;
|
715 |
cosine = dot /sqrt(rab2*rcb2);
|
716 |
if (cosine > 1.0)
|
717 |
cosine = 1.0;
|
718 |
if (cosine < -1.0)
|
719 |
cosine = -1.0;
|
720 |
angle = radian*acos(cosine);
|
721 |
af1 = fx_angle.min_ang[i];
|
722 |
af2 = fx_angle.max_ang[i];
|
723 |
target = angle;
|
724 |
if (angle < af1) target = af1;
|
725 |
if (angle > af2) target = af2;
|
726 |
dt = angle - target;
|
727 |
dt2 = dt*dt;
|
728 |
deddt = 2.0*units.angunit*fx_angle.faconst[i]*dt*radian;
|
729 |
d2eddt2 = 2.0*units.angunit*fx_angle.faconst[i]*radian*radian;
|
730 |
if (dt == 0.0) d2edphi2 = 0.0;
|
731 |
|
732 |
terma = -1.0/(rab2*rp);
|
733 |
termc = 1.0/(rcb2*rp);
|
734 |
ddtdxia = terma * (yab*zp-zab*yp);
|
735 |
ddtdyia = terma * (zab*xp-xab*zp);
|
736 |
ddtdzia = terma * (xab*yp-yab*xp);
|
737 |
ddtdxic = termc * (ycb*zp-zcb*yp);
|
738 |
ddtdyic = termc * (zcb*xp-xcb*zp);
|
739 |
ddtdzic = termc * (xcb*yp-ycb*xp);
|
740 |
ddtdxib = -ddtdxia - ddtdxic;
|
741 |
ddtdyib = -ddtdyia - ddtdyic;
|
742 |
ddtdzib = -ddtdzia - ddtdzic;
|
743 |
xrab = 2.00 * xab / rab2;
|
744 |
yrab = 2.00 * yab / rab2;
|
745 |
zrab = 2.00 * zab / rab2;
|
746 |
xrcb = 2.00 * xcb / rcb2;
|
747 |
yrcb = 2.00 * ycb / rcb2;
|
748 |
zrcb = 2.00 * zcb / rcb2;
|
749 |
rp2 = 1.00 / (rp*rp);
|
750 |
xabp = (yab*zp-zab*yp) * rp2;
|
751 |
yabp = (zab*xp-xab*zp) * rp2;
|
752 |
zabp = (xab*yp-yab*xp) * rp2;
|
753 |
xcbp = (ycb*zp-zcb*yp) * rp2;
|
754 |
ycbp = (zcb*xp-xcb*zp) * rp2;
|
755 |
zcbp = (xcb*yp-ycb*xp) * rp2;
|
756 |
|
757 |
dxiaxia = terma*(xab*xcb-dot) + ddtdxia*(xcbp-xrab);
|
758 |
dxiayia = terma*(zp+yab*xcb) + ddtdxia*(ycbp-yrab);
|
759 |
dxiazia = terma*(zab*xcb-yp) + ddtdxia*(zcbp-zrab);
|
760 |
dyiayia = terma*(yab*ycb-dot) + ddtdyia*(ycbp-yrab);
|
761 |
dyiazia = terma*(xp+zab*ycb) + ddtdyia*(zcbp-zrab);
|
762 |
dziazia = terma*(zab*zcb-dot) + ddtdzia*(zcbp-zrab);
|
763 |
dxicxic = termc*(dot-xab*xcb) - ddtdxic*(xabp+xrcb);
|
764 |
dxicyic = termc*(zp-ycb*xab) - ddtdxic*(yabp+yrcb);
|
765 |
dxiczic = -termc*(yp+zcb*xab) - ddtdxic*(zabp+zrcb);
|
766 |
dyicyic = termc*(dot-yab*ycb) - ddtdyic*(yabp+yrcb);
|
767 |
dyiczic = termc*(xp-zcb*yab) - ddtdyic*(zabp+zrcb);
|
768 |
dziczic = termc*(dot-zab*zcb) - ddtdzic*(zabp+zrcb);
|
769 |
dxiaxic = terma*(yab*yab+zab*zab) - ddtdxia*xabp;
|
770 |
dxiayic = -terma*xab*yab - ddtdxia*yabp;
|
771 |
dxiazic = -terma*xab*zab - ddtdxia*zabp;
|
772 |
dyiaxic = -terma*xab*yab - ddtdyia*xabp;
|
773 |
dyiayic = terma*(xab*xab+zab*zab) - ddtdyia*yabp;
|
774 |
dyiazic = -terma*yab*zab - ddtdyia*zabp;
|
775 |
dziaxic = -terma*xab*zab - ddtdzia*xabp;
|
776 |
dziayic = -terma*yab*zab - ddtdzia*yabp;
|
777 |
dziazic = terma*(xab*xab+yab*yab) - ddtdzia*zabp;
|
778 |
|
779 |
dxibxia = -dxiaxia - dxiaxic;
|
780 |
dxibyia = -dxiayia - dyiaxic;
|
781 |
dxibzia = -dxiazia - dziaxic;
|
782 |
dyibxia = -dxiayia - dxiayic;
|
783 |
dyibyia = -dyiayia - dyiayic;
|
784 |
dyibzia = -dyiazia - dziayic;
|
785 |
dzibxia = -dxiazia - dxiazic;
|
786 |
dzibyia = -dyiazia - dyiazic;
|
787 |
dzibzia = -dziazia - dziazic;
|
788 |
dxibxic = -dxicxic - dxiaxic;
|
789 |
dxibyic = -dxicyic - dxiayic;
|
790 |
dxibzic = -dxiczic - dxiazic;
|
791 |
dyibxic = -dxicyic - dyiaxic;
|
792 |
dyibyic = -dyicyic - dyiayic;
|
793 |
dyibzic = -dyiczic - dyiazic;
|
794 |
dzibxic = -dxiczic - dziaxic;
|
795 |
dzibyic = -dyiczic - dziayic;
|
796 |
dzibzic = -dziczic - dziazic;
|
797 |
dxibxib = -dxibxia - dxibxic;
|
798 |
dxibyib = -dxibyia - dxibyic;
|
799 |
dxibzib = -dxibzia - dxibzic;
|
800 |
dyibyib = -dyibyia - dyibyic;
|
801 |
dyibzib = -dyibzia - dyibzic;
|
802 |
dzibzib = -dzibzia - dzibzic;
|
803 |
|
804 |
if (ia == jatm)
|
805 |
{
|
806 |
hess.hessx[ia][0] += deddt*dxiaxia + d2eddt2*ddtdxia*ddtdxia;
|
807 |
hess.hessx[ia][1] += deddt*dxiayia + d2eddt2*ddtdxia*ddtdyia;
|
808 |
hess.hessx[ia][2] += deddt*dxiazia + d2eddt2*ddtdxia*ddtdzia;
|
809 |
hess.hessy[ia][0] += deddt*dxiayia + d2eddt2*ddtdyia*ddtdxia;
|
810 |
hess.hessy[ia][1] += deddt*dyiayia + d2eddt2*ddtdyia*ddtdyia;
|
811 |
hess.hessy[ia][2] += deddt*dyiazia + d2eddt2*ddtdyia*ddtdzia;
|
812 |
hess.hessz[ia][0] += deddt*dxiazia + d2eddt2*ddtdzia*ddtdxia;
|
813 |
hess.hessz[ia][1] += deddt*dyiazia + d2eddt2*ddtdzia*ddtdyia;
|
814 |
hess.hessz[ia][2] += deddt*dziazia + d2eddt2*ddtdzia*ddtdzia;
|
815 |
hess.hessx[ib][0] += deddt*dxibxia + d2eddt2*ddtdxia*ddtdxib;
|
816 |
hess.hessx[ib][1] += deddt*dyibxia + d2eddt2*ddtdxia*ddtdyib;
|
817 |
hess.hessx[ib][2] += deddt*dzibxia + d2eddt2*ddtdxia*ddtdzib;
|
818 |
hess.hessy[ib][0] += deddt*dxibyia + d2eddt2*ddtdyia*ddtdxib;
|
819 |
hess.hessy[ib][1] += deddt*dyibyia + d2eddt2*ddtdyia*ddtdyib;
|
820 |
hess.hessy[ib][2] += deddt*dzibyia + d2eddt2*ddtdyia*ddtdzib;
|
821 |
hess.hessz[ib][0] += deddt*dxibzia + d2eddt2*ddtdzia*ddtdxib;
|
822 |
hess.hessz[ib][1] += deddt*dyibzia + d2eddt2*ddtdzia*ddtdyib;
|
823 |
hess.hessz[ib][2] += deddt*dzibzia + d2eddt2*ddtdzia*ddtdzib;
|
824 |
hess.hessx[ic][0] += deddt*dxiaxic + d2eddt2*ddtdxia*ddtdxic;
|
825 |
hess.hessx[ic][1] += deddt*dxiayic + d2eddt2*ddtdxia*ddtdyic;
|
826 |
hess.hessx[ic][2] += deddt*dxiazic + d2eddt2*ddtdxia*ddtdzic;
|
827 |
hess.hessy[ic][0] += deddt*dyiaxic + d2eddt2*ddtdyia*ddtdxic;
|
828 |
hess.hessy[ic][1] += deddt*dyiayic + d2eddt2*ddtdyia*ddtdyic;
|
829 |
hess.hessy[ic][2] += deddt*dyiazic + d2eddt2*ddtdyia*ddtdzic;
|
830 |
hess.hessz[ic][0] += deddt*dziaxic + d2eddt2*ddtdzia*ddtdxic;
|
831 |
hess.hessz[ic][1] += deddt*dziayic + d2eddt2*ddtdzia*ddtdyic;
|
832 |
hess.hessz[ic][2] += deddt*dziazic + d2eddt2*ddtdzia*ddtdzic;
|
833 |
} else if (ib == jatm)
|
834 |
{
|
835 |
hess.hessx[ib][0] += deddt*dxibxib + d2eddt2*ddtdxib*ddtdxib;
|
836 |
hess.hessx[ib][1] += deddt*dxibyib + d2eddt2*ddtdxib*ddtdyib;
|
837 |
hess.hessx[ib][2] += deddt*dxibzib + d2eddt2*ddtdxib*ddtdzib;
|
838 |
hess.hessy[ib][0] += deddt*dxibyib + d2eddt2*ddtdyib*ddtdxib;
|
839 |
hess.hessy[ib][1] += deddt*dyibyib + d2eddt2*ddtdyib*ddtdyib;
|
840 |
hess.hessy[ib][2] += deddt*dyibzib + d2eddt2*ddtdyib*ddtdzib;
|
841 |
hess.hessz[ib][0] += deddt*dxibzib + d2eddt2*ddtdzib*ddtdxib;
|
842 |
hess.hessz[ib][1] += deddt*dyibzib + d2eddt2*ddtdzib*ddtdyib;
|
843 |
hess.hessz[ib][2] += deddt*dzibzib + d2eddt2*ddtdzib*ddtdzib;
|
844 |
hess.hessx[ia][0] += deddt*dxibxia + d2eddt2*ddtdxib*ddtdxia;
|
845 |
hess.hessx[ia][1] += deddt*dxibyia + d2eddt2*ddtdxib*ddtdyia;
|
846 |
hess.hessx[ia][2] += deddt*dxibzia + d2eddt2*ddtdxib*ddtdzia;
|
847 |
hess.hessy[ia][0] += deddt*dyibxia + d2eddt2*ddtdyib*ddtdxia;
|
848 |
hess.hessy[ia][1] += deddt*dyibyia + d2eddt2*ddtdyib*ddtdyia;
|
849 |
hess.hessy[ia][2] += deddt*dyibzia + d2eddt2*ddtdyib*ddtdzia;
|
850 |
hess.hessz[ia][0] += deddt*dzibxia + d2eddt2*ddtdzib*ddtdxia;
|
851 |
hess.hessz[ia][1] += deddt*dzibyia + d2eddt2*ddtdzib*ddtdyia;
|
852 |
hess.hessz[ia][2] += deddt*dzibzia + d2eddt2*ddtdzib*ddtdzia;
|
853 |
hess.hessx[ic][0] += deddt*dxibxic + d2eddt2*ddtdxib*ddtdxic;
|
854 |
hess.hessx[ic][1] += deddt*dxibyic + d2eddt2*ddtdxib*ddtdyic;
|
855 |
hess.hessx[ic][2] += deddt*dxibzic + d2eddt2*ddtdxib*ddtdzic;
|
856 |
hess.hessy[ic][0] += deddt*dyibxic + d2eddt2*ddtdyib*ddtdxic;
|
857 |
hess.hessy[ic][1] += deddt*dyibyic + d2eddt2*ddtdyib*ddtdyic;
|
858 |
hess.hessy[ic][2] += deddt*dyibzic + d2eddt2*ddtdyib*ddtdzic;
|
859 |
hess.hessz[ic][0] += deddt*dzibxic + d2eddt2*ddtdzib*ddtdxic;
|
860 |
hess.hessz[ic][1] += deddt*dzibyic + d2eddt2*ddtdzib*ddtdyic;
|
861 |
hess.hessz[ic][2] += deddt*dzibzic + d2eddt2*ddtdzib*ddtdzic;
|
862 |
}else if (ic == jatm)
|
863 |
{
|
864 |
hess.hessx[ic][0] += deddt*dxicxic + d2eddt2*ddtdxic*ddtdxic;
|
865 |
hess.hessx[ic][1] += deddt*dxicyic + d2eddt2*ddtdxic*ddtdyic;
|
866 |
hess.hessx[ic][2] += deddt*dxiczic + d2eddt2*ddtdxic*ddtdzic;
|
867 |
hess.hessy[ic][0] += deddt*dxicyic + d2eddt2*ddtdyic*ddtdxic;
|
868 |
hess.hessy[ic][1] += deddt*dyicyic + d2eddt2*ddtdyic*ddtdyic;
|
869 |
hess.hessy[ic][2] += deddt*dyiczic + d2eddt2*ddtdyic*ddtdzic;
|
870 |
hess.hessz[ic][0] += deddt*dxiczic + d2eddt2*ddtdzic*ddtdxic;
|
871 |
hess.hessz[ic][1] += deddt*dyiczic + d2eddt2*ddtdzic*ddtdyic;
|
872 |
hess.hessz[ic][2] += deddt*dziczic + d2eddt2*ddtdzic*ddtdzic;
|
873 |
hess.hessx[ib][0] += deddt*dxibxic + d2eddt2*ddtdxic*ddtdxib;
|
874 |
hess.hessx[ib][1] += deddt*dyibxic + d2eddt2*ddtdxic*ddtdyib;
|
875 |
hess.hessx[ib][2] += deddt*dzibxic + d2eddt2*ddtdxic*ddtdzib;
|
876 |
hess.hessy[ib][0] += deddt*dxibyic + d2eddt2*ddtdyic*ddtdxib;
|
877 |
hess.hessy[ib][1] += deddt*dyibyic + d2eddt2*ddtdyic*ddtdyib;
|
878 |
hess.hessy[ib][2] += deddt*dzibyic + d2eddt2*ddtdyic*ddtdzib;
|
879 |
hess.hessz[ib][0] += deddt*dxibzic + d2eddt2*ddtdzic*ddtdxib;
|
880 |
hess.hessz[ib][1] += deddt*dyibzic + d2eddt2*ddtdzic*ddtdyib;
|
881 |
hess.hessz[ib][2] += deddt*dzibzic + d2eddt2*ddtdzic*ddtdzib;
|
882 |
hess.hessx[ia][0] += deddt*dxiaxic + d2eddt2*ddtdxic*ddtdxia;
|
883 |
hess.hessx[ia][1] += deddt*dyiaxic + d2eddt2*ddtdxic*ddtdyia;
|
884 |
hess.hessx[ia][2] += deddt*dziaxic + d2eddt2*ddtdxic*ddtdzia;
|
885 |
hess.hessy[ia][0] += deddt*dxiayic + d2eddt2*ddtdyic*ddtdxia;
|
886 |
hess.hessy[ia][1] += deddt*dyiayic + d2eddt2*ddtdyic*ddtdyia;
|
887 |
hess.hessy[ia][2] += deddt*dziayic + d2eddt2*ddtdyic*ddtdzia;
|
888 |
hess.hessz[ia][0] += deddt*dxiazic + d2eddt2*ddtdzic*ddtdxia;
|
889 |
hess.hessz[ia][1] += deddt*dyiazic + d2eddt2*ddtdzic*ddtdyia;
|
890 |
hess.hessz[ia][2] += deddt*dziazic + d2eddt2*ddtdzic*ddtdzia;
|
891 |
}
|
892 |
}
|
893 |
}
|
894 |
}
|
895 |
// fixed torsion
|
896 |
for (i=0; i < fx_torsion.ntfix; i++)
|
897 |
{
|
898 |
ia = fx_torsion.ktfix[i][0];
|
899 |
ib = fx_torsion.ktfix[i][1];
|
900 |
ic = fx_torsion.ktfix[i][2];
|
901 |
id = fx_torsion.ktfix[i][3];
|
902 |
if (ia == jatm || ib == jatm || ic == jatm || id == jatm )
|
903 |
{
|
904 |
xia = atom[ia].x;
|
905 |
yia = atom[ia].y;
|
906 |
zia = atom[ia].z;
|
907 |
xib = atom[ib].x;
|
908 |
yib = atom[ib].y;
|
909 |
zib = atom[ib].z;
|
910 |
xic = atom[ic].x;
|
911 |
yic = atom[ic].y;
|
912 |
zic = atom[ic].z;
|
913 |
xid = atom[id].x;
|
914 |
yid = atom[id].y;
|
915 |
zid = atom[id].z;
|
916 |
xba = xib - xia;
|
917 |
yba = yib - yia;
|
918 |
zba = zib - zia;
|
919 |
xcb = xic - xib;
|
920 |
ycb = yic - yib;
|
921 |
zcb = zic - zib;
|
922 |
xdc = xid - xic;
|
923 |
ydc = yid - yic;
|
924 |
zdc = zid - zic;
|
925 |
xt = yba*zcb - ycb*zba;
|
926 |
yt = zba*xcb - zcb*xba;
|
927 |
zt = xba*ycb - xcb*yba;
|
928 |
xu = ycb*zdc - ydc*zcb;
|
929 |
yu = zcb*xdc - zdc*xcb;
|
930 |
zu = xcb*ydc - xdc*ycb;
|
931 |
xtu = yt*zu - yu*zt;
|
932 |
ytu = zt*xu - zu*xt;
|
933 |
ztu = xt*yu - xu*yt;
|
934 |
rt2 = xt*xt + yt*yt + zt*zt;
|
935 |
ru2 = xu*xu + yu*yu + zu*zu;
|
936 |
rtru = sqrt(rt2 * ru2);
|
937 |
if (rtru > 0.0001)
|
938 |
{
|
939 |
rcb = sqrt(xcb*xcb + ycb*ycb + zcb*zcb);
|
940 |
cosine = (xt*xu + yt*yu + zt*zu) / rtru;
|
941 |
sine = (xcb*xtu + ycb*ytu + zcb*ztu) / (rcb*rtru);
|
942 |
if (cosine > 1.0) cosine = 1.0;
|
943 |
if (cosine < -1.0) cosine = -1.0;
|
944 |
angle = radian*acos(cosine);
|
945 |
if (sine < 0.0) angle = -angle;
|
946 |
tf1 = fx_torsion.min_tor[i];
|
947 |
tf2 = fx_torsion.max_tor[i];
|
948 |
if (angle > tf1 && angle < tf2)
|
949 |
target = angle;
|
950 |
else if ( (angle > tf1) && (tf1 > tf2))
|
951 |
target = angle;
|
952 |
else if ( (angle < tf2) && (tf1 > tf2))
|
953 |
target = angle;
|
954 |
else
|
955 |
{
|
956 |
t1 = angle - tf1;
|
957 |
t2 = angle - tf2;
|
958 |
if (t1 > 180.0)
|
959 |
t1 -= 360.0;
|
960 |
else if (t1 < -180.0)
|
961 |
t1 += 360.0;
|
962 |
if (t2 > 180.0)
|
963 |
t2 -= 360.0;
|
964 |
else if (t2 < -180.0)
|
965 |
t2 += 360.0;
|
966 |
if (fabs(t1) < fabs(t2))
|
967 |
target = tf1;
|
968 |
else
|
969 |
target = tf2;
|
970 |
}
|
971 |
dt = angle - target;
|
972 |
if (dt > 180.0) dt -= 360.0;
|
973 |
if (dt < -180.0) dt += 360.0;
|
974 |
dt2 = dt*dt;
|
975 |
dedphi = 2.0*units.torsunit*fx_torsion.ftconst[i]*dt;
|
976 |
d2edphi2 = 2.0*units.torsunit*fx_torsion.ftconst[i]*radian*radian;
|
977 |
if (dt < 0.000001) d2edphi2 = 0.0;
|
978 |
|
979 |
xca = xic - xia;
|
980 |
yca = yic - yia;
|
981 |
zca = zic - zia;
|
982 |
xdb = xid - xib;
|
983 |
ydb = yid - yib;
|
984 |
zdb = zid - zib;
|
985 |
dphidxt = (yt*zcb - ycb*zt) / (rt2*rcb);
|
986 |
dphidyt = (zt*xcb - zcb*xt) / (rt2*rcb);
|
987 |
dphidzt = (xt*ycb - xcb*yt) / (rt2*rcb);
|
988 |
dphidxu = -(yu*zcb - ycb*zu) / (ru2*rcb);
|
989 |
dphidyu = -(zu*xcb - zcb*xu) / (ru2*rcb);
|
990 |
dphidzu = -(xu*ycb - xcb*yu) / (ru2*rcb);
|
991 |
|
992 |
xycb2 = xcb*xcb + ycb*ycb;
|
993 |
xzcb2 = xcb*xcb + zcb*zcb;
|
994 |
yzcb2 = ycb*ycb + zcb*zcb;
|
995 |
rcbxt = -2.00 * rcb * dphidxt;
|
996 |
rcbyt = -2.00 * rcb * dphidyt;
|
997 |
rcbzt = -2.00 * rcb * dphidzt;
|
998 |
rcbt2 = rcb * rt2;
|
999 |
rcbxu = 2.00 * rcb * dphidxu;
|
1000 |
rcbyu = 2.00 * rcb * dphidyu;
|
1001 |
rcbzu = 2.00 * rcb * dphidzu;
|
1002 |
rcbu2 = rcb * ru2;
|
1003 |
dphidxibt = yca*dphidzt - zca*dphidyt;
|
1004 |
dphidxibu = zdc*dphidyu - ydc*dphidzu;
|
1005 |
dphidyibt = zca*dphidxt - xca*dphidzt;
|
1006 |
dphidyibu = xdc*dphidzu - zdc*dphidxu;
|
1007 |
dphidzibt = xca*dphidyt - yca*dphidxt;
|
1008 |
dphidzibu = ydc*dphidxu - xdc*dphidyu;
|
1009 |
dphidxict = zba*dphidyt - yba*dphidzt;
|
1010 |
dphidxicu = ydb*dphidzu - zdb*dphidyu;
|
1011 |
dphidyict = xba*dphidzt - zba*dphidxt;
|
1012 |
dphidyicu = zdb*dphidxu - xdb*dphidzu;
|
1013 |
dphidzict = yba*dphidxt - xba*dphidyt;
|
1014 |
dphidzicu = xdb*dphidyu - ydb*dphidxu;
|
1015 |
|
1016 |
dphidxia = zcb*dphidyt - ycb*dphidzt;
|
1017 |
dphidyia = xcb*dphidzt - zcb*dphidxt;
|
1018 |
dphidzia = ycb*dphidxt - xcb*dphidyt;
|
1019 |
dphidxib = dphidxibt + dphidxibu;
|
1020 |
dphidyib = dphidyibt + dphidyibu;
|
1021 |
dphidzib = dphidzibt + dphidzibu;
|
1022 |
dphidxic = dphidxict + dphidxicu;
|
1023 |
dphidyic = dphidyict + dphidyicu;
|
1024 |
dphidzic = dphidzict + dphidzicu;
|
1025 |
dphidxid = zcb*dphidyu - ycb*dphidzu;
|
1026 |
dphidyid = xcb*dphidzu - zcb*dphidxu;
|
1027 |
dphidzid = ycb*dphidxu - xcb*dphidyu;
|
1028 |
|
1029 |
dxiaxia = rcbxt*dphidxia;
|
1030 |
dxiayia = rcbxt*dphidyia - zcb*rcb/rt2;
|
1031 |
dxiazia = rcbxt*dphidzia + ycb*rcb/rt2;
|
1032 |
dxiaxic = rcbxt*dphidxict + xcb*xt/rcbt2;
|
1033 |
dxiayic = rcbxt*dphidyict - dphidzt - (xba*zcb*xcb+zba*yzcb2)/rcbt2;
|
1034 |
dxiazic = rcbxt*dphidzict + dphidyt + (xba*ycb*xcb+yba*yzcb2)/rcbt2;
|
1035 |
dxiaxid = 0.00;
|
1036 |
dxiayid = 0.00;
|
1037 |
dxiazid = 0.00;
|
1038 |
dyiayia = rcbyt*dphidyia;
|
1039 |
dyiazia = rcbyt*dphidzia - xcb*rcb/rt2;
|
1040 |
dyiaxib = rcbyt*dphidxibt - dphidzt - (yca*zcb*ycb+zca*xzcb2)/rcbt2;
|
1041 |
dyiaxic = rcbyt*dphidxict + dphidzt + (yba*zcb*ycb+zba*xzcb2)/rcbt2;
|
1042 |
dyiayic = rcbyt*dphidyict + ycb*yt/rcbt2;
|
1043 |
dyiazic = rcbyt*dphidzict - dphidxt - (yba*xcb*ycb+xba*xzcb2)/rcbt2;
|
1044 |
dyiaxid = 0.00;
|
1045 |
dyiayid = 0.00;
|
1046 |
dyiazid = 0.00;
|
1047 |
dziazia = rcbzt*dphidzia;
|
1048 |
dziaxib = rcbzt*dphidxibt + dphidyt + (zca*ycb*zcb+yca*xycb2)/rcbt2;
|
1049 |
dziayib = rcbzt*dphidyibt - dphidxt - (zca*xcb*zcb+xca*xycb2)/rcbt2;
|
1050 |
dziaxic = rcbzt*dphidxict - dphidyt - (zba*ycb*zcb+yba*xycb2)/rcbt2;
|
1051 |
dziayic = rcbzt*dphidyict + dphidxt + (zba*xcb*zcb+xba*xycb2)/rcbt2;
|
1052 |
dziazic = rcbzt*dphidzict + zcb*zt/rcbt2;
|
1053 |
dziaxid = 0.00;
|
1054 |
dziayid = 0.00;
|
1055 |
dziazid = 0.00;
|
1056 |
dxibxic = -xcb*dphidxib/(rcb*rcb) - (yca*(zba*xcb+yt)-zca*(yba*xcb-zt))/rcbt2
|
1057 |
- 2.00*(yt*zba-yba*zt)*dphidxibt/rt2 - (zdc*(ydb*xcb+zu)-ydc*(zdb*xcb-yu))/rcbu2
|
1058 |
+ 2.00*(yu*zdb-ydb*zu)*dphidxibu/ru2;
|
1059 |
dxibyic = -ycb*dphidxib/(rcb*rcb) + dphidzt + dphidzu
|
1060 |
- (yca*(zba*ycb-xt)+zca*(xba*xcb+zcb*zba))/rcbt2
|
1061 |
- 2.00*(zt*xba-zba*xt)*dphidxibt/rt2
|
1062 |
+ (zdc*(xdb*xcb+zcb*zdb)+ydc*(zdb*ycb+xu))/rcbu2
|
1063 |
+ 2.00*(zu*xdb-zdb*xu)*dphidxibu/ru2;
|
1064 |
dxibxid = rcbxu*dphidxibu + xcb*xu/rcbu2;
|
1065 |
dxibyid = rcbyu*dphidxibu - dphidzu - (ydc*zcb*ycb+zdc*xzcb2)/rcbu2;
|
1066 |
dxibzid = rcbzu*dphidxibu + dphidyu + (zdc*ycb*zcb+ydc*xycb2)/rcbu2;
|
1067 |
dyibzib = ycb*dphidzib/(rcb*rcb) - (xca*(xca*xcb+zcb*zca)+yca*(ycb*xca+zt))/rcbt2
|
1068 |
- 2.00*(xt*zca-xca*zt)*dphidzibt/rt2
|
1069 |
+ (ydc*(xdc*ycb-zu)+xdc*(xdc*xcb+zcb*zdc))/rcbu2
|
1070 |
+ 2.00*(xu*zdc-xdc*zu)*dphidzibu/ru2;
|
1071 |
dyibxic = -xcb*dphidyib/(rcb*rcb) - dphidzt - dphidzu + (xca*(zba*xcb+yt)+zca*(zba*zcb+ycb*yba))/rcbt2
|
1072 |
- 2.00*(yt*zba-yba*zt)*dphidyibt/rt2
|
1073 |
- (zdc*(zdb*zcb+ycb*ydb)+xdc*(zdb*xcb-yu))/rcbu2
|
1074 |
+ 2.00*(yu*zdb-ydb*zu)*dphidyibu/ru2;
|
1075 |
dyibyic = -ycb*dphidyib/(rcb*rcb) - (zca*(xba*ycb+zt)-xca*(zba*ycb-xt))/rcbt2
|
1076 |
- 2.00*(zt*xba-zba*xt)*dphidyibt/rt2
|
1077 |
- (xdc*(zdb*ycb+xu)-zdc*(xdb*ycb-zu))/rcbu2
|
1078 |
+ 2.00*(zu*xdb-zdb*xu)*dphidyibu/ru2;
|
1079 |
dyibxid = rcbxu*dphidyibu + dphidzu + (xdc*zcb*xcb+zdc*yzcb2)/rcbu2;
|
1080 |
dyibyid = rcbyu*dphidyibu + ycb*yu/rcbu2;
|
1081 |
dyibzid = rcbzu*dphidyibu - dphidxu - (zdc*xcb*zcb+xdc*xycb2)/rcbu2;
|
1082 |
dzibxic = -xcb*dphidzib/(rcb*rcb) + dphidyt + dphidyu - (xca*(yba*xcb-zt)+yca*(zba*zcb+ycb*yba))/rcbt2
|
1083 |
- 2.00*(yt*zba-yba*zt)*dphidzibt/rt2
|
1084 |
+ (ydc*(zdb*zcb+ycb*ydb)+xdc*(ydb*xcb+zu))/rcbu2
|
1085 |
+ 2.00*(yu*zdb-ydb*zu)*dphidzibu/ru2;
|
1086 |
dzibzic = -zcb*dphidzib/(rcb*rcb) - (xca*(yba*zcb+xt)-yca*(xba*zcb-yt))/rcbt2
|
1087 |
- 2.00*(xt*yba-xba*yt)*dphidzibt/rt2
|
1088 |
- (ydc*(xdb*zcb+yu)-xdc*(ydb*zcb-xu))/rcbu2
|
1089 |
+ 2.00*(xu*ydb-xdb*yu)*dphidzibu/ru2;
|
1090 |
dzibxid = rcbxu*dphidzibu - dphidyu - (xdc*ycb*xcb+ydc*yzcb2)/rcbu2;
|
1091 |
dzibyid = rcbyu*dphidzibu + dphidxu + (ydc*xcb*ycb+xdc*xzcb2)/rcbu2;
|
1092 |
dzibzid = rcbzu*dphidzibu + zcb*zu/rcbu2;
|
1093 |
dxicxid = rcbxu*dphidxicu - xcb*(zdb*ycb-ydb*zcb)/rcbu2;
|
1094 |
dxicyid = rcbyu*dphidxicu + dphidzu + (ydb*zcb*ycb+zdb*xzcb2)/rcbu2;
|
1095 |
dxiczid = rcbzu*dphidxicu - dphidyu - (zdb*ycb*zcb+ydb*xycb2)/rcbu2;
|
1096 |
dyicxid = rcbxu*dphidyicu - dphidzu - (xdb*zcb*xcb+zdb*yzcb2)/rcbu2;
|
1097 |
dyicyid = rcbyu*dphidyicu - ycb*(xdb*zcb-zdb*xcb)/rcbu2;
|
1098 |
dyiczid = rcbzu*dphidyicu + dphidxu + (zdb*xcb*zcb+xdb*xycb2)/rcbu2;
|
1099 |
dzicxid = rcbxu*dphidzicu + dphidyu + (xdb*ycb*xcb+ydb*yzcb2)/rcbu2;
|
1100 |
dzicyid = rcbyu*dphidzicu - dphidxu - (ydb*xcb*ycb+xdb*xzcb2)/rcbu2;
|
1101 |
dziczid = rcbzu*dphidzicu - zcb*(ydb*xcb-xdb*ycb)/rcbu2;
|
1102 |
dxidxid = rcbxu*dphidxid;
|
1103 |
dxidyid = rcbxu*dphidyid + zcb*rcb/ru2;
|
1104 |
dxidzid = rcbxu*dphidzid - ycb*rcb/ru2;
|
1105 |
dyidyid = rcbyu*dphidyid;
|
1106 |
dyidzid = rcbyu*dphidzid + xcb*rcb/ru2;
|
1107 |
dzidzid = rcbzu*dphidzid;
|
1108 |
|
1109 |
dxiaxib = -dxiaxia - dxiaxic - dxiaxid;
|
1110 |
dxiayib = -dxiayia - dxiayic - dxiayid;
|
1111 |
dxiazib = -dxiazia - dxiazic - dxiazid;
|
1112 |
dyiayib = -dyiayia - dyiayic - dyiayid;
|
1113 |
dyiazib = -dyiazia - dyiazic - dyiazid;
|
1114 |
dziazib = -dziazia - dziazic - dziazid;
|
1115 |
dxibxib = -dxiaxib - dxibxic - dxibxid;
|
1116 |
dxibyib = -dyiaxib - dxibyic - dxibyid;
|
1117 |
dxibzib = -dxiazib - dzibxic - dzibxid;
|
1118 |
dxibzic = -dziaxib - dxibzib - dxibzid;
|
1119 |
dyibyib = -dyiayib - dyibyic - dyibyid;
|
1120 |
dyibzic = -dziayib - dyibzib - dyibzid;
|
1121 |
dzibzib = -dziazib - dzibzic - dzibzid;
|
1122 |
dzibyic = -dyiazib - dyibzib - dzibyid;
|
1123 |
dxicxic = -dxiaxic - dxibxic - dxicxid;
|
1124 |
dxicyic = -dyiaxic - dyibxic - dxicyid;
|
1125 |
dxiczic = -dziaxic - dzibxic - dxiczid;
|
1126 |
dyicyic = -dyiayic - dyibyic - dyicyid;
|
1127 |
dyiczic = -dziayic - dzibyic - dyiczid;
|
1128 |
dziczic = -dziazic - dzibzic - dziczid;
|
1129 |
if (jatm == ia)
|
1130 |
{
|
1131 |
hess.hessx[ia][0] += dedphi*dxiaxia + d2edphi2*dphidxia*dphidxia;
|
1132 |
hess.hessy[ia][0] += dedphi*dxiayia + d2edphi2*dphidxia*dphidyia;
|
1133 |
hess.hessz[ia][0] += dedphi*dxiazia + d2edphi2*dphidxia*dphidzia;
|
1134 |
hess.hessx[ia][1] += dedphi*dxiayia + d2edphi2*dphidxia*dphidyia;
|
1135 |
hess.hessy[ia][1] += dedphi*dyiayia + d2edphi2*dphidyia*dphidyia;
|
1136 |
hess.hessz[ia][1] += dedphi*dyiazia + d2edphi2*dphidyia*dphidzia;
|
1137 |
hess.hessx[ia][2] += dedphi*dxiazia + d2edphi2*dphidxia*dphidzia;
|
1138 |
hess.hessy[ia][2] += dedphi*dyiazia + d2edphi2*dphidyia*dphidzia;
|
1139 |
hess.hessz[ia][2] += dedphi*dziazia + d2edphi2*dphidzia*dphidzia;
|
1140 |
hess.hessx[ib][0] += dedphi*dxiaxib + d2edphi2*dphidxia*dphidxib;
|
1141 |
hess.hessy[ib][0] += dedphi*dyiaxib + d2edphi2*dphidyia*dphidxib;
|
1142 |
hess.hessz[ib][0] += dedphi*dziaxib + d2edphi2*dphidzia*dphidxib;
|
1143 |
hess.hessx[ib][1] += dedphi*dxiayib + d2edphi2*dphidxia*dphidyib;
|
1144 |
hess.hessy[ib][1] += dedphi*dyiayib + d2edphi2*dphidyia*dphidyib;
|
1145 |
hess.hessz[ib][1] += dedphi*dziayib + d2edphi2*dphidzia*dphidyib;
|
1146 |
hess.hessx[ib][2] += dedphi*dxiazib + d2edphi2*dphidxia*dphidzib;
|
1147 |
hess.hessy[ib][2] += dedphi*dyiazib + d2edphi2*dphidyia*dphidzib;
|
1148 |
hess.hessz[ib][2] += dedphi*dziazib + d2edphi2*dphidzia*dphidzib;
|
1149 |
hess.hessx[ic][0] += dedphi*dxiaxic + d2edphi2*dphidxia*dphidxic;
|
1150 |
hess.hessy[ic][0] += dedphi*dyiaxic + d2edphi2*dphidyia*dphidxic;
|
1151 |
hess.hessz[ic][0] += dedphi*dziaxic + d2edphi2*dphidzia*dphidxic;
|
1152 |
hess.hessx[ic][1] += dedphi*dxiayic + d2edphi2*dphidxia*dphidyic;
|
1153 |
hess.hessy[ic][1] += dedphi*dyiayic + d2edphi2*dphidyia*dphidyic;
|
1154 |
hess.hessz[ic][1] += dedphi*dziayic + d2edphi2*dphidzia*dphidyic;
|
1155 |
hess.hessx[ic][2] += dedphi*dxiazic + d2edphi2*dphidxia*dphidzic;
|
1156 |
hess.hessy[ic][2] += dedphi*dyiazic + d2edphi2*dphidyia*dphidzic;
|
1157 |
hess.hessz[ic][2] += dedphi*dziazic + d2edphi2*dphidzia*dphidzic;
|
1158 |
hess.hessx[id][0] += dedphi*dxiaxid + d2edphi2*dphidxia*dphidxid;
|
1159 |
hess.hessy[id][0] += dedphi*dyiaxid + d2edphi2*dphidyia*dphidxid;
|
1160 |
hess.hessz[id][0] += dedphi*dziaxid + d2edphi2*dphidzia*dphidxid;
|
1161 |
hess.hessx[id][1] += dedphi*dxiayid + d2edphi2*dphidxia*dphidyid;
|
1162 |
hess.hessy[id][1] += dedphi*dyiayid + d2edphi2*dphidyia*dphidyid;
|
1163 |
hess.hessz[id][1] += dedphi*dziayid + d2edphi2*dphidzia*dphidyid;
|
1164 |
hess.hessx[id][2] += dedphi*dxiazid + d2edphi2*dphidxia*dphidzid;
|
1165 |
hess.hessy[id][2] += dedphi*dyiazid + d2edphi2*dphidyia*dphidzid;
|
1166 |
hess.hessz[id][2] += dedphi*dziazid + d2edphi2*dphidzia*dphidzid;
|
1167 |
}else if (jatm == ib)
|
1168 |
{
|
1169 |
hess.hessx[ib][0] += dedphi*dxibxib + d2edphi2*dphidxib*dphidxib;
|
1170 |
hess.hessy[ib][0] += dedphi*dxibyib + d2edphi2*dphidxib*dphidyib;
|
1171 |
hess.hessz[ib][0] += dedphi*dxibzib + d2edphi2*dphidxib*dphidzib;
|
1172 |
hess.hessx[ib][1] += dedphi*dxibyib + d2edphi2*dphidxib*dphidyib;
|
1173 |
hess.hessy[ib][1] += dedphi*dyibyib + d2edphi2*dphidyib*dphidyib;
|
1174 |
hess.hessz[ib][1] += dedphi*dyibzib + d2edphi2*dphidyib*dphidzib;
|
1175 |
hess.hessx[ib][2] += dedphi*dxibzib + d2edphi2*dphidxib*dphidzib;
|
1176 |
hess.hessy[ib][2] += dedphi*dyibzib + d2edphi2*dphidyib*dphidzib;
|
1177 |
hess.hessz[ib][2] += dedphi*dzibzib + d2edphi2*dphidzib*dphidzib;
|
1178 |
hess.hessx[ia][0] += dedphi*dxiaxib + d2edphi2*dphidxib*dphidxia;
|
1179 |
hess.hessy[ia][0] += dedphi*dxiayib + d2edphi2*dphidyib*dphidxia;
|
1180 |
hess.hessz[ia][0] += dedphi*dxiazib + d2edphi2*dphidzib*dphidxia;
|
1181 |
hess.hessx[ia][1] += dedphi*dyiaxib + d2edphi2*dphidxib*dphidyia;
|
1182 |
hess.hessy[ia][1] += dedphi*dyiayib + d2edphi2*dphidyib*dphidyia;
|
1183 |
hess.hessz[ia][1] += dedphi*dyiazib + d2edphi2*dphidzib*dphidyia;
|
1184 |
hess.hessx[ia][2] += dedphi*dziaxib + d2edphi2*dphidxib*dphidzia;
|
1185 |
hess.hessy[ia][2] += dedphi*dziayib + d2edphi2*dphidyib*dphidzia;
|
1186 |
hess.hessz[ia][2] += dedphi*dziazib + d2edphi2*dphidzib*dphidzia;
|
1187 |
hess.hessx[ic][0] += dedphi*dxibxic + d2edphi2*dphidxib*dphidxic;
|
1188 |
hess.hessy[ic][0] += dedphi*dyibxic + d2edphi2*dphidyib*dphidxic;
|
1189 |
hess.hessz[ic][0] += dedphi*dzibxic + d2edphi2*dphidzib*dphidxic;
|
1190 |
hess.hessx[ic][1] += dedphi*dxibyic + d2edphi2*dphidxib*dphidyic;
|
1191 |
hess.hessy[ic][1] += dedphi*dyibyic + d2edphi2*dphidyib*dphidyic;
|
1192 |
hess.hessz[ic][1] += dedphi*dzibyic + d2edphi2*dphidzib*dphidyic;
|
1193 |
hess.hessx[ic][2] += dedphi*dxibzic + d2edphi2*dphidxib*dphidzic;
|
1194 |
hess.hessy[ic][2] += dedphi*dyibzic + d2edphi2*dphidyib*dphidzic;
|
1195 |
hess.hessz[ic][2] += dedphi*dzibzic + d2edphi2*dphidzib*dphidzic;
|
1196 |
hess.hessx[id][0] += dedphi*dxibxid + d2edphi2*dphidxib*dphidxid;
|
1197 |
hess.hessy[id][0] += dedphi*dyibxid + d2edphi2*dphidyib*dphidxid;
|
1198 |
hess.hessz[id][0] += dedphi*dzibxid + d2edphi2*dphidzib*dphidxid;
|
1199 |
hess.hessx[id][1] += dedphi*dxibyid + d2edphi2*dphidxib*dphidyid;
|
1200 |
hess.hessy[id][1] += dedphi*dyibyid + d2edphi2*dphidyib*dphidyid;
|
1201 |
hess.hessz[id][1] += dedphi*dzibyid + d2edphi2*dphidzib*dphidyid;
|
1202 |
hess.hessx[id][2] += dedphi*dxibzid + d2edphi2*dphidxib*dphidzid;
|
1203 |
hess.hessy[id][2] += dedphi*dyibzid + d2edphi2*dphidyib*dphidzid;
|
1204 |
hess.hessz[id][2] += dedphi*dzibzid + d2edphi2*dphidzib*dphidzid;
|
1205 |
}else if (jatm == ic)
|
1206 |
{
|
1207 |
hess.hessx[ic][0] += dedphi*dxicxic + d2edphi2*dphidxic*dphidxic;
|
1208 |
hess.hessy[ic][0] += dedphi*dxicyic + d2edphi2*dphidxic*dphidyic;
|
1209 |
hess.hessz[ic][0] += dedphi*dxiczic + d2edphi2*dphidxic*dphidzic;
|
1210 |
hess.hessx[ic][1] += dedphi*dxicyic + d2edphi2*dphidxic*dphidyic;
|
1211 |
hess.hessy[ic][1] += dedphi*dyicyic + d2edphi2*dphidyic*dphidyic;
|
1212 |
hess.hessz[ic][1] += dedphi*dyiczic + d2edphi2*dphidyic*dphidzic;
|
1213 |
hess.hessx[ic][2] += dedphi*dxiczic + d2edphi2*dphidxic*dphidzic;
|
1214 |
hess.hessy[ic][2] += dedphi*dyiczic + d2edphi2*dphidyic*dphidzic;
|
1215 |
hess.hessz[ic][2] += dedphi*dziczic + d2edphi2*dphidzic*dphidzic;
|
1216 |
hess.hessx[ia][0] += dedphi*dxiaxic + d2edphi2*dphidxic*dphidxia;
|
1217 |
hess.hessy[ia][0] += dedphi*dxiayic + d2edphi2*dphidyic*dphidxia;
|
1218 |
hess.hessz[ia][0] += dedphi*dxiazic + d2edphi2*dphidzic*dphidxia;
|
1219 |
hess.hessx[ia][1] += dedphi*dyiaxic + d2edphi2*dphidxic*dphidyia;
|
1220 |
hess.hessy[ia][1] += dedphi*dyiayic + d2edphi2*dphidyic*dphidyia;
|
1221 |
hess.hessz[ia][1] += dedphi*dyiazic + d2edphi2*dphidzic*dphidyia;
|
1222 |
hess.hessx[ia][2] += dedphi*dziaxic + d2edphi2*dphidxic*dphidzia;
|
1223 |
hess.hessy[ia][2] += dedphi*dziayic + d2edphi2*dphidyic*dphidzia;
|
1224 |
hess.hessz[ia][2] += dedphi*dziazic + d2edphi2*dphidzic*dphidzia;
|
1225 |
hess.hessx[ib][0] += dedphi*dxibxic + d2edphi2*dphidxic*dphidxib;
|
1226 |
hess.hessy[ib][0] += dedphi*dxibyic + d2edphi2*dphidyic*dphidxib;
|
1227 |
hess.hessz[ib][0] += dedphi*dxibzic + d2edphi2*dphidzic*dphidxib;
|
1228 |
hess.hessx[ib][1] += dedphi*dyibxic + d2edphi2*dphidxic*dphidyib;
|
1229 |
hess.hessy[ib][1] += dedphi*dyibyic + d2edphi2*dphidyic*dphidyib;
|
1230 |
hess.hessz[ib][1] += dedphi*dyibzic + d2edphi2*dphidzic*dphidyib;
|
1231 |
hess.hessx[ib][2] += dedphi*dzibxic + d2edphi2*dphidxic*dphidzib;
|
1232 |
hess.hessy[ib][2] += dedphi*dzibyic + d2edphi2*dphidyic*dphidzib;
|
1233 |
hess.hessz[ib][2] += dedphi*dzibzic + d2edphi2*dphidzic*dphidzib;
|
1234 |
hess.hessx[id][0] += dedphi*dxicxid + d2edphi2*dphidxic*dphidxid;
|
1235 |
hess.hessy[id][0] += dedphi*dyicxid + d2edphi2*dphidyic*dphidxid;
|
1236 |
hess.hessz[id][0] += dedphi*dzicxid + d2edphi2*dphidzic*dphidxid;
|
1237 |
hess.hessx[id][1] += dedphi*dxicyid + d2edphi2*dphidxic*dphidyid;
|
1238 |
hess.hessy[id][1] += dedphi*dyicyid + d2edphi2*dphidyic*dphidyid;
|
1239 |
hess.hessz[id][1] += dedphi*dzicyid + d2edphi2*dphidzic*dphidyid;
|
1240 |
hess.hessx[id][2] += dedphi*dxiczid + d2edphi2*dphidxic*dphidzid;
|
1241 |
hess.hessy[id][2] += dedphi*dyiczid + d2edphi2*dphidyic*dphidzid;
|
1242 |
hess.hessz[id][2] += dedphi*dziczid + d2edphi2*dphidzic*dphidzid;
|
1243 |
}else if (jatm == id)
|
1244 |
{
|
1245 |
hess.hessx[id][0] += dedphi*dxidxid + d2edphi2*dphidxid*dphidxid;
|
1246 |
hess.hessy[id][0] += dedphi*dxidyid + d2edphi2*dphidxid*dphidyid;
|
1247 |
hess.hessz[id][0] += dedphi*dxidzid + d2edphi2*dphidxid*dphidzid;
|
1248 |
hess.hessx[id][1] += dedphi*dxidyid + d2edphi2*dphidxid*dphidyid;
|
1249 |
hess.hessy[id][1] += dedphi*dyidyid + d2edphi2*dphidyid*dphidyid;
|
1250 |
hess.hessz[id][1] += dedphi*dyidzid + d2edphi2*dphidyid*dphidzid;
|
1251 |
hess.hessx[id][2] += dedphi*dxidzid + d2edphi2*dphidxid*dphidzid;
|
1252 |
hess.hessy[id][2] += dedphi*dyidzid + d2edphi2*dphidyid*dphidzid;
|
1253 |
hess.hessz[id][2] += dedphi*dzidzid + d2edphi2*dphidzid*dphidzid;
|
1254 |
hess.hessx[ia][0] += dedphi*dxiaxid + d2edphi2*dphidxid*dphidxia;
|
1255 |
hess.hessy[ia][0] += dedphi*dxiayid + d2edphi2*dphidyid*dphidxia;
|
1256 |
hess.hessz[ia][0] += dedphi*dxiazid + d2edphi2*dphidzid*dphidxia;
|
1257 |
hess.hessx[ia][1] += dedphi*dyiaxid + d2edphi2*dphidxid*dphidyia;
|
1258 |
hess.hessy[ia][1] += dedphi*dyiayid + d2edphi2*dphidyid*dphidyia;
|
1259 |
hess.hessz[ia][1] += dedphi*dyiazid + d2edphi2*dphidzid*dphidyia;
|
1260 |
hess.hessx[ia][2] += dedphi*dziaxid + d2edphi2*dphidxid*dphidzia;
|
1261 |
hess.hessy[ia][2] += dedphi*dziayid + d2edphi2*dphidyid*dphidzia;
|
1262 |
hess.hessz[ia][2] += dedphi*dziazid + d2edphi2*dphidzid*dphidzia;
|
1263 |
hess.hessx[ib][0] += dedphi*dxibxid + d2edphi2*dphidxid*dphidxib;
|
1264 |
hess.hessy[ib][0] += dedphi*dxibyid + d2edphi2*dphidyid*dphidxib;
|
1265 |
hess.hessz[ib][0] += dedphi*dxibzid + d2edphi2*dphidzid*dphidxib;
|
1266 |
hess.hessx[ib][1] += dedphi*dyibxid + d2edphi2*dphidxid*dphidyib;
|
1267 |
hess.hessy[ib][1] += dedphi*dyibyid + d2edphi2*dphidyid*dphidyib;
|
1268 |
hess.hessz[ib][1] += dedphi*dyibzid + d2edphi2*dphidzid*dphidyib;
|
1269 |
hess.hessx[ib][2] += dedphi*dzibxid + d2edphi2*dphidxid*dphidzib;
|
1270 |
hess.hessy[ib][2] += dedphi*dzibyid + d2edphi2*dphidyid*dphidzib;
|
1271 |
hess.hessz[ib][2] += dedphi*dzibzid + d2edphi2*dphidzid*dphidzib;
|
1272 |
hess.hessx[ic][0] += dedphi*dxicxid + d2edphi2*dphidxid*dphidxic;
|
1273 |
hess.hessy[ic][0] += dedphi*dxicyid + d2edphi2*dphidyid*dphidxic;
|
1274 |
hess.hessz[ic][0] += dedphi*dxiczid + d2edphi2*dphidzid*dphidxic;
|
1275 |
hess.hessx[ic][1] += dedphi*dyicxid + d2edphi2*dphidxid*dphidyic;
|
1276 |
hess.hessy[ic][1] += dedphi*dyicyid + d2edphi2*dphidyid*dphidyic;
|
1277 |
hess.hessz[ic][1] += dedphi*dyiczid + d2edphi2*dphidzid*dphidyic;
|
1278 |
hess.hessx[ic][2] += dedphi*dzicxid + d2edphi2*dphidxid*dphidzic;
|
1279 |
hess.hessy[ic][2] += dedphi*dzicyid + d2edphi2*dphidyid*dphidzic;
|
1280 |
hess.hessz[ic][2] += dedphi*dziczid + d2edphi2*dphidzid*dphidzic;
|
1281 |
}
|
1282 |
}
|
1283 |
}
|
1284 |
}
|
1285 |
}
|