ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-2.0/src/primitives/Bend.cpp
Revision: 1692
Committed: Mon Nov 1 20:15:58 2004 UTC (19 years, 7 months ago) by tim
File size: 2670 byte(s)
Log Message:
break, break and break.....

File Contents

# Content
1 #include "primitives/SRI.hpp"
2 #include "primitives/Atom.hpp"
3
4 #include <math.h>
5 #include <iostream>
6 #include <stdlib.h>
7
8 void Bend::set_atoms( Atom &a, Atom &b, Atom &c){
9
10 c_p_a = &a;
11 c_p_b = &b;
12 c_p_c = &c;
13
14 c_potential_E = 0.0;
15 }
16
17
18 void Bend::calc_forces(){
19
20 double dx,dy,dz,gx,gy,gz,dx2,dy2,dz2,gx2,gy2,gz2;
21 double rij2, rkj2, riji2, rkji2, dot, denom, cosang, angl;
22
23 double sina2, sinai;
24
25 double comf2, comf3, comf4;
26 double dcsidx, dcsidy, dcsidz, dcskdx, dcskdy, dcskdz;
27 // double dcsjdx, dcsjdy, dcsjdz;
28 double dadxi, dadyi, dadzi;
29 double dadxk, dadyk, dadzk;//, dadxj, dadyj, dadzj;
30 double daxi, dayi, dazi, daxk, dayk, dazk, daxj, dayj, dazj;
31
32 double aR[3], bR[3], cR[3];
33 double aF[3], bF[3], cF[3];
34
35 aR = c_p_a->getPos();
36 bR = c_p_b->getPos();
37 cR = c_p_c->getPos();
38
39
40 dx = aR[0] - bR[0];
41 dy = aR[1] - bR[1];
42 dz = aR[2] - bR[2];
43
44 gx = cR[0] - bR[0];
45 gy = cR[1] - bR[1];
46 gz = cR[2] - bR[2];
47
48 dx2 = dx * dx;
49 dy2 = dy * dy;
50 dz2 = dz * dz;
51
52 gx2 = gx * gx;
53 gy2 = gy * gy;
54 gz2 = gz * gz;
55
56 rij2 = dx2 + dy2 + dz2;
57 rkj2 = gx2 + gy2 + gz2;
58
59 riji2 = 1.0 / rij2;
60 rkji2 = 1.0 / rkj2;
61
62 dot = dx * gx + dy * gy + dz * gz;
63 denom = sqrt((riji2 * rkji2));
64 cosang = dot * denom;
65
66 if(cosang > 1.0)cosang = 1.0;
67 if(cosang < -1.0) cosang = -1.0;
68
69 angl = acos(cosang);
70 angl = angl * 180.0 / M_PI;
71
72 sina2 = 1.0 - cosang*cosang;
73 if(fabs(sina2) < 1.0E-12 ) sina2 = 1.0E-12;
74 sinai = 1.0 / sqrt(sina2);
75
76 comf2 = cosang * riji2;
77 comf3 = cosang * rkji2;
78 comf4 = bend_force(angl);
79
80
81 dcsidx = gx*denom - comf2*dx;
82 dcsidy = gy*denom - comf2*dy;
83 dcsidz = gz*denom - comf2*dz;
84
85 dcskdx = dx*denom - comf3*gx;
86 dcskdy = dy*denom - comf3*gy;
87 dcskdz = dz*denom - comf3*gz;
88
89 // dcsjdx = -dcsidx - dcskdx;
90 // dcsjdy = -dcsidy - dcskdy;
91 // dcsjdz = -dcsidz - dcskdz;
92
93 dadxi = -sinai*dcsidx;
94 dadyi = -sinai*dcsidy;
95 dadzi = -sinai*dcsidz;
96
97 dadxk = -sinai*dcskdx;
98 dadyk = -sinai*dcskdy;
99 dadzk = -sinai*dcskdz;
100
101 // dadxj = -dadxi - dadxk;
102 // dadyj = -dadyi - dadyk;
103 // dadzj = -dadzi - dadzk;
104
105 daxi = comf4*dadxi;
106 dayi = comf4*dadyi;
107 dazi = comf4*dadzi;
108
109 daxk = comf4*dadxk;
110 dayk = comf4*dadyk;
111 dazk = comf4*dadzk;
112
113 daxj = -daxi - daxk;
114 dayj = -dayi - dayk;
115 dazj = -dazi - dazk;
116
117 aF[0] = daxi;
118 aF[1] = dayi;
119 aF[2] = dazi;
120
121 bF[0] = daxj;
122 bF[1] = dayj;
123 bF[2] = dazj;
124
125 cF[0] = daxk;
126 cF[1] = dayk;
127 cF[2] = dazk;
128
129 c_p_a->addFrc(aF);
130 c_p_b->addFrc(bF);
131 c_p_c->addFrc(cF);
132
133 return;
134 }