Loading include/dca/phys/dca_loop/dca_loop.hpp +23 −20 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ private: update_chemical_potential_type update_chemical_potential_obj; std::string file_name_; io::HDF5Writer output_file_; std::shared_ptr<io::HDF5Writer> output_file_; unsigned dca_iteration_ = 0; Loading @@ -137,12 +137,14 @@ DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::DcaLoop(ParametersType& update_chemical_potential_obj(parameters, MOMS, cluster_mapping_obj), output_file_(false), monte_carlo_integrator_(parameters_ref, MOMS_ref, &output_file_) { monte_carlo_integrator_(parameters_ref, MOMS_ref) { if (concurrency.id() == concurrency.first()) { file_name_ = parameters.get_directory() + parameters.get_filename_dca(); output_file_ = std::make_shared<io::HDF5Writer>(false); dca::util::SignalHandler::registerFile(output_file_); std::cout << "\n\n\t" << __FUNCTION__ << " has started \t" << dca::util::print_time() << "\n\n"; } } Loading @@ -152,14 +154,15 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::write() { if (concurrency.id() == concurrency.first()) { std::cout << "\n\n\t\t start writing " << file_name_ << "\t" << dca::util::print_time() << "\n\n"; output_file_.set_verbose(true); output_file_->set_verbose(true); parameters.write(output_file_); MOMS.write(output_file_); monte_carlo_integrator_.write(output_file_); DCA_info_struct.write(output_file_); parameters.write(*output_file_); MOMS.write(*output_file_); monte_carlo_integrator_.write(*output_file_); DCA_info_struct.write(*output_file_); output_file_.close_file(); output_file_->close_file(); output_file_.reset(); std::error_code code; std::filesystem::rename(file_name_ + ".tmp", file_name_, code); Loading Loading @@ -191,7 +194,7 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::initialize() { } if (concurrency.id() == concurrency.first()) { output_file_.open_file(file_name_ + ".tmp", parameters.autoresume() ? false : true); output_file_->open_file(file_name_ + ".tmp", parameters.autoresume() ? false : true); } } Loading Loading @@ -377,17 +380,17 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::logSelfEnergy(int i DCA_info_struct.last_completed_iteration = i; if (output_file_) { output_file_.open_group("functions"); output_file_.execute(MOMS.Sigma); output_file_.close_group(); output_file_->open_group("functions"); output_file_->execute(MOMS.Sigma); output_file_->close_group(); output_file_.open_group("parameters"); output_file_.open_group("physics"); output_file_.execute("chemical-potential", parameters.get_chemical_potential()); output_file_.close_group(); output_file_.close_group(); output_file_->open_group("parameters"); output_file_->open_group("physics"); output_file_->execute("chemical-potential", parameters.get_chemical_potential()); output_file_->close_group(); output_file_->close_group(); DCA_info_struct.write(output_file_); DCA_info_struct.write(*output_file_); } } Loading include/dca/util/signal_handler.hpp +3 −2 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #ifndef DCA_UTIL_SIGNAL_HANDLER_HPP #define DCA_UTIL_SIGNAL_HANDLER_HPP #include <memory> #include <vector> #include "dca/io/hdf5/hdf5_writer.hpp" Loading @@ -23,13 +24,13 @@ class SignalHandler{ public: static void init(bool verbose = false); static void registerFile(io::HDF5Writer& writer); static void registerFile(const std::shared_ptr<io::HDF5Writer>& writer); private: static void handle(int signum); static inline bool verbose_; static inline std::vector<io::HDF5Writer*> file_ptrs_; static inline std::vector<std::weak_ptr<io::HDF5Writer>> file_ptrs_; }; } // namespace util Loading src/util/signal_handler.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -33,14 +33,17 @@ void SignalHandler::handle(int signum) { if (verbose_) std::cerr << "Received signal (" << signum << ") received." << std::endl; for (auto file : file_ptrs_) for (auto file_ptr : file_ptrs_) { auto file = file_ptr.lock(); if (file) file->close_file(); } exit(signum); } void SignalHandler::registerFile(io::HDF5Writer& writer) { file_ptrs_.push_back(&writer); void SignalHandler::registerFile(const std::shared_ptr<io::HDF5Writer>& writer) { file_ptrs_.emplace_back(writer); } } // namespace util Loading Loading
include/dca/phys/dca_loop/dca_loop.hpp +23 −20 Original line number Diff line number Diff line Loading @@ -111,7 +111,7 @@ private: update_chemical_potential_type update_chemical_potential_obj; std::string file_name_; io::HDF5Writer output_file_; std::shared_ptr<io::HDF5Writer> output_file_; unsigned dca_iteration_ = 0; Loading @@ -137,12 +137,14 @@ DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::DcaLoop(ParametersType& update_chemical_potential_obj(parameters, MOMS, cluster_mapping_obj), output_file_(false), monte_carlo_integrator_(parameters_ref, MOMS_ref, &output_file_) { monte_carlo_integrator_(parameters_ref, MOMS_ref) { if (concurrency.id() == concurrency.first()) { file_name_ = parameters.get_directory() + parameters.get_filename_dca(); output_file_ = std::make_shared<io::HDF5Writer>(false); dca::util::SignalHandler::registerFile(output_file_); std::cout << "\n\n\t" << __FUNCTION__ << " has started \t" << dca::util::print_time() << "\n\n"; } } Loading @@ -152,14 +154,15 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::write() { if (concurrency.id() == concurrency.first()) { std::cout << "\n\n\t\t start writing " << file_name_ << "\t" << dca::util::print_time() << "\n\n"; output_file_.set_verbose(true); output_file_->set_verbose(true); parameters.write(output_file_); MOMS.write(output_file_); monte_carlo_integrator_.write(output_file_); DCA_info_struct.write(output_file_); parameters.write(*output_file_); MOMS.write(*output_file_); monte_carlo_integrator_.write(*output_file_); DCA_info_struct.write(*output_file_); output_file_.close_file(); output_file_->close_file(); output_file_.reset(); std::error_code code; std::filesystem::rename(file_name_ + ".tmp", file_name_, code); Loading Loading @@ -191,7 +194,7 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::initialize() { } if (concurrency.id() == concurrency.first()) { output_file_.open_file(file_name_ + ".tmp", parameters.autoresume() ? false : true); output_file_->open_file(file_name_ + ".tmp", parameters.autoresume() ? false : true); } } Loading Loading @@ -377,17 +380,17 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::logSelfEnergy(int i DCA_info_struct.last_completed_iteration = i; if (output_file_) { output_file_.open_group("functions"); output_file_.execute(MOMS.Sigma); output_file_.close_group(); output_file_->open_group("functions"); output_file_->execute(MOMS.Sigma); output_file_->close_group(); output_file_.open_group("parameters"); output_file_.open_group("physics"); output_file_.execute("chemical-potential", parameters.get_chemical_potential()); output_file_.close_group(); output_file_.close_group(); output_file_->open_group("parameters"); output_file_->open_group("physics"); output_file_->execute("chemical-potential", parameters.get_chemical_potential()); output_file_->close_group(); output_file_->close_group(); DCA_info_struct.write(output_file_); DCA_info_struct.write(*output_file_); } } Loading
include/dca/util/signal_handler.hpp +3 −2 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ #ifndef DCA_UTIL_SIGNAL_HANDLER_HPP #define DCA_UTIL_SIGNAL_HANDLER_HPP #include <memory> #include <vector> #include "dca/io/hdf5/hdf5_writer.hpp" Loading @@ -23,13 +24,13 @@ class SignalHandler{ public: static void init(bool verbose = false); static void registerFile(io::HDF5Writer& writer); static void registerFile(const std::shared_ptr<io::HDF5Writer>& writer); private: static void handle(int signum); static inline bool verbose_; static inline std::vector<io::HDF5Writer*> file_ptrs_; static inline std::vector<std::weak_ptr<io::HDF5Writer>> file_ptrs_; }; } // namespace util Loading
src/util/signal_handler.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -33,14 +33,17 @@ void SignalHandler::handle(int signum) { if (verbose_) std::cerr << "Received signal (" << signum << ") received." << std::endl; for (auto file : file_ptrs_) for (auto file_ptr : file_ptrs_) { auto file = file_ptr.lock(); if (file) file->close_file(); } exit(signum); } void SignalHandler::registerFile(io::HDF5Writer& writer) { file_ptrs_.push_back(&writer); void SignalHandler::registerFile(const std::shared_ptr<io::HDF5Writer>& writer) { file_ptrs_.emplace_back(writer); } } // namespace util Loading