| 125 | 
  | 
    //equal to the total number of atoms minus number of atoms belong to  | 
| 126 | 
  | 
    //cutoff group defined in meta-data file plus the number of cutoff  | 
| 127 | 
  | 
    //groups defined in meta-data file | 
| 128 | 
– | 
    std::cerr << "nGA = " << nGlobalAtoms_ << "\n"; | 
| 129 | 
– | 
    std::cerr << "nCA = " << nCutoffAtoms << "\n"; | 
| 130 | 
– | 
    std::cerr << "nG = " << nGroups << "\n"; | 
| 128 | 
  | 
 | 
| 129 | 
  | 
    nGlobalCutoffGroups_ = nGlobalAtoms_ - nCutoffAtoms + nGroups; | 
| 133 | 
– | 
 | 
| 134 | 
– | 
    std::cerr << "nGCG = " << nGlobalCutoffGroups_ << "\n"; | 
| 130 | 
  | 
     | 
| 131 | 
  | 
    //every free atom (atom does not belong to rigid bodies) is an  | 
| 132 | 
  | 
    //integrable object therefore the total number of integrable objects  | 
| 269 | 
  | 
#endif | 
| 270 | 
  | 
    return fdf_; | 
| 271 | 
  | 
  } | 
| 272 | 
+ | 
   | 
| 273 | 
+ | 
  unsigned int SimInfo::getNLocalCutoffGroups(){ | 
| 274 | 
+ | 
    int nLocalCutoffAtoms = 0; | 
| 275 | 
+ | 
    Molecule* mol; | 
| 276 | 
+ | 
    MoleculeIterator mi; | 
| 277 | 
+ | 
    CutoffGroup* cg; | 
| 278 | 
+ | 
    Molecule::CutoffGroupIterator ci; | 
| 279 | 
  | 
     | 
| 280 | 
+ | 
    for (mol = beginMolecule(mi); mol != NULL; mol  = nextMolecule(mi)) { | 
| 281 | 
+ | 
       | 
| 282 | 
+ | 
      for (cg = mol->beginCutoffGroup(ci); cg != NULL;  | 
| 283 | 
+ | 
           cg = mol->nextCutoffGroup(ci)) { | 
| 284 | 
+ | 
        nLocalCutoffAtoms += cg->getNumAtom(); | 
| 285 | 
+ | 
         | 
| 286 | 
+ | 
      }         | 
| 287 | 
+ | 
    } | 
| 288 | 
+ | 
     | 
| 289 | 
+ | 
    return nAtoms_ - nLocalCutoffAtoms + nCutoffGroups_; | 
| 290 | 
+ | 
  } | 
| 291 | 
+ | 
     | 
| 292 | 
  | 
  void SimInfo::calcNdfRaw() { | 
| 293 | 
  | 
    int ndfRaw_local; | 
| 294 | 
  | 
 | 
| 759 | 
  | 
      if ( simParams_->getAccumulateBoxDipole() ) { | 
| 760 | 
  | 
        calcBoxDipole_ = true;        | 
| 761 | 
  | 
      } | 
| 762 | 
< | 
 | 
| 762 | 
> | 
     | 
| 763 | 
  | 
    set<AtomType*>::iterator i; | 
| 764 | 
  | 
    set<AtomType*> atomTypes; | 
| 765 | 
  | 
    atomTypes = getSimulatedAtomTypes();     | 
| 772 | 
  | 
      usesMetallic |= (*i)->isMetal(); | 
| 773 | 
  | 
      usesDirectional |= (*i)->isDirectional(); | 
| 774 | 
  | 
    } | 
| 775 | 
< | 
 | 
| 775 | 
> | 
     | 
| 776 | 
  | 
#ifdef IS_MPI     | 
| 777 | 
  | 
    int temp; | 
| 778 | 
  | 
    temp = usesDirectional; | 
| 779 | 
  | 
    MPI_Allreduce(&temp, &usesDirectionalAtoms_, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);     | 
| 780 | 
< | 
 | 
| 780 | 
> | 
     | 
| 781 | 
  | 
    temp = usesMetallic; | 
| 782 | 
  | 
    MPI_Allreduce(&temp, &usesMetallicAtoms_, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);     | 
| 783 | 
< | 
 | 
| 783 | 
> | 
     | 
| 784 | 
  | 
    temp = usesElectrostatic; | 
| 785 | 
  | 
    MPI_Allreduce(&temp, &usesElectrostaticAtoms_, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);  | 
| 786 | 
+ | 
#else | 
| 787 | 
+ | 
 | 
| 788 | 
+ | 
    usesDirectionalAtoms_ = usesDirectional; | 
| 789 | 
+ | 
    usesMetallicAtoms_ = usesMetallic; | 
| 790 | 
+ | 
    usesElectrostaticAtoms_ = usesElectrostatic; | 
| 791 | 
+ | 
 | 
| 792 | 
  | 
#endif | 
| 793 | 
+ | 
     | 
| 794 | 
+ | 
    requiresPrepair_ = usesMetallicAtoms_ ? true : false;  | 
| 795 | 
+ | 
    requiresSkipCorrection_ = usesElectrostaticAtoms_ ? true : false; | 
| 796 | 
+ | 
    requiresSelfCorrection_ = usesElectrostaticAtoms_ ? true : false;     | 
| 797 | 
  | 
  } | 
| 798 | 
  | 
 | 
| 799 | 
  | 
 | 
| 848 | 
  | 
    Atom* atom; | 
| 849 | 
  | 
    RealType totalMass; | 
| 850 | 
  | 
 | 
| 851 | 
< | 
    //to avoid memory reallocation, reserve enough space for massFactors_ | 
| 851 | 
> | 
    /** | 
| 852 | 
> | 
     * The mass factor is the relative mass of an atom to the total | 
| 853 | 
> | 
     * mass of the cutoff group it belongs to.  By default, all atoms | 
| 854 | 
> | 
     * are their own cutoff groups, and therefore have mass factors of | 
| 855 | 
> | 
     * 1.  We need some special handling for massless atoms, which | 
| 856 | 
> | 
     * will be treated as carrying the entire mass of the cutoff | 
| 857 | 
> | 
     * group. | 
| 858 | 
> | 
     */ | 
| 859 | 
  | 
    massFactors_.clear(); | 
| 860 | 
< | 
    massFactors_.reserve(getNCutoffGroups()); | 
| 860 | 
> | 
    massFactors_.resize(getNAtoms(), 1.0); | 
| 861 | 
  | 
     | 
| 862 | 
+ | 
    cerr << "mfs in si = " << massFactors_.size() << "\n"; | 
| 863 | 
  | 
    for(mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) {         | 
| 864 | 
  | 
      for (cg = mol->beginCutoffGroup(ci); cg != NULL;  | 
| 865 | 
  | 
           cg = mol->nextCutoffGroup(ci)) { | 
| 867 | 
  | 
        totalMass = cg->getMass(); | 
| 868 | 
  | 
        for(atom = cg->beginAtom(ai); atom != NULL; atom = cg->nextAtom(ai)) { | 
| 869 | 
  | 
          // Check for massless groups - set mfact to 1 if true | 
| 870 | 
< | 
          if (totalMass != 0) | 
| 871 | 
< | 
            massFactors_.push_back(atom->getMass()/totalMass); | 
| 870 | 
> | 
          if (totalMass != 0)  | 
| 871 | 
> | 
            massFactors_[atom->getLocalIndex()] = atom->getMass()/totalMass; | 
| 872 | 
  | 
          else | 
| 873 | 
< | 
            massFactors_.push_back( 1.0 ); | 
| 873 | 
> | 
            massFactors_[atom->getLocalIndex()] = 1.0; | 
| 874 | 
  | 
        } | 
| 875 | 
  | 
      }        | 
| 876 | 
  | 
    } | 
| 897 | 
  | 
    int* oneThreeList = oneThreeInteractions_.getPairList(); | 
| 898 | 
  | 
    int* oneFourList = oneFourInteractions_.getPairList(); | 
| 899 | 
  | 
 | 
| 868 | 
– | 
    //setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray_[0],  | 
| 869 | 
– | 
    //               &nExclude, excludeList,  | 
| 870 | 
– | 
    //               &nOneTwo, oneTwoList, | 
| 871 | 
– | 
    //               &nOneThree, oneThreeList, | 
| 872 | 
– | 
    //               &nOneFour, oneFourList, | 
| 873 | 
– | 
    //               &molMembershipArray[0], &mfact[0], &nCutoffGroups_,  | 
| 874 | 
– | 
    //               &fortranGlobalGroupMembership[0], &isError);  | 
| 875 | 
– | 
     | 
| 900 | 
  | 
    topologyDone_ = true; | 
| 901 | 
  | 
  } | 
| 902 | 
  | 
 |