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 804 by mmeineke, Thu Oct 16 19:16:24 2003 UTC vs.
Revision 999 by chrisfen, Fri Jan 30 15:01:09 2004 UTC

# Line 1 | Line 1
1   #include <iostream>
2 < #include <cstdlib>
3 < #include <cmath>
2 > #include <stdlib.h>
3 > #include <math.h>
4  
5   #ifdef IS_MPI
6   #include "mpiSimulation.hpp"
7   #include <unistd.h>
8   #endif //is_mpi
9  
10 + #ifdef PROFILE
11 + #include "mdProfile.hpp"
12 + #endif // profile
13 +
14   #include "Integrator.hpp"
15   #include "simError.h"
16  
# Line 25 | Line 29 | template<typename T> Integrator<T>::Integrator(SimInfo
29    if (info->the_integrator != NULL){
30      delete info->the_integrator;
31    }
32 <  
32 >
33    nAtoms = info->n_atoms;
34  
35    // check for constraints
# Line 131 | Line 135 | template<typename T> void Integrator<T>::checkConstrai
135      }
136  
137  
138 <    // save oldAtoms to check for lode balanceing later on.
138 >    // save oldAtoms to check for lode balancing later on.
139  
140      oldAtoms = nAtoms;
141  
# Line 158 | Line 162 | template<typename T> void Integrator<T>::integrate(voi
162    double currThermal;
163    double currStatus;
164    double currReset;
165 <  
165 >
166    int calcPot, calcStress;
167  
168    tStats = new Thermo(info);
# Line 179 | Line 183 | template<typename T> void Integrator<T>::integrate(voi
183    if (nConstrained){
184      preMove();
185      constrainA();
186 <    calcForce(1, 1);    
186 >    calcForce(1, 1);
187      constrainB();
188    }
189    
# Line 198 | Line 202 | template<typename T> void Integrator<T>::integrate(voi
202    statOut->writeStat(info->getTime());
203  
204  
201
205   #ifdef IS_MPI
206    strcpy(checkPointMsg, "The integrator is ready to go.");
207    MPIcheckPoint();
# Line 210 | Line 213 | template<typename T> void Integrator<T>::integrate(voi
213        calcStress = 1;
214      }
215  
216 + #ifdef PROFILE
217 +    startProfile( pro1 );
218 + #endif
219 +    
220      integrateStep(calcPot, calcStress);
221  
222 + #ifdef PROFILE
223 +    endProfile( pro1 );
224 +
225 +    startProfile( pro2 );
226 + #endif // profile
227 +
228      info->incrTime(dt);
229  
230      if (info->setTemp){
# Line 227 | Line 240 | template<typename T> void Integrator<T>::integrate(voi
240      }
241  
242      if (info->getTime() >= currStatus){
243 <      statOut->writeStat(info->getTime());
244 <      calcPot = 0;
243 >      statOut->writeStat(info->getTime());
244 >      calcPot = 0;
245        calcStress = 0;
246        currStatus += statusTime;
247 <    }
247 >    }
248  
249      if (info->resetIntegrator){
250        if (info->getTime() >= currReset){
# Line 239 | Line 252 | template<typename T> void Integrator<T>::integrate(voi
252          currReset += resetTime;
253        }
254      }
255 +    
256 + #ifdef PROFILE
257 +    endProfile( pro2 );
258 + #endif //profile
259  
260   #ifdef IS_MPI
261      strcpy(checkPointMsg, "successfully took a time step.");
# Line 246 | Line 263 | template<typename T> void Integrator<T>::integrate(voi
263   #endif // is_mpi
264    }
265  
249
250  // write the last frame
251  dumpOut->writeDump(info->getTime());
252
266    delete dumpOut;
267    delete statOut;
268   }
# Line 257 | Line 270 | template<typename T> void Integrator<T>::integrateStep
270   template<typename T> void Integrator<T>::integrateStep(int calcPot,
271                                                         int calcStress){
272    // Position full step, and velocity half step
273 +
274 + #ifdef PROFILE
275 +  startProfile(pro3);
276 + #endif //profile
277 +
278    preMove();
279  
280 <  moveA();
280 > #ifdef PROFILE
281 >  endProfile(pro3);
282  
283 +  startProfile(pro4);
284 + #endif // profile
285  
286 +  moveA();
287  
288 + #ifdef PROFILE
289 +  endProfile(pro4);
290 +  
291 +  startProfile(pro5);
292 + #endif//profile
293  
294 +
295   #ifdef IS_MPI
296    strcpy(checkPointMsg, "Succesful moveA\n");
297    MPIcheckPoint();
# Line 279 | Line 307 | template<typename T> void Integrator<T>::integrateStep
307    MPIcheckPoint();
308   #endif // is_mpi
309  
310 + #ifdef PROFILE
311 +  endProfile( pro5 );
312  
313 +  startProfile( pro6 );
314 + #endif //profile
315 +
316    // finish the velocity  half step
317  
318    moveB();
319  
320 + #ifdef PROFILE
321 +  endProfile(pro6);
322 + #endif // profile
323  
288
324   #ifdef IS_MPI
325    strcpy(checkPointMsg, "Succesful moveB\n");
326    MPIcheckPoint();
# Line 366 | Line 401 | template<typename T> void Integrator<T>::moveB(void){
401      if (atoms[i]->isDirectional()){
402        dAtom = (DirectionalAtom *) atoms[i];
403  
404 <      // get and convert the torque to body frame      
404 >      // get and convert the torque to body frame
405  
406        dAtom->getTrq(Tb);
407        dAtom->lab2Body(Tb);
# Line 658 | Line 693 | template<typename T> void Integrator<T>::rotationPropa
693  
694    dAtom->getA(A);
695    dAtom->getI(I);
696 <  
697 <  // rotate about the x-axis      
696 >
697 >  // rotate about the x-axis
698    angle = dt2 * ji[0] / I[0][0];
699 <  this->rotate( 1, 2, angle, ji, A );
700 <  
699 >  this->rotate( 1, 2, angle, ji, A );
700 >
701    // rotate about the y-axis
702    angle = dt2 * ji[1] / I[1][1];
703    this->rotate( 2, 0, angle, ji, A );
704 <  
704 >
705    // rotate about the z-axis
706    angle = dt * ji[2] / I[2][2];
707    this->rotate( 0, 1, angle, ji, A);
708 <  
708 >
709    // rotate about the y-axis
710    angle = dt2 * ji[1] / I[1][1];
711    this->rotate( 2, 0, angle, ji, A );
712 <  
712 >
713    // rotate about the x-axis
714    angle = dt2 * ji[0] / I[0][0];
715    this->rotate( 1, 2, angle, ji, A );
716 <  
717 <  dAtom->setA( A  );    
716 >
717 >  dAtom->setA( A  );
718   }
719  
720   template<typename T> void Integrator<T>::rotate(int axes1, int axes2,
# Line 747 | Line 782 | template<typename T> void Integrator<T>::rotate(int ax
782      }
783    }
784  
785 <  // rotate the Rotation matrix acording to:
785 >  // rotate the Rotation matrix acording to:
786    //            A[][] = A[][] * transpose(rot[][])
787  
788  
# Line 776 | Line 811 | template<typename T> double Integrator<T>::getConserve
811   template<typename T> double Integrator<T>::getConservedQuantity(void){
812    return tStats->getTotalE();
813   }
814 + template<typename T> string Integrator<T>::getAdditionalParameters(void){
815 +  //By default, return a null string
816 +  //The reason we use string instead of char* is that if we use char*, we will
817 +  //return a pointer point to local variable which might cause problem
818 +  return string();
819 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines