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
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)
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)
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
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)
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)
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)
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)
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)
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
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, )
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