| 58 | 
  | 
#include "utils/simError.h"  | 
| 59 | 
  | 
#include "utils/MemoryUtils.hpp"  | 
| 60 | 
  | 
#include "utils/StringTokenizer.hpp"  | 
| 61 | 
+ | 
#include "brains/Thermo.hpp" | 
| 62 | 
  | 
  | 
| 63 | 
  | 
#ifdef IS_MPI  | 
| 63 | 
– | 
  | 
| 64 | 
  | 
#include <mpi.h>  | 
| 65 | 
< | 
#define TAKE_THIS_TAG_CHAR 0  | 
| 66 | 
< | 
#define TAKE_THIS_TAG_INT 1  | 
| 65 | 
> | 
#endif | 
| 66 | 
  | 
  | 
| 68 | 
– | 
#endif // is_mpi  | 
| 67 | 
  | 
  | 
| 70 | 
– | 
  | 
| 68 | 
  | 
namespace OpenMD {  | 
| 69 | 
  | 
    | 
| 70 | 
  | 
  DumpReader::DumpReader(SimInfo* info, const std::string& filename)  | 
| 242 | 
  | 
 | 
| 243 | 
  | 
    if (needCOMprops_) { | 
| 244 | 
  | 
      Snapshot* s = info_->getSnapshotManager()->getCurrentSnapshot(); | 
| 245 | 
+ | 
      Thermo thermo(info_); | 
| 246 | 
  | 
      Vector3d com; | 
| 249 | 
– | 
      Vector3d comvel; | 
| 250 | 
– | 
      Vector3d comw; | 
| 251 | 
– | 
      if (needPos_ && needVel_){ | 
| 252 | 
– | 
        info_->getComAll(com, comvel); | 
| 253 | 
– | 
        comw = info_->getAngularMomentum(); | 
| 254 | 
– | 
      }else{ | 
| 255 | 
– | 
        com = info_->getCom(); | 
| 256 | 
– | 
        comvel = 0.0; | 
| 257 | 
– | 
        comw   = 0.0; | 
| 258 | 
– | 
      } | 
| 259 | 
– | 
      s->setCOMprops(com, comvel, comw);       | 
| 260 | 
– | 
    } | 
| 247 | 
  | 
 | 
| 248 | 
+ | 
      if (needPos_ && needVel_) { | 
| 249 | 
+ | 
        Vector3d comvel; | 
| 250 | 
+ | 
        Vector3d comw; | 
| 251 | 
+ | 
        thermo.getComAll(com, comvel); | 
| 252 | 
+ | 
        comw = thermo.getAngularMomentum(); | 
| 253 | 
+ | 
      } else { | 
| 254 | 
+ | 
        com = thermo.getCom(); | 
| 255 | 
+ | 
      }                     | 
| 256 | 
+ | 
    } | 
| 257 | 
  | 
  }  | 
| 258 | 
  | 
    | 
| 259 | 
  | 
  void DumpReader::readSet(int whichFrame) {      | 
| 709 | 
  | 
        hmat(2, 2) = tokenizer.nextTokenAsDouble();  | 
| 710 | 
  | 
        s->setHmat(hmat);       | 
| 711 | 
  | 
      } else if (propertyName == "Thermostat") { | 
| 712 | 
< | 
        RealType chi = tokenizer.nextTokenAsDouble(); | 
| 713 | 
< | 
        RealType integralOfChiDt = tokenizer.nextTokenAsDouble(); | 
| 714 | 
< | 
        s->setChi(chi);  | 
| 715 | 
< | 
        s->setIntegralOfChiDt(integralOfChiDt);         | 
| 712 | 
> | 
        pair<RealType, RealType> thermostat; | 
| 713 | 
> | 
        thermostat.first = tokenizer.nextTokenAsDouble(); | 
| 714 | 
> | 
        thermostat.second = tokenizer.nextTokenAsDouble(); | 
| 715 | 
> | 
        s->setThermostat(thermostat);  | 
| 716 | 
  | 
     } else if (propertyName == "Barostat") { | 
| 717 | 
  | 
        Mat3x3d eta; | 
| 718 | 
  | 
        eta(0, 0) = tokenizer.nextTokenAsDouble();  | 
| 724 | 
  | 
        eta(2, 0) = tokenizer.nextTokenAsDouble();  | 
| 725 | 
  | 
        eta(2, 1) = tokenizer.nextTokenAsDouble();  | 
| 726 | 
  | 
        eta(2, 2) = tokenizer.nextTokenAsDouble();  | 
| 727 | 
< | 
        s->setEta(eta);  | 
| 727 | 
> | 
        s->setBarostat(eta);  | 
| 728 | 
  | 
      } else { | 
| 729 | 
  | 
        sprintf(painCave.errMsg,  | 
| 730 | 
  | 
                "DumpReader Error: %s is an invalid property in <FrameData>\n", propertyName.c_str());  |