#!/bin/sh

# 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 pw.x and postprocessing codes to make a"
$ECHO "contour plot in the [110] plane of the charge density for Si, and to"
$ECHO "plot the band structure of Si."

# set the needed environment variables
. ../../../environment_variables

# required executables and pseudopotentials
BIN_LIST="pw.x pp.x plotrho.x bands.x plotband.x"
PSEUDO_LIST="Si.pz-vbc.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 \
                http://www.quantum-espresso.org/pseudo/1.3/UPF/$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
$ECHO " done"

# how to run executables
PW_COMMAND="$PARA_PREFIX $BIN_DIR/pw.x $PARA_POSTFIX"
PP_COMMAND="$PARA_PREFIX $BIN_DIR/pp.x $PARA_POSTFIX"
PLOTRHO_COMMAND="$BIN_DIR/plotrho.x"
BANDS_COMMAND="$PARA_PREFIX $BIN_DIR/bands.x $PARA_POSTFIX"
PLOTBAND_COMMAND="$BIN_DIR/plotband.x"
$ECHO
$ECHO "  running pw.x as:       $PW_COMMAND"
$ECHO "  running pp.x as:       $PP_COMMAND"
$ECHO "  running plotrho.x as:  $PLOTRHO_COMMAND"
$ECHO "  running bands.x as:    $BANDS_COMMAND"
$ECHO "  running plotband.x as: $PLOTBAND_COMMAND"
$ECHO

# clean TMP_DIR
$ECHO "  cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/*
$ECHO " done"

# self-consistent calculation
cat > si.scf.in << EOF
 &control
    calculation='scf'
    restart_mode='from_scratch',
    prefix='si'
    pseudo_dir = '$PSEUDO_DIR/',
    outdir='$TMP_DIR/'
 /
 &system
    ibrav= 2, celldm(1)= 10.2, nat= 2, ntyp= 1,
    ecutwfc =18.0
 /
 &electrons
    conv_thr =  1.0d-8
    mixing_beta = 0.7
 /
ATOMIC_SPECIES
 Si  28.086  Si.pz-vbc.UPF
ATOMIC_POSITIONS
 Si 0.00 0.00 0.00
 Si 0.25 0.25 0.25
K_POINTS
  10
   0.1250000  0.1250000  0.1250000   1.00
   0.1250000  0.1250000  0.3750000   3.00
   0.1250000  0.1250000  0.6250000   3.00
   0.1250000  0.1250000  0.8750000   3.00
   0.1250000  0.3750000  0.3750000   3.00
   0.1250000  0.3750000  0.6250000   6.00
   0.1250000  0.3750000  0.8750000   6.00
   0.1250000  0.6250000  0.6250000   3.00
   0.3750000  0.3750000  0.3750000   1.00
   0.3750000  0.3750000  0.6250000   3.00
EOF
$ECHO "  running the scf calculation...\c"
$PW_COMMAND < si.scf.in > si.scf.out
check_failure $?
$ECHO " done"

# post-processing for charge density
cat > si.pp_rho.in << EOF
 &inputpp
    prefix  = 'si'
    outdir = '$TMP_DIR/'
    filplot = 'sicharge'
    plot_num= 0
 /
 &plot
    nfile = 1
    filepp(1) = 'sicharge'
    weight(1) = 1.0
    iflag = 2
    output_format = 2
    fileout = 'si.rho.dat'
    e1(1) =1.0, e1(2)=1.0, e1(3) = 0.0,
    e2(1) =0.0, e2(2)=0.0, e2(3) = 1.0,
    nx=56, ny=40
 /
EOF
$ECHO "  running pp.x to do a 2-d plot of the charge density...\c"
$PP_COMMAND < si.pp_rho.in > si.pp_rho.out
check_failure $?
$ECHO " done"

# plotrho
cat > si.plotrho.in << EOF
si.rho.dat
si.rho.ps
n
0 0.09 6
EOF
$ECHO "  running plotrho.x to generate rho.ps...\c"
$PLOTRHO_COMMAND < si.plotrho.in > si.plotrho.out
$ECHO " done"

# band structure calculation along high-symmetry lines
cat > si.band.in << EOF
 &control
    calculation='bands'
    pseudo_dir = '$PSEUDO_DIR/',
    outdir='$TMP_DIR/',
    prefix='si'
 /
 &system
    ibrav=  2, celldm(1) =10.20, nat=  2, ntyp= 1,
    ecutwfc =18.0, nbnd = 8,
 /
 &electrons
 /
ATOMIC_SPECIES
 Si  28.086  Si.pz-vbc.UPF
ATOMIC_POSITIONS
 Si 0.00 0.00 0.00
 Si 0.25 0.25 0.25
K_POINTS
 36
   0.5 0.5 0.5  1
   0.4 0.4 0.4  2
   0.3 0.3 0.3  3
   0.2 0.2 0.2  4
   0.1 0.1 0.1  5
   0.0 0.0 0.0  6
   0.0 0.0 0.1  7
   0.0 0.0 0.2  8
   0.0 0.0 0.3  9
   0.0 0.0 0.4 10
   0.0 0.0 0.5 11
   0.0 0.0 0.6 12
   0.0 0.0 0.7 13
   0.0 0.0 0.8 14
   0.0 0.0 0.9 15
   0.0 0.0 1.0 16
   0.0 0.1 1.0 17
   0.0 0.2 1.0 18
   0.0 0.3 1.0 19
   0.0 0.4 1.0 20
   0.0 0.5 1.0 21
   0.0 0.6 1.0 22
   0.0 0.7 1.0 23
   0.0 0.8 1.0 24
   0.0 0.9 1.0 25
   0.0 1.0 1.0 26
   0.0 0.9 0.9 27
   0.0 0.8 0.8 28
   0.0 0.7 0.7 29
   0.0 0.6 0.6 30
   0.0 0.5 0.5 31
   0.0 0.4 0.4 32
   0.0 0.3 0.3 33
   0.0 0.2 0.2 34
   0.0 0.1 0.1 35
   0.0 0.0 0.0 36
EOF
$ECHO "  running the band-structure calculation for Si...\c"
$PW_COMMAND < si.band.in > si.band.out
check_failure $?
$ECHO " done"

# post-processing for band structure
cat > si.bands.in << EOF
 &bands
    prefix  = 'si'
    outdir = '$TMP_DIR/'
    filband = 'sibands.dat'
 /
EOF
$ECHO "  running the post-processing for band structure...\c"
$BANDS_COMMAND < si.bands.in > si.bands.out
check_failure $?
$ECHO " done"

# plotband.x
cat > si.plotband.in << EOF
sibands.dat
-6.0 10
sibands.xmgr
sibands.ps
6.255
1.0 6.255
EOF
$ECHO "  running plotband.x to generate sibands.ps...\c"
$PLOTBAND_COMMAND < si.plotband.in > si.plotband.out
check_failure $?
$ECHO " done"

$ECHO
$ECHO "$EXAMPLE_DIR: done"
