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 572 by mmeineke, Wed Jul 2 21:26:55 2003 UTC vs.
Revision 594 by mmeineke, Fri Jul 11 22:34:48 2003 UTC

# Line 27 | Line 27 | Integrator::Integrator( SimInfo *theInfo, ForceFields*
27  
28    nAtoms = info->n_atoms;
29  
30 +  std::cerr << "integ nAtoms = "  << nAtoms << "\n";
31 +
32    // check for constraints
33    
34    constrainedA    = NULL;
# Line 72 | Line 74 | void Integrator::checkConstraints( void ){
74      for(int j=0; j<molecules[i].getNBonds(); j++){
75        
76        constrained = theArray[j]->is_constrained();
77 +
78 +      std::cerr << "Is the folowing bond constrained \n";
79 +      theArray[j]->printMe();
80        
81        if(constrained){
82          
83 +        std::cerr << "Yes\n";
84 +
85          dummy_plug = theArray[j]->get_constraint();
86          temp_con[nConstrained].set_a( dummy_plug->get_a() );
87          temp_con[nConstrained].set_b( dummy_plug->get_b() );
# Line 82 | Line 89 | void Integrator::checkConstraints( void ){
89          
90          nConstrained++;
91          constrained = 0;
92 <      }
92 >      }
93 >      else std::cerr << "No.\n";
94      }
95  
96      theArray = (SRI**) molecules[i].getMyBends();
# Line 226 | Line 234 | void Integrator::integrate( void ){
234        calcStress = 1;
235      }
236  
237 +    std::cerr << "calcPot = " << calcPot << "; calcStress = "
238 +              << calcStress << "\n";
239 +
240      integrateStep( calcPot, calcStress );
241        
242      currTime += dt;
# Line 293 | Line 304 | void Integrator::moveA( void ){
304    double Tb[3];
305    double ji[3];
306    double angle;
307 +  double A[3][3];
308  
309  
298
310    for( i=0; i<nAtoms; i++ ){
311      atomIndex = i * 3;
312      aMatIndex = i * 9;
# Line 303 | Line 314 | void Integrator::moveA( void ){
314      // velocity half step
315      for( j=atomIndex; j<(atomIndex+3); j++ )
316        vel[j] += ( dt2 * frc[j] / atoms[i]->getMass() ) * eConvert;
317 +
318 +    std::cerr<< "MoveA vel[" << i << "] = "
319 +             << vel[atomIndex] << "\t"
320 +             << vel[atomIndex+1]<< "\t"
321 +             << vel[atomIndex+2]<< "\n";
322  
323      // position whole step    
324      for( j=atomIndex; j<(atomIndex+3); j++ ) pos[j] += dt * vel[j];
325      
326 +
327 +    std::cerr<< "MoveA pos[" << i << "] = "
328 +             << pos[atomIndex] << "\t"
329 +             << pos[atomIndex+1]<< "\t"
330 +             << pos[atomIndex+2]<< "\n";
331 +
332      if( atoms[i]->isDirectional() ){
333  
334        dAtom = (DirectionalAtom *)atoms[i];
# Line 327 | Line 349 | void Integrator::moveA( void ){
349        
350        // use the angular velocities to propagate the rotation matrix a
351        // full time step
352 +      
353 +          // get the atom's rotation matrix
354 +          
355 +      A[0][0] = dAtom->getAxx();
356 +      A[0][1] = dAtom->getAxy();
357 +      A[0][2] = dAtom->getAxz();
358 +      
359 +      A[1][0] = dAtom->getAyx();
360 +      A[1][1] = dAtom->getAyy();
361 +      A[1][2] = dAtom->getAyz();
362        
363 +      A[2][0] = dAtom->getAzx();
364 +      A[2][1] = dAtom->getAzy();
365 +      A[2][2] = dAtom->getAzz();
366 +      
367        // rotate about the x-axis      
368        angle = dt2 * ji[0] / dAtom->getIxx();
369 <      this->rotate( 1, 2, angle, ji, &Amat[aMatIndex] );
369 >      this->rotate( 1, 2, angle, ji, A );
370        
371        // rotate about the y-axis
372        angle = dt2 * ji[1] / dAtom->getIyy();
373 <      this->rotate( 2, 0, angle, ji, &Amat[aMatIndex] );
373 >      this->rotate( 2, 0, angle, ji, A );
374        
375        // rotate about the z-axis
376        angle = dt * ji[2] / dAtom->getIzz();
377 <      this->rotate( 0, 1, angle, ji, &Amat[aMatIndex] );
377 >      this->rotate( 0, 1, angle, ji, A );
378        
379        // rotate about the y-axis
380        angle = dt2 * ji[1] / dAtom->getIyy();
381 <      this->rotate( 2, 0, angle, ji, &Amat[aMatIndex] );
381 >      this->rotate( 2, 0, angle, ji, A );
382        
383         // rotate about the x-axis
384        angle = dt2 * ji[0] / dAtom->getIxx();
385 <      this->rotate( 1, 2, angle, ji, &Amat[aMatIndex] );
385 >      this->rotate( 1, 2, angle, ji, A );
386        
387        dAtom->setJx( ji[0] );
388        dAtom->setJy( ji[1] );
# Line 371 | Line 407 | void Integrator::moveB( void ){
407      for( j=atomIndex; j<(atomIndex+3); j++ )
408        vel[j] += ( dt2 * frc[j] / atoms[i]->getMass() ) * eConvert;
409  
410 +    std::cerr<< "MoveB vel[" << i << "] = "
411 +             << vel[atomIndex] << "\t"
412 +             << vel[atomIndex+1]<< "\t"
413 +             << vel[atomIndex+2]<< "\n";
414 +
415 +
416      if( atoms[i]->isDirectional() ){
417        
418        dAtom = (DirectionalAtom *)atoms[i];
# Line 422 | Line 464 | void Integrator::constrainA(){
464    double gab;
465    int iteration;
466  
425
426  
467    for( i=0; i<nAtoms; i++){
468      
469      moving[i] = 0;
# Line 650 | Line 690 | void Integrator::rotate( int axes1, int axes2, double
690  
691  
692   void Integrator::rotate( int axes1, int axes2, double angle, double ji[3],
693 <                         double A[9] ){
693 >                         double A[3][3] ){
694  
695    int i,j,k;
696    double sinAngle;
# Line 666 | Line 706 | void Integrator::rotate( int axes1, int axes2, double
706  
707    for(i=0; i<3; i++){
708      for(j=0; j<3; j++){
709 <      tempA[j][i] = A[3*i + j];
709 >      tempA[j][i] = A[i][j];
710      }
711    }
712  
# Line 723 | Line 763 | void Integrator::rotate( int axes1, int axes2, double
763  
764    for(i=0; i<3; i++){
765      for(j=0; j<3; j++){
766 <      A[3*j + i] = 0.0;
766 >      A[j][i] = 0.0;
767        for(k=0; k<3; k++){
768 <        A[3*j + i] += tempA[i][k] * rot[j][k];
768 >        A[j][i] += tempA[i][k] * rot[j][k];
769        }
770      }
771    }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines