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 1167 by tim, Wed May 12 16:38:45 2004 UTC vs.
Revision 1204 by gezelter, Thu May 27 19:26:42 2004 UTC

# Line 226 | Line 226 | void SimSetup::makeMolecules(void){
226        molInfo.myAtoms = &(info[k].atoms[atomOffset]);
227  
228        if (molInfo.nBonds > 0)
229 <        molInfo.myBonds = new (Bond *) [molInfo.nBonds];
229 >        molInfo.myBonds = new Bond*[molInfo.nBonds];
230        else
231          molInfo.myBonds = NULL;
232  
233        if (molInfo.nBends > 0)
234 <        molInfo.myBends = new (Bend *) [molInfo.nBends];
234 >        molInfo.myBends = new Bend*[molInfo.nBends];
235        else
236          molInfo.myBends = NULL;
237  
238        if (molInfo.nTorsions > 0)
239 <        molInfo.myTorsions = new (Torsion *) [molInfo.nTorsions];
239 >        molInfo.myTorsions = new Torsion *[molInfo.nTorsions];
240        else
241          molInfo.myTorsions = NULL;
242  
# Line 948 | Line 948 | void SimSetup::gatherInfo(void){
948  
949      info[i].useInitXSstate = globals->getUseInitXSstate();
950      info[i].orthoTolerance = globals->getOrthoBoxTolerance();
951 <    
951 >
952 >    // check for thermodynamic integration
953 >    if (globals->getUseThermInt()) {
954 >      if (globals->haveThermIntLambda() && globals->haveThermIntK()) {
955 >        info[i].useThermInt = globals->getUseThermInt();
956 >        info[i].thermIntLambda = globals->getThermIntLambda();
957 >        info[i].thermIntK = globals->getThermIntK();
958 >        
959 >        Restraints *myRestraint = new Restraints(tot_nmol, info[i].thermIntLambda, info[i].thermIntK);
960 >        info[i].restraint = myRestraint;
961 >      }
962 >      else {
963 >        sprintf(painCave.errMsg,
964 >                "SimSetup Error:\n"
965 >                "\tKeyword useThermInt was set to 'true' but\n"
966 >                "\tthermodynamicIntegrationLambda (and/or\n"
967 >                "\tthermodynamicIntegrationK) was not specified.\n"
968 >                "\tPlease provide a lambda value and k value in your .bass file.\n");
969 >        painCave.isFatal = 1;
970 >        simError();    
971 >      }
972 >    }
973 >    else if(globals->haveThermIntLambda() || globals->haveThermIntK()){
974 >        sprintf(painCave.errMsg,
975 >                "SimSetup Warning: If you want to use Thermodynamic\n"
976 >                "\tIntegration, set useThermInt to 'true' in your .bass file.\n"
977 >                "\tThe useThermInt keyword is 'false' by default, so your\n"
978 >                "\tlambda and/or k values are being ignored.\n");
979 >        painCave.isFatal = 0;
980 >        simError();  
981 >    }
982    }
983    
984    //setup seed for random number generator
# Line 1261 | Line 1291 | void SimSetup::makeOutNames(void){
1291          }
1292        }
1293  
1294 +      strcpy(info[k].rawPotName, inFileName);
1295 +      nameLength = strlen(info[k].rawPotName);
1296 +      endTest = &(info[k].rawPotName[nameLength - 5]);
1297 +      if (!strcmp(endTest, ".bass")){
1298 +        strcpy(endTest, ".raw");
1299 +      }
1300 +      else if (!strcmp(endTest, ".BASS")){
1301 +        strcpy(endTest, ".raw");
1302 +      }
1303 +      else{
1304 +        endTest = &(info[k].rawPotName[nameLength - 4]);
1305 +        if (!strcmp(endTest, ".bss")){
1306 +          strcpy(endTest, ".raw");
1307 +        }
1308 +        else if (!strcmp(endTest, ".mdl")){
1309 +          strcpy(endTest, ".raw");
1310 +        }
1311 +        else{
1312 +          strcat(info[k].rawPotName, ".raw");
1313 +        }
1314 +      }
1315 +
1316   #ifdef IS_MPI
1317  
1318      }
# Line 1398 | Line 1450 | void SimSetup::calcSysValues(void){
1450   }
1451  
1452   void SimSetup::calcSysValues(void){
1453 <  int i;
1453 >  int i, j;
1454 >  int ncutgroups, atomsingroups, ngroupsinstamp;
1455  
1456    int* molMembershipArray;
1457 +  CutoffGroupStamp* cg;
1458  
1459    tot_atoms = 0;
1460    tot_bonds = 0;
1461    tot_bends = 0;
1462    tot_torsions = 0;
1463    tot_rigid = 0;
1464 +  tot_groups = 0;
1465    for (i = 0; i < n_components; i++){
1466      tot_atoms += components_nmol[i] * comp_stamps[i]->getNAtoms();
1467      tot_bonds += components_nmol[i] * comp_stamps[i]->getNBonds();
1468      tot_bends += components_nmol[i] * comp_stamps[i]->getNBends();
1469      tot_torsions += components_nmol[i] * comp_stamps[i]->getNTorsions();
1470      tot_rigid += components_nmol[i] * comp_stamps[i]->getNRigidBodies();
1471 +
1472 +    ncutgroups = comp_stamps[i]->getNCutoffGroups();
1473 +    atomsingroups = 0;
1474 +    for (j=0; j < ncutgroups; j++) {
1475 +      cg = comp_stamps[i]->getCutoffGroup(j);
1476 +      atomsingroups += cg->getNMembers();
1477 +    }
1478 +    ngroupsinstamp = comp_stamps[i]->getNAtoms() - atomsingroups + ncutgroups;
1479 +    tot_groups += components_nmol[i] * ngroupsinstamp;    
1480    }
1481    
1482    tot_SRI = tot_bonds + tot_bends + tot_torsions;
# Line 1425 | Line 1489 | void SimSetup::calcSysValues(void){
1489      info[i].n_torsions = tot_torsions;
1490      info[i].n_SRI = tot_SRI;
1491      info[i].n_mol = tot_nmol;
1492 <
1492 >    info[i].ngroup = tot_groups;
1493      info[i].molMembershipArray = molMembershipArray;
1494    }
1495   }
# Line 1436 | Line 1500 | void SimSetup::mpiMolDivide(void){
1500    int i, j, k;
1501    int localMol, allMol;
1502    int local_atoms, local_bonds, local_bends, local_torsions, local_SRI;
1503 <  int local_rigid;
1503 >  int local_rigid, local_groups;
1504    vector<int> globalMolIndex;
1505 +  int ncutgroups, atomsingroups, ngroupsinstamp;
1506 +  CutoffGroupStamp* cg;
1507  
1508    mpiSim = new mpiSimulation(info);
1509  
# Line 1457 | Line 1523 | void SimSetup::mpiMolDivide(void){
1523    local_bends = 0;
1524    local_torsions = 0;
1525    local_rigid = 0;
1526 +  local_groups = 0;
1527    globalAtomCounter = 0;
1528  
1529    for (i = 0; i < n_components; i++){
# Line 1467 | Line 1534 | void SimSetup::mpiMolDivide(void){
1534          local_bends += comp_stamps[i]->getNBends();
1535          local_torsions += comp_stamps[i]->getNTorsions();
1536          local_rigid += comp_stamps[i]->getNRigidBodies();
1537 +
1538 +        ncutgroups = comp_stamps[i]->getNCutoffGroups();
1539 +        atomsingroups = 0;
1540 +        for (k=0; k < ncutgroups; k++) {
1541 +          cg = comp_stamps[i]->getCutoffGroup(k);
1542 +          atomsingroups += cg->getNMembers();
1543 +        }
1544 +        ngroupsinstamp = comp_stamps[i]->getNAtoms() - atomsingroups +
1545 +          ncutgroups;
1546 +        local_groups += ngroupsinstamp;    
1547 +
1548          localMol++;
1549        }      
1550        for (k = 0; k < comp_stamps[i]->getNAtoms(); k++){
# Line 1479 | Line 1557 | void SimSetup::mpiMolDivide(void){
1557    }
1558    local_SRI = local_bonds + local_bends + local_torsions;
1559  
1560 <  info[0].n_atoms = mpiSim->getMyNlocal();  
1560 >  info[0].n_atoms = mpiSim->getNAtomsLocal();  
1561    
1484
1562    if (local_atoms != info[0].n_atoms){
1563      sprintf(painCave.errMsg,
1564              "SimSetup error: mpiSim's localAtom (%d) and SimSetup's\n"
# Line 1491 | Line 1568 | void SimSetup::mpiMolDivide(void){
1568      simError();
1569    }
1570  
1571 +  info[0].ngroup = mpiSim->getNGroupsLocal();  
1572 +  if (local_groups != info[0].ngroup){
1573 +    sprintf(painCave.errMsg,
1574 +            "SimSetup error: mpiSim's localGroups (%d) and SimSetup's\n"
1575 +            "\tlocalGroups (%d) are not equal.\n",
1576 +            info[0].ngroup, local_groups);
1577 +    painCave.isFatal = 1;
1578 +    simError();
1579 +  }
1580 +  
1581    info[0].n_bonds = local_bonds;
1582    info[0].n_bends = local_bends;
1583    info[0].n_torsions = local_torsions;
# Line 1527 | Line 1614 | void SimSetup::makeSysArrays(void){
1614  
1615  
1616      molIndex = 0;
1617 <    for (i = 0; i < mpiSim->getTotNmol(); i++){
1617 >    for (i = 0; i < mpiSim->getNMolGlobal(); i++){
1618        if (mol2proc[i] == worldRank){
1619          the_molecules[molIndex].setStampID(molCompType[i]);
1620          the_molecules[molIndex].setMyIndex(molIndex);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines