ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/brains/SimCreator.cpp
(Generate patch)

Comparing:
trunk/src/brains/SimCreator.cpp (file contents), Revision 1287 by gezelter, Wed Sep 10 18:11:32 2008 UTC vs.
branches/development/src/brains/SimCreator.cpp (file contents), Revision 1535 by gezelter, Fri Dec 31 18:31:56 2010 UTC

# Line 6 | Line 6
6   * redistribute this software in source and binary code form, provided
7   * that the following conditions are met:
8   *
9 < * 1. Acknowledgement of the program authors must be made in any
10 < *    publication of scientific results based in part on use of the
11 < *    program.  An acceptable form of acknowledgement is citation of
12 < *    the article in which the program was described (Matthew
13 < *    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 < *    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 < *    Parallel Simulation Engine for Molecular Dynamics,"
16 < *    J. Comput. Chem. 26, pp. 252-271 (2005))
17 < *
18 < * 2. Redistributions of source code must retain the above copyright
9 > * 1. Redistributions of source code must retain the above copyright
10   *    notice, this list of conditions and the following disclaimer.
11   *
12 < * 3. Redistributions in binary form must reproduce the above copyright
12 > * 2. Redistributions in binary form must reproduce the above copyright
13   *    notice, this list of conditions and the following disclaimer in the
14   *    documentation and/or other materials provided with the
15   *    distribution.
# Line 37 | Line 28
28   * arising out of the use of or inability to use software, even if the
29   * University of Notre Dame has been advised of the possibility of
30   * such damages.
31 + *
32 + * SUPPORT OPEN SCIENCE!  If you use OpenMD or its source code in your
33 + * research, please cite the appropriate papers when you publish your
34 + * work.  Good starting points are:
35 + *                                                                      
36 + * [1]  Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).            
37 + * [2]  Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).          
38 + * [3]  Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008).          
39 + * [4]  Vardeman & Gezelter, in progress (2009).                        
40   */
41  
42   /**
# Line 79 | Line 79
79   #include "math/ParallelRandNumGen.hpp"
80   #endif
81  
82 < namespace oopse {
82 > namespace OpenMD {
83    
84    Globals* SimCreator::parseFile(std::istream& rawMetaDataStream, const std::string& filename, int startOfMetaDataBlock ){
85      Globals* simParams = NULL;
# 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 214 | Line 214 | namespace oopse {
214        painCave.isFatal = 1;
215        simError();        
216      }
217 <    catch (OOPSEException& e) {
217 >    catch (OpenMDException& e) {
218        sprintf(painCave.errMsg,
219                "%s\n",
220                e.getMessage().c_str());
# Line 234 | Line 234 | namespace oopse {
234    
235    SimInfo*  SimCreator::createSim(const std::string & mdFileName,
236                                    bool loadInitCoords) {
237 <
237 >    
238      const int bufferSize = 65535;
239      char buffer[bufferSize];
240      int lineNo = 0;
# Line 262 | Line 262 | namespace oopse {
262        mdFile_.getline(buffer, bufferSize);
263        ++lineNo;
264        std::string line = trimLeftCopy(buffer);
265 <      i = CaseInsensitiveFind(line, "<OOPSE");
265 >      i = CaseInsensitiveFind(line, "<OpenMD");
266        if (static_cast<size_t>(i) == string::npos) {
267 +        // try the older file strings to see if that works:
268 +        i = CaseInsensitiveFind(line, "<OOPSE");
269 +      }
270 +      
271 +      if (static_cast<size_t>(i) == string::npos) {
272 +        // still no luck!
273          sprintf(painCave.errMsg,
274 <                "SimCreator: File: %s is not an OOPSE file!\n",
274 >                "SimCreator: File: %s is not a valid OpenMD file!\n",
275                  mdFileName.c_str());
276          painCave.isFatal = 1;
277          simError();
# Line 363 | Line 369 | namespace oopse {
369      }
370      
371      ff->parse(forcefieldFileName);
366    ff->setFortranForceOptions();
372      //create SimInfo
373      SimInfo * info = new SimInfo(ff, simParams);
374  
# Line 471 | Line 476 | namespace oopse {
476                "\tthe number of molecules.  This will not result in a \n"
477                "\tusable division of atoms for force decomposition.\n"
478                "\tEither try a smaller number of processors, or run the\n"
479 <              "\tsingle-processor version of OOPSE.\n", nProcessors, nGlobalMols);
479 >              "\tsingle-processor version of OpenMD.\n", nProcessors, nGlobalMols);
480        
481        painCave.isFatal = 1;
482        simError();
# Line 722 | Line 727 | namespace oopse {
727      // to get the full globalGroupMembership array (We think).
728      // This would be prettier if we could use MPI_IN_PLACE like the MPI-2
729      // docs said we could.
730 <    std::vector<int> tmpGroupMembership(nGlobalAtoms, 0);
730 >    std::vector<int> tmpGroupMembership(info->getNGlobalAtoms(), 0);
731      MPI_Allreduce(&globalGroupMembership[0], &tmpGroupMembership[0], nGlobalAtoms,
732                    MPI_INT, MPI_SUM, MPI_COMM_WORLD);
733      info->setGlobalGroupMembership(tmpGroupMembership);
# Line 734 | Line 739 | namespace oopse {
739      std::vector<int> globalMolMembership(info->getNGlobalAtoms(), 0);
740      
741      for(mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) {
737      
742        for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) {
743          globalMolMembership[atom->getGlobalIndex()] = mol->getGlobalIndex();
744        }
745      }
746      
747   #ifdef IS_MPI
748 <    std::vector<int> tmpMolMembership(nGlobalAtoms, 0);
748 >    std::vector<int> tmpMolMembership(info->getNGlobalAtoms(), 0);
749      
750      MPI_Allreduce(&globalMolMembership[0], &tmpMolMembership[0], nGlobalAtoms,
751                    MPI_INT, MPI_SUM, MPI_COMM_WORLD);
# Line 767 | Line 771 | namespace oopse {
771      std::vector<int> numIntegrableObjectsPerMol = nIOPerMol;
772   #endif    
773  
774 < std::vector<int> startingIOIndexForMol(info->getNGlobalMolecules());
775 <
776 < int startingIndex = 0;
777 < for (int i = 0; i < info->getNGlobalMolecules(); i++) {
778 <  startingIOIndexForMol[i] = startingIndex;
779 <  startingIndex += numIntegrableObjectsPerMol[i];
780 < }
781 <
782 < std::vector<StuntDouble*> IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL);
783 < for (mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) {
774 >    std::vector<int> startingIOIndexForMol(info->getNGlobalMolecules());
775 >    
776 >    int startingIndex = 0;
777 >    for (int i = 0; i < info->getNGlobalMolecules(); i++) {
778 >      startingIOIndexForMol[i] = startingIndex;
779 >      startingIndex += numIntegrableObjectsPerMol[i];
780 >    }
781 >    
782 >    std::vector<StuntDouble*> IOIndexToIntegrableObject(info->getNGlobalIntegrableObjects(), (StuntDouble*)NULL);
783 >    for (mol = info->beginMolecule(mi); mol != NULL; mol = info->nextMolecule(mi)) {
784        int myGlobalIndex = mol->getGlobalIndex();
785        int globalIO = startingIOIndexForMol[myGlobalIndex];
786        for (StuntDouble* integrableObject = mol->beginIntegrableObject(ioi); integrableObject != NULL;
787             integrableObject = mol->nextIntegrableObject(ioi)) {
788 <            integrableObject->setGlobalIntegrableObjectIndex(globalIO);
789 <            IOIndexToIntegrableObject[globalIO] = integrableObject;
790 <            globalIO++;
788 >        integrableObject->setGlobalIntegrableObjectIndex(globalIO);
789 >        IOIndexToIntegrableObject[globalIO] = integrableObject;
790 >        globalIO++;
791        }
792      }
793 <
794 <  info->setIOIndexToIntegrableObject(IOIndexToIntegrableObject);
795 <  
793 >    
794 >    info->setIOIndexToIntegrableObject(IOIndexToIntegrableObject);
795 >    
796    }
797    
798    void SimCreator::loadCoordinates(SimInfo* info, const std::string& mdFileName) {
# Line 814 | Line 818 | int startingIndex = 0;
818      info->getSnapshotManager()->advance();
819    }
820    
821 < } //end namespace oopse
821 > } //end namespace OpenMD
822  
823  

Comparing:
trunk/src/brains/SimCreator.cpp (property svn:keywords), Revision 1287 by gezelter, Wed Sep 10 18:11:32 2008 UTC vs.
branches/development/src/brains/SimCreator.cpp (property svn:keywords), Revision 1535 by gezelter, Fri Dec 31 18:31:56 2010 UTC

# Line 0 | Line 1
1 + Author Id Revision Date

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines