ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/SimInfo.hpp
Revision: 1234
Committed: Fri Jun 4 03:15:31 2004 UTC (20 years, 1 month ago) by tim
File size: 7139 byte(s)
Log Message:
new rattle algorithm is working

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 gezelter 1097 #include "RigidBody.hpp"
10 mmeineke 377 #include "Molecule.hpp"
11 gezelter 1097 #include "Exclude.hpp"
12     #include "SkipList.hpp"
13 mmeineke 377 #include "AbstractClasses.hpp"
14     #include "MakeStamps.hpp"
15 mmeineke 670 #include "SimState.hpp"
16 chrisfen 1180 #include "Restraints.hpp"
17 mmeineke 377
18     #define __C
19     #include "fSimulation.h"
20     #include "fortranWrapDefines.hpp"
21 tim 658 #include "GenericData.hpp"
22 tim 1234
23    
24 tim 1064 //#include "Minimizer.hpp"
25     //#include "OOPSEMinimizer.hpp"
26 chrisfen 1180
27    
28 tim 1131 double roundMe( double x );
29 tim 1064 class OOPSEMinimizer;
30 tim 1234 class ConstraintManager;
31 mmeineke 377 class SimInfo{
32    
33     public:
34    
35     SimInfo();
36 tim 660 ~SimInfo();
37 mmeineke 377
38     int n_atoms; // the number of atoms
39     Atom **atoms; // the array of atom objects
40 gezelter 1097
41     vector<RigidBody*> rigidBodies; // A vector of rigid bodies
42     vector<StuntDouble*> integrableObjects;
43 mmeineke 377
44     double tau[9]; // the stress tensor
45    
46 mmeineke 787 int n_bonds; // number of bends
47     int n_bends; // number of bends
48     int n_torsions; // number of torsions
49     int n_oriented; // number of of atoms with orientation
50     int ndf; // number of actual degrees of freedom
51     int ndfRaw; // number of settable degrees of freedom
52     int ndfTrans; // number of translational degrees of freedom
53     int nZconstraints; // the number of zConstraints
54 mmeineke 377
55 mmeineke 787 int setTemp; // boolean to set the temperature at each sampleTime
56     int resetIntegrator; // boolean to reset the integrator
57 mmeineke 377
58 mmeineke 787 int n_dipoles; // number of dipoles
59 mmeineke 377
60 gezelter 1097 int n_exclude;
61     Exclude* excludes; // the exclude list for ignoring pairs in fortran
62 mmeineke 377 int nGlobalExcludes;
63     int* globalExcludes; // same as above, but these guys participate in
64     // no long range forces.
65    
66     int* identArray; // array of unique identifiers for the atoms
67 gezelter 483 int* molMembershipArray; // map of atom numbers onto molecule numbers
68 mmeineke 377
69     int n_constraints; // the number of constraints on the system
70    
71 mmeineke 787 int n_SRI; // the number of short range interactions
72 mmeineke 377
73     double lrPot; // the potential energy from the long range calculations.
74    
75 gezelter 588 double Hmat[3][3]; // the periodic boundry conditions. The Hmat is the
76     // column vectors of the x, y, and z box vectors.
77     // h1 h2 h3
78     // [ Xx Yx Zx ]
79     // [ Xy Yy Zy ]
80     // [ Xz Yz Zz ]
81     //
82     double HmatInv[3][3];
83 mmeineke 568
84 gezelter 621 double boxL[3]; // The Lengths of the 3 column vectors of Hmat
85 mmeineke 572 double boxVol;
86     int orthoRhombic;
87 mmeineke 568
88    
89 mmeineke 626 double dielectric; // the dielectric of the medium for reaction field
90 mmeineke 568
91 mmeineke 377
92     int usePBC; // whether we use periodic boundry conditions.
93     int useLJ;
94     int useSticky;
95 gezelter 941 int useCharges;
96     int useDipoles;
97 mmeineke 377 int useReactionField;
98     int useGB;
99     int useEAM;
100 tim 1157 bool haveCutoffGroups;
101 mmeineke 855 bool useInitXSstate;
102     double orthoTolerance;
103 mmeineke 377
104     double dt, run_time; // the time step and total time
105     double sampleTime, statusTime; // the position and energy dump frequencies
106     double target_temp; // the target temperature of the system
107     double thermalTime; // the temp kick interval
108 gezelter 637 double currentTime; // Used primarily for correlation Functions
109 mmeineke 746 double resetTime; // Use to reset the integrator periodically
110 mmeineke 377
111     int n_mol; // n_molecules;
112     Molecule* molecules; // the array of molecules
113    
114 mmeineke 823 int nComponents; // the number of components in the system
115 mmeineke 377 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 mmeineke 542 BaseIntegrator *the_integrator; // the integrator of the simulation
123 mmeineke 377
124 tim 1064 OOPSEMinimizer* the_minimizer; // the energy minimizer
125 chrisfen 1180 Restraints* restraint;
126 tim 1031 bool has_minimizer;
127    
128 mmeineke 377 char finalName[300]; // the name of the eor file to be written
129     char sampleName[300]; // the name of the dump file to be written
130     char statusName[300]; // the name of the stat file to be written
131 chrisfen 1180 char rawPotName[300]; // the name of the raw file to be written
132 mmeineke 377
133 tim 708 int seed; //seed for random number generator
134 tim 1144
135 chrisfen 1212 int useSolidThermInt; // is solid-state thermodynamic integration being used
136     int useLiquidThermInt; // is liquid thermodynamic integration being used
137 chrisfen 1187 double thermIntLambda; // lambda for TI
138     double thermIntK; // power of lambda for TI
139     double vRaw; // unperturbed potential for TI
140     double vHarm; // harmonic potential for TI
141     int i; // just an int
142 tim 1144
143     vector<double> mfact;
144 gezelter 1214 vector<int> FglobalGroupMembership;
145 tim 1144 int ngroup;
146 gezelter 1214 int* globalGroupMembership;
147 tim 1234
148     ConstraintManager* consMan; //constraint manager holding the constraint pairs
149 tim 1144
150 mmeineke 377 // 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 mmeineke 836 void setInternal( setFortranSim_TD fSetup,
159     setFortranBox_TD fBox,
160     notifyFortranCutOff_TD fCut){
161 mmeineke 377 setFsimulation = fSetup;
162     setFortranBoxSize = fBox;
163 mmeineke 626 notifyFortranCutOffs = fCut;
164 mmeineke 377 }
165    
166 gezelter 458 int getNDF();
167     int getNDFraw();
168 tim 767 int getNDFtranslational();
169 tim 1108 int getTotIntegrableObjects();
170 gezelter 457 void setBox( double newBox[3] );
171 gezelter 588 void setBoxM( double newBox[3][3] );
172     void getBoxM( double theBox[3][3] );
173 gezelter 574 void scaleBox( double scale );
174 mmeineke 626
175 mmeineke 841 void setDefaultRcut( double theRcut );
176 gezelter 1154 void setDefaultRcut( double theRcut, double theRsw );
177 gezelter 845 void checkCutOffs( void );
178 gezelter 457
179 mmeineke 626 double getRcut( void ) { return rCut; }
180     double getRlist( void ) { return rList; }
181 gezelter 1154 double getRsw( void ) { return rSw; }
182 mmeineke 797 double getMaxCutoff( void ) { return maxCutoff; }
183 gezelter 1154
184 mmeineke 644 void setTime( double theTime ) { currentTime = theTime; }
185 mmeineke 790 void incrTime( double the_dt ) { currentTime += the_dt; }
186     void decrTime( double the_dt ) { currentTime -= the_dt; }
187 mmeineke 644 double getTime( void ) { return currentTime; }
188 mmeineke 626
189 mmeineke 568 void wrapVector( double thePos[3] );
190    
191 mmeineke 670 SimState* getConfiguration( void ) { return myConfiguration; }
192 gezelter 588
193 tim 658 void addProperty(GenericData* prop);
194     GenericData* getProperty(const string& propName);
195 tim 1118 //vector<GenericData*>& getProperties() {return properties;}
196 mmeineke 670
197 tim 708 int getSeed(void) { return seed; }
198     void setSeed(int theSeed) { seed = theSeed;}
199    
200 mmeineke 377 private:
201 mmeineke 626
202 mmeineke 670 SimState* myConfiguration;
203    
204 gezelter 1154 int boxIsInit, haveRcut, haveRsw;
205 mmeineke 626
206     double rList, rCut; // variables for the neighborlist
207 gezelter 1154 double rSw; // the switching radius
208    
209 mmeineke 626 double maxCutoff;
210 tim 781
211     double distXY;
212     double distYZ;
213     double distZX;
214 mmeineke 377
215 gezelter 588 void calcHmatInv( void );
216 mmeineke 568 void calcBoxL();
217 tim 781 double calcMaxCutOff();
218 mmeineke 568
219 mmeineke 377 // private function to initialize the fortran side of the simulation
220 mmeineke 836 setFortranSim_TD setFsimulation;
221 mmeineke 377
222 mmeineke 836 setFortranBox_TD setFortranBoxSize;
223 mmeineke 626
224 mmeineke 836 notifyFortranCutOff_TD notifyFortranCutOffs;
225 tim 658
226     //Addtional Properties of SimInfo
227     map<string, GenericData*> properties;
228 gezelter 1214 void getFortranGroupArrays(SimInfo* info,
229     vector<int>& FglobalGroupMembership,
230     vector<double>& mfact);
231 mmeineke 626
232 gezelter 1214
233 mmeineke 377 };
234    
235 tim 1144
236 mmeineke 377 #endif