--- trunk/OOPSE/libmdtools/Integrator.hpp 2003/06/19 22:02:44 559 +++ trunk/OOPSE/libmdtools/Integrator.hpp 2003/07/10 17:10:56 588 @@ -9,16 +9,21 @@ class Integrator : public BaseIntegrator { #include "Thermo.hpp" #include "ReadWrite.hpp" +const double kB = 8.31451e-7;// boltzmann constant amu*Ang^2*fs^-2/K +const double eConvert = 4.184e-4; // converts kcal/mol -> amu*A^2/fs^2 +const double p_convert = 1.63882576e8; //converts amu*fs^-2*Ang^-1 -> atm +const int maxIteration = 300; +const double tol = 1.0e-6; + class Integrator : public BaseIntegrator { public: - Integrator( SimInfo &theInfo, ForceFields* the_ff ); + Integrator( SimInfo *theInfo, ForceFields* the_ff ); virtual ~Integrator(); void integrate( void ); protected: - virtual void integrateStep( int calcPot, int calcStress ); virtual void preMove( void ); @@ -30,7 +35,7 @@ class Integrator : public BaseIntegrator { (protected) void checkConstraints( void ); void rotate( int axes1, int axes2, double angle, double j[3], - double A[3][3] ); + double A[9] ); ForceFields* myFF; @@ -51,26 +56,19 @@ class Integrator : public BaseIntegrator { (protected) int* moving; // tells whether we are moving atom i int* moved; // tells whether we have moved atom i - double* prePos; // pre constrained positions + double* oldPos; // pre constrained positions short isFirst; /*boolean for the first time integrate is called */ double dt; double dt2; - const double eConvert = 4.184e-4; // converts kcal/mol -> amu*A^2/fs^2 - const int maxIteration = 300; - const double tol = 1.0e-6; - - double* pos; double* vel; double* frc; double* trq; double* Amat; - - Thermo *tStats; StatWriter* statOut; DumpWriter* dumpOut; @@ -79,7 +77,8 @@ class NVE : public Integrator{ class NVE : public Integrator{ - NVE ( void ): +public: + NVE ( SimInfo *theInfo, ForceFields* the_ff ): Integrator( theInfo, the_ff ){} virtual ~NVE(){} @@ -89,17 +88,109 @@ class NVT : public Integrator{ class NVT : public Integrator{ - NVT ( SimInfo &theInfo, ForceFields* the_ff ) : - Integrator( theInfo, the_ff ); - virtual ~NVT(); +public: + NVT ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NVT() {} + + void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;} + void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;} + protected: - virtual moveA( void ); - virtual moveB( void ); -}; + virtual void moveA( void ); + virtual void moveB( void ); + virtual int readyCheck(); + + // chi is a propagated degree of freedom. + + double chi; + + // targetTemp must be set. tauThermostat must also be set; + + double targetTemp; + double tauThermostat; + short int have_tau_thermostat, have_target_temp; +}; + +class NPTi : public Integrator{ + +public: + + NPTi ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NPTi() {}; + + void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;} + void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;} + void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;} + void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;} + +protected: + + virtual void moveA( void ); + virtual void moveB( void ); + + virtual int readyCheck(); + + // chi and eta are the propagated degrees of freedom + + double chi; + double eta; + double NkBT; + + // targetTemp, targetPressure, and tauBarostat must be set. + // One of qmass or tauThermostat must be set; + + double targetTemp; + double targetPressure; + double tauThermostat; + double tauBarostat; + + short int have_tau_thermostat, have_tau_barostat, have_target_temp; + short int have_target_pressure; + +}; + +class NPTf : public Integrator{ + +public: + + NPTf ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NPTf() {}; + + void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;} + void setTauBarostat(double tb) {tauBarostat = tb; have_tau_barostat=1;} + void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;} + void setTargetPressure(double tp) {targetPressure = tp; have_target_pressure = 1;} + +protected: + + virtual void moveA( void ); + virtual void moveB( void ); + + virtual int readyCheck(); + + // chi and eta are the propagated degrees of freedom + + double chi; + double eta[3][3]; + double NkBT; + + // targetTemp, targetPressure, and tauBarostat must be set. + // One of qmass or tauThermostat must be set; + + double targetTemp; + double targetPressure; + double tauThermostat; + double tauBarostat; + + short int have_tau_thermostat, have_tau_barostat, have_target_temp; + short int have_target_pressure; + +}; + #endif