--- trunk/OOPSE/libmdtools/Integrator.hpp 2003/08/20 14:34:04 701 +++ trunk/OOPSE/libmdtools/Integrator.hpp 2003/09/05 21:28:52 747 @@ -39,6 +39,8 @@ template class Integrator virtual void constrainB( void ); virtual int readyCheck( void ) { return 1; } + virtual void resetIntegrator( void ) { } + virtual void calcForce( int calcPot, int calcStress ); virtual void thermalize(); @@ -105,6 +107,8 @@ template class NVT : public T { (protected virtual int readyCheck(); + virtual void resetIntegrator( void ); + // chi is a propagated degree of freedom. double chi; @@ -144,6 +148,8 @@ template class NPTi : public T{ (protected virtual int readyCheck(); + virtual void resetIntegrator( void ); + // chi and eta are the propagated degrees of freedom double chi; @@ -187,6 +193,8 @@ template class NPTim : public T{ (protecte virtual int readyCheck(); + virtual void resetIntegrator( void ); + Molecule* myMolecules; Atom** myAtoms; @@ -230,6 +238,8 @@ template class NPTf : public T{ (protected virtual void moveA( void ); virtual void moveB( void ); + + virtual void resetIntegrator( void ); virtual int readyCheck(); @@ -274,6 +284,8 @@ template class NPTfm : public T{ (protecte virtual void moveA( void ); virtual void moveB( void ); + virtual void resetIntegrator( void ); + virtual int readyCheck(); Molecule* myMolecules; @@ -298,12 +310,59 @@ template class ZConstraint : public T { }; + +template class NPTpr : public T{ + +public: + + NPTpr ( SimInfo *theInfo, ForceFields* the_ff); + virtual ~NPTpr() {}; + + virtual void integrateStep( int calcPot, int calcStress ){ + calcStress = 1; + T::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(); + + virtual void resetIntegrator( void ); + + // 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; + +}; + + template class ZConstraint : public T { public: - class ForceSubstractionPolicy{ + class ForceSubtractionPolicy{ public: - ForceSubstractionPolicy(ZConstraint* integrator) {zconsIntegrator = integrator;} + ForceSubtractionPolicy(ZConstraint* integrator) {zconsIntegrator = integrator;} virtual void update() = 0; virtual double getZFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) = 0; @@ -315,9 +374,10 @@ template class ZConstraint : public T { ZConstraint* zconsIntegrator;; }; - class PolicyByNumber : ForceSubstractionPolicy{ + class PolicyByNumber : public ForceSubtractionPolicy{ + public: - PolicyByNumber(ZConstraint* integrator) :ForceSubstractionPolicy(integrator) {} + PolicyByNumber(ZConstraint* integrator) :ForceSubtractionPolicy(integrator) {} virtual void update(); virtual double getZFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) ; virtual double getZFOfMovingMols(Atom* atom, double totalForce) ; @@ -328,9 +388,10 @@ template class ZConstraint : public T { int totNumOfMovingAtoms; }; - class PolicyByMass :ForceSubstractionPolicy{ + class PolicyByMass : public ForceSubtractionPolicy{ + public: - PolicyByMass(ZConstraint* integrator) :ForceSubstractionPolicy(integrator) {} + PolicyByMass(ZConstraint* integrator) :ForceSubtractionPolicy(integrator) {} virtual void update(); virtual double getZFOfFixedZMols(Molecule* mol, Atom* atom, double totalForce) ; @@ -422,8 +483,8 @@ template class ZConstraint : public T { double calcSysCOMVel(); double calcTotalForce(); - ForceSubstractionPolicy* forcePolicy; //force substration policy - friend class ForceSubstractionPolicy; + ForceSubtractionPolicy* forcePolicy; //force subtraction policy + friend class ForceSubtractionPolicy; };