# | Line 108 | Line 108 | namespace oopse { | |
---|---|---|
108 | } else { | |
109 | //get stream size | |
110 | commStatus = MPI_Bcast(&streamSize, 1, MPI_LONG, masterNode, MPI_COMM_WORLD); | |
111 | < | |
111 | > | |
112 | char* buf = new char[streamSize]; | |
113 | assert(buf); | |
114 | ||
# | Line 116 | Line 116 | namespace oopse { | |
116 | commStatus = MPI_Bcast(buf, streamSize, MPI_CHAR, masterNode, MPI_COMM_WORLD); | |
117 | ||
118 | ppStream.str(buf); | |
119 | < | delete buf; |
119 | > | delete [] buf; |
120 | ||
121 | } | |
122 | #endif | |
# | Line 145 | Line 145 | namespace oopse { | |
145 | treeParser.initializeASTFactory(factory); | |
146 | treeParser.setASTFactory(&factory); | |
147 | simParams = treeParser.walkTree(parser.getAST()); | |
148 | – | |
148 | } | |
149 | ||
150 | ||
# | Line 264 | Line 263 | namespace oopse { | |
263 | ++lineNo; | |
264 | std::string line = trimLeftCopy(buffer); | |
265 | i = CaseInsensitiveFind(line, "<OOPSE"); | |
266 | < | if (i == string::npos) { |
266 | > | if (static_cast<size_t>(i) == string::npos) { |
267 | sprintf(painCave.errMsg, | |
268 | "SimCreator: File: %s is not an OOPSE file!\n", | |
269 | mdFileName.c_str()); | |
# | Line 330 | Line 329 | namespace oopse { | |
329 | Globals* simParams = parseFile(rawMetaDataStream, mdFileName, metaDataBlockStart+1); | |
330 | ||
331 | //create the force field | |
332 | < | ForceField * ff = ForceFieldFactory::getInstance() |
333 | < | ->createForceField(simParams->getForceField()); |
335 | < | |
332 | > | ForceField * ff = ForceFieldFactory::getInstance()->createForceField(simParams->getForceField()); |
333 | > | |
334 | if (ff == NULL) { | |
335 | sprintf(painCave.errMsg, | |
336 | "ForceField Factory can not create %s force field\n", | |
# | Line 395 | Line 393 | namespace oopse { | |
393 | //responsibility to LocalIndexManager. | |
394 | setGlobalIndex(info); | |
395 | ||
396 | < | //Although addExcludePairs is called inside SimInfo's addMolecule |
396 | > | //Although addInteractionPairs is called inside SimInfo's addMolecule |
397 | //method, at that point atoms don't have the global index yet | |
398 | //(their global index are all initialized to -1). Therefore we | |
399 | < | //have to call addExcludePairs explicitly here. A way to work |
399 | > | //have to call addInteractionPairs explicitly here. A way to work |
400 | //around is that we can determine the beginning global indices of | |
401 | //atoms before they get created. | |
402 | SimInfo::MoleculeIterator mi; | |
403 | Molecule* mol; | |
404 | for (mol= info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { | |
405 | < | info->addExcludePairs(mol); |
405 | > | info->addInteractionPairs(mol); |
406 | } | |
407 | ||
408 | if (loadInitCoords) | |
# | Line 591 | Line 589 | namespace oopse { | |
589 | info->setMolToProcMap(molToProcMap); | |
590 | sprintf(checkPointMsg, | |
591 | "Successfully divided the molecules among the processors.\n"); | |
592 | < | MPIcheckPoint(); |
592 | > | errorCheckPoint(); |
593 | } | |
594 | ||
595 | #endif | |
# | Line 724 | Line 722 | namespace oopse { | |
722 | // to get the full globalGroupMembership array (We think). | |
723 | // This would be prettier if we could use MPI_IN_PLACE like the MPI-2 | |
724 | // docs said we could. | |
725 | < | std::vector<int> tmpGroupMembership(nGlobalAtoms, 0); |
725 | > | std::vector<int> tmpGroupMembership(info->getNGlobalAtoms(), 0); |
726 | MPI_Allreduce(&globalGroupMembership[0], &tmpGroupMembership[0], nGlobalAtoms, | |
727 | MPI_INT, MPI_SUM, MPI_COMM_WORLD); | |
728 | info->setGlobalGroupMembership(tmpGroupMembership); | |
# | Line 736 | Line 734 | namespace oopse { | |
734 | std::vector<int> globalMolMembership(info->getNGlobalAtoms(), 0); | |
735 | ||
736 | for(mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { | |
739 | – | |
737 | for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) { | |
738 | globalMolMembership[atom->getGlobalIndex()] = mol->getGlobalIndex(); | |
739 | } | |
740 | } | |
741 | ||
742 | #ifdef IS_MPI | |
743 | < | std::vector<int> tmpMolMembership(nGlobalAtoms, 0); |
743 | > | std::vector<int> tmpMolMembership(info->getNGlobalAtoms(), 0); |
744 | ||
745 | MPI_Allreduce(&globalMolMembership[0], &tmpMolMembership[0], nGlobalAtoms, | |
746 | MPI_INT, MPI_SUM, MPI_COMM_WORLD); | |
# | Line 769 | Line 766 | namespace oopse { | |
766 | std::vector<int> numIntegrableObjectsPerMol = nIOPerMol; | |
767 | #endif | |
768 | ||
769 | < | std::vector<int> startingIOIndexForMol(info->getNGlobalMolecules()); |
770 | < | |
771 | < | int startingIndex = 0; |
772 | < | for (int i = 0; i < info->getNGlobalMolecules(); i++) { |
773 | < | startingIOIndexForMol[i] = startingIndex; |
774 | < | startingIndex += numIntegrableObjectsPerMol[i]; |
775 | < | } |
776 | < | |
777 | < | std::cerr << "nGIO = " << info->getNGlobalIntegrableObjects() << "\n"; |
778 | < | std::vector<StuntDouble*> IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL); |
782 | < | for (mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { |
769 | > | std::vector<int> startingIOIndexForMol(info->getNGlobalMolecules()); |
770 | > | |
771 | > | int startingIndex = 0; |
772 | > | for (int i = 0; i < info->getNGlobalMolecules(); i++) { |
773 | > | startingIOIndexForMol[i] = startingIndex; |
774 | > | startingIndex += numIntegrableObjectsPerMol[i]; |
775 | > | } |
776 | > | |
777 | > | std::vector<StuntDouble*> IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL); |
778 | > | for (mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) { |
779 | int myGlobalIndex = mol->getGlobalIndex(); | |
780 | int globalIO = startingIOIndexForMol[myGlobalIndex]; | |
785 | – | std::cerr << "myGlobalIndex = " << myGlobalIndex << " globalIO = " << globalIO << "\n"; |
781 | for (StuntDouble* integrableObject = mol->beginIntegrableObject(ioi); integrableObject != NULL; | |
782 | integrableObject = mol->nextIntegrableObject(ioi)) { | |
783 | < | integrableObject->setGlobalIntegrableObjectIndex(globalIO); |
784 | < | IOIndexToIntegrableObject[globalIO] = integrableObject; |
785 | < | globalIO++; |
783 | > | integrableObject->setGlobalIntegrableObjectIndex(globalIO); |
784 | > | IOIndexToIntegrableObject[globalIO] = integrableObject; |
785 | > | globalIO++; |
786 | } | |
787 | } | |
788 | < | |
789 | < | info->setIOIndexToIntegrableObject(IOIndexToIntegrableObject); |
790 | < | |
788 | > | |
789 | > | info->setIOIndexToIntegrableObject(IOIndexToIntegrableObject); |
790 | > | |
791 | } | |
792 | ||
793 | void SimCreator::loadCoordinates(SimInfo* info, const std::string& mdFileName) { |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |