Header Ads Widget

Ab initio Calculations Using Q-Espresso Code

Last Posts

10/recent/ticker-posts

How to calculate the Total DOS of Graphene

 Graphene is a material that is extracted from graphite and is made up of pure carbon, one of the most important elements in nature and which we find in daily objects like the lead of a pencil.

 Graphene (/ˈɡræfn/)[1] is a carbon allotrope consisting of a single layer of atoms arranged in a honeycomb planar nanostructure.[2][3] The name "graphene" is derived from "graphite" and the suffix -ene, indicating the presence of double bonds within the carbon structure. 

 

 

Now, we will calculate  its total density of states and we need to do many calculations using different input files

graphene_scf.in

&CONTROL
calculation = 'scf',
prefix = 'graphene',
outdir = '/tmp/',
pseudo_dir = './',
/

&SYSTEM
ibrav = 4,
celldm(1) = 4.654,
celldm(3) = 3.0,
nat = 2,
ntyp = 1,
ecutwfc = 40.0,
ecutrho = 400.0,
occupations = 'smearing',
smearing = 'gaussian',
degauss = 0.01,
/

&ELECTRONS
conv_thr = 1.0d-8
/

ATOMIC_SPECIES
C 12.0107 C.pbe-rrkjus.UPF

ATOMIC_POSITIONS alat
C 0.000000 0.0000000 0.000000
C 0.000000 0.5773503 0.000000

K_POINTS automatic
9 9 1 0 0 0

You can download the pseudopotential from here C.pbe-rrkjus.UPF

Run the scf calculation 

pw.x -i graphene_scf.in > graphene_scf.out

 

graphene_nscf.in

&CONTROL
calculation = 'nscf',
prefix = 'graphene',
outdir = '/tmp/',
pseudo_dir = './',
/

&SYSTEM
ibrav = 4,
celldm(1) = 4.654,
celldm(3) = 3.0,
nat = 2,
ntyp = 1,
ecutwfc = 40.0,
ecutrho = 400.0,
occupations='tetrahedra_opt'
/

&ELECTRONS
conv_thr = 1.0d-8
/

ATOMIC_SPECIES
C 12.0107 C.pbe-rrkjus.UPF

ATOMIC_POSITIONS alat
C 0.000000 0.0000000 0.000000
C 0.000000 0.5773503 0.000000

K_POINTS automatic
12 12 1 0 0 0

 

Next increase the k-grid, and perform the non-self-consistent field calculation.

pw.x -i graphene_nscf.in > graphene_nscf.out


graphene_dos.in

&DOS
prefix = 'graphene',
outdir = '/tmp/'
fildos = 'graphene_dos.dat'
/

 Run the dos calculation for the dense k-mesh:

dos.x -i graphene_dos.in > graphene_dos.out

 

Make plot using the Matplotlib package and the script graphene-dos.py

To install the package we run the following command:

sudo apt-get install python3-matplotlib

 

 graphene-dos.py

import matplotlib.pyplot as plt
from matplotlib import rcParamsDefault
import numpy as np
#%matplotlib inline

# load data
energy, dos, idos = np.loadtxt('./graphene_dos.dat', unpack=True)

# make plot
plt.figure(figsize = (12, 6))
plt.plot(energy, dos, linewidth=0.75, color='red')
plt.yticks([])
plt.xlabel('Energy (eV)')
plt.ylabel('DOS')
plt.axvline(x=6.642, linewidth=0.5, color='k', linestyle=(0, (8, 10)))
plt.xlim(-16, 16)
plt.ylim(0, )
plt.fill_between(energy, 0, dos, where=(energy < 6.642), facecolor='red', alpha=0.25)
plt.text(6, 1.7, 'Fermi energy', fontsize= 13, rotation=90)
plt.show()


 

To execute the script we run the following commands:

/Si-cutoff-pwtk$ python3 graphene-dos.py


We get the following picture:


 

 

 

Post a Comment

0 Comments