IDM: Difference between revisions

From Wiki
Jump to navigation Jump to search
Rgarcia (talk | contribs)
mNo edit summary
Rgarcia (talk | contribs)
mNo edit summary
Line 3: Line 3:
= Instructions =
= Instructions =


'''# '''
# Generate your initial guess for the structure.
  To this end, you can either pre-converge with a NEB calculation, or do it by hand.


# 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:


# '''Specify the following in your INCAR file:'''
frequencies:
  IBRION =  5    #   
  EDIFF  =  1E-7  #
  POTIM  =  0.010 #                 
  NFREE  =  2    #
 
# Specify the following in your INCAR file:


  improved dimer method:
  improved dimer method:

Revision as of 11:45, 18 November 2014

go back to Main Page, Computational Resources, Chemistry & More, Computational Codes, VASP, Scripts for VASP

Instructions

  1. Generate your initial guess for the structure.
 To this end, you can either pre-converge with a NEB calculation, or do it by hand.
  1. 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     # 
  1. 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>

Example of use:

~/test/dimer$ getdimer ../freq/POSCAR ../freq/OUTCAR POSCAR

SCRIPT

#!/bin/bash
# 
# Generates the POSCAR of a dimer calculation
# Rodrigo García-Muelas
# July 18th, 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
# 
# 
# Indexes
# a number of line
# b number of column
# c number of lattice vector, related to a
# d number of element, related to a
#
# VECTORS
# lattice
# element 
# numelem
# coordin
# 

# 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  

a=0
totalelem=0
totalatom=0 

while read linea ; do   ##### 1 #####
a=$(($a+1)) ; b=0 ; d=$(($a-9)) ; line[$a]=$linea ;
# echo $a; #echo $line;  if [ $a -lt 10 ] ; then  echo "${line[$a]}" ;  fi 

for word in ${line[$a]} ; do   ##### 2 #####
b=$(($b+1))
#if [ $a -lt 10 ] ; then echo "previous to case a is $a" ; fi 

case $a in
1) title=${line[$a]} ;;
2) scaling=$word ;;
[3-5])  c=$(($a-2)) ; lattice[$c$b]=$word ;; #; echo "coordinates $c $b $word ${lattice[$c$b]}" 
6) totalelem=$(($totalelem+1)) ; element[$b]=$word ;;
7) numelem[$b]=$word ; totalatom=$(($totalatom+$word))  ;;
8) selective=${line[$a]} ;;
9) directcartesian=${line[$a]} ;;
*) coord[$d$b]=$word ;; # echo "${coord[$d$b]}" ;;
esac

#if [ $a -lt 10 ] ; then echo "word value is $word" ; fi

done ##### 2 #####

done < "$1"  ##### 1 ##### 


# PART 2 - READ OUTCAR 

grep -A $(($totalatom+1)) 'cm-1' OUTCAR > temp1.tmp
tail -n $totalatom temp1.tmp | awk '{printf " %12.6f%12.6f%12.6f\n",$4,$5,$6}' > temp2.tmp

# PART 3 - PRINT POSCAR  

touch $3
echo "$title " >$3
echo "$scaling " >>$3
echo "${lattice[11]}  ${lattice[12]}  ${lattice[13]} " >>$3
echo "${lattice[21]}  ${lattice[22]}  ${lattice[23]} " >>$3 
echo "${lattice[31]}  ${lattice[32]}  ${lattice[33]} " >>$3
echo "${element[1]}  ${element[2]}  ${element[3]}  ${element[4]}  ${element[5]}  ${element[6]}  ${element[7]}  ${element[8]}  ${element[9]}  ${element[10]}  ${element[11]}  ${element[12]}  ${element[13]}  ${element[14]}  ${element[15]}  ${element[16]}  ${element[17]}  ${element[18]}  ${element[19]}  ${element[20]} " >>$3
echo "${numelem[1]}  ${numelem[2]}  ${numelem[3]}  ${numelem[4]}  ${numelem[5]}  ${numelem[6]}  ${numelem[7]}  ${numelem[8]}  ${numelem[9]}  ${numelem[10]}  ${numelem[11]}  ${numelem[12]}  ${numelem[13]}  ${numelem[14]}  ${numelem[15]}  ${numelem[16]}  ${numelem[17]}  ${numelem[18]}  ${numelem[19]}  ${numelem[20]} " >>$3
echo "$selective " >>$3
echo "$directcartesian " >>$3
d=0 ; until [ $d -eq $(($totalatom*10)) ] ; do d=$(($d+10)) ; echo "${coord[$(($d+1))]}  ${coord[$(($d+2))]}  ${coord[$(($d+3))]}  ${coord[$(($d+4))]}  ${coord[$(($d+5))]}  ${coord[$(($d+6))]}  " >>$3 ; done
echo " " >>$3 

# PUT AS TAIL THE COORDINATES READ FROM THE OUTCAR 

cat temp2.tmp >> $3
echo ""       >> $3
rm -f temp?.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)