From 943f499ef2fd8402f972f8e8203d47f00b27b8f1 Mon Sep 17 00:00:00 2001 From: Giovanni Bussi <giovanni.bussi@gmail.com> Date: Tue, 18 Sep 2012 18:00:21 +0200 Subject: [PATCH] Fixed flushing PlumedFile's were not flushed correctly --- src/GenericFlush.cpp | 1 + src/PlumedFile.cpp | 1 + src/PlumedMain.cpp | 16 ++++++++++++++++ src/PlumedMain.h | 12 ++++++++++++ 4 files changed, 30 insertions(+) diff --git a/src/GenericFlush.cpp b/src/GenericFlush.cpp index eb2244e8a..e6477d129 100644 --- a/src/GenericFlush.cpp +++ b/src/GenericFlush.cpp @@ -55,6 +55,7 @@ public: static void registerKeywords( Keywords& keys ); void calculate(){}; void apply(){ + plumed.fflush(); log.flush(); const ActionSet & actionSet(plumed.getActionSet()); for(ActionSet::const_iterator p=actionSet.begin();p!=actionSet.end();++p) diff --git a/src/PlumedFile.cpp b/src/PlumedFile.cpp index 9ed59ef4d..ed12e3552 100644 --- a/src/PlumedFile.cpp +++ b/src/PlumedFile.cpp @@ -116,6 +116,7 @@ PlumedFileBase& PlumedFileBase::open(const std::string& path,const std::string& const std::string pathsuf=path+plumed->getSuffix(); fp=std::fopen(const_cast<char*>(pathsuf.c_str()),const_cast<char*>(mode.c_str())); } + if(plumed) plumed->insertFile(*this); if(!fp) fp=std::fopen(const_cast<char*>(path.c_str()),const_cast<char*>(mode.c_str())); plumed_massert(fp,"file " + path + "cannot be found"); return *this; diff --git a/src/PlumedMain.cpp b/src/PlumedMain.cpp index 2619090b8..eec2949cd 100644 --- a/src/PlumedMain.cpp +++ b/src/PlumedMain.cpp @@ -595,6 +595,22 @@ std::string PlumedMain::cite(const std::string&item){ return citations.cite(item); } +void PlumedMain::fflush(){ + for(files_iterator p=files.begin();p!=files.end();++p){ + (*p)->flush(); + } +} + +void PlumedMain::insertFile(PlumedFileBase&f){ + files.insert(&f); +} + +void PlumedMain::eraseFile(PlumedFileBase&f){ + files.erase(&f); +} + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/PlumedMain.h b/src/PlumedMain.h index e26b26ce8..a795b85e3 100644 --- a/src/PlumedMain.h +++ b/src/PlumedMain.h @@ -27,6 +27,7 @@ #include <cstdio> #include <string> #include <vector> +#include <set> // !!!!!!!!!!!!!!!!!!!!!! DANGER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11 @@ -59,6 +60,7 @@ class PlumedCommunicator; class Stopwatch; class Citations; class ExchangePatterns; +class PlumedFileBase; /** Main plumed object. @@ -119,6 +121,10 @@ private: /// Class of possible exchange patterns, used for BIASEXCHANGE but also for future parallel tempering ExchangePatterns exchangepatterns; + + std::set<PlumedFileBase*> files; + typedef std::set<PlumedFileBase*>::iterator files_iterator; + public: /// Flag to switch off virial calculation (for debug) bool novirial; @@ -219,6 +225,12 @@ public: FILE* fopen(const char *path, const char *mode); /// Closes a file opened with PlumedMain::fopen() int fclose(FILE*fp); +/// Insert a file + void insertFile(PlumedFileBase&); +/// Erase a file + void eraseFile(PlumedFileBase&); +/// Flush all files + void fflush(); }; ///// -- GitLab