ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/Integrator.hpp
Revision: 574
Committed: Tue Jul 8 20:56:10 2003 UTC (21 years ago) by gezelter
File size: 3625 byte(s)
Log Message:
NPTi

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 setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
96     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
97    
98 mmeineke 540 protected:
99 gezelter 560
100 mmeineke 561 virtual void moveA( void );
101     virtual void moveB( void );
102 mmeineke 540
103 mmeineke 561 virtual int readyCheck();
104 gezelter 560
105 gezelter 565 // chi is a propagated degree of freedom.
106 gezelter 560
107 gezelter 565 double chi;
108 gezelter 560
109 gezelter 565 // targetTemp must be set. tauThermostat must also be set;
110 gezelter 560
111     double targetTemp;
112     double tauThermostat;
113 mmeineke 561
114 gezelter 565 short int have_tau_thermostat, have_target_temp;
115 gezelter 560
116 mmeineke 540 };
117    
118    
119 gezelter 574 class NPTi : public Integrator{
120 mmeineke 540
121 gezelter 560 public:
122    
123 gezelter 574 NPTi ( SimInfo *theInfo, ForceFields* the_ff);
124     virtual ~NPTi() {};
125 gezelter 560
126     void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;}
127     void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;}
128     void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;}
129     void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;}
130    
131     protected:
132    
133 mmeineke 561 virtual void moveA( void );
134     virtual void moveB( void );
135 gezelter 560
136 mmeineke 561 virtual int readyCheck();
137 gezelter 560
138 gezelter 565 // chi and eta are the propagated degrees of freedom
139 gezelter 560
140 gezelter 565 double chi;
141     double eta;
142 gezelter 574 double NkBT;
143 gezelter 560
144     // targetTemp, targetPressure, and tauBarostat must be set.
145     // One of qmass or tauThermostat must be set;
146    
147     double targetTemp;
148     double targetPressure;
149     double tauThermostat;
150     double tauBarostat;
151    
152     short int have_tau_thermostat, have_tau_barostat, have_target_temp;
153 gezelter 565 short int have_target_pressure;
154 gezelter 560
155     };
156    
157 mmeineke 377 #endif