void PlumedMain::update(){ if(!active)return; stopwatch.start("6 Update"); // update step (for statistics, etc) updateFlags.push(true); for(ActionSet::iterator p=actionSet.begin();p!=actionSet.end();++p){ (*p)->beforeUpdate(); if((*p)->isActive() && (*p)->checkUpdate() && updateFlagsTop()) (*p)->update(); } while(!updateFlags.empty()) updateFlags.pop(); if(!updateFlags.empty()) plumed_merror("non matching changes in the update flags"); // Check that no action has told the calculation to stop if(stopNow){ if(stopFlag) (*stopFlag)=1; else plumed_merror("your md code cannot handle plumed stop events - add a call to plumed.comm(stopFlag,stopCondition)"); } // flush by default every 10000 steps // hopefully will not affect performance if(step%10000==0){ fflush(); log.flush(); for(ActionSet::const_iterator p=actionSet.begin();p!=actionSet.end();++p) (*p)->fflush(); } stopwatch.stop("6 Update"); }
void PlumedMain::update() { if(!active)return; stopwatch.start("6 Update"); // update step (for statistics, etc) updateFlags.push(true); for(const auto & p : actionSet) { p->beforeUpdate(); if(p->isActive() && p->checkUpdate() && updateFlagsTop()) p->update(); } while(!updateFlags.empty()) updateFlags.pop(); if(!updateFlags.empty()) plumed_merror("non matching changes in the update flags"); // Check that no action has told the calculation to stop if(stopNow) { if(stopFlag) (*stopFlag)=1; else plumed_merror("your md code cannot handle plumed stop events - add a call to plumed.comm(stopFlag,stopCondition)"); } // flush by default every 10000 steps // hopefully will not affect performance // also if receive checkpointing signal if(step%10000==0||doCheckPoint) { fflush(); log.flush(); for(const auto & p : actionSet) p->fflush(); } stopwatch.stop("6 Update"); }