Example for Fermi Surface plot added to example 8

git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@2147 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
giannozz 2005-08-31 14:57:41 +00:00
parent 9c8c3f0b1c
commit 81ea395f57
2 changed files with 162 additions and 3 deletions

View File

@ -1,6 +1,6 @@
This example shows how to use pw.x and dos.x to calculate the
Density of States (DOS) of Ni .
This example shows how to calculate the Density of States (DOS) and
how to plot the Fermi Surface of Ni .
The calculation proceeds as follows (for the meaning of the cited input
variables see the appropriate INPUT_* file)
@ -25,3 +25,53 @@ variables see the appropriate INPUT_* file)
'ni.pdos_tot', s and d component in files 'ni.pdos_atm#1(Ni)_wfc#1(s)'
and 'ni.pdos_atm#1(Ni)_wfc#2(d)' respectively). (input=ni.pdos.in,
output=ni.pdos.in)
5) Fermi Surface plot, courtesy of
Eyvaz Isaev
Theoretical Physics Department
Moscow State Institute of Steel and Alloys
(eyvaz_isaev@yahoo.com, e.isaev@misis.ru)
First, one generates a grid of k-points (all of them, not only those
in the Irreducible Brilloin Zone) using auxiliary code kvecs_FS.x
Then, the non-scf calculation is performed
Then, auxiliary code bands_FS.x collects the data and produces a
file ni.fs.bxsf that can be read by XCrySDen (www.xcrysden.org) as:
xcrysden --bxsf ni.fs.bxsf
Additional info for customization of the script:
#
# A user has to edit so-called "user part" in order to define some required
# parameters.
#
# Sysname - a nickname for your system
# Calc_Type - The Fermi Surface calculations (FS) or band-structure
# calculations (Band) which will be included later.
# Presently band-structure calculations could be carried out
# by means of plotband.x from PP (postprocessing) directory
# or a little package distributed by E.Isaev (posted to pw_forum).
# nabc - a number for dividing of each edge of a parallelepiped.
# Be careful, the total number of generated k-points is
# (na+1)*(nb+1)*(nc+1), i.e. including \Gamma-point.
# n_start - starting band's number for the Fermi Surface calculations.
# It is obvious, we have to deal with the bands crossing the
# Fermi level.
# n_last - last band's number for FS calculations
#
# That's all!!! Present values in the script (may be edited):
Sysname='ni'
Calc_Type='FS'
nabc=' 16 16 16 '
n_start=2
n_last=5
#
#
# Nota Bene : You can take more bands and then choose from a XCrySDen menu
# only those bands which cross the Fermi level
# Nota Bene : If you have mistaken choosing bands to be considered for the
# FS construction, you do not need to restart all calculations.
# Just edit "bands_FS" file and restart "bands_FS.x" manually.
# It will read Bands.out and result Bands.bxsf which you can
# rename as you like.
#
# Spin-polarized calculations are not allowed, but will be done soon.

View File

@ -16,7 +16,7 @@ $ECHO "This example shows how to use pw.x to calculate the DOS of Ni."
. ../environment_variables
# required executables and pseudopotentials
BIN_LIST="pw.x dos.x projwfc.x"
BIN_LIST="pw.x dos.x projwfc.x kvecs_FS.x bands_FS.x"
PSEUDO_LIST="NiUS.RRKJ3.UPF"
$ECHO
@ -66,10 +66,14 @@ $ECHO " done"
PW_COMMAND="$PARA_PREFIX $BIN_DIR/pw.x $PARA_POSTFIX"
DOS_COMMAND="$PARA_PREFIX $BIN_DIR/dos.x $PARA_POSTFIX"
PROJWFC_COMMAND="$PARA_PREFIX $BIN_DIR/projwfc.x $PARA_POSTFIX"
KVECS_COMMAND="$BIN_DIR/kvecs_FS.x "
BANDS_COMMAND="$BIN_DIR/bands_FS.x "
$ECHO
$ECHO " running pw.x as: $PW_COMMAND"
$ECHO " running dos.x as: $DOS_COMMAND"
$ECHO " running projwfc.x as: $PROJWFC_COMMAND"
$ECHO " running kvecs_FS.x as: $KVECS_COMMAND"
$ECHO " running bands_FS.x as: $BANDS_COMMAND"
$ECHO
# clean TMP_DIR
@ -219,5 +223,110 @@ $ECHO " running PDOS calculation for Ni...\c"
$PROJWFC_COMMAND < ni.pdos.in > ni.pdos.out
$ECHO " done"
$ECHO " Fermi Surface plot ...\c"
# self-consistent calculation - spin-unpolarised this tie
cat > ni.scf.in << EOF
&control
calculation='scf'
restart_mode='from_scratch',
prefix='ni',
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
/
&system
ibrav=2, celldm(1) =6.48, nat=1, ntyp=1,
ecutwfc = 24.0, ecutrho = 288.0,
occupations='smearing', smearing='methfessel-paxton', degauss=0.02
/
&electrons
conv_thr = 1.0e-8
mixing_beta = 0.7
/
ATOMIC_SPECIES
Ni 58.69 NiUS.RRKJ3.UPF
ATOMIC_POSITIONS
Ni 0.0 0.0 0.0
K_POINTS {automatic}
8 8 8 0 0 0
EOF
$ECHO " running the scf calculation (no spin) ... \c"
$PW_COMMAND < ni.scf.in > ni.scf0.out
$ECHO " done"
#
# prepare input file ni.fs.in
#
Sysname='ni'
Calc_Type='FS'
nabc=' 12 12 12 '
n_start=3
n_last=6
#
E_Fermi=`grep Fermi ni.scf0.out | cut -c 26-36`
a1=`grep 'b(1)' ni.scf.out | cut -c 24-54`
a2=`grep 'b(2)' ni.scf.out | cut -c 24-54`
a3=`grep 'b(3)' ni.scf.out | cut -c 24-54`
cat > kvecs_FS.in <<EOF
$a1
$a2
$a3
$nabc
$Sysname
EOF
$KVECS_COMMAND < kvecs_FS.in > kvecs_FS,out
cat > ni.fs.in << EOF
&control
calculation='nscf'
prefix='ni',
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
/
&system
ibrav=2, celldm(1) =6.48, nat=1, ntyp=1,
ecutwfc = 24.0, ecutrho = 288.0, nbnd=8
/
&electrons
conv_thr = 1.0e-8
mixing_beta = 0.7
/
ATOMIC_SPECIES
Ni 58.69 NiUS.RRKJ3.UPF
ATOMIC_POSITIONS
Ni 0.0 0.0 0.0
K_POINTS
EOF
cat kvecs_$Sysname >> ni.fs.in
# input file ni.fs.in ready
$ECHO " running the Fermi Surface calculation ... \c"
$PW_COMMAND < ni.fs.in > ni.fs.out
$ECHO " done"
# prepare input data (input_FS, Bands.out) for bands_FS
mv ni.fs.out Bands.out
cat > input_FS <<EOF
$n_start $n_last
$E_Fermi
$Sysname
$Calc_Type
$nabc
$a1
$a2
$a3
EOF
$BANDS_COMMAND > bands_fs.out
mv Bands.bxsf ni.fs.bxsf
$ECHO " Fermi surface plot: use 'xcrysden --bxsf ni.fs.bxsf' to plot ...\c"
$ECHO " done"
$ECHO
$ECHO "$EXAMPLE_DIR: done"