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

Comparing trunk/OOPSE/libmdtools/SimInfo.cpp (file contents):
Revision 660 by tim, Thu Jul 31 19:59:34 2003 UTC vs.
Revision 770 by gezelter, Fri Sep 19 14:55:41 2003 UTC

# Line 26 | Line 26 | SimInfo::SimInfo(){
26   SimInfo::SimInfo(){
27    excludes = NULL;
28    n_constraints = 0;
29 +  nZconstraints = 0;
30    n_oriented = 0;
31    n_dipoles = 0;
32    ndf = 0;
33    ndfRaw = 0;
34 +  nZconstraints = 0;
35    the_integrator = NULL;
36    setTemp = 0;
37    thermalTime = 0.0;
38    currentTime = 0.0;
39    rCut = 0.0;
40 +  origRcut = -1.0;
41    ecr = 0.0;
42 +  origEcr = -1.0;
43    est = 0.0;
44    oldEcr = 0.0;
45    oldRcut = 0.0;
# Line 54 | Line 58 | SimInfo::SimInfo(){
58    useGB = 0;
59    useEAM = 0;
60  
61 +  myConfiguration = new SimState();
62 +
63    wrapMeSimInfo( this );
64   }
65  
66 +
67   SimInfo::~SimInfo(){
68  
69 +  delete myConfiguration;
70 +
71    map<string, GenericData*>::iterator i;
72    
73    for(i = properties.begin(); i != properties.end(); i++)
74      delete (*i).second;
75 <
67 <  
75 >    
76   }
77  
78   void SimInfo::setBox(double newBox[3]) {
# Line 302 | Line 310 | void SimInfo::calcBoxL( void ){
310    dsq = dx*dx + dy*dy + dz*dz;
311    boxL[2] = sqrt( dsq );
312    if( (0.5 * boxL[2]) < maxCutoff ) maxCutoff = 0.5 * boxL[2];
313 +  
314 +  checkCutOffs();
315  
316   }
317  
# Line 356 | Line 366 | int SimInfo::getNDF(){
366    ndf = ndf_local;
367   #endif
368  
369 <  ndf = ndf - 3;
369 >  ndf = ndf - 3 - nZconstraints;
370  
371    return ndf;
372   }
# Line 375 | Line 385 | int SimInfo::getNDFraw() {
385  
386    return ndfRaw;
387   }
388 <
388 >
389 > int SimInfo::getNDFtranslational() {
390 >  int ndfTrans_local, ndfTrans;
391 >
392 >  ndfTrans_local = 3 * n_atoms - n_constraints;
393 >
394 > #ifdef IS_MPI
395 >  MPI_Allreduce(&ndfTrans_local,&ndfTrans,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD);
396 > #else
397 >  ndfTrans = ndfTrans_local;
398 > #endif
399 >
400 >  ndfTrans = ndfTrans - 3 - nZconstraints;
401 >
402 >  return ndfTrans;
403 > }
404 >
405   void SimInfo::refreshSim(){
406  
407    simtype fInfo;
# Line 431 | Line 457 | void SimInfo::refreshSim(){
457  
458    this->ndf = this->getNDF();
459    this->ndfRaw = this->getNDFraw();
460 <
460 >  this->ndfTrans = this->getNDFtranslational();
461   }
462  
463  
# Line 467 | Line 493 | void SimInfo::checkCutOffs( void ){
493   void SimInfo::checkCutOffs( void ){
494  
495    int cutChanged = 0;
496 <
496 >  
497    if( boxIsInit ){
498      
499      //we need to check cutOffs against the box
500      
501 <    if( maxCutoff > rCut ){
501 >    if(( maxCutoff > rCut )&&(usePBC)){
502        if( rCut < origRcut ){
503          rCut = origRcut;
504          if (rCut > maxCutoff) rCut = maxCutoff;
505          
506          sprintf( painCave.errMsg,
507                   "New Box size is setting the long range cutoff radius "
508 <                 "to %lf\n",
509 <                 rCut );
508 >                 "to %lf at time %lf\n",
509 >                 rCut, currentTime );
510          painCave.isFatal = 0;
511          simError();
512        }
513      }
514 <
514 >    
515      if( maxCutoff > ecr ){
516        if( ecr < origEcr ){
517 <        rCut = origEcr;
517 >        ecr = origEcr;
518          if (ecr > maxCutoff) ecr = maxCutoff;
519          
520          sprintf( painCave.errMsg,
521                   "New Box size is setting the electrostaticCutoffRadius "
522 <                 "to %lf\n",
523 <                 ecr );
522 >                 "to %lf at time %lf\n",
523 >                 ecr, currentTime );
524          painCave.isFatal = 0;
525          simError();
526        }
527      }
528 <
529 <
530 <    if (rCut > maxCutoff) {
528 >    
529 >    
530 >    if ((rCut > maxCutoff)&&(usePBC)) {
531        sprintf( painCave.errMsg,
532                 "New Box size is setting the long range cutoff radius "
533 <               "to %lf\n",
534 <               maxCutoff );
533 >               "to %lf at time %lf\n",
534 >               maxCutoff, currentTime );
535        painCave.isFatal = 0;
536        simError();
537        rCut = maxCutoff;
538      }
539 <
539 >    
540      if( ecr > maxCutoff){
541        sprintf( painCave.errMsg,
542                 "New Box size is setting the electrostaticCutoffRadius "
543 <               "to %lf\n",
544 <               maxCutoff  );
543 >               "to %lf at time %lf\n",
544 >               maxCutoff, currentTime  );
545        painCave.isFatal = 0;
546        simError();      
547        ecr = maxCutoff;
548      }
549  
550 +    if( (oldEcr != ecr) || ( oldRcut != rCut ) ) cutChanged = 1;
551      
552 <  }
526 <  
527 <
528 <  if( (oldEcr != ecr) || ( oldRcut != rCut ) ) cutChanged = 1;
529 <
530 <  // rlist is the 1.0 plus max( rcut, ecr )
531 <  
532 <  ( rCut > ecr )? rList = rCut + 1.0: rList = ecr + 1.0;
533 <
534 <  if( cutChanged ){
552 >    // rlist is the 1.0 plus max( rcut, ecr )
553      
554 <    notifyFortranCutOffs( &rCut, &rList, &ecr, &est );
554 >    ( rCut > ecr )? rList = rCut + 1.0: rList = ecr + 1.0;
555 >    
556 >    if( cutChanged ){
557 >      
558 >      notifyFortranCutOffs( &rCut, &rList, &ecr, &est );
559 >    }
560 >    
561 >    oldEcr = ecr;
562 >    oldRcut = rCut;
563 >    
564 >  } else {
565 >    // initialize this stuff before using it, OK?
566 >    sprintf( painCave.errMsg,
567 >             "Trying to check cutoffs without a box. Be smarter.\n" );
568 >    painCave.isFatal = 1;
569 >    simError();      
570    }
571 <
539 <  oldEcr = ecr;
540 <  oldRcut = rCut;
571 >  
572   }
573  
574   void SimInfo::addProperty(GenericData* prop){
# Line 587 | Line 618 | vector<GenericData*> SimInfo::getProperties(){
618    return result;
619   }
620  
621 + double SimInfo::matTrace3(double m[3][3]){
622 +  double trace;
623 +  trace = m[0][0] + m[1][1] + m[2][2];
624  
625 +  return trace;
626 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines