IDM: Difference between revisions
mNo edit summary |
No edit summary |
||
| Line 3: | Line 3: | ||
= Instructions = | = Instructions = | ||
Before start, please read about the Improved Dimer Method [[http://dx.doi.org/10.1063/1.2104507]]. | |||
1. Generate your initial guess for the structure (POSCAR). To this end, you can either pre-converge with a NEB calculation, or do it by hand. | |||
Specify the following in your INCAR file: | |||
2. Be sure the metal or solid phase is frozen and the molecule is relaxed. Do a frequency calculation based on your initial guess. Specify the following in your INCAR file: | |||
frequencies: | frequencies: | ||
| Line 15: | Line 15: | ||
NFREE = 2 # | NFREE = 2 # | ||
3. Based on your POSCAR and OUTCAR of the frequencies calculation, generate in a new folder the input of the IDM with the getdimer script. For example: | |||
getdimer ../freq/POSCAR ../freq/OUTCAR POSCAR | |||
4. Specify the following in your INCAR file: | |||
improved dimer method: | improved dimer method: | ||
| Line 29: | Line 33: | ||
NSW = 500 # | NSW = 500 # | ||
= Script = | = Script = | ||
| Line 43: | Line 40: | ||
$ getdimer <input:POSCAR> <input:OUTCAR> <output:POSCAR> | $ getdimer <input:POSCAR> <input:OUTCAR> <output:POSCAR> | ||
You will also need the program | |||
''''' SCRIPT ''''' | ''''' SCRIPT ''''' | ||
| Line 51: | Line 46: | ||
#!/bin/bash | #!/bin/bash | ||
# | # | ||
# Generates the POSCAR of a dimer calculation | # Generates the POSCAR of a dimer calculation from the non mass-weighted Hessian matrix | ||
# Rodrigo García-Muelas | # Rodrigo García-Muelas | ||
# | # November 14th, 2014. Tarragona. | ||
# | # | ||
# Use with VASP 5.x or higher | # Use with VASP 5.x or higher | ||
| Line 61: | Line 56: | ||
# $2 Path of the OUTCAR file containing the frequencies of the structure | # $2 Path of the OUTCAR file containing the frequencies of the structure | ||
# $3 <OUTPUT> POSCAR file | # $3 <OUTPUT> POSCAR file | ||
# | # | ||
# PART 0 - SECURITY CHECKS | # PART 0 - SECURITY CHECKS | ||
if [ -e $3 ] ; then | if [ -e $3 ] ; then | ||
echo "Warning! $3 already exist. Overwrite? (y/Y for yes)" | echo "Warning! $3 already exist. Overwrite? (y/Y for yes)" | ||
read overwrite | read overwrite | ||
case $overwrite in | case $overwrite in | ||
y|Y|Yes|yes|YES) echo "$3 will be overwriten" ;; | y|Y|Yes|yes|YES) echo "$3 will be overwriten" ;; | ||
*) echo "No actions taken " ; exit 1 ;; | *) echo "No actions taken " ; exit 1 ;; | ||
esac | esac | ||
fi | fi | ||
IBRION=`grep IBRION $2 | awk '{print $3}'` | IBRION=`grep IBRION $2 | awk '{print $3}'` | ||
if [[ $IBRION -gt "8" || $IBRION -lt "5" ]] ; then | if [[ $IBRION -gt "8" || $IBRION -lt "5" ]] ; then | ||
echo "$2 is not an OUTCAR of a frequency job." | echo "$2 is not an OUTCAR of a frequency job." | ||
echo "No actions taken" ; exit 1 ; fi | echo "No actions taken" ; exit 1 ; fi | ||
# PART 1 - READ POSCAR | # PART 1 - READ POSCAR AND PREPARE INPUTS | ||
cp $1 diagonalizer_poscar.tmp | |||
# PART 2 - READ OUTCAR | # PART 2 - READ OUTCAR | ||
grep | grep "Degrees of freedom DOF " $2 > temp01.tmp | ||
freedom=`awk '{print $6}' temp01.tmp` | |||
echo "$freedom" > diagonalizer_matrix.tmp | |||
grep -A $(($freedom+2)) 'SECOND DERIVATIVES' $2 > temp02.tmp | |||
cut -d ' ' -f3- temp02.tmp > temp03.tmp | |||
tail -n $freedom temp03.tmp >> diagonalizer_matrix.tmp | |||
# PART 3 - DIAGONALIZE | |||
/home/rgarcia/bin/exe/dimerdiag | |||
# | # PART 4 - CLEAN | ||
head -n 9 $1 > $3 | |||
cat | cat diagonalizer_taildm.tmp >> $3 | ||
mv -f diagonalizer_output.tmp eigenvectors.dat | |||
rm - | rm -fv *.tmp | ||
= Alternative (old) versions = | = Alternative (old) versions = | ||
WARNING: Some of the topics discussed by David Karhánek are outdated. For instance, it is not necessary to set NWRITE=3 for the frequency calculation: [[IDM-IRC]] [[get-dimer-dir.sh]] [[get-irc-path.sh]] (''by David Karhanek'') | WARNING: Some of the topics discussed by David Karhánek are outdated. For instance, it is not necessary to set NWRITE=3 for the frequency calculation: [[IDM-IRC]] [[get-dimer-dir.sh]] [[get-irc-path.sh]] (''by David Karhanek'') | ||
Revision as of 11:58, 18 November 2014
go back to Main Page, Computational Resources, Chemistry & More, Computational Codes, VASP, Scripts for VASP
Instructions
Before start, please read about the Improved Dimer Method [[1]].
1. Generate your initial guess for the structure (POSCAR). To this end, you can either pre-converge with a NEB calculation, or do it by hand.
2. Be sure the metal or solid phase is frozen and the molecule is relaxed. Do a frequency calculation based on your initial guess. Specify the following in your INCAR file:
frequencies: IBRION = 5 # EDIFF = 1E-7 # POTIM = 0.010 # NFREE = 2 #
3. Based on your POSCAR and OUTCAR of the frequencies calculation, generate in a new folder the input of the IDM with the getdimer script. For example:
getdimer ../freq/POSCAR ../freq/OUTCAR POSCAR
4. Specify the following in your INCAR file:
improved dimer method: IBRION = 44 # IDM EDIFFG = -0.015 # use force criteria POTIM = 0.100 # NFREE = 2 # FINDIFF= 2 # DIMER_DIST=0.010 # MINROT = 0.010 # STEP_SIZE= 0.010 # STEP_MAX= 0.100 # NSW = 500 #
Script
Please copy the following lines in your ~/bin folder. Recommended name: getdimer.
$ getdimer <input:POSCAR> <input:OUTCAR> <output:POSCAR>
You will also need the program
SCRIPT
#!/bin/bash
#
# Generates the POSCAR of a dimer calculation from the non mass-weighted Hessian matrix
# Rodrigo García-Muelas
# November 14th, 2014. Tarragona.
#
# Use with VASP 5.x or higher
#
# INPUT
# $1 Path of the POSCAR file containing the coordinates
# $2 Path of the OUTCAR file containing the frequencies of the structure
# $3 <OUTPUT> POSCAR file
#
# PART 0 - SECURITY CHECKS
if [ -e $3 ] ; then
echo "Warning! $3 already exist. Overwrite? (y/Y for yes)"
read overwrite
case $overwrite in
y|Y|Yes|yes|YES) echo "$3 will be overwriten" ;;
*) echo "No actions taken " ; exit 1 ;;
esac
fi
IBRION=`grep IBRION $2 | awk '{print $3}'`
if | $IBRION -lt "5" ; then
echo "$2 is not an OUTCAR of a frequency job."
echo "No actions taken" ; exit 1 ; fi
# PART 1 - READ POSCAR AND PREPARE INPUTS
cp $1 diagonalizer_poscar.tmp
# PART 2 - READ OUTCAR
grep "Degrees of freedom DOF " $2 > temp01.tmp
freedom=`awk '{print $6}' temp01.tmp`
echo "$freedom" > diagonalizer_matrix.tmp
grep -A $(($freedom+2)) 'SECOND DERIVATIVES' $2 > temp02.tmp
cut -d ' ' -f3- temp02.tmp > temp03.tmp
tail -n $freedom temp03.tmp >> diagonalizer_matrix.tmp
# PART 3 - DIAGONALIZE
/home/rgarcia/bin/exe/dimerdiag
# PART 4 - CLEAN
head -n 9 $1 > $3
cat diagonalizer_taildm.tmp >> $3
mv -f diagonalizer_output.tmp eigenvectors.dat
rm -fv *.tmp
Alternative (old) versions
WARNING: Some of the topics discussed by David Karhánek are outdated. For instance, it is not necessary to set NWRITE=3 for the frequency calculation: IDM-IRC get-dimer-dir.sh get-irc-path.sh (by David Karhanek)