Added script for the SiO2 (alpha-quartz) example using Ultrasoft

pseudopotentials. The example calculate Si K-edge XAS in alpha-quartz using
ultrasoft pseudopotentials. Restart is also tested in the script.

Christos Gougoussis and Matteo Calandra


git-svn-id: http://qeforge.qe-forge.org/svn/q-e/trunk/espresso@5586 c92efa57-630b-4861-b058-cf58834340f0
This commit is contained in:
calandra 2009-06-05 12:40:33 +00:00
parent 8ca5b718cb
commit c494e8a7de
1 changed files with 364 additions and 0 deletions

View File

@ -0,0 +1,364 @@
#!/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 tests K-edge X-ray absorption spectra calculation"
$ECHO
# set the needed environment variables
. ../environment_variables
# required executables and pseudopotentials
BIN_LIST="pw.x xspectra.x "
PSEUDO_LIST="Si_PBE_USPP.UPF O_PBE_USPP.UPF"
PSEUDO_DIR="$EXAMPLE_DIR/pseudo"
TMP_DIR="$EXAMPLE_DIR/results/tmp"
$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
# clean directory results
rm -rf ./results/*
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"
X_COMMAND="$PARA_PREFIX $BIN_DIR/xspectra.x $PARA_POSTFIX"
$ECHO
$ECHO " running pw.x as: $PW_COMMAND"
$ECHO " running xspectra.x as: $X_COMMAND"
$ECHO
$ECHO
$ECHO "WARNING : All these calculations are underconverged"
$ECHO " (These are simple quick tests) "
$ECHO
$ECHO
$ECHO
$ECHO "###########################################"
$ECHO "# SiO2 #"
$ECHO "# Calculation of K-edge XAS without #"
$ECHO "# a core-hole in the final state #"
$ECHO "# #"
$ECHO "# The parameters of this run are not #"
$ECHO "# converged. To obtain converged #"
$ECHO "# parameters see : #"
$ECHO "# C. Gougoussis, M.Calandra, #"
$ECHO "# A. Seitsonen, F. Mauri #"
$ECHO "# arXiv:0906.0897 #"
$ECHO "###########################################"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/*
$ECHO " done"
# extracting core wavefunction
$ECHO " extracting core wavefunction from pseudo...\c"
../../../XSpectra/upf2plotcore.sh $PSEUDO_DIR/Si_PBE_USPP.UPF > ./Si.wfc
$ECHO " done"
$ECHO "#"
$ECHO "# self-consistent calculation for SiO2."
$ECHO "# Ultrasoft pseudopotentials are being used "
$ECHO "#"
cat > SiO2.scf.in << EOF
&control
calculation='scf',
restart_mode='from_scratch',
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/',
prefix='SiO2',
verbosity = 'high',
wf_collect=.true.,
&end
&system
ibrav = 4 ,
celldm(1)=9.28630318961333,
celldm(3)=1.10010,
nat = 9 ,
ntyp = 3 ,
nspin=1,
ecutwfc = 20.0,
ecutrho = 150.0,
nbnd=30,
smearing='mp',
occupations='smearing',
degauss=0.03,
&end
&electrons
diagonalization='david',
conv_thr = 1.d-9,
mixing_mode = 'plain',
mixing_beta = 0.3,
&end
ATOMIC_SPECIES
Sih 28.086 Si_PBE_USPP.UPF
Si 28.086 Si_PBE_USPP.UPF
O 15.9994 O_PBE_USPP.UPF
ATOMIC_POSITIONS crystal
Sih 0.47000000000000 0.000000000000 0.00000000000000
Si 0.00000000000000 0.47000000000000 0.6666666666666666
Si -0.47000000000000 -0.47000000000000 0.333333333333333
O 0.4131000000000000 0.267700000000000 0.11890000000000
O 0.267700000000000 0.4131000000000000 .54776666666666666666
O -0.267700000000000 0.1454000000000000 .78556666666666666666
O -0.4131000000000000 -0.1454000000000000 .21443333333333333333
O -0.1454000000000000 -0.4131000000000000 .45223333333333333333
O 0.1454000000000000 -0.267700000000000 -0.11890000000000
K_POINTS automatic
2 2 2 0 0 0
EOF
$ECHO " running pw.x for SiO2 ...\c"
$PW_COMMAND < SiO2.scf.in > SiO2.scf.out
check_failure $?
$ECHO " done"
$ECHO "#"
$ECHO "# xanes calculations : Si K-edge"
$ECHO "# ultrasoft pseudopotentials are being used"
$ECHO "# cutting occupied states "
$ECHO "#"
$ECHO "# x-ray absorption spectrum calculation"
$ECHO "# dipolar part"
$ECHO "#"
$ECHO "# epsilon in the plane direction"
cat > SiO2.xspectra_dip_plane.in << EOF
&input_xspectra
calculation='xanes_dipole'
prefix='SiO2',
outdir='$TMP_DIR/',
xonly_plot=.false.,
xniter=2000,
xcheck_conv=50,
xepsilon(1)=1.0,
xepsilon(2)=1.0,
xepsilon(3)=0.0,
xiabs=1,
x_save_file='SiO2.xspectra_dip_plane.sav',
xread_wf=.false.,
ef_r=0.60294618180436781,
xerror=0.001,
wf_collect=.true.,
/
&plot
xnepoint=1000,
xgamma=0.8,
xemin=-10.0,
xemax=100.0,
terminator=.true.,
cut_occ_states=.true.,
&end
&pseudos
filecore='Si.wfc',
r_paw(1)=2.4,
&end
&cut_occ
cut_desmooth=0.1,
&end
3 3 3 0 0 0
EOF
$ECHO " running xspectra.x ...\c"
$X_COMMAND < SiO2.xspectra_dip_plane.in > SiO2.xspectra_dip_plane.out
check_failure $?
mv xanes.dat SiO2.xspectra_dip_plane.dat
$ECHO " done"
$ECHO "#"
$ECHO "# epsilon in the c axis direction"
cat > SiO2.xspectra_dip_c.in << EOF
&input_xspectra
calculation='xanes_dipole'
prefix='SiO2',
outdir='$TMP_DIR/',
xonly_plot=.false.,
xniter=2000,
xcheck_conv=50,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xiabs=1,
x_save_file='SiO2.xspectra_dip_c.sav',
xread_wf=.false.,
ef_r=0.60294618180436781,
xerror=0.001,
wf_collect=.true.,
/
&plot
xnepoint=1000,
xgamma=0.8,
xemin=-10.0,
xemax=100.0,
terminator=.true.,
cut_occ_states=.true.,
&end
&pseudos
filecore='Si.wfc',
r_paw(1)=2.4,
&end
&cut_occ
cut_desmooth=0.1,
&end
3 3 3 0 0 0
EOF
$ECHO " running xspectra.x ...\c"
$X_COMMAND < SiO2.xspectra_dip_c.in > SiO2.xspectra_dip_c.out
check_failure $?
mv xanes.dat SiO2.xspectra_dip_c.dat
$ECHO " done"
$ECHO "#"
$ECHO "# example of the restart mode"
$ECHO "# a time limit is put is the first calculation"
$ECHO "# so that it is not finished at the end of the time"
$ECHO "# then one can restart the calculation of the coefficients"
$ECHO "# of the continued fraction"
$ECHO "#"
$ECHO "# calculation 1 : not finished"
cat > SiO2.xspectra_dip_restart_1.in << EOF
&input_xspectra
calculation='xanes_dipole'
prefix='SiO2',
outdir='$TMP_DIR/',
xonly_plot=.false.,
xniter=2000,
xcheck_conv=50,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xiabs=1,
x_save_file='SiO2.xspectra_dip_restart_1.sav',
xread_wf=.false.,
ef_r=0.60294618180436781,
xerror=0.001,
wf_collect=.true.,
time_limit=10,
/
&plot
xnepoint=1000,
xgamma=0.8,
xemin=-10.0,
xemax=100.0,
terminator=.true.,
cut_occ_states=.true.,
&end
&pseudos
filecore='Si.wfc',
r_paw(1)=2.4,
&end
&cut_occ
cut_desmooth=0.1,
&end
3 3 3 0 0 0
EOF
$ECHO " running xspectra.x ...\c"
$X_COMMAND < SiO2.xspectra_dip_restart_1.in > SiO2.xspectra_dip_restart_1.out
check_failure $?
$ECHO " done"
$ECHO "#"
$ECHO "# calculation 2 : finishing the first calculation"
$ECHO "# the result should be identical to SiO2.xspectra_dip_c.dat"
$ECHO "# copy SiO2.xspectra_dip_restart_1.sav to SiO2.xspectra_dip_restart_2.sav"
cp SiO2.xspectra_dip_restart_1.sav SiO2.xspectra_dip_restart_2.sav
cat > SiO2.xspectra_dip_restart_2.in << EOF
&input_xspectra
calculation='xanes_dipole'
prefix='SiO2',
outdir='$TMP_DIR/',
xonly_plot=.false.,
xniter=2000,
xcheck_conv=50,
xepsilon(1)=0.0,
xepsilon(2)=0.0,
xepsilon(3)=1.0,
xiabs=1,
x_save_file='SiO2.xspectra_dip_restart_2.sav',
xread_wf=.false.,
ef_r=0.60294618180436781,
xerror=0.001,
wf_collect=.true.,
restart_mode='restart',
/
&plot
xnepoint=1000,
xgamma=0.8,
xemin=-10.0,
xemax=100.0,
terminator=.true.,
cut_occ_states=.true.,
&end
&pseudos
filecore='Si.wfc',
r_paw(1)=2.4,
&end
&cut_occ
cut_desmooth=0.1,
&end
3 3 3 0 0 0
EOF
$ECHO " running xspectra.x ...\c"
$X_COMMAND < SiO2.xspectra_dip_restart_2.in > SiO2.xspectra_dip_restart_2.out
check_failure $?
mv xanes.dat SiO2.xspectra_dip_restart_2.dat
$ECHO " done"
$ECHO "# SiO2.xspectra_dip_restart_1.sav is not complete"
$ECHO "# SiO2.xspectra_dip_restart_2.sav should be complete"