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

Comparing trunk/src/brains/SimInfo.cpp (file contents):
Revision 1103 by chuckv, Fri Dec 29 20:21:53 2006 UTC vs.
Revision 1241 by gezelter, Fri Apr 25 15:14:47 2008 UTC

# Line 92 | Line 92 | namespace oopse {
92      nGlobalIntegrableObjects_(0), nGlobalRigidBodies_(0),
93      nAtoms_(0), nBonds_(0),  nBends_(0), nTorsions_(0), nRigidBodies_(0),
94      nIntegrableObjects_(0),  nCutoffGroups_(0), nConstraints_(0),
95 <    sman_(NULL), fortranInitialized_(false), calcBoxDipole_(false) {
95 >    sman_(NULL), fortranInitialized_(false), calcBoxDipole_(false),
96 >    useAtomicVirial_(true) {
97  
98        MoleculeStamp* molStamp;
99        int nMolWithSameStamp;
# Line 155 | Line 156 | namespace oopse {
156                                                  + nGlobalRigidBodies_;
157    
158        nGlobalMols_ = molStampIds_.size();
158
159 #ifdef IS_MPI    
159        molToProcMap_.resize(nGlobalMols_);
161 #endif
162
160      }
161  
162    SimInfo::~SimInfo() {
# Line 666 | Line 663 | namespace oopse {
663      int useSF;
664      int useSP;
665      int useBoxDipole;
666 +
667      std::string myMethod;
668  
669      // set the useRF logical
# Line 690 | Line 688 | namespace oopse {
688        if (simParams_->getAccumulateBoxDipole())
689          useBoxDipole = 1;
690  
691 +    useAtomicVirial_ = simParams_->getUseAtomicVirial();
692 +
693      //loop over all of the atom types
694      for (i = atomTypes.begin(); i != atomTypes.end(); ++i) {
695        useLennardJones |= (*i)->isLennardJones();
# Line 767 | Line 767 | namespace oopse {
767      temp = useBoxDipole;
768      MPI_Allreduce(&temp, &useBoxDipole, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
769  
770 +    temp = useAtomicVirial_;
771 +    MPI_Allreduce(&temp, &useAtomicVirial_, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
772 +
773   #endif
774  
775      fInfo_.SIM_uses_PBC = usePBC;    
# Line 786 | Line 789 | namespace oopse {
789      fInfo_.SIM_uses_SF = useSF;
790      fInfo_.SIM_uses_SP = useSP;
791      fInfo_.SIM_uses_BoxDipole = useBoxDipole;
792 +    fInfo_.SIM_uses_AtomicVirial = useAtomicVirial_;
793    }
794  
795    void SimInfo::setupFortranSim() {
# Line 852 | Line 856 | namespace oopse {
856      int nGlobalExcludes = 0;
857      int* globalExcludes = NULL;
858      int* excludeList = exclude_.getExcludeList();
859 <    setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray[0], &nExclude, excludeList ,
860 <                   &nGlobalExcludes, globalExcludes, &molMembershipArray[0],
861 <                   &mfact[0], &nCutoffGroups_, &fortranGlobalGroupMembership[0], &isError);
862 <
859 >    setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray[0],
860 >                   &nExclude, excludeList , &nGlobalExcludes, globalExcludes,
861 >                   &molMembershipArray[0], &mfact[0], &nCutoffGroups_,
862 >                   &fortranGlobalGroupMembership[0], &isError);
863 >    
864      if( isError ){
865 <
865 >      
866        sprintf( painCave.errMsg,
867                 "There was an error setting the simulation information in fortran.\n" );
868        painCave.isFatal = 1;
869        painCave.severity = OOPSE_ERROR;
870        simError();
871      }
872 <
873 < #ifdef IS_MPI
872 >    
873 >    
874      sprintf( checkPointMsg,
875               "succesfully sent the simulation information to fortran.\n");
876 <    MPIcheckPoint();
877 < #endif // is_mpi
878 <
876 >    
877 >    errorCheckPoint();
878 >    
879      // Setup number of neighbors in neighbor list if present
880      if (simParams_->haveNeighborListNeighbors()) {
881 <      setNeighbors(simParams_->getNeighborListNeighbors());
881 >      int nlistNeighbors = simParams_->getNeighborListNeighbors();
882 >      setNeighbors(&nlistNeighbors);
883      }
884    
885  
886    }
887  
888  
883 #ifdef IS_MPI
889    void SimInfo::setupFortranParallel() {
890 <    
890 > #ifdef IS_MPI    
891      //SimInfo is responsible for creating localToGlobalAtomIndex and localToGlobalGroupIndex
892      std::vector<int> localToGlobalAtomIndex(getNAtoms(), 0);
893      std::vector<int> localToGlobalCutoffGroupIndex;
# Line 932 | Line 937 | namespace oopse {
937      }
938  
939      sprintf(checkPointMsg, " mpiRefresh successful.\n");
940 <    MPIcheckPoint();
940 >    errorCheckPoint();
941  
942 <
942 > #endif
943    }
944  
940 #endif
941
945    void SimInfo::setupCutoff() {          
946      
947      ForceFieldOptions& forceFieldOptions_ = forceField_->getForceFieldOptions();
# Line 946 | Line 949 | namespace oopse {
949      // Check the cutoff policy
950      int cp =  TRADITIONAL_CUTOFF_POLICY; // Set to traditional by default
951  
952 +    // Set LJ shifting bools to false
953 +    ljsp_ = false;
954 +    ljsf_ = false;
955 +
956      std::string myPolicy;
957      if (forceFieldOptions_.haveCutoffPolicy()){
958        myPolicy = forceFieldOptions_.getCutoffPolicy();
# Line 1009 | Line 1016 | namespace oopse {
1016            simError();
1017          }
1018        }
1019 <      
1020 <      notifyFortranCutoffs(&rcut_, &rsw_);
1019 >
1020 >      if (simParams_->haveElectrostaticSummationMethod()) {
1021 >        std::string myMethod = simParams_->getElectrostaticSummationMethod();
1022 >        toUpper(myMethod);
1023 >        
1024 >        if (myMethod == "SHIFTED_POTENTIAL") {
1025 >          ljsp_ = true;
1026 >        } else if (myMethod == "SHIFTED_FORCE") {
1027 >          ljsf_ = true;
1028 >        }
1029 >      }
1030 >      notifyFortranCutoffs(&rcut_, &rsw_, &ljsp_, &ljsf_);
1031        
1032      } else {
1033        
# Line 1027 | Line 1044 | namespace oopse {
1044          if (simParams_->haveElectrostaticSummationMethod()) {
1045            std::string myMethod = simParams_->getElectrostaticSummationMethod();
1046            toUpper(myMethod);
1047 <          if (myMethod == "SHIFTED_POTENTIAL" || myMethod == "SHIFTED_FORCE") {
1047 >      
1048 >      // For the time being, we're tethering the LJ shifted behavior to the
1049 >      // electrostaticSummationMethod keyword options
1050 >          if (myMethod == "SHIFTED_POTENTIAL") {
1051 >            ljsp_ = true;
1052 >          } else if (myMethod == "SHIFTED_FORCE") {
1053 >            ljsf_ = true;
1054 >          }
1055 >          if (myMethod == "SHIFTED_POTENTIAL" || myMethod == "SHIFTED_FORCE") {
1056              if (simParams_->haveSwitchingRadius()){
1057                sprintf(painCave.errMsg,
1058                        "SimInfo Warning: A value was set for the switchingRadius\n"
# Line 1050 | Line 1075 | namespace oopse {
1075            simError();
1076            rsw_ = 0.85 * rcut_;
1077          }
1078 <        notifyFortranCutoffs(&rcut_, &rsw_);
1078 >
1079 >        notifyFortranCutoffs(&rcut_, &rsw_, &ljsp_, &ljsf_);
1080 >
1081        } else {
1082          // We didn't set rcut explicitly, and we don't have electrostatic atoms, so
1083          // We'll punt and let fortran figure out the cutoffs later.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines