ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/test/brains/Molecule.hpp
Revision: 1690
Committed: Fri Oct 29 22:37:59 2004 UTC (19 years, 8 months ago) by tim
File size: 7764 byte(s)
Log Message:
more work on Molecule class

File Contents

# User Rev Content
1 tim 1686 /*
2     * Copyright (C) 2000-2004 Object Oriented Parallel Simulation Engine (OOPSE) project
3     *
4     * Contact: oopse@oopse.org
5     *
6     * This program is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU Lesser General Public License
8     * as published by the Free Software Foundation; either version 2.1
9     * of the License, or (at your option) any later version.
10     * All we ask is that proper credit is given for our work, which includes
11     * - but is not limited to - adding the above copyright notice to the beginning
12     * of your source code files, and to any copyright notice that you may distribute
13     * with programs based on this work.
14     *
15     * This program is distributed in the hope that it will be useful,
16     * but WITHOUT ANY WARRANTY; without even the implied warranty of
17     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18     * GNU Lesser General Public License for more details.
19     *
20     * You should have received a copy of the GNU Lesser General Public License
21     * along with this program; if not, write to the Free Software
22     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23     *
24     */
25    
26     /**
27     * @file Molecule.hpp
28     * @author tlin
29     * @date 10/25/2004
30     * @version 1.0
31     */
32    
33     #ifndef PRIMITIVES_MOLECULE_HPP
34     #define PRIMITIVES_MOLECULE_HPP
35     #include <vector>
36 tim 1690 #include <iostream>
37 tim 1686 #include "math/Vector3.hpp"
38    
39     namespace oopse{
40    
41     /**
42     * @class Molecule Molecule.hpp "primitives/Molecule.hpp"
43     * @brief
44     */
45     class Molecule {
46     public:
47    
48     Molecule();
49     virtual ~Molecule();
50    
51     /**
52     * Returns the global index of this molecule.
53     * @return the global index of this molecule
54     */
55     int getGlobalIndex() {
56     return globalIndex_;
57     }
58    
59     /**
60     * Sets the global index of this molecule.
61     * @param new global index to be set
62     */
63     void setGlobalIndex(int index) {
64     return globalIndex_;
65     }
66    
67     /**
68     * Returns the local index of this molecule
69     * @return the local index of this molecule
70     */
71     int getLocalIndex() {
72     return localIndex_;
73     }
74    
75 tim 1690 /** add an atom into this molecule */
76     void addAtom(Atom* atom);
77    
78     /** add a bond into this molecule */
79     void addBond(Bond* bond);
80    
81     /** add a bend into this molecule */
82     void addBend(Bend* bend);
83    
84     /** add a torsion into this molecule*/
85     void addTorsion(Torsion* torsion);
86    
87     /** add a rigidbody into this molecule */
88     void addRigidBody(RigidBody *rb);
89    
90     /** add a cutoff group into this molecule */
91     void addCutoffGroup(CutoffGroup* cp)
92    
93     /** */
94     void complete();
95    
96 tim 1686 /** Returns the total number of atoms in this molecule */
97     unsigned int getNAtoms() {
98     return atoms_.size();
99     }
100    
101     /** Returns the total number of bonds in this molecule */
102     unsigned int getNBonds(){
103     return bonds_.size();
104     }
105    
106     /** Returns the total number of bends in this molecule */
107     unsigned int getNBends() {
108     return bends_.size();
109     }
110    
111     /** Returns the total number of torsions in this molecule */
112     unsigned int getNTorsions() {
113     return torsions_.size();
114     }
115    
116     /** Returns the total number of rigid bodies in this molecule */
117     unsigned int getNRigidBodies() {
118     return rigidBodies_.size();
119     }
120    
121     /** Returns the total number of integrable objects in this molecule */
122     unsigned int getNIntegrableObjects() {
123     return integrableObjects_.size();
124     }
125    
126     /** Returns the total number of cutoff groups in this molecule */
127     unsigned int getNCutoffGroups() {
128     return cutoffGroups_.size();
129     }
130    
131     /**
132     * Returns the first atom in this molecule and initialize the iterator.
133     * @return the first atom, return NULL if there is not cut off group in this molecule
134     * @param i iteraotr
135     */
136     Atom* beginAtom(std::vector<Atom*>::iterator& i);
137    
138     Atom* nextAtom(std::vector<Atom*>::iterator& i);
139    
140     /**
141     * Returns the first bond in this molecule and initialize the iterator.
142     * @return the first bond, return NULL if there is not cut off group in this molecule
143     * @param i iteraotr
144     */
145     Bond* beginBond(std::vector<Bond*>::iterator& i);
146    
147     Bond* nextBond(std::vector<Bond*>::iterator& i);
148    
149     /**
150     * Returns the first bend in this molecule and initialize the iterator.
151     * @return the first bend, return NULL if there is not cut off group in this molecule
152     * @param i iteraotr
153     */
154     Bend* beginBend(std::vector<Bend*>::iterator& i);
155    
156     Bend* nextBend(std::vector<Bend*>::iterator& i);
157    
158     /**
159     * Returns the first torsion in this molecule and initialize the iterator.
160     * @return the first torsion, return NULL if there is not cut off group in this molecule
161     * @param i iteraotr
162     */
163     Torsion* beginTorsion(std::vector<Torsion*>::iterator& i);
164     Torsion* nextTorsion(std::vector<Torsion*>::iterator& i);
165    
166     /**
167     * Returns the first rigid body in this molecule and initialize the iterator.
168     * @return the first rigid body, return NULL if there is not cut off group in this molecule
169     * @param i iteraotr
170     */
171     RigidBody* beginRigidBody(std::vector<RigidBody*>::iterator& i);
172    
173     RigidBody* nextRigidBody(std::vector<RigidBody*>::iterator& i);
174    
175     /**
176     * Returns the first integrable object in this molecule and initialize the iterator.
177     * @return the first integrable object, return NULL if there is not cut off group in this molecule
178     * @param i iteraotr
179     */
180     StuntDouble* beginIntegrableObject(std::vector<StuntDouble*>::iterator& i);
181    
182     StuntDouble* nextIntegrableObject(std::vector<StuntDouble*>::iterator& i);
183    
184     /**
185     * Returns the first cutoff group in this molecule and initialize the iterator.
186     * @return the first cutoff group, return NULL if there is not cut off group in this molecule
187     * @param i iteraotr
188     */
189     CutoffGroup* beginCutoffGroup(std::vector<CutoffGroup*>::iterator& i);
190    
191     /**
192     * Returns next cutoff group based on the iterator
193     * @return next cutoff group
194     * @param i
195     */
196     CutoffGroup* nextCutoffGroup(std::vector<CutoffGroup*>::iterator& i);
197    
198     //void setStampID( int info ) {stampID = info;}
199    
200     void calcForces( void );
201    
202     void atoms2rigidBodies( void );
203    
204     /** return the total potential energy of short range interaction of this molecule */
205     double getPotential();
206    
207    
208     /** return the center of mass of this molecule */
209     Vector3d getCom();
210    
211     /** Moves the center of this molecule */
212     void moveCom(const Vetor3d& delta);
213    
214     /** Returns the velocity of center of mass of this molecule */
215     Vector3d getComVel();
216    
217     /** Returns the total mass of this molecule */
218     double getTotalMass();
219    
220 tim 1690 friend std::ostream& operator <<(std::ostream& o, const Molecule& mol);
221 tim 1686
222     private:
223     int localIndex_;
224     int globalIndex_;
225    
226     std::vector<Atom*> atoms_;
227     std::vector<Bond*> bonds_;
228     std::vector<Bend*> bends_;
229     std::vector<Torsion*> torsions_;
230     std::vector<RigidBody*> rigidBodies_;
231     std::vector<StuntDouble*> integrableObjects_;
232     std::vector<CutoffGroup*> cutoffGroups_;
233     };
234    
235     } //namespace oopse
236     #endif //

Properties

Name Value
svn:executable *