--- trunk/src/applications/staticProps/P2OrderParameter.cpp 2005/05/26 22:45:00 543 +++ trunk/src/applications/staticProps/P2OrderParameter.cpp 2006/05/17 21:51:42 963 @@ -43,7 +43,7 @@ #include "utils/simError.h" #include "io/DumpReader.hpp" #include "primitives/Molecule.hpp" - +#include "utils/NumericConstant.hpp" namespace oopse { @@ -112,7 +112,7 @@ void P2OrderParameter::process() { for (int i = 0; i < nFrames; i += step_) { reader.readFrame(i); currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot(); - Mat3x3d orderTensor(0.0); + for (mol = info_->beginMolecule(mi); mol != NULL; mol = info_->nextMolecule(mi)) { //change the positions of atoms which belong to the rigidbodies @@ -122,28 +122,30 @@ void P2OrderParameter::process() { } + Mat3x3d orderTensor(0.0); for (std::vector >::iterator j = sdPairs_.begin(); j != sdPairs_.end(); ++j) { Vector3d vec = j->first->getPos() - j->second->getPos(); + currentSnapshot_->wrapVector(vec); vec.normalize(); orderTensor +=outProduct(vec, vec); } orderTensor /= sdPairs_.size(); - orderTensor -= 1.0/3.0 * Mat3x3d::identity(); + orderTensor -= (RealType)(1.0/3.0) * Mat3x3d::identity(); Vector3d eigenvalues; Mat3x3d eigenvectors; Mat3x3d::diagonalize(orderTensor, eigenvalues, eigenvectors); int which; - double maxEval = 0.0; + RealType maxEval = 0.0; for(int k = 0; k< 3; k++){ if(fabs(eigenvalues[k]) > maxEval){ which = k; maxEval = fabs(eigenvalues[k]); } } - double p2 = 1.5 * maxEval; + RealType p2 = 1.5 * maxEval; //the eigen vector is already normalized in SquareMatrix3::diagonalize Vector3d director = eigenvectors.getColumn(which); @@ -151,14 +153,15 @@ void P2OrderParameter::process() { director.negate(); } - double angle = 0.0; + RealType angle = 0.0; for (std::vector >::iterator j = sdPairs_.begin(); j != sdPairs_.end(); ++j) { Vector3d vec = j->first->getPos() - j->second->getPos(); + currentSnapshot_->wrapVector(vec); vec.normalize(); angle += acos(dot(vec, director)) ; } - angle /= sdPairs_.size(); + angle = angle / (sdPairs_.size() * NumericConstant::PI) * 180.0; OrderParam param; param.p2 = p2; @@ -169,11 +172,11 @@ void P2OrderParameter::process() { } - writeOrderParam(); + writeP2(); } -void P2OrderParameter::writeOrderParam() { +void P2OrderParameter::writeP2() { std::ofstream os(getOutputFileName().c_str()); os << "#radial distribution function\n";