| 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"); |