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

Comparing branches/new_design/OOPSE-3.0/src/brains/SimInfo.hpp (file contents):
Revision 1712 by tim, Thu Nov 4 20:55:01 2004 UTC vs.
Revision 1725 by tim, Wed Nov 10 22:01:06 2004 UTC

# Line 32 | Line 32
32  
33   #ifndef BRAINS_SIMMODEL_HPP
34   #define BRAINS_SIMMODEL_HPP
35 < #include <vector>
35 >
36   #include <iostream>
37 + #include <vector>
38 + #include <utility>
39  
40   #include "brains/fSimulation.h"
41   #include "primitives/Molecule.hpp"
42 + #include "types/MoleculeStamp.hpp"
43   #include "utils/PropertyMap.hpp"
44 + #include "io/Globals.hpp"
45  
46   namespace oopse{
47  
# Line 47 | Line 51 | class SimInfo {
51   */
52   class SimInfo {
53      public:
54 +        typedef std::vector<Molecule*>::iterator MoleculeIterator;
55          SimInfo();
56          virtual ~SimInfo();
57  
# Line 63 | Line 68 | class SimInfo {
68           */
69          bool removeMolecule(Molecule* mol);
70  
71 +        /** Returns the total number of molecules in the system. */
72 +        int getNGlobalMolecules() {
73 +
74 + #ifdef IS_MPI
75 +        int nmols;
76 +        int totNMols;
77 +
78 +        nmols = getNMolecules();
79 +        MPI_Allreduce(&nmols, &totNMols, 1, MPI_INT,MPI_SUM, MPI_COMM_WORLD);
80 +
81 +        return totNMols;
82 + #else
83 +            return getNMolecules();
84 + #endif
85 +        }
86 +
87 +        /** Returns the total number of atoms in the system. */
88 +        int getNGlobalAtoms() {
89 +
90 + #ifdef IS_MPI
91 +        int totNAtoms;
92 +        MPI_Allreduce(&nAtoms_, &totNAtoms, 1, MPI_INT,MPI_SUM, MPI_COMM_WORLD);
93 +        return totNAtoms;
94 + #else
95 +            return nAtoms_;
96 + #endif
97 +        }
98 +
99 +        /** Returns the total number of cutoff groups in the system. */
100 +        int getNGlobalCutoffGroups() {
101 + #ifdef IS_MPI
102 +        int totNGroups;
103 +        MPI_Allreduce(&nCutoffGroups_, &totNGroups, 1, MPI_INT,MPI_SUM, MPI_COMM_WORLD);
104 +        return totNGroups;
105 + #else
106 +            return nCutoffGroups_;
107 + #endif
108 +        }
109 +        
110          /**
111 <         * Returns the number of molecules.
112 <         * @return the number of molecules in this SimInfo
111 >         * Returns the number of local molecules.
112 >         * @return the number of local molecules
113           */
114          int getNMolecules() {
115              return molecules_.size();
116          }
117  
118 <        /** Returns the total number of atoms in this SimInfo */
118 >        /** Returns the number of local atoms */
119          unsigned int getNAtoms() {
120              return nAtoms_;
121          }
122  
123 <        /** Returns the total number of bonds in this SimInfo */        
123 >        /** Returns the number of local bonds */        
124          unsigned int getNBonds(){
125              return nBonds_;
126          }
127  
128 <        /** Returns the total number of bends in this SimInfo */        
128 >        /** Returns the number of local bends */        
129          unsigned int getNBends() {
130              return nBends_;
131          }
132  
133 <        /** Returns the total number of torsions in this SimInfo */        
133 >        /** Returns the number of local torsions */        
134          unsigned int getNTorsions() {
135              return nTorsions_;
136          }
137  
138 <        /** Returns the total number of rigid bodies in this SimInfo */        
138 >        /** Returns the number of local rigid bodies */        
139          unsigned int getNRigidBodies() {
140              return nRigidBodies_;
141          }
142  
143 <        /** Returns the total number of integrable objects in this SimInfo */
143 >        /** Returns the number of local integrable objects */
144          unsigned int getNIntegrableObjects() {
145              return nIntegrableObjects_;
146          }
147  
148 <        /** Returns the total number of cutoff groups in this SimInfo */
148 >        /** Returns the number of local cutoff groups */
149          unsigned int getNCutoffGroups() {
150              return nCutoffGroups_;
151          }
# Line 126 | Line 170 | class SimInfo {
170          Molecule* nextMolecule(std::vector<Molecule*>::iterator& i);
171  
172          /** Returns the number of degrees of freedom */
173 <        int getNDF() {
173 >        int getNdf() {
174              return ndf_;
175          }
176  
177          /** Returns the number of raw degrees of freedom */
178 <        int getNDFRaw() {
178 >        int getNdfRaw() {
179              return ndfRaw_;
180          }
181  
182          /** Returns the number of translational degrees of freedom */
183 <        int getNDFTrans() {
183 >        int getNdfTrans() {
184              return ndfTrans_;
185          }
186  
# Line 150 | Line 194 | class SimInfo {
194              sman_ = sman;
195          }
196  
197 +        /** Returns the force field */
198          ForceField* getForceField() {
199              return forceField_;
200          }
201 <        
201 >
202 >        /** Sets the force field */
203          void setForceField(ForceField* ff) {
204              forceField_ = ff;
205          }
160    private:
206  
207 <        void calcNDF();
208 <        void calcNDFRaw();
209 <        void calcNDFTrans();
207 >        Globals* getGlobals() {
208 >            return globals_;
209 >        }
210 >        
211 >        void setGlobals(Globals* globals) {
212 >            globals_ = globals;
213 >        }
214  
215 <        int ndf_;
216 <        int ndfRaw_;
217 <        int ndfTrans_;
215 >        /** Returns the velocity of center of mass of the whole system.*/
216 >        Vector3d getComVel();
217 >
218 >        /** Returns the center of the mass of the whole system.*/
219 >        Vector3d getCom();
220 >
221 >        /** Returns the seed (used for random number generator) */
222 >        int getSeed() {
223 >            return seed_;
224 >        }
225 >
226 >        /** Sets the seed*/
227 >        void setSeed(int seed) {
228 >            seed_ = seed;
229 >        }
230 >
231          
232 +        void update();
233 +
234 +
235 +        /** Returns the local index manager */
236 +        LocalIndexManager* getLocalIndexManager() {
237 +            return localIndexMan_;
238 +        }
239 +
240 +
241 +        /**
242 +         *
243 +         */
244 +        void addMoleculeStamp(MoleculeStamp* molStamp, int nmol);
245 +
246 +        int getMoleculeStampId(int globalIndex) {
247 +            //assert(globalIndex < molStampIds_.size())
248 +            return molStampIds_[globalIndex];
249 +        }
250 +
251 +        /** Returns the molecule stamp */
252 +        MoleculeStamp* getMoleculeStamp(int id) {
253 +            return moleculeStamps_[id];
254 +        }
255 +        
256 +        /**
257 +         * Finds the processor where a molecule resides
258 +         * @return the id of the processor which contains the molecule
259 +         * @param globalIndex global Index of the molecule
260 +         */
261 +        int getMolToProc(int globalIndex) {
262 +            //assert(globalIndex < molToProcMap_.size());
263 +            return molToProcMap_[globalIndex];
264 +        }
265 +
266 +        /**
267 +         * Finds a molecule with a specified global index
268 +         * @return a pointer point to found molecule
269 +         * @param index
270 +         */
271 +        Molecule* getMoleculeByGlobalIndex(int index) {
272 +            std::map<int, Molecule*> i;
273 +            i = globalIndexToMol_.find(index);
274 +
275 +            return i != globalIndexToMol_.end() ? i->second : NULL;
276 +        }
277 +
278 +
279 +        friend std::ostream& operator <<(ostream& o, SimInfo& info);
280 +        
281 +    private:
282 +
283 +        void calcNdf();
284 +        void calcNdfRaw();
285 +        void calcNdfTrans();
286 +
287 +        int* getExcludeList() {
288 +            return exclude_.getExcludeList();
289 +        }
290 +
291 +        void addExcludePairs(Molecule* mol);
292 +        void removeExcludePairs(Molecule* mol);
293 +
294 +        //degress of freedom
295 +        int ndf_;           /** number of degress of freedom */
296 +        int ndfRaw_;
297 +        int ndfTrans_; /**< number of translation degress of freedom */
298 +
299 +        //number of local objects
300          int nAtoms_;
301          int nBonds_;
302          int nBends_;
# Line 176 | Line 306 | class SimInfo {
306          int nCutoffGroups_;
307          int nConstraints_;
308  
309 <        simtype fInfo;
310 <        Exclude excludeList;
309 >        simtype fInfo_;
310 >        Exclude exclude_;
311          ForceField* forceField_;
312          
313          std::vector<Molecule*> molecules_; /**< Molecule array */
314 <        PropertyMap properties_;                  /** Generic Property */
315 <        SnapshotManager* sman_;               /** SnapshotManager */
314 >        PropertyMap properties_;                  /**< Generic Property */
315 >        SnapshotManager* sman_;               /**< SnapshotManager */
316  
317 +        Globals* globals_;
318 +
319 +        int seed_; /**< seed for random number generator */
320 +
321 +        LocalIndexManager localIndexMan_;
322 +
323 +        //
324 +        std::vector<int> molToProcMap_;
325 +        std::map<int, Molecule*> globalIndexToMol_;
326 +        std::vector<int> molStampIds_;                                /**< stamp id array of all molecules in the system */
327 +        std::vector<MoleculeStamp*> moleculeStamps_; /**< molecule stamps array */      
328 +
329   };
330  
331   } //namespace oopse

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines