def _parser_function(self):
        """
        Parses the vasprun.xml using the Pymatgen Vasprun function.
        """

        vasp_param = {}  # ParameterData

        parser_warnings = {}  # return non-critical errors

        vspr = vasp.Vasprun(self._out_folder.get_abs_path('vasprun.xml'),
                            exception_on_bad_xml=False)
        # vasp_param['final_energy'] = vspr.final_energy  # This includes PV
        vasp_param['energy'] = vspr.ionic_steps[-1]['electronic_steps'][-1][
            'e_wo_entrp']  # Pure internal energy (U) as appear in OUTCAR

        # construct proper output format
        try:
            nodes_list = []
            parameter_data = ParameterData(dict=vasp_param)
            nodes_list.append(('output_parameters', parameter_data))
        except Exception, e:
            msg = ("Failed to create AiiDA data structures "
                   "(ParameterData/ArrrayData) from parsed data, "
                   "with error message:\n>> {}".format(e))
            raise OutputParsingError(msg)
    def _parser_function(self):
        """
        Parses the vasprun.xml using the Pymatgen Vasprun function.
        """

        vasp_param = {}  # ParameterData
        vasp_array = {}  # ArrayData

        parser_warnings = {}  # return non-critical errors

        # parameter data keys
        _vasprun_keys = [  # directly accessible, by name
            # logical
            'converged',
            'converged_electronic',
            'converged_ionic',
            'dos_has_errors',
            'is_spin',
            'is_hubbard',
            # value
            'efermi'
        ]
        _vasprun_special_keys = [  # can't be accessed directly
            # logical
            'is_band_gap_direct',
            # value
            'no_ionic_steps',
            'final_energy',  # returned as FloatWithUnit
            'energy_units',
            'free_energy',
            'energy_wo_entropy',
            'energy_T0',
            'entropy_TS',
            'no_electronic_steps',
            'total_no_electronic_steps',
            'band_gap',
            'cbm',
            'vbm',
        ]

        # array data keys
        # TODO
        # list --> array; see what exactly ArrayData supports

        # parsing output files
        try:
            vspr = vasp.Vasprun(self._out_folder.get_abs_path('vasprun.xml'))
        except Exception, e:
            msg = ("Parsing vasprun file in pymatgen failed, "
                   "with error message:\n>> {}".format(e))
            raise OutputParsingError(msg)
    def _parser_function(self):
        """
        Parses the vasprun.xml using the Pymatgen Vasprun function.
        """
        vasp_param = {}  # ParameterData

        parser_warnings = {}  # return non-critical errors

        # extract data
        try:
            with open(self._out_folder.get_abs_path('OUTCAR'), 'r') as f:
                text = f.readlines()
        except:
            print('Error opening')

        try:
            vspr = vasp.Vasprun(self._out_folder.get_abs_path('vasprun.xml'))
            vasp_param['energy'] = vspr.final_energy
#            vasp_param['volume'] = vspr.final_structure.lattice.volume  #Not here!, not necessary

        except Exception, e:
            msg = ("Parsing vasprun file in pymatgen failed, "
                   "with error message:\n>> {}".format(e))
            raise OutputParsingError(msg)
    def __init__(self,
                 calcdir,
                 verbose=True,
                 read_bands=True,
                 save_pcalc=False):
        """ Note that for memory reasons we do not store pcalc or procar as instance variables.
        """
        self.calcdir = calcdir
        self.calc = ase.io.read(join(calcdir, 'CONTCAR'))
        if verbose: sys.stdout.write('Reading vasprun.xml and bands... ')
        pcalc = pyvasp.Vasprun(join(calcdir, 'vasprun.xml'))
        if save_pcalc: self.pcalc = pcalc
        self.band_gap, self.vbm, self.cbm, self.is_direct = pcalc.eigenvalue_band_properties
        if read_bands:
            self.bands = pcalc.get_band_structure(join(calcdir, 'KPOINTS'),
                                                  line_mode=True)
            self.nkpts = len(self.bands.kpoints)
            self.nbands = self.bands.nb_bands

            if verbose: sys.stdout.write('Reading procar... ')
            procar = pyvasp.Procar(join(calcdir, 'PROCAR'))  # projected bands
            self.bigprocar = self._get_pandas_from_procar(procar)

        if verbose: sys.stdout.write('Converting to Pandas... ')
        self.bigdos = self._get_bigdos_from_pcalc(pcalc)
        self.totdos = self.get_dos_contrib()  # Get the total dos

        #Other useful information
        self.natoms = self.calc.get_number_of_atoms()
        self.unscaled_energies = pcalc.tdos.energies
        self.scaled_energies = pcalc.tdos.energies - pcalc.efermi
        self.emin = self.scaled_energies[0]
        self.emax = self.scaled_energies[-1]
        self.efermi = pcalc.complete_dos.efermi
        self.energy = pcalc.final_energy
        if verbose: sys.stdout.write('DONE! :)')
Beispiel #5
0
    get various data from vasprun.xml

        Parameters
        ----------
        vasprun : pymatgen.io.vasp.Vasprun class object
    """
    summary = {}
    summary['final_energy'] = float(vasprun['output']['final_energy'])
    summary['final_energy_per_atom'] = float(
        vasprun['output']['final_energy_per_atom'])
    summary['volume'] = vasprun['output']['crystal']['lattice']['volume']
    kpt = vasprun['input']['kpoints']['kpoints'][0]
    summary['total_kpoints'] = kpt[0] * kpt[1] * kpt[2]
    summary['kpoints'] = [kpt[0], kpt[1], kpt[2]]
    summary['nkpoints'] = vasprun['input']['nkpoints']
    summary['encut'] = vasprun['input']['parameters']['ENCUT']
    summary['correlation_function'] = vasprun['run_type']

    ion_steps = []


### vasprun.xml
vasprun_files = args.vasprun_file.split()
vaspruns = []
for vasprun_file in vasprun_files:
    check_file_exist(vasprun_file)
    vasprun = pmg_vasp.Vasprun(vasprun_file)
    vaspruns.append(vasprun)

_check_single_vasprun_file(vasprun_files)
Beispiel #6
0
#!/usr/bin/env python3

from pymatgen.io import vasp
import numpy as np
from pymatgen.analysis.structure_analyzer import SpacegroupAnalyzer
import pymatgen

run = vasp.Vasprun('vasprun.xml')
outcar = vasp.Outcar('OUTCAR')
st = run.final_structure
symbols = np.array([x.value for x in st.species])
sa = SpacegroupAnalyzer(st)
print('**************')
print("conventional cell")
print(sa.get_conventional_standard_structure())
print(sa.get_conventional_standard_structure().volume)
print(sa.get_space_group_symbol(), sa.get_space_group_number())
print("******************")
print("Final structure")
print(run.final_structure)
print("vol={}".format(run.final_structure.volume))
print("******************")
print("Bandgap information")
print(run.get_band_structure().get_band_gap())
print("******************")
print("Magnetzation per site")
for ielement in range(len(symbols)):
    print("{}-{} {}".format(symbols[ielement], ielement,
                            outcar.magnetization[ielement]['tot']))
print("******************")
print("Magnetzation per species")
Beispiel #7
0
 def __init__(self, filename, vasprun='vasprun.xml', fermi=0):
     self.readfile(filename)
     self.fermi=fermi
     self.vasprun = vasp.Vasprun(vasprun)