diff --git a/CHANGES/v2.0.txt b/CHANGES/v2.0.txt index 0e6ab0cf3e2ad9b02d0a51a0faa6de2e491d062b..54ba4606daecd834585eedd6b96a0fd7e7ea33e2 100644 --- a/CHANGES/v2.0.txt +++ b/CHANGES/v2.0.txt @@ -27,5 +27,6 @@ For users: For developers: - Several small fixes in documentation - Added possibility to setup replica exchange from MD codes in fortran (commands "GREX setMPIFIntercomm" and "GREX setMPIFIntracomm") +- cmd("setStopFlag") should now be called after PLUMED initialization. */ diff --git a/src/cltools/Driver.cpp b/src/cltools/Driver.cpp index e237129193f254c125b02acd536f500b5253337e..966f8da6543887c93aefb64e8ea9ca66a28e8d12 100644 --- a/src/cltools/Driver.cpp +++ b/src/cltools/Driver.cpp @@ -256,8 +256,6 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ int rr=sizeof(real); p.cmd("setRealPrecision",&rr); int checknatoms=-1; - int plumedStopCondition=0; - p.cmd("setStopFlag",&plumedStopCondition); int step=0; if(Communicator::initialized()){ if(multi){ @@ -327,7 +325,7 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ while(true){ if(!noatoms){ if(!Tools::getline(fp,line)) break; - } else if ( plumedStopCondition ) break; + } int natoms; bool first_step=false; @@ -421,7 +419,9 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ } } + int plumedStopCondition=0; p.cmd("setStep",&step); + p.cmd("setStopFlag",&plumedStopCondition); if(!noatoms){ if(trajectory_fmt=="xyz"){ if(!Tools::getline(fp,line)) error("premature end of trajectory file"); @@ -559,6 +559,8 @@ int Driver<real>::main(FILE* in,FILE*out,Communicator& pc){ fprintf(fp_forces,fmt.c_str(),forces[3*i],forces[3*i+1],forces[3*i+2]); } + if(noatoms && plumedStopCondition) break; + step+=stride; } p.cmd("runFinalJobs"); diff --git a/src/core/PlumedMain.cpp b/src/core/PlumedMain.cpp index 6e1e0f10e07ccf5ce54a19db96346c26e1332ca5..24e36d17bb13bd779dcae2860b14923de7ae345b 100644 --- a/src/core/PlumedMain.cpp +++ b/src/core/PlumedMain.cpp @@ -289,11 +289,11 @@ void PlumedMain::cmd(const std::string & word,void*val){ CHECK_NOTINIT(initialized,word); CHECK_NULL(val,word); log.open(static_cast<char*>(val),"w"); +// other commands that should be used after initialization: } else if(word=="setStopFlag"){ - CHECK_NOTINIT(initialized,word); + CHECK_INIT(initialized,word); CHECK_NULL(val,word); stopFlag=static_cast<int*>(val); -// other commands that should be used after initialization: } else if(word=="getExchangesFlag"){ CHECK_INIT(initialized,word); CHECK_NULL(val,word);