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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines