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 642 by mmeineke, Mon Jul 21 16:23:57 2003 UTC vs.
Revision 767 by tim, Tue Sep 16 20:02:11 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 +    
76 + }
77 +
78   void SimInfo::setBox(double newBox[3]) {
79    
80    int i, j;
# Line 292 | 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 346 | 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 365 | 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 421 | 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 458 | Line 494 | void SimInfo::checkCutOffs( void ){
494  
495    int cutChanged = 0;
496  
497 +
498 +
499    if( boxIsInit ){
500      
501      //we need to check cutOffs against the box
502 <    
503 <    if( maxCutoff > rCut ){
502 >  
503 >    if(( maxCutoff > rCut )&&(usePBC)){
504        if( rCut < origRcut ){
505          rCut = origRcut;
506          if (rCut > maxCutoff) rCut = maxCutoff;
# Line 478 | Line 516 | void SimInfo::checkCutOffs( void ){
516  
517      if( maxCutoff > ecr ){
518        if( ecr < origEcr ){
519 <        rCut = origEcr;
519 >        ecr = origEcr;
520          if (ecr > maxCutoff) ecr = maxCutoff;
521          
522          sprintf( painCave.errMsg,
# Line 491 | Line 529 | void SimInfo::checkCutOffs( void ){
529      }
530  
531  
532 <    if (rCut > maxCutoff) {
532 >    if ((rCut > maxCutoff)&&(usePBC)) {
533        sprintf( painCave.errMsg,
534                 "New Box size is setting the long range cutoff radius "
535                 "to %lf\n",
# Line 511 | Line 549 | void SimInfo::checkCutOffs( void ){
549        ecr = maxCutoff;
550      }
551  
552 <    
553 <  }
516 <  
552 >
553 >    if( (oldEcr != ecr) || ( oldRcut != rCut ) ) cutChanged = 1;
554  
555 <  if( (oldEcr != ecr) || ( oldRcut != rCut ) ) cutChanged = 1;
519 <
520 <  // rlist is the 1.0 plus max( rcut, ecr )
521 <  
522 <  ( rCut > ecr )? rList = rCut + 1.0: rList = ecr + 1.0;
523 <
524 <  if( cutChanged ){
555 >    // rlist is the 1.0 plus max( rcut, ecr )
556      
557 <    notifyFortranCutOffs( &rCut, &rList, &ecr, &est );
557 >    ( rCut > ecr )? rList = rCut + 1.0: rList = ecr + 1.0;
558 >    
559 >    if( cutChanged ){
560 >      
561 >      notifyFortranCutOffs( &rCut, &rList, &ecr, &est );
562 >    }
563 >    
564 >    oldEcr = ecr;
565 >    oldRcut = rCut;
566 >
567 >  } else {
568 >    // initialize this stuff before using it, OK?
569 >      sprintf( painCave.errMsg,
570 >               "Trying to check cutoffs without a box. Be smarter.\n" );
571 >      painCave.isFatal = 1;
572 >      simError();      
573    }
574  
529  oldEcr = ecr;
530  oldRcut = rCut;
575   }
576 +
577 + void SimInfo::addProperty(GenericData* prop){
578 +
579 +  map<string, GenericData*>::iterator result;
580 +  result = properties.find(prop->getID());
581 +  
582 +  //we can't simply use  properties[prop->getID()] = prop,
583 +  //it will cause memory leak if we already contain a propery which has the same name of prop
584 +  
585 +  if(result != properties.end()){
586 +    
587 +    delete (*result).second;
588 +    (*result).second = prop;
589 +      
590 +  }
591 +  else{
592 +
593 +    properties[prop->getID()] = prop;
594 +
595 +  }
596 +    
597 + }
598 +
599 + GenericData* SimInfo::getProperty(const string& propName){
600 +
601 +  map<string, GenericData*>::iterator result;
602 +  
603 +  //string lowerCaseName = ();
604 +  
605 +  result = properties.find(propName);
606 +  
607 +  if(result != properties.end())
608 +    return (*result).second;  
609 +  else  
610 +    return NULL;  
611 + }
612 +
613 + vector<GenericData*> SimInfo::getProperties(){
614 +
615 +  vector<GenericData*> result;
616 +  map<string, GenericData*>::iterator i;
617 +  
618 +  for(i = properties.begin(); i != properties.end(); i++)
619 +    result.push_back((*i).second);
620 +    
621 +  return result;
622 + }
623 +
624 + double SimInfo::matTrace3(double m[3][3]){
625 +  double trace;
626 +  trace = m[0][0] + m[1][1] + m[2][2];
627 +
628 +  return trace;
629 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines