diff --git a/CHANGES/Unreleased.txt b/CHANGES/Unreleased.txt index 0fc3004400111bed8e969cc811c9494d6e2aad4b..43f5e1cda933c53b039644650f55dcbe9b13af65 100644 --- a/CHANGES/Unreleased.txt +++ b/CHANGES/Unreleased.txt @@ -58,6 +58,7 @@ Changes from version 2.2 which are relevant for users: the patch is still backward compatible with older PLUMED version, but the charges will only be passed when using PLUMED 2.3 or later. - Patches for GROMACS 4.6 and 5.1 incorporate Hamiltonian replica exchange, see \ref hrex + - Gromacs 5.1 flushes the plumed output files upon checkpointing - New features for existing actions: - The SPECIES and SPECIESA keyword in MultiColvars can now take a multicolvar as input. This allows one to calculate quantities such as the Q4 parameters for those atoms that have a coordination number greater @@ -75,7 +76,7 @@ Changes from version 2.2 which are relevant for users: - PLUMED now generate a VIM syntax file, see \ref VimSyntax For developers: -- Added new strings for plumed cmd: setMDMassUnits, setMDChargeUnits, readInputLine, performCalcNoUpdate, and update. +- Added new strings for plumed cmd: setMDMassUnits, setMDChargeUnits, readInputLine, performCalcNoUpdate, update and doCheckPoint. */ diff --git a/src/core/PlumedMain.cpp b/src/core/PlumedMain.cpp index 0fe1d5dbf07cfbb23ee7b89fbd0f9640ffed2dc8..4a3f52b1d562b43f7f027d291e74f1ab63ab6363 100644 --- a/src/core/PlumedMain.cpp +++ b/src/core/PlumedMain.cpp @@ -80,6 +80,7 @@ PlumedMain::PlumedMain(): exchangePatterns(*new(ExchangePatterns)), exchangeStep(false), restart(false), + doCheckPoint(false), stopFlag(NULL), stopNow(false), novirial(false), @@ -368,6 +369,14 @@ void PlumedMain::cmd(const std::string & word,void*val){ CHECK_NOTNULL(val,word); if(*static_cast<int*>(val)!=0) restart=true; break; + /* ADDED WITH API==4 */ + case cmd_doCheckPoint: + CHECK_INIT(initialized,word); + CHECK_NOTNULL(val,word); + doCheckPoint = false; + if(*static_cast<int*>(val)!=0) doCheckPoint = true; + break; + /* STOP API */ case cmd_setMDEngine: CHECK_NOTINIT(initialized,word); CHECK_NOTNULL(val,word); @@ -505,9 +514,6 @@ void PlumedMain::readInputFile(std::string str){ log.printf("END FILE: %s\n",str.c_str()); log.flush(); - //comm.Barrier(); - //if(comm.Get_rank()==0) multi_sim_comm.Barrier(); - pilots=actionSet.select<ActionPilot*>(); } @@ -736,7 +742,8 @@ void PlumedMain::update(){ // flush by default every 10000 steps // hopefully will not affect performance - if(step%10000==0){ +// also if receive checkpointing signal + if(step%10000==0||doCheckPoint){ fflush(); log.flush(); for(ActionSet::const_iterator p=actionSet.begin();p!=actionSet.end();++p) (*p)->fflush(); diff --git a/src/core/PlumedMain.h b/src/core/PlumedMain.h index c6ca0910cafc5ca8cbe012b03a759ef789b89b86..829b7ba47fa713f952a2531d04183b9dd92d48aa 100644 --- a/src/core/PlumedMain.h +++ b/src/core/PlumedMain.h @@ -133,6 +133,9 @@ private: /// Flag for restart bool restart; +/// Flag for checkpointig + bool doCheckPoint; + std::set<FileBase*> files; typedef std::set<FileBase*>::iterator files_iterator;