mirror of https://gitlab.com/QEF/q-e.git
353 lines
9.6 KiB
Bash
Executable File
353 lines
9.6 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
###############################################################################
|
|
##
|
|
## HIGH VERBOSITY EXAMPLE
|
|
##
|
|
###############################################################################
|
|
|
|
# run from directory where this script is
|
|
cd `echo $0 | sed 's/\(.*\)\/.*/\1/'` # extract pathname
|
|
EXAMPLE_DIR=`pwd`
|
|
|
|
# check whether echo has the -e option
|
|
if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi
|
|
|
|
$ECHO
|
|
$ECHO "$EXAMPLE_DIR : starting"
|
|
$ECHO
|
|
$ECHO "This example shows how to use pmw.x to generate better projectors for
|
|
$ECHO LDA+U calculation on FeO. Read file README for more details"
|
|
|
|
# set the needed environment variables
|
|
. ../../../environment_variables
|
|
|
|
# required executables and pseudopotentials
|
|
BIN_LIST="pw.x pmw.x projwfc.x bands.x plotband.x"
|
|
PSEUDO_LIST="O.pz-rrkjus.UPF Fe.pz-nd-rrkjus.UPF"
|
|
|
|
$ECHO
|
|
$ECHO " executables directory: $BIN_DIR"
|
|
$ECHO " pseudo directory: $PSEUDO_DIR"
|
|
$ECHO " temporary directory: $TMP_DIR"
|
|
$ECHO " checking that needed directories and files exist...\c"
|
|
|
|
# check for directories
|
|
for DIR in "$BIN_DIR" "$PSEUDO_DIR" ; do
|
|
if test ! -d $DIR ; then
|
|
$ECHO
|
|
$ECHO "ERROR: $DIR not existent or not a directory"
|
|
$ECHO "Aborting"
|
|
exit 1
|
|
fi
|
|
done
|
|
for DIR in "$TMP_DIR" "$EXAMPLE_DIR/results" ; do
|
|
if test ! -d $DIR ; then
|
|
mkdir $DIR
|
|
fi
|
|
done
|
|
cd $EXAMPLE_DIR/results
|
|
|
|
# check for executables
|
|
for FILE in $BIN_LIST ; do
|
|
if test ! -x $BIN_DIR/$FILE ; then
|
|
$ECHO
|
|
$ECHO "ERROR: $BIN_DIR/$FILE not existent or not executable"
|
|
$ECHO "Aborting"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# check for pseudopotentials
|
|
for FILE in $PSEUDO_LIST ; do
|
|
if test ! -r $PSEUDO_DIR/$FILE ; then
|
|
$ECHO
|
|
$ECHO "Downloading $FILE to $PSEUDO_DIR...\c"
|
|
$WGET $PSEUDO_DIR/$FILE $NETWORK_PSEUDO/$FILE 2> /dev/null
|
|
fi
|
|
if test $? != 0; then
|
|
$ECHO
|
|
$ECHO "ERROR: $PSEUDO_DIR/$FILE not existent or not readable"
|
|
$ECHO "Aborting"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# how to run executables
|
|
PW_COMMAND="$PARA_PREFIX $BIN_DIR/pw.x $PARA_POSTFIX"
|
|
PROJWFC_COMMAND="$PARA_PREFIX $BIN_DIR/projwfc.x $PARA_POSTFIX"
|
|
BANDS_COMMAND="$PARA_PREFIX $BIN_DIR/bands.x $PARA_POSTFIX"
|
|
PLOTBAND_COMMAND="$BIN_DIR/plotband.x"
|
|
PMW_COMMAND="$PARA_PREFIX $BIN_DIR/pmw.x $PARA_POSTFIX"
|
|
$ECHO
|
|
$ECHO " running pw.x as: $PW_COMMAND"
|
|
$ECHO " running pmw.x as: $PMW_COMMAND"
|
|
$ECHO " running projwfc.x as: $PROJWFC_COMMAND"
|
|
$ECHO " running bands.x as: $BANDS_COMMAND"
|
|
$ECHO " running plotband.x as: $PLOTBAND_COMMAND"
|
|
$ECHO
|
|
|
|
# self-consistent calculation with standard LDA
|
|
cat > feo_LDA.in << EOF
|
|
FeO Wustite in LDA
|
|
&control
|
|
calculation = 'scf'
|
|
restart_mode='from_scratch',
|
|
prefix='feo_af',
|
|
pseudo_dir = '$PSEUDO_DIR/',
|
|
outdir='$TMP_DIR/'
|
|
tprnfor = .true., tstress=.true.
|
|
/
|
|
&system
|
|
ibrav= 0, celldm(1)=8.19, nat= 4, ntyp= 3,
|
|
ecutwfc = 30.0, ecutrho = 240.0, nbnd=20,
|
|
starting_magnetization(1)= 0.0,
|
|
starting_magnetization(2)= 0.5,
|
|
starting_magnetization(3)=-0.5,
|
|
occupations='smearing', smearing='mv', degauss=0.01,
|
|
nspin=2,
|
|
lda_plus_u=.true. Hubbard_U(2)=1.d-8, Hubbard_U(3)=1.d-8,
|
|
/
|
|
&electrons
|
|
mixing_mode = 'plain'
|
|
mixing_beta = 0.3
|
|
conv_thr = 1.0d-6
|
|
mixing_fixed_ns = 0
|
|
/
|
|
CELL_PARAMETERS
|
|
0.50 0.50 1.00
|
|
0.50 1.00 0.50
|
|
1.00 0.50 0.50
|
|
ATOMIC_SPECIES
|
|
O1 1. O.pz-rrkjus.UPF
|
|
Fe1 1. Fe.pz-nd-rrkjus.UPF
|
|
Fe2 1. Fe.pz-nd-rrkjus.UPF
|
|
ATOMIC_POSITIONS {crystal}
|
|
O1 0.25 0.25 0.25
|
|
O1 0.75 0.75 0.75
|
|
Fe1 0.0 0.0 0.0
|
|
Fe2 0.5 0.5 0.5
|
|
K_POINTS {automatic}
|
|
2 2 2 0 0 0
|
|
EOF
|
|
$ECHO " 1) running scf for FeO in LDA ...\c"
|
|
$PW_COMMAND < feo_LDA.in > feo_LDA.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
|
|
# non-self-consistent LDA calculation for band structure plot
|
|
cat > feo_nscf.in << EOF
|
|
FeO Wustite in LDA
|
|
&control
|
|
calculation = 'bands'
|
|
restart_mode='from_scratch',
|
|
prefix='feo_af-bands',
|
|
pseudo_dir = '$PSEUDO_DIR/',
|
|
outdir='$TMP_DIR/'
|
|
tprnfor = .true., tstress=.true.
|
|
/
|
|
&system
|
|
ibrav= 0, celldm(1)=8.19, nat= 4, ntyp= 3,
|
|
ecutwfc = 30.0, ecutrho = 240.0, nbnd=24,
|
|
starting_magnetization(1)= 0.0,
|
|
starting_magnetization(2)= 0.5,
|
|
starting_magnetization(3)=-0.5,
|
|
occupations='smearing', smearing='mv', degauss=0.01,
|
|
nspin=2,
|
|
lda_plus_u=.true. Hubbard_U(2)=1.d-8, Hubbard_U(3)=1.d-8,
|
|
/
|
|
&electrons
|
|
mixing_mode = 'plain'
|
|
mixing_beta = 0.3
|
|
conv_thr = 1.0d-6
|
|
mixing_fixed_ns = 0
|
|
/
|
|
CELL_PARAMETERS
|
|
0.50 0.50 1.00
|
|
0.50 1.00 0.50
|
|
1.00 0.50 0.50
|
|
ATOMIC_SPECIES
|
|
O1 1. O.pz-rrkjus.UPF
|
|
Fe1 1. Fe.pz-nd-rrkjus.UPF
|
|
Fe2 1. Fe.pz-nd-rrkjus.UPF
|
|
ATOMIC_POSITIONS {crystal}
|
|
O1 0.25 0.25 0.25
|
|
O1 0.75 0.75 0.75
|
|
Fe1 0.0 0.0 0.0
|
|
Fe2 0.5 0.5 0.5
|
|
K_POINTS {crystal_b}
|
|
6
|
|
0.00 0.00 0.00 15 !G
|
|
0.00 0.50 0.00 6 !L
|
|
0.34375 0.8125 0.34375 14 !K'
|
|
0.50 0.50 0.50 8 !T
|
|
0.00 0.00 0.00 16 !G
|
|
0.00 0.50 0.50 0 !X
|
|
EOF
|
|
# copy restart directory from SCF run
|
|
test -d $TMP_DIR/feo_af-bands.save && rm -r $TMP_DIR/feo_af-bands.save
|
|
cp -r $TMP_DIR/feo_af.save $TMP_DIR/feo_af-bands.save
|
|
cp -f $TMP_DIR/feo_af.occup $TMP_DIR/feo_af-bands.occup
|
|
#
|
|
$ECHO " 2) running nscf for FeO band structure ...\c"
|
|
$PW_COMMAND < feo_nscf.in > feo_nscf.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
|
|
# symmetry analysis of LDA bands
|
|
cat > feo_bands.in << EOF
|
|
&bands
|
|
prefix = 'feo_af-bands',
|
|
outdir = '$TMP_DIR/',
|
|
lsym = .TRUE.,
|
|
filband = 'feo_af-bands.dat',
|
|
spin_component = 1,
|
|
/
|
|
EOF
|
|
$ECHO " 3) performing symmetry analisys of bands ...\c"
|
|
$BANDS_COMMAND < feo_bands.in > feo_bands.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
|
|
# projection onto atomic wave functions
|
|
cat > feo_proj.in << EOF
|
|
&projwfc
|
|
prefix = 'feo_af-bands',
|
|
outdir = '$TMP_DIR/',
|
|
lsym = .FALSE.,
|
|
filproj = 'feo_af-proj.dat'
|
|
/
|
|
EOF
|
|
$ECHO " 4) computing atomic projections of bands ...\c"
|
|
$PROJWFC_COMMAND < feo_proj.in > feo_proj.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
|
|
# plotband run using the projection weights from .proj to obtain "fat-bands"
|
|
# automatically extract Fermi energy from SCF calculation
|
|
eFermi=`grep Fermi feo_LDA.out | awk '{print $5}'`
|
|
# make a link to the projection file using the name expected by plotband.x
|
|
if test -L feo_af-bands.dat.proj; then rm feo_af-bands.dat.proj; fi
|
|
ln -s feo_af-proj.dat.*up feo_af-bands.dat.proj
|
|
# if feo_af-bands.dat.proj is found, one must supply an additional line with
|
|
# the list of atomic wavefunctions (here, the 3d of both Fe ions)
|
|
cat > feo_plot.in << EOF
|
|
feo_af-bands.dat
|
|
10 11 12 13 14 16 17 18 19 20
|
|
-11.0 25.0
|
|
feo_af.bands
|
|
feo_af.bands.ps
|
|
$eFermi
|
|
2.0 $eFermi
|
|
EOF
|
|
$ECHO " 5) using plotband to obtain fat bands for Fe 3d states ...\c"
|
|
$PLOTBAND_COMMAND < feo_plot.in > feo_plot.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
# merging all bands.?.? files produced by plotband in a single file,
|
|
# but separated by double blank lines (Gnuplot record style): in this
|
|
# way the can be plotted by Gnuplot with one single command
|
|
$ECHO "# Merging feo_af.bands.[0-9].[0-9] files as gnuplot records" > feo_af.bands.all
|
|
for filgnu in feo_af.bands.[0-9].[0-9];
|
|
do
|
|
cat $filgnu >> feo_af.bands.all
|
|
$ECHO "\n" >> feo_af.bands.all
|
|
done
|
|
## remove all those files?
|
|
#rm feo_af.bands.[0-9].[0-9]
|
|
# Gnuplot script to plot weighted-bands colored according to the weight
|
|
cat > plot.gnu << EOF
|
|
#!/usr/bin/gnuplot
|
|
|
|
set xrange [0.0:3.1868]
|
|
unset xtics
|
|
set yrange [-21.0:15.0]
|
|
set ylabel 'E - E_F (eV)'
|
|
|
|
set border lw 2
|
|
set style arrow 1 nohead front lw 2 lc rgb 'black'
|
|
set label 'G' at graph 0,graph -0.03 center
|
|
set arrow from 0.8292,graph 0 to 0.8292,graph 1 as 1
|
|
set label 'L' at 0.8292, graph -0.03 center
|
|
set arrow from 1.1223,graph 0 to 1.1223,graph 1 as 1
|
|
set label "K'" at 1.1223,graph -0.03 center
|
|
set arrow from 1.8878,graph 0 to 1.8878,graph 1 as 1
|
|
set label 'T' at 1.8878, graph -0.03 center
|
|
set arrow from 2.3208,graph 0 to 2.3208,graph 1 as 1
|
|
set label 'G' at 2.3208, graph -0.03 center
|
|
set label 'X' at graph 1,graph -0.03 center
|
|
|
|
plot 'feo_af.bands.all' u 1:(\$2 - $eFermi):3 w l palette lw 2 notitle, \\
|
|
0.0 lt 1 lw 2 lc rgb 'grey50' notitle
|
|
|
|
EOF
|
|
|
|
# build projected-Wannier functions for Fe 3d states
|
|
$ECHO " 6) running poormanwannier post-processing to build Wannier projectors ...\c"
|
|
cat > pmw.in << EOF
|
|
&inputpp
|
|
outdir='$TMP_DIR/',
|
|
prefix='feo_af',
|
|
first_band=9, last_band=20,
|
|
/
|
|
EOF
|
|
$PMW_COMMAND < pmw.in > pmw.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
|
|
# self-consistent calculation with user defined ns + Wannier
|
|
cat > feo_wannier.in << EOF
|
|
FeO Wustite whithin LDA+U with user defined ns + Wannier
|
|
&control
|
|
calculation = 'scf'
|
|
restart_mode='from_scratch',
|
|
prefix='feo_af',
|
|
pseudo_dir = '$PSEUDO_DIR/',
|
|
outdir='$TMP_DIR/'
|
|
/
|
|
&system
|
|
ibrav= 0, celldm(1)=8.19, nat= 4, ntyp= 3,
|
|
ecutwfc = 30.0, ecutrho = 240.0, nbnd=20,
|
|
starting_magnetization(1)= 0.0,
|
|
starting_magnetization(2)= 0.5,
|
|
starting_magnetization(3)=-0.5,
|
|
occupations='smearing', smearing='mv', degauss=0.01,
|
|
nspin=2,
|
|
lda_plus_u=.true., Hubbard_U(2)=4.3, Hubbard_U(3)=4.3,
|
|
U_projection_type='file'
|
|
starting_ns_eigenvalue(3,2,2) = 1.d0
|
|
starting_ns_eigenvalue(3,1,3) = 1.d0
|
|
/
|
|
&electrons
|
|
mixing_mode = 'plain'
|
|
mixing_beta = 0.3
|
|
conv_thr = 1.0d-6
|
|
mixing_fixed_ns = 0
|
|
/
|
|
CELL_PARAMETERS
|
|
0.50 0.50 1.00
|
|
0.50 1.00 0.50
|
|
1.00 0.50 0.50
|
|
ATOMIC_SPECIES
|
|
O1 1. O.pz-rrkjus.UPF
|
|
Fe1 1. Fe.pz-nd-rrkjus.UPF
|
|
Fe2 1. Fe.pz-nd-rrkjus.UPF
|
|
ATOMIC_POSITIONS {crystal}
|
|
O1 0.25 0.25 0.25
|
|
O1 0.75 0.75 0.75
|
|
Fe1 0.0 0.0 0.0
|
|
Fe2 0.5 0.5 0.5
|
|
K_POINTS {automatic}
|
|
2 2 2 0 0 0
|
|
EOF
|
|
$ECHO " 7) running scf for FeO in LDA+U using Wannier projectors...\c"
|
|
$PW_COMMAND < feo_wannier.in > feo_wannier.out
|
|
check_failure $?
|
|
$ECHO " done"
|
|
|
|
$ECHO " cleaning $TMP_DIR...\c"
|
|
rm -rf $TMP_DIR/feo_af.*
|
|
|
|
$ECHO
|
|
$ECHO "$EXAMPLE_DIR : done"
|