ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/io/RestReader.cpp
(Generate patch)

Comparing:
trunk/src/io/RestReader.cpp (file contents), Revision 1407 by cli2, Wed Jan 20 16:04:40 2010 UTC vs.
branches/development/src/io/RestReader.cpp (file contents), Revision 1769 by gezelter, Mon Jul 9 14:15:52 2012 UTC

# Line 36 | Line 36
36   * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37   * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38   * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
39 < * [4]  Vardeman & Gezelter, in progress (2009).                        
39 > * [4]  Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
40 > * [5]  Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41   */
42  
43  
# Line 191 | Line 192 | namespace OpenMD {
192  
193      scanFile();
194  
194
195      readSet();
196  
197  
# Line 280 | Line 280 | namespace OpenMD {
280  
281      int index = tokenizer.nextTokenAsInt();
282  
283 +    StuntDouble* sd = info_->getIOIndexToIntegrableObject(index);
284 +
285 +    if (sd == NULL) {
286 +      return;
287 +    }
288    
289 <    if (index < 1116){
290 <      std::string type = tokenizer.nextToken();
291 <      
292 <      Vector3d pos;
293 <      
294 <      pos[0] = tokenizer.nextTokenAsDouble();
295 <      pos[1] = tokenizer.nextTokenAsDouble();
296 <      pos[2] = tokenizer.nextTokenAsDouble();
297 <      
298 <      all_pos_[index] = pos;
294 <    }else{
295 <      
296 <      bool exist = false;
297 <      int indexCount = 0;
298 <      
299 <      while ( (!exist) && (indexCount < stuntDoubleIndex_.size())){
300 <        if (index == stuntDoubleIndex_[indexCount])
301 <          exist = true;
302 <        indexCount++;
303 <      }
304 <      
305 <      StuntDouble* integrableObject;
306 <      
307 <      if (exist){
308 <        
309 <        integrableObject = info_->getIOIndexToIntegrableObject(index);
310 <        
311 <        int compareindex = integrableObject->getGlobalIntegrableObjectIndex();
312 <        
313 <        if (integrableObject == NULL) {
314 <          return;
315 <        }  
316 <        
317 <        std::string type = tokenizer.nextToken();
318 <        
319 <        Vector3d pos;
320 <        
289 >    std::string type = tokenizer.nextToken();
290 >    int size = type.size();
291 >    
292 >    Vector3d pos;
293 >    Quat4d q;
294 >
295 >    for(int i = 0; i < size; ++i) {
296 >      switch(type[i]) {
297 >
298 >      case 'p': {
299          pos[0] = tokenizer.nextTokenAsDouble();
300          pos[1] = tokenizer.nextTokenAsDouble();
301          pos[2] = tokenizer.nextTokenAsDouble();
302 <        
302 >        break;
303 >      }
304 >      case 'v' : {
305          Vector3d vel;
306          vel[0] = tokenizer.nextTokenAsDouble();
307          vel[1] = tokenizer.nextTokenAsDouble();
308          vel[2] = tokenizer.nextTokenAsDouble();
309 <        
310 <        
311 <        Quat4d q;
312 <        if (integrableObject->isDirectional()) {
309 >        break;
310 >      }
311 >
312 >      case 'q' : {
313 >        if (sd->isDirectional()) {
314            
315            q[0] = tokenizer.nextTokenAsDouble();
316            q[1] = tokenizer.nextTokenAsDouble();
317            q[2] = tokenizer.nextTokenAsDouble();
318            q[3] = tokenizer.nextTokenAsDouble();
319 <        }  
320 <        // keep the position in case we need it for a molecular restraint:
321 <        
322 <        all_pos_[index] = pos;
323 <        
324 <        // is this io restrained?
325 <        GenericData* data = integrableObject->getPropertyByName("Restraint");
326 <        ObjectRestraint* oRest;
319 >          
320 >          RealType qlen = q.length();
321 >          if (qlen < OpenMD::epsilon) { //check quaternion is not equal to 0
322 >            
323 >            sprintf(painCave.errMsg,
324 >                    "RestReader Error: initial quaternion error (q0^2 + q1^2 + q2^2 + q3^2) ~ 0\n");
325 >            painCave.isFatal = 1;
326 >            simError();            
327 >          }  
328 >              
329 >          q.normalize();
330 >        }          
331 >        break;
332 >      }  
333 >      case 'j' : {
334 >        Vector3d ji;
335 >        if (sd->isDirectional()) {
336 >          ji[0] = tokenizer.nextTokenAsDouble();
337 >          ji[1] = tokenizer.nextTokenAsDouble();
338 >          ji[2] = tokenizer.nextTokenAsDouble();
339 >        }
340 >        break;
341 >      }  
342 >      case 'f': {        
343 >        Vector3d force;
344 >        force[0] = tokenizer.nextTokenAsDouble();
345 >        force[1] = tokenizer.nextTokenAsDouble();
346 >        force[2] = tokenizer.nextTokenAsDouble();          
347 >        break;
348 >      }
349 >      case 't' : {        
350 >        Vector3d torque;
351 >        torque[0] = tokenizer.nextTokenAsDouble();
352 >        torque[1] = tokenizer.nextTokenAsDouble();
353 >        torque[2] = tokenizer.nextTokenAsDouble();          
354 >        break;
355 >      }
356 >      default: {
357 >        sprintf(painCave.errMsg,
358 >                "RestReader Error: %s is an unrecognized type\n", type.c_str());
359 >        painCave.isFatal = 1;
360 >        simError();    
361 >        break;  
362 >      }
363 >      }
364 >      // keep the position in case we need it for a molecular restraint:
365 >
366 >      all_pos_[index] = pos;      
367          
368 <        if (data != NULL) {
369 <          // make sure we can reinterpret the generic data as restraint data:
370 <          RestraintData* restData= dynamic_cast<RestraintData*>(data);        
371 <          if (restData != NULL) {
372 <            // make sure we can reinterpet the restraint data as a pointer to
368 >      // is this io restrained?
369 >      GenericData* data = sd->getPropertyByName("Restraint");
370 >      ObjectRestraint* oRest;
371 >      
372 >      if (data != NULL) {
373 >        // make sure we can reinterpret the generic data as restraint data:
374 >        RestraintData* restData= dynamic_cast<RestraintData*>(data);        
375 >        if (restData != NULL) {
376 >          // make sure we can reinterpet the restraint data as a pointer to
377              // an ObjectRestraint:
378 <            oRest = dynamic_cast<ObjectRestraint*>(restData->getData());
379 <            if (oRest != NULL) {          
380 <              if (integrableObject->isDirectional()) {
381 <                oRest->setReferenceStructure(pos, q.toRotationMatrix3());
382 <              } else {                          
383 <                oRest->setReferenceStructure(pos);
359 <              }
378 >          oRest = dynamic_cast<ObjectRestraint*>(restData->getData());
379 >          if (oRest != NULL) {          
380 >            if (sd->isDirectional()) {
381 >              oRest->setReferenceStructure(pos, q.toRotationMatrix3());
382 >            } else {                          
383 >              oRest->setReferenceStructure(pos);
384              }
385            }
386          }

Comparing:
trunk/src/io/RestReader.cpp (property svn:keywords), Revision 1407 by cli2, Wed Jan 20 16:04:40 2010 UTC vs.
branches/development/src/io/RestReader.cpp (property svn:keywords), Revision 1769 by gezelter, Mon Jul 9 14:15:52 2012 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines