quantum-espresso/PW/examples/EXX_example/run_example

568 lines
14 KiB
Bash
Executable File

#!/bin/sh
# run from directory where this script is
cd `dirname $0`
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 to calculate the total energy"
$ECHO "of silicon and of a few small molecules using hybrid functionals."
# set the needed environment variables
. ../../../environment_variables
# required executables and pseudopotentials
BIN_LIST="pw.x"
PSEUDO_LIST="Si.pz-vbc.UPF"
x_gamma_extrapolation=".TRUE."
exxdiv_treatment="gygi-baldereschi"
if [ ! -z "$1" ] ; then exxdiv_treatment="$1" ; fi
if [ "$exxdiv_treatment" = "vcut_ws" ] ; then x_gamma_extrapolation=.FALSE. ; fi
if [ "$exxdiv_treatment" = "vcut_spherical" ] ; then x_gamma_extrapolation=.FALSE. ; fi
ecutvcut=0.7
$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"
$ECHO
$ECHO " running pw.x as: $PW_COMMAND"
$ECHO
$ECHO
$ECHO " running PBE0 calculation for Si with nq=1,2,4 \c"
$ECHO
for nq in 1 2 4 ; do
# self-consistent calculation
cat > si.in << EOF
&control
calculation = 'scf'
restart_mode='from_scratch',
prefix='silicon',
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
tstress = .TRUE.
/
&system
ibrav= 2, celldm(1) =10.20, nat= 2, ntyp= 1,
ecutwfc =12.0, nbnd = 8,
input_dft='pbe0', nqx1 = $nq, nqx2 = $nq, nqx3 = $nq,
exxdiv_treatment='$exxdiv_treatment'
ecutvcut=$ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&electrons
mixing_beta = 0.7
/
ATOMIC_SPECIES
Si 28.086 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
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 with nq = $nq ...\c"
$PW_COMMAND < si.in > si.PBE0_nq=${nq}.out
$ECHO " done"
grep -e ! si.PBE0_nq=${nq}.out | tail -1
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/silicon*
$ECHO " done"
done
$ECHO
$ECHO " running HSE calculation for Si with nq=1,2,4 \c"
$ECHO
for nq in 1 2 4 ; do
# self-consistent calculation
cat > si.in << EOF
&control
calculation = 'scf'
restart_mode='from_scratch',
prefix='silicon',
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
/
&system
ibrav= 2, celldm(1) =10.20, nat= 2, ntyp= 1,
ecutwfc =12.0, nbnd = 8,
input_dft='hse', nqx1 = $nq, nqx2 = $nq, nqx3 = $nq,
x_gamma_extrapolation = $x_gamma_extrapolation
exxdiv_treatment = '$exxdiv_treatment'
/
&electrons
mixing_beta = 0.7
/
ATOMIC_SPECIES
Si 28.086 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
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 with nq = $nq ...\c"
$PW_COMMAND < si.in > si.hse_nq=${nq}.out
$ECHO " done"
grep -e ! si.hse_nq=${nq}.out | tail -1
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/silicon*
$ECHO " done"
done
$ECHO
$ECHO " running Gau-PBE calculation for Si with nq=1,2,4 \c"
$ECHO
for nq in 1 2 4 ; do
# self-consistent calculation
cat > si.in << EOF
&control
calculation = 'scf'
restart_mode='from_scratch',
prefix='silicon',
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
/
&system
ibrav= 2, celldm(1) =10.20, nat= 2, ntyp= 1,
ecutwfc =12.0, nbnd = 8,
input_dft='gaupbe', nqx1 = $nq, nqx2 = $nq, nqx3 = $nq,
x_gamma_extrapolation = .false.
exxdiv_treatment = 'none'
/
&electrons
mixing_beta = 0.7
/
ATOMIC_SPECIES
Si 28.086 Si.pz-vbc.UPF
ATOMIC_POSITIONS alat
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 with nq = $nq ...\c"
$PW_COMMAND < si.in > si.gaupbe_nq=${nq}.out
$ECHO " done"
grep -e ! si.gaupbe_nq=${nq}.out | tail -1
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/silicon*
$ECHO " done"
done
$ECHO
$ECHO " running now a few molecules with Gamma sampling ...\c"
$ECHO
PSEUDO_DIR=$EXAMPLE_DIR/Pseudo
$ECHO " pseudo directory changed to: $PSEUDO_DIR"
$ECHO
for xc in pbe0 hse gaupbe; do
$ECHO " Exchange and correlation is: " $xc "...\c"
$ECHO
if [ "$xc" = "gaupbe" ] ; then x_gamma_extrapolation=.FALSE. ; fi
if [ "$xc" = "gaupbe" ] ; then exxdiv_treatment=none ; fi
if [ "$xc" = "gaupbe" ] ; then ecutvcut=0.0 ; fi
ps=1nlcc
ecut=80
cat > o.inp << EOF
&CONTROL
calculation = 'scf' ,
restart_mode = 'from_scratch' ,
outdir = '$TMP_DIR/' ,
pseudo_dir = '$PSEUDO_DIR/',
prefix = 'o',
disk_io = 'minimal' ,
iprint = 1
tprnfor = .true.
/
&SYSTEM
ibrav = 1,
celldm(1) = 12.0,
nat = 1,
ntyp = 1,
ecutwfc = $ecut ,
input_dft = '$xc'
nspin = 2
nbnd = 4
tot_magnetization = 2.0
exxdiv_treatment = '$exxdiv_treatment'
ecutvcut = $ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&ELECTRONS
conv_thr = 0.5d-3
/
ATOMIC_SPECIES
O 16.0 OPBE$ps.RRKJ3
ATOMIC_POSITIONS angstrom
O 0.1 0.2 0.3
K_POINTS gamma
#automatic
#1 1 1 0 0 0
EOF
$ECHO " running oxygen atom..\c"
$PW_COMMAND < o.inp > o.$xc.$ps.out-$ecut
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/o.*
$ECHO " done"
cat > c.inp << EOF
&CONTROL
calculation = 'scf' ,
restart_mode = 'from_scratch' ,
outdir = '$TMP_DIR/' ,
pseudo_dir = '$PSEUDO_DIR/',
prefix = 'c',
disk_io = 'minimal' ,
iprint = 1
tprnfor = .true.
/
&SYSTEM
ibrav = 1,
celldm(1) = 12.0,
nat = 1,
ntyp = 1,
ecutwfc = $ecut ,
input_dft='$xc'
nspin = 2
nbnd = 4
tot_magnetization = 2.0
exxdiv_treatment = '$exxdiv_treatment'
ecutvcut = $ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&ELECTRONS
conv_thr = 0.5d-3
/
ATOMIC_SPECIES
C 16.0 CPBE$ps.RRKJ3
ATOMIC_POSITIONS angstrom
C 0.1 0.2 0.3
K_POINTS gamma
#automatic
#1 1 1 0 0 0
EOF
$ECHO " running carbon atom..\c"
$PW_COMMAND < c.inp > c.$xc.$ps.out-$ecut
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/c.*
$ECHO " done"
cat > n.inp << EOF
&CONTROL
calculation = 'scf' ,
restart_mode = 'from_scratch' ,
outdir = '$TMP_DIR/' ,
pseudo_dir = '$PSEUDO_DIR/',
prefix = 'n',
disk_io = 'minimal' ,
iprint = 1
tprnfor = .true.
/
&SYSTEM
ibrav = 1,
celldm(1) = 12.0,
nat = 1,
ntyp = 1,
ecutwfc = $ecut ,
input_dft='$xc'
nspin = 2
nbnd = 4
tot_magnetization = 3.0
exxdiv_treatment = '$exxdiv_treatment'
ecutvcut = $ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&ELECTRONS
conv_thr = 0.5d-4
/
ATOMIC_SPECIES
N 16.0 NPBE$ps.RRKJ3
ATOMIC_POSITIONS angstrom
N 0.1 0.2 0.3
K_POINTS gamma
#automatic
#1 1 1 0 0 0
EOF
$ECHO " running nitrogen atom..\c"
$PW_COMMAND < n.inp > n.$xc.$ps.out-$ecut
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/n.*
$ECHO " done"
b=0.3169
cat > n2.inp << EOF
&CONTROL
calculation = 'scf' ,
restart_mode = 'from_scratch' ,
outdir = '$TMP_DIR/' ,
pseudo_dir = '$PSEUDO_DIR/',
prefix = 'n2',
disk_io = 'minimal' ,
iprint = 1
tprnfor = .true.
/
&SYSTEM
ibrav = 1,
celldm(1) = 12.0,
nat = 2,
ntyp = 1,
ecutwfc = $ecut ,
input_dft='$xc'
nbnd = 8
exxdiv_treatment = '$exxdiv_treatment'
ecutvcut = $ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&ELECTRONS
conv_thr = 1.d-4
/
&IONS
/
ATOMIC_SPECIES
N 16.0 NPBE$ps.RRKJ3
ATOMIC_POSITIONS angstrom
N $b $b $b
N -$b -$b -$b
K_POINTS gamma
#automatic
#1 1 1 0 0 0
EOF
$ECHO " running n2 molecule..\c"
$PW_COMMAND < n2.inp > n2.$xc.$ps.out-$ecut
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/n2.*
$ECHO " done"
b=0.3256
cat > co.inp << EOF
&CONTROL
calculation = 'scf' ,
restart_mode = 'from_scratch' ,
outdir = '$TMP_DIR/' ,
pseudo_dir = '$PSEUDO_DIR/',
prefix = 'co',
disk_io = 'minimal' ,
iprint = 1
tprnfor = .true.
/
&SYSTEM
ibrav = 1,
celldm(1) = 12.0,
nat = 2,
ntyp = 2,
ecutwfc = $ecut ,
input_dft='$xc'
nbnd = 8
exxdiv_treatment = '$exxdiv_treatment'
ecutvcut = $ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&ELECTRONS
conv_thr = 0.5d-3
/
&IONS
/
ATOMIC_SPECIES
C 16.0 CPBE$ps.RRKJ3
O 16.0 OPBE$ps.RRKJ3
ATOMIC_POSITIONS angstrom
C $b $b $b
O -$b -$b -$b
K_POINTS gamma
#automatic
#1 1 1 0 0 0
EOF
$ECHO " running co molecule..\c"
$PW_COMMAND < co.inp > co.$xc.$ps.out-$ecut
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/n2.*
$ECHO " done"
b=0.3478
cat > o2.inp << EOF
&CONTROL
calculation = 'scf' ,
restart_mode = 'from_scratch' ,
outdir = '$TMP_DIR/' ,
pseudo_dir = '$PSEUDO_DIR/',
prefix = 'o2',
disk_io = 'minimal' ,
iprint = 1
tprnfor = .true.
/
&SYSTEM
ibrav = 1,
celldm(1) = 12.0,
nat = 2,
ntyp = 1,
ecutwfc = $ecut ,
input_dft='$xc'
nspin = 2
nbnd = 8
tot_magnetization = 2.0
exxdiv_treatment = '$exxdiv_treatment'
ecutvcut = $ecutvcut
x_gamma_extrapolation = $x_gamma_extrapolation
/
&ELECTRONS
conv_thr = 0.5d-3
/
&IONS
/
ATOMIC_SPECIES
O 16.0 OPBE$ps.RRKJ3
ATOMIC_POSITIONS angstrom
O $b $b $b
O -$b -$b -$b
K_POINTS gamma
#automatic
#1 1 1 0 0 0
EOF
$ECHO " running o2 molecule..\c"
$PW_COMMAND < o2.inp > o2.$xc.$ps.out-$ecut
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/o2.*
$ECHO " done"
$ECHO
cat > summarize << EOF
grep -e ! n.$xc.$ps.out-$ecut | tail -1 | awk '{print \$5}' > N
grep -e ! n2.$xc.$ps.out-$ecut | tail -1 | awk '{print \$5}' > N2
paste N2 N | awk '{be= (\$1-\$2*2.0) * 13.6058 * 23.06; print "N2 : ",be}'
grep -e ! o.$xc.$ps.out-$ecut | tail -1 | awk '{print \$5}' > O
grep -e ! o2.$xc.$ps.out-$ecut | tail -1 | awk '{print \$5}' > O2
paste O2 O | awk '{be= (\$1-\$2*2.0) * 13.6058 * 23.06 ; print "O2 : ",be}'
grep -e ! c.$xc.$ps.out-$ecut | tail -1 | awk '{print \$5}' > C
grep -e ! co.$xc.$ps.out-$ecut | tail -1 | awk '{print \$5}' > CO
paste CO O C | awk '{be= (\$1-\$2-\$3) * 13.6058 * 23.06; print "CO : ",be}'
rm C N O CO O2 N2
EOF
sh summarize
$ECHO
done
$ECHO "$EXAMPLE_DIR : done"