--- trunk/OOPSE/libmdtools/Molecule.cpp 2004/04/12 20:32:20 1097 +++ trunk/OOPSE/libmdtools/Molecule.cpp 2004/08/23 15:11:36 1452 @@ -12,14 +12,12 @@ Molecule::Molecule( void ){ myBonds = NULL; myBends = NULL; myTorsions = NULL; - myRigidBodies = NULL; - } - - Molecule::~Molecule( void ){ int i; + CutoffGroup* cg; + vector::iterator iter; if( myAtoms != NULL ){ for(i=0; i::iterator iterCutoff; + Atom* cutoffAtom; + vector::iterator iterAtom; + int atomIndex; + GenericData* gdata; + ConsRbData* rbData; + RigidBody* oldRb; + nAtoms = theInit.nAtoms; nMembers = nAtoms; nBonds = theInit.nBonds; @@ -65,16 +70,47 @@ void Molecule::initialize( molInit &theInit ){ myBends = theInit.myBends; myTorsions = theInit.myTorsions; myRigidBodies = theInit.myRigidBodies; + + myIntegrableObjects = theInit.myIntegrableObjects; + + for (int i = 0; i < myRigidBodies.size(); i++){ + myRigidBodies[i]->calcRefCoords(); + //just a quick hack + gdata = myRigidBodies[i]->getProperty("OldState"); + if(gdata != NULL){ + rbData = dynamic_cast(gdata); + if(rbData ==NULL) + cerr << "dynamic_cast to ConsRbData Error in Molecule::initialize()" << endl; + else{ + oldRb = rbData->getData(); + oldRb->calcRefCoords(); + } + }//end if(gata != NULL) + + }//end for(int i = 0; i < myRigidBodies.size(); i++) + + myCutoffGroups = theInit.myCutoffGroups; + nCutoffGroups = myCutoffGroups.size(); + + myConstraintPairs = theInit.myConstraintPairs; + } void Molecule::calcForces( void ){ int i; + double com[3]; - for(i=0; iupdateAtoms(); } + + //calculate the center of mass of the molecule + //getCOM(com); + //for(int i = 0; i < nAtoms; i ++) + // myAtoms[i]->setRc(com); + for(i=0; icalc_forces(); @@ -97,6 +133,10 @@ double Molecule::getPotential( void ){ int i; double myPot = 0.0; + + for(i=0; iupdateAtoms(); + } for(i=0; iget_potential(); @@ -135,22 +175,20 @@ void Molecule::moveCOM(double delta[3]){ double aPos[3]; int i, j; - for(i=0; igetPos( aPos ); + myIntegrableObjects[i]->getPos( aPos ); for (j=0; j< 3; j++) aPos[j] += delta[j]; - myAtoms[i]->setPos( aPos ); + myIntegrableObjects[i]->setPos( aPos ); } } - for(i=0; igetPos( aPos ); for (j=0; j< 3; j++) @@ -158,15 +196,12 @@ void Molecule::moveCOM(double delta[3]){ myRigidBodies[i]->setPos( aPos ); } - } } void Molecule::atoms2rigidBodies( void ) { int i; - for (i = 0; i < nRigidBodies; i++) { - if (myRigidBodies[i] != NULL) { - myRigidBodies[i]->calcForcesAndTorques(); - } + for (i = 0; i < myRigidBodies.size(); i++) { + myRigidBodies[i]->calcForcesAndTorques(); } } @@ -181,13 +216,13 @@ void Molecule::getCOM( double COM[3] ) { mtot = 0.0; - for (i=0; i < nAtoms; i++) { - if (myAtoms[i] != NULL) { + for (i=0; i < myIntegrableObjects.size(); i++) { + if (myIntegrableObjects[i] != NULL) { - mass = myAtoms[i]->getMass(); + mass = myIntegrableObjects[i]->getMass(); mtot += mass; - myAtoms[i]->getPos( aPos ); + myIntegrableObjects[i]->getPos( aPos ); for( j = 0; j < 3; j++) COM[j] += aPos[j] * mass; @@ -211,13 +246,13 @@ double Molecule::getCOMvel( double COMvel[3] ) { mtot = 0.0; - for (i=0; i < nAtoms; i++) { - if (myAtoms[i] != NULL) { + for (i=0; i < myIntegrableObjects.size(); i++) { + if (myIntegrableObjects[i] != NULL) { - mass = myAtoms[i]->getMass(); + mass = myIntegrableObjects[i]->getMass(); mtot += mass; - myAtoms[i]->getVel(aVel); + myIntegrableObjects[i]->getVel(aVel); for (j=0; j<3; j++) COMvel[j] += aVel[j]*mass; @@ -234,15 +269,12 @@ double Molecule::getTotalMass() double Molecule::getTotalMass() { - int natoms; - Atom** atoms; + double totalMass; - natoms = getNAtoms(); - atoms = getMyAtoms(); totalMass = 0; - for(int i =0; i < natoms; i++){ - totalMass += atoms[i]->getMass(); + for(int i =0; i < myIntegrableObjects.size(); i++){ + totalMass += myIntegrableObjects[i]->getMass(); } return totalMass;