ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Integrator.hpp
Revision: 561
Committed: Fri Jun 20 20:29:36 2003 UTC (21 years ago) by mmeineke
File size: 3833 byte(s)
Log Message:
Most of the integrator and NVT seem to be working now.

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     const int maxIteration = 300;
15     const double tol = 1.0e-6;
16    
17 mmeineke 540 class Integrator : public BaseIntegrator {
18 mmeineke 377
19     public:
20 mmeineke 561 Integrator( SimInfo *theInfo, ForceFields* the_ff );
21 mmeineke 548 virtual ~Integrator();
22 mmeineke 377 void integrate( void );
23    
24    
25 mmeineke 540 protected:
26 mmeineke 377
27 mmeineke 540 virtual void integrateStep( int calcPot, int calcStress );
28 mmeineke 548 virtual void preMove( void );
29 mmeineke 540 virtual void moveA( void );
30     virtual void moveB( void );
31     virtual void constrainA( void );
32     virtual void constrainB( void );
33 mmeineke 559 virtual int readyCheck( void ) { return 1; }
34 mmeineke 377
35 mmeineke 540 void checkConstraints( void );
36 mmeineke 377 void rotate( int axes1, int axes2, double angle, double j[3],
37 mmeineke 561 double A[9] );
38 mmeineke 377
39 mmeineke 540
40 mmeineke 377 ForceFields* myFF;
41    
42 mmeineke 540 SimInfo *info; // all the info we'll ever need
43     int nAtoms; /* the number of atoms */
44 mmeineke 548 int oldAtoms;
45 mmeineke 540 Atom **atoms; /* array of atom pointers */
46 mmeineke 423 Molecule* molecules;
47     int nMols;
48    
49 mmeineke 548 int isConstrained; // boolean to know whether the systems contains
50     // constraints.
51     int nConstrained; // counter for number of constraints
52     int *constrainedA; // the i of a constraint pair
53     int *constrainedB; // the j of a constraint pair
54     double *constrainedDsqr; // the square of the constraint distance
55    
56     int* moving; // tells whether we are moving atom i
57     int* moved; // tells whether we have moved atom i
58 mmeineke 561 double* oldPos; // pre constrained positions
59 mmeineke 548
60 mmeineke 540 short isFirst; /*boolean for the first time integrate is called */
61    
62     double dt;
63 mmeineke 541 double dt2;
64 gezelter 560
65 mmeineke 541 double* pos;
66     double* vel;
67     double* frc;
68     double* trq;
69     double* Amat;
70 mmeineke 377
71 mmeineke 540 Thermo *tStats;
72     StatWriter* statOut;
73     DumpWriter* dumpOut;
74 mmeineke 377
75     };
76    
77 mmeineke 555 class NVE : public Integrator{
78 mmeineke 540
79 mmeineke 561 public:
80     NVE ( SimInfo *theInfo, ForceFields* the_ff ):
81 mmeineke 555 Integrator( theInfo, the_ff ){}
82     virtual ~NVE(){}
83    
84    
85    
86     };
87    
88 mmeineke 540 class NVT : public Integrator{
89    
90 gezelter 560 public:
91    
92 mmeineke 561 NVT ( SimInfo *theInfo, ForceFields* the_ff);
93     virtual ~NVT() {}
94 mmeineke 540
95 gezelter 560 void setQmass(double q) {qmass = q; have_qmass = 1;}
96     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     // zeta is a propagated degree of freedom.
107    
108     double zeta;
109    
110     // targetTemp must be set. One of qmass or tauThermostat must be set;
111    
112     double qmass;
113     double targetTemp;
114     double tauThermostat;
115    
116 mmeineke 561 double NkBT;
117    
118 gezelter 560 short int have_tau_thermostat, have_target_temp, have_qmass;
119    
120 mmeineke 540 };
121    
122    
123 gezelter 560 class NPT : public Integrator{
124 mmeineke 540
125 gezelter 560 public:
126    
127 mmeineke 561 NPT ( SimInfo *theInfo, ForceFields* the_ff);
128 gezelter 560 virtual ~NPT();
129    
130     void setQmass(double q) {qmass = q; have_qmass = 1;}
131     void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
132     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
133     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
134     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
135    
136     protected:
137    
138 mmeineke 561 virtual void moveA( void );
139     virtual void moveB( void );
140 gezelter 560
141 mmeineke 561 virtual int readyCheck();
142 gezelter 560
143     Atom** atoms;
144    
145     // zeta and epsilonDot are the propagated degrees of freedom.
146    
147     double zeta;
148     double epsilonDot;
149    
150     // targetTemp, targetPressure, and tauBarostat must be set.
151     // One of qmass or tauThermostat must be set;
152    
153     double qmass;
154     double targetTemp;
155     double targetPressure;
156     double tauThermostat;
157     double tauBarostat;
158    
159     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
160     short int have_target_pressure, have_qmass;
161    
162     };
163    
164 mmeineke 377 #endif