ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/SimInfo.hpp
Revision: 708
Committed: Wed Aug 20 22:23:34 2003 UTC (20 years, 10 months ago) by tim
File size: 6085 byte(s)
Log Message:
user can setup seed in bass file now, if he does not specify any value for
seed, oopse will take the value of seconds of system time as seed

File Contents

# User Rev Content
1 mmeineke 377 #ifndef __SIMINFO_H__
2     #define __SIMINFO_H__
3    
4 tim 658 #include <map>
5     #include <string>
6     #include <vector>
7 mmeineke 377
8     #include "Atom.hpp"
9     #include "Molecule.hpp"
10     #include "AbstractClasses.hpp"
11     #include "MakeStamps.hpp"
12 mmeineke 670 #include "SimState.hpp"
13 mmeineke 377
14     #define __C
15     #include "fSimulation.h"
16     #include "fortranWrapDefines.hpp"
17 tim 658 #include "GenericData.hpp"
18 mmeineke 377
19    
20    
21     class SimInfo{
22    
23     public:
24    
25     SimInfo();
26 tim 660 ~SimInfo();
27 mmeineke 377
28     int n_atoms; // the number of atoms
29     Atom **atoms; // the array of atom objects
30    
31     double tau[9]; // the stress tensor
32    
33     unsigned int n_bonds; // number of bends
34     unsigned int n_bends; // number of bends
35     unsigned int n_torsions; // number of torsions
36     unsigned int n_oriented; // number of of atoms with orientation
37 gezelter 458 unsigned int ndf; // number of actual degrees of freedom
38     unsigned int ndfRaw; // number of settable degrees of freedom
39 mmeineke 675 unsigned int nZconstraints; // the number of zConstraints
40 mmeineke 377
41     unsigned int setTemp; // boolean to set the temperature at each sampleTime
42    
43     unsigned int n_dipoles; // number of dipoles
44    
45 mmeineke 626
46 mmeineke 377 int n_exclude; // the # of pairs excluded from long range forces
47 mmeineke 427 Exclude** excludes; // the pairs themselves
48 mmeineke 377
49     int nGlobalExcludes;
50     int* globalExcludes; // same as above, but these guys participate in
51     // no long range forces.
52    
53     int* identArray; // array of unique identifiers for the atoms
54 gezelter 483 int* molMembershipArray; // map of atom numbers onto molecule numbers
55 mmeineke 377
56     int n_constraints; // the number of constraints on the system
57    
58     unsigned int n_SRI; // the number of short range interactions
59    
60     double lrPot; // the potential energy from the long range calculations.
61    
62 gezelter 588 double Hmat[3][3]; // the periodic boundry conditions. The Hmat is the
63     // column vectors of the x, y, and z box vectors.
64     // h1 h2 h3
65     // [ Xx Yx Zx ]
66     // [ Xy Yy Zy ]
67     // [ Xz Yz Zz ]
68     //
69     double HmatInv[3][3];
70 mmeineke 568
71 gezelter 621 double boxL[3]; // The Lengths of the 3 column vectors of Hmat
72 mmeineke 572 double boxVol;
73     int orthoRhombic;
74 mmeineke 568
75    
76 mmeineke 626 double dielectric; // the dielectric of the medium for reaction field
77 mmeineke 568
78 mmeineke 377
79     int usePBC; // whether we use periodic boundry conditions.
80     int useLJ;
81     int useSticky;
82     int useDipole;
83     int useReactionField;
84     int useGB;
85     int useEAM;
86    
87    
88     double dt, run_time; // the time step and total time
89     double sampleTime, statusTime; // the position and energy dump frequencies
90     double target_temp; // the target temperature of the system
91     double thermalTime; // the temp kick interval
92 gezelter 637 double currentTime; // Used primarily for correlation Functions
93 mmeineke 377
94     int n_mol; // n_molecules;
95     Molecule* molecules; // the array of molecules
96    
97     int nComponents; // the number of componentsin the system
98     int* componentsNmol; // the number of molecules of each component
99     MoleculeStamp** compStamps;// the stamps matching the components
100     LinkedMolStamp* headStamp; // list of stamps used in the simulation
101    
102    
103     char ensemble[100]; // the enesemble of the simulation (NVT, NVE, etc. )
104     char mixingRule[100]; // the mixing rules for Lennard jones/van der walls
105 mmeineke 542 BaseIntegrator *the_integrator; // the integrator of the simulation
106 mmeineke 377
107     char finalName[300]; // the name of the eor file to be written
108     char sampleName[300]; // the name of the dump file to be written
109     char statusName[300]; // the name of the stat file to be written
110    
111 tim 708 int seed; //seed for random number generator
112 mmeineke 377 // refreshes the sim if things get changed (load balanceing, volume
113     // adjustment, etc.)
114    
115     void refreshSim( void );
116    
117    
118     // sets the internal function pointer to fortran.
119    
120     void setInternal( void (*fSetup) setFortranSimList,
121 mmeineke 626 void (*fBox) setFortranBoxList,
122     void (*fCut) notifyFortranCutOffList ){
123 mmeineke 377 setFsimulation = fSetup;
124     setFortranBoxSize = fBox;
125 mmeineke 626 notifyFortranCutOffs = fCut;
126 mmeineke 377 }
127    
128 gezelter 458 int getNDF();
129     int getNDFraw();
130    
131 gezelter 457 void setBox( double newBox[3] );
132 gezelter 588 void setBoxM( double newBox[3][3] );
133     void getBoxM( double theBox[3][3] );
134 gezelter 574 void scaleBox( double scale );
135 mmeineke 626
136     void setRcut( double theRcut );
137     void setEcr( double theEcr );
138     void setEcr( double theEcr, double theEst );
139 gezelter 457
140 mmeineke 626 double getRcut( void ) { return rCut; }
141     double getRlist( void ) { return rList; }
142     double getEcr( void ) { return ecr; }
143     double getEst( void ) { return est; }
144    
145 mmeineke 644 void setTime( double theTime ) { currentTime = theTime; }
146 mmeineke 643 void incrTime( double dt ) { currentTime += dt; }
147     void decrTime( double dt ) { currentTime -= dt; }
148 mmeineke 644 double getTime( void ) { return currentTime; }
149 mmeineke 626
150 mmeineke 568 void wrapVector( double thePos[3] );
151    
152 gezelter 588 void matMul3(double a[3][3], double b[3][3], double out[3][3]);
153     void matVecMul3(double m[3][3], double inVec[3], double outVec[3]);
154     void invertMat3(double in[3][3], double out[3][3]);
155 mmeineke 597 void transposeMat3(double in[3][3], double out[3][3]);
156     void printMat3(double A[3][3]);
157     void printMat9(double A[9]);
158 gezelter 588 double matDet3(double m[3][3]);
159 mmeineke 670
160     SimState* getConfiguration( void ) { return myConfiguration; }
161 gezelter 588
162 tim 658 void addProperty(GenericData* prop);
163     GenericData* getProperty(const string& propName);
164     vector<GenericData*> getProperties();
165 mmeineke 670
166 tim 708 int getSeed(void) { return seed; }
167     void setSeed(int theSeed) { seed = theSeed;}
168    
169 mmeineke 377 private:
170 mmeineke 626
171 mmeineke 670 SimState* myConfiguration;
172    
173 mmeineke 626 double origRcut, origEcr;
174     int boxIsInit, haveOrigRcut, haveOrigEcr;
175    
176     double oldEcr;
177     double oldRcut;
178    
179     double rList, rCut; // variables for the neighborlist
180     double ecr; // the electrostatic cutoff radius
181     double est; // the electrostatic skin thickness
182     double maxCutoff;
183 mmeineke 377
184 gezelter 588 void calcHmatInv( void );
185 mmeineke 568 void calcBoxL();
186 mmeineke 626 void checkCutOffs( void );
187 mmeineke 568
188 mmeineke 377 // private function to initialize the fortran side of the simulation
189     void (*setFsimulation) setFortranSimList;
190    
191     void (*setFortranBoxSize) setFortranBoxList;
192 mmeineke 626
193     void (*notifyFortranCutOffs) notifyFortranCutOffList;
194 tim 658
195     //Addtional Properties of SimInfo
196     map<string, GenericData*> properties;
197 mmeineke 626
198 mmeineke 377 };
199    
200    
201    
202     #endif