Loading include/dca/io/adios2/adios2_writer.hpp +26 −10 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ public: void open_group(const std::string& new_path); void close_group(); void begin_step(); void end_step(); std::string get_path(const std::string& name = ""); template <typename arbitrary_struct_t> Loading Loading @@ -172,6 +175,9 @@ private: void write(const std::string& name, const std::vector<size_t>& size, const Scalar* data, const std::vector<size_t>& start, const std::vector<size_t>& count); template <typename T, typename... Args> void getVariable(const std::string& name, adios2::Variable<T>& var, const Args&... args); template <typename Scalar> void addAttribute(const std::string& set, const std::string& name, const std::vector<size_t>& size, const Scalar* data); Loading @@ -193,6 +199,17 @@ private: std::vector<size_t> size_check_; }; template <class CT> template <typename T, typename... Args> void ADIOS2Writer<CT>::getVariable(const std::string& name, adios2::Variable<T>& var, const Args&... args) { adios2::Variable<T> var_temp = io_.InquireVariable<T>(name); if (static_cast<bool>(var_temp) == false) var = io_.DefineVariable<T>(name, args...); else var = var_temp; } template <class CT> template <typename arbitrary_struct_t> void ADIOS2Writer<CT>::to_file(adios2::ADIOS& adios, const arbitrary_struct_t& arbitrary_struct, Loading Loading @@ -220,7 +237,6 @@ void ADIOS2Writer<CT>::execute(const std::string& name, bool value) { write<int>(full_name, dims, &int_value); } template <class CT> template <typename Scalar> void ADIOS2Writer<CT>::execute(const std::string& name, const std::pair<Scalar, Scalar>& value) { Loading Loading @@ -270,7 +286,7 @@ void ADIOS2Writer<CT>::execute(const std::string& name, adios2::Dims dims{nTotal}; adios2::Variable<Scalar> vVecs; adios2::Dims start{0}; vVecs = io_.DefineVariable<Scalar>(full_name, dims, start, dims); getVariable<Scalar>(full_name, vVecs, dims, start, dims); typename adios2::Variable<Scalar>::Span span = file_.Put(vVecs); size_t pos = 0; Loading @@ -296,7 +312,7 @@ void ADIOS2Writer<CT>::execute(const std::string& name, adios2::Dims dims{value.size(), n}; adios2::Variable<Scalar> v; adios2::Dims start{0, 0}; v = io_.DefineVariable<Scalar>(full_name, dims, start, dims); getVariable(full_name, v, dims, start, dims); typename adios2::Variable<Scalar>::Span span = file_.Put(v); Loading Loading @@ -535,11 +551,11 @@ void ADIOS2Writer<CT>::write(const std::string& name, const std::vector<size_t>& size_t ndim = size.size(); adios2::Variable<Scalar> v; if (ndim == 0) { v = io_.DefineVariable<Scalar>(name); getVariable<Scalar>(name, v); } else { std::vector<size_t> start(ndim, 0); v = io_.DefineVariable<Scalar>(name, size, start, size); getVariable<Scalar>(name, v, size, start, size); } file_.Put(v, data, adios2::Mode::Sync); } Loading @@ -552,10 +568,10 @@ void ADIOS2Writer<CT>::write(const std::string& name, const std::vector<size_t>& size_t ndim = size.size(); adios2::Variable<Scalar> v; if (ndim == 0) { v = io_.DefineVariable<Scalar>(name); getVariable<Scalar>(name, v); } else { v = io_.DefineVariable<Scalar>(name, size, start, count); getVariable<Scalar>(name, v, size, start, count); } file_.Put(v, data, adios2::Mode::Sync); } Loading include/dca/io/hdf5/hdf5_writer.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,9 @@ public: std::string get_path(); void begin_step() {}; void end_step() {}; void erase(const std::string& name); template <typename arbitrary_struct_t> Loading include/dca/io/json/json_writer.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ public: // Precondition: the current group is not the root. void close_group(); void begin_step() {}; void end_step() {}; constexpr static bool is_reader = false; constexpr static bool is_writer = true; Loading include/dca/io/writer.hpp +31 −23 Original line number Diff line number Diff line Loading @@ -51,6 +51,14 @@ public: constexpr static bool is_reader = false; constexpr static bool is_writer = true; void begin_step() { std::visit([&](auto& var) { var.begin_step();}, writer_); } void end_step() { std::visit([&](auto& var) { var.end_step();}, writer_); } void open_file(const std::string& file_name, bool overwrite = true) { std::visit([&](auto& var) { var.open_file(file_name, overwrite); }, writer_); } Loading @@ -69,33 +77,33 @@ public: template <class... Args> void execute(const Args&... args) { // currently only the ADIOS2Writer supports parallel writes #ifdef DCA_HAVE_ADIOS2 if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { std::visit([&](auto& var) { var.execute(args...); }, writer_); } else { #endif // #ifdef DCA_HAVE_ADIOS2 // if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { // std::visit([&](auto& var) { var.execute(args...); }, writer_); // } // else { // #endif if (concurrency_.id() == concurrency_.first()) { std::visit([&](auto& var) { var.execute(args...); }, writer_); } #ifdef DCA_HAVE_ADIOS2 } #endif // #ifdef DCA_HAVE_ADIOS2 // } // #endif } template <class... Args> void rewrite(const std::string& name, const Args&... args) { #ifdef DCA_HAVE_ADIOS2 if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { std::visit( [&](auto& var) { var.erase(name); var.execute(name, args...); }, writer_); } else { #endif // #ifdef DCA_HAVE_ADIOS2 // if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { // std::visit( // [&](auto& var) { // var.erase(name); // var.execute(name, args...); // }, // writer_); // } // else { // #endif if (concurrency_.id() == concurrency_.first()) { std::visit( [&](auto& var) { Loading @@ -104,9 +112,9 @@ public: }, writer_); } #ifdef DCA_HAVE_ADIOS2 } #endif // #ifdef DCA_HAVE_ADIOS2 // } // #endif } operator bool() const noexcept { Loading include/dca/phys/dca_data/dca_data.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -564,8 +564,8 @@ void DcaData<Parameters, DT>::initialize_G0() { template <class Parameters, DistType DT> void DcaData<Parameters, DT>::initializeSigma(const std::string& filename) { io::Reader reader(concurrency_, parameters_.get_output_format()); if (concurrency_.id() == concurrency_.first()) { io::Reader reader(concurrency_, parameters_.get_output_format()); reader.open_file(filename); if (parameters_.adjust_chemical_potential()) { Loading Loading
include/dca/io/adios2/adios2_writer.hpp +26 −10 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ public: void open_group(const std::string& new_path); void close_group(); void begin_step(); void end_step(); std::string get_path(const std::string& name = ""); template <typename arbitrary_struct_t> Loading Loading @@ -172,6 +175,9 @@ private: void write(const std::string& name, const std::vector<size_t>& size, const Scalar* data, const std::vector<size_t>& start, const std::vector<size_t>& count); template <typename T, typename... Args> void getVariable(const std::string& name, adios2::Variable<T>& var, const Args&... args); template <typename Scalar> void addAttribute(const std::string& set, const std::string& name, const std::vector<size_t>& size, const Scalar* data); Loading @@ -193,6 +199,17 @@ private: std::vector<size_t> size_check_; }; template <class CT> template <typename T, typename... Args> void ADIOS2Writer<CT>::getVariable(const std::string& name, adios2::Variable<T>& var, const Args&... args) { adios2::Variable<T> var_temp = io_.InquireVariable<T>(name); if (static_cast<bool>(var_temp) == false) var = io_.DefineVariable<T>(name, args...); else var = var_temp; } template <class CT> template <typename arbitrary_struct_t> void ADIOS2Writer<CT>::to_file(adios2::ADIOS& adios, const arbitrary_struct_t& arbitrary_struct, Loading Loading @@ -220,7 +237,6 @@ void ADIOS2Writer<CT>::execute(const std::string& name, bool value) { write<int>(full_name, dims, &int_value); } template <class CT> template <typename Scalar> void ADIOS2Writer<CT>::execute(const std::string& name, const std::pair<Scalar, Scalar>& value) { Loading Loading @@ -270,7 +286,7 @@ void ADIOS2Writer<CT>::execute(const std::string& name, adios2::Dims dims{nTotal}; adios2::Variable<Scalar> vVecs; adios2::Dims start{0}; vVecs = io_.DefineVariable<Scalar>(full_name, dims, start, dims); getVariable<Scalar>(full_name, vVecs, dims, start, dims); typename adios2::Variable<Scalar>::Span span = file_.Put(vVecs); size_t pos = 0; Loading @@ -296,7 +312,7 @@ void ADIOS2Writer<CT>::execute(const std::string& name, adios2::Dims dims{value.size(), n}; adios2::Variable<Scalar> v; adios2::Dims start{0, 0}; v = io_.DefineVariable<Scalar>(full_name, dims, start, dims); getVariable(full_name, v, dims, start, dims); typename adios2::Variable<Scalar>::Span span = file_.Put(v); Loading Loading @@ -535,11 +551,11 @@ void ADIOS2Writer<CT>::write(const std::string& name, const std::vector<size_t>& size_t ndim = size.size(); adios2::Variable<Scalar> v; if (ndim == 0) { v = io_.DefineVariable<Scalar>(name); getVariable<Scalar>(name, v); } else { std::vector<size_t> start(ndim, 0); v = io_.DefineVariable<Scalar>(name, size, start, size); getVariable<Scalar>(name, v, size, start, size); } file_.Put(v, data, adios2::Mode::Sync); } Loading @@ -552,10 +568,10 @@ void ADIOS2Writer<CT>::write(const std::string& name, const std::vector<size_t>& size_t ndim = size.size(); adios2::Variable<Scalar> v; if (ndim == 0) { v = io_.DefineVariable<Scalar>(name); getVariable<Scalar>(name, v); } else { v = io_.DefineVariable<Scalar>(name, size, start, count); getVariable<Scalar>(name, v, size, start, count); } file_.Put(v, data, adios2::Mode::Sync); } Loading
include/dca/io/hdf5/hdf5_writer.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,9 @@ public: std::string get_path(); void begin_step() {}; void end_step() {}; void erase(const std::string& name); template <typename arbitrary_struct_t> Loading
include/dca/io/json/json_writer.hpp +3 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,9 @@ public: // Precondition: the current group is not the root. void close_group(); void begin_step() {}; void end_step() {}; constexpr static bool is_reader = false; constexpr static bool is_writer = true; Loading
include/dca/io/writer.hpp +31 −23 Original line number Diff line number Diff line Loading @@ -51,6 +51,14 @@ public: constexpr static bool is_reader = false; constexpr static bool is_writer = true; void begin_step() { std::visit([&](auto& var) { var.begin_step();}, writer_); } void end_step() { std::visit([&](auto& var) { var.end_step();}, writer_); } void open_file(const std::string& file_name, bool overwrite = true) { std::visit([&](auto& var) { var.open_file(file_name, overwrite); }, writer_); } Loading @@ -69,33 +77,33 @@ public: template <class... Args> void execute(const Args&... args) { // currently only the ADIOS2Writer supports parallel writes #ifdef DCA_HAVE_ADIOS2 if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { std::visit([&](auto& var) { var.execute(args...); }, writer_); } else { #endif // #ifdef DCA_HAVE_ADIOS2 // if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { // std::visit([&](auto& var) { var.execute(args...); }, writer_); // } // else { // #endif if (concurrency_.id() == concurrency_.first()) { std::visit([&](auto& var) { var.execute(args...); }, writer_); } #ifdef DCA_HAVE_ADIOS2 } #endif // #ifdef DCA_HAVE_ADIOS2 // } // #endif } template <class... Args> void rewrite(const std::string& name, const Args&... args) { #ifdef DCA_HAVE_ADIOS2 if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { std::visit( [&](auto& var) { var.erase(name); var.execute(name, args...); }, writer_); } else { #endif // #ifdef DCA_HAVE_ADIOS2 // if constexpr (std::is_same<decltype(writer_), ADIOS2Writer<Concurrency>>::value) { // std::visit( // [&](auto& var) { // var.erase(name); // var.execute(name, args...); // }, // writer_); // } // else { // #endif if (concurrency_.id() == concurrency_.first()) { std::visit( [&](auto& var) { Loading @@ -104,9 +112,9 @@ public: }, writer_); } #ifdef DCA_HAVE_ADIOS2 } #endif // #ifdef DCA_HAVE_ADIOS2 // } // #endif } operator bool() const noexcept { Loading
include/dca/phys/dca_data/dca_data.hpp +1 −1 Original line number Diff line number Diff line Loading @@ -564,8 +564,8 @@ void DcaData<Parameters, DT>::initialize_G0() { template <class Parameters, DistType DT> void DcaData<Parameters, DT>::initializeSigma(const std::string& filename) { io::Reader reader(concurrency_, parameters_.get_output_format()); if (concurrency_.id() == concurrency_.first()) { io::Reader reader(concurrency_, parameters_.get_output_format()); reader.open_file(filename); if (parameters_.adjust_chemical_potential()) { Loading