--- trunk/src/rnemd/RNEMD.cpp 2013/11/05 16:49:04 1941 +++ trunk/src/rnemd/RNEMD.cpp 2014/10/22 12:23:59 2026 @@ -291,7 +291,18 @@ namespace OpenMD { kineticFlux_ = 0.0; } if (hasMomentumFluxVector) { - momentumFluxVector_ = rnemdParams->getMomentumFluxVector(); + std::vector mf = rnemdParams->getMomentumFluxVector(); + if (mf.size() != 3) { + sprintf(painCave.errMsg, + "RNEMD: Incorrect number of parameters specified for momentumFluxVector.\n" + "\tthere should be 3 parameters, but %lu were specified.\n", + mf.size()); + painCave.isFatal = 1; + simError(); + } + momentumFluxVector_.x() = mf[0]; + momentumFluxVector_.y() = mf[1]; + momentumFluxVector_.z() = mf[2]; } else { momentumFluxVector_ = V3Zero; if (hasMomentumFlux) { @@ -317,7 +328,18 @@ namespace OpenMD { } } if (hasAngularMomentumFluxVector) { - angularMomentumFluxVector_ = rnemdParams->getAngularMomentumFluxVector(); + std::vector amf = rnemdParams->getAngularMomentumFluxVector(); + if (amf.size() != 3) { + sprintf(painCave.errMsg, + "RNEMD: Incorrect number of parameters specified for angularMomentumFluxVector.\n" + "\tthere should be 3 parameters, but %lu were specified.\n", + amf.size()); + painCave.isFatal = 1; + simError(); + } + angularMomentumFluxVector_.x() = amf[0]; + angularMomentumFluxVector_.y() = amf[1]; + angularMomentumFluxVector_.z() = amf[2]; } else { angularMomentumFluxVector_ = V3Zero; if (hasAngularMomentumFlux) { @@ -348,7 +370,18 @@ namespace OpenMD { } if (hasCoordinateOrigin) { - coordinateOrigin_ = rnemdParams->getCoordinateOrigin(); + std::vector co = rnemdParams->getCoordinateOrigin(); + if (co.size() != 3) { + sprintf(painCave.errMsg, + "RNEMD: Incorrect number of parameters specified for coordinateOrigin.\n" + "\tthere should be 3 parameters, but %lu were specified.\n", + co.size()); + painCave.isFatal = 1; + simError(); + } + coordinateOrigin_.x() = co[0]; + coordinateOrigin_.y() = co[1]; + coordinateOrigin_.z() = co[2]; } else { coordinateOrigin_ = V3Zero; } @@ -623,11 +656,11 @@ namespace OpenMD { StuntDouble* sd; RealType min_val; - bool min_found = false; + int min_found = 0; StuntDouble* min_sd; RealType max_val; - bool max_found = false; + int max_found = 0; StuntDouble* max_sd; for (sd = seleManA_.beginSelected(selei); sd != NULL; @@ -682,7 +715,7 @@ namespace OpenMD { if (!max_found) { max_val = value; max_sd = sd; - max_found = true; + max_found = 1; } else { if (max_val < value) { max_val = value; @@ -744,7 +777,7 @@ namespace OpenMD { if (!min_found) { min_val = value; min_sd = sd; - min_found = true; + min_found = 1; } else { if (min_val > value) { min_val = value; @@ -754,15 +787,18 @@ namespace OpenMD { } #ifdef IS_MPI - int worldRank = MPI::COMM_WORLD.Get_rank(); - - bool my_min_found = min_found; - bool my_max_found = max_found; + int worldRank; + MPI_Comm_rank( MPI_COMM_WORLD, &worldRank); + + int my_min_found = min_found; + int my_max_found = max_found; // Even if we didn't find a minimum, did someone else? - MPI::COMM_WORLD.Allreduce(&my_min_found, &min_found, 1, MPI::BOOL, MPI::LOR); + MPI_Allreduce(&my_min_found, &min_found, 1, MPI_INT, MPI_LOR, + MPI_COMM_WORLD); // Even if we didn't find a maximum, did someone else? - MPI::COMM_WORLD.Allreduce(&my_max_found, &max_found, 1, MPI::BOOL, MPI::LOR); + MPI_Allreduce(&my_max_found, &max_found, 1, MPI_INT, MPI_LOR, + MPI_COMM_WORLD); #endif if (max_found && min_found) { @@ -781,8 +817,8 @@ namespace OpenMD { min_vals.rank = worldRank; // Who had the minimum? - MPI::COMM_WORLD.Allreduce(&min_vals, &min_vals, - 1, MPI::REALTYPE_INT, MPI::MINLOC); + MPI_Allreduce(&min_vals, &min_vals, + 1, MPI_REALTYPE_INT, MPI_MINLOC, MPI_COMM_WORLD); min_val = min_vals.val; if (my_max_found) { @@ -793,8 +829,8 @@ namespace OpenMD { max_vals.rank = worldRank; // Who had the maximum? - MPI::COMM_WORLD.Allreduce(&max_vals, &max_vals, - 1, MPI::REALTYPE_INT, MPI::MAXLOC); + MPI_Allreduce(&max_vals, &max_vals, + 1, MPI_REALTYPE_INT, MPI_MAXLOC, MPI_COMM_WORLD); max_val = max_vals.val; #endif @@ -854,13 +890,13 @@ namespace OpenMD { Vector3d min_vel; Vector3d max_vel = max_sd->getVel(); - MPI::Status status; + MPI_Status status; // point-to-point swap of the velocity vector - MPI::COMM_WORLD.Sendrecv(max_vel.getArrayPointer(), 3, MPI::REALTYPE, - min_vals.rank, 0, - min_vel.getArrayPointer(), 3, MPI::REALTYPE, - min_vals.rank, 0, status); + MPI_Sendrecv(max_vel.getArrayPointer(), 3, MPI_REALTYPE, + min_vals.rank, 0, + min_vel.getArrayPointer(), 3, MPI_REALTYPE, + min_vals.rank, 0, MPI_COMM_WORLD, &status); switch(rnemdFluxType_) { case rnemdKE : @@ -871,11 +907,11 @@ namespace OpenMD { Vector3d max_angMom = max_sd->getJ(); // point-to-point swap of the angular momentum vector - MPI::COMM_WORLD.Sendrecv(max_angMom.getArrayPointer(), 3, - MPI::REALTYPE, min_vals.rank, 1, - min_angMom.getArrayPointer(), 3, - MPI::REALTYPE, min_vals.rank, 1, - status); + MPI_Sendrecv(max_angMom.getArrayPointer(), 3, + MPI_REALTYPE, min_vals.rank, 1, + min_angMom.getArrayPointer(), 3, + MPI_REALTYPE, min_vals.rank, 1, + MPI_COMM_WORLD, &status); max_sd->setJ(min_angMom); } @@ -900,13 +936,13 @@ namespace OpenMD { Vector3d max_vel; Vector3d min_vel = min_sd->getVel(); - MPI::Status status; + MPI_Status status; // point-to-point swap of the velocity vector - MPI::COMM_WORLD.Sendrecv(min_vel.getArrayPointer(), 3, MPI::REALTYPE, - max_vals.rank, 0, - max_vel.getArrayPointer(), 3, MPI::REALTYPE, - max_vals.rank, 0, status); + MPI_Sendrecv(min_vel.getArrayPointer(), 3, MPI_REALTYPE, + max_vals.rank, 0, + max_vel.getArrayPointer(), 3, MPI_REALTYPE, + max_vals.rank, 0, MPI_COMM_WORLD, &status); switch(rnemdFluxType_) { case rnemdKE : @@ -917,11 +953,11 @@ namespace OpenMD { Vector3d max_angMom; // point-to-point swap of the angular momentum vector - MPI::COMM_WORLD.Sendrecv(min_angMom.getArrayPointer(), 3, - MPI::REALTYPE, max_vals.rank, 1, - max_angMom.getArrayPointer(), 3, - MPI::REALTYPE, max_vals.rank, 1, - status); + MPI_Sendrecv(min_angMom.getArrayPointer(), 3, + MPI_REALTYPE, max_vals.rank, 1, + max_angMom.getArrayPointer(), 3, + MPI_REALTYPE, max_vals.rank, 1, + MPI_COMM_WORLD, &status); min_sd->setJ(max_angMom); } @@ -1090,22 +1126,22 @@ namespace OpenMD { Kcw *= 0.5; #ifdef IS_MPI - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Phx, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Phy, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Phz, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Pcx, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Pcy, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Pcz, 1, MPI::REALTYPE, MPI::SUM); + MPI_Allreduce(MPI_IN_PLACE, &Phx, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Phy, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Phz, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Pcx, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Pcy, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Pcz, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Khx, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Khy, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Khz, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Khw, 1, MPI::REALTYPE, MPI::SUM); + MPI_Allreduce(MPI_IN_PLACE, &Khx, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Khy, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Khz, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Khw, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Kcx, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Kcy, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Kcz, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Kcw, 1, MPI::REALTYPE, MPI::SUM); + MPI_Allreduce(MPI_IN_PLACE, &Kcx, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Kcy, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Kcz, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Kcw, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); #endif //solve coldBin coeff's first @@ -1582,18 +1618,22 @@ namespace OpenMD { Kc *= 0.5; #ifdef IS_MPI - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Ph[0], 3, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Pc[0], 3, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Lh[0], 3, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Lc[0], 3, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Mh, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Kh, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Mc, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &Kc, 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, Ih.getArrayPointer(), 9, - MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, Ic.getArrayPointer(), 9, - MPI::REALTYPE, MPI::SUM); + MPI_Allreduce(MPI_IN_PLACE, &Ph[0], 3, MPI_REALTYPE, MPI_SUM, + MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Pc[0], 3, MPI_REALTYPE, MPI_SUM, + MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Lh[0], 3, MPI_REALTYPE, MPI_SUM, + MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Lc[0], 3, MPI_REALTYPE, MPI_SUM, + MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Mh, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Kh, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Mc, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &Kc, 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, Ih.getArrayPointer(), 9, + MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, Ic.getArrayPointer(), 9, + MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); #endif @@ -1748,7 +1788,9 @@ namespace OpenMD { #if defined(HAVE_QHULL) ConvexHull* surfaceMeshA = new ConvexHull(); surfaceMeshA->computeHull(aSites); + cerr << "flag1\n"; areaA = surfaceMeshA->getArea(); + cerr << "Flag2 " << areaA << "\n"; delete surfaceMeshA; #else sprintf( painCave.errMsg, @@ -1937,7 +1979,7 @@ namespace OpenMD { mass = sd->getMass(); vel = sd->getVel(); rPos = sd->getPos() - coordinateOrigin_; - KE = mass * vel.lengthSquare(); + KE = 0.5 * mass * vel.lengthSquare(); L = mass * cross(rPos, vel); I = outProduct(rPos, rPos) * mass; r2 = rPos.lengthSquare(); @@ -1959,7 +2001,6 @@ namespace OpenMD { binCount[binNo]++; binMass[binNo] += mass; binP[binNo] += mass*vel; - //binOmega[binNo] += dot(aVel, u); binKE[binNo] += KE; binI[binNo] += I; binL[binNo] += L; @@ -1988,23 +2029,23 @@ namespace OpenMD { #ifdef IS_MPI for (int i = 0; i < nBins_; i++) { - - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binCount[i], - 1, MPI::INT, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binMass[i], - 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binP[i], - 3, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binL[i], - 3, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binI[i], - 9, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binKE[i], - 1, MPI::REALTYPE, MPI::SUM); - MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binDOF[i], - 1, MPI::INT, MPI::SUM); - //MPI::COMM_WORLD.Allreduce(MPI::IN_PLACE, &binOmega[i], - // 1, MPI::REALTYPE, MPI::SUM); + + MPI_Allreduce(MPI_IN_PLACE, &binCount[i], + 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &binMass[i], + 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, binP[i].getArrayPointer(), + 3, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, binL[i].getArrayPointer(), + 3, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, binI[i].getArrayPointer(), + 9, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &binKE[i], + 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(MPI_IN_PLACE, &binDOF[i], + 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); + //MPI_Allreduce(MPI_IN_PLACE, &binOmega[i], + // 1, MPI_REALTYPE, MPI_SUM, MPI_COMM_WORLD); } #endif @@ -2100,7 +2141,9 @@ namespace OpenMD { #ifdef IS_MPI // If we're the root node, should we print out the results - int worldRank = MPI::COMM_WORLD.Get_rank(); + int worldRank; + MPI_Comm_rank( MPI_COMM_WORLD, &worldRank); + if (worldRank == 0) { #endif rnemdFile_.open(rnemdFileName_.c_str(), std::ios::out | std::ios::trunc ); @@ -2231,7 +2274,7 @@ namespace OpenMD { } rnemdFile_ << "#######################################################\n"; - rnemdFile_ << "# Standard Deviations in those quantities follow:\n"; + rnemdFile_ << "# 95% confidence intervals in those quantities follow:\n"; rnemdFile_ << "#######################################################\n"; @@ -2240,9 +2283,9 @@ namespace OpenMD { for (unsigned int i = 0; i < outputMask_.size(); ++i) { if (outputMask_[i]) { if (data_[i].dataType == "RealType") - writeRealStdDev(i,j); + writeRealErrorBars(i,j); else if (data_[i].dataType == "Vector3d") - writeVectorStdDev(i,j); + writeVectorErrorBars(i,j); else { sprintf( painCave.errMsg, "RNEMD found an unknown data type for: %s ", @@ -2313,7 +2356,7 @@ namespace OpenMD { } } - void RNEMD::writeRealStdDev(int index, unsigned int bin) { + void RNEMD::writeRealErrorBars(int index, unsigned int bin) { if (!doRNEMD_) return; assert(index >=0 && index < ENDINDEX); assert(int(bin) < nBins_); @@ -2323,7 +2366,7 @@ namespace OpenMD { count = data_[index].accumulator[bin]->count(); if (count == 0) return; - dynamic_cast(data_[index].accumulator[bin])->getStdDev(s); + dynamic_cast(data_[index].accumulator[bin])->get95percentConfidenceInterval(s); if (! isinf(s) && ! isnan(s)) { rnemdFile_ << "\t" << s; @@ -2336,7 +2379,7 @@ namespace OpenMD { } } - void RNEMD::writeVectorStdDev(int index, unsigned int bin) { + void RNEMD::writeVectorErrorBars(int index, unsigned int bin) { if (!doRNEMD_) return; assert(index >=0 && index < ENDINDEX); assert(int(bin) < nBins_); @@ -2346,7 +2389,7 @@ namespace OpenMD { count = data_[index].accumulator[bin]->count(); if (count == 0) return; - dynamic_cast(data_[index].accumulator[bin])->getStdDev(s); + dynamic_cast(data_[index].accumulator[bin])->get95percentConfidenceInterval(s); if (isinf(s[0]) || isnan(s[0]) || isinf(s[1]) || isnan(s[1]) || isinf(s[2]) || isnan(s[2]) ) {