--- trunk/src/brains/Stats.cpp 2013/01/15 16:28:42 1834 +++ trunk/src/brains/Stats.cpp 2014/09/26 22:22:28 2022 @@ -35,7 +35,7 @@ * * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). - * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ @@ -201,6 +201,14 @@ namespace OpenMD { data_[HYDROGENBONDING_POTENTIAL] = hydrogenbonding_potential; statsMap_["HYDROGENBONDING_POTENTIAL"] = HYDROGENBONDING_POTENTIAL; + StatsData reciprocal_potential; + reciprocal_potential.units = "kcal/mol"; + reciprocal_potential.title = "Reciprocal Space Potential"; + reciprocal_potential.dataType = "RealType"; + reciprocal_potential.accumulator = new Accumulator(); + data_[RECIPROCAL_POTENTIAL] = reciprocal_potential; + statsMap_["RECIPROCAL_POTENTIAL"] = RECIPROCAL_POTENTIAL; + StatsData short_range_potential; short_range_potential.units = "kcal/mol"; short_range_potential.title = "Short Range Potential"; @@ -273,6 +281,14 @@ namespace OpenMD { data_[SYSTEM_DIPOLE] = system_dipole; statsMap_["SYSTEM_DIPOLE"] = SYSTEM_DIPOLE; + StatsData system_quadrupole; + system_quadrupole.units = "C*m*m"; + system_quadrupole.title = "System Quadrupole"; + system_quadrupole.dataType = "Mat3x3d"; + system_quadrupole.accumulator = new MatrixAccumulator(); + data_[SYSTEM_QUADRUPOLE] = system_quadrupole; + statsMap_["SYSTEM_QUADRUPOLE"] = SYSTEM_QUADRUPOLE; + StatsData tagged_pair_distance; tagged_pair_distance.units = "Ang"; tagged_pair_distance.title = "Tagged_Pair_Distance"; @@ -312,6 +328,30 @@ namespace OpenMD { electronic_temperature.accumulator = new Accumulator(); data_[ELECTRONIC_TEMPERATURE] = electronic_temperature; statsMap_["ELECTRONIC_TEMPERATURE"] = ELECTRONIC_TEMPERATURE; + + StatsData com; + com.units = "A"; + com.title = "Center of Mass"; + com.dataType = "Vector3d"; + com.accumulator = new VectorAccumulator(); + data_[COM] = com; + statsMap_["COM"] = COM; + + StatsData comVel; + comVel.units = "A/fs"; + comVel.title = "Center of Mass Velocity"; + comVel.dataType = "Vector3d"; + comVel.accumulator = new VectorAccumulator(); + data_[COM_VELOCITY] = comVel; + statsMap_["COM_VELOCITY"] = COM_VELOCITY; + + StatsData angMom; + angMom.units = "amu A^2/fs"; + angMom.title = "Angular Momentum"; + angMom.dataType = "Vector3d"; + angMom.accumulator = new VectorAccumulator(); + data_[ANGULAR_MOMENTUM] = angMom; + statsMap_["ANGULAR_MOMENTUM"] = ANGULAR_MOMENTUM; // Now, set some defaults in the mask: @@ -344,6 +384,14 @@ namespace OpenMD { statsMask_.set(SYSTEM_DIPOLE); } + // Why do we have both of these? + if (simParams->getAccumulateBoxQuadrupole()) { + statsMask_.set(SYSTEM_QUADRUPOLE); + } + if (info_->getCalcBoxQuadrupole()){ + statsMask_.set(SYSTEM_QUADRUPOLE); + } + if (simParams->havePrintHeatFlux()) { if (simParams->getPrintHeatFlux()){ statsMask_.set(HEATFLUX); @@ -379,6 +427,10 @@ namespace OpenMD { } } + Stats::~Stats() { + data_.clear(); + statsMap_.clear(); + } std::string Stats::getTitle(int index) { assert(index >=0 && index < ENDINDEX); @@ -396,7 +448,6 @@ namespace OpenMD { } void Stats::collectStats(){ - Globals* simParams = info_->getSimParams(); Snapshot* snap = info_->getSnapshotManager()->getCurrentSnapshot(); Thermo thermo(info_); @@ -433,6 +484,9 @@ namespace OpenMD { case SYSTEM_DIPOLE: dynamic_cast(data_[i].accumulator)->add(thermo.getSystemDipole()); break; + case SYSTEM_QUADRUPOLE: + dynamic_cast(data_[i].accumulator)->add(thermo.getSystemQuadrupole()); + break; case HEATFLUX: dynamic_cast(data_[i].accumulator)->add(thermo.getHeatFlux()); break; @@ -463,6 +517,9 @@ namespace OpenMD { case HYDROGENBONDING_POTENTIAL: dynamic_cast(data_[i].accumulator)->add(snap->getLongRangePotentials()[HYDROGENBONDING_FAMILY]); break; + case RECIPROCAL_POTENTIAL: + dynamic_cast(data_[i].accumulator)->add(snap->getReciprocalPotential()); + break; case SHORT_RANGE_POTENTIAL: dynamic_cast(data_[i].accumulator)->add(snap->getShortRangePotential()); break; @@ -487,6 +544,18 @@ namespace OpenMD { case TAGGED_PAIR_DISTANCE: dynamic_cast(data_[i].accumulator)->add(thermo.getTaggedAtomPairDistance()); break; + case ELECTRONIC_TEMPERATURE: + dynamic_cast(data_[i].accumulator)->add(thermo.getElectronicTemperature()); + break; + case COM: + dynamic_cast(data_[i].accumulator)->add(thermo.getCom()); + break; + case COM_VELOCITY: + dynamic_cast(data_[i].accumulator)->add(thermo.getComVel()); + break; + case ANGULAR_MOMENTUM: + dynamic_cast(data_[i].accumulator)->add(thermo.getAngularMomentum()); + break; /* case SHADOWH: dynamic_cast(data_[i].accumulator)->add(thermo.getShadowHamiltionian()); @@ -495,9 +564,6 @@ namespace OpenMD { dynamic_cast(data_[i].accumulator)->add(thermo.getHelfandMoment()); break; */ - case ELECTRONIC_TEMPERATURE: - dynamic_cast(data_[i].accumulator)->add(thermo.getElectronicTemperature()); - break; } } }