--- trunk/OOPSE/libmdtools/ExtendedSystem.cpp 2003/04/04 19:16:11 457 +++ trunk/OOPSE/libmdtools/ExtendedSystem.cpp 2003/04/04 19:47:19 458 @@ -10,19 +10,17 @@ ExtendedSystem::ExtendedSystem( SimInfo &info ) { // get what information we need from the SimInfo object entry_plug = &info; - nAtoms = info.n_atoms; - atoms = info.atoms; - nMols = info.n_mol; - molecules = info.molecules; + nAtoms = entry_plug->n_atoms; + atoms = entry_plug->atoms; + nMols = entry_plug->n_mol; + molecules = entry_plug->molecules; + nOriented = entry_plug->n_oriented; + ndf = entry_plug->ndf; zeta = 0.0; epsilonDot = 0.0; } -ExtendedSystem::~ExtendedSystem() { -} - - void ExtendedSystem::NoseHooverNVT( double dt, double ke ){ // Basic thermostating via Hoover, Phys.Rev.A, 1985, Vol. 31 (5) 1695-1697 @@ -33,9 +31,11 @@ void ExtendedSystem::NoseHooverNVT( double dt, double const double kB = 8.31451e-7; // boltzmann constant in amu*Ang^2*fs^-2/K const double e_convert = 4.184e-4; // to convert ke from kcal/mol to // amu*Ang^2*fs^-2/K - + DirectionalAtom* dAtom; + + ke_temp = ke * e_convert; - NkBT = (double)getNDF() * kB * targetTemp; + NkBT = (double)ndf * kB * targetTemp; // advance the zeta term to zeta(t + dt) - zeta is 0.0d0 on config. readin // qmass is set in the parameter file @@ -44,7 +44,7 @@ void ExtendedSystem::NoseHooverNVT( double dt, double zetaScale = zeta * dt; // perform thermostat scaling on linear velocities and angular momentum - for(i = 0; i < n_atoms; i++){ + for(i = 0; i < nAtoms; i++){ vx = atoms[i]->get_vx(); vy = atoms[i]->get_vy(); @@ -54,9 +54,9 @@ void ExtendedSystem::NoseHooverNVT( double dt, double atoms[i]->set_vy(vy * (1.0 - zetaScale)); atoms[i]->set_vz(vz * (1.0 - zetaScale)); } - if( n_oriented ){ + if( nOriented ){ - for( i=0; i < n_atoms; i++ ){ + for( i=0; i < nAtoms; i++ ){ if( atoms[i]->isDirectional() ){ @@ -89,17 +89,21 @@ void ExtendedSystem::NoseHooverAndersonNPT( double dt, const double e_convert = 4.184e-4; // to convert ke from kcal/mol to // amu*Ang^2*fs^-2/K - double p_ext; + double p_ext, zetaScale, epsilonScale, scale, NkBT, ke_temp; + double volume, p_mol; + double vx, vy, vz, jx, jy, jz; + DirectionalAtom* dAtom; + int i; p_ext = targetPressure * p_units; p_mol = p_int * p_units; - getBox(oldBox); + entry_plug->getBox(oldBox); volume = oldBox[0]*oldBox[1]*oldBox[2]; ke_temp = ke * e_convert; - NkBT = (double)getNDF() * kB * targetTemp; + NkBT = (double)ndf * kB * targetTemp; // propogate the strain rate @@ -114,6 +118,8 @@ void ExtendedSystem::NoseHooverAndersonNPT( double dt, newBox[2] = oldBox[2] * scale; volume = newBox[0]*newBox[1]*newBox[2]; + entry_plug->setBox(newBox); + // perform affine transform to update positions with volume fluctuations this->AffineTransform( oldBox, newBox ); @@ -126,7 +132,7 @@ void ExtendedSystem::NoseHooverAndersonNPT( double dt, zetaScale = zeta * dt; // apply barostating and thermostating to velocities and angular momenta - for(i = 0; i < n_atoms; i++){ + for(i = 0; i < nAtoms; i++){ vx = atoms[i]->get_vx(); vy = atoms[i]->get_vy(); @@ -136,9 +142,9 @@ void ExtendedSystem::NoseHooverAndersonNPT( double dt, atoms[i]->set_vy(vy * (1.0 - zetaScale - epsilonScale)); atoms[i]->set_vz(vz * (1.0 - zetaScale - epsilonScale)); } - if( n_oriented ){ + if( nOriented ){ - for( i=0; i < n_atoms; i++ ){ + for( i=0; i < nAtoms; i++ ){ if( atoms[i]->isDirectional() ){ @@ -171,7 +177,7 @@ void ExtendedSystem::AffineTransform( double oldBox[3] for (i=0; i < nMols; i++) { - molecules[i]->getCOM(r); + molecules[i].getCOM(r); // find the minimum image coordinates of the molecular centers of mass: @@ -197,6 +203,6 @@ void ExtendedSystem::AffineTransform( double oldBox[3] r[1] = ryi + boxNum[1]; r[2] = rzi + boxNum[2]; - molecules[i]->moveCOM(r); + molecules[i].moveCOM(r); } }