Freq 2.s: Difference between revisions
Jump to navigation
Jump to search
New page: go back to Main Page, Computational Resources, Scripts, Useful scripts Execute this script (freq.s OUTCAR) will generate a file called MOLCAR. This file is legible for MO... |
mNo edit summary |
||
| (12 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
go back to [[Main Page]], [[Computational Resources]], [[Scripts]], [[ | go back to [[Main Page]], [[Computational Resources]], [[Scripts]], [[Scripts for VASP]] | ||
Execute this script (freq.s OUTCAR) will generate a file called MOLCAR. This file is legible for MOLDEN, and includes all the vibrations. | Execute this script (freq.s OUTCAR) will generate a file called MOLCAR. This file is legible for MOLDEN, and includes all the vibrations. | ||
# | # | ||
| Line 9: | Line 8: | ||
# Uso: freq_2.s OUTCAR | # Uso: freq_2.s OUTCAR | ||
# | # | ||
file=$1 | file=$1 | ||
echo [MOLDEN FORMAT] > MOLCAR | echo [MOLDEN FORMAT] > MOLCAR | ||
echo [FREQ] >> MOLCAR | echo [FREQ] >> MOLCAR | ||
declare -a typ_freq | declare -a typ_freq | ||
declare -a list_freq | declare -a list_freq | ||
declare -a num_ions_type | declare -a num_ions_type | ||
num_freq=$(grep cm-1 $file | awk '{print $1}' | tail -1) | num_freq=$(grep cm-1 $file | awk '{print $1}' | tail -1) | ||
list_freq=($(grep cm-1 $file | cut -b 10- | awk '{print $5}' | tail -$num_freq)) | list_freq=($(grep cm-1 $file | cut -b 10- | awk '{print $5}' | tail -$num_freq)) | ||
typ_freq=($(grep cm-1 $file | awk '{print $2}' )) | typ_freq=($(grep cm-1 $file | awk '{print $2}' )) | ||
let k=$num_freq-1 | let k=$num_freq-1 | ||
for i in $(seq 0 $k); do | for i in $(seq 0 $k); do | ||
if [ [${typ_freq[$i]} = "f/i="] ];then | |||
list_freq[$i]=-${list_freq[$i]} | list_freq[$i]=-${list_freq[$i]} | ||
fi | fi | ||
echo ${list_freq[$i]} >> MOLCAR | echo ${list_freq[$i]} >> MOLCAR | ||
done | done | ||
num_ions_type=($(grep "ions per type" $file | cut -b 20- )) | num_ions_type=($(grep "ions per type" $file | cut -b 20- )) | ||
let j=$(grep -c POTCAR $file)/2 | let j=$(grep -c POTCAR $file)/2 | ||
for i in $(seq 1 $j); do | for i in $(seq 1 $j); do | ||
let k=$i-1 | |||
ions_type[$k]=$(grep POTCAR $file | awk '{print $3}' | head -$i | tail -1 ) | |||
done | done | ||
num_ions=$(grep IONS $file | awk '{print $12}') | num_ions=$(grep IONS $file | awk '{print $12}') | ||
| Line 44: | Line 43: | ||
cap=0 | cap=0 | ||
for i in $(seq 1 $k); do | for i in $(seq 1 $k); do | ||
atom=${ions_type[$p]} | |||
if [ [$j = $i && $j != $k] ]; then | |||
let p=$p+1 | let p=$p+1 | ||
let j=$j+${num_ions_type[$p]} | let j=$j+${num_ions_type[$p]} | ||
fi | fi | ||
let cap=$i+1 | let cap=$i+1 | ||
b=1. | b=1.88973 | ||
X=$(echo " | X=$(echo "scale=5; $(grep -$cap cm-1 $file | tail -1 | awk '{print $1}')*$b " | bc) | ||
Y=$(echo " | Y=$(echo "scale=5; $(grep -$cap cm-1 $file | tail -1 | awk '{print $2}')*$b " | bc) | ||
Z=$(echo " | Z=$(echo "scale=5; $(grep -$cap cm-1 $file | tail -1 | awk '{print $3}')*$b " | bc) | ||
echo $atom $X $Y $Z >> MOLCAR | echo $atom $X $Y $Z >> MOLCAR | ||
Vx=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -3 | head -1 |awk '{print $1}')*$b " | bc) | |||
X1=$(echo "scale=5; $X+$Vx " | bc) | |||
Vy=$(echo "scale=5 Vz=$(echo "sacale=5; $(grep "direct lattice" $file -3 | tail -3 | head -1 |awk '{print $3}')*$b " | bc) | |||
Z1=$(echo "scale=5; $Z+$Vz " | bc) | |||
echo $atom $X1 $Y1 $Z1 >> MOLCAR | |||
Vxx=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -2 | head -1 |awk '{print $1}')*$b " | bc) | |||
X1=$(echo "scale=5; $X+$Vxx " | bc) | |||
Vyy=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -2 | head -1 |awk '{print $2}')*$b " | bc) | |||
Y1=$(echo "scale=5; $Y+$Vyy " | bc) | |||
Vzz=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -2 | head -1 |awk '{print $3}')*$b " | bc) | |||
Z1=$(echo "scale=5; $Z+$Vzz " | bc) | |||
echo $atom $X1 $Y1 $Z1 >> MOLCAR | |||
X1=$(echo "scale=5; $X+$Vx+$Vxx " | bc) | |||
Y1=$(echo "scale=5; $Y+$Vy+$Vyy " | bc) | |||
Z1=$(echo "scale=5; $Z+$Vz+$Vzz " | bc) | |||
echo $atom $X1 $Y1 $Z1 >> MOLCAR | |||
done | done | ||
echo [FR-NORM-COORD] >> MOLCAR | echo [FR-NORM-COORD] >> MOLCAR | ||
for i in $(seq 1 $num_freq); do | for i in $(seq 1 $num_freq); do | ||
echo vibration $i >> MOLCAR | |||
cap=1 | |||
txt=$i" f" | |||
for t in $(seq 1 $num_ions); do | |||
let cap=$cap+1 | |||
b=1 | |||
dX=$(echo "scale=5; $(grep -$cap "$txt" $file | tail -1 | awk '{print $4}')*$b " | bc) | |||
dY=$(echo "scale=5; $(grep -$cap "$txt" $file | tail -1 | awk '{print $5}')*$b " | bc) | |||
dZ=$(echo "scale=5; $(grep -$cap "$txt" $file | tail -1 | awk '{print $6}')*$b " | bc) | |||
echo $dX $dY $dZ >> MOLCAR | |||
echo $dX $dY $dZ >> MOLCAR | |||
echo $dX $dY $dZ >> MOLCAR | |||
echo $dX $dY $dZ >> MOLCAR | |||
done | |||
done | done | ||
molden MOLCAR | molden MOLCAR | ||
#rm MOLCAR | #rm MOLCAR | ||
Latest revision as of 13:54, 21 September 2010
go back to Main Page, Computational Resources, Scripts, Scripts for VASP
Execute this script (freq.s OUTCAR) will generate a file called MOLCAR. This file is legible for MOLDEN, and includes all the vibrations.
#
# Gerard Novell Leruth
# Conversion archivos OUTCAR de frecuencias VASP 4.6 a molden format con duplicación de celda en XY
# Uso: freq_2.s OUTCAR
#
file=$1
echo [MOLDEN FORMAT] > MOLCAR
echo [FREQ] >> MOLCAR
declare -a typ_freq
declare -a list_freq
declare -a num_ions_type
num_freq=$(grep cm-1 $file | awk '{print $1}' | tail -1)
list_freq=($(grep cm-1 $file | cut -b 10- | awk '{print $5}' | tail -$num_freq))
typ_freq=($(grep cm-1 $file | awk '{print $2}' ))
let k=$num_freq-1
for i in $(seq 0 $k); do
if [ [${typ_freq[$i]} = "f/i="] ];then
list_freq[$i]=-${list_freq[$i]}
fi
echo ${list_freq[$i]} >> MOLCAR
done
num_ions_type=($(grep "ions per type" $file | cut -b 20- ))
let j=$(grep -c POTCAR $file)/2
for i in $(seq 1 $j); do
let k=$i-1
ions_type[$k]=$(grep POTCAR $file | awk '{print $3}' | head -$i | tail -1 )
done
num_ions=$(grep IONS $file | awk '{print $12}')
echo [FR-COORD] >> MOLCAR
let k=$num_ions
p=0
j=${num_ions_type[$p]}
cap=0
for i in $(seq 1 $k); do
atom=${ions_type[$p]}
if [ [$j = $i && $j != $k] ]; then
let p=$p+1
let j=$j+${num_ions_type[$p]}
fi
let cap=$i+1
b=1.88973
X=$(echo "scale=5; $(grep -$cap cm-1 $file | tail -1 | awk '{print $1}')*$b " | bc)
Y=$(echo "scale=5; $(grep -$cap cm-1 $file | tail -1 | awk '{print $2}')*$b " | bc)
Z=$(echo "scale=5; $(grep -$cap cm-1 $file | tail -1 | awk '{print $3}')*$b " | bc)
echo $atom $X $Y $Z >> MOLCAR
Vx=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -3 | head -1 |awk '{print $1}')*$b " | bc)
X1=$(echo "scale=5; $X+$Vx " | bc)
Vy=$(echo "scale=5 Vz=$(echo "sacale=5; $(grep "direct lattice" $file -3 | tail -3 | head -1 |awk '{print $3}')*$b " | bc)
Z1=$(echo "scale=5; $Z+$Vz " | bc)
echo $atom $X1 $Y1 $Z1 >> MOLCAR
Vxx=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -2 | head -1 |awk '{print $1}')*$b " | bc)
X1=$(echo "scale=5; $X+$Vxx " | bc)
Vyy=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -2 | head -1 |awk '{print $2}')*$b " | bc)
Y1=$(echo "scale=5; $Y+$Vyy " | bc)
Vzz=$(echo "scale=5; $(grep "direct lattice" $file -3 | tail -2 | head -1 |awk '{print $3}')*$b " | bc)
Z1=$(echo "scale=5; $Z+$Vzz " | bc)
echo $atom $X1 $Y1 $Z1 >> MOLCAR
X1=$(echo "scale=5; $X+$Vx+$Vxx " | bc)
Y1=$(echo "scale=5; $Y+$Vy+$Vyy " | bc)
Z1=$(echo "scale=5; $Z+$Vz+$Vzz " | bc)
echo $atom $X1 $Y1 $Z1 >> MOLCAR
done
echo [FR-NORM-COORD] >> MOLCAR
for i in $(seq 1 $num_freq); do
echo vibration $i >> MOLCAR
cap=1
txt=$i" f"
for t in $(seq 1 $num_ions); do
let cap=$cap+1
b=1
dX=$(echo "scale=5; $(grep -$cap "$txt" $file | tail -1 | awk '{print $4}')*$b " | bc)
dY=$(echo "scale=5; $(grep -$cap "$txt" $file | tail -1 | awk '{print $5}')*$b " | bc)
dZ=$(echo "scale=5; $(grep -$cap "$txt" $file | tail -1 | awk '{print $6}')*$b " | bc)
echo $dX $dY $dZ >> MOLCAR
echo $dX $dY $dZ >> MOLCAR
echo $dX $dY $dZ >> MOLCAR
echo $dX $dY $dZ >> MOLCAR
done
done
molden MOLCAR
#rm MOLCAR