| 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", | 
| 340 | 
  | 
    } | 
| 341 | 
  | 
     | 
| 342 | 
  | 
    if (simParams->haveForceFieldFileName()) { | 
| 345 | 
– | 
      std::cout<< simParams->getForceFieldFileName() << "\n"; | 
| 343 | 
  | 
      ff->setForceFieldFileName(simParams->getForceFieldFileName()); | 
| 344 | 
  | 
    } | 
| 345 | 
  | 
     | 
| 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)) { | 
| 740 | 
– | 
       | 
| 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::vector<StuntDouble*> IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL); | 
| 778 | 
< | 
 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]; | 
| 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) { |