Ejemplo n.º 1
0
def plot_dos_dict(complete_dos, d, xlim=(-3, 3), **kwargs):
    """
    Plot DOS dict with pymatgen. The dict is most likely generated with the methods of the
    pymatgen CompleteDos class.

    Parameters
    ----------
    complete_dos : 
        CompleteDos object.
    d : TYPE
        Dict of DOS.
    xlim : (tuple), optional
        Limits for x axis. The default is (-3,3).
    **kwargs : (dict)
        Arguments for DosPlotter in pymatgen.

    Returns
    -------
    plt : 
        Matplotlib object.
    """

    dos_plotter = DosPlotter(**kwargs)
    for k in d:
        dos_plotter.add_dos(k, d[k])
    eg = complete_dos.get_gap()
    plt = dos_plotter.get_plot(xlim=(xlim[0], eg + xlim[1]))

    return plt
Ejemplo n.º 2
0
def dos_graph_soc(rawdatadir, savedir):
    dosrun = Vasprun("{}/vasprun.xml".format(rawdatadir),
                     soc=True,
                     parse_dos=True)
    dos = dosrun.complete_dos

    orbitals = {
        "s": Orbital.s,
        "p_y": Orbital.py,
        "p_z": Orbital.pz,
        "p_x": Orbital.px,
        "d_xy": Orbital.dxy,
        "d_yz": Orbital.dyz,
        "d_z2-r2": Orbital.dz2,
        "d_xz": Orbital.dxz,
        "d_x2-y2": Orbital.dx2
    }
    spinor_component = {
        "mtot": SpinNonCollinear.mtot,
        "mx": SpinNonCollinear.mx,
        "my": SpinNonCollinear.my,
        "mz": SpinNonCollinear.mz
    }

    for m in spinor_component:
        dosplot = DosPlotter()
        if m == "mtot":
            dosplot.add_dos("Total DOS with SOC", dos.tdos)
        dosplot.add_dos_dict(dos.get_element_dos())
        plt = dosplot.get_plot(xlim=[-3, 3],
                               soc=True,
                               spinor_component=spinor_component[m],
                               element_colors=True)
        plt.grid()
        plt.savefig("{}/DOSGraph_{}_{}".format(savedir, m,
                                               "DOS by Element with SOC"))
        plt.close()

    for m in spinor_component:
        dosplot = DosPlotter()
        if m == "mtot":
            dosplot.add_dos("Total DOS with SOC", dos.tdos)
        dosplot.add_dos_dict(dos.get_orbital_dos())
        plt = dosplot.get_plot(xlim=[-3, 3],
                               soc=True,
                               spinor_component=spinor_component[m])
        plt.grid()
        plt.savefig("{}/DOSGraph_{}_{}".format(savedir, m,
                                               "DOS by Orbital with SOC"))
        plt.close()

    # Get detailed info about band gap (source: vasprun.xml)
    dos_graph_soc.e_fermi = float(dosrun.efermi)
    dos_graph_soc.electronic_gap = \
        dosrun.tdos.get_gap_alt(xlim=[-3,3],e_fermi=dos_graph_soc.e_fermi,
                                tol=0.001,abs_tol=False,
                                spin=SpinNonCollinear.mtot)

    return
Ejemplo n.º 3
0
def plot_dos(vasprun_path: str):
    try:
        v = Vasprun(vasprun_path)
    except xml.etree.ElementTree.ParseError:
        print("\tskipped due to parse error")
        return
    tdos = v.tdos
    plt = DosPlotter()
    plt.add_dos("Total DOS", tdos)
    plt.show()
Ejemplo n.º 4
0
 def plot_dos(self, sigma=0.05):
     """
     plot dos
     Args:
         sigma:
             a smearing
     Returns:
         a matplotlib object
     """
     plotter = DosPlotter(sigma=sigma)
     plotter.add_dos("t", self._bz.dos)
     return plotter.get_plot()
Ejemplo n.º 5
0
    def plot_dos(self, sigma=0.05):
        """
        plot dos

        Args:
            sigma: a smearing

        Returns:
            a matplotlib object
        """
        plotter = DosPlotter(sigma=sigma)
        plotter.add_dos("t", self._bz.dos)
        return plotter.get_plot()
Ejemplo n.º 6
0
    def plot_dos(self, T=None, npoints=10000):
        """
        Plot the total Dos using DosPlotter()
        """
        if self.bzt_interp is None:
            raise BoltztrapError("BztInterpolator not present")

        tdos = self.bzt_interp.get_dos(T=T, npts_mu=npoints)
        # print(npoints)
        dosPlotter = DosPlotter()
        dosPlotter.add_dos("Total", tdos)

        return dosPlotter
Ejemplo n.º 7
0
    def plot_dos(self, T=None, npoints=10000):
        """
            Plot the total Dos using DosPlotter()
        """
        if self.bzt_interp is None:
            raise BoltztrapError("BztInterpolator not present")

        tdos = self.bzt_interp.get_dos(T=T,npts_mu=npoints)
        #print(npoints)
        dosPlotter = DosPlotter()
        dosPlotter.add_dos('Total',tdos)

        return dosPlotter
Ejemplo n.º 8
0
class MyDynamicMplCanvas(MyMplCanvas):
    """A canvas that updates itself every second with a new plot."""
    def __init__(self, *args, **kwargs):
        MyMplCanvas.__init__(self, *args, **kwargs)
        self.dsp = DosPlotter()

    def update_figure(self, txt):
        # Build a list of 4 random integers between 0 and 10 (both inclusive)
        self.axes.clear()
        with open(txt) as f:
            ef = float(f.readline().split()[-2])
            arr = [r.split() for r in f.readlines()]
            arr = np.array(arr)
            arr = arr.astype(np.float)
            self.dos = Dos(ef, arr[:, 0], {Spin.up: arr[:, 1]})
            self.dsp.add_dos('tdos', self.dos)
        self.dsp.get_plot(plt=self.axes)
        self.draw()
Ejemplo n.º 9
0
def get_mp_banddos():
    check_matplotlib()
    mpr = check_apikey()
    print("input the mp-ID")
    wait_sep()
    in_str = wait()
    mp_id = in_str
    step_count = 1
    proc_str = "Reading Data From " + web + " ..."
    procs(proc_str, step_count, sp='-->>')
    data = mpr.get_entry_by_material_id(mp_id)
    sepline()
    print(data)
    sepline()
    step_count += 1
    proc_str = "Reading Band Data From " + web + " ..."
    procs(proc_str, step_count, sp='-->>')

    band = mpr.get_bandstructure_by_material_id(mp_id)
    if band is None:
        print("No data obtained online, stop now!")
        os.exit(0)

    step_count += 1
    filename = mp_id + '_band.png'
    proc_str = "Writing Data to " + filename + " File..."
    bsp = BSPlotter(band)
    procs(proc_str, step_count, sp='-->>')
    bsp.save_plot(filename=filename, img_format="png")

    step_count += 1
    proc_str = "Reading DOS Data From " + web + " ..."
    procs(proc_str, step_count, sp='-->>')
    dos = mpr.get_dos_by_material_id(mp_id)
    if dos is None:
        print("No data obtained online, stop now!")

    step_count += 1
    filename = mp_id + '_dos.png'
    proc_str = "Writing Data to " + filename + " File..."
    dsp = DosPlotter()
    dsp.add_dos('Total', dos)
    procs(proc_str, step_count, sp='-->>')
    dsp.save_plot(filename=filename, img_format="png")
Ejemplo n.º 10
0
def pdos(vasprun):

    # Load the vasprun.xml file
    out = Vasprun(os.path.abspath(vasprun))

    # Extract the types of species in the structure
    species = out.initial_structure.types_of_specie

    # Extract the complete DOS
    element_dos = out.complete_dos.get_element_dos()

    # Initialize the DosPlotter
    plotter = DosPlotter()

    # Add the element projected DOS to the DOSplotter
    for specie in species:
        plotter.add_dos(specie.name, element_dos[specie])

    plotter.show()
Ejemplo n.º 11
0
    def get_sdos(self, dos_dict, stack=True, xlim=[-10, 10], ylim=None, sigma=0.15):
        dos_vasprun = Vasprun(os.path.join(self.path, "vasprun.xml"), parse_projected_eigen=True)
        dos_data = dos_vasprun.complete_dos
        plotter = DosPlotter(stack=stack, sigma=sigma)
        edos = dos_data.get_element_dos()
        for key in dos_dict:
            if type(dos_dict[key]) is list:
                for index, item in enumerate(dos_dict[key]):
                    if index == 0:
                        temp = dos_data.get_site_dos(dos_data.structure[item])
                    else:
                        temp = temp + dos_data.get_site_dos(dos_data.structure[item])
                plotter.add_dos(key, temp)
            elif type(dos_dict[key]) is str:
                temp = edos[Element(dos_dict[key])]
                plotter.add_dos(key, temp)
            elif type(dos_dict[key]) is int:
                temp = dos_data.get_site_dos(dos_data.structure[dos_dict[key]])
                plotter.add_dos(key, temp)
            else:
                print('Warning: invalid value')

        if ylim is not None:
            plotter.save_plot(f'{self.path}-dos.png', img_format=u'png', xlim=xlim, ylim=ylim)
        else:
            plotter.save_plot(f'{self.path}-dos.png', img_format=u'png', xlim=xlim)
Ejemplo n.º 12
0
    kspacing=1)

Si3.set_calculator(calc3)
en3 = Si2.get_potential_energy()

# ***************************************************************************************************

os.chdir('..')

dosrun = Vasprun("DOS/vasprun.xml", parse_dos=True)
dos = dosrun.complete_dos
print("E_Fermi=%f%3s" % (dosrun.efermi, 'eV'))
# print(dos.efermi)

dosplot1 = DosPlotter(sigma=0.05)
dosplot1.add_dos("Total DOS", dos)
plt = dosplot1.get_plot(xlim=(-18, 15))
plt.grid()
plt.savefig("pymatgen_DOS.eps", format="eps")
plt.show()

plt.close()

# bsrun = BSVasprun("Band/vasprun.xml", parse_projected_eigen=True)
bsrun = BSVasprun("Band/vasprun.xml")
bs = bsrun.get_band_structure("Band/KPOINTS")
bsplot = BSPlotter(bs)
plt = bsplot.get_plot(bs)
bsplot.plot_brillouin()
bsplot.get_plot(ylim=(-18, 15), zero_to_efermi=True)
plt.grid()
Ejemplo n.º 13
0
tdos = vasp.tdos  #Total dos calculated at the end of run
idos = vasp.idos  # Integrated dos calculated at the end of run
pdos = vasp.pdos  # List of list of PDos objects. Access as pdos[atomindex][orbitalindex]
efermi = vasp.efermi
eigenvalues = vasp.eigenvalues
projected_eigenvalues = vasp.projected_eigenvalues
bs = bsvasp.get_band_structure(line_mode=True)
total_dos = tdos
pdoss = pdos
#CDOS = CompleteDos(structure,total_dos,pdoss)
spd_dos = cdos.get_spd_dos
#print spd_dos
element_dos = cdos.get_element_dos
#element_spd_dos = cdos.get_element_spd_dos(el)
dosplotter = DosPlotter()
Totaldos = dosplotter.add_dos('Total DOS', tdos)
Integrateddos = dosplotter.add_dos('Integrated DOS', idos)
#Pdos = dosplotter.add_dos('Partial DOS',pdos)
#Spd_dos =  dosplotter.add_dos('spd DOS',spd_dos)
#Element_dos = dosplotter.add_dos('Element DOS',element_dos)
#Element_spd_dos = dosplotter.add_dos('Element_spd DOS',element_spd_dos)
dos_dict = {
    'Total DOS': tdos,
    'Integrated DOS': idos
}  #'Partial DOS':pdos,'spd DOS':spd_dos,'Element DOS':element_dos}#'Element_spd DOS':element_spd_dos
add_dos_dict = dosplotter.add_dos_dict(dos_dict)
get_dos_dict = dosplotter.get_dos_dict()
dos_plot = dosplotter.get_plot()
##dosplotter.save_plot("MAPbI3_dos",img_format="png")
##dos_plot.show()
bsplotter = BSPlotter(bs)
Ejemplo n.º 14
0
        # 3rd run to obtain Band structure
        band = MPNonSCFSet.from_prev_calc(static_dir,
                                          mode="line",
                                          standardize=True,
                                          user_incar_settings=myset)
        band.write_input(band_dir)
        run_vasp(cmd, band_dir)
        os.system('cp ' + band_dir + '/vasprun.xml  ./band-vasprun.xml')
        os.system('cp ' + band_dir + '/KPOINTS  ./')

        v = BSVasprun("band-vasprun.xml")
        bs = v.get_band_structure(kpoints_filename='KPOINTS', line_mode=True)
        plt = BSPlotter(bs)
        plt.get_plot(vbm_cbm_marker=True)
        plt.save_plot(Name + '-band.png', ylim=[-4, 4], img_format='png')

        v = Vasprun('dos-vasprun.xml')
        tdos = v.tdos
        cdos = v.complete_dos
        spd_dos = cdos.get_spd_dos()
        plotter = DosPlotter(sigma=0.1)
        plotter.add_dos("Total DOS", tdos)
        # plotter.add_dos("spd_dos", spd_dos)
        plotter.save_plot(Name + '-dos.png', img_format='png', xlim=[-4, 4])

        shutil.rmtree(band_dir)
        shutil.rmtree(dos_dir)
        shutil.rmtree(static_dir)

    os.chdir('../')
Ejemplo n.º 15
0
def total_dos():
   check_matplotlib()
   filename='vasprun.xml'
   check_file(filename)
   proc_str="Reading Data From "+ filename +" File ..."
   procs(proc_str,1,sp='-->>')
   vsr=Vasprun(filename,parse_eigen=False)
   tdos=vsr.tdos
   idos=vsr.idos
   E=tdos.energies-tdos.efermi
   if vsr.is_spin:
      proc_str="This Is a Spin-polarized Calculation."
      procs(proc_str,0,sp='-->>')
      proc_str="Writting TDOS.dat File ..."
      TDOSUP=tdos.densities[Spin.up]
      TDOSDOWN=tdos.densities[Spin.down]
      ETDOS=np.vstack((E,TDOSUP,TDOSDOWN))
      head_line="#%(key1)+12s%(key2)+12s%(key3)+12s"%{'key1':'Energy(eV)','key2':'SpinUp','key3':'SpinDown'}
      write_col_data('TDOS.dat',ETDOS.T,head_line)

      proc_str="Writting IDOS.dat File ..."
      procs(proc_str,3,sp='-->>')
      IDOSUP=idos.densities[Spin.up]
      IDOSDOWN=idos.densities[Spin.down]
      EIDOS=np.vstack((E,IDOSUP,IDOSDOWN))
      head_line="#%(key1)+12s%(key2)+12s%(key3)+12s"%{'key1':'Energy(eV)','key2':'IntSpinUp','key3':'IntSpinDown'}
      write_col_data('IDOS.dat',EIDOS.T,head_line)

      plt1=DosPlotter()
      plt2=DosPlotter()
      plt1.add_dos('Total DOS',tdos)
      plt2.add_dos('Total DOS',idos)
      try:
       # plt1.show()
        plt1.save_plot('TotalDOS.png', img_format="png")
       # plt2.show()
        plt2.save_plot('IntegratedDOS.png', img_format="png")
      except:
        print("pls use gnuplot to plot TDOS.dat and IDOS.dat")
   else:
      if vsr.parameters['LNONCOLLINEAR']:
         proc_str="This Is a Non-Collinear Calculation."
      else:
          proc_str="This Is a Non-Spin Calculation."
      procs(proc_str,0,sp='-->>')
      proc_str="Writting TDOS.dat File ..."
      procs(proc_str,2,sp='-->>')
      
      TDOS=tdos.densities[Spin.up]
      ETDOS=np.vstack((E,TDOS))
      head_line="#%(key1)+12s%(key2)+12s"%{'key1':'Energy(eV)','key2':'TotalDOS'}
      write_col_data('TDOS.dat',ETDOS.T,head_line)

      proc_str="Writting IDOS.dat File ..."
      procs(proc_str,3,sp='-->>')
      IDOS=idos.densities[Spin.up]
      EIDOS=np.vstack((E,IDOS))
      head_line="#%(key1)+12s%(key2)+13s"%{'key1':'Energy(eV)','key2':'IntegratedDOS'}
      write_col_data('IDOS.dat',EIDOS.T,head_line)

      plt1=DosPlotter()
      plt2=DosPlotter()
      plt1.add_dos('Total DOS',tdos)
      plt2.add_dos('Integrated DOS',idos)
      filename4="TotalDOS.png IntegratedDOS.png"
      proc_str="Saving Plot to "+ filename4 +" File ..."
      procs(proc_str,4,sp='-->>')

      try:
       # plt1.show()
        plt1.save_plot('TotalDOS.png', img_format="png")
       # plt2.show()
        plt2.save_plot('IntegratedDOS.png', img_format="png")
      except:
        print("pls use gnuplot to plot TDOS.dat and IDOS.dat")
Ejemplo n.º 16
0
def dos_graph(rawdatadir,
              savedir,
              total_dos=True,
              by_element=False,
              by_orbital=False):
    dosrun = Vasprun("{}/vasprun.xml".format(rawdatadir), parse_dos=True)
    dos = dosrun.complete_dos

    # Get basic plot
    dos_graph.e_fermi = float(dosrun.efermi)
    dos_graph.band_gap = float(dosrun.eigenvalue_band_properties[0])
    dosplot = DosPlotter()
    #dosplot = DosPlotter(sigma=0.1)
    if total_dos == True:
        dosplot.add_dos("Total DOS", dos)
    if by_element == True:
        dosplot.add_dos_dict(dos.get_element_dos())
    if by_orbital == True:
        dosplot.add_dos_dict(dos.get_spd_dos())
    plt = dosplot.get_plot(xlim=[-3, 3], ylim=[-15, 15], element_colors=True)
    plt.grid()
    plt.savefig("{}/DOSGraph".format(savedir))
    plt.close()

    # Get plot for comparison with SOC total DOS plot
    dosplot = DosPlotter()
    dosplot.add_dos("Total DOS without SOC", dos)
    dosplot.add_dos_dict(dos.get_element_dos())
    plt = dosplot.get_plot_total(xlim=[-3, 3], element_colors=True)
    plt.grid()
    plt.savefig("{}/DOSGraph_tot_DOS by Element without SOC".format(savedir))
    plt.close()

    dosplot = DosPlotter()
    orbitals = {
        "s": Orbital.s,
        "p_y": Orbital.py,
        "p_z": Orbital.pz,
        "p_x": Orbital.px,
        "d_xy": Orbital.dxy,
        "d_yz": Orbital.dyz,
        "d_z2-r2": Orbital.dz2,
        "d_xz": Orbital.dxz,
        "d_x2-y2": Orbital.dx2
    }
    dosplot.add_dos("Total DOS without SOC", dos)
    dosplot.add_dos_dict(dos.get_orbital_dos())
    plt = dosplot.get_plot_total(xlim=[-3, 3])
    plt.grid()
    plt.savefig("{}/DOSGraph_tot_DOS by Orbital without SOC".format(savedir))
    plt.close()
    """
    # Get quick info about band gap (source: EIGENVAL)
    eigenval = Eigenval("{}/EIGENVAL".format(rawdatadir))
    dos_graph.band_properties = eigenval.eigenvalue_band_properties
    """
    # Get detailed info about band gap and CB/VB in each spin channel
    # (source: vasprun.xml)
    dos_graph.majority_vbm = \
        dosrun.tdos.get_cbm_vbm_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                    tol=0.3,abs_tol=True,spin=Spin.up)[1]
    dos_graph.majority_cbm = \
        dosrun.tdos.get_cbm_vbm_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                    tol=0.3,abs_tol=True,spin=Spin.up)[0]
    dos_graph.minority_vbm = \
        dosrun.tdos.get_cbm_vbm_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                    tol=0.3,abs_tol=True,spin=Spin.down)[1]
    dos_graph.minority_cbm = \
        dosrun.tdos.get_cbm_vbm_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                    tol=0.3,abs_tol=True,spin=Spin.down)[0]
    dos_graph.majority_gap = \
        dosrun.tdos.get_gap_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                tol=0.3,abs_tol=True,spin=Spin.up)
    dos_graph.minority_gap = \
        dosrun.tdos.get_gap_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                tol=0.3,abs_tol=True,spin=Spin.down)
    dos_graph.electronic_gap = \
        dosrun.tdos.get_gap_alt(xlim=[-3,3],e_fermi=dos_graph.e_fermi,
                                tol=0.3,abs_tol=True,spin=None)

    return
Ejemplo n.º 17
0
@Filename: pymatgenPlotBSDOS202005091027.py
@IDE     : PyCharm
@Time1   : 2020-05-09 10:27:36
@Time2   : 2020/5/9 10:27
@Month1  : 5月
@Month2  : 五月
"""

from pymatgen.electronic_structure.plotter import DosPlotter, BSPlotter, BSDOSPlotter
from pymatgen.io.vasp import Vasprun, BSVasprun

vasprun_file = './AlEuO3_Perovskite_DOS/vasprun.xml'
vasprun = Vasprun(vasprun_file)
tdos = vasprun.tdos
plotter = DosPlotter()
plotter.add_dos('Total DOS', tdos)
# plotter.show(xlim=[-20, 20], ylim=[-6, 6])
plotter.show()

completeDos = vasprun.complete_dos
element_dos = completeDos.get_element_dos()
plotter = DosPlotter()
plotter.add_dos_dict(element_dos)
plotter.add_dos('Total DOS', tdos)
plotter.show()

spd_dos = completeDos.get_spd_dos()
plotter = DosPlotter()
plotter.add_dos_dict(spd_dos)
plotter.add_dos('Total DOS', tdos)
plotter.show()
Ejemplo n.º 18
0
#!/nfshome/villa/anaconda3/bin/python

from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.electronic_structure.plotter import BSPlotter, DosPlotter

vaspout = Vasprun("./vasprun.xml")

# Initializes plotter with some optional args. Defaults are usually
# fine,
complete_dos = vaspout.complete_dos
plt = DosPlotter()
plt.add_dos_dict(complete_dos.get_spd_dos())
tdos = vaspout.tdos
# Adds a DOS with a label.
plt.add_dos("Total", tdos)
#plt.get_plot()

plt.save_plot('dos_mg.pdf', img_format='pdf', xlim=[-7, 6], ylim=[0, 20])
Ejemplo n.º 19
0
os.chdir(
    '/home/ksrc5/FTJ/1.bfo/111-dir/junction/sto/vasp/vac/conf3/4.node03/dense_k_dos/again'
)

vrun = Vasprun('vasprun.xml')
s: Structure = vrun.final_structure
cdos = vrun.complete_dos
pdos = cdos.pdos
doss = dict()
num = 16
arr = np.linspace(0, 1, num, endpoint=False)
darr = arr[1] - arr[0]
for j in arr:
    densities = []
    for i in s.sites:
        if j + darr > i.c >= j:
            densities.append(cdos.get_site_dos(i).get_densities())
    densities = np.sum(densities, axis=0)
    doss[f'{j:.2f}'] = Dos(cdos.efermi, cdos.energies, {Spin.up: densities})
dsp = DosPlotter(sigma=0.1)
ax_array, fig, plt = get_axarray_fig_plt(None, nrows=num, sharex=True)
plt = pretty_plot(12, 6, plt=plt)
for i in range(num):
    dsp.__init__(sigma=0.05)
    a = doss.popitem()
    dsp.add_dos(*a)
    fig.add_subplot(num, 1, i + 1)
    subplt = dsp.get_plot(xlim=(-1, 2), plt=plt)
plt.savefig('figure.png')
plt.show()
Ejemplo n.º 20
0
    # read in magentic moment from OUTCAR and print
    out = Outcar('./OUTCAR')
    print('Total Magnetic Moment:', out.total_mag)

if make_dosplot:
    # read in BSDOSPlotter function to plot DOS and BS
    from pymatgen.electronic_structure.plotter import DosPlotter

    # make and save a plot of the band structure and DOS
    dos = vsp.complete_dos
    energy_range = (-10, 7)  # eV, change if desired to change plotting range

    # create DosPlotter object with smearing
    edosplot = DosPlotter(sigma=dos_smearing)
    # plot Total DOS and element-projected dos
    edosplot.add_dos("Total DOS", dos)
    edosplot.add_dos_dict(dos.get_element_dos())
    plt = edosplot.get_plot(xlim=energy_range)
    plt.plot((-20, 20), (0, 0), 'k--')
    plt.savefig('Element_DOS_plot.png')

    # create DosPlotter object with smearing
    odosplot = DosPlotter(sigma=dos_smearing)
    # plot Total DOS and orbital-projected dos
    odosplot.add_dos("Total DOS", dos)
    odosplot.add_dos_dict(dos.get_spd_dos())
    plt = odosplot.get_plot(xlim=energy_range)
    plt.plot((-20, 20), (0, 0), 'k--')
    plt.savefig('Orbital_DOS_plot.png')

    print('Generated DOS plots')
Ejemplo n.º 21
0
from pymatgen.electronic_structure.dos import add_densities
from pymatgen.io.vasp.outputs import Vasprun, Dos
from pymatgen.electronic_structure.plotter import DosPlotter
import six
import os
from VASP.vasprun_related.utiles import write_dos
import numpy as np

os.chdir('/home/jinho93/oxides/cluster/tio2/anatase/dos')
vrun = Vasprun('vasprun.xml')
cdos = vrun.complete_dos
arr = []
arr2 = []
num = 0
num2 = 0
for i in vrun.final_structure.sites:
    if 0.425 < i.a < 0.575 and 0.425 < i.b < 0.575 and 0.42 < i.c < 0.58:
        arr.append(cdos.get_site_dos(i).densities)
        num += 1
    else:
        arr2.append(cdos.get_site_dos(i).densities)
        num2 += 1
dos = Dos(cdos.efermi, cdos.energies, six.moves.reduce(add_densities, arr))
dos2 = Dos(cdos.efermi, cdos.energies, six.moves.reduce(add_densities, arr2))
dos.densities = {k: np.array(d / num) for k, d in dos.densities.items()}
dos2.densities = {k: np.array(d / num2) for k, d in dos2.densities.items()}
dsp = DosPlotter()
dsp.add_dos('core', dos2)
write_dos(dos, filename='core.dat')
write_dos(dos2, filename='shell.dat')
dsp.show()
Ejemplo n.º 22
0
#!/nfshome/villa/anaconda3/bin/python
"""
Spyder Editor

This is a temporary script file.
"""

import os
from pymatgen.core.periodic_table import Element
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.io.vasp.inputs import Poscar
from pymatgen.electronic_structure.plotter import DosPlotter

complete_dos = Vasprun('vasprun.xml').complete_dos

partial_dos = complete_dos.get_spd_dos()

dos_plotter = DosPlotter()
dos_plotter.add_dos('Total_dos', complete_dos)
for orbital in partial_dos:
    dos_plotter.add_dos(orbital, partial_dos[orbital])
plt = dos_plotter.get_plot(xlim=(-10, 10))
plt.show()
Ejemplo n.º 23
0
class Compound:
    '''
    This class is meant to take in a VaspRun object and 
    make it more accessible to get some of its attributes. 
    These attributes are listed below.
    Typical usage looks like::
        
        var = Compound( VaspRun_object )
        compound_mass = var.mass
        plot = var.getPlot()
    
    **Attributes**
    
    .. attribute:: vasp
    
        The vasp object itself
    
    .. attribute:: z (lowercase)
    
        The Z component of the compound.
        i.e. the greatest common
        denominator of the compound.
        
        ex. Ag2Bi2I8 --> AgBiI4 ...... z = 2
        
    .. attribute:: formula
        
        The reduced formula of the compound
        
    .. attribute:: full_formula
    
        The full formula used at the start of the VASP run
        
    .. attribute:: elem_List
    
        A list of all the elements in the compound
        
        ex. Ag2Bi2I8 --> ['Ag', 'Bi', 'I']
        
    .. attribute:: mass
    
        The total mass of the object given in AUs or Daltons
        
    .. attribute:: volume
    
        The volume of the cell containing the compound given in
        Angstroms cubed
        
    .. attribute:: density
    
        The density of the compound. This is multiplied by 1.66054
        to make the units grams/cm^3
        
    .. attribute:: neighbors
    
        A list of each of the atoms nearest neighbors to one another.
        See 
        
    .. attribute:: latConst
    
        A list of the 'a b c' lattice constants in the compound
        
        i.e. [a const, b const, c const]
        
    
    **Methods**
    
    .. method:: getPlot()
        
        Returns a Density of states plot
    
    '''
    def __init__(self, vasp):
        self.vasp = vasp
        self.z = self.getGCD()
        self.formula = self.getElem()
        self.full_formula = self.getElem(False)
        self.elem_List = self.elList()
        self.mass = Mass(vasp.atomic_symbols)
        self.volume = vasp.final_structure.volume
        self.density = self.mass / self.volume * 1.66054
        self.neighbors = nearNeighbors(vasp)
        self.latConst = self.getLatConst()

        self.plot = DosPlotter()

    def elList(self):
        lis = []
        temp = {}

        for x in self.vasp.atomic_symbols:
            if x in temp:
                temp[x] += 1
            else:
                temp[x] = 1

        for x in temp:
            lis.append(x)

        return lis

    def getNeighbor(self, el1, el2):
        return self.neighbors[el1 + '-' + el2]

    def getGCD(self):
        el = {}
        for x in self.vasp.atomic_symbols:
            if x in el:
                el[x] += 1
            else:
                el[x] = 1

        return gcd.reduce([el[x] for x in el])

    def getElem(self, pretty=True):
        string = ""
        el = {}
        for x in self.vasp.atomic_symbols:
            if x in el:
                el[x] += 1
            else:
                el[x] = 1

        for x in el:
            if pretty:
                num = int(el[x] / self.z)
            else:
                num = int(el[x])

            if num == 1:
                string += x
            else:
                string += x + str(num)

        return string

    def getPlot(self):
        self.plot.add_dos("Total Dos", self.vasp.complete_dos)
        return self.plot.get_plot()

    def getLatConst(self):
        return self.vasp.final_structure.lattice.abc
Ejemplo n.º 24
0
 def plot_dos(self):
     plotter = DosPlotter(sigma=0.05)
     plotter.add_dos("t", self._bz.dos)
     plotter.get_plot().show()
Ejemplo n.º 25
0
    for b in bondings:
        if b[0] == 1 and b[1] == 0:
            ter += 1
        elif b[0] == 2 and b[1] == 0:
            brig += 1

    print(ter, brig)
# %%

import numpy as np
import macrodensity as md
arr = np.genfromtxt('/home/jinho93/molecule/dems/25/100/temp.dat')
arr = arr[:, 3]
mac = md.macroscopic_average(arr, 1, 0.1)
import matplotlib.pyplot as plt

plt.plot(mac)

np.savetxt('/home/jinho93/mac.dat', mac)
# %%
a = np.genfromtxt('mac.dat')
# %%
print(a)
# %%
from pymatgen.io.vasp import Vasprun
from pymatgen import Element
from pymatgen.electronic_structure.plotter import DosPlotter
dsp = DosPlotter()
vrun = Vasprun('vasprun.xml')
dsp.add_dos('total', vrun.tdos)
dsp.show(xlim=(-1, 1.5))
Ejemplo n.º 26
0
 def plot_dos(self):
     plotter = DosPlotter(sigma=0.05)
     plotter.add_dos("t", self._bz.dos)
     plotter.get_plot().show()