#!/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 # function to test the exit status of a job . ../check_failure.sh $ECHO $ECHO "$EXAMPLE_DIR : starting" $ECHO $ECHO "This example shows how to use pw.x and ph.x to calculate phonon" $ECHO "frequencies at Gamma and X for Si and C in the diamond structure and" $ECHO "for fcc-Ni." # set the needed environment variables . ../environment_variables # required executables and pseudopotentials BIN_LIST="pw.x ph.x" PSEUDO_LIST="Si.pz-vbc.UPF C.pz-rrkjus.UPF Ni.pbe-nd-rrkjus.UPF" $ECHO $ECHO " executables directory: $BIN_DIR" $ECHO " pseudo directory: $PSEUDO_DIR" $ECHO " temporary directory: $TMP_DIR" $ECHO $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 "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" PH_COMMAND="$PARA_PREFIX $BIN_DIR/ph.x $PARA_POSTFIX" $ECHO $ECHO " running pw.x as: $PW_COMMAND" $ECHO " running ph.x as: $PH_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.20, nat= 2, ntyp= 1, ecutwfc = 18.0 / &electrons mixing_beta = 0.7 conv_thr = 1.0d-8 / 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 for Si...\c" $PW_COMMAND < si.scf.in > si.scf.out check_failure $? $ECHO " done" # phonon calculation at Gamma cat > si.phG.in << EOF phonons of Si at Gamma &inputph tr2_ph=1.0d-14, prefix='si', epsil=.true., amass(1)=28.08, outdir='$TMP_DIR/', fildyn='si.dynG', / 0.0 0.0 0.0 EOF $ECHO " running the phonon calculation at Gamma for Si...\c" $PH_COMMAND < si.phG.in > si.phG.out $ECHO " done" # phonon calculation at X cat > si.phX.in << EOF phonons of si at X &inputph tr2_ph=1.0d-14, prefix='si', amass(1)=28.08, outdir='$TMP_DIR/', fildyn='si.dynX', / 1.0 0.0 0.0 EOF $ECHO " running the phonon calculation at X for Si...\c" $PH_COMMAND < si.phX.in > si.phX.out check_failure $? $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.20, nat= 2, ntyp= 1, ecutwfc = 18.0 / &electrons mixing_beta = 0.7 conv_thr = 1.0d-8 / 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 for Si again...\c" $PW_COMMAND < si.scf.in > si.scf.out check_failure $? $ECHO " done" # single mode phonon calculation at X cat > si.phXsingle.in << EOF phonons of si at X, single mode &inputph tr2_ph=1.0d-14, prefix='si', amass(1)=28.08, outdir='$TMP_DIR/' modenum=3 / 1.0 0.0 0.0 EOF $ECHO " running the phonon calculation for Si at X for a single mode...\c" $PH_COMMAND < si.phXsingle.in > si.phXsingle.out check_failure $? $ECHO " done" # clean TMP_DIR $ECHO " cleaning $TMP_DIR...\c" rm -rf $TMP_DIR/* $ECHO " done" # self-consistent calculation for C with US-PP cat > c.scf.in << EOF &control calculation='scf', restart_mode='from_scratch', prefix='C', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' / &system ibrav = 2, celldm(1) =6.74, nat= 2, ntyp= 1, nr1=32, nr2=32, nr3=32, ecutwfc = 27.0 ecutrho = 300.0 / &electrons mixing_beta = 0.7 conv_thr = 1.0d-9 / ATOMIC_SPECIES C 12.0107 C.pz-rrkjus.UPF ATOMIC_POSITIONS C 0.00 0.00 0.00 C 0.25 0.25 0.25 K_POINTS AUTOMATIC 4 4 4 1 1 1 EOF $ECHO " running the scf calculation for C...\c" $PW_COMMAND < c.scf.in > c.scf.out check_failure $? $ECHO " done" # phonon calculation at G cat > c.phG.in << EOF phonons of C at Gamma &inputph tr2_ph=1.0d-14, epsil=.true., prefix='C', fildyn='Cg.dyn', amass(1)=12.0107, outdir='$TMP_DIR/' / 0.0 0.0 0.0 EOF $ECHO " running the phonon calculation for C at Gamma...\c" $PH_COMMAND < c.phG.in > c.phG.out check_failure $? $ECHO " done" # self-consistent calculation for Ni with US-PP cat > ni.scf.in << EOF &control calculation='scf' restart_mode='from_scratch', tprnfor = .true. prefix='ni', pseudo_dir = '$PSEUDO_DIR/', outdir='$TMP_DIR/' / &system ibrav=2, celldm(1) =6.65, nat= 1, ntyp= 1, nspin=2, starting_magnetization(1)=0.5, degauss=0.02, smearing='mp', occupations='smearing', ecutwfc =27.0 ecutrho =300.0 / &electrons conv_thr = 1.0d-8 mixing_beta = 0.7 / ATOMIC_SPECIES Ni 58.6934 Ni.pbe-nd-rrkjus.UPF ATOMIC_POSITIONS Ni 0.00 0.00 0.00 K_POINTS AUTOMATIC 4 4 4 1 1 1 EOF $ECHO " running the scf calculation for Ni...\c" $PW_COMMAND < ni.scf.in > ni.scf.out check_failure $? $ECHO " done" # phonon calculation at X cat > ni.phX.in << EOF phonons of Ni at X &inputph tr2_ph=1.0d-14, prefix='ni', amass(1)=58.6934, fildyn='nix.dyn', outdir='$TMP_DIR/', / 0.0 0.0 1.0 EOF $ECHO " running the phonon calculation at X for Ni...\c" $PH_COMMAND < ni.phX.in > ni.phX.out check_failure $? $ECHO " done" # clean TMP_DIR $ECHO " cleaning $TMP_DIR...\c" rm -rf $TMP_DIR/* $ECHO " done" $ECHO $ECHO "$EXAMPLE_DIR: done"