ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/SimSetup.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/SimSetup.cpp (file contents):
Revision 1104 by gezelter, Tue Apr 13 16:26:03 2004 UTC vs.
Revision 1139 by gezelter, Wed Apr 28 22:06:29 2004 UTC

# Line 147 | Line 147 | void SimSetup::createSim(void){
147    // make the output filenames
148  
149    makeOutNames();
150
151  if (globals->haveMinimizer())
152    // make minimizer
153    makeMinimizer();
154  else
155    // make the integrator
156    makeIntegrator();
150    
151   #ifdef IS_MPI
152    mpiSim->mpiRefresh();
# Line 162 | Line 155 | void SimSetup::createSim(void){
155    // initialize the Fortran
156  
157    initFortran();
158 +
159 +  if (globals->haveMinimizer())
160 +    // make minimizer
161 +    makeMinimizer();
162 +  else
163 +    // make the integrator
164 +    makeIntegrator();
165 +
166   }
167  
168  
# Line 190 | Line 191 | void SimSetup::makeMolecules(void){
191    set<int> skipList;
192  
193    double phi, theta, psi;
194 +  char* molName;
195 +  char rbName[100];
196  
197    //init the forceField paramters
198  
# Line 206 | Line 209 | void SimSetup::makeMolecules(void){
209  
210      for (i = 0; i < info[k].n_mol; i++){
211        stampID = info[k].molecules[i].getStampID();
212 +      molName = comp_stamps[stampID]->getID();
213  
214        molInfo.nAtoms = comp_stamps[stampID]->getNAtoms();
215        molInfo.nBonds = comp_stamps[stampID]->getNBonds();
# Line 259 | Line 263 | void SimSetup::makeMolecules(void){
263          else{
264  
265            molInfo.myAtoms[j] = new Atom((j + atomOffset), info[k].getConfiguration());
266 +
267          }
268  
269          molInfo.myAtoms[j]->setType(currentAtom->getType());
265
270   #ifdef IS_MPI
271  
272 <        molInfo.myAtoms[j]->setGlobalIndex(globalIndex[j + atomOffset]);
272 >        molInfo.myAtoms[j]->setGlobalIndex(globalAtomIndex[j + atomOffset]);
273  
274   #endif // is_mpi
275        }
# Line 406 | Line 410 | void SimSetup::makeMolecules(void){
410          info[k].excludes->addPair(exK, exL);
411        }
412  
413 +      
414 +      molInfo.myRigidBodies.clear();
415 +      
416        for (j = 0; j < molInfo.nRigidBodies; j++){
417  
418          currentRigidBody = comp_stamps[stampID]->getRigidBody(j);
# Line 414 | Line 421 | void SimSetup::makeMolecules(void){
421          // Create the Rigid Body:
422  
423          myRB = new RigidBody();
424 +
425 +        sprintf(rbName,"%s_RB_%d", molName, j);
426 +        myRB->setType(rbName);
427          
428          for (rb1 = 0; rb1 < nMembers; rb1++) {
429  
# Line 454 | Line 464 | void SimSetup::makeMolecules(void){
464              // used for the exclude list:
465              
466   #ifdef IS_MPI
467 <            exI = info[k].atoms[tempI]->getGlobalIndex() + 1;
468 <            exJ = info[k].atoms[tempJ]->getGlobalIndex() + 1;
467 >            exI = molInfo.myAtoms[tempI]->getGlobalIndex() + 1;
468 >            exJ = molInfo.myAtoms[tempJ]->getGlobalIndex() + 1;
469   #else
470 <            exI = tempI + 1;
471 <            exJ = tempJ + 1;
470 >            exI = molInfo.myAtoms[tempI]->getIndex() + 1;
471 >            exJ = molInfo.myAtoms[tempJ]->getIndex() + 1;
472   #endif
473              
474              info[k].excludes->addPair(exI, exJ);
# Line 473 | Line 483 | void SimSetup::makeMolecules(void){
483  
484        // After this is all set up, scan through the atoms to
485        // see if they can be added to the integrableObjects:
486 +
487 +      molInfo.myIntegrableObjects.clear();
488 +      
489  
490        for (j = 0; j < molInfo.nAtoms; j++){
491  
# Line 821 | Line 834 | void SimSetup::gatherInfo(void){
834    }
835  
836    //check whether sample time, status time, thermal time and reset time are divisble by dt
837 <  if (!isDivisible(globals->getSampleTime(), globals->getDt())){
837 >  if (globals->haveSampleTime() && !isDivisible(globals->getSampleTime(), globals->getDt())){
838      sprintf(painCave.errMsg,
839              "Sample time is not divisible by dt.\n"
840              "\tThis will result in samples that are not uniformly\n"
# Line 831 | Line 844 | void SimSetup::gatherInfo(void){
844      simError();    
845    }
846  
847 <  if (globals->haveStatusTime() && !isDivisible(globals->getSampleTime(), globals->getDt())){
847 >  if (globals->haveStatusTime() && !isDivisible(globals->getStatusTime(), globals->getDt())){
848      sprintf(painCave.errMsg,
849              "Status time is not divisible by dt.\n"
850              "\tThis will result in status reports that are not uniformly\n"
# Line 867 | Line 880 | void SimSetup::gatherInfo(void){
880      if (globals->haveSampleTime()){
881        info[i].sampleTime = globals->getSampleTime();
882        info[i].statusTime = info[i].sampleTime;
870      info[i].thermalTime = info[i].sampleTime;
883      }
884      else{
885        info[i].sampleTime = globals->getRunTime();
886        info[i].statusTime = info[i].sampleTime;
875      info[i].thermalTime = info[i].sampleTime;
887      }
888  
889      if (globals->haveStatusTime()){
# Line 881 | Line 892 | void SimSetup::gatherInfo(void){
892  
893      if (globals->haveThermalTime()){
894        info[i].thermalTime = globals->getThermalTime();
895 +    } else {
896 +      info[i].thermalTime = globals->getRunTime();
897      }
898  
899      info[i].resetIntegrator = 0;
# Line 898 | Line 911 | void SimSetup::gatherInfo(void){
911  
912      info[i].useInitXSstate = globals->getUseInitXSstate();
913      info[i].orthoTolerance = globals->getOrthoBoxTolerance();
914 +    info[i].useMolecularCutoffs = globals->getUseMolecularCutoffs();
915 +
916      
917    }
918    
# Line 951 | Line 966 | void SimSetup::finalInfoCheck(void){
966   void SimSetup::finalInfoCheck(void){
967    int index;
968    int usesDipoles;
969 +  int usesCharges;
970    int i;
971  
972    for (i = 0; i < nInfo; i++){
# Line 962 | Line 978 | void SimSetup::finalInfoCheck(void){
978        usesDipoles = (info[i].atoms[index])->hasDipole();
979        index++;
980      }
981 <
981 >    index = 0;
982 >    usesCharges = 0;
983 >    while ((index < info[i].n_atoms) && !usesCharges){
984 >      usesCharges= (info[i].atoms[index])->hasCharge();
985 >      index++;
986 >    }
987   #ifdef IS_MPI
988      int myUse = usesDipoles;
989      MPI_Allreduce(&myUse, &usesDipoles, 1, MPI_INT, MPI_LOR, MPI_COMM_WORLD);
# Line 1013 | Line 1034 | void SimSetup::finalInfoCheck(void){
1034        info[i].dielectric = globals->getDielectric();
1035      }
1036      else{
1037 <      if (usesDipoles){
1037 >      if (usesDipoles || usesCharges){
1038          if (!globals->haveECR()){
1039            sprintf(painCave.errMsg,
1040                    "SimSetup Warning: No value was set for electrostaticCutoffRadius.\n"
# Line 1346 | Line 1367 | void SimSetup::mpiMolDivide(void){
1367    int localMol, allMol;
1368    int local_atoms, local_bonds, local_bends, local_torsions, local_SRI;
1369    int local_rigid;
1370 +  vector<int> globalMolIndex;
1371  
1372    mpiSim = new mpiSimulation(info);
1373  
1374 <  globalIndex = mpiSim->divideLabor();
1374 >  mpiSim->divideLabor();
1375 >  globalAtomIndex = mpiSim->getGlobalAtomIndex();
1376 >  //globalMolIndex = mpiSim->getGlobalMolIndex();
1377  
1378    // set up the local variables
1379  
# Line 1363 | Line 1387 | void SimSetup::mpiMolDivide(void){
1387    local_bends = 0;
1388    local_torsions = 0;
1389    local_rigid = 0;
1390 <  globalAtomIndex = 0;
1390 >  globalAtomCounter = 0;
1391  
1392    for (i = 0; i < n_components; i++){
1393      for (j = 0; j < components_nmol[i]; j++){
# Line 1376 | Line 1400 | void SimSetup::mpiMolDivide(void){
1400          localMol++;
1401        }      
1402        for (k = 0; k < comp_stamps[i]->getNAtoms(); k++){
1403 <        info[0].molMembershipArray[globalAtomIndex] = allMol;
1404 <        globalAtomIndex++;
1403 >        info[0].molMembershipArray[globalAtomCounter] = allMol;
1404 >        globalAtomCounter++;
1405        }
1406  
1407        allMol++;
# Line 1445 | Line 1469 | void SimSetup::makeSysArrays(void){
1469   #else // is_mpi
1470  
1471      molIndex = 0;
1472 <    globalAtomIndex = 0;
1472 >    globalAtomCounter = 0;
1473      for (i = 0; i < n_components; i++){
1474        for (j = 0; j < components_nmol[i]; j++){
1475          the_molecules[molIndex].setStampID(i);
1476          the_molecules[molIndex].setMyIndex(molIndex);
1477          the_molecules[molIndex].setGlobalIndex(molIndex);
1478          for (k = 0; k < comp_stamps[i]->getNAtoms(); k++){
1479 <          info[l].molMembershipArray[globalAtomIndex] = molIndex;
1480 <          globalAtomIndex++;
1479 >          info[l].molMembershipArray[globalAtomCounter] = molIndex;
1480 >          globalAtomCounter++;
1481          }
1482          molIndex++;
1483        }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines