| 1 | + | #include <algorithm> | 
| 2 |  | #include <cstdlib> | 
| 3 |  | #include <iostream> | 
| 4 |  | #include <cmath> | 
| 5 | + | #include <string> | 
| 6 |  |  | 
| 7 |  | #include "SimSetup.hpp" | 
| 8 |  | #include "parse_me.h" | 
| 22 |  | #define NPTf_ENS  3 | 
| 23 |  | #define NPTim_ENS 4 | 
| 24 |  | #define NPTfm_ENS 5 | 
| 25 | + | #define NVEZCONS_ENS 6 | 
| 26 |  |  | 
| 27 |  |  | 
| 28 |  | #define FF_DUFF 0 | 
| 29 |  | #define FF_LJ   1 | 
| 30 |  | #define FF_EAM  2 | 
| 31 | + |  | 
| 32 | + | using namespace std; | 
| 33 |  |  | 
| 34 |  | SimSetup::SimSetup(){ | 
| 35 |  |  | 
| 623 |  | else if( !strcasecmp( ensemble, "NPTf" )) ensembleCase = NPTf_ENS; | 
| 624 |  | else if( !strcasecmp( ensemble, "NPTim" )) ensembleCase = NPTim_ENS; | 
| 625 |  | else if( !strcasecmp( ensemble, "NPTfm" )) ensembleCase = NPTfm_ENS; | 
| 626 | + | else if( !strcasecmp( ensemble, "NVEZCONS")) ensembleCase = NVEZCONS_ENS; | 
| 627 |  | else{ | 
| 628 |  | sprintf( painCave.errMsg, | 
| 629 |  | "SimSetup Warning. Unrecognized Ensemble -> %s, " | 
| 1309 |  | NPTf<RealIntegrator>* myNPTf = NULL; | 
| 1310 |  | NPTim<RealIntegrator>* myNPTim = NULL; | 
| 1311 |  | NPTfm<RealIntegrator>* myNPTfm = NULL; | 
| 1312 | < |  | 
| 1312 | > | ZConstraint<NVE<RealIntegrator> >* myNVEZCons = NULL; | 
| 1313 | > |  | 
| 1314 | > | cerr << "setting integrator" <<endl; | 
| 1315 | > |  | 
| 1316 |  | switch( ensembleCase ){ | 
| 1317 |  |  | 
| 1318 |  | case NVE_ENS: | 
| 1474 |  | simError(); | 
| 1475 |  | } | 
| 1476 |  | break; | 
| 1477 | + |  | 
| 1478 | + | case NVEZCONS_ENS: | 
| 1479 | + | { | 
| 1480 |  |  | 
| 1481 | + | if(globals->haveZConsTime()){ | 
| 1482 | + |  | 
| 1483 | + | //add sample time of z-constraint  into SimInfo's property list | 
| 1484 | + | DoubleData* zconsTimeProp = new DoubleData(); | 
| 1485 | + | zconsTimeProp->setID("zconstime"); | 
| 1486 | + | zconsTimeProp->setData(globals->getZConsTime()); | 
| 1487 | + | info->addProperty(zconsTimeProp); | 
| 1488 | + | } | 
| 1489 | + | else{ | 
| 1490 | + | sprintf( painCave.errMsg, | 
| 1491 | + | "ZConstraint error: If you use an ZConstraint\n" | 
| 1492 | + | " , you must set sample time.\n"); | 
| 1493 | + | painCave.isFatal = 1; | 
| 1494 | + | simError(); | 
| 1495 | + | } | 
| 1496 | + |  | 
| 1497 | + | if(globals->haveIndexOfAllZConsMols()){ | 
| 1498 | + |  | 
| 1499 | + | //add index of z-constraint molecules into SimInfo's property list | 
| 1500 | + | vector<int> tempIndex = globals->getIndexOfAllZConsMols(); | 
| 1501 | + | sort(tempIndex.begin(), tempIndex.end()); | 
| 1502 | + |  | 
| 1503 | + | IndexData* zconsIndex = new IndexData(); | 
| 1504 | + | zconsIndex->setID("zconsindex"); | 
| 1505 | + | zconsIndex->setIndexData(tempIndex); | 
| 1506 | + | info->addProperty(zconsIndex); | 
| 1507 | + | } | 
| 1508 | + | else{ | 
| 1509 | + | sprintf( painCave.errMsg, | 
| 1510 | + | "SimSetup error: If you use an ZConstraint\n" | 
| 1511 | + | " , you must set index of z-constraint molecules.\n"); | 
| 1512 | + | painCave.isFatal = 1; | 
| 1513 | + | simError(); | 
| 1514 | + |  | 
| 1515 | + | } | 
| 1516 | + |  | 
| 1517 | + | //Determine the name of ouput file and add it into SimInfo's property list | 
| 1518 | + | //Be careful, do not use inFileName, since it is a pointer which | 
| 1519 | + | //point to a string at master node, and slave nodes do not contain that string | 
| 1520 | + |  | 
| 1521 | + | string zconsOutput(info->finalName); | 
| 1522 | + |  | 
| 1523 | + | zconsOutput = zconsOutput.substr(0, zconsOutput.rfind(".")) + ".fz"; | 
| 1524 | + |  | 
| 1525 | + | StringData* zconsFilename = new StringData(); | 
| 1526 | + | zconsFilename->setID("zconsfilename"); | 
| 1527 | + | zconsFilename->setData(zconsOutput); | 
| 1528 | + |  | 
| 1529 | + | info->addProperty(zconsFilename); | 
| 1530 | + |  | 
| 1531 | + | myNVEZCons = new ZConstraint<NVE<RealIntegrator> >( info, the_ff ); | 
| 1532 | + |  | 
| 1533 | + | break; | 
| 1534 | + | } | 
| 1535 | + |  | 
| 1536 |  | default: | 
| 1537 |  | sprintf( painCave.errMsg, | 
| 1538 |  | "SimSetup Error. Unrecognized ensemble in case statement.\n"); |