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

Comparing trunk/src/io/DumpWriter.cpp (file contents):
Revision 1920 by gezelter, Mon Jun 17 18:28:30 2013 UTC vs.
Revision 1921 by gezelter, Thu Aug 1 18:23:07 2013 UTC

# Line 625 | Line 625 | namespace OpenMD {
625    }
626  
627    std::string DumpWriter::prepareSiteLine(StuntDouble* sd, int ioIndex, int siteIndex) {
628 <        
628 >    int storageLayout = info_->getSnapshotManager()->getStorageLayout();
629  
630      std::string id;
631      std::string type;
# Line 641 | Line 641 | namespace OpenMD {
641      }
642                
643      if (needFlucQ_) {
644 <      type += "cw";
645 <      RealType fqPos = sd->getFlucQPos();
646 <      if (isinf(fqPos) || isnan(fqPos) ) {      
647 <        sprintf( painCave.errMsg,
648 <                 "DumpWriter detected a numerical error writing the"
649 <                 " fluctuating charge for object %s", id.c_str());      
650 <        painCave.isFatal = 1;
651 <        simError();
652 <      }
653 <      sprintf(tempBuffer, " %13e ", fqPos);
654 <      line += tempBuffer;
655 <    
656 <      RealType fqVel = sd->getFlucQVel();
657 <      if (isinf(fqVel) || isnan(fqVel) ) {      
658 <        sprintf( painCave.errMsg,
659 <                 "DumpWriter detected a numerical error writing the"
660 <                 " fluctuating charge velocity for object %s", id.c_str());      
661 <        painCave.isFatal = 1;
662 <        simError();
663 <      }
664 <      sprintf(tempBuffer, " %13e ", fqVel);
665 <      line += tempBuffer;
644 >      if (storageLayout & DataStorage::dslFlucQPosition) {
645 >        type += "c";
646 >        RealType fqPos = sd->getFlucQPos();
647 >        if (isinf(fqPos) || isnan(fqPos) ) {      
648 >          sprintf( painCave.errMsg,
649 >                   "DumpWriter detected a numerical error writing the"
650 >                   " fluctuating charge for object %s", id.c_str());      
651 >          painCave.isFatal = 1;
652 >          simError();
653 >        }
654 >        sprintf(tempBuffer, " %13e ", fqPos);
655 >        line += tempBuffer;
656 >      }
657  
658 <      if (needForceVector_) {
659 <        type += "g";
660 <        RealType fqFrc = sd->getFlucQFrc();        
661 <        if (isinf(fqFrc) || isnan(fqFrc) ) {      
658 >      if (storageLayout & DataStorage::dslFlucQVelocity) {
659 >        type += "w";    
660 >        RealType fqVel = sd->getFlucQVel();
661 >        if (isinf(fqVel) || isnan(fqVel) ) {      
662            sprintf( painCave.errMsg,
663                     "DumpWriter detected a numerical error writing the"
664 <                   " fluctuating charge force for object %s", id.c_str());      
664 >                   " fluctuating charge velocity for object %s", id.c_str());      
665            painCave.isFatal = 1;
666            simError();
667          }
668 <        sprintf(tempBuffer, " %13e ", fqFrc);        
668 >        sprintf(tempBuffer, " %13e ", fqVel);
669          line += tempBuffer;
670        }
680    }
671  
672 +      if (needForceVector_) {
673 +        if (storageLayout & DataStorage::dslFlucQForce) {          
674 +          type += "g";
675 +          RealType fqFrc = sd->getFlucQFrc();        
676 +          if (isinf(fqFrc) || isnan(fqFrc) ) {      
677 +            sprintf( painCave.errMsg,
678 +                     "DumpWriter detected a numerical error writing the"
679 +                     " fluctuating charge force for object %s", id.c_str());      
680 +            painCave.isFatal = 1;
681 +            simError();
682 +          }
683 +          sprintf(tempBuffer, " %13e ", fqFrc);        
684 +          line += tempBuffer;
685 +        }
686 +      }
687 +    }
688 +    
689      if (needElectricField_) {
690 <      type += "e";
691 <      Vector3d eField= sd->getElectricField();
692 <      if (isinf(eField[0]) || isnan(eField[0]) ||
693 <          isinf(eField[1]) || isnan(eField[1]) ||
694 <          isinf(eField[2]) || isnan(eField[2]) ) {      
695 <        sprintf( painCave.errMsg,
696 <                 "DumpWriter detected a numerical error writing the electric"
697 <                 " field for object %s", id.c_str());      
698 <        painCave.isFatal = 1;
699 <        simError();
690 >      if (storageLayout & DataStorage::dslElectricField) {
691 >        type += "e";
692 >        Vector3d eField= sd->getElectricField();
693 >        if (isinf(eField[0]) || isnan(eField[0]) ||
694 >            isinf(eField[1]) || isnan(eField[1]) ||
695 >            isinf(eField[2]) || isnan(eField[2]) ) {      
696 >          sprintf( painCave.errMsg,
697 >                   "DumpWriter detected a numerical error writing the electric"
698 >                   " field for object %s", id.c_str());      
699 >          painCave.isFatal = 1;
700 >          simError();
701 >        }
702 >        sprintf(tempBuffer, " %13e %13e %13e",
703 >                eField[0], eField[1], eField[2]);
704 >        line += tempBuffer;
705        }
694      sprintf(tempBuffer, " %13e %13e %13e",
695              eField[0], eField[1], eField[2]);
696      line += tempBuffer;
706      }
707  
708  
709      if (needParticlePot_) {
710 <      type += "u";
711 <      RealType particlePot = sd->getParticlePot();
712 <      if (isinf(particlePot) || isnan(particlePot)) {      
713 <        sprintf( painCave.errMsg,
714 <                 "DumpWriter detected a numerical error writing the particle "
715 <                 " potential for object %s", id.c_str());      
716 <        painCave.isFatal = 1;
717 <        simError();
710 >      if (storageLayout & DataStorage::dslParticlePot) {
711 >        type += "u";
712 >        RealType particlePot = sd->getParticlePot();
713 >        if (isinf(particlePot) || isnan(particlePot)) {      
714 >          sprintf( painCave.errMsg,
715 >                   "DumpWriter detected a numerical error writing the particle "
716 >                   " potential for object %s", id.c_str());      
717 >          painCave.isFatal = 1;
718 >          simError();
719 >        }
720 >        sprintf(tempBuffer, " %13e", particlePot);
721 >        line += tempBuffer;
722        }
710      sprintf(tempBuffer, " %13e", particlePot);
711      line += tempBuffer;
723      }
724 <    
714 <
724 >  
725      sprintf(tempBuffer, "%s %7s %s\n", id.c_str(), type.c_str(), line.c_str());
726      return std::string(tempBuffer);
727    }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines