ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Integrator.hpp
Revision: 594
Committed: Fri Jul 11 22:34:48 2003 UTC (21 years ago) by mmeineke
File size: 4933 byte(s)
Log Message:
working on som integrator bugs

File Contents

# User Rev Content
1 mmeineke 377 #ifndef _INTEGRATOR_H_
2     #define _INTEGRATOR_H_
3    
4     #include "Atom.hpp"
5     #include "SRI.hpp"
6     #include "AbstractClasses.hpp"
7     #include "SimInfo.hpp"
8     #include "ForceFields.hpp"
9 mmeineke 540 #include "Thermo.hpp"
10     #include "ReadWrite.hpp"
11 mmeineke 377
12 mmeineke 561 const double kB = 8.31451e-7;// boltzmann constant amu*Ang^2*fs^-2/K
13     const double eConvert = 4.184e-4; // converts kcal/mol -> amu*A^2/fs^2
14 mmeineke 586 const double p_convert = 1.63882576e8; //converts amu*fs^-2*Ang^-1 -> atm
15 mmeineke 561 const int maxIteration = 300;
16     const double tol = 1.0e-6;
17    
18 mmeineke 540 class Integrator : public BaseIntegrator {
19 mmeineke 377
20     public:
21 mmeineke 561 Integrator( SimInfo *theInfo, ForceFields* the_ff );
22 mmeineke 548 virtual ~Integrator();
23 mmeineke 377 void integrate( void );
24    
25    
26 mmeineke 540 protected:
27 mmeineke 377
28 mmeineke 540 virtual void integrateStep( int calcPot, int calcStress );
29 mmeineke 548 virtual void preMove( void );
30 mmeineke 540 virtual void moveA( void );
31     virtual void moveB( void );
32     virtual void constrainA( void );
33     virtual void constrainB( void );
34 mmeineke 559 virtual int readyCheck( void ) { return 1; }
35 mmeineke 377
36 mmeineke 540 void checkConstraints( void );
37 mmeineke 377 void rotate( int axes1, int axes2, double angle, double j[3],
38 mmeineke 594 double A[3][3] );
39 mmeineke 377
40 mmeineke 540
41 mmeineke 377 ForceFields* myFF;
42    
43 mmeineke 540 SimInfo *info; // all the info we'll ever need
44     int nAtoms; /* the number of atoms */
45 mmeineke 548 int oldAtoms;
46 mmeineke 540 Atom **atoms; /* array of atom pointers */
47 mmeineke 423 Molecule* molecules;
48     int nMols;
49    
50 mmeineke 548 int isConstrained; // boolean to know whether the systems contains
51     // constraints.
52     int nConstrained; // counter for number of constraints
53     int *constrainedA; // the i of a constraint pair
54     int *constrainedB; // the j of a constraint pair
55     double *constrainedDsqr; // the square of the constraint distance
56    
57     int* moving; // tells whether we are moving atom i
58     int* moved; // tells whether we have moved atom i
59 mmeineke 561 double* oldPos; // pre constrained positions
60 mmeineke 548
61 mmeineke 540 short isFirst; /*boolean for the first time integrate is called */
62    
63     double dt;
64 mmeineke 541 double dt2;
65 gezelter 560
66 mmeineke 541 double* pos;
67     double* vel;
68     double* frc;
69     double* trq;
70     double* Amat;
71 mmeineke 377
72 mmeineke 540 Thermo *tStats;
73     StatWriter* statOut;
74     DumpWriter* dumpOut;
75 mmeineke 377
76     };
77    
78 mmeineke 555 class NVE : public Integrator{
79 mmeineke 540
80 mmeineke 561 public:
81     NVE ( SimInfo *theInfo, ForceFields* the_ff ):
82 mmeineke 555 Integrator( theInfo, the_ff ){}
83     virtual ~NVE(){}
84    
85    
86    
87     };
88    
89 mmeineke 540 class NVT : public Integrator{
90    
91 gezelter 560 public:
92    
93 mmeineke 561 NVT ( SimInfo *theInfo, ForceFields* the_ff);
94     virtual ~NVT() {}
95 mmeineke 540
96 gezelter 560 void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
97     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
98    
99 mmeineke 540 protected:
100 gezelter 560
101 mmeineke 561 virtual void moveA( void );
102     virtual void moveB( void );
103 mmeineke 540
104 mmeineke 561 virtual int readyCheck();
105 gezelter 560
106 gezelter 565 // chi is a propagated degree of freedom.
107 gezelter 560
108 gezelter 565 double chi;
109 gezelter 560
110 gezelter 565 // targetTemp must be set. tauThermostat must also be set;
111 gezelter 560
112     double targetTemp;
113     double tauThermostat;
114 mmeineke 561
115 gezelter 565 short int have_tau_thermostat, have_target_temp;
116 gezelter 560
117 mmeineke 540 };
118    
119    
120 gezelter 574 class NPTi : public Integrator{
121 mmeineke 540
122 gezelter 560 public:
123    
124 gezelter 574 NPTi ( SimInfo *theInfo, ForceFields* the_ff);
125     virtual ~NPTi() {};
126 gezelter 560
127 mmeineke 594 virtual void integrateStep( int calcPot, int calcStress ){
128     calcStress = 1;
129     Integrator::integrateStep( calcPot, calcStress );
130     }
131    
132 gezelter 560 void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
133     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
134     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
135     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
136    
137     protected:
138    
139 mmeineke 561 virtual void moveA( void );
140     virtual void moveB( void );
141 gezelter 560
142 mmeineke 561 virtual int readyCheck();
143 gezelter 560
144 gezelter 565 // chi and eta are the propagated degrees of freedom
145 gezelter 560
146 gezelter 565 double chi;
147     double eta;
148 gezelter 574 double NkBT;
149 gezelter 560
150     // targetTemp, targetPressure, and tauBarostat must be set.
151     // One of qmass or tauThermostat must be set;
152    
153     double targetTemp;
154     double targetPressure;
155     double tauThermostat;
156     double tauBarostat;
157    
158     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
159 gezelter 565 short int have_target_pressure;
160 gezelter 560
161     };
162    
163 gezelter 576 class NPTf : public Integrator{
164    
165     public:
166    
167     NPTf ( SimInfo *theInfo, ForceFields* the_ff);
168     virtual ~NPTf() {};
169    
170 mmeineke 594 virtual void integrateStep( int calcPot, int calcStress ){
171     calcStress = 1;
172     Integrator::integrateStep( calcPot, calcStress );
173     }
174    
175 gezelter 576 void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
176     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
177     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
178     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
179    
180     protected:
181    
182     virtual void moveA( void );
183     virtual void moveB( void );
184    
185     virtual int readyCheck();
186    
187     // chi and eta are the propagated degrees of freedom
188    
189     double chi;
190 gezelter 588 double eta[3][3];
191 gezelter 576 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 mmeineke 377 #endif