37 throw std::invalid_argument(
"KPointDistributor: number_of_pools must be at least 1.");
40 throw std::invalid_argument(
41 "KPointDistributor: pool_index must be in [0, number_of_pools).");
47 for (
int global_index =
pool_index; global_index < total_kpoints;
49 local_kpoint_grid_.
add_kpoint(global_kpoint_grid[global_index]);
50 local_to_global_kpoint_map_.push_back(global_index);
69 return local_kpoint_grid_;
79 return local_to_global_kpoint_map_;
83 return static_cast<int>(local_to_global_kpoint_map_.size());
90 return number_of_pools_;
95 std::vector<int> local_to_global_kpoint_map_;
void set_grid_metadata(const std::array< int, 3 > &dimensions, const std::array< int, 3 > &shifts)
int number_of_kpoints() const
void add_kpoint(const KPoint &kpoint)
const std::array< int, 3 > & grid_dimensions() const
const std::array< int, 3 > & grid_shifts() const
KPointDistributor(const KPointsGrid &global_kpoint_grid, int pool_index, int number_of_pools)
const KPointsGrid & local_kpoint_grid() const
int number_of_pools() const
const std::vector< int > & local_to_global_kpoint_map() const
int number_of_local_kpoints() const