/* Each value of 'map' correspnds to the index of grid_point. */ int kpt_get_irreducible_reciprocal_mesh(int grid_points[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, const Symmetry * symmetry) { int i; PointSymmetry point_symmetry; MatINT *rotations; rotations = mat_alloc_MatINT(symmetry->size); for (i = 0; i < symmetry->size; i++) { mat_copy_matrix_i3(rotations->mat[i], symmetry->rot[i]); } point_symmetry = get_point_group_reciprocal(rotations, is_time_reversal); mat_free_MatINT(rotations); #ifdef _OPENMP return get_ir_reciprocal_mesh_openmp(grid_points, map, mesh, is_shift, &point_symmetry); #else return get_ir_reciprocal_mesh(grid_points, map, mesh, is_shift, &point_symmetry); #endif }
int kpt_get_stabilized_reciprocal_mesh(int grid_address[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, const MatINT * rotations, const int num_q, SPGCONST double qpoints[][3]) { int num_ir; MatINT *rot_reciprocal, *rot_reciprocal_q; double tolerance; rot_reciprocal = NULL; rot_reciprocal_q = NULL; rot_reciprocal = get_point_group_reciprocal(rotations, is_time_reversal); tolerance = 0.01 / (mesh[0] + mesh[1] + mesh[2]); rot_reciprocal_q = get_point_group_reciprocal_with_q(rot_reciprocal, tolerance, num_q, qpoints); num_ir = get_ir_reciprocal_mesh(grid_address, map, mesh, is_shift, rot_reciprocal_q); mat_free_MatINT(rot_reciprocal_q); rot_reciprocal_q = NULL; mat_free_MatINT(rot_reciprocal); rot_reciprocal = NULL; return num_ir; }
/* Each value of 'map' correspnds to the index of grid_point. */ int kpt_get_irreducible_reciprocal_mesh(int grid_address[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, const MatINT *rotations) { int num_ir; MatINT *rot_reciprocal; rot_reciprocal = get_point_group_reciprocal(rotations, is_time_reversal); #ifdef _OPENMP num_ir = get_ir_reciprocal_mesh_openmp(grid_address, map, mesh, is_shift, rot_reciprocal); #else num_ir = get_ir_reciprocal_mesh(grid_address, map, mesh, is_shift, rot_reciprocal); #endif mat_free_MatINT(rot_reciprocal); return num_ir; }
int kpt_get_ir_triplets_at_q(int weights[], int grid_points[][3], int third_q[], const int grid_point, const int mesh[3], const int is_time_reversal, const MatINT * rotations) { PointSymmetry pointgroup; pointgroup = get_point_group_reciprocal(rotations, is_time_reversal); return get_ir_triplets_at_q(weights, grid_points, third_q, grid_point, mesh, &pointgroup); }
int kpt_get_ir_triplets_at_q(int map_triplets[], int map_q[], int grid_address[][3], const int grid_point, const int mesh[3], const int is_time_reversal, const MatINT * rotations) { int num_ir; MatINT *rot_reciprocal; rot_reciprocal = get_point_group_reciprocal(rotations, is_time_reversal); num_ir = get_ir_triplets_at_q(map_triplets, map_q, grid_address, grid_point, mesh, rot_reciprocal); mat_free_MatINT(rot_reciprocal); return num_ir; }
int kpt_get_irreducible_kpoints(int map[], SPGCONST double kpoints[][3], const int num_kpoint, const Symmetry * symmetry, const int is_time_reversal, const double symprec) { int i; PointSymmetry point_symmetry; MatINT *rotations; rotations = mat_alloc_MatINT(symmetry->size); for (i = 0; i < symmetry->size; i++) { mat_copy_matrix_i3(rotations->mat[i], symmetry->rot[i]); } point_symmetry = get_point_group_reciprocal(rotations, is_time_reversal); mat_free_MatINT(rotations); return get_ir_kpoints(map, kpoints, num_kpoint, &point_symmetry, symprec); }
int kpt_get_stabilized_reciprocal_mesh(int grid_points[][3], int map[], const int mesh[3], const int is_shift[3], const int is_time_reversal, const MatINT * rotations, const int num_q, SPGCONST double qpoints[][3]) { PointSymmetry pointgroup, pointgroup_q; double tolerance; pointgroup = get_point_group_reciprocal(rotations, is_time_reversal); tolerance = 0.1 / (mesh[0] + mesh[1] + mesh[2]); pointgroup_q = get_point_group_reciprocal_with_q(&pointgroup, tolerance, num_q, qpoints); #ifdef _OPENMP return get_ir_reciprocal_mesh_openmp(grid_points, map, mesh, is_shift, &pointgroup_q); #else return get_ir_reciprocal_mesh(grid_points, map, mesh, is_shift, &pointgroup_q); #endif }
MatINT *kpt_get_point_group_reciprocal(const MatINT * rotations, const int is_time_reversal) { return get_point_group_reciprocal(rotations, is_time_reversal); }