Electron Phonon Coupling
Here we show step-by-step how to use Quantum Espresso to calculate phonons and electron-phonon matrix-elements on a regular q-grid, with the final aim to allow Yambo to read these databases and calculate the temperature-dependent correction to the electronic states. This tutorial is quite complicated, take your time to follow all the steps
Electron-phonon matrix elements
In this first section we will explain how to generate electron-phonon matrix elements in Quantum-Espresso, and then import them in Yambo. Calculations will be divided in different folders:
- pseudo the pseudo potential folder
- scf for the self-consistent calculation
- nscf for the non-self-consistent calcaultion with a larger number of bands
- phonon for the phonons calculations
- dvscf for the calculation of electron-phonon matrix elements
In this tutorial we will show how to calculate electron-phonon induced corrections to the bands and optical properties of 2D hexagonal boron nitride. All input file are availabe in the following tgz file: hBN.epc.tgz
1. In scf we run a standard scf calculation choosing the a large k-grid in such a way to converge density. Do not forget to set force_symmorphic=.true., because not symmorphic symmetries are not supported yet in Yambo. Notice that because the present system is two-dimensional we added the flag assume_isolated="2D" in such a way correct phonons in 2D, remove this flag is you have a system with a different dimensionality (a bulk, a molecule etc...)
2. Go in the nscf folder, and then copy the ${PREFIX}.save folder from scf to nscf, in the present example just do cp -r ../scf/bn.save ./.
In the nscf input you have to choose the number of k-points and bands you will use for the electron-phonon coupling and Yambo calculations, in our case we will a 9x9x1 grid and 8 bands.
..... number of k points= 12 cart. coord. in units 2pi/alat k( 1) = ( 0.0000000 0.0000000 0.0000000), wk = 0.0246914 k( 2) = ( 0.0000000 0.1283001 0.0000000), wk = 0.1481481 k( 3) = ( 0.0000000 0.2566001 0.0000000), wk = 0.1481481 k( 4) = ( 0.0000000 0.3849002 0.0000000), wk = 0.1481481 k( 5) = ( 0.0000000 0.5132002 0.0000000), wk = 0.1481481 k( 6) = ( 0.1111111 0.1924501 0.0000000), wk = 0.1481481 k( 7) = ( 0.1111111 0.3207501 0.0000000), wk = 0.2962963 k( 8) = ( 0.1111111 0.4490502 0.0000000), wk = 0.2962963 k( 9) = ( 0.1111111 0.5773503 0.0000000), wk = 0.1481481 k( 10) = ( 0.2222222 0.3849002 0.0000000), wk = 0.1481481 k( 11) = ( 0.2222222 0.5132002 0.0000000), wk = 0.2962963 k( 12) = ( 0.3333333 0.5773503 0.0000000), wk = 0.0493827 .....
3. Go in the phonon directory. You have to copy the k-points list in the 2pi/alat units from the previous nscf run and provide it as q-grid for the phonon calculations. Notice that due to an internal convection of Yambo the q-points have to be multiplied for -1 before add them to the phonons input. Then use the same k-point grid of the nscf calculation for the phonons, the final input will be:
&inputph verbosity = 'high' tr2_ph = 1e-12 prefix = 'bn' fildvscf = 'bn-dvscf' fildyn = 'bn.dyn') electron_phonon = 'dvscf', epsil = .true. trans = .true. ldisp = .false. qplot = .true. nk1=9, nk2=9, nk3 = 1 / 12 0.0000000 0.0000000 0.0000000 1 0.0000000 -0.1283001 0.0000000 1 0.0000000 -0.2566001 0.0000000 1 0.0000000 -0.3849002 0.0000000 1 0.0000000 -0.5132002 0.0000000 1 -0.1111111 -0.1924501 0.0000000 1 -0.1111111 -0.3207501 0.0000000 1 -0.1111111 -0.4490502 0.0000000 1 -0.1111111 -0.5773503 0.0000000 1 -0.2222222 -0.3849002 0.0000000 1 -0.2222222 -0.5132002 0.0000000 1 -0.3333333 -0.5773503 0.0000000 1
3. In nscf folder I run an nscf calculation, setting the number of bands nbnd equal to the desired band number, force_symmorphic=.true. and the same q grid as before. A ${PREFIX}.save folder will be automatically created.
4. In the main directory I copy and then overwrite the previous ${PREFIX}.save directory with the new one. Now I run an elph calculation setting electron_phonon = ‘yambo’, and the q grid.
&inputph fildvscf = '6HSiC-dvscf' fildyn = '6HSiC.dyn' verbosity = 'high' epsil = .true. ldisp = .true. tr2_ph = 1e-16 prefix = '6HSiC' electron_phonon = 'yambo', trans = .false. nq1=10, nq2 =10, nq3=2 /