--- trunk/src/brains/Stats.cpp 2013/08/07 15:24:16 1925 +++ trunk/src/brains/Stats.cpp 2015/03/07 21:41:51 2071 @@ -40,20 +40,12 @@ * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). */ -/** - * @file Stats.cpp - * @author tlin - * @date 11/04/2004 - * @time 14:26am - * @version 1.0 - */ - #include "brains/Stats.hpp" #include "brains/Thermo.hpp" namespace OpenMD { - Stats::Stats(SimInfo* info) : isInit_(false), info_(info) { + Stats::Stats(SimInfo* info) : info_(info), isInit_(false) { if (!isInit_) { init(); @@ -281,6 +273,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"; @@ -374,7 +374,15 @@ namespace OpenMD { } if (info_->getCalcBoxDipole()){ 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()){ @@ -468,6 +476,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;