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! :)')
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)
#!/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")
def __init__(self, filename, vasprun='vasprun.xml', fermi=0): self.readfile(filename) self.fermi=fermi self.vasprun = vasp.Vasprun(vasprun)