Subband structure of graphene nanoribbons: Difference between revisions
From phys824
Jump to navigationJump to search
Created page with "* [https://wiki.fysik.dtu.dk/ase/ase/structure.html Create GNR atom coordinates using ASE]" |
|||
| (21 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
* [https://wiki.fysik.dtu.dk/ase/ase/structure.html | ==Tools== | ||
* [https://wiki.fysik.dtu.dk/ase/ase/structure.html How to create GNR atom coordinates using ASE] | |||
==8-ZGNR using grid== | |||
*zgnr_grid.py: | |||
<pre> | |||
from gpaw import GPAW, FermiDirac | |||
from ase import Atoms | |||
from ase.io import read, write | |||
from gpaw import GPAW, PoissonSolver, Mixer | |||
from ase.structure import graphene_nanoribbon | |||
# ------------------------------------------------------------- | |||
# Bulk configuration | |||
# ------------------------------------------------------------- | |||
zgnr = graphene_nanoribbon(8, 1, type='zigzag', saturated=True, | |||
C_H=1.1, C_C=1.42086, vacuum=8.0, | |||
magnetic=False, initial_mag=0.0) | |||
zgnr.center() | |||
write('zgnr.traj', zgnr) | |||
# Make self-consistent calculation and save results | |||
calc = GPAW(h=0.18, | |||
mode='fd', | |||
xc='PBE', | |||
kpts=(1,1,9), | |||
maxiter=600, | |||
occupations=FermiDirac(width=0.05, maxiter=2000), | |||
mixer=Mixer(beta=0.010, nmaxold=8, weight=100.0), | |||
poissonsolver=PoissonSolver(eps=1e-12), | |||
txt='band_sc.txt') | |||
zgnr.set_calculator(calc) | |||
zgnr.get_potential_energy() | |||
calc.write('band_sc.gpw') | |||
# Calculate band structure along Gamma-X | |||
from ase.dft.kpoints import ibz_points, get_bandpath | |||
#points = ibz_points['fcc'] | |||
#G = points['Gamma'] | |||
#X = points['X'] | |||
G = (0, 0, 0) | |||
X = (0, 0, 0.5) | |||
kpts, x, X = get_bandpath([G, X], zgnr.cell, 60) | |||
calc = GPAW('band_sc.gpw', | |||
mode='fd', | |||
kpts=kpts, | |||
txt='band_harris.txt', | |||
fixdensity=True, | |||
maxiter=600, | |||
parallel={'domain': 1}, | |||
eigensolver='cg', # 'cg' is allowed for grid method only | |||
usesymm=None, | |||
convergence={'bands': 100}) | |||
# convergence={'bands': 'all'}) | |||
if calc.input_parameters['mode'] == 'lcao': | |||
calc.scf.reset() | |||
calc.get_potential_energy() | |||
ef = calc.get_fermi_level() | |||
calc.write('band_harris.gpw') | |||
calc = GPAW('band_harris', txt=None) | |||
import numpy as np | |||
eps_skn = np.array([[calc.get_eigenvalues(k,s) | |||
for k in range(60)] | |||
for s in range(1)]) - ef | |||
# Write the results to a file for plotting with some external package | |||
f = open('bands.dat', 'w') | |||
for n in range(66): | |||
for k in range(60): | |||
print >>f, k, eps_skn[0, k, n] | |||
print >>f | |||
</pre> | |||
==8-ZGNR using LCAO== | |||
*zgnr_lcao.py: | |||
<pre> | |||
from gpaw import GPAW, FermiDirac | |||
from ase import Atoms | |||
from ase.io import read, write | |||
from gpaw import GPAW, PoissonSolver, Mixer | |||
from ase.structure import graphene_nanoribbon | |||
# ------------------------------------------------------------- | |||
# Bulk configuration | |||
# ------------------------------------------------------------- | |||
zgnr = graphene_nanoribbon(8, 1, type='zigzag', saturated=True, | |||
C_H=1.1, C_C=1.42086, vacuum=8.0, | |||
magnetic=False, initial_mag=0.0) | |||
zgnr.center() | |||
write('zgnr.traj', zgnr) | |||
# Make self-consistent calculation and save results | |||
calc = GPAW(h=0.18, | |||
mode='lcao', | |||
xc='PBE', | |||
basis='szp(dzp)', | |||
kpts=(1,1,9), | |||
occupations=FermiDirac(width=0.05, maxiter=2000), | |||
mixer=Mixer(beta=0.010, nmaxold=8, weight=100.0), | |||
poissonsolver=PoissonSolver(eps=1e-12), | |||
txt='band_sc.txt') | |||
zgnr.set_calculator(calc) | |||
zgnr.get_potential_energy() | |||
calc.write('band_sc.gpw') | |||
# Calculate band structure along Gamma-X | |||
from ase.dft.kpoints import ibz_points, get_bandpath | |||
G = (0, 0, 0) | |||
X = (0, 0, 0.5) | |||
kpts, x, X = get_bandpath([G, X], zgnr.cell, 60) | |||
calc = GPAW('band_sc.gpw', | |||
mode='lcao', | |||
xc='PBE', | |||
basis='szp(dzp)', | |||
kpts=kpts, | |||
txt='band_harris.txt', | |||
fixdensity=True, | |||
parallel={'domain': 1}, | |||
usesymm=None, | |||
convergence={'bands': 'all'}) | |||
if calc.input_parameters['mode'] == 'lcao': | |||
calc.scf.reset() | |||
calc.get_potential_energy() | |||
ef = calc.get_fermi_level() | |||
calc.write('band_harris.gpw') | |||
calc = GPAW('band_harris', txt=None) | |||
import numpy as np | |||
eps_skn = np.array([[calc.get_eigenvalues(k,s) | |||
for k in range(60)] | |||
for s in range(1)]) - ef | |||
# Write the results to a file for plotting with some external package | |||
f = open('bands.dat', 'w') | |||
for n in range(66): | |||
for k in range(60): | |||
print >>f, k, eps_skn[0, k, n] | |||
print >>f | |||
</pre> | |||
Latest revision as of 14:47, 17 November 2014
Tools
8-ZGNR using grid
- zgnr_grid.py:
from gpaw import GPAW, FermiDirac
from ase import Atoms
from ase.io import read, write
from gpaw import GPAW, PoissonSolver, Mixer
from ase.structure import graphene_nanoribbon
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
zgnr = graphene_nanoribbon(8, 1, type='zigzag', saturated=True,
C_H=1.1, C_C=1.42086, vacuum=8.0,
magnetic=False, initial_mag=0.0)
zgnr.center()
write('zgnr.traj', zgnr)
# Make self-consistent calculation and save results
calc = GPAW(h=0.18,
mode='fd',
xc='PBE',
kpts=(1,1,9),
maxiter=600,
occupations=FermiDirac(width=0.05, maxiter=2000),
mixer=Mixer(beta=0.010, nmaxold=8, weight=100.0),
poissonsolver=PoissonSolver(eps=1e-12),
txt='band_sc.txt')
zgnr.set_calculator(calc)
zgnr.get_potential_energy()
calc.write('band_sc.gpw')
# Calculate band structure along Gamma-X
from ase.dft.kpoints import ibz_points, get_bandpath
#points = ibz_points['fcc']
#G = points['Gamma']
#X = points['X']
G = (0, 0, 0)
X = (0, 0, 0.5)
kpts, x, X = get_bandpath([G, X], zgnr.cell, 60)
calc = GPAW('band_sc.gpw',
mode='fd',
kpts=kpts,
txt='band_harris.txt',
fixdensity=True,
maxiter=600,
parallel={'domain': 1},
eigensolver='cg', # 'cg' is allowed for grid method only
usesymm=None,
convergence={'bands': 100})
# convergence={'bands': 'all'})
if calc.input_parameters['mode'] == 'lcao':
calc.scf.reset()
calc.get_potential_energy()
ef = calc.get_fermi_level()
calc.write('band_harris.gpw')
calc = GPAW('band_harris', txt=None)
import numpy as np
eps_skn = np.array([[calc.get_eigenvalues(k,s)
for k in range(60)]
for s in range(1)]) - ef
# Write the results to a file for plotting with some external package
f = open('bands.dat', 'w')
for n in range(66):
for k in range(60):
print >>f, k, eps_skn[0, k, n]
print >>f
8-ZGNR using LCAO
- zgnr_lcao.py:
from gpaw import GPAW, FermiDirac
from ase import Atoms
from ase.io import read, write
from gpaw import GPAW, PoissonSolver, Mixer
from ase.structure import graphene_nanoribbon
# -------------------------------------------------------------
# Bulk configuration
# -------------------------------------------------------------
zgnr = graphene_nanoribbon(8, 1, type='zigzag', saturated=True,
C_H=1.1, C_C=1.42086, vacuum=8.0,
magnetic=False, initial_mag=0.0)
zgnr.center()
write('zgnr.traj', zgnr)
# Make self-consistent calculation and save results
calc = GPAW(h=0.18,
mode='lcao',
xc='PBE',
basis='szp(dzp)',
kpts=(1,1,9),
occupations=FermiDirac(width=0.05, maxiter=2000),
mixer=Mixer(beta=0.010, nmaxold=8, weight=100.0),
poissonsolver=PoissonSolver(eps=1e-12),
txt='band_sc.txt')
zgnr.set_calculator(calc)
zgnr.get_potential_energy()
calc.write('band_sc.gpw')
# Calculate band structure along Gamma-X
from ase.dft.kpoints import ibz_points, get_bandpath
G = (0, 0, 0)
X = (0, 0, 0.5)
kpts, x, X = get_bandpath([G, X], zgnr.cell, 60)
calc = GPAW('band_sc.gpw',
mode='lcao',
xc='PBE',
basis='szp(dzp)',
kpts=kpts,
txt='band_harris.txt',
fixdensity=True,
parallel={'domain': 1},
usesymm=None,
convergence={'bands': 'all'})
if calc.input_parameters['mode'] == 'lcao':
calc.scf.reset()
calc.get_potential_energy()
ef = calc.get_fermi_level()
calc.write('band_harris.gpw')
calc = GPAW('band_harris', txt=None)
import numpy as np
eps_skn = np.array([[calc.get_eigenvalues(k,s)
for k in range(60)]
for s in range(1)]) - ef
# Write the results to a file for plotting with some external package
f = open('bands.dat', 'w')
for n in range(66):
for k in range(60):
print >>f, k, eps_skn[0, k, n]
print >>f