ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ConstraintManager.cpp
Revision: 1452
Committed: Mon Aug 23 15:11:36 2004 UTC (19 years, 10 months ago) by tim
File size: 2591 byte(s)
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "ConstraintManager.hpp"
2 #include "ConstraintIterator.hpp"
3 #include "SimInfo.hpp"
4 ConstraintManager::ConstraintManager(SimInfo* info){
5 int nmol;
6 Molecule* mols;
7
8 nmol = info->n_mol;
9 mols = info->molecules;
10
11 for(int i = 0; i < nmol; i ++)
12 addConstraints(&mols[i]);
13
14 }
15
16 ConstraintManager::~ConstraintManager(){
17 list<vector<ConstraintElement*> >::iterator listIter;
18 vector<ConstraintElement*>::iterator vectorIter;
19
20 for(listIter = consElements.begin();listIter != consElements.end(); ){
21
22 for(vectorIter = listIter->begin(); vectorIter != listIter->end(); ++vectorIter)
23 delete *vectorIter;
24
25 listIter = consElements.erase(listIter);
26 }
27
28 }
29
30 void ConstraintManager::addConstraints(Molecule* mol){
31 MolIterInfoMap::iterator foundResult;
32 ListIteratorInfo iterInfo;
33 StuntDouble* sd;
34 ConstraintElement* ce;
35 vector<StuntDouble*> integrableObjects;
36 vector<StuntDouble*>::iterator sdIter;
37 vector<ConstraintElement*> tempConsElem;
38
39 foundResult = iterInfoMap.find(mol);
40 if (foundResult == iterInfoMap.end()){
41
42 //to improve efficiency, we will not record the molecule without constraint
43 if (mol->getNConstrains() > 0){
44
45 //if a molecule has constraint, all of its myIntegrableOjects must be constraint elements
46
47 integrableObjects = mol->getIntegrableObjects();
48
49 for(sdIter = integrableObjects.begin(); sdIter != integrableObjects.end(); sdIter++){
50 sd = *sdIter;
51 if(sd->isRigidBody())
52 ce = new ConstraintRigidBody((RigidBody*)sd, 0);
53 else
54 ce = new ConstraintAtom((Atom *) sd);
55
56 tempConsElem.push_back(ce);
57 }
58
59 consElements.push_back(tempConsElem);
60 iterInfo.firstElement = --consElements.end();
61
62 //just copy the constraint pairs from molecule;
63
64 consPairs.push_back(mol->getConstraintPairs());
65 iterInfo.firstPair = --consPairs.end();
66
67 iterInfoMap[mol] = iterInfo;
68
69 }
70 }
71 }
72
73 void ConstraintManager::removeConstraints(Molecule* mol){
74 MolIterInfoMap::iterator foundResult;
75 ListIteratorInfo iterInfo;
76
77 foundResult = iterInfoMap.find(mol);
78
79 if (foundResult != iterInfoMap.end()){
80 iterInfo = foundResult->second;
81 consElements.erase(iterInfo.firstElement);
82 consPairs.erase(iterInfo.firstPair);
83 iterInfoMap.erase(foundResult);
84 }
85
86 }
87
88 ConstraintElementIterator* ConstraintManager::createElementIterator(){
89 return new ConstraintElementIterator(consElements);
90 }
91
92 ConstraintPairIterator* ConstraintManager::createPairIterator(){
93 return new ConstraintPairIterator(consPairs);
94 }
95

Properties

Name Value
svn:executable *