ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Molecule.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/Molecule.cpp (file contents):
Revision 450 by mmeineke, Thu Apr 3 21:12:51 2003 UTC vs.
Revision 1104 by gezelter, Tue Apr 13 16:26:03 2004 UTC

# Line 1 | Line 1
1 < #include <cstdlib>
1 > #include <stdlib.h>
2  
3  
4   #include "Molecule.hpp"
# Line 15 | Line 15 | Molecule::Molecule( void ){
15  
16   }
17  
18
19
18   Molecule::~Molecule( void ){
19    int i;
20    
# Line 40 | Line 38 | Molecule::~Molecule( void ){
38      delete[] myTorsions;
39    }
40  
43  if( myExcludes != NULL ){
44    for(i=0; i<nExcludes; i++) if(myExcludes[i] != NULL ) delete myExcludes[i];
45    delete[] myExcludes;
46  }
41   }
42  
43  
# Line 54 | Line 48 | void Molecule::initialize( molInit &theInit ){
48    nBonds = theInit.nBonds;
49    nBends = theInit.nBends;
50    nTorsions = theInit.nTorsions;
51 <  nExcludes = theInit.nExcludes;
51 >  nRigidBodies = theInit.nRigidBodies;
52    nOriented = theInit.nOriented;
53  
54    myAtoms = theInit.myAtoms;
55    myBonds = theInit.myBonds;
56    myBends = theInit.myBends;
57    myTorsions = theInit.myTorsions;
58 <  myExcludes = theInit.myExcludes;
58 >  myRigidBodies = theInit.myRigidBodies;
59 >
60 >  myIntegrableObjects = theInit.myIntegrableObjects;
61      
62   }
63  
# Line 69 | Line 65 | void Molecule::calcForces( void ){
65    
66    int i;
67  
68 +  for(i=0; i<myRigidBodies.size(); i++) {
69 +    myRigidBodies[i]->updateAtoms();
70 +  }
71 +
72    for(i=0; i<nBonds; i++){
73      myBonds[i]->calc_forces();
74    }
# Line 80 | Line 80 | void Molecule::calcForces( void ){
80    for(i=0; i<nTorsions; i++){
81      myTorsions[i]->calc_forces();
82    }
83 +
84 +  // Rigid Body forces and torques are done after the fortran force loop
85 +
86   }
87  
88  
# Line 118 | Line 121 | void Molecule::printMe( void ){
121    for(i=0; i<nTorsions; i++){
122      myTorsions[i]->printMe();
123    }
124 +
125   }
126  
127   void Molecule::moveCOM(double delta[3]){
128 <  double x, y, z;
129 <  int i;
128 >  double aPos[3];
129 >  int i, j;
130  
131    for(i=0; i<nAtoms; i++) {
132      if(myAtoms[i] != NULL ) {
133 +      
134 +      myAtoms[i]->getPos( aPos );
135 +      
136 +      for (j=0; j< 3; j++)
137 +        aPos[j] += delta[j];
138  
139 <      x = myAtoms[i]->getX() + delta[0];
140 <      y = myAtoms[i]->getY() + delta[1];
141 <      z = myAtoms[i]->getZ() + delta[2];
139 >      myAtoms[i]->setPos( aPos );
140 >    }
141 >  }
142  
143 <      myAtoms[i]->setX(x);
144 <      myAtoms[i]->setY(y);
145 <      myAtoms[i]->setZ(z);
143 >  for(i=0; i<myRigidBodies.size(); i++) {
144 >
145 >      myRigidBodies[i]->getPos( aPos );
146 >
147 >      for (j=0; j< 3; j++)
148 >        aPos[j] += delta[j];
149 >      
150 >      myRigidBodies[i]->setPos( aPos );
151      }
152 + }
153 +
154 + void Molecule::atoms2rigidBodies( void ) {
155 +  int i;
156 +  for (i = 0; i < myRigidBodies.size(); i++) {
157 +    myRigidBodies[i]->calcForcesAndTorques();  
158    }
159   }
160  
161   void Molecule::getCOM( double COM[3] ) {
162  
163    double mass, mtot;
164 <  int i;
164 >  double aPos[3];
165 >  int i, j;
166  
167 <  COM[0] = 0.0;
168 <  COM[1] = 0.0;
169 <  COM[2] = 0.0;
167 >  for (j=0; j<3; j++)
168 >    COM[j] = 0.0;
169 >
170    mtot   = 0.0;
171  
172    for (i=0; i < nAtoms; i++) {
# Line 153 | Line 174 | void Molecule::getCOM( double COM[3] ) {
174  
175        mass = myAtoms[i]->getMass();
176        mtot   += mass;
177 <      COM[0] += myAtoms[i]->getX() * mass;
178 <      COM[1] += myAtoms[i]->getY() * mass;
158 <      COM[2] += myAtoms[i]->getZ() * mass;
177 >      
178 >      myAtoms[i]->getPos( aPos );
179  
180 +      for( j = 0; j < 3; j++)
181 +        COM[j] += aPos[j] * mass;
182 +
183      }
184    }
185  
186 <  COM[0] /= mtot;
187 <  COM[1] /= mtot;
188 <  COM[2] /= mtot;
186 >  for (j = 0; j < 3; j++)
187 >    COM[j] /= mtot;
188 > }
189 >
190 > double Molecule::getCOMvel( double COMvel[3] ) {
191 >
192 >  double mass, mtot;
193 >  double aVel[3];
194 >  int i, j;
195 >
196 >
197 >  for (j=0; j<3; j++)
198 >    COMvel[j] = 0.0;
199 >
200 >  mtot   = 0.0;
201 >
202 >  for (i=0; i < nAtoms; i++) {
203 >    if (myAtoms[i] != NULL) {
204 >
205 >      mass = myAtoms[i]->getMass();
206 >      mtot   += mass;
207 >
208 >      myAtoms[i]->getVel(aVel);
209 >
210 >      for (j=0; j<3; j++)
211 >        COMvel[j] += aVel[j]*mass;
212 >
213 >    }
214 >  }
215 >
216 >  for (j=0; j<3; j++)
217 >    COMvel[j] /= mtot;
218  
219 +  return mtot;
220 +
221   }
222 +
223 + double Molecule::getTotalMass()
224 + {
225 +  int natoms;
226 +  Atom** atoms;
227 +  double totalMass;
228 +  
229 +  natoms = getNAtoms();
230 +  atoms = getMyAtoms();
231 +  totalMass = 0;
232 +  for(int i =0; i < natoms; i++){
233 +    totalMass += atoms[i]->getMass();
234 +  }
235 +
236 +  return totalMass;
237 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines