--- trunk/src/brains/SimCreator.cpp 2008/04/25 15:14:47 1241 +++ trunk/src/brains/SimCreator.cpp 2008/10/22 20:01:49 1313 @@ -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()); - } @@ -264,7 +263,7 @@ namespace oopse { ++lineNo; std::string line = trimLeftCopy(buffer); i = CaseInsensitiveFind(line, "(i) == string::npos) { sprintf(painCave.errMsg, "SimCreator: File: %s is not an OOPSE file!\n", mdFileName.c_str()); @@ -330,9 +329,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 +393,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) @@ -724,7 +722,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 +734,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 +766,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) {