Example #1
0
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)
Example #2
0
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)
Example #3
0
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
Example #4
0
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
Example #5
0
    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)
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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)
Example #9
0
    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)