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

Comparing trunk/src/brains/SimInfo.cpp (file contents):
Revision 1940 by gezelter, Fri Nov 1 19:31:41 2013 UTC vs.
Revision 2022 by gezelter, Fri Sep 26 22:22:28 2014 UTC

# Line 72 | Line 72 | namespace OpenMD {
72      forceField_(ff), simParams_(simParams),
73      ndf_(0), fdf_local(0), ndfRaw_(0), ndfTrans_(0), nZconstraint_(0),
74      nGlobalMols_(0), nGlobalAtoms_(0), nGlobalCutoffGroups_(0),
75 <    nGlobalIntegrableObjects_(0), nGlobalRigidBodies_(0), nGlobalFluctuatingCharges_(0),
76 <    nAtoms_(0), nBonds_(0),  nBends_(0), nTorsions_(0), nInversions_(0),
75 >    nGlobalIntegrableObjects_(0), nGlobalRigidBodies_(0),
76 >    nGlobalFluctuatingCharges_(0), nGlobalBonds_(0), nGlobalBends_(0),
77 >    nGlobalTorsions_(0), nGlobalInversions_(0), nGlobalConstraints_(0),
78 >    nAtoms_(0), nBonds_(0), nBends_(0), nTorsions_(0), nInversions_(0),
79      nRigidBodies_(0), nIntegrableObjects_(0), nCutoffGroups_(0),
80 <    nConstraints_(0), nFluctuatingCharges_(0), sman_(NULL), topologyDone_(false),
81 <    calcBoxDipole_(false), useAtomicVirial_(true) {    
80 >    nConstraints_(0), nFluctuatingCharges_(0), sman_(NULL),
81 >    topologyDone_(false), calcBoxDipole_(false), calcBoxQuadrupole_(false),
82 >    useAtomicVirial_(true), hasNGlobalConstraints_(false) {    
83      
84      MoleculeStamp* molStamp;
85      int nMolWithSameStamp;
# Line 103 | Line 106 | namespace OpenMD {
106        addMoleculeStamp(molStamp, nMolWithSameStamp);
107        
108        //calculate atoms in molecules
109 <      nGlobalAtoms_ += molStamp->getNAtoms() *nMolWithSameStamp;  
109 >      nGlobalAtoms_ += molStamp->getNAtoms() * nMolWithSameStamp;
110 >      nGlobalBonds_ += molStamp->getNBonds() * nMolWithSameStamp;
111 >      nGlobalBends_ += molStamp->getNBends() * nMolWithSameStamp;
112 >      nGlobalTorsions_ += molStamp->getNTorsions() * nMolWithSameStamp;
113 >      nGlobalInversions_ += molStamp->getNInversions() * nMolWithSameStamp;
114        
115        //calculate atoms in cutoff groups
116        int nAtomsInGroups = 0;
# Line 275 | Line 282 | namespace OpenMD {
282      ndf_local -= nConstraints_;
283  
284   #ifdef IS_MPI
285 <    MPI::COMM_WORLD.Allreduce(&ndf_local, &ndf_, 1, MPI::INT,MPI::SUM);
286 <    MPI::COMM_WORLD.Allreduce(&nfq_local, &nGlobalFluctuatingCharges_, 1,
287 <                              MPI::INT, MPI::SUM);
285 >    MPI_Allreduce(&ndf_local, &ndf_, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
286 >    MPI_Allreduce(&nfq_local, &nGlobalFluctuatingCharges_, 1,
287 >      MPI_INT, MPI_SUM, MPI_COMM_WORLD);
288   #else
289      ndf_ = ndf_local;
290      nGlobalFluctuatingCharges_ = nfq_local;
# Line 291 | Line 298 | namespace OpenMD {
298  
299    int SimInfo::getFdf() {
300   #ifdef IS_MPI
301 <    MPI::COMM_WORLD.Allreduce(&fdf_local, &fdf_, 1, MPI::INT, MPI::SUM);
301 >    MPI_Allreduce(&fdf_local, &fdf_, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
302   #else
303      fdf_ = fdf_local;
304   #endif
# Line 347 | Line 354 | namespace OpenMD {
354      }
355      
356   #ifdef IS_MPI
357 <    MPI::COMM_WORLD.Allreduce(&ndfRaw_local, &ndfRaw_, 1, MPI::INT, MPI::SUM);
357 >    MPI_Allreduce(&ndfRaw_local, &ndfRaw_, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
358   #else
359      ndfRaw_ = ndfRaw_local;
360   #endif
# Line 357 | Line 364 | namespace OpenMD {
364      int ndfTrans_local;
365  
366      ndfTrans_local = 3 * nIntegrableObjects_ - nConstraints_;
360
367  
368   #ifdef IS_MPI
369 <    MPI::COMM_WORLD.Allreduce(&ndfTrans_local, &ndfTrans_, 1,
370 <                              MPI::INT, MPI::SUM);
369 >    MPI_Allreduce(&ndfTrans_local, &ndfTrans_, 1, MPI_INT, MPI_SUM,
370 >                  MPI_COMM_WORLD);
371   #else
372      ndfTrans_ = ndfTrans_local;
373   #endif
374  
375      ndfTrans_ = ndfTrans_ - 3 - nZconstraint_;
370
376    }
377  
378    void SimInfo::addInteractionPairs(Molecule* mol) {
# Line 704 | Line 709 | namespace OpenMD {
709     */
710    void SimInfo::update() {  
711      setupSimVariables();
712 +    calcNConstraints();
713      calcNdf();
714      calcNdfRaw();
715      calcNdfTrans();
# Line 743 | Line 749 | namespace OpenMD {
749      // count_local holds the number of found types on this processor
750      int count_local = foundTypes.size();
751  
752 <    int nproc = MPI::COMM_WORLD.Get_size();
752 >    int nproc;
753 >    MPI_Comm_size( MPI_COMM_WORLD, &nproc);
754  
755      // we need arrays to hold the counts and displacement vectors for
756      // all processors
# Line 751 | Line 758 | namespace OpenMD {
758      vector<int> disps(nproc, 0);
759  
760      // fill the counts array
761 <    MPI::COMM_WORLD.Allgather(&count_local, 1, MPI::INT, &counts[0],
762 <                              1, MPI::INT);
761 >    MPI_Allgather(&count_local, 1, MPI_INT, &counts[0],
762 >                  1, MPI_INT, MPI_COMM_WORLD);
763    
764      // use the processor counts to compute the displacement array
765      disps[0] = 0;    
# Line 766 | Line 773 | namespace OpenMD {
773      vector<int> ftGlobal(totalCount);
774      
775      // now spray out the foundTypes to all the other processors:    
776 <    MPI::COMM_WORLD.Allgatherv(&foundTypes[0], count_local, MPI::INT,
777 <                               &ftGlobal[0], &counts[0], &disps[0],
778 <                               MPI::INT);
776 >    MPI_Allgatherv(&foundTypes[0], count_local, MPI_INT,
777 >                   &ftGlobal[0], &counts[0], &disps[0],
778 >                   MPI_INT, MPI_COMM_WORLD);
779  
780      vector<int>::iterator j;
781  
# Line 815 | Line 822 | namespace OpenMD {
822        if ( simParams_->getAccumulateBoxDipole() ) {
823          calcBoxDipole_ = true;      
824        }
825 +    // we only call setAccumulateBoxQuadrupole if the accumulateBoxQuadrupole
826 +    // parameter is true
827 +    calcBoxQuadrupole_ = false;
828 +    if ( simParams_->haveAccumulateBoxQuadrupole() )
829 +      if ( simParams_->getAccumulateBoxQuadrupole() ) {
830 +        calcBoxQuadrupole_ = true;      
831 +      }
832      
833      set<AtomType*>::iterator i;
834      set<AtomType*> atomTypes;
# Line 832 | Line 846 | namespace OpenMD {
846      }
847  
848   #ifdef IS_MPI
849 <    bool temp;
849 >    int temp;
850 >
851      temp = usesDirectional;
852 <    MPI::COMM_WORLD.Allreduce(&temp, &usesDirectionalAtoms_, 1, MPI::BOOL,
853 <                              MPI::LOR);
839 <        
840 <    temp = usesMetallic;
841 <    MPI::COMM_WORLD.Allreduce(&temp, &usesMetallicAtoms_, 1, MPI::BOOL,
842 <                              MPI::LOR);
852 >    MPI_Allreduce(MPI_IN_PLACE, &temp, 1, MPI_INT,  MPI_LOR, MPI_COMM_WORLD);
853 >    usesDirectionalAtoms_ = (temp == 0) ? false : true;
854      
855 +    temp = usesMetallic;
856 +    MPI_Allreduce(MPI_IN_PLACE, &temp, 1, MPI_INT,  MPI_LOR, MPI_COMM_WORLD);
857 +    usesMetallicAtoms_ = (temp == 0) ? false : true;
858 +
859      temp = usesElectrostatic;
860 <    MPI::COMM_WORLD.Allreduce(&temp, &usesElectrostaticAtoms_, 1, MPI::BOOL,
861 <                              MPI::LOR);
860 >    MPI_Allreduce(MPI_IN_PLACE, &temp, 1, MPI_INT,  MPI_LOR, MPI_COMM_WORLD);
861 >    usesElectrostaticAtoms_ = (temp == 0) ? false : true;
862  
863      temp = usesFluctuatingCharges;
864 <    MPI::COMM_WORLD.Allreduce(&temp, &usesFluctuatingCharges_, 1, MPI::BOOL,
865 <                              MPI::LOR);
864 >    MPI_Allreduce(MPI_IN_PLACE, &temp, 1, MPI_INT,  MPI_LOR, MPI_COMM_WORLD);
865 >    usesFluctuatingCharges_ = (temp == 0) ? false : true;
866   #else
867  
868      usesDirectionalAtoms_ = usesDirectional;
# Line 988 | Line 1003 | namespace OpenMD {
1003      delete sman_;
1004      sman_ = sman;
1005  
991    Molecule* mol;
992    RigidBody* rb;
993    Atom* atom;
994    CutoffGroup* cg;
1006      SimInfo::MoleculeIterator mi;
1007 +    Molecule::AtomIterator ai;
1008      Molecule::RigidBodyIterator rbIter;
997    Molecule::AtomIterator atomIter;
1009      Molecule::CutoffGroupIterator cgIter;
1010 +    Molecule::BondIterator bondIter;
1011 +    Molecule::BendIterator bendIter;
1012 +    Molecule::TorsionIterator torsionIter;
1013 +    Molecule::InversionIterator inversionIter;
1014  
1015 +    Molecule* mol;
1016 +    Atom* atom;
1017 +    RigidBody* rb;
1018 +    CutoffGroup* cg;
1019 +    Bond* bond;
1020 +    Bend* bend;
1021 +    Torsion* torsion;
1022 +    Inversion* inversion;    
1023 +
1024      for (mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) {
1025          
1026 <      for (atom = mol->beginAtom(atomIter); atom != NULL;
1027 <           atom = mol->nextAtom(atomIter)) {
1026 >      for (atom = mol->beginAtom(ai); atom != NULL;
1027 >           atom = mol->nextAtom(ai)) {
1028          atom->setSnapshotManager(sman_);
1029 <      }
1006 <        
1029 >      }        
1030        for (rb = mol->beginRigidBody(rbIter); rb != NULL;
1031             rb = mol->nextRigidBody(rbIter)) {
1032          rb->setSnapshotManager(sman_);
1033        }
1011
1034        for (cg = mol->beginCutoffGroup(cgIter); cg != NULL;
1035             cg = mol->nextCutoffGroup(cgIter)) {
1036          cg->setSnapshotManager(sman_);
1037        }
1038 <    }    
1039 <    
1038 >      for (bond = mol->beginBond(bondIter); bond != NULL;
1039 >           bond = mol->nextBond(bondIter)) {
1040 >        bond->setSnapshotManager(sman_);
1041 >      }
1042 >      for (bend = mol->beginBend(bendIter); bend != NULL;
1043 >           bend = mol->nextBend(bendIter)) {
1044 >        bend->setSnapshotManager(sman_);
1045 >      }
1046 >      for (torsion = mol->beginTorsion(torsionIter); torsion != NULL;
1047 >           torsion = mol->nextTorsion(torsionIter)) {
1048 >        torsion->setSnapshotManager(sman_);
1049 >      }
1050 >      for (inversion = mol->beginInversion(inversionIter); inversion != NULL;
1051 >           inversion = mol->nextInversion(inversionIter)) {
1052 >        inversion->setSnapshotManager(sman_);
1053 >      }
1054 >    }
1055    }
1056  
1057  
# Line 1040 | Line 1077 | namespace OpenMD {
1077      IOIndexToIntegrableObject= v;
1078    }
1079  
1080 <  int SimInfo::getNGlobalConstraints() {
1044 <    int nGlobalConstraints;
1080 >  void SimInfo::calcNConstraints() {
1081   #ifdef IS_MPI
1082 <    MPI::COMM_WORLD.Allreduce(&nConstraints_, &nGlobalConstraints, 1,
1083 <                              MPI::INT, MPI::SUM);
1082 >    MPI_Allreduce(&nConstraints_, &nGlobalConstraints_, 1,  
1083 >                  MPI_INT, MPI_SUM, MPI_COMM_WORLD);
1084   #else
1085 <    nGlobalConstraints =  nConstraints_;
1085 >    nGlobalConstraints_ =  nConstraints_;
1086   #endif
1051    return nGlobalConstraints;
1087    }
1088  
1089   }//end namespace OpenMD

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines