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

Comparing trunk/OOPSE/libmdtools/OtherVisitor.cpp (file contents):
Revision 1119 by tim, Mon Apr 19 17:44:48 2004 UTC vs.
Revision 1129 by tim, Thu Apr 22 03:29:30 2004 UTC

# Line 15 | Line 15 | void IgnoreVisitor::visit(RigidBody* rb){
15   }
16  
17   void IgnoreVisitor::visit(RigidBody* rb){
18 <  if(isIgnoreType(rb->getType()))
18 >  vector<Atom*> myAtoms;
19 >  vector<Atom*>::iterator atomIter;
20 >  AtomInfo* atomInfo;
21 >  
22 >  if(isIgnoreType(rb->getType())){
23 >    
24      internalVisit(rb);
25 +
26 +    myAtoms = rb->getAtoms();    
27 +    
28 +    for(atomIter = myAtoms.begin(); atomIter != myAtoms.end(); ++atomIter)
29 +      internalVisit(*atomIter);
30 +
31 +  }
32 +  
33   }
34  
35   bool IgnoreVisitor::isIgnoreType(const string& name){
# Line 47 | Line 60 | const string IgnoreVisitor::toString(){
60    sprintf(buffer ,"Visitor name: %s", visitorName.c_str());
61    result += buffer;
62  
63 +  sprintf(buffer ,"Visitor Description: ignore  stuntdoubles\n");
64 +  result += buffer;
65 +
66    //print the ignore type list
67    sprintf(buffer , "Ignore type list contains below types:\n");
68    result += buffer;
69  
70    for(i = itList.begin(); i != itList.end(); ++i){
71 <    sprintf(buffer ,"%s,\t", i->c_str());
71 >    sprintf(buffer ,"%s\t", i->c_str());
72      result += buffer;
73  
74    }
# Line 62 | Line 78 | const string IgnoreVisitor::toString(){
78    sprintf(buffer ,"------------------------------------------------------------------\n");
79    result += buffer;
80  
81 <  return buffer;
81 >  return result;
82   }
83  
84   //----------------------------------------------------------------------------//
# Line 82 | Line 98 | void WrappingVisitor::internalVisit(StuntDouble* sd){
98    GenericData* data;
99    AtomData* atomData;
100    AtomInfo* atomInfo;
85  double pos[3];
101    vector<AtomInfo*>::iterator i;
102  
103    data = sd->getProperty("ATOMDATA");
104 <  if(data != NULL)
104 >  if(data != NULL){
105      atomData = dynamic_cast<AtomData*>(data);  
106      if(atomData == NULL)
107        return;
108 +  }
109    else
110      return;
111  
112 <  for(atomInfo = atomData->beginAtomInfo(i); atomInfo != NULL; atomData->nextAtomInfo(i))
112 >  for(atomInfo = atomData->beginAtomInfo(i); atomInfo; atomInfo = atomData->nextAtomInfo(i))
113      info->wrapVector(atomInfo->pos);
114 +
115    
116   }
117  
118 + const string WrappingVisitor::toString(){
119 +  char buffer[65535];
120 +  string result;
121 +  
122 +  sprintf(buffer ,"------------------------------------------------------------------\n");
123 +  result += buffer;
124 +
125 +  sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
126 +  result += buffer;
127 +
128 +  sprintf(buffer ,"Visitor Description: wrapping atoms back to periodic box\n");
129 +  result += buffer;
130 +
131 +  sprintf(buffer,"------------------------------------------------------------------\n");
132 +  result += buffer;
133 +
134 +  return result;
135 + }
136 +
137   //----------------------------------------------------------------------------//
138  
139 < ReplicateVisitor::ReplicateVisitor(SimInfo* info, IntVec3 replicateOpt) : BaseVisitor(){
139 > ReplicateVisitor::ReplicateVisitor(SimInfo* info, IntVec3 opt) : BaseVisitor(){
140    this->info = info;
141    visitorName = "ReplicateVisitor";
142 <  this->replicateOpt = replicateOpt;
142 >  this->replicateOpt = opt;
143    //generate the replicate directions
144 <  for(int i = 0; i < replicateOpt[0]; i ++)
145 <    for(int j = 0; i < replicateOpt[1]; j ++)
146 <      for(int k = 0; i < replicateOpt[2]; k ++)
144 >  for(int i = 0; i <= replicateOpt[0]; i ++)
145 >    for(int j = 0; j <= replicateOpt[1]; j ++)
146 >      for(int k = 0; k <= replicateOpt[2]; k ++)
147          //skip original frame
148          if(i == 0 && j ==0 && k ==0)
149            continue;
# Line 136 | Line 172 | void ReplicateVisitor::internalVisit(StuntDouble* sd){
172    
173    //if there is not atom data, just skip it
174    data = sd->getProperty("ATOMDATA");
175 <  if(data != NULL)
175 >  if(data != NULL){
176      atomData = dynamic_cast<AtomData*>(data);  
177      if(atomData == NULL)
178        return;
179 +  }
180    else
181      return;
182  
# Line 178 | Line 215 | const string ReplicateVisitor::toString(){
215    sprintf(buffer ,"------------------------------------------------------------------\n");
216    result += buffer;
217  
218 <  sprintf(buffer ,"Visitor name: %s", visitorName.c_str());
218 >  sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
219    result += buffer;
220  
221 +  sprintf(buffer ,"Visitor Description: replicate the atoms in different direction\n");
222 +  result += buffer;
223 +  
224    //print the replicate direction
225    sprintf(buffer , "repeatX = %d:\n", replicateOpt[0]);
226    result += buffer;
# Line 255 | Line 295 | void XYZVisitor::internalVisit(StuntDouble* sd){
295                    atomInfo->AtomType.c_str(),
296                    atomInfo->pos[0],
297                    atomInfo->pos[1],
298 <                  atomInfo->pos[2]);        
298 >                  atomInfo->pos[2]);  
299 >
300 >    frame.push_back(buffer);
301 >              
302    }
303  
261  frame.push_back(buffer);
262          
304   }
305  
306   bool XYZVisitor::isIgnore(StuntDouble* sd){
# Line 294 | Line 335 | void XYZVisitor::writeFrame(ostream& outStream){
335      outStream << *i << endl;
336   }
337  
338 + const string XYZVisitor::toString(){
339 +  char buffer[65535];
340 +  string result;
341 +  
342 +  sprintf(buffer ,"------------------------------------------------------------------\n");
343 +  result += buffer;
344 +
345 +  sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
346 +  result += buffer;
347 +
348 +  sprintf(buffer ,"Visitor Description: assemble the atom data and output xyz file\n");
349 +  result += buffer;
350 +
351 +  sprintf(buffer,"------------------------------------------------------------------\n");
352 +  result += buffer;
353 +
354 +  return result;
355 + }
356 +
357   //----------------------------------------------------------------------------//
358  
359 < void PrepareVisitor::internalVisit(StuntDouble * sd){
359 > void PrepareVisitor::internalVisit(Atom * atom){
360    GenericData* data;
361    AtomData* atomData;
362  
363    //if visited property is  existed, remove it
364 <  data = sd->getProperty("VISITED");
364 >  data = atom->getProperty("VISITED");
365    if(data != NULL){
366 <    sd->removeProperty("VISITED");  
366 >    atom->removeProperty("VISITED");  
367    }
368  
369    //remove atomdata
370 <  data = sd->getProperty("ATOMDATA");
370 >  data = atom->getProperty("ATOMDATA");
371    if(data != NULL){
372      atomData = dynamic_cast<AtomData*>(data);  
373      if(atomData != NULL)
374 <      sd->removeProperty("ATOMDATA");
374 >      atom->removeProperty("ATOMDATA");
375 >  }
376 >  
377 > }
378 >
379 > void PrepareVisitor::internalVisit(RigidBody * rb){
380 >  GenericData* data;
381 >  AtomData* atomData;
382 >  vector<Atom*> myAtoms;
383 >  vector<Atom*>::iterator atomIter;
384 >  
385 >  //if visited property is  existed, remove it
386 >  data = rb->getProperty("VISITED");
387 >  if(data != NULL){
388 >    rb->removeProperty("VISITED");  
389    }
390 +
391 +  //remove atomdata
392 +  data = rb->getProperty("ATOMDATA");
393 +  if(data != NULL){
394 +    atomData = dynamic_cast<AtomData*>(data);  
395 +    if(atomData != NULL)
396 +      rb->removeProperty("ATOMDATA");
397 +  }
398 +
399 +  myAtoms = rb->getAtoms();
400 +    
401 +  for(atomIter = myAtoms.begin(); atomIter != myAtoms.end(); ++atomIter)
402 +   internalVisit (*atomIter);  
403 + }
404 +
405 + const string PrepareVisitor::toString(){
406 +  char buffer[65535];
407 +  string result;
408    
409 +  sprintf(buffer ,"------------------------------------------------------------------\n");
410 +  result += buffer;
411 +
412 +  sprintf(buffer ,"Visitor name: %s", visitorName.c_str());
413 +  result += buffer;
414 +
415 +  sprintf(buffer ,"Visitor Description: prepare for operation of other vistors\n");
416 +  result += buffer;
417 +
418 +  sprintf(buffer ,"------------------------------------------------------------------\n");
419 +  result += buffer;
420 +
421 +  return result;
422   }
423  
424 + //----------------------------------------------------------------------------//
425 +
426 + WaterTypeVisitor:: WaterTypeVisitor(){
427 +  visitorName = "WaterTypeVisitor";
428 +  waterTypeList.insert("TIP3P_RB_0");
429 +  waterTypeList.insert("TIP4P_RB_0");
430 +  waterTypeList.insert("TIP5P_RB_0");
431 +  waterTypeList.insert("SPCE_RB_0");  
432 + }
433 +
434 +
435 + void WaterTypeVisitor:: visit(RigidBody* rb){
436 +  string rbName;
437 +  vector<Atom*> myAtoms;
438 +  vector<Atom*>::iterator atomIter;
439 +  GenericData* data;
440 +  AtomData* atomData;
441 +  AtomInfo* atomInfo;
442 +  vector<AtomInfo*>::iterator i;
443 +  
444 +  rbName = rb->getType();
445 +
446 +  if(waterTypeList.find(rbName) != waterTypeList.end()){
447 +
448 +    myAtoms = rb->getAtoms();    
449 +    for(atomIter = myAtoms.begin(); atomIter != myAtoms.end(); ++atomIter){
450 +
451 +      data = (*atomIter)->getProperty("ATOMDATA");
452 +      if(data != NULL){
453 +        atomData = dynamic_cast<AtomData*>(data);  
454 +        if(atomData == NULL)
455 +          continue;
456 +      }
457 +      else
458 +        continue;
459 +      
460 +      for(atomInfo = atomData->beginAtomInfo(i); atomInfo; atomInfo = atomData->nextAtomInfo(i)){
461 +        replaceType(atomInfo->AtomType);
462 +      }//end for(atomInfo)
463 +
464 +    }//end for(atomIter)
465 +      
466 +  }//end if (waterTypeList.find(rbName) != waterTypeList.end())
467 +  
468 + }
469 +
470 + void WaterTypeVisitor:: replaceType(string& atomType){
471 +  atomType = atomType.substr(0, atomType.find('_'));
472 + }
473 +
474 + const string WaterTypeVisitor:: toString(){
475 +  char buffer[65535];
476 +  string result;
477 +  
478 +  sprintf(buffer ,"------------------------------------------------------------------\n");
479 +  result += buffer;
480 +
481 +  sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
482 +  result += buffer;
483 +
484 +  sprintf(buffer ,"Visitor Description: Replace the atom type in water model\n");
485 +  result += buffer;
486 +
487 +  sprintf(buffer ,"------------------------------------------------------------------\n");
488 +  result += buffer;
489 +
490 +  return result;
491 + }
492 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines