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

Comparing branches/development/src/brains/SimInfo.cpp (file contents):
Revision 1627 by gezelter, Tue Sep 13 22:05:04 2011 UTC vs.
Revision 1744 by gezelter, Tue Jun 5 18:07:08 2012 UTC

# Line 36 | Line 36
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).                        
39 > * [4]  Kuang & Gezelter,  J. Chem. Phys. 133, 164101 (2010).
40 > * [5]  Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41   */
42  
43   /**
# Line 58 | Line 59
59   #include "utils/simError.h"
60   #include "selection/SelectionManager.hpp"
61   #include "io/ForceFieldOptions.hpp"
62 < #include "UseTheForce/ForceField.hpp"
62 > #include "brains/ForceField.hpp"
63   #include "nonbonded/SwitchingFunction.hpp"
64   #ifdef IS_MPI
65   #include <mpi.h>
# Line 71 | 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),
75 >    nGlobalIntegrableObjects_(0), nGlobalRigidBodies_(0), nGlobalFluctuatingCharges_(0),
76      nAtoms_(0), nBonds_(0),  nBends_(0), nTorsions_(0), nInversions_(0),
77      nRigidBodies_(0), nIntegrableObjects_(0), nCutoffGroups_(0),
78 <    nConstraints_(0), sman_(NULL), topologyDone_(false),
78 >    nConstraints_(0), nFluctuatingCharges_(0), sman_(NULL), topologyDone_(false),
79      calcBoxDipole_(false), useAtomicVirial_(true) {    
80      
81      MoleculeStamp* molStamp;
# Line 224 | Line 225 | namespace OpenMD {
225  
226  
227    void SimInfo::calcNdf() {
228 <    int ndf_local;
228 >    int ndf_local, nfq_local;
229      MoleculeIterator i;
230      vector<StuntDouble*>::iterator j;
231 +    vector<Atom*>::iterator k;
232 +
233      Molecule* mol;
234      StuntDouble* integrableObject;
235 +    Atom* atom;
236  
237      ndf_local = 0;
238 +    nfq_local = 0;
239      
240      for (mol = beginMolecule(i); mol != NULL; mol = nextMolecule(i)) {
241        for (integrableObject = mol->beginIntegrableObject(j); integrableObject != NULL;
# Line 245 | Line 250 | namespace OpenMD {
250              ndf_local += 3;
251            }
252          }
248            
253        }
254 +      for (atom = mol->beginFluctuatingCharge(k); atom != NULL;
255 +           atom = mol->nextFluctuatingCharge(k)) {
256 +        if (atom->isFluctuatingCharge()) {
257 +          nfq_local++;
258 +        }
259 +      }
260      }
261      
262 +    ndfLocal_ = ndf_local;
263 +    cerr << "ndfLocal_ = " << ndfLocal_ << "\n";
264 +
265      // n_constraints is local, so subtract them on each processor
266      ndf_local -= nConstraints_;
267  
268   #ifdef IS_MPI
269      MPI_Allreduce(&ndf_local,&ndf_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD);
270 +    MPI_Allreduce(&nfq_local,&nGlobalFluctuatingCharges_,1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
271   #else
272      ndf_ = ndf_local;
273 +    nGlobalFluctuatingCharges_ = nfq_local;
274   #endif
275  
276      // nZconstraints_ is global, as are the 3 COM translations for the
# Line 779 | Line 794 | namespace OpenMD {
794      int usesElectrostatic = 0;
795      int usesMetallic = 0;
796      int usesDirectional = 0;
797 +    int usesFluctuatingCharges =  0;
798      //loop over all of the atom types
799      for (i = atomTypes.begin(); i != atomTypes.end(); ++i) {
800        usesElectrostatic |= (*i)->isElectrostatic();
801        usesMetallic |= (*i)->isMetal();
802        usesDirectional |= (*i)->isDirectional();
803 +      usesFluctuatingCharges |= (*i)->isFluctuatingCharge();
804      }
805      
806   #ifdef IS_MPI    
# Line 796 | Line 813 | namespace OpenMD {
813      
814      temp = usesElectrostatic;
815      MPI_Allreduce(&temp, &usesElectrostaticAtoms_, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
816 +
817 +    temp = usesFluctuatingCharges;
818 +    MPI_Allreduce(&temp, &usesFluctuatingCharges_, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
819   #else
820  
821      usesDirectionalAtoms_ = usesDirectional;
822      usesMetallicAtoms_ = usesMetallic;
823      usesElectrostaticAtoms_ = usesElectrostatic;
824 +    usesFluctuatingCharges_ = usesFluctuatingCharges;
825  
826   #endif
827      
# Line 1193 | Line 1214 | namespace OpenMD {
1214      
1215      det = intTensor.determinant();
1216      sysconstants = geomCnst/(RealType)nGlobalIntegrableObjects_;
1217 <    volume = 4.0/3.0*NumericConstant::PI*pow(sysconstants,3.0/2.0)*sqrt(det);
1217 >    volume = 4.0/3.0*NumericConstant::PI*pow(sysconstants,geomCnst)*sqrt(det);
1218      return;
1219    }
1220  
# Line 1209 | Line 1230 | namespace OpenMD {
1230      
1231      detI = intTensor.determinant();
1232      sysconstants = geomCnst/(RealType)nGlobalIntegrableObjects_;
1233 <    volume = 4.0/3.0*NumericConstant::PI*pow(sysconstants,3.0/2.0)*sqrt(detI);
1233 >    volume = 4.0/3.0*NumericConstant::PI*pow(sysconstants,geomCnst)*sqrt(detI);
1234      return;
1235    }
1236   /*

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines