#!/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 pw.x and pwcond.x to calculate the" $ECHO "complex bands and the transmission coefficient of an open quantum" $ECHO "system." # set the needed environment variables . ../../../environment_variables # required executables and pseudopotentials BIN_LIST="pw.x pwcond.x" PSEUDO_LIST="H.pz-vbc.UPF Al.pz-vbc.UPF 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 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" PWCOND_COMMAND="$PARA_PREFIX $BIN_DIR/pwcond.x $PARA_POSTFIX" $ECHO $ECHO " running pw.x as: $PW_COMMAND" $ECHO " running pwcond.x as: $PWCOND_COMMAND" $ECHO # clean TMP_DIR $ECHO " cleaning $TMP_DIR...\c" rm -rf $TMP_DIR/pwscf* $ECHO " done" # self-consistent calculation for Al bulk along the 001 direction cat > al.scf.in << EOF &control calculation='scf' restart_mode='from_scratch', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' prefix='al' / &system ibrav = 6, celldm(1) =5.3, celldm(3) =1.414, nat= 2, ntyp= 1, ecutwfc = 15.0, occupations='smearing', smearing='mv', degauss=0.01 / &electrons conv_thr = 1.0e-8 mixing_beta = 0.7 / ATOMIC_SPECIES Al 26.98 Al.pz-vbc.UPF ATOMIC_POSITIONS Al 0. 0. 0.0 Al 0.5 0.5 0.707 K_POINTS (automatic) 4 4 4 1 1 1 EOF $ECHO " running the scf calculation for Al...\c" $PW_COMMAND < al.scf.in > al.scf.out check_failure $? $ECHO " done" # complex bands of Al along the 001 direction K_perp=0 cat > al.cond.in << EOF &inputcond outdir='$TMP_DIR/' prefixl='al' band_file ='bands.al' ikind=0 energy0=10.d0 denergy=-0.4d0 ewind=1.d0 epsproj=1.d-3 delgep = 1.d-12 cutplot = 3.d0 / 1 0.0 0.0 1.0 60 EOF $ECHO " running pwcond.x to calculate the complex bands of Al...\c" $PWCOND_COMMAND < al.cond.in > al.cond.out check_failure $? $ECHO " done" # self-consistent calculation for Al monatomic wire cat > alwire.scf.in << EOF &control calculation='scf' restart_mode='from_scratch', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' prefix='alw' / &system ibrav = 6, celldm(1) =12.0, celldm(3) =0.375, nat= 1, ntyp= 1, nspin = 1, ecutwfc = 15.0, occupations='smearing', smearing='mv', degauss=0.01 / &electrons conv_thr = 1.0e-8 mixing_beta = 0.7 / ATOMIC_SPECIES Al 26.98 Al.pz-vbc.UPF ATOMIC_POSITIONS Al 0.0 0.0 0.000 K_POINTS (automatic) 1 1 15 0 0 0 EOF $ECHO " running the scf calculation for Al monatomic wire...\c" $PW_COMMAND < alwire.scf.in > alwire.scf.out check_failure $? $ECHO " done" # complex bands of the Al monatomic wire cat > alwire.cond.in << EOF &inputcond outdir='$TMP_DIR/' prefixl='alw' band_file='bands.alwire' ikind=0 energy0=7.0d0 denergy=-0.2d0 ewind=1.d0 epsproj=1.d-3 nz1=3 cutplot = 1.d0 / 1 0. 0. 1.0 71 EOF $ECHO " running pwcond.x to calculate the complex bands of Al wire...\c" $PWCOND_COMMAND < alwire.cond.in > alwire.cond.out check_failure $? $ECHO " done" # self-consistent calculation for bulk Ni cat > ni.scf.in << EOF &control calculation='scf' restart_mode='from_scratch', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' prefix='ni' / &system ibrav = 6, celldm(1) =4.57, celldm(3) =1.414, nat= 2, ntyp= 1, nspin = 2, starting_magnetization(1)=0.7, ecutwfc = 25.0, ecutrho = 250.0 occupations='smearing', smearing='mv', degauss=0.01 / &electrons conv_thr = 1.0e-8 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.69 Ni.pz-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0. 0. 0. Ni 0.5 0.5 0.707 K_POINTS (automatic) 4 4 3 1 1 1 EOF $ECHO " running the scf calculation for Ni bulk...\c" $PW_COMMAND < ni.scf.in > ni.scf.out check_failure $? $ECHO " done" # complex bands of Ni cat > ni.cond.in << EOF &inputcond outdir='$TMP_DIR/' prefixl='ni' band_file = 'bands.ni_down' ikind=0 iofspin = 2 energy0=1.d0 denergy=-0.2d0 ewind=3.d0 epsproj=1.d-4 nz1=3 / 1 0.0 0.0 1.0 30 EOF $ECHO " running pwcond.x to calculate the complex bands of Ni...\c" $PWCOND_COMMAND < ni.cond.in > ni.cond.out check_failure $? $ECHO " done" # self-consistent calculation for Al monatomic wire cat > alwire1.scf.in << EOF &control calculation='scf' restart_mode='from_scratch', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' prefix='alw' / &system ibrav = 6, celldm(1) =12.0, celldm(3) =0.375, nat= 1, ntyp= 1, nspin = 1, ecutwfc = 25.0, ecutrho = 150.0 occupations='smearing', smearing='mv', degauss=0.01 / &electrons conv_thr = 1.0e-8 mixing_beta = 0.7 / ATOMIC_SPECIES Al 26.98 Al.pz-vbc.UPF ATOMIC_POSITIONS Al 0.0 0.0 0.000 K_POINTS (automatic) 2 2 24 1 1 1 EOF $ECHO " running the scf calculation for Al monatomic wire...\c" $PW_COMMAND < alwire1.scf.in > alwire1.scf.out check_failure $? $ECHO " done" # self-consistent calculation for Al-H-Al system cat > AlwireH.scf.in << EOF &control calculation='scf', restart_mode='from_scratch', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/', prefix='alh' / &system ibrav = 6, celldm(1) =12.0, celldm(3) =1.875, nat= 6, ntyp= 2, ecutwfc = 25.0, ecutrho = 150.0 occupations='smearing', smearing='mv', degauss=0.01 / &electrons conv_thr = 1.0e-8 mixing_beta = 0.7 / ATOMIC_SPECIES Al 26.98 Al.pz-vbc.UPF H 1.0 H.pz-vbc.UPF ATOMIC_POSITIONS Al 0.00000000 0.00000000 0.0000 Al 0.00000000 0.00000000 0.375 Al -0.02779870 0.00000000 .75537515 H 0.19269012 0.00000000 .93750000 Al -0.02779870 0.00000000 1.11962485 Al 0.00000000 0.00000000 1.5 K_POINTS (automatic) 2 2 2 1 1 1 EOF $ECHO " running the scf calculation for Al wire with H impurity...\c" $PW_COMMAND < AlwireH.scf.in > AlwireH.scf.out check_failure $? $ECHO " done" # transmission calculation for the perfect Al wire cat > AlwireAl.cond.in << EOF &inputcond outdir='$TMP_DIR/', prefixl='alw', prefixs='alw', tran_file='trans.alwire', ikind=1, energy0=2.95d0, denergy=-0.1d0, ewind=1.d0, epsproj=1.d-3, nz1 = 1 / 1 0.0 0.0 1.0 100 EOF $ECHO " running pwcond.x to calculate transmission of a perfect Al wire ...\c" $PWCOND_COMMAND < AlwireAl.cond.in > AlwireAl.cond.out check_failure $? $ECHO " done" # transmission calculation for the Al-C-Al cat > AlwireH.cond.in << EOF &inputcond outdir='$TMP_DIR/', prefixl='alw', prefixs='alh', tran_file='trans.alwireh', ikind = 1, energy0=3.d0, denergy=0.d0, ewind=1.d0, epsproj=1.d-3, nz1 = 1, / 1 0.0 0.0 1.0 18 3.0 2.7 2.5 1.6 1.0 0.9 0.1 -0.1 -0.25 -1.15 -1.45 -1.9 -3.0 -4.0 -5.0 -6.0 -6.2 -6.45 EOF $ECHO " running pwcond.x to calculate transmission of an Al wire with H...\c" $PWCOND_COMMAND < AlwireH.cond.in > AlwireH.cond.out check_failure $? $ECHO " done" $ECHO $ECHO "$EXAMPLE_DIR: done"