| 5 |
|
#include <string> |
| 6 |
|
|
| 7 |
|
#include "SimSetup.hpp" |
| 8 |
+ |
#include "ReadWrite.hpp" |
| 9 |
|
#include "parse_me.h" |
| 10 |
|
#include "Integrator.hpp" |
| 11 |
|
#include "simError.h" |
| 97 |
|
int i, j, k, globalAtomIndex; |
| 98 |
|
|
| 99 |
|
// gather all of the information from the Bass file |
| 100 |
< |
|
| 100 |
> |
|
| 101 |
|
gatherInfo(); |
| 102 |
|
|
| 103 |
|
// creation of complex system objects |
| 105 |
|
sysObjectsCreation(); |
| 106 |
|
|
| 107 |
|
// check on the post processing info |
| 108 |
< |
|
| 108 |
> |
|
| 109 |
|
finalInfoCheck(); |
| 110 |
|
|
| 111 |
|
// initialize the system coordinates |
| 889 |
|
void SimSetup::initSystemCoords( void ){ |
| 890 |
|
int i; |
| 891 |
|
|
| 892 |
< |
std::cerr << "Setting atom Coords\n"; |
| 892 |
> |
char* inName; |
| 893 |
|
|
| 894 |
+ |
|
| 895 |
|
(info[0].getConfiguration())->createArrays( info[0].n_atoms ); |
| 896 |
|
|
| 897 |
|
for(i=0; i<info[0].n_atoms; i++) info[0].atoms[i]->setCoords(); |
| 902 |
|
#ifdef IS_MPI // is_mpi |
| 903 |
|
if( worldRank == 0 ){ |
| 904 |
|
#endif //is_mpi |
| 905 |
< |
fileInit = new InitializeFromFile( globals->getInitialConfig() ); |
| 905 |
> |
inName = globals->getInitialConfig(); |
| 906 |
> |
double* tempDouble = new double[1000000]; |
| 907 |
> |
fileInit = new InitializeFromFile( inName ); |
| 908 |
|
#ifdef IS_MPI |
| 909 |
|
}else fileInit = new InitializeFromFile( NULL ); |
| 910 |
|
#endif |
| 1037 |
|
int i,k; |
| 1038 |
|
|
| 1039 |
|
// create the forceField |
| 1040 |
< |
|
| 1040 |
> |
|
| 1041 |
|
createFF(); |
| 1042 |
|
|
| 1043 |
|
// extract componentList |
| 1055 |
|
#endif //is_mpi |
| 1056 |
|
|
| 1057 |
|
// create the atom and SRI arrays. Also initialize Molecule Stamp ID's |
| 1058 |
< |
|
| 1058 |
> |
|
| 1059 |
|
makeSysArrays(); |
| 1060 |
|
|
| 1061 |
|
// make and initialize the molecules (all but atomic coordinates) |
| 1062 |
< |
|
| 1062 |
> |
|
| 1063 |
|
makeMolecules(); |
| 1064 |
|
|
| 1065 |
|
for(k=0; k<nInfo; k++){ |
| 1362 |
|
switch( ensembleCase ){ |
| 1363 |
|
|
| 1364 |
|
case NVE_ENS: |
| 1365 |
< |
if (haveZConstraint){ |
| 1366 |
< |
setupZConstraint(); |
| 1365 |
> |
if (globals->haveZconstraints()){ |
| 1366 |
> |
setupZConstraint(info[k]); |
| 1367 |
|
new ZConstraint<NVE<RealIntegrator> >( &(info[k]), the_ff ); |
| 1368 |
|
} |
| 1369 |
|
|
| 1372 |
|
break; |
| 1373 |
|
|
| 1374 |
|
case NVT_ENS: |
| 1375 |
< |
if (haveZConstraint){ |
| 1376 |
< |
setupZConstraint(); |
| 1375 |
> |
if (globals->haveZconstraints()){ |
| 1376 |
> |
setupZConstraint(info[k]); |
| 1377 |
|
myNVT = new ZConstraint<NVT<RealIntegrator> >( &(info[k]), the_ff ); |
| 1378 |
|
} |
| 1379 |
|
else |
| 1394 |
|
break; |
| 1395 |
|
|
| 1396 |
|
case NPTi_ENS: |
| 1397 |
< |
if (haveZConstraint){ |
| 1398 |
< |
setupZConstraint(); |
| 1397 |
> |
if (globals->haveZconstraints()){ |
| 1398 |
> |
setupZConstraint(info[k]); |
| 1399 |
|
myNPTi = new ZConstraint<NPTi<RealIntegrator> >( &(info[k]), the_ff ); |
| 1400 |
|
} |
| 1401 |
|
else |
| 1435 |
|
break; |
| 1436 |
|
|
| 1437 |
|
case NPTf_ENS: |
| 1438 |
< |
if (haveZConstraint){ |
| 1439 |
< |
setupZConstraint(); |
| 1438 |
> |
if (globals->haveZconstraints()){ |
| 1439 |
> |
setupZConstraint(info[k]); |
| 1440 |
|
myNPTf = new ZConstraint<NPTf<RealIntegrator> >( &(info[k]), the_ff ); |
| 1441 |
|
} |
| 1442 |
|
else |
| 1476 |
|
break; |
| 1477 |
|
|
| 1478 |
|
case NPTim_ENS: |
| 1479 |
< |
if (haveZConstraint){ |
| 1480 |
< |
setupZConstraint(); |
| 1479 |
> |
if (globals->haveZconstraints()){ |
| 1480 |
> |
setupZConstraint(info[k]); |
| 1481 |
|
myNPTim = new ZConstraint<NPTim<RealIntegrator> >( &(info[k]), the_ff ); |
| 1482 |
|
} |
| 1483 |
|
else |
| 1517 |
|
break; |
| 1518 |
|
|
| 1519 |
|
case NPTfm_ENS: |
| 1520 |
< |
if (haveZConstraint){ |
| 1521 |
< |
setupZConstraint(); |
| 1520 |
> |
if (globals->haveZconstraints()){ |
| 1521 |
> |
setupZConstraint(info[k]); |
| 1522 |
|
myNPTfm = new ZConstraint<NPTfm<RealIntegrator> >( &(info[k]), the_ff ); |
| 1523 |
|
} |
| 1524 |
|
else |
| 1593 |
|
|
| 1594 |
|
} |
| 1595 |
|
|
| 1596 |
< |
void SimSetup::setupZConstraint() |
| 1596 |
> |
void SimSetup::setupZConstraint(SimInfo& theInfo) |
| 1597 |
|
{ |
| 1598 |
< |
int k; |
| 1599 |
< |
|
| 1600 |
< |
for(k=0; k<nInfo; k++){ |
| 1601 |
< |
|
| 1598 |
< |
if(globals->haveZConsTime()){ |
| 1598 |
> |
int nZConstraints; |
| 1599 |
> |
ZconStamp** zconStamp; |
| 1600 |
> |
|
| 1601 |
> |
if(globals->haveZconstraintTime()){ |
| 1602 |
|
|
| 1603 |
|
//add sample time of z-constraint into SimInfo's property list |
| 1604 |
|
DoubleData* zconsTimeProp = new DoubleData(); |
| 1605 |
< |
zconsTimeProp->setID("zconstime"); |
| 1606 |
< |
zconsTimeProp->setData(globals->getZConsTime()); |
| 1607 |
< |
info[k].addProperty(zconsTimeProp); |
| 1605 |
> |
zconsTimeProp->setID(ZCONSTIME_ID); |
| 1606 |
> |
zconsTimeProp->setData(globals->getZconsTime()); |
| 1607 |
> |
theInfo.addProperty(zconsTimeProp); |
| 1608 |
|
} |
| 1609 |
|
else{ |
| 1610 |
|
sprintf( painCave.errMsg, |
| 1613 |
|
painCave.isFatal = 1; |
| 1614 |
|
simError(); |
| 1615 |
|
} |
| 1616 |
< |
|
| 1617 |
< |
if(globals->haveIndexOfAllZConsMols()){ |
| 1618 |
< |
|
| 1619 |
< |
//add index of z-constraint molecules into SimInfo's property list |
| 1620 |
< |
vector<int> tempIndex = globals->getIndexOfAllZConsMols(); |
| 1621 |
< |
|
| 1622 |
< |
//sort the index |
| 1623 |
< |
sort(tempIndex.begin(), tempIndex.end()); |
| 1624 |
< |
|
| 1625 |
< |
IndexData* zconsIndex = new IndexData(); |
| 1626 |
< |
zconsIndex->setID("zconsindex"); |
| 1627 |
< |
zconsIndex->setIndexData(tempIndex); |
| 1628 |
< |
info[k].addProperty(zconsIndex); |
| 1616 |
> |
|
| 1617 |
> |
// |
| 1618 |
> |
nZConstraints = globals->getNzConstraints(); |
| 1619 |
> |
theInfo.nZconstraints = nZConstraints; |
| 1620 |
> |
|
| 1621 |
> |
zconStamp = globals->getZconStamp(); |
| 1622 |
> |
ZConsParaItem tempParaItem; |
| 1623 |
> |
|
| 1624 |
> |
ZConsParaData* zconsParaData = new ZConsParaData(); |
| 1625 |
> |
zconsParaData->setID(ZCONSPARADATA_ID); |
| 1626 |
> |
|
| 1627 |
> |
for(int i = 0; i < nZConstraints; i++){ |
| 1628 |
> |
tempParaItem.havingZPos = zconStamp[i]->haveZpos(); |
| 1629 |
> |
tempParaItem.zPos = zconStamp[i]->getZpos(); |
| 1630 |
> |
tempParaItem.zconsIndex = zconStamp[i]->getMolIndex(); |
| 1631 |
> |
tempParaItem.kRatio = zconStamp[i]->getKratio(); |
| 1632 |
> |
|
| 1633 |
> |
zconsParaData->addItem(tempParaItem); |
| 1634 |
|
} |
| 1635 |
< |
else{ |
| 1636 |
< |
sprintf( painCave.errMsg, |
| 1637 |
< |
"SimSetup error: If you use an ZConstraint\n" |
| 1638 |
< |
" , you must set index of z-constraint molecules.\n"); |
| 1639 |
< |
painCave.isFatal = 1; |
| 1640 |
< |
simError(); |
| 1641 |
< |
|
| 1635 |
> |
|
| 1636 |
> |
//sort the parameters by index of molecules |
| 1637 |
> |
zconsParaData->sortByIndex(); |
| 1638 |
> |
|
| 1639 |
> |
//push data into siminfo, therefore, we can retrieve later |
| 1640 |
> |
theInfo.addProperty(zconsParaData); |
| 1641 |
> |
|
| 1642 |
> |
//push zconsTol into siminfo, if user does not specify |
| 1643 |
> |
//value for zconsTol, a default value will be used |
| 1644 |
> |
DoubleData* zconsTol = new DoubleData(); |
| 1645 |
> |
zconsTol->setID(ZCONSTOL_ID); |
| 1646 |
> |
if(globals->haveZconsTol()){ |
| 1647 |
> |
zconsTol->setData(globals->getZconsTol()); |
| 1648 |
|
} |
| 1649 |
< |
|
| 1649 |
> |
else{ |
| 1650 |
> |
double defaultZConsTol = 1E-6; |
| 1651 |
> |
sprintf( painCave.errMsg, |
| 1652 |
> |
"ZConstraint Waring: Tolerance for z-constraint methodl is not specified\n" |
| 1653 |
> |
" , default value %f is used.\n", defaultZConsTol); |
| 1654 |
> |
painCave.isFatal = 0; |
| 1655 |
> |
simError(); |
| 1656 |
> |
|
| 1657 |
> |
zconsTol->setData(defaultZConsTol); |
| 1658 |
> |
} |
| 1659 |
> |
theInfo.addProperty(zconsTol); |
| 1660 |
> |
|
| 1661 |
|
//Determine the name of ouput file and add it into SimInfo's property list |
| 1662 |
|
//Be careful, do not use inFileName, since it is a pointer which |
| 1663 |
|
//point to a string at master node, and slave nodes do not contain that string |
| 1664 |
|
|
| 1665 |
< |
string zconsOutput(info[k].finalName); |
| 1665 |
> |
string zconsOutput(theInfo.finalName); |
| 1666 |
|
|
| 1667 |
|
zconsOutput = zconsOutput.substr(0, zconsOutput.rfind(".")) + ".fz"; |
| 1668 |
|
|
| 1669 |
|
StringData* zconsFilename = new StringData(); |
| 1670 |
< |
zconsFilename->setID("zconsfilename"); |
| 1670 |
> |
zconsFilename->setID(ZCONSFILENAME_ID); |
| 1671 |
|
zconsFilename->setData(zconsOutput); |
| 1672 |
|
|
| 1673 |
< |
info[k].addProperty(zconsFilename); |
| 1649 |
< |
} |
| 1673 |
> |
theInfo.addProperty(zconsFilename); |
| 1674 |
|
} |