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

Comparing branches/new_design/OOPSE-2.0/src/brains/SimInfo.cpp (file contents):
Revision 1739 by tim, Mon Nov 15 18:02:15 2004 UTC vs.
Revision 1804 by tim, Tue Nov 30 19:58:25 2004 UTC

# Line 33 | Line 33
33   #include <algorithm>
34  
35   #include "brains/SimInfo.hpp"
36 + #include "primitives/Molecule.hpp"
37 + #include "UseTheForce/notifyCutoffs_interface.h"
38   #include "utils/MemoryUtils.hpp"
39 + #include "utils/simError.h"
40  
41   namespace oopse {
42  
43 < SimInfo::SimInfo(const std::vector<std::pair<MoleculeStamp*, int> >& molStampPairs,
43 > SimInfo::SimInfo(std::vector<std::pair<MoleculeStamp*, int> >& molStampPairs,
44                                  ForceField* ff, Globals* globals) :
45                                  forceField_(ff), globals_(globals), nAtoms_(0), nBonds_(0),
46                                  nBends_(0), nTorsions_(0), nRigidBodies_(0), nIntegrableObjects_(0),
47 <                                nCutoffGroups_(0), nConstraints_(0), nZConstraint_(0), sman_(NULL),
47 >                                nCutoffGroups_(0), nConstraints_(0), nZconstraint_(0), sman_(NULL),
48                                  fortranInitialized_(false) {
49  
50      std::vector<std::pair<MoleculeStamp*, int> >::iterator i;
# Line 63 | Line 66 | SimInfo::SimInfo(const std::vector<std::pair<MoleculeS
66      
67      nGroups = 0;
68      nCutoffAtoms = 0;
66
67    nRigidBodies
69      nRigidBodies = 0;
70      
71      for (i = molStampPairs.begin(); i !=molStampPairs.end(); ++i) {
# Line 239 | Line 240 | void SimInfo::calcNdf() {
240  
241      // nZconstraints_ is global, as are the 3 COM translations for the
242      // entire system:
243 <    ndf_ = ndf_ - 3 - nZconstraints_;
243 >    ndf_ = ndf_ - 3 - nZconstraint_;
244  
245   }
246  
# Line 290 | Line 291 | void SimInfo::calcNdfTrans() {
291      ndfTrans_ = ndfTrans_local;
292   #endif
293  
294 <    ndfTrans_ = ndfTrans_ - 3 - nZconstraints_;
294 >    ndfTrans_ = ndfTrans_ - 3 - nZconstraint_;
295  
296   }
297  
# Line 322 | Line 323 | void SimInfo::addExcludePairs(Molecule* mol) {
323          exclude_.addPair(b, c);        
324      }
325  
326 <    for (torsion= mol->beginTorsion(torsionIter); torsion != NULL; torsion = mol->nextBond(torsionIter)) {
326 >    for (torsion= mol->beginTorsion(torsionIter); torsion != NULL; torsion = mol->nextTorsion(torsionIter)) {
327          a = torsion->getAtomA()->getGlobalIndex();
328          b = torsion->getAtomB()->getGlobalIndex();        
329          c = torsion->getAtomC()->getGlobalIndex();        
# Line 367 | Line 368 | void SimInfo::removeExcludePairs(Molecule* mol) {
368          exclude_.removePair(b, c);        
369      }
370  
371 <    for (torsion= mol->beginTorsion(torsionIter); torsion != NULL; torsion = mol->nextBond(torsionIter)) {
371 >    for (torsion= mol->beginTorsion(torsionIter); torsion != NULL; torsion = mol->nextTorsion(torsionIter)) {
372          a = torsion->getAtomA()->getGlobalIndex();
373          b = torsion->getAtomB()->getGlobalIndex();        
374          c = torsion->getAtomC()->getGlobalIndex();        
# Line 391 | Line 392 | void SimInfo::addMoleculeStamp(MoleculeStamp* molStamp
392      curStampId = molStampIds_.size();
393  
394      moleculeStamps_.push_back(molStamp);
395 <    molStampIds_.insert(molStampIds_.end(), nmol, curStampId)
395 >    molStampIds_.insert(molStampIds_.end(), nmol, curStampId);
396   }
397  
398   void SimInfo::update() {
# Line 425 | Line 426 | std::set<AtomType*> SimInfo::getUniqueAtomTypes() {
426   }
427  
428   std::set<AtomType*> SimInfo::getUniqueAtomTypes() {
429 <    typename SimInfo::MoleculeIterator mi;
429 >    SimInfo::MoleculeIterator mi;
430      Molecule* mol;
431 <    typename Molecule::AtomIterator ai;
431 >    Molecule::AtomIterator ai;
432      Atom* atom;
433      std::set<AtomType*> atomTypes;
434  
# Line 465 | Line 466 | void SimInfo::setupSimType() {
466  
467      //loop over all of the atom types
468      for (i = atomTypes.begin(); i != atomTypes.end(); ++i) {
469 <        useLennardJones |= i->isLennardJones();
470 <        useElectrostatic |= i->isElectrostatic();
471 <        useEAM |= i->isEAM();
472 <        useCharge |= i->isCharge();
473 <        useDirectional |= i->isDirectional();
474 <        useDipole |= i->isDipole();
475 <        useGayBerne |= i->isGayBerne();
476 <        useSticky |= i->isSticky();
477 <        useShape |= i->isShape();
469 >        useLennardJones |= (*i)->isLennardJones();
470 >        useElectrostatic |= (*i)->isElectrostatic();
471 >        useEAM |= (*i)->isEAM();
472 >        useCharge |= (*i)->isCharge();
473 >        useDirectional |= (*i)->isDirectional();
474 >        useDipole |= (*i)->isDipole();
475 >        useGayBerne |= (*i)->isGayBerne();
476 >        useSticky |= (*i)->isSticky();
477 >        useShape |= (*i)->isShape();
478      }
479  
480      if (useSticky || useDipole || useGayBerne || useShape) {
# Line 539 | Line 540 | void SimInfo::setupSimType() {
540      fInfo_.SIM_uses_RF = useRF;
541  
542      if( fInfo_.SIM_uses_Dipoles && fInfo_.SIM_uses_RF) {
543 <        fInfo_.dielect = dielectric;
543 >
544 >        if (globals_->haveDielectric()) {
545 >            fInfo_.dielect = globals_->getDielectric();
546 >        } else {
547 >            sprintf(painCave.errMsg,
548 >                    "SimSetup Error: No Dielectric constant was set.\n"
549 >                    "\tYou are trying to use Reaction Field without"
550 >                    "\tsetting a dielectric constant!\n");
551 >            painCave.isFatal = 1;
552 >            simError();
553 >        }
554 >        
555      } else {
556          fInfo_.dielect = 0.0;
557      }
# Line 561 | Line 573 | void SimInfo::setupFortranSim() {
573  
574      //calculate mass ratio of cutoff group
575      std::vector<double> mfact;
576 <    typename SimInfo::MoleculeIterator mi;
576 >    SimInfo::MoleculeIterator mi;
577      Molecule* mol;
578 <    typename Molecule::CutoffGroupIterator ci;
578 >    Molecule::CutoffGroupIterator ci;
579      CutoffGroup* cg;
580 <    typename Molecule::AtomIterator ai;
580 >    Molecule::AtomIterator ai;
581      Atom* atom;
582      double totalMass;
583  
# Line 606 | Line 618 | void SimInfo::setupFortranSim() {
618      //gloalExcludes and molMembershipArray should go away (They are never used)
619      //why the hell fortran need to know molecule?
620      //OOPSE = Object-Obfuscated Parallel Simulation Engine
621 <    
622 <    setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray[0], &nExclude, exclude_->getExcludeList(),
623 <                  &nGlobalExcludes, globalExcludes, molMembershipArray,
621 >    int nGlobalExcludes = 0;
622 >    int* globalExcludes = NULL;
623 >    int* excludeList = exclude_.getExcludeList();
624 >    setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray[0], &nExclude, excludeList ,
625 >                  &nGlobalExcludes, globalExcludes, &molMembershipArray[0],
626                    &mfact[0], &nCutoffGroups_, &fortranGlobalGroupMembership[0], &isError);
627  
628      if( isError ){
# Line 634 | Line 648 | void SimInfo::setupFortranParallel() {
648      //SimInfo is responsible for creating localToGlobalAtomIndex and localToGlobalGroupIndex
649      std::vector<int> localToGlobalAtomIndex(getNAtoms(), 0);
650      std::vector<int> localToGlobalCutoffGroupIndex;
651 <    typename SimInfo::MoleculeIterator mi;
652 <    typename Molecule::AtomIterator ai;
653 <    typename Molecule::CutoffGroupIterator ci;
651 >    SimInfo::MoleculeIterator mi;
652 >    Molecule::AtomIterator ai;
653 >    Molecule::CutoffGroupIterator ci;
654      Molecule* mol;
655      Atom* atom;
656      CutoffGroup* cg;
# Line 690 | Line 704 | double SimInfo::calcMaxCutoffRadius() {
704   double SimInfo::calcMaxCutoffRadius() {
705  
706  
707 <    std::vector<AtomType*> atomTypes;
708 <    std::vector<AtomType*>::iterator i;
707 >    std::set<AtomType*> atomTypes;
708 >    std::set<AtomType*>::iterator i;
709      std::vector<double> cutoffRadius;
710  
711      //get the unique atom types
# Line 702 | Line 716 | double SimInfo::calcMaxCutoffRadius() {
716          cutoffRadius.push_back(forceField_->getRcutFromAtomType(*i));
717      }
718  
719 <    double maxCutoffRadius = std::max_element(cutoffRadius.begin(), cutoffRadius.end());
719 >    double maxCutoffRadius = *(std::max_element(cutoffRadius.begin(), cutoffRadius.end()));
720   #ifdef IS_MPI
721      //pick the max cutoff radius among the processors
722   #endif
# Line 752 | Line 766 | void SimInfo::setupCutoff() {
766          }
767  
768          if (globals_->haveRsw()) {
769 <            rsw_  = globals_->getRsw()
769 >            rsw_  = globals_->getRsw();
770          } else {
771              rsw_ = rcut_;
772          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines