#!/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 head.x pw4gww.x gww. x to calculate" $ECHO "the GW QP levels of bulk Si" # set the needed environment variables . ../../../environment_variables # required executables and pseudopotentials BIN_LIST="pw.x head.x pw4gww.x gww.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 $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 " $ECHO $ECHO " running pw.x as: $PW_COMMAND" $ECHO HEAD_COMMAND="$PARA_PREFIX $BIN_DIR/head.x " $ECHO $ECHO " running pw.x as: $HEAD_COMMAND" $ECHO PW4GWW_COMMAND="$PARA_PREFIX $BIN_DIR/pw4gww.x " $ECHO $ECHO " running pw4gww.x as: $PW4GWW_COMMAND" $ECHO GWW_COMMAND="$PARA_PREFIX $BIN_DIR/gww.x " $ECHO $ECHO " running gww.x as: $GWW_COMMAND" $ECHO # self-consistent calculation cat > si_scf_k.in << EOF &control calculation='scf' restart_mode='from_scratch', prefix='si' pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' / &system ibrav= 8, celldm(1)= 10.26,celldm(2)= 1, celldm(3)=1, nat= 8, ntyp= 1, ecutwfc = 15.0 / &electrons diagonalization='david', conv_thr = 1.0d-10, mixing_beta = 0.5, startingwfc='random', / ATOMIC_SPECIES Si 1. Si.pz-vbc.UPF ATOMIC_POSITIONS (crystal) Si 0.00000 0.00000 0.00000 Si 0.50000 0.50000 0.00000 Si 0.00000 0.50000 0.50000 Si 0.50000 0.00000 0.50000 Si 0.25000 0.25000 0.25000 Si 0.75000 0.75000 0.25000 Si 0.75000 0.25000 0.75000 Si 0.25000 0.75000 0.75000 K_POINTS (automatic) 4 4 4 1 1 1 EOF $ECHO " running the scf calculation for Si...\c" $PW_COMMAND < si_scf_k.in > si_scf_k.out check_failure $? $ECHO " done" #calculation of head cat > si_head.in << EOF calculation of head &inputph trans=.false. l_head=.true. tr2_ph=1.d-4, prefix='si', omega_gauss=20.0 n_gauss=97 grid_type=5 second_grid_i=1 second_grid_n=10 niter_ph=1 nsteps_lanczos=30 outdir='$TMP_DIR/' / 0.0 0.0 0.0 EOF $ECHO " running the head calculation for Si...\c" $HEAD_COMMAND < si_head.in > si_head.out check_failure $? $ECHO " done" # non self-consistent calculation cat > si_nscf.in << EOF &control calculation='nscf' restart_mode='from_scratch', prefix='si' pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' / &system ibrav= 8, celldm(1)= 10.26,celldm(2)= 1, celldm(3)=1, nat= 8, ntyp= 1, ecutwfc = 15.0,nbnd=32 / &electrons diagonalization='david', conv_thr = 1.0d-10, mixing_beta = 0.5, startingwfc='random', / ATOMIC_SPECIES Si 1. Si.pz-vbc.UPF ATOMIC_POSITIONS (crystal) Si 0.00000 0.00000 0.00000 Si 0.50000 0.50000 0.00000 Si 0.00000 0.50000 0.50000 Si 0.50000 0.00000 0.50000 Si 0.25000 0.25000 0.25000 Si 0.75000 0.75000 0.25000 Si 0.75000 0.25000 0.75000 Si 0.25000 0.75000 0.75000 K_POINTS (gamma) EOF $ECHO " running the nscf calculation for Si...\c" $PW_COMMAND < si_nscf.in > si_nscf.out check_failure $? $ECHO " done" #pw4gww calculations cat > si_pw4gww.in << EOF &inputpw4gww prefix='si' num_nbndv(1)=16 num_nbnds=32 l_truncated_coulomb=.false. numw_prod=100 pmat_cutoff=3d0 s_self_lanczos=1d-8 outdir='$TMP_DIR' / EOF $ECHO " running the pw4gww calculation for Si...\c" $PW4GWW_COMMAND < si_pw4gww.in > si_pw4gww.out check_failure $? $ECHO " done" cat > si_gww.in << EOF &inputgww ggwin%prefix='si' ggwin%n=97, ggwin%n_fit=120, ggwin%max_i=32, ggwin%i_min=1 ggwin%i_max=32 ggwin%l_truncated_coulomb=.false. ggwin%grid_time=3 ggwin%grid_freq=5 ggwin%second_grid_i=1 ggwin%second_grid_n=10 ggwin%omega=20 ggwin%omega_fit=20 ggwin%n_grid_fit=240 ggwin%tau=9.8 ggwin%n_set_pola=16 ggwin%outdir='$TMP_DIR' / EOF $ECHO " running the gww calculation for Si...\c" $GWW_COMMAND < si_gww.in > si_gww.out check_failure $? $ECHO " done" #copy self_energy files $ECHO "copying self-energy files..\c" cp $TMP_DIR/si-im_on_im* . cp $TMP_DIR/si-re_on_im* . # clean TMP_DIR $ECHO " cleaning $TMP_DIR...\c" rm -rf $TMP_DIR/si* $ECHO " done" $ECHO $ECHO "$EXAMPLE_DIR : done"