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 1097 by gezelter, Mon Apr 12 20:32:20 2004 UTC vs.
Revision 1452 by tim, Mon Aug 23 15:11:36 2004 UTC

# Line 12 | Line 12 | Molecule::Molecule( void ){
12    myBonds = NULL;
13    myBends = NULL;
14    myTorsions = NULL;
15  myRigidBodies = NULL;
16
15   }
16  
19
20
17   Molecule::~Molecule( void ){
18    int i;
19 +  CutoffGroup* cg;
20 +  vector<CutoffGroup*>::iterator iter;
21    
22    if( myAtoms != NULL ){
23      for(i=0; i<nAtoms; i++) if(myAtoms[i] != NULL ) delete myAtoms[i];
# Line 41 | Line 39 | Molecule::~Molecule( void ){
39      delete[] myTorsions;
40    }
41  
42 <  if( myRigidBodies != NULL ){
43 <    for(i=0; i<nRigidBodies; i++) if(myRigidBodies[i] != NULL )
44 <      delete myRigidBodies[i];
47 <    delete[] myRigidBodies;
48 <  }
42 >  for(cg = beginCutoffGroup(iter);  cg != NULL; cg = nextCutoffGroup(iter))
43 >    delete cg;
44 >  myCutoffGroups.clear();
45    
46   }
47  
48  
49   void Molecule::initialize( molInit &theInit ){
50  
51 +  CutoffGroup* curCutoffGroup;
52 +  vector<CutoffGroup*>::iterator iterCutoff;
53 +  Atom* cutoffAtom;
54 +  vector<Atom*>::iterator iterAtom;
55 +  int atomIndex;
56 +  GenericData* gdata;
57 +  ConsRbData* rbData;
58 +  RigidBody* oldRb;
59 +  
60    nAtoms = theInit.nAtoms;
61    nMembers = nAtoms;
62    nBonds = theInit.nBonds;
# Line 65 | Line 70 | void Molecule::initialize( molInit &theInit ){
70    myBends = theInit.myBends;
71    myTorsions = theInit.myTorsions;
72    myRigidBodies = theInit.myRigidBodies;
73 +
74 +  myIntegrableObjects = theInit.myIntegrableObjects;
75 +
76 +  for (int i = 0; i < myRigidBodies.size(); i++){
77 +      myRigidBodies[i]->calcRefCoords();
78 +    //just a quick hack
79      
80 +    gdata = myRigidBodies[i]->getProperty("OldState");
81 +    if(gdata != NULL){
82 +      rbData = dynamic_cast<ConsRbData*>(gdata);
83 +      if(rbData ==NULL)
84 +        cerr << "dynamic_cast to ConsRbData Error in Molecule::initialize()" << endl;
85 +      else{
86 +        oldRb = rbData->getData();
87 +        oldRb->calcRefCoords();
88 +      }
89 +    }//end if(gata != NULL)
90 +    
91 +  }//end for(int i = 0; i < myRigidBodies.size(); i++)
92 +
93 +  myCutoffGroups = theInit.myCutoffGroups;
94 +  nCutoffGroups = myCutoffGroups.size();
95 +
96 +  myConstraintPairs = theInit.myConstraintPairs;
97 +  
98   }
99  
100   void Molecule::calcForces( void ){
101    
102    int i;
103 +  double com[3];
104  
105 <  for(i=0; i<nRigidBodies; i++) {
105 >  for(i=0; i<myRigidBodies.size(); i++) {
106      myRigidBodies[i]->updateAtoms();
107    }
108 +
109 +  //calculate the center of mass of the molecule
110 +  //getCOM(com);  
111 +  //for(int i = 0; i < nAtoms; i ++)
112 +  //  myAtoms[i]->setRc(com);  
113 +  
114  
115    for(i=0; i<nBonds; i++){
116      myBonds[i]->calc_forces();
# Line 97 | Line 133 | double Molecule::getPotential( void ){
133    
134    int i;
135    double myPot = 0.0;
136 +
137 +  for(i=0; i<myRigidBodies.size(); i++) {
138 +    myRigidBodies[i]->updateAtoms();
139 +  }
140    
141    for(i=0; i<nBonds; i++){
142      myPot += myBonds[i]->get_potential();
# Line 135 | Line 175 | void Molecule::moveCOM(double delta[3]){
175    double aPos[3];
176    int i, j;
177  
178 <  for(i=0; i<nAtoms; i++) {
179 <    if(myAtoms[i] != NULL ) {
178 >  for(i=0; i<myIntegrableObjects.size(); i++) {
179 >    if(myIntegrableObjects[i] != NULL ) {
180        
181 <      myAtoms[i]->getPos( aPos );
181 >      myIntegrableObjects[i]->getPos( aPos );
182        
183        for (j=0; j< 3; j++)
184          aPos[j] += delta[j];
185  
186 <      myAtoms[i]->setPos( aPos );
186 >      myIntegrableObjects[i]->setPos( aPos );
187      }
188    }
189  
190 <  for(i=0; i<nRigidBodies; i++) {
190 >  for(i=0; i<myRigidBodies.size(); i++) {
191  
152    if (myRigidBodies[i] != NULL) {
153      
192        myRigidBodies[i]->getPos( aPos );
193  
194        for (j=0; j< 3; j++)
# Line 158 | Line 196 | void Molecule::moveCOM(double delta[3]){
196        
197        myRigidBodies[i]->setPos( aPos );
198      }
161  }  
199   }
200  
201   void Molecule::atoms2rigidBodies( void ) {
202    int i;
203 <  for (i = 0; i < nRigidBodies; i++) {
204 <    if (myRigidBodies[i] != NULL) {
168 <      myRigidBodies[i]->calcForcesAndTorques();  
169 <    }
203 >  for (i = 0; i < myRigidBodies.size(); i++) {
204 >    myRigidBodies[i]->calcForcesAndTorques();  
205    }
206   }
207  
# Line 181 | Line 216 | void Molecule::getCOM( double COM[3] ) {
216  
217    mtot   = 0.0;
218  
219 <  for (i=0; i < nAtoms; i++) {
220 <    if (myAtoms[i] != NULL) {
219 >  for (i=0; i < myIntegrableObjects.size(); i++) {
220 >    if (myIntegrableObjects[i] != NULL) {
221  
222 <      mass = myAtoms[i]->getMass();
222 >      mass = myIntegrableObjects[i]->getMass();
223        mtot   += mass;
224        
225 <      myAtoms[i]->getPos( aPos );
225 >      myIntegrableObjects[i]->getPos( aPos );
226  
227        for( j = 0; j < 3; j++)
228          COM[j] += aPos[j] * mass;
# Line 211 | Line 246 | double Molecule::getCOMvel( double COMvel[3] ) {
246  
247    mtot   = 0.0;
248  
249 <  for (i=0; i < nAtoms; i++) {
250 <    if (myAtoms[i] != NULL) {
249 >  for (i=0; i < myIntegrableObjects.size(); i++) {
250 >    if (myIntegrableObjects[i] != NULL) {
251  
252 <      mass = myAtoms[i]->getMass();
252 >      mass = myIntegrableObjects[i]->getMass();
253        mtot   += mass;
254  
255 <      myAtoms[i]->getVel(aVel);
255 >      myIntegrableObjects[i]->getVel(aVel);
256  
257        for (j=0; j<3; j++)
258          COMvel[j] += aVel[j]*mass;
# Line 234 | Line 269 | double Molecule::getTotalMass()
269  
270   double Molecule::getTotalMass()
271   {
272 <  int natoms;
238 <  Atom** atoms;
272 >
273    double totalMass;
274    
241  natoms = getNAtoms();
242  atoms = getMyAtoms();
275    totalMass = 0;
276 <  for(int i =0; i < natoms; i++){
277 <    totalMass += atoms[i]->getMass();
276 >  for(int i =0; i < myIntegrableObjects.size(); i++){
277 >    totalMass += myIntegrableObjects[i]->getMass();
278    }
279  
280    return totalMass;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines