# | 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); |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |