--- trunk/src/brains/SimCreator.cpp 2013/12/05 18:19:26 1953 +++ trunk/src/brains/SimCreator.cpp 2015/03/05 16:30:23 2069 @@ -64,6 +64,7 @@ #include "brains/ForceField.hpp" #include "utils/simError.h" #include "utils/StringUtils.hpp" +#include "utils/Revision.hpp" #include "math/SeqRandNumGen.hpp" #include "mdParser/MDLexer.hpp" #include "mdParser/MDParser.hpp" @@ -103,29 +104,30 @@ namespace OpenMD { const int masterNode = 0; if (worldRank == masterNode) { - MPI::COMM_WORLD.Bcast(&mdFileVersion, 1, MPI::INT, masterNode); + MPI_Bcast(&mdFileVersion, 1, MPI_INT, masterNode, MPI_COMM_WORLD); #endif SimplePreprocessor preprocessor; - preprocessor.preprocess(rawMetaDataStream, filename, startOfMetaDataBlock, ppStream); + preprocessor.preprocess(rawMetaDataStream, filename, + startOfMetaDataBlock, ppStream); #ifdef IS_MPI - //brocasting the stream size + //broadcasting the stream size streamSize = ppStream.str().size() +1; - MPI::COMM_WORLD.Bcast(&streamSize, 1, MPI::LONG, masterNode); - MPI::COMM_WORLD.Bcast(static_cast(const_cast(ppStream.str().c_str())), streamSize, MPI::CHAR, masterNode); - + MPI_Bcast(&streamSize, 1, MPI_INT, masterNode, MPI_COMM_WORLD); + MPI_Bcast(static_cast(const_cast(ppStream.str().c_str())), + streamSize, MPI_CHAR, masterNode, MPI_COMM_WORLD); } else { - MPI::COMM_WORLD.Bcast(&mdFileVersion, 1, MPI::INT, masterNode); - //get stream size - MPI::COMM_WORLD.Bcast(&streamSize, 1, MPI::LONG, masterNode); + MPI_Bcast(&mdFileVersion, 1, MPI_INT, masterNode, MPI_COMM_WORLD); + //get stream size + MPI_Bcast(&streamSize, 1, MPI_INT, masterNode, MPI_COMM_WORLD); char* buf = new char[streamSize]; assert(buf); //receive file content - MPI::COMM_WORLD.Bcast(buf, streamSize, MPI::CHAR, masterNode); - + MPI_Bcast(buf, streamSize, MPI_CHAR, masterNode, MPI_COMM_WORLD); + ppStream.str(buf); delete [] buf; } @@ -149,7 +151,6 @@ namespace OpenMD { parser.initializeASTFactory(factory); parser.setASTFactory(&factory); parser.mdfile(); - // Create a tree parser that reads information into Globals MDTreeParser treeParser; treeParser.initializeASTFactory(factory); @@ -227,7 +228,7 @@ namespace OpenMD { catch (OpenMDException& e) { sprintf(painCave.errMsg, "%s\n", - e.getMessage().c_str()); + e.what()); painCave.isFatal = 1; simError(); } @@ -252,7 +253,6 @@ namespace OpenMD { std::string mdRawData; int metaDataBlockStart = -1; int metaDataBlockEnd = -1; - int i, j; streamoff mdOffset; int mdFileVersion; @@ -263,9 +263,9 @@ namespace OpenMD { version.append("."); version.append(OPENMD_VERSION_MINOR); - std::string svnrev; + std::string svnrev(g_REVISION, strnlen(g_REVISION, 20)); //convert a macro from compiler to a string in c++ - STR_DEFINE(svnrev, SVN_REV ); + // STR_DEFINE(svnrev, SVN_REV ); version.append(" Revision: "); // If there's no SVN revision, just call this the RELEASE revision. if (!svnrev.empty()) { @@ -293,13 +293,13 @@ namespace OpenMD { mdFile_.getline(buffer, bufferSize); ++lineNo; std::string line = trimLeftCopy(buffer); - i = CaseInsensitiveFind(line, "(i) == string::npos) { + std::size_t i = CaseInsensitiveFind(line, "(i) == string::npos) { + if (i == string::npos) { // still no luck! sprintf(painCave.errMsg, "SimCreator: File: %s is not a valid OpenMD file!\n", @@ -334,13 +334,13 @@ namespace OpenMD { std::string line = trimLeftCopy(buffer); if (metaDataBlockStart == -1) { - i = CaseInsensitiveFind(line, ""); + std::size_t i = CaseInsensitiveFind(line, ""); if (i != string::npos) { metaDataBlockStart = lineNo; mdOffset = mdFile_.tellg(); } } else { - i = CaseInsensitiveFind(line, ""); + std::size_t i = CaseInsensitiveFind(line, ""); if (i != string::npos) { metaDataBlockEnd = lineNo; } @@ -373,8 +373,9 @@ namespace OpenMD { for (int i = 0; i < metaDataBlockEnd - metaDataBlockStart - 1; ++i) { mdFile_.getline(buffer, bufferSize); std::string line = trimLeftCopy(buffer); - j = CaseInsensitiveFind(line, "## Last run using OpenMD Version"); - if (static_cast(j) != string::npos) { + std::size_t j = CaseInsensitiveFind(line, + "## Last run using OpenMD Version"); + if (j != string::npos) { foundVersion = true; mdRawData += version; } else { @@ -520,7 +521,7 @@ namespace OpenMD { // error // condition: - nProcessors = MPI::COMM_WORLD.Get_size(); + MPI_Comm_size( MPI_COMM_WORLD, &nProcessors); if (nProcessors > nGlobalMols) { sprintf(painCave.errMsg, @@ -639,11 +640,12 @@ namespace OpenMD { delete myRandom; // Spray out this nonsense to all other processors: - MPI::COMM_WORLD.Bcast(&molToProcMap[0], nGlobalMols, MPI::INT, 0); + MPI_Bcast(&molToProcMap[0], nGlobalMols, MPI_INT, 0, MPI_COMM_WORLD); + } else { // Listen to your marching orders from processor 0: - MPI::COMM_WORLD.Bcast(&molToProcMap[0], nGlobalMols, MPI::INT, 0); + MPI_Bcast(&molToProcMap[0], nGlobalMols, MPI_INT, 0, MPI_COMM_WORLD); } @@ -783,8 +785,16 @@ namespace OpenMD { } } - if (simParams->getOutputElectricField() | simParams->haveElectricField()) { + if (simParams->getOutputElectricField() | + simParams->haveElectricField() | simParams->haveUniformField() | + simParams->haveUniformGradientStrength() | + simParams->haveUniformGradientDirection1() | + simParams->haveUniformGradientDirection2() ) { storageLayout |= DataStorage::dslElectricField; + } + + if (simParams->getOutputSitePotential() ) { + storageLayout |= DataStorage::dslSitePotential; } if (simParams->getOutputFluctuatingCharges()) { @@ -823,8 +833,10 @@ namespace OpenMD { int beginBendIndex; int beginTorsionIndex; int beginInversionIndex; +#ifdef IS_MPI int nGlobalAtoms = info->getNGlobalAtoms(); int nGlobalRigidBodies = info->getNGlobalRigidBodies(); +#endif beginAtomIndex = 0; // The rigid body indices begin immediately after the atom indices: @@ -917,9 +929,10 @@ namespace OpenMD { // This would be prettier if we could use MPI_IN_PLACE like the MPI-2 // docs said we could. std::vector tmpGroupMembership(info->getNGlobalAtoms(), 0); - MPI::COMM_WORLD.Allreduce(&globalGroupMembership[0], - &tmpGroupMembership[0], nGlobalAtoms, - MPI::INT, MPI::SUM); + MPI_Allreduce(&globalGroupMembership[0], + &tmpGroupMembership[0], nGlobalAtoms, + MPI_INT, MPI_SUM, MPI_COMM_WORLD); + info->setGlobalGroupMembership(tmpGroupMembership); #else info->setGlobalGroupMembership(globalGroupMembership); @@ -943,9 +956,9 @@ namespace OpenMD { #ifdef IS_MPI std::vector tmpMolMembership(info->getNGlobalAtoms() + info->getNGlobalRigidBodies(), 0); - MPI::COMM_WORLD.Allreduce(&globalMolMembership[0], &tmpMolMembership[0], - nGlobalAtoms + nGlobalRigidBodies, - MPI::INT, MPI::SUM); + MPI_Allreduce(&globalMolMembership[0], &tmpMolMembership[0], + nGlobalAtoms + nGlobalRigidBodies, + MPI_INT, MPI_SUM, MPI_COMM_WORLD); info->setGlobalMolMembership(tmpMolMembership); #else @@ -963,8 +976,8 @@ namespace OpenMD { #ifdef IS_MPI std::vector numIntegrableObjectsPerMol(info->getNGlobalMolecules(), 0); - MPI::COMM_WORLD.Allreduce(&nIOPerMol[0], &numIntegrableObjectsPerMol[0], - info->getNGlobalMolecules(), MPI::INT, MPI::SUM); + MPI_Allreduce(&nIOPerMol[0], &numIntegrableObjectsPerMol[0], + info->getNGlobalMolecules(), MPI_INT, MPI_SUM, MPI_COMM_WORLD); #else std::vector numIntegrableObjectsPerMol = nIOPerMol; #endif