Page 1 of 1
excitonic weigths on top of the band structure
Posted: Sat Apr 17, 2021 2:20 pm
by pangrt
Dear all,
I am trying the tutorial to calculate excitonic weigths on top of the band structure.Through <python3 plot-excitondb.py>, I got the band structure with exciton weight. I want to know how I can get the original data of this picture.
Thanks!
Pangrt
Re: excitonic weigths on top of the band structure
Posted: Thu Apr 22, 2021 1:49 pm
by palful
Dear Pangrt,
The scripts uses kpoint coordinates in the BZ, band energies, and exciton weights.
All these quantities are accessible in their raw format either via yambopy or directly via yambo.
Yambopy:
- kpoint coordinates are accessible via the
YamboLatticeDB object (instanced as in the
plot-excitondb script). For example, if
ylat is the name of the object, then the kpt Cartesian coordinates are given by the attribute
ylat.car_kpoints.
- dft eigenvalues are accessible via the
YamboSaveDB object (instanced as in the
plot-excitondb script). For example, if
ysave is the name of the object, then the eigenvalues are given by the attribute
ysave.eigenvalues.
- excitonic weights are accessible via the
YamboExcitonDB object (instanced as in the
plot-excitondb script). For example, if
yexc is the name of the object, then the <kvc|exc> coefficients are given by the attribute
yexc.eigenvectors, and the transition table to connect kvc indices to exc indices by
yexc.table.
Yambo
- kpoint coordinates and band energies are readable from the yambo outputs and report, as well as directly from the netcdf database
SAVE/ns.db1.
- excitonic weights are accessible by using
ypp -e a as explained for example
here (they are also stored the netcdf databases
ndb.BS_diago_*).
Just the x,y data in the plots
If you are interested in just the data in the form in which they are plotted by the
plot-excitondb script, I suggest the following: in order to perform the plot of the excitonic weights on top of the band structure,
plot-excitondb calls the function
plot_ax which is in
yambopy/yambopy/plot/bandstructure.py at line 166. Here, you can edit the code so that it prints the x, y and weights axes.
I hope this helps.
Cheers,
Fulvio
Re: excitonic weigths on top of the band structure
Posted: Mon May 24, 2021 9:03 am
by Quxiao
Dear Palful:
I read that method you proposed,at the end of the reply,you mentioned that I could edit the code to print the x,y and weights axes,I try to print that by adding a line:print (x) after the 184 line in bandstructure.py.In my opion,when I run the plot-excitondb.py,that could Call the plot_ax in the bandstructure.py,then print the x,however,it is not appear,so I am confused about that. I could not see these files like the YamboSAVEDB,and just a liittle Programming ability ,Could you give me some advise to explain that?or Could you teach me how to edit the code in bandstructure.py? Thank you very much!
Quxiao
Re: excitonic weigths on top of the band structure
Posted: Wed Nov 03, 2021 3:17 pm
by DavidPolito93
Dear All,
I have followed the bn tutorial in order to obtain the excitonic weight on top of the bandstructure for my material.
However the electronic bandstructure that is plotted is the DFT one, which doesn't take into account the GW corrections to the QP eigenvalues.
Here's the script:
#from __future__ import print_function, division
from qepy import *
from yambopy import *
import matplotlib.pyplot as plt
import os
interpolate = False
npoints = 51
fig = plt.figure(figsize=(4,6))
ax = fig.add_axes( [ 0.15, 0.15, 0.80, 0.80 ])
# Define path in reduced coordinates using Class Path
path = Path([ [[ 0.0, 0.0, 0.0],'$\Gamma$'],
[[ 0.5, 0.0, 0.0],'M']], [int(npoints),1,1] )
# SAVE database
save = YamboSaveDB.from_db_file(folder='./SAVE')
# Lattice information
lat = YamboLatticeDB.from_db_file(filename='SAVE/ns.db1')
# Exciton database read from db file
yexc = YamboExcitonDB.from_db_file(lat,filename='ndb.BS_diago_Q1',folder='./')
print("Ground state energy: %lf" % yexc.eigenvalues[0].real )
print("Intensity: %lf" % (yexc.get_intensities()[0].real+yexc.get_intensities()[1].real) )
print("1st-excited state energy: %lf" % yexc.eigenvalues[2].real )
print("Intensity: %lf" % (yexc.get_intensities()[2].real+yexc.get_intensities()[3].real) )
# List of states to be merged
states = [2]
# 1. Plot exciton weights in band structure NOT interpolated
exc_bands = yexc.get_exciton_bs(save,path,states,size=0.1)
exc_bands.plot_ax(ax,color_bands='black',c_weights='red')
plt.show()
Am I forgetting somethin?
Best,
Davide Romanin
Re: excitonic weigths on top of the band structure
Posted: Wed Nov 03, 2021 7:15 pm
by palful
Dear Davide,
The script you used, which is written just for the tutorial, uses by default the Kohn-Sham energies that are read by
Code: Select all
save = YamboSaveDB.from_db_file(folder='./SAVE')
And in fact when you plot the
save object is an argument:
Code: Select all
exc_bands = yexc.get_exciton_bs(save,path,states,size=0.1)
Now, aside from this specific tutorial, this script should be modified by the user in order to adapt it to the specific case of interest. In your case, you can for example read the quasiparticle database using the
YamboQPDB class:
Code: Select all
yqp = YamboQPDB.from_db(filename='ndb.QP')
Now you can try to redo the exciton plot passing
yqp as an argument instead of
save.
Cheers,
Fulvio
Re: excitonic weigths on top of the band structure
Posted: Thu Nov 04, 2021 10:48 am
by DavidPolito93
Dear Fulvio,
Thanks a lot for your clarification! I thought that it automatically loaded the QP databases present in SAVE
Best,
Davide