ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/NPTim.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/NPTim.cpp (file contents):
Revision 604 by gezelter, Tue Jul 15 03:08:00 2003 UTC vs.
Revision 611 by gezelter, Tue Jul 15 17:10:50 2003 UTC

# Line 37 | Line 37 | void NPTim::moveA() {
37  
38   void NPTim::moveA() {
39    
40 <  int i, j;
40 >  int i, j, k;
41    DirectionalAtom* dAtom;
42    double Tb[3], ji[3];
43    double A[3][3], I[3][3];
# Line 46 | Line 46 | void NPTim::moveA() {
46  
47    double rj[3];
48    double instaTemp, instaPress, instaVol;
49 <  double tt2, tb2;
49 >  double tt2, tb2, scaleFactor;
50  
51    int nInMol;
52    double rc[3];
# Line 82 | Line 82 | void NPTim::moveA() {
82  
83        if(myAtoms[j] != NULL) {
84  
85 <        myAtoms[i]->getVel( vel );
86 <        myAtoms[i]->getPos( pos );
87 <        myAtoms[i]->getFrc( frc );
85 >        myAtoms[j]->getVel( vel );
86 >        myAtoms[j]->getPos( pos );
87 >        myAtoms[j]->getFrc( frc );
88  
89 <        mass = myAtoms[i]->getMass();
89 >        mass = myAtoms[j]->getMass();
90  
91 <        for (j=0; j < 3; j++)
92 <          vel[j] += dt2 * ((frc[j] / mass ) * eConvert - vel[j]*(chi+eta));
91 >        for (k=0; k < 3; k++)
92 >          vel[k] += dt2 * ((frc[k] / mass ) * eConvert - vel[k]*(chi+eta));
93  
94 <        myAtoms[i]->setVel( vel );
94 >        myAtoms[j]->setVel( vel );
95  
96 <        for (j = 0; j < 3; j++)
97 <          pos[j] += dt * (vel[j] + eta*rc[j]);
96 >        for (k = 0; k < 3; k++)
97 >          pos[k] += dt * (vel[k] + eta*rc[k]);
98  
99 <        atoms[i]->setPos( pos );
99 >        myAtoms[j]->setPos( pos );
100  
101          if( myAtoms[j]->isDirectional() ){
102  
# Line 111 | Line 111 | void NPTim::moveA() {
111            
112            dAtom->getJ( ji );
113  
114 <          for (j=0; j < 3; j++)
115 <            ji[j] += dt2 * (Tb[j] * eConvert - ji[j]*chi);
114 >          for (k=0; k < 3; k++)
115 >            ji[k] += dt2 * (Tb[k] * eConvert - ji[k]*chi);
116            
117            // use the angular velocities to propagate the rotation matrix a
118            // full time step
# Line 146 | Line 146 | void NPTim::moveA() {
146        }
147      }
148    }
149 +
150    // Scale the box after all the positions have been moved:
151    
152 <  cerr << "eta = " << eta
153 <       << "; exp(dt*eta) = " << exp(eta*dt) << "\n";
154 <  
155 <  info->scaleBox(exp(dt*eta));
152 >  scaleFactor = exp(dt*eta);
153 >
154 >  if (scaleFactor > 1.1 || scaleFactor < 0.9) {
155 >    sprintf( painCave.errMsg,
156 >             "NPTi error: Attempting a Box scaling of more than 10 percent"
157 >             " check your tauBarostat, as it is probably too small!\n"
158 >             " eta = %lf, scaleFactor = %lf\n", eta, scaleFactor
159 >             );
160 >    painCave.isFatal = 1;
161 >    simError();
162 >  } else {        
163 >    info->scaleBox(exp(dt*eta));      
164 >  }
165   }
166  
167   void NPTim::moveB( void ){

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines