| 22 | 
  | 
#define NPTf_ENS       3 | 
| 23 | 
  | 
#define NPTim_ENS      4 | 
| 24 | 
  | 
#define NPTfm_ENS      5 | 
| 25 | 
– | 
#define NVEZCONS_ENS   6 | 
| 26 | 
– | 
#define NVTZCONS_ENS   7 | 
| 27 | 
– | 
#define NPTiZCONS_ENS  8 | 
| 28 | 
– | 
#define NPTfZCONS_ENS  9 | 
| 29 | 
– | 
#define NPTimZCONS_ENS 10 | 
| 30 | 
– | 
#define NPTfmZCONS_ENS 11 | 
| 25 | 
  | 
 | 
| 26 | 
  | 
#define FF_DUFF 0 | 
| 27 | 
  | 
#define FF_LJ   1 | 
| 633 | 
  | 
  else if( !strcasecmp( ensemble, "NPTf" )) ensembleCase = NPTf_ENS; | 
| 634 | 
  | 
  else if( !strcasecmp( ensemble, "NPTim" )) ensembleCase = NPTim_ENS; | 
| 635 | 
  | 
  else if( !strcasecmp( ensemble, "NPTfm" )) ensembleCase = NPTfm_ENS; | 
| 642 | 
– | 
 | 
| 643 | 
– | 
  else if( !strcasecmp( ensemble, "NVEZCONS")) ensembleCase = NVEZCONS_ENS; | 
| 644 | 
– | 
  else if( !strcasecmp( ensemble, "NVTZCONS"))  ensembleCase = NVTZCONS_ENS; | 
| 645 | 
– | 
  else if( !strcasecmp( ensemble, "NPTiZCONS") || !strcasecmp( ensemble, "NPTZCONS")) | 
| 646 | 
– | 
    ensembleCase = NPTiZCONS_ENS; | 
| 647 | 
– | 
  else if( !strcasecmp( ensemble, "NPTfZCONS"))  ensembleCase = NPTfZCONS_ENS; | 
| 648 | 
– | 
  else if( !strcasecmp( ensemble, "NPTimZCONS"))  ensembleCase = NPTimZCONS_ENS; | 
| 649 | 
– | 
  else if( !strcasecmp( ensemble, "NPTfmZCONS"))  ensembleCase = NPTfmZCONS_ENS; | 
| 650 | 
– | 
   | 
| 636 | 
  | 
  else{ | 
| 637 | 
  | 
    sprintf( painCave.errMsg, | 
| 638 | 
  | 
             "SimSetup Warning. Unrecognized Ensemble -> %s, " | 
| 1352 | 
  | 
  NPTf<RealIntegrator>* myNPTf = NULL; | 
| 1353 | 
  | 
  NPTim<RealIntegrator>* myNPTim = NULL; | 
| 1354 | 
  | 
  NPTfm<RealIntegrator>* myNPTfm = NULL; | 
| 1370 | 
– | 
  ZConstraint<NVE<RealIntegrator> >* myNVEZCons = NULL; | 
| 1371 | 
– | 
  ZConstraint<NVT<RealIntegrator> >* myNVTZCons = NULL; | 
| 1372 | 
– | 
  ZConstraint<NPTi<RealIntegrator> >* myNPTiZCons = NULL; | 
| 1373 | 
– | 
  ZConstraint<NPTf<RealIntegrator> >* myNPTfZCons = NULL; | 
| 1374 | 
– | 
  ZConstraint<NPTim<RealIntegrator> >* myNPTimZCons = NULL; | 
| 1375 | 
– | 
  ZConstraint<NPTfm<RealIntegrator> >* myNPTfmZCons = NULL; | 
| 1355 | 
  | 
         | 
| 1356 | 
  | 
  for(k=0; k<nInfo; k++){ | 
| 1357 | 
  | 
     | 
| 1358 | 
  | 
    switch( ensembleCase ){ | 
| 1359 | 
  | 
       | 
| 1360 | 
  | 
    case NVE_ENS: | 
| 1361 | 
< | 
      new NVE<RealIntegrator>( &(info[k]), the_ff ); | 
| 1361 | 
> | 
        if (haveZConstraint){ | 
| 1362 | 
> | 
         setupZConstraint(); | 
| 1363 | 
> | 
           new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1364 | 
> | 
        } | 
| 1365 | 
> | 
 | 
| 1366 | 
> | 
        else | 
| 1367 | 
> | 
        new NVE<RealIntegrator>( &(info[k]), the_ff ); | 
| 1368 | 
  | 
      break; | 
| 1369 | 
  | 
       | 
| 1370 | 
  | 
    case NVT_ENS: | 
| 1371 | 
< | 
      myNVT = new NVT<RealIntegrator>( &(info[k]), the_ff ); | 
| 1371 | 
> | 
        if (haveZConstraint){ | 
| 1372 | 
> | 
         setupZConstraint(); | 
| 1373 | 
> | 
           myNVT = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1374 | 
> | 
        } | 
| 1375 | 
> | 
        else | 
| 1376 | 
> | 
        myNVT = new NVT<RealIntegrator>( &(info[k]), the_ff ); | 
| 1377 | 
> | 
 | 
| 1378 | 
  | 
      myNVT->setTargetTemp(globals->getTargetTemp()); | 
| 1379 | 
  | 
       | 
| 1380 | 
  | 
      if (globals->haveTauThermostat())  | 
| 1390 | 
  | 
      break; | 
| 1391 | 
  | 
       | 
| 1392 | 
  | 
    case NPTi_ENS: | 
| 1393 | 
< | 
      myNPTi = new NPTi<RealIntegrator>( &(info[k]), the_ff ); | 
| 1394 | 
< | 
      myNPTi->setTargetTemp( globals->getTargetTemp() ); | 
| 1393 | 
> | 
        if (haveZConstraint){ | 
| 1394 | 
> | 
         setupZConstraint(); | 
| 1395 | 
> | 
           myNPTi = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1396 | 
> | 
        } | 
| 1397 | 
> | 
        else | 
| 1398 | 
> | 
        myNPTi = new NPTi<RealIntegrator>( &(info[k]), the_ff ); | 
| 1399 | 
> | 
 | 
| 1400 | 
> | 
        myNPTi->setTargetTemp( globals->getTargetTemp() ); | 
| 1401 | 
  | 
       | 
| 1402 | 
  | 
      if (globals->haveTargetPressure()) | 
| 1403 | 
  | 
        myNPTi->setTargetPressure(globals->getTargetPressure()); | 
| 1431 | 
  | 
      break; | 
| 1432 | 
  | 
       | 
| 1433 | 
  | 
    case NPTf_ENS: | 
| 1434 | 
< | 
      myNPTf = new NPTf<RealIntegrator>( &(info[k]), the_ff ); | 
| 1434 | 
> | 
        if (haveZConstraint){ | 
| 1435 | 
> | 
         setupZConstraint(); | 
| 1436 | 
> | 
           myNPTf = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1437 | 
> | 
        } | 
| 1438 | 
> | 
        else | 
| 1439 | 
> | 
        myNPTf = new NPTf<RealIntegrator>( &(info[k]), the_ff ); | 
| 1440 | 
> | 
 | 
| 1441 | 
  | 
      myNPTf->setTargetTemp( globals->getTargetTemp()); | 
| 1442 | 
  | 
       | 
| 1443 | 
  | 
      if (globals->haveTargetPressure()) | 
| 1472 | 
  | 
      break; | 
| 1473 | 
  | 
       | 
| 1474 | 
  | 
    case NPTim_ENS: | 
| 1475 | 
< | 
      myNPTim = new NPTim<RealIntegrator>( &(info[k]), the_ff ); | 
| 1476 | 
< | 
      myNPTim->setTargetTemp( globals->getTargetTemp()); | 
| 1475 | 
> | 
        if (haveZConstraint){ | 
| 1476 | 
> | 
         setupZConstraint(); | 
| 1477 | 
> | 
           myNPTim = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1478 | 
> | 
        } | 
| 1479 | 
> | 
        else | 
| 1480 | 
> | 
        myNPTim = new NPTim<RealIntegrator>( &(info[k]), the_ff ); | 
| 1481 | 
> | 
 | 
| 1482 | 
> | 
        myNPTim->setTargetTemp( globals->getTargetTemp()); | 
| 1483 | 
  | 
       | 
| 1484 | 
  | 
      if (globals->haveTargetPressure()) | 
| 1485 | 
  | 
        myNPTim->setTargetPressure(globals->getTargetPressure()); | 
| 1513 | 
  | 
      break; | 
| 1514 | 
  | 
       | 
| 1515 | 
  | 
    case NPTfm_ENS: | 
| 1516 | 
< | 
      myNPTfm = new NPTfm<RealIntegrator>( &(info[k]), the_ff ); | 
| 1517 | 
< | 
      myNPTfm->setTargetTemp( globals->getTargetTemp()); | 
| 1516 | 
> | 
        if (haveZConstraint){ | 
| 1517 | 
> | 
         setupZConstraint(); | 
| 1518 | 
> | 
           myNPTfm = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1519 | 
> | 
        } | 
| 1520 | 
> | 
        else | 
| 1521 | 
> | 
        myNPTfm = new NPTfm<RealIntegrator>( &(info[k]), the_ff ); | 
| 1522 | 
> | 
 | 
| 1523 | 
> | 
        myNPTfm->setTargetTemp( globals->getTargetTemp()); | 
| 1524 | 
  | 
       | 
| 1525 | 
  | 
      if (globals->haveTargetPressure()) | 
| 1526 | 
  | 
        myNPTfm->setTargetPressure(globals->getTargetPressure()); | 
| 1544 | 
  | 
       | 
| 1545 | 
  | 
      if( globals->haveTauBarostat() ) | 
| 1546 | 
  | 
        myNPTfm->setTauBarostat( globals->getTauBarostat() ); | 
| 1532 | 
– | 
      else{ | 
| 1533 | 
– | 
        sprintf( painCave.errMsg, | 
| 1534 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1535 | 
– | 
                 "    ensemble, you must set tauBarostat.\n"); | 
| 1536 | 
– | 
        painCave.isFatal = 1; | 
| 1537 | 
– | 
        simError(); | 
| 1538 | 
– | 
      } | 
| 1539 | 
– | 
      break; | 
| 1540 | 
– | 
       | 
| 1541 | 
– | 
    case NVEZCONS_ENS: | 
| 1542 | 
– | 
       | 
| 1543 | 
– | 
       | 
| 1544 | 
– | 
      //setup index of z-constraint molecules, z-constraint sampel time | 
| 1545 | 
– | 
      //and z-constraint force output name. These parameter should be known  | 
| 1546 | 
– | 
      //before constructing the z-constraint integrator  | 
| 1547 | 
– | 
      setupZConstraint(); | 
| 1548 | 
– | 
       | 
| 1549 | 
– | 
      myNVEZCons = new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1550 | 
– | 
       | 
| 1551 | 
– | 
      break; | 
| 1552 | 
– | 
       | 
| 1553 | 
– | 
       | 
| 1554 | 
– | 
    case NVTZCONS_ENS: | 
| 1555 | 
– | 
       | 
| 1556 | 
– | 
      setupZConstraint(); | 
| 1557 | 
– | 
       | 
| 1558 | 
– | 
      myNVTZCons = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1559 | 
– | 
      myNVTZCons->setTargetTemp(globals->getTargetTemp()); | 
| 1560 | 
– | 
       | 
| 1561 | 
– | 
      if (globals->haveTauThermostat())  | 
| 1562 | 
– | 
        myNVTZCons->setTauThermostat(globals->getTauThermostat()); | 
| 1563 | 
– | 
       | 
| 1564 | 
– | 
      else { | 
| 1565 | 
– | 
        sprintf( painCave.errMsg, | 
| 1566 | 
– | 
                 "SimSetup error: If you use the NVT\n" | 
| 1567 | 
– | 
                 "    ensemble, you must set tauThermostat.\n"); | 
| 1568 | 
– | 
        painCave.isFatal = 1; | 
| 1569 | 
– | 
        simError(); | 
| 1570 | 
– | 
      }     | 
| 1571 | 
– | 
      break;     | 
| 1572 | 
– | 
       | 
| 1573 | 
– | 
    case NPTiZCONS_ENS: | 
| 1574 | 
– | 
       | 
| 1575 | 
– | 
      setupZConstraint(); | 
| 1576 | 
– | 
       | 
| 1577 | 
– | 
      myNPTiZCons = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1578 | 
– | 
      myNPTiZCons->setTargetTemp( globals->getTargetTemp() ); | 
| 1579 | 
– | 
       | 
| 1580 | 
– | 
      if (globals->haveTargetPressure()) | 
| 1581 | 
– | 
        myNPTiZCons->setTargetPressure(globals->getTargetPressure()); | 
| 1582 | 
– | 
      else { | 
| 1583 | 
– | 
        sprintf( painCave.errMsg, | 
| 1584 | 
– | 
                 "SimSetup error: If you use a constant pressure\n" | 
| 1585 | 
– | 
                 "    ensemble, you must set targetPressure in the BASS file.\n"); | 
| 1586 | 
– | 
        painCave.isFatal = 1; | 
| 1587 | 
– | 
        simError(); | 
| 1588 | 
– | 
      } | 
| 1589 | 
– | 
       | 
| 1590 | 
– | 
      if( globals->haveTauThermostat() ) | 
| 1591 | 
– | 
        myNPTiZCons->setTauThermostat( globals->getTauThermostat() ); | 
| 1547 | 
  | 
      else{ | 
| 1548 | 
  | 
        sprintf( painCave.errMsg, | 
| 1549 | 
  | 
                 "SimSetup error: If you use an NPT\n" | 
| 1595 | 
– | 
                 "    ensemble, you must set tauThermostat.\n"); | 
| 1596 | 
– | 
        painCave.isFatal = 1; | 
| 1597 | 
– | 
        simError(); | 
| 1598 | 
– | 
      } | 
| 1599 | 
– | 
       | 
| 1600 | 
– | 
      if( globals->haveTauBarostat() ) | 
| 1601 | 
– | 
        myNPTiZCons->setTauBarostat( globals->getTauBarostat() ); | 
| 1602 | 
– | 
      else{ | 
| 1603 | 
– | 
        sprintf( painCave.errMsg, | 
| 1604 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1550 | 
  | 
                 "    ensemble, you must set tauBarostat.\n"); | 
| 1551 | 
  | 
        painCave.isFatal = 1; | 
| 1552 | 
  | 
        simError(); | 
| 1608 | 
– | 
      }    | 
| 1609 | 
– | 
       | 
| 1610 | 
– | 
      break; | 
| 1611 | 
– | 
       | 
| 1612 | 
– | 
    case NPTfZCONS_ENS: | 
| 1613 | 
– | 
       | 
| 1614 | 
– | 
      setupZConstraint(); | 
| 1615 | 
– | 
       | 
| 1616 | 
– | 
      myNPTfZCons = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1617 | 
– | 
      myNPTfZCons->setTargetTemp( globals->getTargetTemp()); | 
| 1618 | 
– | 
       | 
| 1619 | 
– | 
      if (globals->haveTargetPressure()) | 
| 1620 | 
– | 
        myNPTfZCons->setTargetPressure(globals->getTargetPressure()); | 
| 1621 | 
– | 
      else { | 
| 1622 | 
– | 
        sprintf( painCave.errMsg, | 
| 1623 | 
– | 
                 "SimSetup error: If you use a constant pressure\n" | 
| 1624 | 
– | 
                 "    ensemble, you must set targetPressure in the BASS file.\n"); | 
| 1625 | 
– | 
        painCave.isFatal = 1; | 
| 1626 | 
– | 
        simError(); | 
| 1627 | 
– | 
      }     | 
| 1628 | 
– | 
       | 
| 1629 | 
– | 
      if( globals->haveTauThermostat() ) | 
| 1630 | 
– | 
        myNPTfZCons->setTauThermostat( globals->getTauThermostat() ); | 
| 1631 | 
– | 
      else{ | 
| 1632 | 
– | 
        sprintf( painCave.errMsg, | 
| 1633 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1634 | 
– | 
                 "    ensemble, you must set tauThermostat.\n"); | 
| 1635 | 
– | 
        painCave.isFatal = 1; | 
| 1636 | 
– | 
        simError(); | 
| 1553 | 
  | 
      } | 
| 1638 | 
– | 
       | 
| 1639 | 
– | 
      if( globals->haveTauBarostat() ) | 
| 1640 | 
– | 
        myNPTfZCons->setTauBarostat( globals->getTauBarostat() ); | 
| 1641 | 
– | 
      else{ | 
| 1642 | 
– | 
        sprintf( painCave.errMsg, | 
| 1643 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1644 | 
– | 
                 "    ensemble, you must set tauBarostat.\n"); | 
| 1645 | 
– | 
        painCave.isFatal = 1; | 
| 1646 | 
– | 
        simError(); | 
| 1647 | 
– | 
      }    | 
| 1648 | 
– | 
       | 
| 1649 | 
– | 
      break;   | 
| 1650 | 
– | 
       | 
| 1651 | 
– | 
    case NPTimZCONS_ENS: | 
| 1652 | 
– | 
       | 
| 1653 | 
– | 
      setupZConstraint(); | 
| 1654 | 
– | 
       | 
| 1655 | 
– | 
      myNPTimZCons = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1656 | 
– | 
      myNPTimZCons->setTargetTemp( globals->getTargetTemp()); | 
| 1657 | 
– | 
       | 
| 1658 | 
– | 
      if (globals->haveTargetPressure()) | 
| 1659 | 
– | 
        myNPTimZCons->setTargetPressure(globals->getTargetPressure()); | 
| 1660 | 
– | 
      else { | 
| 1661 | 
– | 
        sprintf( painCave.errMsg, | 
| 1662 | 
– | 
                 "SimSetup error: If you use a constant pressure\n" | 
| 1663 | 
– | 
                 "    ensemble, you must set targetPressure in the BASS file.\n"); | 
| 1664 | 
– | 
        painCave.isFatal = 1; | 
| 1665 | 
– | 
        simError(); | 
| 1666 | 
– | 
      } | 
| 1667 | 
– | 
       | 
| 1668 | 
– | 
      if( globals->haveTauThermostat() ) | 
| 1669 | 
– | 
        myNPTimZCons->setTauThermostat( globals->getTauThermostat() ); | 
| 1670 | 
– | 
      else{ | 
| 1671 | 
– | 
        sprintf( painCave.errMsg, | 
| 1672 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1673 | 
– | 
                 "    ensemble, you must set tauThermostat.\n"); | 
| 1674 | 
– | 
        painCave.isFatal = 1; | 
| 1675 | 
– | 
        simError(); | 
| 1676 | 
– | 
      } | 
| 1677 | 
– | 
       | 
| 1678 | 
– | 
      if( globals->haveTauBarostat() ) | 
| 1679 | 
– | 
        myNPTimZCons->setTauBarostat( globals->getTauBarostat() ); | 
| 1680 | 
– | 
      else{ | 
| 1681 | 
– | 
        sprintf( painCave.errMsg, | 
| 1682 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1683 | 
– | 
                 "    ensemble, you must set tauBarostat.\n"); | 
| 1684 | 
– | 
        painCave.isFatal = 1; | 
| 1685 | 
– | 
        simError(); | 
| 1686 | 
– | 
      }    | 
| 1687 | 
– | 
       | 
| 1554 | 
  | 
      break; | 
| 1555 | 
  | 
       | 
| 1690 | 
– | 
    case NPTfmZCONS_ENS: | 
| 1691 | 
– | 
       | 
| 1692 | 
– | 
      setupZConstraint(); | 
| 1693 | 
– | 
       | 
| 1694 | 
– | 
      myNPTfmZCons = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff ); | 
| 1695 | 
– | 
      myNPTfmZCons->setTargetTemp( globals->getTargetTemp()); | 
| 1696 | 
– | 
       | 
| 1697 | 
– | 
      if (globals->haveTargetPressure()) | 
| 1698 | 
– | 
        myNPTfmZCons->setTargetPressure(globals->getTargetPressure()); | 
| 1699 | 
– | 
      else { | 
| 1700 | 
– | 
        sprintf( painCave.errMsg, | 
| 1701 | 
– | 
                 "SimSetup error: If you use a constant pressure\n" | 
| 1702 | 
– | 
                 "    ensemble, you must set targetPressure in the BASS file.\n"); | 
| 1703 | 
– | 
        painCave.isFatal = 1; | 
| 1704 | 
– | 
        simError(); | 
| 1705 | 
– | 
      } | 
| 1706 | 
– | 
       | 
| 1707 | 
– | 
      if( globals->haveTauThermostat() ) | 
| 1708 | 
– | 
        myNPTfmZCons->setTauThermostat( globals->getTauThermostat() ); | 
| 1709 | 
– | 
      else{ | 
| 1710 | 
– | 
        sprintf( painCave.errMsg, | 
| 1711 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1712 | 
– | 
                 "    ensemble, you must set tauThermostat.\n"); | 
| 1713 | 
– | 
        painCave.isFatal = 1; | 
| 1714 | 
– | 
        simError(); | 
| 1715 | 
– | 
      } | 
| 1716 | 
– | 
       | 
| 1717 | 
– | 
      if( globals->haveTauBarostat() ) | 
| 1718 | 
– | 
        myNPTfmZCons->setTauBarostat( globals->getTauBarostat() ); | 
| 1719 | 
– | 
      else{ | 
| 1720 | 
– | 
        sprintf( painCave.errMsg, | 
| 1721 | 
– | 
                 "SimSetup error: If you use an NPT\n" | 
| 1722 | 
– | 
                 "    ensemble, you must set tauBarostat.\n"); | 
| 1723 | 
– | 
        painCave.isFatal = 1; | 
| 1724 | 
– | 
        simError(); | 
| 1725 | 
– | 
      }     | 
| 1726 | 
– | 
      break;        | 
| 1727 | 
– | 
       | 
| 1728 | 
– | 
       | 
| 1729 | 
– | 
       | 
| 1556 | 
  | 
    default: | 
| 1557 | 
  | 
      sprintf( painCave.errMsg, | 
| 1558 | 
  | 
               "SimSetup Error. Unrecognized ensemble in case statement.\n"); |