Example: LDOS (STM) for a BN slab¶
The Local DOS (LDOS) is the partial density due to bands withing a certain energy interval. It has been related to STM images.
# The BN slab has a band gap
# The bottom of the conduction band (BOCB, 0.05 hartree above the fermi level) consists of p_z orbitals on B
# The top of the valence band (TOVB, 0.2 hartree under the fermi level) consists of p_z oribtals on N
# It is recommended to inspect BNSlab.results with amsbands
# and BNSlab.ldos.tovb.results with amsview (and the same for bocb)
system=BNSlab
export AMS_JOBNAME=$system
rm -rf $AMS_JOBNAME.results
$AMSBIN/ams<<EOF
Task SinglePoint
System
Atoms
B -0.615000000 -0.355070416 0.000000000
N 0.615000000 0.355070416 0.000000000
End
Lattice
2.460000000 0.000000000 0.000000000
1.230000000 2.130422493 0.000000000
End
End
Engine Band
BandStructure Enabled=yes
Dos CalcPDOS=yes
kspace quality=good
EndEngine
EOF
fermi_energy=`$AMSBIN/amsreport $AMS_JOBNAME.results/band.rkf -r "BandStructure%FermiEnergy"`
bcb=`$AMSBIN/amsreport $AMS_JOBNAME.results/band.rkf -r "BandStructure%BottomConductionBand"`
tvb=`$AMSBIN/amsreport $AMS_JOBNAME.results/band.rkf -r "BandStructure%TopValenceBand"`
echo "Fermi energy (Hartree): $fermi_energy"
echo "tvb (Hartree): $tvb"
echo "bcb (Hartree): $bcb"
rel_tvb=`$AMSBIN/amspython -c "print($fermi_energy-$tvb)"`
rel_bcb=`$AMSBIN/amspython -c "print($bcb-$fermi_energy)"`
echo "rel_bcb (Hartree): $rel_bcb"
echo "rel_tvb (Hartree): $rel_tvb"
# we want to sample just a bit above/below the bcb and tvb: both need a margin
# the applied margins here are quite arbitrary, but ensure that the example works exactly as before
rel_tvb_with_margin=`$AMSBIN/amspython -c "print($rel_tvb+0.0585153984080739)"`
rel_bcb_with_margin=`$AMSBIN/amspython -c "print($rel_bcb+0.0205273425101303)"`
echo "rel_bcb_with_margin (Hartree): $rel_bcb_with_margin"
echo "rel_tvb_with_margin (Hartree): $rel_tvb_with_margin"
export AMS_JOBNAME=$system.ldos.bocb
rm -rf $AMS_JOBNAME.results
$AMSBIN/ams --delete-old-results << EOF
Task SinglePoint
LoadSystem
File $system.results/ams.rkf
End
Engine BAND
Restart
File $system.results/band.rkf
DensityPlot
End
Grid
Type Coarse
End
DensityPlot
LDOS
End
LDOS
DeltaNeg 0.0 # fermi energy, halfway the gap
DeltaPos $rel_bcb_with_margin # bit above the bcb
End
EndEngine
EOF
export AMS_JOBNAME=$system.ldos.tovb
rm -rf $AMS_JOBNAME.results
$AMSBIN/ams --delete-old-results << EOF
Task SinglePoint
LoadSystem
File $system.results/ams.rkf
End
Engine BAND
Restart
File $system.results/band.rkf
DensityPlot
End
Grid
Type Coarse
End
DensityPlot
LDOS
End
LDOS
DeltaNeg $rel_tvb_with_margin # bit below the tvb
DeltaPos 0.0 # fermi energy, halfway the gap
End
EndEngine
EOF
echo "Begin TOC of tape41 (tovb)"
$AMSBIN/dmpkf -n 1 $system.ldos.tovb.results/TAPE41 --toc | grep LDOS
echo "End TOC of tape41"
echo "Begin TOC of tape41 (bocb)"
$AMSBIN/dmpkf -n 1 $system.ldos.bocb.results/TAPE41 --toc | grep LDOS
echo "End TOC of tape41"