def _get_symmetry_yaml(cell, symmetry, phonopy_version=None): rotations = symmetry.get_symmetry_operations()['rotations'] translations = symmetry.get_symmetry_operations()['translations'] atom_sets = symmetry.get_map_atoms() independent_atoms = symmetry.get_independent_atoms() wyckoffs = symmetry.get_Wyckoff_letters() yaml = [] if phonopy_version is not None: yaml.append("phonopy_version: '%s'" % phonopy_version) if cell.get_magnetic_moments() is None: spg_symbol, spg_number = symmetry.get_international_table().split() spg_number = int(spg_number.replace('(', '').replace(')', '')) yaml.append("space_group_type: '%s'" % spg_symbol) yaml.append("space_group_number: %d" % spg_number) yaml.append("point_group_type: '%s'" % symmetry.get_pointgroup()) yaml.append("space_group_operations:") for i, (r, t) in enumerate(zip(rotations, translations)): yaml.append("- rotation: # %d" % (i + 1)) for vec in r: yaml.append(" - [%2d, %2d ,%2d]" % tuple(vec)) line = " translation: [" for j, x in enumerate(t): if abs(x - np.rint(x)) < 1e-5: line += " 0.00000" else: line += "%8.5f" % x if j < 2: line += ", " else: line += " ]" yaml.append(line) yaml.append("atom_mapping:") for i, atom_num in enumerate(atom_sets): yaml.append(" %d: %d" % (i + 1, atom_num + 1)) yaml.append("site_symmetries:") for i in independent_atoms: sitesym = symmetry.get_site_symmetry(i) yaml.append("- atom: %d" % (i + 1)) if cell.get_magnetic_moments() is None: yaml.append(" Wyckoff: '%s'" % wyckoffs[i]) site_pointgroup = get_pointgroup(sitesym) yaml.append(" site_point_group: '%s'" % site_pointgroup[0]) yaml.append(" orientation:") for v in site_pointgroup[1]: yaml.append(" - [%2d, %2d, %2d]" % tuple(v)) yaml.append(" rotations:") for j, r in enumerate(sitesym): yaml.append(" - # %d" % (j + 1)) for vec in r: yaml.append(" - [%2d, %2d, %2d]" % tuple(vec)) return "\n".join(yaml)
def _get_symmetry_yaml(cell, symmetry, phonopy_version=None): rotations = symmetry.get_symmetry_operations()['rotations'] translations = symmetry.get_symmetry_operations()['translations'] atom_sets = symmetry.get_map_atoms() independent_atoms = symmetry.get_independent_atoms() wyckoffs = symmetry.get_Wyckoff_letters() lines = [] if phonopy_version is not None: lines.append("phonopy_version: '%s'" % phonopy_version) if cell.get_magnetic_moments() is None: spg_symbol, spg_number = symmetry.get_international_table().split() spg_number = int(spg_number.replace('(', '').replace(')', '')) lines.append("space_group_type: '%s'" % spg_symbol) lines.append("space_group_number: %d" % spg_number) lines.append("point_group_type: '%s'" % symmetry.get_pointgroup()) lines.append("space_group_operations:") for i, (r, t) in enumerate(zip(rotations, translations)): lines.append("- rotation: # %d" % (i + 1)) for vec in r: lines.append(" - [%2d, %2d ,%2d]" % tuple(vec)) line = " translation: [" for j, x in enumerate(t): if abs(x - np.rint(x)) < 1e-5: line += " 0.00000" else: line += "%8.5f" % x if j < 2: line += ", " else: line += " ]" lines.append(line) lines.append("atom_mapping:") for i, atom_num in enumerate(atom_sets): lines.append(" %d: %d" % (i + 1, atom_num + 1)) lines.append("site_symmetries:") for i in independent_atoms: sitesym = symmetry.get_site_symmetry(i) lines.append("- atom: %d" % (i + 1)) if cell.get_magnetic_moments() is None: lines.append(" Wyckoff: '%s'" % wyckoffs[i]) site_pointgroup = get_pointgroup(sitesym) lines.append(" site_point_group: '%s'" % site_pointgroup[0]) lines.append(" orientation:") for v in site_pointgroup[1]: lines.append(" - [%2d, %2d, %2d]" % tuple(v)) lines.append(" rotations:") for j, r in enumerate(sitesym): lines.append(" - # %d" % (j + 1)) for vec in r: lines.append(" - [%2d, %2d, %2d]" % tuple(vec)) return "\n".join(lines)
def get_symmetry_yaml(cell, symmetry, phonopy_version=None): rotations = symmetry.get_symmetry_operations()['rotations'] translations = symmetry.get_symmetry_operations()['translations'] atom_sets = symmetry.get_map_atoms() independent_atoms = symmetry.get_independent_atoms() wyckoffs = symmetry.get_Wyckoff_letters() yaml = "" if phonopy_version is not None: yaml += "phonopy_version: %s\n" % phonopy_version if cell.get_magnetic_moments() is None: yaml += "space_group_type: " + symmetry.get_international_table( ) + "\n" yaml += "point_group_type: " + symmetry.get_pointgroup() + "\n" yaml += "space_group_operations:\n" for i, (r, t) in enumerate(zip(rotations, translations)): yaml += "- rotation: # %d\n" % (i + 1) for vec in r: yaml += " - [%2d, %2d ,%2d]\n" % tuple(vec) yaml += " translation: [" for j, x in enumerate(t): if abs(x - np.rint(x)) < 1e-5: yaml += " 0.00000" else: yaml += "%8.5f" % x if j < 2: yaml += ", " else: yaml += "]\n" yaml += "atom_mapping:\n" for i, atom_num in enumerate(atom_sets): yaml += " %d: %d\n" % (i + 1, atom_num + 1) yaml += "site_symmetries:\n" for i in independent_atoms: sitesym = symmetry.get_site_symmetry(i) yaml += "- atom: %d\n" % (i + 1) if cell.get_magnetic_moments() is None: yaml += " Wyckoff: %s\n" % (wyckoffs[i]) site_pointgroup = get_pointgroup(sitesym) yaml += " site_point_group: %s\n" % (site_pointgroup[0]) yaml += " orientation:\n" for v in site_pointgroup[1]: yaml += " - [%2d, %2d, %2d]\n" % tuple(v) yaml += " rotations:\n" for j, r in enumerate(sitesym): yaml += " - # %d\n" % (j + 1) for vec in r: yaml += " - [%2d, %2d, %2d]\n" % tuple(vec) return yaml
def get_symmetry_yaml(cell, symmetry, phonopy_version=None): rotations = symmetry.get_symmetry_operations()['rotations'] translations = symmetry.get_symmetry_operations()['translations'] atom_sets = symmetry.get_map_atoms() independent_atoms = symmetry.get_independent_atoms() wyckoffs = symmetry.get_Wyckoff_letters() yaml = "" if phonopy_version is not None: yaml += "phonopy_version: %s\n" % phonopy_version if cell.get_magnetic_moments() is None: yaml += "space_group_type: " + symmetry.get_international_table() + "\n" yaml += "point_group_type: " + symmetry.get_pointgroup() + "\n" yaml += "space_group_operations:\n" for i, (r, t) in enumerate(zip(rotations, translations)): yaml += "- rotation: # %d\n" % (i+1) for vec in r: yaml += " - [%2d, %2d ,%2d]\n" % tuple(vec) yaml += " translation: [" for j, x in enumerate(t): if abs(x - np.rint(x)) < 1e-5: yaml += " 0.00000" else: yaml += "%8.5f" % x if j < 2: yaml += ", " else: yaml += "]\n" yaml += "atom_mapping:\n" for i, atom_num in enumerate(atom_sets): yaml += " %d: %d\n" % (i+1, atom_num+1) yaml += "site_symmetries:\n" for i in independent_atoms: sitesym = symmetry.get_site_symmetry(i) yaml += "- atom: %d\n" % (i+1) if cell.get_magnetic_moments() is None: yaml += " Wyckoff: %s\n" % (wyckoffs[i]) site_pointgroup = get_pointgroup(sitesym) yaml += " site_point_group: %s\n" % (site_pointgroup[0]) yaml += " orientation:\n" for v in site_pointgroup[1]: yaml += " - [%2d, %2d, %2d]\n" % tuple(v) yaml += " rotations:\n" for j, r in enumerate(sitesym): yaml += " - # %d\n" % (j+1) for vec in r: yaml += " - [%2d, %2d, %2d]\n" % tuple(vec) return yaml
def _get_conventional_rotations(self): spacegroup_symbol = self._symmetry_dataset['international'][0] spacegroup_number = self._symmetry_dataset['number'] rotations = self._rotations_at_q.copy() pointgroup = get_pointgroup(rotations) pointgroup_symbol = pointgroup[0] transformation_matrix = pointgroup[1] conventional_rotations = self._transform_rotations( transformation_matrix, rotations) return (pointgroup_symbol, transformation_matrix, conventional_rotations)
def _create_conventional_rotations(self): rotations = self._rotations pointgroup = get_pointgroup(rotations) pointgroup_symbol = pointgroup[0] transformation_matrix = pointgroup[1] conventional_rotations = self._transform_rotations( transformation_matrix, rotations) self._conventional_rotations = conventional_rotations self._transformation_matrix = transformation_matrix self._pointgroup_symbol = pointgroup_symbol
def _get_conventional_rotations(self): spacegroup_symbol = self._symmetry_dataset['international'][0] rotations = self._rotations_at_q.copy() pointgroup = get_pointgroup(rotations) pointgroup_symbol = pointgroup[0] transformation_matrix = pointgroup[1] # Set transfomration matrix pR --> hR if spacegroup_symbol == 'R': transformation_matrix = np.dot(transformation_matrix, r2h) # Rotation matrices for the conventional lattice vectors conventional_rotations = self._transform_rotations( transformation_matrix, rotations) return (pointgroup_symbol, transformation_matrix, conventional_rotations)