Author Topic: Calibrating Complex band structure with respect to Fermi level  (Read 2841 times)

0 Members and 1 Guest are viewing this topic.

Offline Mehboob

  • Regular QuantumATK user
  • **
  • Posts: 21
  • Country: in
  • Reputation: 0
    • View Profile
Respected ATK users,

In calculating the normal band structure I know that the output is calibrated with respect to the Fermi level.  Is it also true for complex band structure (CBS). The default figure for CBS which I found is not calibrated with respect to Fermi level. Will it be wise to calibrate CBS w.r.t. to  Fermi level? If yes, then how can I do this calibration?
The script I'm using is as below -

from NanoLanguage import *
import matplotlib.pyplot as plt
import math

# Read the complex bandstructure object from the NC file
cbs = nlread('/home/swapanchem/mehboob/cdcomplex-complexbandk5-121-k55-10001points-e-0-5.nc', object_id="gID003")[0]
energies = cbs.energies().inUnitsOf(eV)
k_real, k_complex = cbs.evaluate()

ax = plt.axes()
cmap="Spectral"

# First plot the real bands
kvr = numpy.array([])
e = numpy.array([])
for (j, energy) in enumerate(energies):
    k = k_real[j]*cbs.layerSeparation()/math.pi
    if len(k)>0:
        e = numpy.append(e,[energy,]*len(k))
        kvr = numpy.append(kvr,k)
       
# Plot
ax.scatter(kvr, e,
           c=numpy.abs(kvr),
           cmap=cmap, marker='o', linewidths=0, s=10)

# Next plot the complex bands
kvr = numpy.array([])
kvi = numpy.array([])
e = numpy.array([])

for (j, energy) in enumerate(energies):
    if len(k_complex[j])>0:
        kr = [numpy.abs(x.real) for x in k_complex[j]]
        ki = [numpy.abs(x.imag) for x in k_complex[j]]
        e = numpy.append(e,[energy,]*len(kr))
        kvr = numpy.append(kvr,kr)
        kvi = numpy.append(kvi,ki)

# Plot with color depending on the imaginary part (corresponding to real k-points)
sc = ax.scatter(-kvi,e,
               c=kvr,
               cmap=cmap, marker='o', linewidths=0, s=10)
               
# Put on labels and decorations
ax.axvline(0,color='b')
ax.grid(True, which='major')
ax.set_xlim(-1, 1)
ax.set_ylim(-3.5, -1.0)
plt.xticks([-1,-0.75,-0.50,-0.25])
plt.yticks([-3.5,-3.0,-2.5,-2.0,-1.5,-1.0])
ax.annotate('$\kappa$ (1/Ang)', xy=(0.25,-0.07), xycoords="axes fraction", ha="center")
ax.annotate('$kL / \pi$', xy=(0.75,-0.07), xycoords="axes fraction", ha="center")
ax.set_ylabel('Energy / eV')

# Add a colorbar
fig = plt.gcf()
x1, x2, y1, y2 = 0., 1, ax.get_ylim()[0], ax.get_ylim()[0]+1
trans = ax.transData + fig.transFigure.inverted()
ax_x1, ax_y1 = trans.transform_point([x1, y1])
ax_x2, ax_y2 = trans.transform_point([x2, y2])
ax_dx, ax_dy = ax_x2 - ax_x1, ax_y2 - ax_y1
cmap_axes = plt.axes([ax_x1, ax_y1, ax_dx, ax_dy])
a = numpy.outer(numpy.arange(0,1,0.01),numpy.ones(10)).transpose()
cmap_plt = plt.imshow(a,aspect='auto',cmap=plt.get_cmap(cmap),origin=[0,0])

plt.show()

With best regards,
Mehboob

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5538
  • Country: dk
  • Reputation: 90
    • View Profile
    • QuantumATK at Synopsys
You didn't provide a figure so I can't tell exactly, but there is a keyword to ComplexBandstructure called "energy_zero_parameter". The default - and indeed always recommended - value is FermiLevel, but in case you used AbsoluteEnergy, you will need to subtract cbs.energyZero() from all energies in the plot.

Offline Mehboob

  • Regular QuantumATK user
  • **
  • Posts: 21
  • Country: in
  • Reputation: 0
    • View Profile
Hello Anders Blom,

While calculating the complex band structure, there is an input

    energy_zero_parameter=FermiLevel,
   
Does it mean that the my output is already calibrated?

I have attached the figure of complex band structure which i obtained.

With best regards,
Mehboob

Offline Anders Blom

  • QuantumATK Staff
  • Supreme QuantumATK Wizard
  • *****
  • Posts: 5538
  • Country: dk
  • Reputation: 90
    • View Profile
    • QuantumATK at Synopsys
It means that energy=0 is the Fermi level, yes.

Offline Mehboob

  • Regular QuantumATK user
  • **
  • Posts: 21
  • Country: in
  • Reputation: 0
    • View Profile
Thank you Anders Blom.