Loading include/dca/phys/dca_loop/dca_loop.hpp +12 −6 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ template <typename ParametersType, typename DcaDataType, typename MCIntegratorTy void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::readInitialStatus( const std::string& filename) { io::Buffer buffer; bool buffer_read = false; if (concurrency_.id() == concurrency_.first()) { io::HDF5Reader reader; Loading @@ -219,16 +220,21 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::readInitialStatus( reader.execute(data_.Sigma); reader.close_group(); if (parameters_.store_configuration()) { reader.open_group("Configurations"); reader.execute("sample", buffer); buffer_read = reader.execute("sample", buffer); reader.close_group(); } } concurrency_.broadcast(parameters_.get_chemical_potential()); concurrency_.broadcast(data_.Sigma); concurrency_.broadcast(buffer); concurrency_.broadcast(buffer_read); if (buffer_read) { concurrency_.broadcast(buffer); monte_carlo_integrator_.setSampleConfiguration(buffer); } perform_lattice_mapping(); } Loading Loading @@ -429,7 +435,7 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::logSelfEnergy(int i } } } // namespace dca } // namespace phys } // namespace dca #endif // DCA_PHYS_DCA_LOOP_DCA_LOOP_HPP include/dca/phys/dca_step/cluster_solver/stdthread_qmci/stdthread_qmci_cluster_solver.hpp +32 −31 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ private: void printIntegrationMetadata() const; void finalizeWalker(Walker& walker, int walker_id); private: using BaseClass::accumulator_; using BaseClass::concurrency_; Loading Loading @@ -112,6 +114,7 @@ private: std::shared_ptr<io::HDF5Writer> writer_; bool last_iteration_ = false; bool read_configuration_ = false; unsigned measurements_ = 0; }; Loading @@ -131,6 +134,7 @@ StdThreadQmciClusterSolver<QmciSolver>::StdThreadQmciClusterSolver( accumulators_queue_(), config_dump_(nr_walkers_), autocorrelation_data_(parameters_, 0), writer_(writer) { Loading @@ -139,9 +143,6 @@ StdThreadQmciClusterSolver<QmciSolver>::StdThreadQmciClusterSolver( "Both the number of walkers and the number of accumulators must be at least 1."); } if (parameters_.store_configuration()) config_dump_.resize(nr_walkers_); for (int i = 0; i < nr_walkers_; ++i) { rng_vector_.emplace_back(concurrency_.id(), concurrency_.number_of_processors(), parameters_.get_seed()); Loading @@ -156,12 +157,14 @@ StdThreadQmciClusterSolver<QmciSolver>::StdThreadQmciClusterSolver( template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::setSampleConfiguration(const io::Buffer& buff) { if (parameters_.store_configuration()) if (!parameters_.store_configuration()) return; config_dump_.resize(nr_walkers_); for (auto& x : config_dump_) x = buff; read_configuration_ = true; } template <class QmciSolver> Loading Loading @@ -228,11 +231,14 @@ void StdThreadQmciClusterSolver<QmciSolver>::integrate() { print_metadata(); if (writer_ && config_dump_.size()) { // write one sample configuration. if (parameters_.store_configuration()) { if (writer_) { // write one sample configuration. writer_->open_group("Configurations"); writer_->rewrite("sample", config_dump_[0]); writer_->close_group(); } read_configuration_ = true; } QmciSolver::accumulator_.finalize(); } Loading Loading @@ -320,18 +326,7 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalker(int id) { } } if (id == 0 && concurrency_.id() == concurrency_.first()) { std::cout << "\n\t\t QMCI ends\n" << std::endl; walker.printSummary(); } if (parameters_.store_configuration() || (parameters_.get_directory_config_write() != "" && dca_iteration_ == parameters_.get_dca_iterations() - 1)) config_dump_[walker_index] = walker.dumpConfig(); walker_fingerprints_[walker_index] = walker.deviceFingerprint(); autocorrelation_data_ += walker; finalizeWalker(walker, walker_index); Profiler::stop_threading(id); Loading @@ -345,9 +340,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::initializeAndWarmUp(Walker& walker, Profiler profiler("thermalization", "stdthread-MC-walker", __LINE__, id); // Read previous configuration. if (config_dump_[walker_id].size()) { if (read_configuration_) { walker.readConfig(config_dump_[walker_id]); config_dump_[walker_id].setg(0); // Ready to read again if it is not overwritten. } walker.initialize(dca_iteration_); Loading Loading @@ -492,14 +486,7 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { accumulator_obj.sumTo(QmciSolver::accumulator_); } if (parameters_.store_configuration() || (parameters_.get_directory_config_write() != "" && dca_iteration_ == parameters_.get_dca_iterations() - 1)) config_dump_[id] = walker.dumpConfig(); walker_fingerprints_[id] = walker.deviceFingerprint(); accum_fingerprints_[id] = accumulator_obj.deviceFingerprint(); autocorrelation_data_ += walker; finalizeWalker(walker, id); Profiler::stop_threading(id); Loading @@ -507,6 +494,18 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { throw(*current_exception); } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::finalizeWalker(Walker& walker, int walker_id) { config_dump_[walker_id] = walker.dumpConfig(); walker_fingerprints_[walker_id] = walker.deviceFingerprint(); autocorrelation_data_ += walker; if (walker_id == 0 && concurrency_.id() == concurrency_.first()) { std::cout << "\n\t\t QMCI ends\n" << std::endl; walker.printSummary(); } } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::writeConfigurations() const { if (parameters_.get_directory_config_write() == "") Loading Loading @@ -539,6 +538,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::readConfigurations() { reader.open_file(inp_name); for (int id = 0; id < config_dump_.size(); ++id) reader.execute("configuration_" + std::to_string(id), config_dump_[id]); read_configuration_ = true; } catch (std::exception& err) { std::cerr << err.what() << "\nCould not read the configuration.\n"; Loading include/dca/phys/parameters/mci_parameters.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ public: protected: // Resize vector arguments to have the same size as the number of iterations. void inline solveDcaIterationConflict(int iterations); void inline solveConfigReadConflict(bool read); private: void generateRandomSeed() { Loading Loading @@ -307,6 +308,11 @@ void MciParameters::solveDcaIterationConflict(int iterations) { solve_confilct(sweeps_per_measurement_); } void MciParameters::solveConfigReadConflict(bool read) { if(read) store_configuration_ = true; } } // namespace params } // namespace phys } // namespace dca Loading include/dca/phys/parameters/parameters.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,7 @@ void Parameters<Concurrency, Threading, Profiler, Model, RandomNumberGenerator, PhysicsParameters::readWrite(reader_or_writer); solveDcaIterationConflict(get_dca_iterations()); solveConfigReadConflict(get_directory_config_read() != ""); } template <typename Concurrency, typename Threading, typename Profiler, typename Model, Loading Loading
include/dca/phys/dca_loop/dca_loop.hpp +12 −6 Original line number Diff line number Diff line Loading @@ -202,6 +202,7 @@ template <typename ParametersType, typename DcaDataType, typename MCIntegratorTy void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::readInitialStatus( const std::string& filename) { io::Buffer buffer; bool buffer_read = false; if (concurrency_.id() == concurrency_.first()) { io::HDF5Reader reader; Loading @@ -219,16 +220,21 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::readInitialStatus( reader.execute(data_.Sigma); reader.close_group(); if (parameters_.store_configuration()) { reader.open_group("Configurations"); reader.execute("sample", buffer); buffer_read = reader.execute("sample", buffer); reader.close_group(); } } concurrency_.broadcast(parameters_.get_chemical_potential()); concurrency_.broadcast(data_.Sigma); concurrency_.broadcast(buffer); concurrency_.broadcast(buffer_read); if (buffer_read) { concurrency_.broadcast(buffer); monte_carlo_integrator_.setSampleConfiguration(buffer); } perform_lattice_mapping(); } Loading Loading @@ -429,7 +435,7 @@ void DcaLoop<ParametersType, DcaDataType, MCIntegratorType>::logSelfEnergy(int i } } } // namespace dca } // namespace phys } // namespace dca #endif // DCA_PHYS_DCA_LOOP_DCA_LOOP_HPP
include/dca/phys/dca_step/cluster_solver/stdthread_qmci/stdthread_qmci_cluster_solver.hpp +32 −31 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ private: void printIntegrationMetadata() const; void finalizeWalker(Walker& walker, int walker_id); private: using BaseClass::accumulator_; using BaseClass::concurrency_; Loading Loading @@ -112,6 +114,7 @@ private: std::shared_ptr<io::HDF5Writer> writer_; bool last_iteration_ = false; bool read_configuration_ = false; unsigned measurements_ = 0; }; Loading @@ -131,6 +134,7 @@ StdThreadQmciClusterSolver<QmciSolver>::StdThreadQmciClusterSolver( accumulators_queue_(), config_dump_(nr_walkers_), autocorrelation_data_(parameters_, 0), writer_(writer) { Loading @@ -139,9 +143,6 @@ StdThreadQmciClusterSolver<QmciSolver>::StdThreadQmciClusterSolver( "Both the number of walkers and the number of accumulators must be at least 1."); } if (parameters_.store_configuration()) config_dump_.resize(nr_walkers_); for (int i = 0; i < nr_walkers_; ++i) { rng_vector_.emplace_back(concurrency_.id(), concurrency_.number_of_processors(), parameters_.get_seed()); Loading @@ -156,12 +157,14 @@ StdThreadQmciClusterSolver<QmciSolver>::StdThreadQmciClusterSolver( template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::setSampleConfiguration(const io::Buffer& buff) { if (parameters_.store_configuration()) if (!parameters_.store_configuration()) return; config_dump_.resize(nr_walkers_); for (auto& x : config_dump_) x = buff; read_configuration_ = true; } template <class QmciSolver> Loading Loading @@ -228,11 +231,14 @@ void StdThreadQmciClusterSolver<QmciSolver>::integrate() { print_metadata(); if (writer_ && config_dump_.size()) { // write one sample configuration. if (parameters_.store_configuration()) { if (writer_) { // write one sample configuration. writer_->open_group("Configurations"); writer_->rewrite("sample", config_dump_[0]); writer_->close_group(); } read_configuration_ = true; } QmciSolver::accumulator_.finalize(); } Loading Loading @@ -320,18 +326,7 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalker(int id) { } } if (id == 0 && concurrency_.id() == concurrency_.first()) { std::cout << "\n\t\t QMCI ends\n" << std::endl; walker.printSummary(); } if (parameters_.store_configuration() || (parameters_.get_directory_config_write() != "" && dca_iteration_ == parameters_.get_dca_iterations() - 1)) config_dump_[walker_index] = walker.dumpConfig(); walker_fingerprints_[walker_index] = walker.deviceFingerprint(); autocorrelation_data_ += walker; finalizeWalker(walker, walker_index); Profiler::stop_threading(id); Loading @@ -345,9 +340,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::initializeAndWarmUp(Walker& walker, Profiler profiler("thermalization", "stdthread-MC-walker", __LINE__, id); // Read previous configuration. if (config_dump_[walker_id].size()) { if (read_configuration_) { walker.readConfig(config_dump_[walker_id]); config_dump_[walker_id].setg(0); // Ready to read again if it is not overwritten. } walker.initialize(dca_iteration_); Loading Loading @@ -492,14 +486,7 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { accumulator_obj.sumTo(QmciSolver::accumulator_); } if (parameters_.store_configuration() || (parameters_.get_directory_config_write() != "" && dca_iteration_ == parameters_.get_dca_iterations() - 1)) config_dump_[id] = walker.dumpConfig(); walker_fingerprints_[id] = walker.deviceFingerprint(); accum_fingerprints_[id] = accumulator_obj.deviceFingerprint(); autocorrelation_data_ += walker; finalizeWalker(walker, id); Profiler::stop_threading(id); Loading @@ -507,6 +494,18 @@ void StdThreadQmciClusterSolver<QmciSolver>::startWalkerAndAccumulator(int id) { throw(*current_exception); } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::finalizeWalker(Walker& walker, int walker_id) { config_dump_[walker_id] = walker.dumpConfig(); walker_fingerprints_[walker_id] = walker.deviceFingerprint(); autocorrelation_data_ += walker; if (walker_id == 0 && concurrency_.id() == concurrency_.first()) { std::cout << "\n\t\t QMCI ends\n" << std::endl; walker.printSummary(); } } template <class QmciSolver> void StdThreadQmciClusterSolver<QmciSolver>::writeConfigurations() const { if (parameters_.get_directory_config_write() == "") Loading Loading @@ -539,6 +538,8 @@ void StdThreadQmciClusterSolver<QmciSolver>::readConfigurations() { reader.open_file(inp_name); for (int id = 0; id < config_dump_.size(); ++id) reader.execute("configuration_" + std::to_string(id), config_dump_[id]); read_configuration_ = true; } catch (std::exception& err) { std::cerr << err.what() << "\nCould not read the configuration.\n"; Loading
include/dca/phys/parameters/mci_parameters.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ public: protected: // Resize vector arguments to have the same size as the number of iterations. void inline solveDcaIterationConflict(int iterations); void inline solveConfigReadConflict(bool read); private: void generateRandomSeed() { Loading Loading @@ -307,6 +308,11 @@ void MciParameters::solveDcaIterationConflict(int iterations) { solve_confilct(sweeps_per_measurement_); } void MciParameters::solveConfigReadConflict(bool read) { if(read) store_configuration_ = true; } } // namespace params } // namespace phys } // namespace dca Loading
include/dca/phys/parameters/parameters.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -393,6 +393,7 @@ void Parameters<Concurrency, Threading, Profiler, Model, RandomNumberGenerator, PhysicsParameters::readWrite(reader_or_writer); solveDcaIterationConflict(get_dca_iterations()); solveConfigReadConflict(get_directory_config_read() != ""); } template <typename Concurrency, typename Threading, typename Profiler, typename Model, Loading