ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/primitives/Inversion.cpp
(Generate patch)

Comparing trunk/src/primitives/Inversion.cpp (file contents):
Revision 1275 by cli2, Fri Jul 4 20:54:29 2008 UTC vs.
Revision 1309 by gezelter, Tue Oct 21 18:23:31 2008 UTC

# Line 60 | Line 60 | namespace oopse {
60      Vector3d pos3 = atom1_->getPos();
61      Vector3d pos4 = atom4_->getPos();
62  
63 <    Vector3d r21 = pos1 - pos2;
64 <    Vector3d r32 = pos2 - pos3;
63 >    Vector3d r31 = pos1 - pos3;
64 >    Vector3d r23 = pos3 - pos2;
65      Vector3d r43 = pos3 - pos4;
66  
67      //  Calculate the cross products and distances
68 <    Vector3d A = cross(r21, r32);
68 >    Vector3d A = cross(r31, r43);
69      RealType rA = A.length();
70 <    Vector3d B = cross(r32, r43);
70 >    Vector3d B = cross(r43, r23);
71      RealType rB = B.length();
72 <    Vector3d C = cross(r32, A);
73 <    RealType rC = C.length();
72 >    //Vector3d C = cross(r23, A);
73 >    //RealType rC = C.length();
74  
75      A.normalize();
76      B.normalize();
77 <    C.normalize();
77 >    //C.normalize();
78      
79      //  Calculate the sin and cos
80      RealType cos_phi = dot(A, B) ;
81      if (cos_phi > 1.0) cos_phi = 1.0;
82 <    if (cos_phi < -1.0) cos_phi = -1.0;
82 >    if (cos_phi < -1.0) cos_phi = -1.0;
83  
84      RealType dVdcosPhi;
85      inversionType_->calcForce(cos_phi, potential_, dVdcosPhi);
86 <    Vector3d f1;
87 <    Vector3d f2;
88 <    Vector3d f3;
86 >    Vector3d f1 ;
87 >    Vector3d f2 ;
88 >    Vector3d f3 ;
89  
90      Vector3d dcosdA = (cos_phi * A - B) /rA;
91      Vector3d dcosdB = (cos_phi * B - A) /rB;
92  
93 <    f1 = dVdcosPhi * cross(r32, dcosdA);
94 <    f2 = dVdcosPhi * ( cross(r43, dcosdB) - cross(r21, dcosdA));
95 <    f3 = dVdcosPhi * cross(dcosdB, r32);
93 >    f1 = dVdcosPhi * cross(r43, dcosdA);
94 >    f2 = dVdcosPhi * ( cross(r23, dcosdB) - cross(r31, dcosdA));
95 >    f3 = dVdcosPhi * cross(dcosdB, r43);
96  
97      // In OOPSE's version of an improper torsion, the central atom
98      // comes first.  However, to get the planarity in a typical cosine
# Line 104 | Line 104 | namespace oopse {
104  
105      // Confusing enough?  Good.
106  
107 <    atom3_->addFrc(f1);
108 <    atom1_->addFrc(f2 - f1);
109 <    atom2_->addFrc(f3 - f2);
110 <    atom4_->addFrc(-f3);
107 >    atom2_->addFrc(f1);
108 >    atom1_->addFrc(f2 - f1 + f3);
109 >    atom4_->addFrc(-f2);
110 >    atom3_->addFrc(-f3);
111 >
112 >    atom1_->addParticlePot(potential_);
113 >    atom2_->addParticlePot(potential_);
114 >    atom3_->addParticlePot(potential_);
115 >    atom4_->addParticlePot(potential_);
116 >
117      angle = acos(cos_phi) /M_PI * 180.0;
118    }
119  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines