From 3319395aca70c30762931ad792eecee479ac8712 Mon Sep 17 00:00:00 2001 From: Carlo Camilloni <carlo.camilloni@gmail.com> Date: Tue, 21 Jun 2016 19:48:16 +0200 Subject: [PATCH] checkpointing: preliminary feature, a checkpoinitng flag is read that is used to flush all the actions [ makedoc ] --- CHANGES/Unreleased.txt | 3 ++- src/core/PlumedMain.cpp | 15 +++++++++++---- src/core/PlumedMain.h | 3 +++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/CHANGES/Unreleased.txt b/CHANGES/Unreleased.txt index 0fc300440..43f5e1cda 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 0fe1d5dbf..4a3f52b1d 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 c6ca0910c..829b7ba47 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; -- GitLab