ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/CutoffGroup.hpp
Revision: 1166
Committed: Wed May 12 15:58:35 2004 UTC (20 years, 2 months ago) by gezelter
File size: 1625 byte(s)
Log Message:
efficiency fixes in CutoffGroup

File Contents

# User Rev Content
1 tim 1159 #ifndef _CUTOFFGROUP_H_
2     #define _CUTOFFGROUP_H_
3     #include "Atom.hpp"
4    
5     class CutoffGroup{
6 gezelter 1166 public:
7    
8     CutoffGroup() {
9     haveTotalMass = false;
10     totalMass = 0.0;
11     }
12    
13     void addAtom(Atom* atom) {cutoffAtomList.push_back(atom);}
14    
15     Atom* beginAtom(vector<Atom*>::iterator& i){
16     i = cutoffAtomList.begin();
17     return i != cutoffAtomList.end()? *i : NULL;
18     }
19    
20     Atom* nextAtom(vector<Atom*>::iterator& i){
21     i++;
22     return i != cutoffAtomList.end()? *i : NULL;
23     }
24    
25     double getMass(){
26     vector<Atom*>::iterator i;
27     Atom* atom;
28     double mass;
29    
30     if (!haveTotalMass) {
31 tim 1159
32     totalMass = 0;
33 gezelter 1166
34 tim 1159 for(atom = beginAtom(i); atom != NULL; atom = nextAtom(i)){
35     mass = atom->getMass();
36     totalMass += mass;
37     }
38    
39 gezelter 1166 haveTotalMass = true;
40 tim 1159 }
41    
42 gezelter 1166 return totalMass;
43     }
44    
45     void getCOM(double com[3]){
46    
47     vector<Atom*>::iterator i;
48     Atom* atom;
49     double pos[3];
50     double mass;
51    
52     com[0] = 0;
53     com[1] = 0;
54     com[2] = 0;
55     totalMass = getMass();
56    
57     if (cutoffAtomList.size() == 1) {
58 tim 1159
59 gezelter 1166 beginAtom(i)->getPos(com);
60    
61     } else {
62    
63 tim 1159 for(atom = beginAtom(i); atom != NULL; atom = nextAtom(i)){
64     mass = atom->getMass();
65     atom->getPos(pos);
66 tim 1164 com[0] += pos[0] * mass;
67     com[1] += pos[1] * mass;
68     com[2] += pos[2] * mass;
69 tim 1159 }
70 gezelter 1166
71 tim 1159 com[0] /= totalMass;
72     com[1] /= totalMass;
73     com[2] /= totalMass;
74     }
75 gezelter 1166
76     }
77    
78     int getNumAtom() {return cutoffAtomList.size();}
79    
80     private:
81     vector<Atom*> cutoffAtomList;
82     bool haveTotalMass;
83     double totalMass;
84 tim 1159
85     };
86    
87     #endif

Properties

Name Value
svn:executable *