#!/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 PostProc codes to calculate the DOS of Ni." # set the needed environment variables . ../../../environment_variables # required executables and pseudopotentials BIN_LIST="pw.x dos.x projwfc.x fs.x" PSEUDO_LIST="Ni.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 gnuplot GP_COMMAND=`which gnuplot 2>/dev/null` if [ "$GP_COMMAND" = "" ]; then $ECHO $ECHO "gnuplot not in PATH" $ECHO "Results will not be plotted" fi # 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 $ECHO " done" # how to run executables 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" FS_COMMAND="$BIN_DIR/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 gnuplot as: $GP_COMMAND" $ECHO " running fs.x as: $FS_COMMAND" $ECHO # self-consistent calculation 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, nspin = 2, starting_magnetization(1)=0.7, ecutwfc = 24.0, ecutrho = 288.0, occupations='smearing', smearing='mv', degauss=0.02 / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0.0 0.0 0.0 K_POINTS 60 0.0625000 0.0625000 0.0625000 1.00 0.0625000 0.0625000 0.1875000 3.00 0.0625000 0.0625000 0.3125000 3.00 0.0625000 0.0625000 0.4375000 3.00 0.0625000 0.0625000 0.5625000 3.00 0.0625000 0.0625000 0.6875000 3.00 0.0625000 0.0625000 0.8125000 3.00 0.0625000 0.0625000 0.9375000 3.00 0.0625000 0.1875000 0.1875000 3.00 0.0625000 0.1875000 0.3125000 6.00 0.0625000 0.1875000 0.4375000 6.00 0.0625000 0.1875000 0.5625000 6.00 0.0625000 0.1875000 0.6875000 6.00 0.0625000 0.1875000 0.8125000 6.00 0.0625000 0.1875000 0.9375000 6.00 0.0625000 0.3125000 0.3125000 3.00 0.0625000 0.3125000 0.4375000 6.00 0.0625000 0.3125000 0.5625000 6.00 0.0625000 0.3125000 0.6875000 6.00 0.0625000 0.3125000 0.8125000 6.00 0.0625000 0.3125000 0.9375000 6.00 0.0625000 0.4375000 0.4375000 3.00 0.0625000 0.4375000 0.5625000 6.00 0.0625000 0.4375000 0.6875000 6.00 0.0625000 0.4375000 0.8125000 6.00 0.0625000 0.4375000 0.9375000 6.00 0.0625000 0.5625000 0.5625000 3.00 0.0625000 0.5625000 0.6875000 6.00 0.0625000 0.5625000 0.8125000 6.00 0.0625000 0.6875000 0.6875000 3.00 0.0625000 0.6875000 0.8125000 6.00 0.0625000 0.8125000 0.8125000 3.00 0.1875000 0.1875000 0.1875000 1.00 0.1875000 0.1875000 0.3125000 3.00 0.1875000 0.1875000 0.4375000 3.00 0.1875000 0.1875000 0.5625000 3.00 0.1875000 0.1875000 0.6875000 3.00 0.1875000 0.1875000 0.8125000 3.00 0.1875000 0.3125000 0.3125000 3.00 0.1875000 0.3125000 0.4375000 6.00 0.1875000 0.3125000 0.5625000 6.00 0.1875000 0.3125000 0.6875000 6.00 0.1875000 0.3125000 0.8125000 6.00 0.1875000 0.4375000 0.4375000 3.00 0.1875000 0.4375000 0.5625000 6.00 0.1875000 0.4375000 0.6875000 6.00 0.1875000 0.4375000 0.8125000 6.00 0.1875000 0.5625000 0.5625000 3.00 0.1875000 0.5625000 0.6875000 6.00 0.1875000 0.6875000 0.6875000 3.00 0.3125000 0.3125000 0.3125000 1.00 0.3125000 0.3125000 0.4375000 3.00 0.3125000 0.3125000 0.5625000 3.00 0.3125000 0.3125000 0.6875000 3.00 0.3125000 0.4375000 0.4375000 3.00 0.3125000 0.4375000 0.5625000 6.00 0.3125000 0.4375000 0.6875000 6.00 0.3125000 0.5625000 0.5625000 3.00 0.4375000 0.4375000 0.4375000 1.00 0.4375000 0.4375000 0.5625000 3.00 EOF $ECHO " running the scf calculation for Ni...\c" $PW_COMMAND < ni.scf.in > ni.scf.out check_failure $? $ECHO " done" # band structure calculation along Delta and Sigma lines cat > ni.band.in << EOF &control calculation='bands' restart_mode='from_scratch', prefix='ni', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' / &system ibrav=2, celldm(1) =6.48, nat=1, ntyp=1, nspin = 2, starting_magnetization(1)=0.7, ecutwfc = 24.0, ecutrho = 288.0, occupations='smearing', smearing='mv', degauss=0.02 / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0.0 0.0 0.0 K_POINTS 97 1.000000000 0.000000000 0.000000000 1 0.975000000 0.000000000 0.000000000 2 0.950000000 0.000000000 0.000000000 3 0.925000000 0.000000000 0.000000000 4 0.900000000 0.000000000 0.000000000 5 0.875000000 0.000000000 0.000000000 6 0.850000000 0.000000000 0.000000000 7 0.825000000 0.000000000 0.000000000 8 0.800000000 0.000000000 0.000000000 9 0.775000000 0.000000000 0.000000000 10 0.750000000 0.000000000 0.000000000 11 0.725000000 0.000000000 0.000000000 12 0.700000000 0.000000000 0.000000000 13 0.675000000 0.000000000 0.000000000 14 0.650000000 0.000000000 0.000000000 15 0.625000000 0.000000000 0.000000000 16 0.600000000 0.000000000 0.000000000 17 0.575000000 0.000000000 0.000000000 18 0.550000000 0.000000000 0.000000000 19 0.525000000 0.000000000 0.000000000 20 0.500000000 0.000000000 0.000000000 21 0.475000000 0.000000000 0.000000000 22 0.450000000 0.000000000 0.000000000 23 0.425000000 0.000000000 0.000000000 24 0.400000000 0.000000000 0.000000000 25 0.375000000 0.000000000 0.000000000 26 0.350000000 0.000000000 0.000000000 27 0.325000000 0.000000000 0.000000000 28 0.300000000 0.000000000 0.000000000 29 0.275000000 0.000000000 0.000000000 30 0.250000000 0.000000000 0.000000000 31 0.225000000 0.000000000 0.000000000 32 0.200000000 0.000000000 0.000000000 33 0.175000000 0.000000000 0.000000000 34 0.150000000 0.000000000 0.000000000 35 0.125000000 0.000000000 0.000000000 36 0.100000000 0.000000000 0.000000000 37 0.075000000 0.000000000 0.000000000 38 0.050000000 0.000000000 0.000000000 39 0.025000000 0.000000000 0.000000000 40 0.000000000 0.000000000 0.000000000 41 0.017857142 0.017857142 0.000000000 42 0.035714285 0.035714285 0.000000000 43 0.053571428 0.053571428 0.000000000 44 0.071428571 0.071428571 0.000000000 45 0.089285714 0.089285714 0.000000000 46 0.107142857 0.107142857 0.000000000 47 0.125000000 0.125000000 0.000000000 48 0.142857142 0.142857142 0.000000000 49 0.160714285 0.160714285 0.000000000 50 0.178571428 0.178571428 0.000000000 51 0.196428571 0.196428571 0.000000000 52 0.214285714 0.214285714 0.000000000 53 0.232142857 0.232142857 0.000000000 54 0.250000000 0.250000000 0.000000000 55 0.267857142 0.267857142 0.000000000 56 0.285714285 0.285714285 0.000000000 57 0.303571428 0.303571428 0.000000000 58 0.321428571 0.321428571 0.000000000 59 0.339285714 0.339285714 0.000000000 60 0.357142857 0.357142857 0.000000000 61 0.375000000 0.375000000 0.000000000 62 0.392857142 0.392857142 0.000000000 63 0.410714285 0.410714285 0.000000000 64 0.428571428 0.428571428 0.000000000 65 0.446428571 0.446428571 0.000000000 66 0.464285714 0.464285714 0.000000000 67 0.482142857 0.482142857 0.000000000 68 0.500000000 0.500000000 0.000000000 69 0.517857142 0.517857142 0.000000000 70 0.535714285 0.535714285 0.000000000 71 0.553571428 0.553571428 0.000000000 72 0.571428571 0.571428571 0.000000000 73 0.589285714 0.589285714 0.000000000 74 0.607142857 0.607142857 0.000000000 75 0.625000000 0.625000000 0.000000000 76 0.642857142 0.642857142 0.000000000 77 0.660714285 0.660714285 0.000000000 78 0.678571428 0.678571428 0.000000000 79 0.696428571 0.696428571 0.000000000 80 0.714285714 0.714285714 0.000000000 81 0.732142857 0.732142857 0.000000000 82 0.750000000 0.750000000 0.000000000 83 0.767857142 0.767857142 0.000000000 84 0.785714285 0.785714285 0.000000000 85 0.803571428 0.803571428 0.000000000 86 0.821428571 0.821428571 0.000000000 87 0.839285714 0.839285714 0.000000000 88 0.857142857 0.857142857 0.000000000 89 0.875000000 0.875000000 0.000000000 90 0.892857142 0.892857142 0.000000000 91 0.910714285 0.910714285 0.000000000 92 0.928571428 0.928571428 0.000000000 93 0.946428571 0.946428571 0.000000000 94 0.964285714 0.964285714 0.000000000 95 0.982142857 0.982142857 0.000000000 96 1.000000000 1.000000000 0.000000000 97 EOF $ECHO " running the band-structure calculation for Ni...\c" $PW_COMMAND < ni.band.in > ni.band.out check_failure $? $ECHO " done" # K-resolved PDOS calculation along Delta and Sigma lines computed above cat > ni.kpdos.in << EOF &projwfc outdir='$TMP_DIR/' prefix='ni' ngauss=0, degauss=0.036748 DeltaE=0.01 kresolveddos=.true. filpdos='ni.k' / EOF $ECHO " running k-resolved PDOS calculation for Ni...\c" $PROJWFC_COMMAND < ni.kpdos.in > ni.kpdos.out check_failure $? $ECHO " done" # # if gnuplot was found, the results are plotted # if [ "$GP_COMMAND" = "" ]; then break else cat > gnuplot.tmp < ni.dos.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, nspin = 2, starting_magnetization(1)=0.7, ecutwfc = 24.0, ecutrho = 288.0, nbnd=8, occupations='tetrahedra' / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0.0 0.0 0.0 K_POINTS {automatic} 12 12 12 0 0 0 EOF cat > ni.dos2.in << EOF &dos outdir='$TMP_DIR/' prefix='ni' fildos='ni.dos', Emin=5.0, Emax=25.0, DeltaE=0.1 / EOF $ECHO " running DOS calculation for Ni...\c" $PW_COMMAND < ni.dos.in > ni.dos.out check_failure $? $DOS_COMMAND < ni.dos2.in > ni.dos2.out check_failure $? $ECHO " done" cat > ni.pdos.in << EOF &projwfc outdir='$TMP_DIR/' prefix='ni' Emin=5.0, Emax=25.0, DeltaE=0.1 ngauss=1, degauss=0.02 / EOF $ECHO " running PDOS calculation for Ni...\c" $PROJWFC_COMMAND < ni.pdos.in > ni.pdos.out check_failure $? $ECHO " done" $ECHO $ECHO " Fermi Surface plot Spin-Polarized case..." # self-consistent calculation - Spin-Polarized (SP) case cat > ni.scf_SP.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='mv', degauss=0.02 nspin=2, starting_magnetization(1)=0.8 / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.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 spin-polarization ... \c" $PW_COMMAND < ni.scf_SP.in > ni.scf0.SP.out check_failure $? $ECHO " done" cat > ni.fs_SP.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 nspin=2, starting_magnetization(1)=0.8 occupations='tetrahedra' / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0.0 0.0 0.0 K_POINTS {automatic} 16 16 16 0 0 0 EOF $ECHO " running the Fermi Surface calculation ... \c" $PW_COMMAND < ni.fs_SP.in > ni.fs_SP.out check_failure $? $ECHO " done" cat > FS.in < FS.out check_failure $? $ECHO $ECHO " Use 'xcrysden --bxsf results/ni_fsXX.bxsf', XX=up,dw to plot the Fermi Surface\c" $ECHO " done" ################## $ECHO $ECHO " Fermi Surface plot Non-Spin-Polarized (NSP) case..." # self-consistent calculation - Non-Spin-Polarised case cat > ni.scf_NSP.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='mv', degauss=0.02 / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.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 non spin-polarized case ... \c" $PW_COMMAND < ni.scf_NSP.in > ni.scf0.NSP.out check_failure $? $ECHO " done" cat > ni.fs_NSP.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 occupations='tetrahedra' / &electrons conv_thr = 1.0e-10 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0.0 0.0 0.0 K_POINTS automatic 16 16 16 0 0 0 EOF $ECHO " running the Fermi Surface calculation ... \c" $PW_COMMAND < ni.fs_NSP.in > ni.fs_NSP.out check_failure $? $ECHO " done" cat > FS.in < FS.out check_failure $? $ECHO $ECHO " Use 'xcrysden --bxsf results/ni_fs.bxsf' to plot the Fermi Surface\c" $ECHO " done" $ECHO " cleaning $TMP_DIR...\c" rm -rf $TMP_DIR/ni.* $ECHO $ECHO "$EXAMPLE_DIR: done"