--- trunk/OOPSE/libmdtools/NVT.cpp 2003/06/20 16:49:33 560 +++ trunk/OOPSE/libmdtools/NVT.cpp 2003/06/20 20:29:36 561 @@ -6,11 +6,14 @@ #include "Thermo.hpp" #include "ReadWrite.hpp" #include "Integrator.hpp" -#include "NVT.hpp" - +#include "simError.h" + + // Basic thermostating via Hoover, Phys.Rev.A, 1985, Vol. 31 (5) 1695-1697 -NVT::NVT() { +NVT::NVT ( SimInfo *theInfo, ForceFields* the_ff): + Integrator( theInfo, the_ff ) +{ zeta = 0.0; have_tau_thermostat = 0; have_target_temp = 0; @@ -24,7 +27,10 @@ void NVT::moveA() { DirectionalAtom* dAtom; double Tb[3]; double ji[3]; + double ke; + double angle; + ke = tStats->getKinetic() * eConvert; zeta += dt2 * ( (2.0 * ke - NkBT) / qmass ); @@ -68,23 +74,23 @@ void NVT::moveA() { // rotate about the x-axis angle = dt2 * ji[0] / dAtom->getIxx(); - this->rotate( 1, 2, angle, ji, &aMat[aMatIndex] ); + this->rotate( 1, 2, angle, ji, &Amat[aMatIndex] ); // rotate about the y-axis angle = dt2 * ji[1] / dAtom->getIyy(); - this->rotate( 2, 0, angle, ji, &aMat[aMatIndex] ); + this->rotate( 2, 0, angle, ji, &Amat[aMatIndex] ); // rotate about the z-axis angle = dt * ji[2] / dAtom->getIzz(); - this->rotate( 0, 1, angle, ji, &aMat[aMatIndex] ); + this->rotate( 0, 1, angle, ji, &Amat[aMatIndex] ); // rotate about the y-axis angle = dt2 * ji[1] / dAtom->getIyy(); - this->rotate( 2, 0, angle, ji, &aMat[aMatIndex] ); + this->rotate( 2, 0, angle, ji, &Amat[aMatIndex] ); // rotate about the x-axis angle = dt2 * ji[0] / dAtom->getIxx(); - this->rotate( 1, 2, angle, ji, &aMat[aMatIndex] ); + this->rotate( 1, 2, angle, ji, &Amat[aMatIndex] ); dAtom->setJx( ji[0] ); dAtom->setJy( ji[1] ); @@ -94,12 +100,14 @@ void Integrator::moveB( void ){ } } -void Integrator::moveB( void ){ +void NVT::moveB( void ){ int i,j,k; int atomIndex; DirectionalAtom* dAtom; double Tb[3]; double ji[3]; + double ke; + ke = tStats->getKinetic() * eConvert; zeta += dt2 * ( (2.0 * ke - NkBT) / qmass ); @@ -134,10 +142,6 @@ void Integrator::moveB( void ){ ji[1] += dt2 * (Tb[1] * eConvert - ji[1]*zeta); ji[2] += dt2 * (Tb[2] * eConvert - ji[2]*zeta); - jx2 = ji[0] * ji[0]; - jy2 = ji[1] * ji[1]; - jz2 = ji[2] * ji[2]; - dAtom->setJx( ji[0] ); dAtom->setJy( ji[1] ); dAtom->setJz( ji[2] ); @@ -146,8 +150,7 @@ int NVT::readyCheck() { } int NVT::readyCheck() { - double NkBT; - + // First check to see if we have a target temperature. // Not having one is fatal. @@ -164,8 +167,8 @@ int NVT::readyCheck() { // and then set NkBT if we do have it. Unreasonable numbers of DOFs // are also fatal. - if (entry_plug->ndf > 0) { - NkBT = (double)entry_plug->ndf * kB * targetTemp; + if (info->ndf > 0) { + NkBT = (double)info->ndf * kB * targetTemp; } else { sprintf( painCave.errMsg, "NVT error: We got a silly number of degrees of freedom!\n" @@ -181,7 +184,7 @@ int NVT::readyCheck() { if (!have_qmass) { if (have_tau_thermostat) { sprintf( painCave.errMsg, - "NVT info: Setting qMass = %d\n", tauThermostat * NkBT); + "NVT info: Setting qMass = %lf\n", tauThermostat * NkBT); this->setQmass(tauThermostat * NkBT); painCave.isFatal = 0; simError(); @@ -198,4 +201,3 @@ int NVT::readyCheck() { return 1; } -#endif