ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/ConstraintManager.cpp
Revision: 1232
Committed: Thu Jun 3 21:51:55 2004 UTC (20 years, 1 month ago) by tim
File size: 2569 byte(s)
Log Message:
new implementation of constraint

File Contents

# User Rev Content
1 tim 1232 #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    
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::creatElementIterator(){
89     return new ConstraintElementIterator(consElements);
90     }
91    
92     ConstraintPairIterator* ConstraintManager::creatPairIterator(){
93     return new ConstraintPairIterator(consPairs);
94     }
95    

Properties

Name Value
svn:executable *