ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Integrator.hpp
Revision: 645
Committed: Tue Jul 22 19:54:52 2003 UTC (20 years, 11 months ago) by tim
File size: 7255 byte(s)
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 mmeineke 377 #ifndef _INTEGRATOR_H_
2     #define _INTEGRATOR_H_
3    
4     #include "Atom.hpp"
5 gezelter 604 #include "Molecule.hpp"
6 mmeineke 377 #include "SRI.hpp"
7     #include "AbstractClasses.hpp"
8     #include "SimInfo.hpp"
9     #include "ForceFields.hpp"
10 mmeineke 540 #include "Thermo.hpp"
11     #include "ReadWrite.hpp"
12 mmeineke 377
13 mmeineke 561 const double kB = 8.31451e-7;// boltzmann constant amu*Ang^2*fs^-2/K
14     const double eConvert = 4.184e-4; // converts kcal/mol -> amu*A^2/fs^2
15 mmeineke 586 const double p_convert = 1.63882576e8; //converts amu*fs^-2*Ang^-1 -> atm
16 mmeineke 561 const int maxIteration = 300;
17     const double tol = 1.0e-6;
18    
19 mmeineke 377
20 tim 645 template<typename T = BaseIntegrator> class Integrator : public T {
21    
22 mmeineke 377 public:
23 mmeineke 561 Integrator( SimInfo *theInfo, ForceFields* the_ff );
24 mmeineke 548 virtual ~Integrator();
25 mmeineke 377 void integrate( void );
26    
27    
28 mmeineke 540 protected:
29 mmeineke 377
30 mmeineke 540 virtual void integrateStep( int calcPot, int calcStress );
31 mmeineke 548 virtual void preMove( void );
32 mmeineke 540 virtual void moveA( void );
33     virtual void moveB( void );
34     virtual void constrainA( void );
35     virtual void constrainB( void );
36 mmeineke 559 virtual int readyCheck( void ) { return 1; }
37 mmeineke 377
38 mmeineke 540 void checkConstraints( void );
39 mmeineke 377 void rotate( int axes1, int axes2, double angle, double j[3],
40 gezelter 600 double A[3][3] );
41 mmeineke 377
42 mmeineke 540
43 mmeineke 377 ForceFields* myFF;
44    
45 mmeineke 540 SimInfo *info; // all the info we'll ever need
46     int nAtoms; /* the number of atoms */
47 mmeineke 548 int oldAtoms;
48 mmeineke 540 Atom **atoms; /* array of atom pointers */
49 mmeineke 423 Molecule* molecules;
50     int nMols;
51    
52 mmeineke 548 int isConstrained; // boolean to know whether the systems contains
53     // constraints.
54     int nConstrained; // counter for number of constraints
55     int *constrainedA; // the i of a constraint pair
56     int *constrainedB; // the j of a constraint pair
57     double *constrainedDsqr; // the square of the constraint distance
58    
59     int* moving; // tells whether we are moving atom i
60     int* moved; // tells whether we have moved atom i
61 mmeineke 561 double* oldPos; // pre constrained positions
62 mmeineke 548
63 mmeineke 540 short isFirst; /*boolean for the first time integrate is called */
64    
65     double dt;
66 mmeineke 541 double dt2;
67 gezelter 560
68 mmeineke 540 Thermo *tStats;
69     StatWriter* statOut;
70     DumpWriter* dumpOut;
71 mmeineke 377
72     };
73    
74 tim 645 typedef Integrator<BaseIntegrator> RealIntegrator;
75 mmeineke 540
76 tim 645 template<typename T> class NVE : public T {
77    
78 mmeineke 561 public:
79     NVE ( SimInfo *theInfo, ForceFields* the_ff ):
80 tim 645 T( theInfo, the_ff ){}
81     virtual ~NVE(){}
82     };
83 mmeineke 555
84    
85 tim 645 template<typename T> class NVT : public T {
86 mmeineke 555
87 gezelter 560 public:
88    
89 mmeineke 561 NVT ( SimInfo *theInfo, ForceFields* the_ff);
90     virtual ~NVT() {}
91 mmeineke 540
92 gezelter 560 void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
93     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
94    
95 mmeineke 540 protected:
96 gezelter 560
97 mmeineke 561 virtual void moveA( void );
98     virtual void moveB( void );
99 mmeineke 540
100 mmeineke 561 virtual int readyCheck();
101 gezelter 560
102 gezelter 565 // chi is a propagated degree of freedom.
103 gezelter 560
104 gezelter 565 double chi;
105 gezelter 560
106 gezelter 565 // targetTemp must be set. tauThermostat must also be set;
107 gezelter 560
108     double targetTemp;
109     double tauThermostat;
110 mmeineke 561
111 gezelter 565 short int have_tau_thermostat, have_target_temp;
112 gezelter 560
113 mmeineke 540 };
114    
115    
116    
117 tim 645 template<typename T> class NPTi : public T{
118    
119 gezelter 560 public:
120    
121 gezelter 574 NPTi ( SimInfo *theInfo, ForceFields* the_ff);
122     virtual ~NPTi() {};
123 gezelter 560
124 mmeineke 594 virtual void integrateStep( int calcPot, int calcStress ){
125     calcStress = 1;
126 tim 645 T::integrateStep( calcPot, calcStress );
127 mmeineke 594 }
128    
129 gezelter 560 void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
130     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
131     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
132     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
133    
134     protected:
135    
136 mmeineke 561 virtual void moveA( void );
137     virtual void moveB( void );
138 gezelter 560
139 mmeineke 561 virtual int readyCheck();
140 gezelter 560
141 gezelter 565 // chi and eta are the propagated degrees of freedom
142 gezelter 560
143 gezelter 565 double chi;
144     double eta;
145 gezelter 574 double NkBT;
146 gezelter 560
147     // targetTemp, targetPressure, and tauBarostat must be set.
148     // One of qmass or tauThermostat must be set;
149    
150     double targetTemp;
151     double targetPressure;
152     double tauThermostat;
153     double tauBarostat;
154    
155     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
156 gezelter 565 short int have_target_pressure;
157 gezelter 560
158     };
159    
160 tim 645 template<typename T> class NPTim : public T{
161 gezelter 596
162     public:
163    
164     NPTim ( SimInfo *theInfo, ForceFields* the_ff);
165     virtual ~NPTim() {};
166    
167     virtual void integrateStep( int calcPot, int calcStress ){
168     calcStress = 1;
169 tim 645 T::integrateStep( calcPot, calcStress );
170 gezelter 596 }
171    
172     void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
173     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
174     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
175     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
176    
177     protected:
178    
179 gezelter 604 virtual void moveA( void );
180 gezelter 596 virtual void moveB( void );
181    
182     virtual int readyCheck();
183    
184 gezelter 604 Molecule* myMolecules;
185     Atom** myAtoms;
186    
187 gezelter 596 // chi and eta are the propagated degrees of freedom
188    
189     double chi;
190     double eta;
191     double NkBT;
192    
193     // targetTemp, targetPressure, and tauBarostat must be set.
194     // One of qmass or tauThermostat must be set;
195    
196     double targetTemp;
197     double targetPressure;
198     double tauThermostat;
199     double tauBarostat;
200    
201     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
202     short int have_target_pressure;
203    
204     };
205    
206 tim 645 template<typename T> class NPTf : public T{
207 gezelter 576
208     public:
209    
210     NPTf ( SimInfo *theInfo, ForceFields* the_ff);
211     virtual ~NPTf() {};
212    
213 mmeineke 594 virtual void integrateStep( int calcPot, int calcStress ){
214     calcStress = 1;
215 tim 645 T::integrateStep( calcPot, calcStress );
216 mmeineke 594 }
217    
218 gezelter 576 void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
219     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
220     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
221     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
222    
223     protected:
224    
225     virtual void moveA( void );
226     virtual void moveB( void );
227    
228     virtual int readyCheck();
229    
230     // chi and eta are the propagated degrees of freedom
231    
232     double chi;
233 gezelter 588 double eta[3][3];
234 gezelter 576 double NkBT;
235    
236     // targetTemp, targetPressure, and tauBarostat must be set.
237     // One of qmass or tauThermostat must be set;
238    
239     double targetTemp;
240     double targetPressure;
241     double tauThermostat;
242     double tauBarostat;
243    
244     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
245     short int have_target_pressure;
246    
247     };
248    
249 tim 645 template<typename T> class NPTfm : public T{
250 gezelter 596
251     public:
252    
253     NPTfm ( SimInfo *theInfo, ForceFields* the_ff);
254     virtual ~NPTfm() {};
255    
256     virtual void integrateStep( int calcPot, int calcStress ){
257     calcStress = 1;
258 tim 645 T::integrateStep( calcPot, calcStress );
259 gezelter 596 }
260    
261     void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
262     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
263     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
264     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
265    
266     protected:
267    
268     virtual void moveA( void );
269     virtual void moveB( void );
270    
271     virtual int readyCheck();
272    
273 gezelter 605 Molecule* myMolecules;
274     Atom** myAtoms;
275    
276 gezelter 596 // chi and eta are the propagated degrees of freedom
277    
278     double chi;
279     double eta[3][3];
280     double NkBT;
281    
282     // targetTemp, targetPressure, and tauBarostat must be set.
283     // One of qmass or tauThermostat must be set;
284    
285     double targetTemp;
286     double targetPressure;
287     double tauThermostat;
288     double tauBarostat;
289    
290     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
291     short int have_target_pressure;
292    
293     };
294    
295 mmeineke 377 #endif