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 1303 by cli2, Mon Oct 13 21:35:22 2008 UTC

# Line 40 | Line 40
40   */
41  
42   #include "primitives/Inversion.hpp"
43 + #include "fstream"
44  
45   namespace oopse {
46  
# Line 60 | Line 61 | namespace oopse {
61      Vector3d pos3 = atom1_->getPos();
62      Vector3d pos4 = atom4_->getPos();
63  
64 <    Vector3d r21 = pos1 - pos2;
65 <    Vector3d r32 = pos2 - pos3;
64 >   /*std::ofstream myfile;
65 >   myfile.open("Inversion", std::ios::app);      
66 >   myfile << atom1_->getType() << " - atom1; "
67 >              << atom2_->getType() << " - atom2; "
68 >              << atom3_->getType() << " - atom3; "
69 >              << atom4_->getType() << " - atom4; "
70 >              << std::endl;
71 > */
72 >    Vector3d r31 = pos1 - pos3;
73 >    Vector3d r23 = pos3 - pos2;
74      Vector3d r43 = pos3 - pos4;
75  
76      //  Calculate the cross products and distances
77 <    Vector3d A = cross(r21, r32);
77 >    Vector3d A = cross(r31, r43);
78      RealType rA = A.length();
79 <    Vector3d B = cross(r32, r43);
79 >    Vector3d B = cross(r43, r23);
80      RealType rB = B.length();
81 <    Vector3d C = cross(r32, A);
82 <    RealType rC = C.length();
81 >    //Vector3d C = cross(r23, A);
82 >    //RealType rC = C.length();
83  
84      A.normalize();
85      B.normalize();
86 <    C.normalize();
86 >    //C.normalize();
87      
88      //  Calculate the sin and cos
89      RealType cos_phi = dot(A, B) ;
90 <    if (cos_phi > 1.0) cos_phi = 1.0;
91 <    if (cos_phi < -1.0) cos_phi = -1.0;
90 >    if (cos_phi > 1.0) {cos_phi = 1.0; std::cout << "!!!! cos_phi is bigger than 1.0"
91 >                                                 << std::endl;}
92 >    if (cos_phi < -1.0) {cos_phi = -1.0; std::cout << "!!!! cos_phi is less than -1.0"
93 >                                                   << std::endl;}
94 >    //std::cout << "We actually use this inversion!!!!" << std::endl;
95  
96      RealType dVdcosPhi;
97 +    //cos_phi = 2.0*cos_phi*cos_phi - 1.0;
98      inversionType_->calcForce(cos_phi, potential_, dVdcosPhi);
99 <    Vector3d f1;
100 <    Vector3d f2;
101 <    Vector3d f3;
99 >    Vector3d f1 ;
100 >    Vector3d f2 ;
101 >    Vector3d f3 ;
102  
103      Vector3d dcosdA = (cos_phi * A - B) /rA;
104      Vector3d dcosdB = (cos_phi * B - A) /rB;
105  
106 <    f1 = dVdcosPhi * cross(r32, dcosdA);
107 <    f2 = dVdcosPhi * ( cross(r43, dcosdB) - cross(r21, dcosdA));
108 <    f3 = dVdcosPhi * cross(dcosdB, r32);
106 >    f1 = dVdcosPhi * cross(r43, dcosdA);
107 >    f2 = dVdcosPhi * ( cross(r23, dcosdB) - cross(r31, dcosdA));
108 >    f3 = dVdcosPhi * cross(dcosdB, r43);
109  
110      // In OOPSE's version of an improper torsion, the central atom
111      // comes first.  However, to get the planarity in a typical cosine
# Line 104 | Line 117 | namespace oopse {
117  
118      // Confusing enough?  Good.
119  
120 <    atom3_->addFrc(f1);
121 <    atom1_->addFrc(f2 - f1);
122 <    atom2_->addFrc(f3 - f2);
123 <    atom4_->addFrc(-f3);
120 >    atom2_->addFrc(f1);
121 >    atom1_->addFrc(f2 - f1 + f3);
122 >    atom4_->addFrc(-f2);
123 >    atom3_->addFrc(-f3);
124 >
125      angle = acos(cos_phi) /M_PI * 180.0;
126    }
127  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines