ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-3.0/src/brains/SimInfo.cpp
(Generate patch)

Comparing branches/new_design/OOPSE-3.0/src/brains/SimInfo.cpp (file contents):
Revision 1722 by tim, Tue Nov 9 23:11:39 2004 UTC vs.
Revision 1727 by tim, Thu Nov 11 16:41:58 2004 UTC

# Line 43 | Line 43 | SimInfo::~SimInfo() {
43   }
44  
45   SimInfo::~SimInfo() {
46 <    MemoryUtils::deleteVectorOfPointer(molecules_);
46 >    //MemoryUtils::deleteVectorOfPointer(molecules_);
47      delete sman_;
48  
49   }
50  
51  
52   bool SimInfo::addMolecule(Molecule* mol) {
53 <    std::vector<Molecule*>::iterator i;
53 >    MoleculeIterator i;
54      i = std::find(molecules_.begin(), molecules_.end(), mol);
55      if (i != molecules_.end() ) {
56        molecules_.push_back(mol);
56  
57 +        molecules_.insert(make_pair(mol->getGlobalIndex(), mol));
58 +        
59          nAtoms_ += mol->getNAtoms();
60          nBonds_ += mol->getNBonds();
61          nBends_ += mol->getNBends();
# Line 71 | Line 72 | bool SimInfo::removeMolecule(Molecule* mol) {
72   }
73  
74   bool SimInfo::removeMolecule(Molecule* mol) {
75 <    std::vector<Molecule*>::iterator i;
75 >    MoleculeIterator i;
76      i = std::find(molecules_.begin(), molecules_.end(), mol);
77  
78      if (i != molecules_.end() ) {
79 <        molecules_.push_back(mol);
79 >
80          nAtoms_ -= mol->getNAtoms();
81          nBonds_ -= mol->getNBonds();
82          nBends_ -= mol->getNBends();
# Line 85 | Line 86 | bool SimInfo::removeMolecule(Molecule* mol) {
86          nCutoffGroups_ -= mol->getNCutoffGroups();
87          nConstraints_ -= mol->getNConstraints();
88  
89 +        molecules_.erase(mol->getGlobalIndex());
90 +
91 +        delete mol;
92 +        
93          return true;
94      } else {
95          return false;
# Line 94 | Line 99 | Molecule* SimInfo::beginMolecule(std::vector<Molecule*
99   }    
100  
101          
102 < Molecule* SimInfo::beginMolecule(std::vector<Molecule*>::iterator& i) {
102 > Molecule* SimInfo::beginMolecule(MoleculeIterator& i) {
103      i = molecules_.begin();
104      return i == molecules_.end() ? NULL : *i;
105   }    
106  
107 < Molecule* SimInfo::nextMolecule(std::vector<Molecule*>::iterator& i) {
107 > Molecule* SimInfo::nextMolecule(MoleculeIterator& i) {
108      ++i;
109      return i == molecules_.end() ? NULL : *i;    
110   }
# Line 107 | Line 112 | void SimInfo::calcNdf() {
112  
113   void SimInfo::calcNdf() {
114      int ndf_local;
115 <    std::vector<Molecule*>::iterator i;
115 >    MoleculeIterator i;
116      std::vector<StuntDouble*>::iterator j;
117      Molecule* mol;
118      StuntDouble* integrableObject;
# Line 149 | Line 154 | void SimInfo::calcNdfRaw() {
154   void SimInfo::calcNdfRaw() {
155      int ndfRaw_local;
156  
157 <    std::vector<Molecule*>::iterator i;
157 >    MoleculeIterator i;
158      std::vector<StuntDouble*>::iterator j;
159      Molecule* mol;
160      StuntDouble* integrableObject;
# Line 287 | Line 292 | void SimInfo::removeExcludePairs(Molecule* mol) {
292   }
293  
294  
295 + void SimInfo::addMoleculeStamp(MoleculeStamp* molStamp, int nmol) {
296 +    int curStampId;
297 +
298 +    //index from 0
299 +    curStampId = molStampIds_.size();
300 +
301 +    moleculeStamps_.push_back(molStamp);
302 +    molStampIds_.insert(molStampIds_.end(), nmol, curStampId)
303 + }
304 +
305 + void SimInfo::update() {
306 +
307 +
308 +    
309 +    //SimInfo is responsible for creating localToGlobalAtomIndex and localToGlobalGroupIndex
310 +    std::vector<int> localToGlobalAtomIndex(getNAtoms(), 0);
311 +    std::vector<int> localToGlobalCutoffGroupIndex;
312 +    typename SimInfo::MoleculeIterator mi;
313 +    typename Molecule::AtomIterator ai;
314 +    typename Molecule::CutoffGroupIterator ci;
315 +    Molecule* mol;
316 +    Atom* atom;
317 +    CutoffGroup* cg;
318 +    mpiSimData parallelData;
319 +    int isError;
320 +
321 +    for (mol = beginMolecule(mi); mol != NULL; mol  = nextMolecule(mi)) {
322 +
323 +        //local index(index in DataStorge) of atom is important
324 +        for (atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) {
325 +            localToGlobalAtomIndex[atom->getLocalIndex()] = atom->getGlobalIndex() + 1;
326 +        }
327 +
328 +        //local index of cutoff group is trivial, it only depends on the order of travesing
329 +        for (cg = mol->beginCutoffGroup(ci); cg != NULL; cg = mol->nextCutoffGroup(ci)) {
330 +            localToGlobalCutoffGroupIndex.push_back(cg->getGlobalIndex() + 1);
331 +        }        
332 +        
333 +    }
334 +
335 +    //Setup Parallel Data and pass the index arrays to fortran
336 +    parallelData.nMolGlobal = getNMolGlobal();
337 +    parallelData.nMolLocal = ;
338 +    parallelData.nAtomsGlobal = ;
339 +    parallelData.nAtomsLocal = ;
340 +    parallelData.nGroupsGlobal = ;
341 +    parallelData.nGroupsLocal = ;
342 +    parallelData.myNode = worldRank;
343 +    MPI_Comm_size(MPI_COMM_WORLD, &(parallelData->nProcessors));
344 +    
345 +    setFsimParallel(parallelData,            &(parallelData->nAtomsLocal),
346 +                    &localToGlobalAtomIndex[0],  &(parallelData->nGroupsLocal),
347 +                    &localToGlobalCutoffGroupIndex[0], &isError);
348 +
349 +    if (isError) {
350 +        sprintf(painCave.errMsg,
351 +                "mpiRefresh errror: fortran didn't like something we gave it.\n");
352 +        painCave.isFatal = 1;
353 +        simError();
354 +    }
355 +
356 +    sprintf(checkPointMsg, " mpiRefresh successful.\n");
357 +    MPIcheckPoint();
358 +
359 +
360 + }
361 +
362 + std::ostream& operator <<(ostream& o, SimInfo& info) {
363 +
364 +    return o;
365 + }
366 +
367   }//end namespace oopse

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines