--- trunk/OOPSE/libmdtools/Integrator.hpp 2003/06/20 20:29:36 561 +++ trunk/OOPSE/libmdtools/Integrator.hpp 2003/07/15 03:27:24 605 @@ -2,6 +2,7 @@ #define _INTEGRATOR_H_ #include "Atom.hpp" +#include "Molecule.hpp" #include "SRI.hpp" #include "AbstractClasses.hpp" #include "SimInfo.hpp" @@ -11,6 +12,7 @@ const int maxIteration = 300; 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; @@ -34,7 +36,7 @@ class Integrator : public BaseIntegrator { (protected) void checkConstraints( void ); void rotate( int axes1, int axes2, double angle, double j[3], - double A[9] ); + double A[3][3] ); ForceFields* myFF; @@ -62,12 +64,6 @@ class Integrator : public BaseIntegrator { (protected) double dt; double dt2; - double* pos; - double* vel; - double* frc; - double* trq; - double* Amat; - Thermo *tStats; StatWriter* statOut; DumpWriter* dumpOut; @@ -92,7 +88,6 @@ class NVT : public Integrator{ (public) NVT ( SimInfo *theInfo, ForceFields* the_ff); virtual ~NVT() {} - void setQmass(double q) {qmass = q; have_qmass = 1;} void setTauThermostat(double tt) {tauThermostat = tt; have_tau_thermostat=1;} void setTargetTemp(double tt) {targetTemp = tt; have_target_temp = 1;} @@ -103,31 +98,121 @@ class NVT : public Integrator{ (public) virtual int readyCheck(); - // zeta is a propagated degree of freedom. + // chi is a propagated degree of freedom. - double zeta; + double chi; - // targetTemp must be set. One of qmass or tauThermostat must be set; + // targetTemp must be set. tauThermostat must also be set; - double qmass; 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() {}; + + virtual void integrateStep( int calcPot, int calcStress ){ + calcStress = 1; + Integrator::integrateStep( calcPot, calcStress ); + } + + 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; - - short int have_tau_thermostat, have_target_temp, have_qmass; + // 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 NPTim : public Integrator{ -class NPT : public Integrator{ +public: + NPTim ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NPTim() {}; + + virtual void integrateStep( int calcPot, int calcStress ){ + calcStress = 1; + Integrator::integrateStep( calcPot, calcStress ); + } + + 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(); + + Molecule* myMolecules; + Atom** myAtoms; + + // 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: - NPT ( SimInfo *theInfo, ForceFields* the_ff); - virtual ~NPT(); + NPTf ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NPTf() {}; - void setQmass(double q) {qmass = q; have_qmass = 1;} + virtual void integrateStep( int calcPot, int calcStress ){ + calcStress = 1; + Integrator::integrateStep( calcPot, calcStress ); + } + 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;} @@ -140,24 +225,68 @@ class NPT : public Integrator{ (protected) virtual int readyCheck(); - Atom** atoms; + // chi and eta are the propagated degrees of freedom - // zeta and epsilonDot are the propagated degrees of freedom. + double chi; + double eta[3][3]; + double NkBT; - double zeta; - double epsilonDot; + // 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 NPTfm : public Integrator{ + +public: + + NPTfm ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NPTfm() {}; + + virtual void integrateStep( int calcPot, int calcStress ){ + calcStress = 1; + Integrator::integrateStep( calcPot, calcStress ); + } + + 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(); + + Molecule* myMolecules; + Atom** myAtoms; + + // 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 qmass; double targetTemp; double targetPressure; double tauThermostat; double tauBarostat; short int have_tau_thermostat, have_tau_barostat, have_target_temp; - short int have_target_pressure, have_qmass; + short int have_target_pressure; };