ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-3.0/src/primitives/Molecule.cpp
(Generate patch)

Comparing branches/new_design/OOPSE-3.0/src/primitives/Molecule.cpp (file contents):
Revision 1692 by tim, Mon Nov 1 20:15:58 2004 UTC vs.
Revision 1782 by tim, Wed Nov 24 20:55:03 2004 UTC

# Line 30 | Line 30
30   * @version 1.0
31   */
32  
33 #include "primitives/Molecule.hpp"
33   #include <algorithm>
34 + #include <set>
35  
36 + #include "primitives/Molecule.hpp"
37 + #include "utils/MemoryUtils.hpp"
38 + #include "utils/simError.h"
39 +
40   namespace oopse {
41 + Molecule::Molecule(int stampId, int globalIndex, const std::string& molName)
42 +    : stampId_(stampId), globalIndex_(globalIndex), moleculeName_(molName) {
43  
44 + }
45 +
46   Molecule::~Molecule() {
47  
48 <    deleteVectorOfPointer(atoms_);
49 <    deleteVectorOfPointer(bonds_);
50 <    deleteVectorOfPointer(bends_);
51 <    deleteVectorOfPointer(torsions_);
52 <    deleteVectorOfPointer(rigidbodies_);
53 <    deleteVectorOfPointer(cutoffGroups_);
48 >    MemoryUtils::deleteVectorOfPointer(atoms_);
49 >    MemoryUtils::deleteVectorOfPointer(bonds_);
50 >    MemoryUtils::deleteVectorOfPointer(bends_);
51 >    MemoryUtils::deleteVectorOfPointer(torsions_);
52 >    MemoryUtils::deleteVectorOfPointer(rigidBodies_);
53 >    MemoryUtils::deleteVectorOfPointer(cutoffGroups_);
54  
55 +    //integrableObjects_ don't own the objects
56      integrableObjects_.clear();
57      
58   }
59  
60   void Molecule::addAtom(Atom* atom) {
61 <    if (atoms_.find(atom) == atoms_.end()) {
61 >    if (std::find(atoms_.begin(), atoms_.end(), atom) == atoms_.end()) {
62          atoms_.push_back(atom);
63      }
64   }
65  
66   void Molecule::addBond(Bond* bond) {
67 <    if (bonds_.find(bond) == bonds_.end()) {
67 >    if (std::find(bonds_.begin(), bonds_.end(), bond) == bonds_.end()) {
68          bonds_.push_back(bond);
69      }
70   }
71  
72   void Molecule::addBend(Bend* bend) {
73 <    if (bends_.find(bend) == bends_.end()) {
73 >    if (std::find(bends_.begin(), bends_.end(), bend) == bends_.end()) {
74          bends_.push_back(bend);
75      }
76   }
77  
78   void Molecule::addTorsion(Torsion* torsion) {
79 <    if (torsions_.find(torsion) == torsions_.end()) {
79 >    if (std::find(torsions_.begin(), torsions_.end(), torsion) == torsions_.end()) {
80          torsions_.push_back(torsion);
81      }
82   }
83  
84   void Molecule::addRigidBody(RigidBody *rb) {
85 <    if (rigidBodies_.find(bond) == bonds_.end()) {
85 >    if (std::find(rigidBodies_.begin(), rigidBodies_.end(), rb) == rigidBodies_.end()) {
86          rigidBodies_.push_back(rb);
87      }
88   }
89  
90   void Molecule::addCutoffGroup(CutoffGroup* cp) {
91 <    if (cutoffGroups_.find(bond) == bonds_.end()) {
91 >    if (std::find(cutoffGroups_.begin(), cutoffGroups_.end(), cp) == cutoffGroups_.end()) {
92          cutoffGroups_.push_back(cp);
93      }
94  
# Line 92 | Line 101 | void Molecule::complete() {
101  
102      std::set<Atom*> rigidAtoms;
103      RigidBody* rb;
104 <    std::vector<RigidBody*> rbIter;
104 >    std::vector<RigidBody*>::iterator rbIter;
105  
106      
107      for (rb = beginRigidBody(rbIter); rb != NULL; rb = nextRigidBody(rbIter)) {
108 <        rigidAtoms.insert(rb->beginAtomIter(), rb->endAtomIter());
108 >        rigidAtoms.insert(rb->getBeginAtomIter(), rb->getEndAtomIter());
109      }
110  
111      //find all free atoms (which do not belong to rigid bodies)  
# Line 108 | Line 117 | void Molecule::complete() {
117  
118      if (integrableObjects_.size() != allAtoms.size() - rigidAtoms.size()) {
119          //Some atoms in rigidAtoms are not in allAtoms, something must be wrong
120 +        sprintf(painCave.errMsg, "Atoms in rigidbody are not in the atom list of the same molecule");
121 +
122 +        painCave.isFatal = 1;
123 +        simError();        
124      }
125  
126      integrableObjects_.insert(integrableObjects_.end(), rigidBodies_.begin(), rigidBodies_.end());
# Line 185 | Line 198 | void Molecule::calcForces() {
198      return (i == cutoffGroups_.end()) ? NULL : *i;    
199   }
200  
188 void Molecule::calcForces() {
189    RigidBody* rb;
190    Bond* bond;
191    Bend* bend;
192    Torsion* torsion;
193    std::vector<RigidBody*> rbIter;
194    std::vector<Bond*> bondIter;;
195    std::vector<Bend*> bendIter;
196    std::vector<Torsion*> torsionIter;
201  
198    for (rb = beginRigidBody(rbIter); rb != NULL; rb = nextRigidBody(rbIter)) {
199        rb->updateAtoms();
200    }
201
202    for (bond = beginBond(bondIter); bond != NULL; bond = nextBond(bondIter)) {
203        bond->calcForce();
204    }
205
206    for (bend = beginBend(bendIter); bend != NULL; bend = nextBend(bendIter)) {
207        bend->calcForce();
208    }
209
210    for (torsion = beginTorsion(torsionIter); torsion != NULL; torsion = nextTorsion(torsionIter)) {
211        torsion->calcForce();
212    }
213    
214 }
215
216 double Molecule::getPotential() {
217    //RigidBody* rb;
218    Bond* bond;
219    Bend* bend;
220    Torsion* torsion;
221    //std::vector<RigidBody*> rbIter;
222    std::vector<Bond*> bondIter;;
223    std::vector<Bend*> bendIter;
224    std::vector<Torsion*> torsionIter;
225
226    double potential = 0;
227    
228    //for (rb = beginRigidBody(rbIter); rb != NULL; rb = nextRigidBody(rbIter)) {
229    //    rb->updateAtoms();
230    //}
231
232    for (bond = beginBond(bondIter); bond != NULL; bond = nextBond(bondIter)) {
233        potential += bond->getPotential();
234    }
235
236    for (bend = beginBend(bendIter); bend != NULL; bend = nextBend(bendIter)) {
237        potential += bend->getPotential();
238    }
239
240    for (torsion = beginTorsion(torsionIter); torsion != NULL; torsion = nextTorsion(torsionIter)) {
241        potential += torsion->getPotential();
242    }
243    
244    return potential;
245 }
246
202   Vector3d Molecule::getCom() {
203      StuntDouble* sd;
204      std::vector<StuntDouble*>::iterator i;
# Line 262 | Line 217 | void Molecule::moveCom(const Vetor3d& delta) {
217      return com;
218   }
219  
220 < void Molecule::moveCom(const Vetor3d& delta) {
220 > void Molecule::moveCom(const Vector3d& delta) {
221      StuntDouble* sd;
222      std::vector<StuntDouble*>::iterator i;
223      
224      for (sd = beginIntegrableObject(i); sd != NULL; sd = nextIntegrableObject(i)){
225 <        s->setPos(sd->getPos() + delta);
225 >        sd->setPos(sd->getPos() + delta);
226      }
227  
228   }
# Line 290 | Line 245 | std::ostream& operator <<(std::ostream& o, const Molec
245      return velCom;
246   }
247  
248 < std::ostream& operator <<(std::ostream& o, const Molecule& mol) {
248 > std::ostream& operator <<(std::ostream& o, Molecule& mol) {
249      o << std::endl;
250      o << "Molecule " << mol.getGlobalIndex() << "has: " << std::endl;
251      o << mol.getNAtoms() << " atoms" << std::endl;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines