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

Comparing trunk/OOPSE/libmdtools/Integrator.cpp (file contents):
Revision 1097 by gezelter, Mon Apr 12 20:32:20 2004 UTC vs.
Revision 1187 by chrisfen, Sat May 22 18:16:18 2004 UTC

# Line 32 | Line 32 | template<typename T> Integrator<T>::Integrator(SimInfo
32  
33    nAtoms = info->n_atoms;
34    integrableObjects = info->integrableObjects;
35 <
35 >
36    // check for constraints
37  
38    constrainedA = NULL;
# Line 45 | Line 45 | template<typename T> Integrator<T>::Integrator(SimInfo
45    nConstrained = 0;
46  
47    checkConstraints();
48 +
49   }
50  
51   template<typename T> Integrator<T>::~Integrator(){
# Line 160 | Line 161 | template<typename T> void Integrator<T>::integrate(voi
161    double thermalTime = info->thermalTime;
162    double resetTime = info->resetTime;
163  
164 <
164 >  double difference;
165    double currSample;
166    double currThermal;
167    double currStatus;
# Line 179 | Line 180 | template<typename T> void Integrator<T>::integrate(voi
180  
181    readyCheck();
182  
183 +  // remove center of mass drift velocity (in case we passed in a configuration
184 +  // that was drifting
185 +  tStats->removeCOMdrift();
186 +
187 +  // initialize the retraints if necessary
188 +  if (info->useThermInt) {
189 +    myFF->initRestraints();
190 +  }
191 +
192    // initialize the forces before the first step
193  
194    calcForce(1, 1);
185
186  //temp test
187  tStats->getPotential();
195    
196    if (nConstrained){
197      preMove();
# Line 213 | Line 220 | template<typename T> void Integrator<T>::integrate(voi
220    MPIcheckPoint();
221   #endif // is_mpi
222  
223 <  while (info->getTime() < runTime){
224 <    if ((info->getTime() + dt) >= currStatus){
223 >  while (info->getTime() < runTime && !stopIntegrator()){
224 >    difference = info->getTime() + dt - currStatus;
225 >    if (difference > 0 || fabs(difference) < 1e-4 ){
226        calcPot = 1;
227        calcStress = 1;
228      }
# Line 247 | Line 255 | template<typename T> void Integrator<T>::integrate(voi
255  
256      if (info->getTime() >= currStatus){
257        statOut->writeStat(info->getTime());
258 +      statOut->writeRaw(info->getTime());
259        calcPot = 0;
260        calcStress = 0;
261        currStatus += statusTime;
# Line 268 | Line 277 | template<typename T> void Integrator<T>::integrate(voi
277      MPIcheckPoint();
278   #endif // is_mpi
279    }
280 +
281 +  // dump out a file containing the omega values for the final configuration
282 +  if (info->useThermInt)
283 +    myFF->dumpzAngle();
284 +  
285  
286    delete dumpOut;
287    delete statOut;
# Line 303 | Line 317 | template<typename T> void Integrator<T>::integrateStep
317    MPIcheckPoint();
318   #endif // is_mpi
319  
306
320    // calc forces
308
321    calcForce(calcPot, calcStress);
322  
323   #ifdef IS_MPI
# Line 340 | Line 352 | template<typename T> void Integrator<T>::moveA(void){
352    double Tb[3], ji[3];
353    double vel[3], pos[3], frc[3];
354    double mass;
355 +  double omega;
356  
357    for (i = 0; i < integrableObjects.size() ; i++){
358      integrableObjects[i]->getVel(vel);
# Line 690 | Line 703 | template<typename T> void Integrator<T>::rotationPropa
703  
704    double angle;
705    double A[3][3], I[3][3];
706 +  int i, j, k;
707  
708    // use the angular velocities to propagate the rotation matrix a
709    // full time step
# Line 697 | Line 711 | template<typename T> void Integrator<T>::rotationPropa
711    sd->getA(A);
712    sd->getI(I);
713  
714 <  // rotate about the x-axis
715 <  angle = dt2 * ji[0] / I[0][0];
716 <  this->rotate( 1, 2, angle, ji, A );
717 <
718 <  // rotate about the y-axis
719 <  angle = dt2 * ji[1] / I[1][1];
720 <  this->rotate( 2, 0, angle, ji, A );
707 <
708 <  // rotate about the z-axis
709 <  angle = dt * ji[2] / I[2][2];
710 <  this->rotate( 0, 1, angle, ji, A);
714 >  if (sd->isLinear()) {
715 >    i = sd->linearAxis();
716 >    j = (i+1)%3;
717 >    k = (i+2)%3;
718 >    
719 >    angle = dt2 * ji[j] / I[j][j];
720 >    this->rotate( k, i, angle, ji, A );
721  
722 <  // rotate about the y-axis
723 <  angle = dt2 * ji[1] / I[1][1];
714 <  this->rotate( 2, 0, angle, ji, A );
722 >    angle = dt * ji[k] / I[k][k];
723 >    this->rotate( i, j, angle, ji, A);
724  
725 <  // rotate about the x-axis
726 <  angle = dt2 * ji[0] / I[0][0];
718 <  this->rotate( 1, 2, angle, ji, A );
725 >    angle = dt2 * ji[j] / I[j][j];
726 >    this->rotate( k, i, angle, ji, A );
727  
728 +  } else {
729 +    // rotate about the x-axis
730 +    angle = dt2 * ji[0] / I[0][0];
731 +    this->rotate( 1, 2, angle, ji, A );
732 +    
733 +    // rotate about the y-axis
734 +    angle = dt2 * ji[1] / I[1][1];
735 +    this->rotate( 2, 0, angle, ji, A );
736 +    
737 +    // rotate about the z-axis
738 +    angle = dt * ji[2] / I[2][2];
739 +    sd->addZangle(angle);
740 +    this->rotate( 0, 1, angle, ji, A);
741 +    
742 +    // rotate about the y-axis
743 +    angle = dt2 * ji[1] / I[1][1];
744 +    this->rotate( 2, 0, angle, ji, A );
745 +    
746 +    // rotate about the x-axis
747 +    angle = dt2 * ji[0] / I[0][0];
748 +    this->rotate( 1, 2, angle, ji, A );
749 +    
750 +  }
751    sd->setA( A  );
752   }
753  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines