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

Comparing branches/new_design/OOPSE-2.0/src/brains/SimInfo.hpp (file contents):
Revision 1709 by tim, Wed Nov 3 16:08:43 2004 UTC vs.
Revision 1710 by tim, Thu Nov 4 19:48:22 2004 UTC

# Line 1 | Line 1
1 < #ifndef __SIMINFO_H__
2 < #define __SIMINFO_H__
1 > /*
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 < #include <map>
27 < #include <string>
26 > /**
27 > * @file SimInfo.hpp
28 > * @author    tlin
29 > * @date  11/02/2004
30 > * @version 1.0
31 > */
32 >
33 > #ifndef BRAINS_SIMMODEL_HPP
34 > #define BRAINS_SIMMODEL_HPP
35   #include <vector>
36 + #include <iostream>
37  
38 < #include "primitives/Atom.hpp"
9 < #include "primitives/RigidBody.hpp"
38 > #include "brains/fSimulation.h"
39   #include "primitives/Molecule.hpp"
40 < #include "brains/Exclude.hpp"
12 < #include "brains/SkipList.hpp"
13 < #include "primitives/AbstractClasses.hpp"
14 < #include "types/MakeStamps.hpp"
15 < #include "brains/SimState.hpp"
16 < #include "restraints/Restraints.hpp"
40 > #include "utils/PropertyMap.hpp"
41  
42 < #define __C
19 < #include "brains/fSimulation.h"
20 < #include "utils/GenericData.hpp"
42 > namespace oopse{
43  
44 + /**
45 + * @class SimInfo SimInfo.hpp "brains/SimInfo.hpp"
46 + * @brief
47 + */
48 + class SimInfo {
49 +    public:
50 +        SimInfo();
51 +        virtual ~SimInfo();
52  
53 < //#include "Minimizer.hpp"
54 < //#include "minimizers/OOPSEMinimizer.hpp"
53 >        /**
54 >         * Adds a molecule
55 >         * @return return true if adding successfully, return false if the molecule is already in SimInfo
56 >         * @param mol molecule to be added
57 >         */
58 >        bool addMolecule(Molecule* mol);
59  
60 +        /**
61 +         * Removes a molecule from SimInfo
62 +         * @return true if removing successfully, return false if molecule is not in this SimInfo
63 +         */
64 +        bool removeMolecule(Molecule* mol);
65  
66 < double roundMe( double x );
67 < class OOPSEMinimizer;
68 < class SimInfo{
66 >        /**
67 >         * Returns the number of molecules.
68 >         * @return the number of molecules in this SimInfo
69 >         */
70 >        int getNMolecules() {
71 >            return molecules_.size();
72 >        }
73  
74 < public:
74 >        /** Returns the total number of atoms in this SimInfo */
75 >        unsigned int getNAtoms() {
76 >            return nAtoms_;
77 >        }
78  
79 <  SimInfo();
80 <  ~SimInfo();
79 >        /** Returns the total number of bonds in this SimInfo */        
80 >        unsigned int getNBonds(){
81 >            return nBonds_;
82 >        }
83  
84 <  int n_atoms; // the number of atoms
85 <  Atom **atoms; // the array of atom objects
84 >        /** Returns the total number of bends in this SimInfo */        
85 >        unsigned int getNBends() {
86 >            return nBends_;
87 >        }
88  
89 <  vector<RigidBody*> rigidBodies;  // A vector of rigid bodies
90 <  vector<StuntDouble*> integrableObjects;
91 <  
92 <  double tau[9]; // the stress tensor
89 >        /** Returns the total number of torsions in this SimInfo */        
90 >        unsigned int getNTorsions() {
91 >            return nTorsions_;
92 >        }
93  
94 <  int n_bonds;    // number of bends
95 <  int n_bends;    // number of bends
96 <  int n_torsions; // number of torsions
97 <  int n_oriented; // number of of atoms with orientation
48 <  int ndf;        // number of actual degrees of freedom
49 <  int ndfRaw;     // number of settable degrees of freedom
50 <  int ndfTrans;   // number of translational degrees of freedom
51 <  int nZconstraints; // the number of zConstraints
94 >        /** Returns the total number of rigid bodies in this SimInfo */        
95 >        unsigned int getNRigidBodies() {
96 >            return nRigidBodies_;
97 >        }
98  
99 <  int setTemp;   // boolean to set the temperature at each sampleTime
100 <  int resetIntegrator; // boolean to reset the integrator
99 >        /** Returns the total number of integrable objects in this SimInfo */
100 >        unsigned int getNIntegrableObjects() {
101 >            return nIntegrableObjects_;
102 >        }
103  
104 <  int n_dipoles; // number of dipoles
104 >        /** Returns the total number of cutoff groups in this SimInfo */
105 >        unsigned int getNCutoffGroups() {
106 >            return nCutoffGroups_;
107 >        }
108  
109 <  int n_exclude;
110 <  Exclude* excludes;  // the exclude list for ignoring pairs in fortran
111 <  int nGlobalExcludes;
112 <  int* globalExcludes; // same as above, but these guys participate in
113 <                       // no long range forces.
109 >        /** Returns the total number of constraints in this SimInfo */
110 >        unsigned int getNConstraints() {
111 >            return nConstraints_;
112 >        }
113 >        
114 >        /**
115 >         * Returns the first molecule in this SimInfo and intialize the iterator.
116 >         * @return the first molecule, return NULL if there is not molecule in this SimInfo
117 >         * @param i the iterator of molecule array (user shouldn't change it)
118 >         */
119 >        Molecule* beginMolecule(std::vector<Molecule*>::iterator& i);
120  
121 <  int* identArray;     // array of unique identifiers for the atoms
122 <  int* molMembershipArray;  // map of atom numbers onto molecule numbers
121 >        /**
122 >          * Returns the next avaliable Molecule based on the iterator.
123 >          * @return the next avaliable molecule, return NULL if reaching the end of the array
124 >          * @param i the iterator of molecule array
125 >          */
126 >        Molecule* nextMolecule(std::vector<Molecule*>::iterator& i);
127  
128 <  int n_constraints; // the number of constraints on the system
128 >        /** Returns the number of degrees of freedom */
129 >        int getNDF() {
130 >            return ndf_;
131 >        }
132  
133 <  int n_SRI;   // the number of short range interactions
133 >        /** Returns the number of raw degrees of freedom */
134 >        int getNDFRaw() {
135 >            return ndfRaw_;
136 >        }
137  
138 <  double lrPot; // the potential energy from the long range calculations.
138 >        /** Returns the number of translational degrees of freedom */
139 >        int getNDFTrans() {
140 >            return ndfTrans_;
141 >        }
142  
143 <  double Hmat[3][3];  // the periodic boundry conditions. The Hmat is the
144 <                      // column vectors of the x, y, and z box vectors.
145 <                      //   h1  h2  h3
146 <                      // [ Xx  Yx  Zx ]
77 <                      // [ Xy  Yy  Zy ]
78 <                      // [ Xz  Yz  Zz ]
79 <                      //  
80 <  double HmatInv[3][3];
143 >        /** Returns the snapshot manager. */
144 >        SnapshotManager* getSnapshotManager() {
145 >            return sman_;
146 >        }
147  
148 <  double boxL[3]; // The Lengths of the 3 column vectors of Hmat
149 <  double boxVol;
150 <  int orthoRhombic;
151 <  
148 >        /** Sets the snapshot manager. */
149 >        void setSnapshotManager(SnapshotManager* sman) {
150 >            sman_ = sman;
151 >        }
152 >        
153 >    private:
154  
155 <  double dielectric;      // the dielectric of the medium for reaction field
155 >        void calcNDF();
156 >        void calcNDFRaw();
157 >        void calcNDFTrans();
158  
159 <  
160 <  int usePBC; // whether we use periodic boundry conditions.
161 <  int useDirectionalAtoms;
162 <  int useLennardJones;
163 <  int useElectrostatics;
164 <  int useCharges;
165 <  int useDipoles;
166 <  int useSticky;
167 <  int useGayBerne;
168 <  int useEAM;
169 <  int useShapes;
170 <  int useFLARB;
101 <  int useReactionField;
102 <  bool haveCutoffGroups;
103 <  bool useInitXSstate;
104 <  double orthoTolerance;
159 >        int ndf_;
160 >        int ndfRaw_;
161 >        int ndfTrans_;
162 >        
163 >        int nAtoms_;
164 >        int nBonds_;
165 >        int nBends_;
166 >        int nTorsions_;
167 >        int nRigidBodies_;
168 >        int nIntegrableObjects_;
169 >        int nCutoffGroups_;
170 >        int nConstraints_;
171  
172 <  double dt, run_time;           // the time step and total time
173 <  double sampleTime, statusTime; // the position and energy dump frequencies
174 <  double target_temp;            // the target temperature of the system
175 <  double thermalTime;            // the temp kick interval
176 <  double currentTime;            // Used primarily for correlation Functions
177 <  double resetTime;              // Use to reset the integrator periodically
178 <  short int have_target_temp;
172 >        simtype fInfo;
173 >        Exclude excludeList;
174 >        
175 >        
176 >        std::vector<Molecule*> molecules_; /**< Molecule array */
177 >        PropertyMap properties_;                  /** Generic Property */
178 >        SnapshotManager* sman_;               /** SnapshotManager */
179  
114  int n_mol;           // n_molecules;
115  Molecule* molecules; // the array of molecules
116  
117  int nComponents;           // the number of components in the system
118  int* componentsNmol;       // the number of molecules of each component
119  MoleculeStamp** compStamps;// the stamps matching the components
120  LinkedMolStamp* headStamp; // list of stamps used in the simulation
121  
122  
123  char ensemble[100]; // the enesemble of the simulation (NVT, NVE, etc. )
124  char mixingRule[100]; // the mixing rules for Lennard jones/van der walls
125  BaseIntegrator *the_integrator; // the integrator of the simulation
126
127  OOPSEMinimizer* the_minimizer; // the energy minimizer
128  Restraints* restraint;
129  bool has_minimizer;
130
131  string finalName;  // the name of the eor file to be written
132  string sampleName; // the name of the dump file to be written
133  string statusName; // the name of the stat file to be written
134
135  int seed;                    //seed for random number generator
136
137  int useSolidThermInt;  // is solid-state thermodynamic integration being used
138  int useLiquidThermInt; // is liquid thermodynamic integration being used
139  double thermIntLambda; // lambda for TI
140  double thermIntK;      // power of lambda for TI
141  double vRaw;           // unperturbed potential for TI
142  double vHarm;          // harmonic potential for TI
143  int i;                 // just an int
144
145  vector<double> mfact;
146  vector<int> FglobalGroupMembership;
147  int ngroup;
148  int* globalGroupMembership;
149
150  // refreshes the sim if things get changed (load balanceing, volume
151  // adjustment, etc.)
152
153  void refreshSim( void );
154  
155
156  // sets the internal function pointer to fortran.
157
158
159  int getNDF();
160  int getNDFraw();
161  int getNDFtranslational();
162  int getTotIntegrableObjects();
163  void setBox( double newBox[3] );
164  void setBoxM( double newBox[3][3] );
165  void getBoxM( double theBox[3][3] );
166  void scaleBox( double scale );
167  
168  void setDefaultRcut( double theRcut );
169  void setDefaultRcut( double theRcut, double theRsw );
170  void checkCutOffs( void );
171
172  double getRcut( void )  { return rCut; }
173  double getRlist( void ) { return rList; }
174  double getRsw( void )   { return rSw; }
175  double getMaxCutoff( void ) { return maxCutoff; }
176  
177  void setTime( double theTime ) { currentTime = theTime; }
178  void incrTime( double the_dt ) { currentTime += the_dt; }
179  void decrTime( double the_dt ) { currentTime -= the_dt; }
180  double getTime( void ) { return currentTime; }
181
182  void wrapVector( double thePos[3] );
183
184  SimState* getConfiguration( void ) { return myConfiguration; }
185  
186  void addProperty(GenericData* prop);
187  GenericData* getPropertyByName(const string& propName);
188  //vector<GenericData*>& getProperties()  {return properties;}    
189
190  int getSeed(void) {  return seed; }
191  void setSeed(int theSeed) {  seed = theSeed;}
192
193 private:
194
195  SimState* myConfiguration;
196
197  int boxIsInit, haveRcut, haveRsw;
198
199  double rList, rCut; // variables for the neighborlist
200  double rSw;         // the switching radius
201
202  double maxCutoff;
203
204  double distXY;
205  double distYZ;
206  double distZX;
207  
208  void calcHmatInv( void );
209  void calcBoxL();
210  double calcMaxCutOff();
211
212  
213  //Addtional Properties of SimInfo
214  map<string, GenericData*> properties;
215  void getFortranGroupArrays(SimInfo* info,
216                             vector<int>& FglobalGroupMembership,
217                             vector<double>& mfact);
218
219
180   };
181  
182 <
183 < #endif
182 > } //namespace oopse
183 > #endif //BRAINS_SIMMODEL_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines