示例#1
0
def get_BORN_lines(unitcell,
                   borns,
                   epsilon,
                   factor=None,
                   primitive_matrix=None,
                   supercell_matrix=None,
                   symprec=1e-5):
    borns, epsilon, atom_indices = elaborate_borns_and_epsilon(
        unitcell,
        borns,
        epsilon,
        symmetrize_tensors=True,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        symprec=symprec)

    text = "# epsilon and Z* of atoms "
    text += ' '.join(["%d" % n for n in atom_indices + 1])
    lines = [
        text,
    ]
    lines.append(("%13.8f " * 9) % tuple(epsilon.flatten()))
    for z in borns:
        lines.append(("%13.8f " * 9) % tuple(z.flatten()))
    return lines
示例#2
0
def get_born_OUTCAR(poscar_filename="POSCAR",
                    outcar_filename=None,
                    primitive_matrix=None,
                    supercell_matrix=None,
                    is_symmetry=True,
                    symmetrize_tensors=False,
                    symprec=1e-5):
    if outcar_filename is None:
        filename = "OUTCAR"
    else:
        filename = outcar_filename

    ucell = read_vasp(poscar_filename)
    borns, epsilon = _read_born_and_epsilon_from_OUTCAR(filename)
    if len(borns) == 0 or len(epsilon) == 0:
        return None
    else:
        return elaborate_borns_and_epsilon(
            ucell,
            borns,
            epsilon,
            primitive_matrix=primitive_matrix,
            supercell_matrix=supercell_matrix,
            is_symmetry=is_symmetry,
            symmetrize_tensors=symmetrize_tensors,
            symprec=symprec)
示例#3
0
文件: vasp.py 项目: rehnd/phonopy
def get_born_vasprunxml(filename="vasprun.xml",
                        primitive_matrix=None,
                        supercell_matrix=None,
                        is_symmetry=True,
                        symmetrize_tensors=False,
                        symprec=1e-5):
    import io
    borns = []
    epsilon = []
    with io.open(filename, "rb") as f:
        vasprun = VasprunxmlExpat(f)
        if vasprun.parse():
            epsilon = vasprun.get_epsilon()
            borns = vasprun.get_born()
            lattice = vasprun.get_lattice()[-1]
            points = vasprun.get_points()[-1]
            symbols = vasprun.get_symbols()
            ucell = Atoms(symbols=symbols,
                          scaled_positions=points,
                          cell=lattice)
        else:
            return None

    return elaborate_borns_and_epsilon(ucell,
                                       borns,
                                       epsilon,
                                       primitive_matrix=primitive_matrix,
                                       supercell_matrix=supercell_matrix,
                                       is_symmetry=is_symmetry,
                                       symmetrize_tensors=symmetrize_tensors,
                                       symprec=symprec)
示例#4
0
def get_BORN_lines(unitcell,
                   borns,
                   epsilon,
                   factor=None,
                   primitive_matrix=None,
                   supercell_matrix=None,
                   symprec=1e-5,
                   symmetrize_tensors=False):
    """
    Helper function imported from phonopy.file_IO that exposes the
    option of not symmetrizing the tensor.
    """
    from phonopy.structure.symmetry import elaborate_borns_and_epsilon
    borns, epsilon, atom_indices = elaborate_borns_and_epsilon(
        unitcell,
        borns,
        epsilon,
        symmetrize_tensors=symmetrize_tensors,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        symprec=symprec)

    text = "# epsilon and Z* of atoms "
    text += ' '.join(["%d" % n for n in atom_indices + 1])
    lines = [
        text,
    ]
    lines.append(("%13.8f " * 9) % tuple(epsilon.flatten()))
    for z in borns:
        lines.append(("%13.8f " * 9) % tuple(z.flatten()))
    return lines
示例#5
0
文件: vasp.py 项目: gcgs1/phonopy
def get_born_OUTCAR(poscar_filename="POSCAR",
                    outcar_filename=None,
                    primitive_matrix=None,
                    supercell_matrix=None,
                    is_symmetry=True,
                    symmetrize_tensors=False,
                    symprec=1e-5):
    if outcar_filename is None:
        filename = "OUTCAR"
    else:
        filename = outcar_filename

    ucell = read_vasp(poscar_filename)
    borns, epsilon = _read_born_and_epsilon_from_OUTCAR(filename)
    if len(borns) == 0 or len(epsilon) == 0:
        return None
    else:
        return elaborate_borns_and_epsilon(
            ucell,
            borns,
            epsilon,
            primitive_matrix=primitive_matrix,
            supercell_matrix=supercell_matrix,
            is_symmetry=is_symmetry,
            symmetrize_tensors=symmetrize_tensors,
            symprec=symprec)
示例#6
0
文件: vasp.py 项目: oyster14/phonopy
def get_born_vasprunxml(filename="vasprun.xml",
                        primitive_matrix=None,
                        supercell_matrix=None,
                        is_symmetry=True,
                        symmetrize_tensors=False,
                        symprec=1e-5):
    with io.open(filename, "rb") as f:
        vasprun = VasprunxmlExpat(f)
        try:
            vasprun.parse()
        except xml.parsers.expat.ExpatError:
            raise xml.parsers.expat.ExpatError(
                "Could not parse \"%s\". Please check the content." % filename)
        except ValueError:
            raise ValueError(
                "Could not parse \"%s\". Please check the content." % filename)

    return elaborate_borns_and_epsilon(vasprun.cell,
                                       vasprun.born,
                                       vasprun.epsilon,
                                       primitive_matrix=primitive_matrix,
                                       supercell_matrix=supercell_matrix,
                                       is_symmetry=is_symmetry,
                                       symmetrize_tensors=symmetrize_tensors,
                                       symprec=symprec)
示例#7
0
文件: vasp.py 项目: gcgs1/phonopy
def get_born_vasprunxml(filename="vasprun.xml",
                        primitive_matrix=None,
                        supercell_matrix=None,
                        is_symmetry=True,
                        symmetrize_tensors=False,
                        symprec=1e-5):
    import io
    borns = []
    epsilon = []
    with io.open(filename, "rb") as f:
        vasprun = VasprunxmlExpat(f)
        if vasprun.parse():
            epsilon = vasprun.get_epsilon()
            borns = vasprun.get_born()
            lattice = vasprun.get_lattice()[-1]
            points = vasprun.get_points()[-1]
            symbols = vasprun.get_symbols()
            ucell = Atoms(symbols=symbols,
                          scaled_positions=points,
                          cell=lattice)
        else:
            return None

    return elaborate_borns_and_epsilon(
        ucell,
        borns,
        epsilon,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        is_symmetry=is_symmetry,
        symmetrize_tensors=symmetrize_tensors,
        symprec=symprec)
示例#8
0
def get_born_vasprunxml(filename="vasprun.xml",
                        primitive_matrix=None,
                        supercell_matrix=None,
                        is_symmetry=True,
                        symmetrize_tensors=False,
                        symprec=1e-5):
    import io
    with io.open(filename, "rb") as f:
        vasprun = VasprunxmlExpat(f)
        if vasprun.parse():
            epsilon = vasprun.epsilon
            borns = vasprun.born
            ucell = vasprun.cell
        else:
            return None

    return elaborate_borns_and_epsilon(
        ucell,
        borns,
        epsilon,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        is_symmetry=is_symmetry,
        symmetrize_tensors=symmetrize_tensors,
        symprec=symprec)
示例#9
0
文件: vasp.py 项目: atztogo/phonopy
def get_born_vasprunxml(filename="vasprun.xml",
                        primitive_matrix=None,
                        supercell_matrix=None,
                        is_symmetry=True,
                        symmetrize_tensors=False,
                        symprec=1e-5):
    import io
    with io.open(filename, "rb") as f:
        vasprun = VasprunxmlExpat(f)
        if vasprun.parse():
            epsilon = vasprun.epsilon
            borns = vasprun.born
            ucell = vasprun.cell
        else:
            return None

    return elaborate_borns_and_epsilon(
        ucell,
        borns,
        epsilon,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        is_symmetry=is_symmetry,
        symmetrize_tensors=symmetrize_tensors,
        symprec=symprec)
示例#10
0
def get_BORN_lines(unitcell, borns, epsilon,
                   factor=None,
                   primitive_matrix=None,
                   supercell_matrix=None,
                   symprec=1e-5):
    from phonopy.structure.symmetry import elaborate_borns_and_epsilon
    borns, epsilon, atom_indices = elaborate_borns_and_epsilon(
        unitcell, borns, epsilon, symmetrize_tensors=True,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        symprec=symprec)

    text = "# epsilon and Z* of atoms "
    text += ' '.join(["%d" % n for n in atom_indices + 1])
    lines = [text, ]
    lines.append(("%13.8f " * 9) % tuple(epsilon.flatten()))
    for z in borns:
        lines.append(("%13.8f " * 9) % tuple(z.flatten()))
    return lines
示例#11
0
文件: vasp.py 项目: ladyteam/phonopy
def get_born_vasprunxml(
    filename="vasprun.xml",
    primitive_matrix=None,
    supercell_matrix=None,
    is_symmetry=True,
    symmetrize_tensors=False,
    symprec=1e-5,
):
    """Parse vasprun.xml to get NAC parameters.

    In phonopy, primitive cell is created through the path of
    unit cell -> supercell -> primitive cell. To trace this path exactly,
    `primitive_matrix` and `supercell_matrix` can be given, but these are
    optional.

    Returns
    -------
    See elaborate_borns_and_epsilon.

    """
    with open(filename, "rb") as f:
        vasprun = VasprunxmlExpat(f)
        try:
            vasprun.parse()
        except xml.parsers.expat.ExpatError:
            raise xml.parsers.expat.ExpatError(
                'Could not parse "%s". Please check the content.' % filename)
        except ValueError:
            raise ValueError(
                'Could not parse "%s". Please check the content.' % filename)

    return elaborate_borns_and_epsilon(
        vasprun.cell,
        vasprun.born,
        vasprun.epsilon,
        primitive_matrix=primitive_matrix,
        supercell_matrix=supercell_matrix,
        is_symmetry=is_symmetry,
        symmetrize_tensors=symmetrize_tensors,
        symprec=symprec,
    )
示例#12
0
def get_BORN_txt(nac_data, symprec=1.e-5, parameters=None, structure=None):
    from phonopy.structure.atoms import PhonopyAtoms
    try:
        from phonopy.structure.symmetry import elaborate_borns_and_epsilon
    except ImportError:
        # Old version of phonopy
        from phonopy.interface.vasp import _get_indep_borns as elaborate_borns_and_epsilon

    born_charges = nac_data.get_array('born_charges')
    epsilon = nac_data.get_array('epsilon')
    structure_born = nac_data.get_structure()

    ucell = PhonopyAtoms(
        symbols=[site.kind_name for site in structure_born.sites],
        positions=[site.position for site in structure_born.sites],
        cell=structure_born.cell)

    reduced_borns, epsilon, atom_indices = elaborate_borns_and_epsilon(
        ucell,
        born_charges,
        epsilon,
        primitive_matrix=None,
        supercell_matrix=None,
        is_symmetry=True,
        symmetrize_tensors=False,
        symprec=1.e-5)

    born_txt = "# epsilon and Z* of atoms "
    born_txt += ' '.join(["%d" % n for n in atom_indices + 1]) + '\n'
    for num in epsilon.flatten():
        born_txt += ('{0:4.8f} '.format(num))
    born_txt += ('\n')

    for atom in reduced_borns:
        for num in atom.flatten():
            born_txt += ('{0:4.8f} '.format(num))
        born_txt += ('\n')

    return born_txt