ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Integrator.hpp
Revision: 588
Committed: Thu Jul 10 17:10:56 2003 UTC (21 years ago) by gezelter
File size: 4650 byte(s)
Log Message:
Bunch of 1-d array -> 2-d array stuff

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 561 double A[9] );
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     void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
128     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
129     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
130     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
131    
132     protected:
133    
134 mmeineke 561 virtual void moveA( void );
135     virtual void moveB( void );
136 gezelter 560
137 mmeineke 561 virtual int readyCheck();
138 gezelter 560
139 gezelter 565 // chi and eta are the propagated degrees of freedom
140 gezelter 560
141 gezelter 565 double chi;
142     double eta;
143 gezelter 574 double NkBT;
144 gezelter 560
145     // targetTemp, targetPressure, and tauBarostat must be set.
146     // One of qmass or tauThermostat must be set;
147    
148     double targetTemp;
149     double targetPressure;
150     double tauThermostat;
151     double tauBarostat;
152    
153     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
154 gezelter 565 short int have_target_pressure;
155 gezelter 560
156     };
157    
158 gezelter 576 class NPTf : public Integrator{
159    
160     public:
161    
162     NPTf ( SimInfo *theInfo, ForceFields* the_ff);
163     virtual ~NPTf() {};
164    
165     void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
166     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
167     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
168     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
169    
170     protected:
171    
172     virtual void moveA( void );
173     virtual void moveB( void );
174    
175     virtual int readyCheck();
176    
177     // chi and eta are the propagated degrees of freedom
178    
179     double chi;
180 gezelter 588 double eta[3][3];
181 gezelter 576 double NkBT;
182    
183     // targetTemp, targetPressure, and tauBarostat must be set.
184     // One of qmass or tauThermostat must be set;
185    
186     double targetTemp;
187     double targetPressure;
188     double tauThermostat;
189     double tauBarostat;
190    
191     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
192     short int have_target_pressure;
193    
194     };
195    
196 mmeineke 377 #endif