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:
trunk/OOPSE-3.0/src/brains/SimInfo.hpp (file contents), Revision 1490 by gezelter, Fri Sep 24 04:16:43 2004 UTC vs.
branches/new_design/OOPSE-3.0/src/brains/SimInfo.hpp (file contents), 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 "Atom.hpp"
39 < #include "RigidBody.hpp"
40 < #include "Molecule.hpp"
11 < #include "Exclude.hpp"
12 < #include "SkipList.hpp"
13 < #include "AbstractClasses.hpp"
14 < #include "MakeStamps.hpp"
15 < #include "SimState.hpp"
16 < #include "Restraints.hpp"
38 > #include "brains/fSimulation.h"
39 > #include "primitives/Molecule.hpp"
40 > #include "utils/PropertyMap.hpp"
41  
42 < #define __C
19 < #include "fSimulation.h"
20 < #include "fortranWrapDefines.hpp"
21 < #include "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 "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
49 <  int ndf;        // number of actual degrees of freedom
50 <  int ndfRaw;     // number of settable degrees of freedom
51 <  int ndfTrans;   // number of translational degrees of freedom
52 <  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 ]
78 <                      // [ Xy  Yy  Zy ]
79 <                      // [ Xz  Yz  Zz ]
80 <                      //  
81 <  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 useLJ;
162 <  int useSticky;
163 <  int useCharges;
164 <  int useDipoles;
165 <  int useReactionField;
166 <  int useGB;
167 <  int useEAM;
168 <  bool haveCutoffGroups;
169 <  bool useInitXSstate;
170 <  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  
111  int n_mol;           // n_molecules;
112  Molecule* molecules; // the array of molecules
113  
114  int nComponents;           // the number of components in the system
115  int* componentsNmol;       // the number of molecules of each component
116  MoleculeStamp** compStamps;// the stamps matching the components
117  LinkedMolStamp* headStamp; // list of stamps used in the simulation
118  
119  
120  char ensemble[100]; // the enesemble of the simulation (NVT, NVE, etc. )
121  char mixingRule[100]; // the mixing rules for Lennard jones/van der walls
122  BaseIntegrator *the_integrator; // the integrator of the simulation
123
124  OOPSEMinimizer* the_minimizer; // the energy minimizer
125  Restraints* restraint;
126  bool has_minimizer;
127
128  string finalName;  // the name of the eor file to be written
129  string sampleName; // the name of the dump file to be written
130  string statusName; // the name of the stat file to be written
131
132  int seed;                    //seed for random number generator
133
134  int useSolidThermInt;  // is solid-state thermodynamic integration being used
135  int useLiquidThermInt; // is liquid thermodynamic integration being used
136  double thermIntLambda; // lambda for TI
137  double thermIntK;      // power of lambda for TI
138  double vRaw;           // unperturbed potential for TI
139  double vHarm;          // harmonic potential for TI
140  int i;                 // just an int
141
142  vector<double> mfact;
143  vector<int> FglobalGroupMembership;
144  int ngroup;
145  int* globalGroupMembership;
146
147  // refreshes the sim if things get changed (load balanceing, volume
148  // adjustment, etc.)
149
150  void refreshSim( void );
151  
152
153  // sets the internal function pointer to fortran.
154
155  void setInternal( setFortranSim_TD fSetup,
156                    setFortranBox_TD fBox,
157                    notifyFortranCutOff_TD fCut){
158    setFsimulation = fSetup;
159    setFortranBoxSize = fBox;
160    notifyFortranCutOffs = fCut;
161  }
162
163  int getNDF();
164  int getNDFraw();
165  int getNDFtranslational();
166  int getTotIntegrableObjects();
167  void setBox( double newBox[3] );
168  void setBoxM( double newBox[3][3] );
169  void getBoxM( double theBox[3][3] );
170  void scaleBox( double scale );
171  
172  void setDefaultRcut( double theRcut );
173  void setDefaultRcut( double theRcut, double theRsw );
174  void checkCutOffs( void );
175
176  double getRcut( void )  { return rCut; }
177  double getRlist( void ) { return rList; }
178  double getRsw( void )   { return rSw; }
179  double getMaxCutoff( void ) { return maxCutoff; }
180  
181  void setTime( double theTime ) { currentTime = theTime; }
182  void incrTime( double the_dt ) { currentTime += the_dt; }
183  void decrTime( double the_dt ) { currentTime -= the_dt; }
184  double getTime( void ) { return currentTime; }
185
186  void wrapVector( double thePos[3] );
187
188  SimState* getConfiguration( void ) { return myConfiguration; }
189  
190  void addProperty(GenericData* prop);
191  GenericData* getProperty(const string& propName);
192  //vector<GenericData*>& getProperties()  {return properties;}    
193
194  int getSeed(void) {  return seed; }
195  void setSeed(int theSeed) {  seed = theSeed;}
196
197 private:
198
199  SimState* myConfiguration;
200
201  int boxIsInit, haveRcut, haveRsw;
202
203  double rList, rCut; // variables for the neighborlist
204  double rSw;         // the switching radius
205
206  double maxCutoff;
207
208  double distXY;
209  double distYZ;
210  double distZX;
211  
212  void calcHmatInv( void );
213  void calcBoxL();
214  double calcMaxCutOff();
215
216  // private function to initialize the fortran side of the simulation
217  setFortranSim_TD setFsimulation;
218
219  setFortranBox_TD setFortranBoxSize;
220  
221  notifyFortranCutOff_TD notifyFortranCutOffs;
222  
223  //Addtional Properties of SimInfo
224  map<string, GenericData*> properties;
225  void getFortranGroupArrays(SimInfo* info,
226                             vector<int>& FglobalGroupMembership,
227                             vector<double>& mfact);
228
229
180   };
181  
182 <
183 < #endif
182 > } //namespace oopse
183 > #endif //BRAINS_SIMMODEL_HPP

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines