| 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 |
|
|
| 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 |
| 145 |
|
treeParser.initializeASTFactory(factory); |
| 146 |
|
treeParser.setASTFactory(&factory); |
| 147 |
|
simParams = treeParser.walkTree(parser.getAST()); |
| 148 |
– |
|
| 148 |
|
} |
| 149 |
|
|
| 150 |
|
|
| 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()); |
| 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", |
| 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) |
| 589 |
|
info->setMolToProcMap(molToProcMap); |
| 590 |
|
sprintf(checkPointMsg, |
| 591 |
|
"Successfully divided the molecules among the processors.\n"); |
| 592 |
< |
MPIcheckPoint(); |
| 592 |
> |
errorCheckPoint(); |
| 593 |
|
} |
| 594 |
|
|
| 595 |
|
#endif |
| 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); |
| 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); |
| 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) { |