--- trunk/src/brains/SimCreator.cpp 2006/08/30 20:33:44 1025 +++ trunk/src/brains/SimCreator.cpp 2010/05/10 17:28:26 1442 @@ -6,19 +6,10 @@ * redistribute this software in source and binary code form, provided * that the following conditions are met: * - * 1. Acknowledgement of the program authors must be made in any - * publication of scientific results based in part on use of the - * program. An acceptable form of acknowledgement is citation of - * the article in which the program was described (Matthew - * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher - * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented - * Parallel Simulation Engine for Molecular Dynamics," - * J. Comput. Chem. 26, pp. 252-271 (2005)) - * - * 2. Redistributions of source code must retain the above copyright + * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - * 3. Redistributions in binary form must reproduce the above copyright + * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. @@ -37,6 +28,15 @@ * arising out of the use of or inability to use software, even if the * University of Notre Dame has been advised of the possibility of * such damages. + * + * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your + * research, please cite the appropriate papers when you publish your + * work. Good starting points are: + * + * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). + * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). + * [4] Vardeman & Gezelter, in progress (2009). */ /** @@ -79,7 +79,7 @@ #include "math/ParallelRandNumGen.hpp" #endif -namespace oopse { +namespace OpenMD { Globals* SimCreator::parseFile(std::istream& rawMetaDataStream, const std::string& filename, int startOfMetaDataBlock ){ Globals* simParams = NULL; @@ -108,7 +108,7 @@ namespace oopse { } else { //get stream size commStatus = MPI_Bcast(&streamSize, 1, MPI_LONG, masterNode, MPI_COMM_WORLD); - + char* buf = new char[streamSize]; assert(buf); @@ -116,7 +116,7 @@ namespace oopse { commStatus = MPI_Bcast(buf, streamSize, MPI_CHAR, masterNode, MPI_COMM_WORLD); ppStream.str(buf); - delete buf; + delete [] buf; } #endif @@ -145,7 +145,6 @@ namespace oopse { treeParser.initializeASTFactory(factory); treeParser.setASTFactory(&factory); simParams = treeParser.walkTree(parser.getAST()); - } @@ -215,7 +214,7 @@ namespace oopse { painCave.isFatal = 1; simError(); } - catch (OOPSEException& e) { + catch (OpenMDException& e) { sprintf(painCave.errMsg, "%s\n", e.getMessage().c_str()); @@ -263,10 +262,16 @@ namespace oopse { mdFile_.getline(buffer, bufferSize); ++lineNo; std::string line = trimLeftCopy(buffer); - i = CaseInsensitiveFind(line, "(i) == string::npos) { + // try the older file strings to see if that works: + i = CaseInsensitiveFind(line, "(i) == string::npos) { + // still no luck! sprintf(painCave.errMsg, - "SimCreator: File: %s is not an OOPSE file!\n", + "SimCreator: File: %s is not a valid OpenMD file!\n", mdFileName.c_str()); painCave.isFatal = 1; simError(); @@ -330,9 +335,8 @@ namespace oopse { Globals* simParams = parseFile(rawMetaDataStream, mdFileName, metaDataBlockStart+1); //create the force field - ForceField * ff = ForceFieldFactory::getInstance() - ->createForceField(simParams->getForceField()); - + ForceField * ff = ForceFieldFactory::getInstance()->createForceField(simParams->getForceField()); + if (ff == NULL) { sprintf(painCave.errMsg, "ForceField Factory can not create %s force field\n", @@ -395,16 +399,16 @@ namespace oopse { //responsibility to LocalIndexManager. setGlobalIndex(info); - //Although addExcludePairs is called inside SimInfo's addMolecule + //Although addInteractionPairs is called inside SimInfo's addMolecule //method, at that point atoms don't have the global index yet //(their global index are all initialized to -1). Therefore we - //have to call addExcludePairs explicitly here. A way to work + //have to call addInteractionPairs explicitly here. A way to work //around is that we can determine the beginning global indices of //atoms before they get created. SimInfo::MoleculeIterator mi; Molecule* mol; for (mol= info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { - info->addExcludePairs(mol); + info->addInteractionPairs(mol); } if (loadInitCoords) @@ -473,7 +477,7 @@ namespace oopse { "\tthe number of molecules. This will not result in a \n" "\tusable division of atoms for force decomposition.\n" "\tEither try a smaller number of processors, or run the\n" - "\tsingle-processor version of OOPSE.\n", nProcessors, nGlobalMols); + "\tsingle-processor version of OpenMD.\n", nProcessors, nGlobalMols); painCave.isFatal = 1; simError(); @@ -591,7 +595,7 @@ namespace oopse { info->setMolToProcMap(molToProcMap); sprintf(checkPointMsg, "Successfully divided the molecules among the processors.\n"); - MPIcheckPoint(); + errorCheckPoint(); } #endif @@ -724,7 +728,7 @@ namespace oopse { // to get the full globalGroupMembership array (We think). // This would be prettier if we could use MPI_IN_PLACE like the MPI-2 // docs said we could. - std::vector tmpGroupMembership(nGlobalAtoms, 0); + std::vector tmpGroupMembership(info->getNGlobalAtoms(), 0); MPI_Allreduce(&globalGroupMembership[0], &tmpGroupMembership[0], nGlobalAtoms, MPI_INT, MPI_SUM, MPI_COMM_WORLD); info->setGlobalGroupMembership(tmpGroupMembership); @@ -736,14 +740,13 @@ namespace oopse { std::vector globalMolMembership(info->getNGlobalAtoms(), 0); for(mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { - for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) { globalMolMembership[atom->getGlobalIndex()] = mol->getGlobalIndex(); } } #ifdef IS_MPI - std::vector tmpMolMembership(nGlobalAtoms, 0); + std::vector tmpMolMembership(info->getNGlobalAtoms(), 0); MPI_Allreduce(&globalMolMembership[0], &tmpMolMembership[0], nGlobalAtoms, MPI_INT, MPI_SUM, MPI_COMM_WORLD); @@ -769,28 +772,28 @@ namespace oopse { std::vector numIntegrableObjectsPerMol = nIOPerMol; #endif - std::vector startingIOIndexForMol(info->getNGlobalMolecules()); - -int startingIndex = 0; - for (int i = 0; i < info->getNGlobalMolecules(); i++) { - startingIOIndexForMol[i] = startingIndex; - startingIndex += numIntegrableObjectsPerMol[i]; - } - - std::vector IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL); - for (mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { + std::vector startingIOIndexForMol(info->getNGlobalMolecules()); + + int startingIndex = 0; + for (int i = 0; i < info->getNGlobalMolecules(); i++) { + startingIOIndexForMol[i] = startingIndex; + startingIndex += numIntegrableObjectsPerMol[i]; + } + + std::vector IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL); + for (mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { int myGlobalIndex = mol->getGlobalIndex(); int globalIO = startingIOIndexForMol[myGlobalIndex]; for (StuntDouble* integrableObject = mol->beginIntegrableObject(ioi); integrableObject != NULL; integrableObject = mol->nextIntegrableObject(ioi)) { - integrableObject->setGlobalIntegrableObjectIndex(globalIO); - IOIndexToIntegrableObject[globalIO] = integrableObject; - globalIO++; + integrableObject->setGlobalIntegrableObjectIndex(globalIO); + IOIndexToIntegrableObject[globalIO] = integrableObject; + globalIO++; } } - - info->setIOIndexToIntegrableObject(IOIndexToIntegrableObject); - + + info->setIOIndexToIntegrableObject(IOIndexToIntegrableObject); + } void SimCreator::loadCoordinates(SimInfo* info, const std::string& mdFileName) { @@ -816,6 +819,6 @@ int startingIndex = 0; info->getSnapshotManager()->advance(); } -} //end namespace oopse +} //end namespace OpenMD