37 moments.size() != input.
atoms.size())
39 std::vector<int> classes(input.
atoms.size(), -1);
40 std::vector<std::pair<int, Real>> class_keys;
41 bool splits_a_species =
false;
42 for (
size_t atom = 0; atom < input.
atoms.size(); ++atom) {
43 int species = input.
atoms[atom].species_index;
45 for (
size_t key = 0; key < class_keys.size(); ++key) {
46 if (class_keys[key].first != species)
48 if (class_keys[key].second == moments[atom]) {
49 found =
static_cast<int>(key);
52 splits_a_species =
true;
55 found =
static_cast<int>(class_keys.size());
56 class_keys.emplace_back(species, moments[atom]);
58 classes[atom] = found;
60 return splits_a_species ? classes : std::vector<int>{};
72 const std::vector<AtomSpecies>& species) {
105 for (
const auto& [coordinates, weight] : input.
kpoints_list) {
146 return global_kpoint_grid;
static Crystal from_lattice_vectors(Real lattice_parameter, const Matrix3x3 &lattice_vectors, const std::vector< AtomSpecies > &species, const std::vector< Atom > &atoms)
static Crystal from_input_data(int bravais_lattice_index, Real cell_dimension_1, const std::vector< AtomSpecies > &species, const std::vector< Atom > &atoms, Real cell_dimension_2=0, Real cell_dimension_3=0, Real cell_dimension_4=0, Real cell_dimension_5=0, Real cell_dimension_6=0)
void set_site_symmetry_classes(const std::vector< int > &classes)
void scale_weights(Real factor)
void add_kpoint(const KPoint &kpoint)
void generate(int grid_dimension_x, int grid_dimension_y, int grid_dimension_z, int shift_x, int shift_y, int shift_z)
static KPointsGrid reduce_kpoints_internal(const Crystal &crystal, const KPointsGrid &input_grid, bool use_time_reversal=true, Real symmetry_precision=math::tolerances::default_symmetry_precision)
static KPointsGrid reduce_kpoints(const Crystal &crystal, const KPointsGrid &input_grid, Real symmetry_precision=math::tolerances::default_symmetry_precision)
Crystal build_crystal_from_input(const InputData &input, const std::vector< AtomSpecies > &species)
std::vector< int > site_symmetry_classes_from_input(const InputData &input)
KPointsGrid build_global_kpoint_grid_from_input(const InputData &input, const Crystal &crystal)