--- trunk/src/applications/staticProps/RNEMDStats.cpp 2013/06/18 17:48:52 1887 +++ trunk/src/applications/staticProps/RNEMDStats.cpp 2013/06/19 14:14:56 1892 @@ -104,7 +104,9 @@ namespace OpenMD { int i; vector binMass(nBins_, 0.0); - vector binVel(nBins_, V3Zero); + vector binPx(nBins_, 0.0); + vector binPy(nBins_, 0.0); + vector binPz(nBins_, 0.0); vector binKE(nBins_, 0.0); vector binDof(nBins_, 0); vector binCount(nBins_, 0); @@ -117,7 +119,7 @@ namespace OpenMD { for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) { - rb->updateAtoms(); + rb->updateAtomVel(); } } @@ -140,7 +142,9 @@ namespace OpenMD { binCount[bin] += 1; binMass[bin] += m; - binVel[bin] += vel; + binPx[bin] += m * vel.x(); + binPy[bin] += m * vel.y(); + binPz[bin] += m * vel.z(); binKE[bin] += 0.5 * (m * vel.lengthSquare()); binDof[bin] += 3; @@ -170,7 +174,11 @@ namespace OpenMD { PhysicalConstants::energyConvert); RealType den = binMass[i] * nBins_ * PhysicalConstants::densityConvert / volume_; - Vector3d vel = binVel[i] / RealType(binCount[i]); + Vector3d vel; + vel.x() = binPx[i] / binMass[i]; + vel.y() = binPy[i] / binMass[i]; + vel.z() = binPz[i] / binMass[i]; + dynamic_cast(temperature->accumulator[i])->add(temp); dynamic_cast(velocity->accumulator[i])->add(vel); dynamic_cast(density->accumulator[i])->add(den); @@ -243,7 +251,7 @@ namespace OpenMD { for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) { - rb->updateAtoms(); + rb->updateAtomVel(); } } @@ -263,7 +271,7 @@ namespace OpenMD { Vector3d aVel = cross(rPos, vel); RealType m = sd->getMass(); - int bin = getBin(pos); + int bin = getBin(rPos); binCount[bin] += 1;