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) { |