--- trunk/OOPSE/libmdtools/Integrator.hpp 2004/03/17 14:22:59 1093 +++ trunk/OOPSE/libmdtools/Integrator.hpp 2004/05/22 18:16:18 1187 @@ -4,6 +4,7 @@ #include #include #include "Atom.hpp" +#include "StuntDouble.hpp" #include "Molecule.hpp" #include "SRI.hpp" #include "AbstractClasses.hpp" @@ -12,6 +13,7 @@ #include "Thermo.hpp" #include "ReadWrite.hpp" #include "ZConsWriter.hpp" +#include "Restraints.hpp" using namespace std; const double kB = 8.31451e-7;// boltzmann constant amu*Ang^2*fs^-2/K @@ -20,7 +22,6 @@ const double tol = 1.0e-6; const int maxIteration = 300; const double tol = 1.0e-6; - template class Integrator : public T { public: @@ -45,8 +46,10 @@ template class Integrator virtual void calcForce( int calcPot, int calcStress ); virtual void thermalize(); - virtual void rotationPropagation( DirectionalAtom* dAtom, double ji[3] ); + virtual bool stopIntegrator() {return false;} + virtual void rotationPropagation( StuntDouble* sd, double ji[3] ); + void checkConstraints( void ); void rotate( int axes1, int axes2, double angle, double j[3], double A[3][3] ); @@ -54,6 +57,7 @@ template class Integrator ForceFields* myFF; SimInfo *info; // all the info we'll ever need + vector integrableObjects; int nAtoms; /* the number of atoms */ int oldAtoms; Atom **atoms; /* array of atom pointers */ @@ -84,6 +88,9 @@ template class NVE : public T { typedef Integrator RealIntegrator; +// ansi instantiation +template class Integrator; + template class NVE : public T { public: @@ -454,6 +461,7 @@ template class ZConstraint : public T { (p vector curZPos; bool usingSMD; + vector prevCantPos; vector cantPos; vector cantVel; @@ -483,14 +491,60 @@ template class ZConstraint : public T { (p }; /* -//Steered Molecular Dynamics +template class SingleZConstrain : public T{ + + +}; +*/ + +template class NonEquMD : public T { + public: + + + +}; + + +// +template class SingleZConstraint : public T{ + public: + SingleZConstraint(SimInfo *theInfo, ForceFields* the_ff); + ~SingleZConstraint(); + + bool stopIntegrator(); + + protected: + +}; + +//Steered Molecular Dynamics, curret implement only support one steered molecule template class SMD : public T{ public: SMD( SimInfo *theInfo, ForceFields* the_ff); ~SMD(); - virtual void integrate(); - virtual void calcForce( int calcPot, int calcStress ); + virtual void integrate(); + virtual void calcForce( int calcPot, int calcStress ); + bool stopIntegrator(); + private: + }; -*/ + +//By using state pattern, Coordinate Drive is responsible for switching back and forth between +//Driven Molecular Dynamics and ZConstraint Method. +template class CoordinateDriver : public T { + public: + typedef T ParentIntegrator; + + CoordinateDriver(SimInfo*, ForceFields*, BaseIntegrator*, BaseIntegrator*); + ~CoordinateDriver(); + + virtual void integrate(); + + private: + BaseIntegrator* zconsIntegrator; + BaseIntegrator* drivenIntegrator; + +}; + #endif