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